Προγραμματισμός II

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Εισαγωγή στο μάθημα

Καλώς ήρθατε

Προγραμματισμός II

Αυτοαξιολόγηση

Πόσο άνετα προγραμματίζετε στη Java;

Στόχοι του μαθήματος

Στόχος του μαθήματος είναι όσοι το παρακολουθήσουν να είναι σε θέση να:

Τρόπος διδασκαλίας

Οι σημειώσεις

Επικοινωνία

Βαθμολογία

Ο τελικός βαθμός κάθε φοιτήτριας ή φοιτητή θα βασίζεται σε 3 κριτήρια: Προσοχή:

Ασφαλιστικές δικλίδες

Βαθμολογία χωρίς ομαδική εργασία

Σε περίπτωση μη συμμετοχής στην ομαδική εργασία, για να είναι δίκαιος ο βαθμός για τα άτομα που κάνουν την ομαδική εργασία, υπολογίζεται διαφορετικά:

Αξιολόγηση συμμετοχής

HMAC QR participation token

Στατιστικά στοιχεία

Επιδόσεις στις εξετάσεις στο τέλος του εξαμήνου.
ΈτοςΕξετάσειςΑσκήσειςΒαθμόςΕπιτυχία
20267.28.97.782%
20257.58.77.883%
20236.98.87.682%
20226.98.37.578%
20217.79.17.580%
20187.79.18.593%
20178.08.88.390%
20167.29886%
20157.69.18.194%
20146.597.381%
20136.29.37.574%
20126.59.37.383%
20117.39.38.389%
20107.69.38.390%
200979.18.190%

Οι ασκήσεις

Χρήση του συστήματος των ασκήσεων jarpeb

Για να χρησιμοποιήσετε το σύστημα πρέπει:

Παράδοση της βαθμολογίας

Καθυστερημένη παράδοση

Χρήση ΠΤΝ

Για τη χρήση παραγωγικής τεχνητής νοημοσύνης (π.χ. ChatGPT, Claude, Bard, GitHub Copilot) ισχύουν τα εξής.

Διαθέσιμα συγγράμματα

Πρόσθετα δωρεάν συγγράμματα

Επίσης διαθέσιμα στις φοιτήτριες και στους φοιτητές του ΟΠΑ μέσω του HEAL-Link:

Βιβλιογραφία για προγραμματισμό

Βιβλιογραφία για τη Java

Επισκόπηση θεωρίας

Επισκόπηση των ασκήσεων

  1. εξοικείωση με τις ασκήσεις
  2. ορίσματα, εκφράσεις, βρόχοι και αποφάσεις
  3. δημιουργία αντικειμένων και πρόσβαση στις μεθόδους τους
  4. δημιουργία μιας κλάσης
  5. κληρονομικότητα
  6. παραγωγή και έλεγχος εξαιρέσεων
  7. προγραμματισμός με συμβολοσειρές
  8. μετασχηματισμός αρχείου κειμένου
  9. μια απλή γραφική εφαρμογή
  10. επεξεργασία XML
  11. επικοινωνία πελάτη-εξυπηρετητή
  12. χρήση νημάτων και παραμετρικών τύπων
  13. προγραμματισμός σε ζεύγη
  14. αναδρομικές συναρτήσεις
  15. μορφοποίηση
  16. διεπαφές

Δουλειά για το επόμενο μάθημα

Γλώσσες και περιβάλλοντα ανάπτυξης

Ιστορική ανασκόπηση

Διαδικασιακές γλώσσες

Σε μια αλγοριθμική (imperative) (ή προστακτική ή επιτακτική ή διαδικαστική (procedural)) γλώσσα το πρόγραμμα εκφράζει άμεσα τα βήματα που επιθυμούμε να εκτελέσει ο υπολογιστής.

Τιμές, τύποι και μεταβλητές

Εκφράσεις και τελεστές

Μηχανισμοί αφαίρεσης

Μηχανισμοί ελέγχου της ροής

Αντικειμενοστρεφείς γλώσσες

  • Χαρακτηριστικές γλώσσες: Smalltalk, Squeak, C++, Java, C#, Python, Ruby, JavaScript, TypeScript, Swift

    Συναρτησιακός προγραμματισμός

    Χαρακτηριστικά συναρτησιακού προγραμματισμού

    Γλώσσες ολοκλήρωσης

    Θέματα για μελέτη

    1. Τι κάνει μια γλώσσα κατάλληλη για την υλοποίηση επιχειρηματικών εφαρμογών;
    2. Με ποιον τύπο δεδομένων θα παραστήσετε στη Java χρηματικά ποσά; Δώστε παραδείγματα.

    Άσκηση: εξοικείωση με τις ασκήσεις

    Άσκηση 1

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Τεχνολογίες μεταγλώττισης και εκτέλεσης

    Το χάσμα υλικού και λογισμικού

    Οι δυνατότητες που προσφέρει το υλικό και το λογισμικό έρχονται συχνά σε αντίθεση ή αλληλοσυμπληρώνονται. Οι γλώσσες προγραμματισμού και τα λειτουργικά συστήματα είναι δύο τεχνολογίες που επιτρέπουν τη βέλτιστη συνύπαρξη του υλικού με το λογισμικό.

    Υλοποίηση γλωσσών προγραμματισμού

    Μια γλώσσα προγραμματισμού μπορεί - ανάλογα με τη γλώσσα - να υλοποιηθεί με τους παρακάτω τρόπους: καθώς και με συνδυασμούς τους.

    Αρχιτεκτονική του μεταγλωττιστή

    Η διεργασία της μεταγλώττισης μπορεί να διαχωριστεί στις παρακάτω ξεχωριστές λειτουργίες οι οποίες εκτελούνται σε διαδοχικές φάσεις:

    Λεκτική ανάλυση

    Ο λεκτικός αναλυτής παρέχει τις παρακάτω λειτουργίες: Με τον τρόπο αυτό διαχωρίζονται οι εργασίες της λεκτικής και της συντακτικής ανάλυσης και κάθε μια υλοποιείται με τον πιο αποδοτικό τρόπο.

    Λεκτικές μονάδες

    Χρήση λεκτικών μονάδων

    Η σημασία των σημείων στοίξης

    Η σημασία των σημείων στοίξης

    Ο συντακτικός αναλυτής

    Ο συντακτικός αναλυτής:

    Παράδειγμα

    
        i = 0;
        while ( i < 10) {
            System.out.println(i);
            i = i + 1;
        }
    

    (Το δέντρο μπορεί να κατασκευαστεί και ζωντανά από 17 άτομα.)

    Συντακτικό δένδρο

    Parse graph

    Παραγωγή κώδικα

    Η παραγωγή κώδικα αποτελεί το πιο ενδιαφέρον και σύνθετο στάδιο της μεταγλώττισης. Κατά το στάδιο αυτό μπορούν να υλοποιηθούν τεχνικές βελτιστοποίησης προσανατολισμένες στη συγκεκριμένη γλώσσα ή αρχιτεκτονική και να υλοποιηθούν αλγόριθμοι βέλτιστης χρήσης των στοιχείων της αρχιτεκτονικής. Η παραγωγή του τελικού εκτελέσιμου κώδικα μπορεί να διακριθεί στα παρακάτω στάδια:

    Βελτιστοποίηση του ενδιάμεσου κώδικα

    Η βελτιστοποίηση του κώδικα μετασχηματίζει τον κώδικα σε μια μορφή που παράγει τα ίδια αποτελέσματα με τον αρχικά αλλά βελτιωμένα κάποια κριτήρια απόδοσης. Τέτοια κριτήρια μπορεί να είναι:

    Πλεονεκτήματα βελτιστοποίησης

    Η βελτιστοποίηση μπορεί να απαλλάξει τον προγραμματιστή από αντιπαραγωγικές αλλαγές του κώδικα που έχουν ως στόχο να ικανοποιήσουν τα κριτήρια αυτά και να του επιτρέψει να συγκεντρωθεί σε άλλα ποιοτικά στοιχεία του παραγόμενου κώδικα όπως την ορθότητα, την ασφάλεια, τη διαθεσιμότητα, τη συντηρησιμότητα, και τη μεταφερσιμότητα. Συχνά βελτιστοποιήσεις που γίνονται από τον προγραμματιστή έρχονται σε αντίθεση με τα παραπάνω ποιοτικά στοιχεία.

    Παράδειγμα βελτιστοποίησης

    Απαλοιφή κοινών υποεκφράσεων (common subexpression elimination)
    Εκφράσεις με κοινά στοιχεία υπολογίζονται μόνο μια φορά. Η ακολουθία:
    
    x = b / c;
    y = 42 + b / c;
    
    μετασχηματίζεται στην ακολουθία:
    
    x = b / c;
    y = 42 + x;
    

    Παράδειγμα βελτιστοποίησης

    Μετακίνηση κώδικα βρόχων (loop code motion)
    Εκφράσεις που δεν αλλάζουν μέσα σε ένα βρόχο μετακινούνται έξω από αυτόν. Η ακολουθία:
    
    {
        int a, b, z;
    
        a = 8; b = 4;
        for (i = 0; i < 10; i++) {
            z = a / b;
            System.out.println(z);
        }
    }
    
    μετασχηματίζεται στην ακολουθία:
    
    {
        int a, b, z;
    
        a = 8; b = 4;
        z = a / b;
        for (i = 0; i < 10; i++) {
            System.out.println(z);
        }
    }
    

    Παράδειγμα βελτιστοποίησης

    Απαλοιφή άχρηστου κώδικα (dead code removal)
    Κώδικας που δεν εκτελείται ποτέ απαλείφεται. Η ακολουθία:
    
    {
        int a, q;
    
        q = 48;
        return (q);
        a = q / 2;
    }
    
    μετασχηματίζεται στην ακολουθία:
    
    {
        int a, q;
    
        q = 48;
        return (q);
    }
    

    Παράδειγμα βελτιστοποίησης

    Απαλοιφή κλήσεων σε συναρτήσεις (function inlining)
    Κλήσεις σε συναρτήσεις μετασχηματίζονται σε απευθείας χρήση του αντίστοιχου κώδικα. Η ακολουθία:
    
    static int
    square(int a) {
        return (a * a);
    }
    
    public static void main(String args[]) {
        System.out.println(square(12));
    }
    
    μετασχηματίζεται στην ακολουθία:
    
    public static void main(String args[]) {
        System.out.println(12 * 12);
    }
    

    Παράδειγμα βελτιστοποίησης

    Απαλοιφή αναδρομής από το τέλος συνάρτησης (tail recursion elimination)
    Αναδρομή στο τέλος μιας συνάρτησης μετασχηματίζεται σε βρόχο. Η ακολουθία:
    
    foo() {
        System.out.println("foo");
        foo();
    }
    
    μετασχηματίζεται στην ακολουθία:
    
    foo() {
        for (;;)
            System.out.println("foo");
    }
    

    Βελτιστοποίηση του τελικού κώδικα

    Συχνά ο τελικός κώδικας που παράγεται μπορεί να περιέχει ακολουθίες εντολών οι οποίες να μπορούν να βελτιστοποιηθούν για το συγκεκριμένο επεξεργαστή. Οι ακολουθίες αυτές μπορούν να βρεθούν εξετάζοντας ένα μικρό παράθυρο του τελικού κώδικα, όπως αυτό θα φαίνονταν κοιτάζοντας τον κώδικα από μια κλειδαρότρυπα. Για το λόγο αυτό οι βελτιστοποιήσεις αυτές λέγονται και βελτιστοποιήσεις κλειδαρότρυπας (peephole optimizations).

    Παράδειγμα βελτιστοποίησης τελικού κώδικα

    Η ακολουθία:
    
        mov $12, %rax
        mov %rax, %rbx
        mov $20, %rax
    
    μετασχηματίζεται στην ακολουθία:
    
        mov $12, %rbx
        mov $20, %rax
    
    Επίσης η διάταξη των εντολών μπορεί να βελτιωθεί για να γίνεται καλύτερη χρήση πολλαπλών υπολογιστικών στοιχείων που διαθέτει ο επεξεργαστής. Για παράδειγμα σε ορισμένους επεξεργαστές η εναλλαγή εντολών κινητής υποδιαστολής με εντολές ακεραίων επιτρέπει στις δύο λειτουργικές μονάδες να δουλεύουν παράλληλα.

    Σύνδεση

    Κατά τη σύνδεση τα ανεξάρτητα μεταγλωττισμένα τμήματα του προγράμματος συνδέονται μεταξύ τους και με τις βιβλιοθήκες της γλώσσας για να δημιουργηθεί το τελικό εκτελέσιμο πρόγραμμα. Συχνά οι βιβλιοθήκες που χρησιμοποιούνται είναι κοινές ανάμεσα σε προγράμματα και φορτώνονται δυναμικά κατά το στάδιο εκτέλεσης του προγράμματος (Unix shared libraries, Windows DLLs). Κατά τη φάση της σύνδεσης γίνεται έλεγχος πως όλες οι συναρτήσεις και μεταβλητές που χρησιμοποιούνται έχουν οριστεί και, για ορισμένες γλώσσες όπως η C++, πως οι τύποι των συμβόλων που έχουν οριστεί σε διαφορετικά αρχεία είναι συμβατοί μεταξύ τους. Ορισμένες γλώσσες όπως η Java υλοποιούν μεγάλο μέρος της σύνδεσης κατά τη φόρτωση του προγράμματος στη μνήμη για εκτέλεση.

    Ιδεατές μηχανές

    Μια ιδεατή μηχανή (virtual machine) εμφανίζει στο λογισμικό που τρέχει πάνω σε αυτήν μια διαφορετική διεπαφή από αυτή στην οποία βασίζεται η μηχανή για την υλοποίησή της. Συχνά οι ιδεατές μηχανές υλοποιούνται σε ιεραρχία.

    Πλεονεκτήματα και προβλήματα ιδεατών μηχανών

    Διαχείριση μνήμης

    Κατά τη διάρκεια ζωής του προγράμματος υπάρχουν απαιτήσεις για τη φύλαξη δεδομένων με διαφορετική διάρκεια ζωής. Συγκεκριμένα, πρέπει να υπάρχει υποστήριξη για δεδομένα που διατηρούνται:

    Παράδειγμα διάταξης μνήμης

    Στοίβα (stack)
    ...

    ...
    Σωρός (heap)
    (Δυναμική μνήμη)
    ...
    Στατικά δεδομένα (static data)
    ...
    Μεταγλωττισμένος κώδικας (code (text))

    Τρόποι διαχείρισης μνήμης

    Όταν ο όγκος της κύριας μνήμης του υπολογιστή δεν επαρκεί μπορεί να χρησιμοποιηθεί:

    Τέλος, για οικονομία στο χώρο που απαιτεί ο κώδικας των προγραμμάτων σε δευτερεύουσα αποθήκευση, χρησιμοποιούνται συχνά μοιρασμένες βιβλιοθήκες (shared libraries) (π.χ. .DLL, .so).

    Άσκηση: ορίσματα, εκφράσεις, βρόχοι και αποφάσεις

    Άσκηση 2

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Προγραμματισμός με αντικείμενα

    Αντικείμενα

    Κλάσεις

    Δημιουργία νέων αντικειμένων

    Καθορισμός μνήμης αντικειμένων με new

    Καθορισμός μνήμης αντικειμένων με αναφορά

    Κλήση μεθόδων

    Πρόσβαση σε ιδιότητες

    Ορατότητα

    Παράδειγμα: Point

    
    class Point {
      // Public fields
      public int x, y;
      private boolean visible;
      private int serialNumber;
      // Private method
      private void setpos(int sx, int sy) {
        x = sx;
        y = sy;
      }
      // Public methd
      public void moveToCenter() {
        setpos(0, 0);
      }
    
    }
    

    Παράδειγμα: TestPoint

    
    class TestPoint {
      public static void main(String args[])
      {
        Point a;
    
        a = new Point();
        a.moveToCenter();
        // Use public field
        a.x = 10;
      }
    }
    

    Μέθοδοι κατασκευαστές

    Κλήση κατασκευαστών

    Ιδιότητες και μέθοδοι κλάσης

    Δήλωση μεταβλητών με var

    Παράδειγμα: εύρεση ημέρας

    
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    class FindDay {
      /** Return the name of the given numeric week day */
      public static String weekDayName(int weekNumber) {
        return switch (weekNumber) {
          case Calendar.MONDAY -> "Δευτέρα";
          case Calendar.TUESDAY -> "Τρίτη";
          case Calendar.WEDNESDAY -> "Τετάρτη";
          case Calendar.THURSDAY -> "Πέμπτη";
          case Calendar.FRIDAY -> "Παρασκευή";
          case Calendar.SATURDAY -> "Σάββατο";
          case Calendar.SUNDAY -> "Κυριακή";
          default -> throw new IllegalStateException("Unexpected value: " + weekNumber);
        };
      }
    
      public static void main(String args[]) throws Exception {
      // ...
    }
    

    Παράδειγμα: εύρεση ημέρας (main)

    
      public static void main(String[] args) throws Exception {
          // Are appropriate arguments given?
          if (args.length != 3) {
            System.err.println("usage: FindDay year month day");
            System.exit(1);
          }
    
          // Parse year, month, day
          int year = Integer.parseInt(args[0]);
          int month = Integer.parseInt(args[1]) - 1;
          int monthDay = Integer.parseInt(args[2]);
    
          // Set the calendar and calculate the day name
          var d = new GregorianCalendar(year, month, monthDay);
          String dn = weekDayName(d.get(Calendar.DAY_OF_WEEK));
    
          // Print the day name
          System.out.println(dn);
        }
    

    Μέθοδοι όλων των αντικειμένων

    Άσκηση: δημιουργία αντικειμένων και πρόσβαση στις μεθόδους τους

    Άσκηση 3

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Δημιουργία κλάσεων

    Ορισμός κλάσεων

    Ορισμός πεδίων υπόστασης

    Ορισμός μεθόδων υπόστασης

    Πρόσβαση στα μέλη της κλάσης

    Πρόσβαση στα μέλη της κλάσης: παράδειγμα

    Μέθοδοι κατασκευής

    Μέθοδοι κατασκευής: παράδειγμα

    
    class Point {
        /* Fields */
    
        /** Point x coordinate */
        private int x;
        /** Point y coordinate */
        private int y;
    
        /* Methods */
        /** Default constructor */
        Point() { x = y = 0; }
        /** Constructor with coordinates */
        Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    

    Έλεγχος πρόσβασης

    Κάθε μέθοδος ή πεδίο μπορεί να έχει ως προσδιοριστή
    public
    Το μέλος είναι ορατό σε όλες τις άλλες κλάσεις
    private
    Το μέλος είναι ορατό μόνο στις μεθόδους της δικής μας κλάσης
    (τίποτα)
    Το μέλος είναι ορατό στις κλάσεις του πακέτου μας
    Μια καλοσχεδιασμένη κλάση έχει:

    Ορισμός ιδιοτήτων και μεθόδων κλάσης

    Παράδειγμα ιδιοτήτων και μεθόδων κλάσης

    Μπλοκ αρχικοποίησης

    Σε ανώνυμα μπλοκ { } στο σώμα της κλάσης μπορεί να τοποθετηθεί:

    Μπλοκ αρχικοποίησης: παράδειγμα

    
    import java.util.concurrent.ThreadLocalRandom;
    
    class IdentifiedPoint {
        private double x, y;
        /** Unique point identifier */
        int identifier;
        /** Provide an identifier for each point */
        private static int nextIdentifier;
    
        /** Class initialization block */
        static {
            nextIdentifier = ThreadLocalRandom.current().nextInt();
        }
    
        /** Instance initialization block */
        {
            identifier = nextIdentifier++;
        }
    
        /** Point constructor */
        IdentifiedPoint(int ix, int iy) {
            x = ix;
            y = iy;
        }
        /** Point constructor */
        IdentifiedPoint() {
            x = y = 0;
        }
    
        static public void main(String args[]) {
            var a = new IdentifiedPoint(1, 2);
            var b = new IdentifiedPoint();
            System.out.println(a.identifier);
            System.out.println(b.identifier);
        }
    }
    

    Εσωτερικές κλάσεις

    Μια κλάση μπορεί να οριστεί εσωτερικά:

    Παράδειγμα εσωτερικής κλάσης

    
    class Rectangle {
        private static class Point {
            private int x, y;
    
            /** Point constructor */
            Point(int ix, int iy) {
                x = ix;
                y = iy;
            }
        }
    
        private Point topLeft, bottomRight;
    
        /** Rectangle constructor */
        Rectangle(int x, int y, int height, int width) {
            topLeft = new Point(x, y);
            bottomRight = new Point(x + width, y + height);
        }
    }
    

    Παράδειγμα ανώνυμης κλάσης

    
    class InnerCall {
        public static void main(String args[]) {
            System.out.println(new Object());
            System.out.println(new Object() {
                @Override
                public String toString() {
                    return "I am a woke object";
                }
            });
        }
    }
    

    Απαριθμήσεις

    Παράδειγμα

    
    enum Ingredients {
      TOMATO,
      ONION,
      TZATZIKI,
      POTATO,
      MUSTARD,
      SOUVLAKI,
      GYROS
    }
    

    Χρήση απαριθμήσεων

    Απαρίθμηση ως κλάση

    Η αντίστοιχη κλάση χωρίς τη χρήση απαρίθμησης θα είχε την παρακάτω μορφή.
    
    public class Ingredients {
        // Static array to hold all ingredient constants
        private static final Ingredients[] VALUES = new Ingredients[7];
    
        // Constants with names and ordinal values
        public static final Ingredients TOMATO = new Ingredients("TOMATO", 0);
        public static final Ingredients ONION = new Ingredients("ONION", 1);
        public static final Ingredients TZATZIKI = new Ingredients("TZATZIKI", 2);
        public static final Ingredients POTATO = new Ingredients("POTATO", 3);
        public static final Ingredients MUSTARD = new Ingredients("MUSTARD", 4);
        public static final Ingredients SOUVLAKI = new Ingredients("SOUVLAKI", 5);
        public static final Ingredients GYROS = new Ingredients("GYROS", 6);
    
        private final String name;
        private final int ordinal;
    
        private Ingredients(String name, int ordinal) {
            this.name = name;
            this.ordinal = ordinal;
            VALUES[ordinal] = this;  // Add to the static array
        }
    
        // Getters
        public int ordinal() {
            return ordinal;
        }
    
        public String getName() {
            return name;
        }
    
        public static Ingredients[] values() {
            return VALUES.clone();  // Return a copy of the array
        }
    
        public static Ingredients valueOf(String name) {
            for (Ingredients ingredient : VALUES) {
                if (ingredient.name.equals(name)) {
                    return ingredient;
                }
            }
            throw new IllegalArgumentException("No enum constant " + name);
        }
    
        @Override
        public String toString() {
            return name;
        }
    }
    

    Πολυμορφισμός με ταίριαγμα προτύπων

    Με εντολές switch μπορούμε να γράψουμε κώδικα για συγκεκριμένους τύπους με βάση το ταίριασμα προτύπων (pattern matching).
    
    class PaternMatch {
    
        class RetailCustomer {}
        class BusinessCustomer {}
    
        /** Return the document a given object shall receive */
        private static String documentName(Object o) {
            return switch (o) {
                case RetailCustomer rc -> "receipt";
                case BusinessCustomer bc -> "invoice";
                default -> "unknown document";
            };
        }
    
        public static void main(String[] args) {
            var retailCustomer = new RetailCustomer();
            var businessCustomer = new BusinessCustomer();
            System.out.println("Retail customer gets "
                    + documentName( retailCustomer));
            System.out.println("Business customer gets "
                    + documentName(businessCustomer));
        }
    }
    

    Εγγραφές

    Παράδειγμα

    
    public class RecordDemo {
        record Point(int x, int y) {}
    
        public static void main(String[] args) {
            var a = new Point(5, 12);
            System.out.println("Point " + a + " has magnitude "
                    + Math.hypot(a.x(), a.y()));
        }
    }
    

    Εγγραφή ως κλάση

    Η αντίστοιχη κλάση χωρίς τη χρήση εγγραφής θα είχε την παρακάτω μορφή.
    
    import java.util.Objects;
    
    public final class Point {
        private final int x;
        private final int y;
    
        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        // Getters
        public int x() { return x; }
        public int y() { return y; }
    
        // Object methods
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Point point = (Point) o;
            return x == point.x && y == point.y;
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(x, y);
        }
    
        @Override
        public String toString() {
            return "Point[" + "x=" + x + ", y=" + y + ']';
        }
    }
    

    Ταίριαγμα προτύπων σε εγγραφές

    Σε εγγραφές μπορούμε να ταιριάξουμε και τα ορίσματά τους.
    
    class PaternMatch {
    
        record Point2D(double x, double y) {}
        record Point3D(double x, double y, double z) {}
    
        /** Output the magnitude of the specified object */
        private static void printMagnitude(Object o) {
            System.out.println("Magnitude of " + o + " is " +
                switch (o) {
                    case Point2D(double x, double y) -> Math.sqrt(x * x + y * y);
                    case Point3D(double x, double y, double z) ->
                        Math.sqrt(x * x + y * y + z * z);
                    default -> throw new IllegalArgumentException("Unexpected type: "
                            + o.getClass().getName());
                }
            );
        }
    
        public static void main(String[] args) {
            printMagnitude(new Point2D(3, 4)); // Pythagorean triple
            printMagnitude(new Point3D(1, 4, 8)); // Pythagorean quadruple
        }
    }
    

    Το σχεδιαστικό πρότυπο singleton

    Παράδειγμα singleton

    Άσκηση: δημιουργία μιας κλάσης

    Άσκηση 4

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Κληρονομικότητα

    Εισαγωγή

    Διάγραμμα κληρονομικότητας

    Κληρονομικότητα σε κλάσεις

    Υπερφόρτωση

    Παράδειγμα: σχήματα

    
    class Shape {
        private int x, y;       // Position
        public void setPosition(int px, int py) {
            x = px;
            y = py;
        }
    
        @Override public String toString() {
            return "Shape(" + x + ", " + y + ")";
        }
    }
    
    class Circle extends Shape {
        private int radius;
        public void setRadius(int r) {
            radius = r;
        }
    
        @Override public String toString() {
            return super.toString() + ": Circle(" + radius + ")";
        }
    }
    
    class Rectangle extends Shape {
        private int height, width;
    
        public void setDimensions(int h, int w) {
            height = h;
            width = w;
        }
    
        @Override public String toString() {
            return super.toString() + ": Rectangle(" + height + " x " + width + ")";
        }
    }
    
    class Test1 {
        static public void main(String args[])
        {
            Circle c = new Circle();
            Rectangle r = new Rectangle();
    
            r.setPosition(1, 2);
            r.setDimensions(50, 50);
            c.setPosition(3, 4);
            c.setRadius(10);
            System.out.println(r);
            System.out.println(c);
        }
    }
    

    Σχήματα: διάγραμμα

    Ο προσδιοριστής protected

    Δυναμική διεκπεραίωση

    Παράδειγμα δυναμικής διεκπεραίωσης

    
    static public void main(String args[])
    {
        Rectangle r = new Rectangle();
        Shape s;
    
        r.setPosition(1, 2);
        r.setDimensions(50, 50);
        s = r;
        s.setPosition(10, 20);
        System.out.println(r);
        System.out.println(s);
        r = (Rectangle)s;
    }
    

    Λειτουργία δυναμικής διεκπεραίωσης

    Πλεονεκτήματα της δυναμικής διεκπεραίωσης

    Σφραγισμένες κλάσεις

    Με τους προσδιοριστές sealed και permits μπορούμε να ορίσουμε ποιες κλάσεις επιτρέπεται να επεκτείνουν τη μητρική κλάση.
    
    public sealed class Shape permits Circle, Rectangle {
    }
    
    class Circle extends Shape {
    }
    
    class Rectangle extends Shape {
    }
    

    Αφηρημένες κλάσεις

    Σχεδιάζοντας με αφηρημένες κλάσεις

    Παράδειγμα: σχήματα

    Σχήματα: ο κώδικας

    
    abstract class Shape {
        private double x, y;        // Position
        protected double getX() { return x; }
        protected double getY() { return y; }
        public void setposition(double px, double py) {
            x = px;
            y = py;
        }
        public abstract double area();
        @Override public String toString() {
            return "Shape(x=" + x + ", y=" + y + ", area=" + area() + ")";
        }
    }
    
    class Circle extends Shape {
        private double radius;
        public void setradius(double r) {
            radius = r;
        }
        @Override public double area() {
            return Math.PI * radius * radius;
        }
        @Override public String toString() {
            return super.toString() + ": Circle(" + radius + ")";
        }
    }
    
    class Rectangle extends Shape {
        private double height, width;
        public void setdimensions(double h, double w) {
            height = h;
            width = w;
        }
        @Override public double area() {
            return height * width;
        }
        @Override public String toString() {
            return super.toString() + ": Rectangle(" + height + " x " + width + ")";
        }
    }
    
    class Test2 {
        static public void main(String args[])
        {
            Circle c = new Circle();
            Rectangle r = new Rectangle();
            Shape s[] = new Shape[2];
    
            s[0] = r;
            r.setposition(1, 2);
            r.setdimensions(50, 50);
    
            s[1] = c;
            c.setposition(3, 4);
            c.setradius(10);
            for (int i = 0; i < s.length; i++)
                System.out.println(s[i]);
        }
    }
    
    Το παραπάνω πρόγραμμα θα τυπώσει:
    Shape(x=1.0, y=2.0, area=2500.0): Rectangle(50.0 x 50.0)
    Shape(x=3.0, y=4.0, area=628.3185307179587): Circle(10.0)
    

    Τελικές μεταβλητές

    Τελικά ορίσματα

    Τελικά πεδία

    Πόσα σχόλια είναι αρκετά;

    Unneeded comments

    Σχόλια για τα σχόλια

    Έλεγχοι

    Τι να αποφεύγετε

    Οδηγίες και παράδειγμα μορφοποίησης κώδικα

    
    /*
     * Όνομα της κλάσης
     *
     * Copyright έτος όνομα/οργανισμός.
     */
    
    
    
    
    package gr.aueb.dmst.Package;
    
    
    
    import java.blah.blough.bligh;
    
    
    
    
    /**
     * Σύνοψη της κλάσης σε μια γραμμή.
     * Αναλυτική περιγραφή της κλάσης.
     *
     * @version     1.82 18 Mar 1999
     * @author      Όνομα Επώνυμο
     */
    
    
    public class SpecialHtmlParser extends FileHtmlParser {
    
    
        /*
         * Εδώ γράφεται το σχόλιο υλοποίησης της κλάσης.
         */
    
    
    
        /** Σύνοψη του πεδίου κλάσης classVar1 */
        public static int classVar1;
    
    
    
        /** Σύνοψη του πεδίου κλάσης classVar2 */
        protected static int classVar2;
    
    
    
        /** Σύνοψη του πεδίου κλάσης classVar3 */
        static int classVar3;
    
    
    
        /** Σύνοψη του πεδίου κλάσης classVar3 */
        private static Object classVar3;
    
    
    
        /**
         * Σύνοψη του πεδίου υπόστασης instanceVar1
         * Εκτενής επεξήγηση του πεδίου instanceVar1 σε πολλαπλές
         * γραμμές
         */
        public int instanceVar1;
    
    
    
        /** Σύνοψη του πεδίου υπόστασης instanceVar2 */
        protected int instanceVar2;
    
    
    
        /** Σύνοψη του πεδίου υπόστασης instanceVar3 */
        static int instanceVar3;
    
    
    
        /** Σύνοψη του πεδίου υπόστασης instanceVar4 */
        private Object instanceVar4;
    
    
    
        /** Construct a parser for the specified HTML dialect. */
        SpecialHtmlParser(string dialect, int maxNesting) {
            // Κώδικας
        }
    
    
    
        /** Construct a default HTML parser. */
        SpecialHtmlParser(string dialect, int maxNesting) {}
    
    
    
        /**
         * Σύνοψη της μεθόδου.
         * Εκτενής επεξήγηση της μεθόδου σε πολλαπλές
         * γραμμές.
         */
        public void doSomething() {
    
    
        int nLines = 0;                // HTML lines in the file
        int nChars = 0                // Number of characters in the file
        int i;
        double averageDensity = 1.;        // Average density of comments in the file
        Car transport;                // Transport to use
    
    
    
            for (;;)
                a++;
    
    
            for (int j = 0; j < 10; j++) {
                a++;
                b++;
            }
    
    
            while (a < 10) {
                a++;
                b += 12;
            }
    
    
            while (a < 10) {
                a++;
                for (int i = 0; i < 10; i++)
                    b += 12;
            }
    
    
            do {
                a++;
                b += 12;
            } while (a < 10);
    
    
            switch (c) {
            case 'a':
                system.out.println("Alpha");
                break;
            case 'b':
                system.out.println("Bravo");
                break;
            case 'c':
                system.out.println("Charlie");
                break;
            default:
                system.out.println("???");
                break;
            }
    
    
            if (a == 3) {
                system.out.println("Threee");
                k = 52;
            }
    
    
            if (a == 3) {
                system.out.println("Three");
                k = 52;
            } else {
                system.out.println("Not three");
                k = 55;
            }
    
    
            if (a == 3)
                system.out.println("Three");
            else
                system.out.println("Not three");
    
    
            if (s.equals("a")
                system.out.println("Alpha");
            else if (s.equals("b")
                system.out.println("Bravo");
            else if (s.equals("c")
                system.out.println("Charlie");
            else
                system.out.println("???");
    
    
            try {
                i = 12;
                o.myMethod();
            } catch (ExceptionClass e) {
                statements;
            } finally {
                statements;
            }
    
    
        if (a && !b) {
            a = 2 * (3 + 8) % 15;
            k = a.myMethod(q, b, c);
        }
        return k;
    
    
       /**
        * Returns an Image object that can then be painted on the screen.
        * The url argument must specify an absolute {@link URL}. The name
        * argument is a specifier that is relative to the url argument.
        * <p>
        * This method always returns immediately, whether or not the
        * image exists. When this applet attempts to draw the image on
        * the screen, the data will be loaded. The graphics primitives
        * that draw the image will incrementally paint on the screen.
        *
        * @param  url  an absolute URL giving the base location of the image
        *         name the location of the image, relative to the url argument
        * @return      the image at the specified URL
        * @see         Image
        */
        public Image getImage(URL url, String name) {
            try {
                return getImage(new URL(url, name));
            } catch (MalformedURLException e) {
                return null;
            }
        }
    
    
         /*
          * A non-javadoc comment with a special keyword
          * (recommended keywords in parenthesis)
          *
          * (XXX, FIXME, TODO): The comment
          */
    
    Σημείωση: οι στηλοθέτες (tab) πρέπει να αντιστοιχούν σε 8 κενά, έστω και αν πάντα η στοίχιση γίνεται σε 4 κενά. Στο διορθωτή vim οι σωστές ρυθμίσεις είναι:
    set shiftwidth=4
    set smarttab
    

    Βιβλιογραφία

    Πρόσθετες πληροφορίες

    Ασκήσεις

    Άσκηση 15

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Γενικεύσεις και νήματα

    Παραμετρικοί τύποι

    Παράδειγμα: ζευγάρι

    
    class Pair <E1, E2> {
        private final E1 element1;
        private final E2 element2;
        public Pair(final E1 e1, final E2 e2) {
            element1 = e1;
            element2 = e2;
        }
        public E1 getFirst() {
            return element1;
        }
        public E2 getSecond() {
            return element2;
        }
        @Override
        public String toString() {
            return "(" + element1.toString() + ", " + element2.toString() + ")";
        }
    }
    
    class Sock {}
    class Man {}
    class Woman {}
    
    class Test {
        public static void main(String args[]) {
            Pair <Sock, Sock> pairOfSocks;
            Pair <Man, Woman> churchMarriedCouple;
            Pair <Man, Man> civilPartners;
        }
    }
    

    Παραμετρικοί τύποι στη Java

    Παραμετρικοί τύποι μπαλαντέρ

    Παράδειγμα γενίκευσης

    
    class LinkedList <E> {
        /** Node's value */
        private E value;
        /** Next node */
        private LinkedList <E> next;
    
        /** Construct a list with a single element v */
        LinkedList(final E v) {
            value = v;
            next = null;
        }
    
        /** Return a list with element n added to it */
        public LinkedList <E> add(final E v) {
            var n = new LinkedList <E>(v);
            n.next = this;
            return n;
        }
    
        /** Return a string representation of the list */
        @Override
        public String toString() {
            final String me = value.toString();
    
            /* Recursive implementation */
            if (next == null)
                return me;
            else
                return me + " -> " + next;
        }
    
        /** Test harness */
        static public void main(String args[]) {
            var ilst = new LinkedList <Integer>(0);
    
            ilst = ilst.add(1);
            ilst = ilst.add(18);
            ilst = ilst.add(45);
    
            for (int i = 0; i < 5; i++)
                ilst = ilst.add(i * 10);
            System.out.println(ilst);
        }
    }
    

    Παράδειγμα υπερφόρτωσης μεθόδων

    
    double
    square(final double x)
    {
      return x * x;
    }
    
    Complex
    square(final Complex x)
    {
      return new Complex(
        square(x.real) + square(x.imaginary),
        2 * x.real + x.imaginary);
    }
    

    Ανακεφαλαίωση πολυμορφισμού

    Έχουμε στο σημείο αυτό εξετάσει όλα τα είδη πολυμορφισμού (polymorphism):

    Χρήση πολυμορφισμού

    Σε συνηθισμένες εφαρμογές σχεδιάζουμε συχνά με κληρονομικότητα διεπαφών, ενώ συναντάμε:

    Διάγραμμα πολυμορφισμού

    polymorpism types

    Νήματα

    Αδιέξοδο

    ="Παράδειγμα"

    Νήματα: προβλήματα

    Όταν υλοποιούμε κώδικα με νήματα δημιουργούνται συχνά προβλήματα συγχρονισμού που πρέπει να αντιμετωπίσουμε. Τα στοιχεία αυτά δεν καλύπτονται στο συγκεκριμένο μάθημα.
  • Νήματα: εναλλακτικές

    Αντί για νήματα μπορούμε συχνά να χρησιμοποιήσουμε

    Ορισμός νήματος στη Java

    Χρήση νήματος στη Java

    Παράδειγμα χρήσης νημάτων

    
    public class CocktailGuest implements Runnable {
        /** What the guest will say */
        private final String mumble;
        /** How many seconds will he/she pause before speaking */
        private final int pause;
        /** How long the guest will stay */
        private final int stay;
        /** How long the guest has stayed */
        private int hereFor;
    
        /** Constructor */
        public CocktailGuest(String mumble, int pause, int stay) {
            this.mumble = mumble;
            this.pause = pause;
            this.stay = stay;
            hereFor = 0;
        }
    
        /** Execution method */
        @Override
        public void run() {
            try {
                while (hereFor < stay) {
                    Thread.sleep(pause * 1000);
                    hereFor += pause;
                    System.out.println(mumble);
                }
            } catch (InterruptedException e) {
                System.out.println("Something has come up; got to go.");
                return;
            } finally {
                System.out.println("Good bye.");
            }
        }
    
        public static void main(String args[]) {
            final int NGUEST = 5;
            var guest = new CocktailGuest[NGUEST];
            var thread = new Thread[NGUEST];
    
            int i = 0;
            guest[i++] = new CocktailGuest("Can I have another drink?", 8, 30);
            guest[i++] = new CocktailGuest("Nice food!", 7, 120);
            guest[i++] = new CocktailGuest("Ha ha ha...", 3, 100);
            guest[i++] = new CocktailGuest("Hi, I am Maria.", 5, 60);
            guest[i++] = new CocktailGuest("Hello, I am Petros.", 15, 60);
    
            // Create the threads
            for (i = 0; i < NGUEST; i++)
                thread[i] = new Thread(guest[i]);
            // Start the threads
            for (i = 0; i < NGUEST; i++)
                thread[i].start();
        }
    }
    

    Άσκηση: χρήση παραμετρικών τύπων και νήματα

    Άσκηση 12

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Δημιουργία γραφικών εφαρμογών

    Στοιχεία της εφαρμογής

    Οι εφαρμογές μπορούν διαχωριστούν ανάλογα με την μέθοδο διεπαφής με τον χρήστη σε

    Συστατικά εισαγωγής δεδομένων

    Συστατικά εμφάνισης δεδομένων

    Επίδειξη συστατικών

    Κατεβάστε και τρέξτε το πρόγραμμα SwingSet2.jar.

    Προγραμματιστική διεπαφή συστατικών

    Παράθυρο (javax.swing.JFrame, Κλάση)

    Παράδειγμα: ένα κενό παράθυρο

    Το παρακάτω παράδειγμα δημιουργεί ένα κενό παράθυρο, θέτει ως τίτλο το αλφαριθμητικό "Hello, World!" και το εμφανίζει.

    
    import javax.swing.JFrame;
    
    public class Window {
        public static void main(String[] args) {
            JFrame jf = new JFrame("Hello, World!");
            
            jf.setBounds(0, 0, 800, 600);
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    }
    

    Προσαρμογή στο τοπικό περιβάλλον

    Μπορούμε να δώσουμε στην εφαρμογή την αίσθηση εφαρμογής φτιαγμένης ειδικά για το λειτουργικό περιβάλλον στο οποίο εκτελείται με τον παρακάτω κώδικα.
    
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }
    

    Προγραμματιστική διεπαφή συμβάντων

    Κουμπιά (javax.swing.JButton)

    Διαχειριστές διάταξης

    Οι διαχειριστές διάταξης (layout managers) είναι αόρατα συστατικά που καθορίζουν δυναμικά την τοποθέτηση των ορατών συστατικών (πχ κουμπιά, πίνακες) στην εφαρμογή. Οι κύριοι διαχειριστές διάταξης είναι:

    Προγραμματιστική διεπαφή διάταξης FlowLayout

    FlowLayout (java.awt.FlowLayout)

    Παράδειγμα διάταξης FlowLayout

    java.awt.FlowLayout
    
    import javax.swing.JFrame;
    import javax.swing.JButton;
    
    import java.awt.FlowLayout;
    
    public class FlowLayoutDemo {
        public static void main(String[] args) {
            JFrame jf = new JFrame("Hello, World!");
            
            jf.setBounds(0, 0, 800, 600);
            
            jf.setLayout(new FlowLayout());
            jf.add(new JButton("button 1"));
            jf.add(new JButton("button 2"));
            jf.add(new JButton("button 3"));
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    }
    

    Αποτέλεσμα διάταξης FlowLayout

    Προγραμματιστική διεπαφή διάταξης BorderLayout

    BorderLayout (java.awt.BorderLayout)

    Παράδειγμα διάταξης BorderLayout

    java.awt.BorderLayout
    
    import javax.swing.JFrame;
    import javax.swing.JButton;
    
    import java.awt.BorderLayout;
    
    public class BorderLayoutDemo {
        public static void main(String[] args) {
            JFrame jf = new JFrame("Hello, World!");
            
            jf.setBounds(0, 0, 800, 600);
            
            jf.setLayout(new BorderLayout());
            jf.add(new JButton("north"), BorderLayout.NORTH);
            jf.add(new JButton("south"), BorderLayout.SOUTH);
            jf.add(new JButton("center"), BorderLayout.CENTER);
            jf.add(new JButton("west"), BorderLayout.WEST);
            jf.add(new JButton("east"), BorderLayout.EAST);
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    }
    

    Αποτέλεσμα διάταξης BorderLayout

    Προγραμματιστική διεπαφή διάταξης GridLayout

    GridLayout (java.awt.GridLayout)

    Παράδειγμα διάταξης GridLayout

    java.awt.GridLayout
    
    import javax.swing.JFrame;
    import javax.swing.JButton;
    
    import java.awt.GridLayout;
    
    public class GridLayoutDemo {
        public static void main(String[] args) {
            JFrame jf = new JFrame("Hello, World!");
            
            jf.setBounds(0, 0, 800, 600);
            
            jf.setLayout(new GridLayout(3, 2));
            jf.add(new JButton("(1, 1)"));
            jf.add(new JButton("(1, 2)"));
            jf.add(new JButton("(2, 1)"));
            jf.add(new JButton("(2, 2)"));
            jf.add(new JButton("(3, 1)"));
            jf.add(new JButton("(3, 2)"));
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    }
    

    Αποτέλεσμα διάταξης GridLayout

    Προγραμματισμός με συμβάντα

    Η διαδραστικότητα στις εφαρμογές καθορίζεται από προκαθορισμένα συμβάντα. Η νοοτροπία τους είναι πολύ απλή:
    1. Επιλέγεται ένα γεγονός στο οποίο θέλουμε να επέμβουμε (πάτημα ένος πλήκτρου κτλ)
    2. Υλοποιόντας την κατάλληλη διεπαφή, γράφουμε το κομμάτι κώδικα που θέλουμε να εκτελεστεί για το συγκεκριμένο γεγονός
    3. Συσχετίζουμε το κομμάτι αυτό κώδικα με τη λίστα γεγονότων του συστατικού
    Τα γεγονότα είναι προκαθορισμένα και αφορούν είσοδο από το πληκτρολόγιο ή το ποντίκι, μετακινήσεις ή διαφοροποίηση του μεγέθους παραθύρων κτλ. Συνήθως οι κλάσεις που τα υλοποιούν βρίσκονται στο πακέτο java.awt.event.*.

    Παράδειγμα προγραμματισμού με συμβάντα

    
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JOptionPane;
    
    import java.awt.BorderLayout;
    
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    public class EventDemo {
        class AlertAction implements ActionListener {
            private JFrame parent;
    
            AlertAction(JFrame parent) {
                this.parent = parent;
            }
    
            @Override public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(parent, "information", "Button Pressed!!", JOptionPane.INFORMATION_MESSAGE);
            }
        }
    
        public EventDemo() {
            JFrame jf = new JFrame("Hello, World!");
            JButton jb = new JButton("Click Me!");
    
            jf.setBounds(0, 0, 800, 600);
    
            jf.setLayout(new BorderLayout());
            jf.add(jb, BorderLayout.CENTER);
    
            jb.addActionListener(new AlertAction(jf));
    
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new EventDemo();
        }
    }
    

    Αποτέλεσμα προγραμματισμού με συμβάντα

    Συντεταγμένες γραφικών

    Συντεταγμένες γραφικών (διάγραμμα)

    Κλάση προγραμματιστικής διεπαφής χαμηλού επιπέδου

    java.awt.Graphics

    Μέθοδοι χαμηλού επιπέδου

    Παράδειγμα: Σχεδίαση κειμένου

    Όλες οι συναρτήσεις χαμηλού επιπέδου υλοποιούνται στην κλάση java.awt.Graphics. Η κλάση java.awt.Font διαθέτει κατασκευαστή που δέχεται 3 παραμέτρους:

    Κώδικας: Σχεδίαση κειμένου

    
    import javax.swing.JFrame;
    import javax.swing.JComponent;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Font;
    
    public class TextDemo {
        class GraphicPane extends JComponent {
            public GraphicPane() {
                super();
            }
        
            @Override public void paint(Graphics g) {
                g.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 14));
                g.drawString("Hello, World!", 30, 30);
            }
        }
        
        public TextDemo() {
            JFrame jf = new JFrame("Hello, World!");
            GraphicPane gp = new GraphicPane();
            
            jf.setBounds(0,0, 800, 600);
            jf.setLayout(new BorderLayout());        
            jf.add(gp, BorderLayout.CENTER);
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new TextDemo();
        }
    }
    

    Αποτέλεσμα: Σχεδίαση κειμένου

    Παράδειγμα: Χειρισμός χρωμάτων

    Ο χειρισμός των χρωμάτων γίνεται μέσω της κλάσης java.awt.Color.
    
    import javax.swing.JFrame;
    import javax.swing.JComponent;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Font;
    import java.awt.Color;
    
    public class ColorDemo {
        class GraphicPane extends JComponent {
            public GraphicPane() {
                super();
            }
        
            @Override public void paint(Graphics g) {
                g.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 14));
                g.setColor(Color.ORANGE);
                g.drawString("Hello, World! (orange)", 30, 30);
                g.setColor(new Color(250, 100, 120));
                g.drawString("Hello, World! (red ... almost)", 80, 80);
    
            }
        }
        
        public ColorDemo() {
            JFrame jf = new JFrame("Hello, World!");
            GraphicPane gp = new GraphicPane();
            
            jf.setBounds(0,0, 800, 600);
            jf.setLayout(new BorderLayout());        
            jf.add(gp, BorderLayout.CENTER);
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new ColorDemo();
        }
    }
    

    Αποτέλεσμα: Χειρισμός χρωμάτων

    Παράδειγμα: Σχεδίαση σχημάτων

    Κώδικας: Σχεδίαση σχημάτων

    
    import javax.swing.JFrame;
    import javax.swing.JComponent;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Font;
    import java.awt.Color;
    
    public class ShapeDemo {
        class GraphicPane extends JComponent {
            public GraphicPane() {
                super();
            }
    
            @Override public void paint(Graphics g) {
                //// line
                g.setColor(Color.BLACK);
                // drawLine(int x1, int y1, int x2, int y2)
                g.drawLine(0, 0, 100, 100);
    
                //// ovals
                g.setColor(new Color(250, 100, 120));
                // drawOval(int x, int y, int width, int height)
                g.drawOval(30, 30, 100, 200);
                // same, but it fills the oval with the current color
                g.fillOval(300, 30, 100, 200);
    
                //// Rectangle
                g.setColor(Color.BLUE);
                // drawRect(int x, int y, int width, int height)
                g.drawRect(30, 300, 100, 200);
                // fillRect(int x, int y, int width, int height)
                g.fillRect(300, 300, 100, 200);
            }
        }
    
        public ShapeDemo() {
            JFrame jf = new JFrame("Hello, World!");
            GraphicPane gp = new GraphicPane();
    
            jf.setBounds(0,0, 800, 600);
            jf.setLayout(new BorderLayout());
            jf.add(gp, BorderLayout.CENTER);
    
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new ShapeDemo();
        }
    }
    

    Αποτέλεσμα: Σχεδίαση σχημάτων

    Παράδειγμα: Αρχεία εικόνων

    Η βιβλιοθήκες που παρέχονται μαζί με το περιβάλλον ανάπτυξης της Java, υποστηρίζουν την επεξεργασία εικόνων μέσω των πακέτων java.awt.image.* και javax.imageio.*.
    
    import javax.swing.JFrame;
    import javax.swing.JComponent;
    
    import javax.imageio.ImageIO;
    
    import java.io.File;
    import java.io.IOException;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    
    import java.awt.image.BufferedImage;
    
    public class ImageDemo {
        class GraphicPane extends JComponent {
            private BufferedImage bi;
            private JFrame parent;
    
            public GraphicPane(JFrame parent) {
                this.parent = parent;
                try {
                    // reads a file
                    this.bi = ImageIO.read(new File("planes.jpg"));
                } catch (IOException ioe) {
                    System.err.println("Could not load image");
                }
            }
    
            @Override public void paint(Graphics g) {
                // drawImage(Image img, int x, int y, ImageObserver observer)
                g.drawImage(bi, 0, 0, parent);
            }
        }
    
        public ImageDemo() {
            JFrame jf = new JFrame("Hello, World!");
            GraphicPane gp = new GraphicPane(jf);
    
            jf.setBounds(0,0, 800, 600);
            jf.setLayout(new BorderLayout());
            jf.add(gp, BorderLayout.CENTER);
    
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new ImageDemo();
        }
    }
    

    Αποτέλεσμα: Αρχεία εικόνων

    Άσκηση: Μία απλή γραφική εφαρμογή

    Άσκηση 9

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Ευχαριστίες

    Ευχαριστίες στο Βασίλη Καρακόιδα για την καθοριστική συνεισφορά του στη συγγραφή της ενότητας αυτής των σημειώσεων.

    Δομές δεδομένων

    Συμβολοσειρές

    Συμβολοσειρές: παράδειγμα

    
    class Book {
        public String toString() { return "Book"; }
        static public void main(String args[]) {
            var b = new Book();
            String k = "*" + b + "*";
            System.out.println(k);
            System.out.println(b);
        }
    }
    

    Συμβολοσειρές πολλαπλών γραμμών

    Μπορούμε να παραστήσουμε συμβολοσειρές πολλαπλών γραμμών με τριπλά εισαγωγικά.
    
    String html = """
        <html>
            <body>
                <h1>Welcome to my page</h1>
                <p>This is a paragraph.</p>
            </body>
        </html>
        """;
    

    String: μέθοδοι κατασκευής

    String()
    Κατασκευάζει μια άδεια συμβολοσειρά.
    String(char[] value)
    Κατασκευάζει μια συμβολοσειρά από τον πίνακα value.
    String(char[] value, int offset, int count)
    Κατασκευάζει μια συμβολοσειρά από count στοιχεία του πίνακα value αρχίζοντας από τη θέση offset.
    String(String original)
    Κατασκευάζει ένα αντίγραφο συμβολοσειράς
    String(StringBuffer buffer)
    Κατασκευάζει μια συμβολοσειρά από ένα αντικείμενο StringBuffer

    String: μέθοδοι επεξεργασίας

    Οι θέσεις σε μια συμβολοσειρά αριθμούνται από το 0.
    h e l l o
    0 1 2 3 4
    Η μη ύπαρξη θέσης συμβολίζεται με το -1.
    String substring(int beginIndex)
    Επιστρέφει το τμήμα που αρχίζει στη θέση beginIndex
    String substring(int beginIndex, int endIndex)
    Επιστρέφει το τμήμα που αρχίζει στη θέση beginIndex και τελειώνει στη θέση endIndex - 1
    char charAt(int index)
    Επιστρέφει το χαρακτήρα στη θέση index
    String concat(String string2)
    Επιστρέφει τη συμβολοσειρά ενωμένη με το string2

    String: μέθοδοι ερωτήσεων

    int length()
    Μήκος
    boolean equals(String string2)
    Σύγκριση
    boolean StartsWith(String string2)
    Σύγκριση αρχής
    boolean endsWith(String string2)
    Σύγκριση τέλους
    int compareTo(String string2)
    Λεξικογραφική σύγκριση (απλή)
    int indexOf(String string2)
    Επιστρέφει τη θέση της συμβολοσειράς string2

    String: μέθοδοι μετατροπής

    static String valueOf(int i)
    Μετατρέπει το όρισμα i σε συμβολοσειρά
    static String valueOf(double d)
    Μετατρέπει το όρισμα d σε συμβολοσειρά
    static String valueOf(boolean b)
    Μετατρέπει το όρισμα b σε συμβολοσειρά
    static String valueOf(long l)
    Μετατρέπει το όρισμα l σε συμβολοσειρά
    static String valueOf(float f)
    Μετατρέπει το όρισμα f σε συμβολοσειρά
    static String valueOf(char c)
    Μετατρέπει το όρισμα c σε συμβολοσειρά

    StringBuffer και StringBuilder

    StringBuffer append(String string2)
    Προσθήκη της συμβολοσειράς string2 στο τέλος
    StringBuffer insert(int offset, String string2)
    Προσθήκη της συμβολοσειράς string2 στη θέση offset
    StringBuffer delete(int start, int end)
    Διαγραφή των χαρακτήρων από τη θέση start μέχρι την end - 1
    StringBuffer replace(int start, int end, String string2)
    Αντικατάσταση των χαρακτήρων από τη θέση start μέχρι την end - 1 με τη συμβολοσειρά string2

    Εσωτερική χρήση της StringBuilder

    Η κλάση StringBuilder παρέχει τις ίδιες δυνατότητες με την StringBuffer, χωρίς όμως να παρέχει ασφάλεια σε πολυνηματική επεξεργασία.

    Η κλάση StringBuilder χρησιμοποιείται και από το μεταγλωττιστή για την υλοποίηση ένωσης συμβολοσειρών. Η ακολουθία

    
    x = "a" + 4 + "c"
    
    μεταγλωττίζεται εσωτερικά σε
    
    x = new StringBuilder().append("a").append(4).append("c").toString()
    

    Πλαίσια συλλογών

    Πλεονεκτήματα

    Τα πλεονεκτήματα της υποστήριξης και του προγραμματισμού με βάση ένα πλαίσιο συλλογών είναι:

    Το πλαίσιο συλλογών της Java

    Το πλαίσιο συλλογών της βιβλιοθήκης της Java περιλαμβάνει:

    Διεπαφές συλλογών

    Υλοποιήσεις συλλογών

    Διαθέσιμες υλοποιήσεις στη Java

    Για τις διεπαφές των συλλογών υπάρχουν οι παρακάτω υλοποιήσεις:

    Set:
    HashSet, TreeSet, LinkedHashSet
    SortedSet:
    TreeSet
    List:
    ArrayList, LinkedList
    Map:
    HashMap, TreeMap, LinkedHashMap
    SortedMap:
    TreeMap

    Πίνακας διεπαφών και υλοποιήσεων

      Υλοποιήσεις
    ΠΚΠίνακας ΙΔΣΛ ΣΛ και ΠΚ
    Διεπαφές SetHashSet   TreeSet   LinkedHashSet
    SortedSet    TreeSet    
    List   ArrayList   LinkedList  
    Map HashMap   TreeMap   LinkedHashMap
    SortedMap     TreeMap    
    (Οι υλοποιήσεις που συνδιάζουν συνδεδεμένη λίστα και πίνακα κατακερματισμού επιτρέπουν την πρόσβαση των στοιχείων με τη σειρά που έγινε η εισαγωγή τους.)

    Διάγραμμα UML

    Η δομή των διεπαφών και κλάσεων που έχουμε εξετάσει μπορεί να παρασταθεί σε μορφή UML ως εξής.
    UML diagram of Java's Collection and Maps
    Σημείωση: στην πράξη η υλοποίηση της Java χρησιμοποιεί και άλλες ενδιάμεσες κλάσεις, όπως AbstractCollection, AbstractSequentialList, AbstractSet.

    Collection: επεξεργασία

    Η γενικευμένη διεπαφή

    
    Collection <E>
    
    ορίζει μεταξύ άλλων τις παρακάτω μεθόδους (κατά περίπτωση επιστρέφουν αληθές αν η συλλογή μεταβλήθηκε):

    void clear()
    Αφαιρεί όλα τα αντικείμενα από τη συλλογή
    boolean add(E o)
    Προσθήκη στοιχείου
    boolean addAll(Collection <? extends E> c)
    Προσθήκη συλλογής
    boolean remove(Object o)
    Αφαίρεση στοιχείου
    boolean removeAll(Collection <?> c)
    Αφαίρεση συλλογής

    Collection: ερωτήσεις

    boolean contains(Object o)
    Επιστρέφει αληθές αν το στοιχείο περιέχεται
    boolean containsAll(Collection <?> c)
    Επιστρέφει αληθές αν τα στοιχεία της συλλογής περιέχονται
    Iterator <E> iterator()
    Επιστρέφει έναν επαναλήπτη για διάσχιση της συλλογής
    boolean isEmpty()
    Επιστρέφει αληθές αν η συλλογή είναι άδεια
    int size()
    Επιστρέφει τον αριθμό των στοιχείων στη συλλογή

    Παράδειγμα της διεπαφής Collection

    
    import java.util.Collection;
    import java.util.LinkedList;
    
    public class CollectionTest <E> {
        static <E> void testContain(Collection <E> c, E o) {
            System.out.print("The collection " + c);
            if (c.contains(o))
                System.out.print(" contains");
            else
                System.out.print(" does not contain");
    
            System.out.println(" the object " + o);
        }
    
        public static void main(String args[]) {
            var list = new LinkedList <String>();
    
            list.add("Petros");
            list.add("Maria");
    
            testContain(list, "Maria");
            testContain(list, "John");
            testContain(list, "Petros");
            System.out.println("Number of elements = " + list.size());
        }
    }
    

    Η διεπαφή Iterator

    Η διεπαφή
    
    Iterator <E>
    
    υποστηρίζει τη διάσχιση και μεταβολή συλλογών. Ορίζει τις παρακάτω μεθόδους:
    boolean hasNext()
    Επιστρέφει αληθές αν υπάρχει επόμενο στοιχείο
    Object next()
    Επιστρέφει το επόμενο στοιχείο
    void remove()
    Διαγράφει το τελευταίο στοιχείο που επιστρέφτηκε

    Η διεπαφή ListIterator

    Η διεπαφή ListIterator επεκτείνει την Iterator με τις παρακάτω μεθόδους:
    boolean hasPrevious()
    Επιστρέφει αληθές αν υπάρχει προηγούμενο στοιχείο
    Object previous()
    Επιστρέφει το προηγούμενο στοιχείο
    void add(Object o)
    Προσθέτει ένα στοιχείο
    void set(Object o)
    Αντικαθιστά το τελευταίο στοιχείο που επιστρέφτηκε

    Παράδειγμα της διεπαφής Iterator

    
    import java.util.*;
    
    public class IteratorTest {
    
        static void fill(Collection <String> c) {
            c.add("Kerkyra");
            c.add("Zakynthos");
            c.add("Kythira");
            c.add("Santorini");
            c.add("Dilos");
            c.add("Samos");
            c.add("Rodos");
            c.add("Kastelorizo");
        }
    
        static void printAll(Collection <?> c) {
            for (var i = c.iterator(); i.hasNext(); )
                System.out.print(i.next() + " ");
        }
    
        public static void main(String args[]) {
            var hash = new HashSet<String> ();
            var list = new LinkedList<String> ();
    
            fill(hash);
            fill(list);
    
            System.out.println("Hash contains:");
            printAll(hash);
            System.out.println("\nList contains:");
            printAll(list);
        }
    }
    

    Διάσχιση δομών με την εντολή foreach

    Παραδείγματα foreach

    Παράδειγμα διάσχισης συλλογής:
    
    static void printAll(Collection <?> c) {
        for (Object o : c)
            System.out.print(o + " ");
    }
    
    Παράδειγμα διάσχισης πίνακα:
    
    class Echo {
        public static void main(String args[]) {
            for (var s : args)
                System.out.print(s + " ");
            System.out.println();
        }
    }
    

    Παράδειγμα: διάσχιση της ακολουθίας Fibonacci

    
    import java.util.Iterator;
    import java.math.BigInteger;
    
    /**
     * An Iterable interface over the Fibonacci sequence.
     * @author Diomidis Spinellis
     */
    class FibonacciSequence implements Iterable<BigInteger> {
    
        /** The iterator over the Fibonacci sequence. */
        private class  FibonacciIterator implements Iterator<BigInteger> {
            /** Integer n-2 of the series. */
            private BigInteger n0 = null;
            /** Integer n-1 of the series. */
            private BigInteger n1 = null;
    
            /**
             * Return true.
             * The FibonacciSequence sequence is infinite.
             */
            public boolean hasNext() { return true; }
    
            /** Return the next FibonacciSequence integer. */
            public BigInteger next() {
                if (n0 == null) {
                    n0 = BigInteger.ZERO;
                    return n0;
                } else if (n1 == null) {
                    n1 = BigInteger.ONE;
                    return n1;
                } else {
                    BigInteger r = n0.add(n1);
                    n0 = n1;
                    n1 = r;
                    return r;
                }
            }
    
            /**
             * Remove an element.
             * Nothing to see here; move on.
             */
            public void remove() {
                throw new UnsupportedOperationException();
            }
        }
    
        /** Return an iterator for the FibonacciSequence series. */
        public Iterator<BigInteger> iterator() {
            return new FibonacciIterator();
        }
    
        /** A simple test harness. */
        public static void main(String argv[]) {
            var fib = new FibonacciSequence();
    
            for (BigInteger i : fib)
                System.out.println(i);
        }
    }
    
    Βλέπε και το βίντεο για την εμφάνιση της ακολουθίας στη φύση (https://www.youtube.com/watch?v=kkGeOWYOFoA).

    Η διεπαφή Map

    Η διεπαφή
    
    Map <K, V>
    
    ορίζει μια απεικόνιση από ένα κλειδί (key) K σε μια τιμή (value) V. Η διεπαφή ορίζει μεταξύ άλλων τις παρακάτω μεθόδους:
    void clear()
    Αφαιρεί όλα τα αντικείμενα από τη συλλογή
    Object put(Object key, Object value)
    Προσθήκη στοιχείου (επιστρέφει την προηγούμενη τιμή ή null)
    void putAll(Map <? extends K, ? extends V> m)
    Προσθήκη στοιχείων
    boolean remove(Object key)
    Αφαίρεση στοιχείου (επιστρέφει την προηγούμενη τιμή ή null)

    Ερωτήσεις διεπαφής Map

    V get(Object key)
    Επιστρέφει την τιμή του στοιχείου με το κλειδί key
    boolean containsKey(Object key)
    Επιστρέφει αληθές αν το στοιχείο με το κλειδί key περιέχεται
    boolean containsValue(Object value)
    Επιστρέφει αληθές αν το στοιχείο με την τιμή value περιέχεται (αργή)
    Set<K> keySet()
    Επιστρέφει το σύνολο των κλειδιών
    Collection<V> values()
    Επιστρέφει μια συλλογή με τις αποθηκευμένες τιμές
    boolean isEmpty()
    Επιστρέφει αληθές αν η συλλογή είναι άδεια
    int size()
    Επιστρέφει τον αριθμό των στοιχείων στη συλλογή

    Παράδειγμα: νομισματικές ισοτιμίες

    
    import java.util.TreeMap;
    
    public class FXConvert {
    
        private static TreeMap<String, Double> FXRate = new TreeMap<String, Double>();
    
        static double FXconvert(String from, String to, double value) {
            double euro = value / FXRate.get(from);
            return euro * FXRate.get(to);
        }
    
        public static void main(String args[]) {
    
            // Euro rates
            FXRate.put("USD", 1.27);
            FXRate.put("JPY", 126.0);
            FXRate.put("GBP", 0.68);
            FXRate.put("CHF", 1.57);
            FXRate.put("CAD", 1.53);
            FXRate.put("SEK", 9.03);
    
            System.out.println("5 SEK = " + FXconvert("SEK", "JPY", 5) + " JPY");
            System.out.println("100 GBP = " + FXconvert("GBP", "CHF", 100) + " CHF");
        }
    }
    

    Η κλάση Stack

    Η κλάση
    
    Stack <E>
    
    υλοποιεί τη δομή δεδομένων που ονομάζεται στοίβα (stack) με το χαρακτηριστικό τύπο πρόσβασης τελευταίο μέσα πρώτο έξω (last in first out) (LIFO). H κλάση Stack υλοποιεί τη διεπαφή Collection και ορίζει τις παρακάτω μεθόδους:
    boolean empty()
    Αληθές αν η στοίβα είναι άδεια
    E push(E item)
    Προσθέτει το αντικείμενο item στην κορυφή της στοίβας
    E pop()
    Αφαιρεί και επιστρέφει το αντικείμενο από την κορυφή της στοίβας
    E peek()
    Επιστρέφει το αντικείμενο από την κορυφή της στοίβας

    οι πύργοι του Ανόι

    Μπορείτε να δοκιμάστε το παιγνίδι εδώ (https://www.mathsisfun.com/games/towerofhanoi.html).

    Παράδειγμα: οι πύργοι του Ανόι

    
    import java.util.Stack;
    import java.util.Iterator;
    import java.util.Collection;
    
    public class Hanoi {
        static Stack<Integer> A, B, C;
    
        /** Display the contents of a collection with a given name */
        static <E> void showCollection(String name, Collection <E> c) {
            System.out.print(name + ": ");
            for (E e : c)
                System.out.print(e + " ");
            System.out.println();
        }
    
        /** Display the hanoi towers */
        static void showConfiguration() {
            showCollection("A", A);
            showCollection("B", B);
            showCollection("C", C);
            System.out.println();
        }
    
        /** Move n blocks from to using tmp */
        static <E> void move(int n, Stack<E> from, Stack<E> to, Stack<E> tmp) {
            if (n == 1) {
                to.push(from.pop());
                showConfiguration();
            } else {
                move(n - 1, from, tmp, to);
                to.push(from.pop());
                showConfiguration();
                move(n - 1, tmp, to, from);
            }
        }
    
        public static void main(String args[]) {
            final int N = 64;
            A = new Stack<Integer>();
            B = new Stack<Integer>();
            C = new Stack<Integer>();
    
            for (int i = N; i > 0; i--)
                A.push(i);
            showConfiguration();
            move(N, A, C, B);
        }
    }
    
    Εδώ (https://upload.wikimedia.org/wikipedia/commons/2/20/Tower_of_Hanoi_recursion_SMIL.svg) ο αλγόριθμος σε δράση.

    Άσκηση: προγραμματισμός με συμβολοσειρές και συλλογές

    Άσκηση 7

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Χειρισμός αρχείων

    Επισκόπηση

    Δευτερεύουσα μνήμη

    Τα προγράμματα συχνά πρέπει να μεταφέρουν τα δεδομένα τους σε δευτερεύουσα μνήμη (μονάδα SSD, μαγνητικό δίσκο, CD/DVD, μνήμη USB, κάρτα μνήμης, ταινία). Οι λόγοι που το επιβάλλουν αυτό είναι οι παρακάτω:

    Η διαδικασία μεταφοράς των δεδομένων μεταξύ του προγράμματος και εξωτερικών συσκευών καλείται είσοδος/έξοδος (input/output) ή Ε/Ε (I/O).

    Παράσταση δεδομένων

    Τα δεδομένα σε ένα αρχείο μπορούμε να τα παραστήσουμε σε δύο μορφές.

    Παραδείγματα παράστασης

    ΤύποςΤιμήΔυαδική παράστασηΠαράσταση κειμένου
    int4200000000 00000000 00000000 0010101000110100 00110010
    short4200000000 0010101000110100 00110010
    chara00000000 0110000101100001
    charα00000011 1011000111001110 10110001
    Το κείμενο παριστάνεται με την κωδικοποίηση UTF-8.

    Παράσταση αριθμών κινητής υποδιαστολής

    ΤύποςΤιμήΔυαδική παράστασηΠαράσταση κειμένου
    double-0.12510111111 11000000 00000000 00000000
    00000000 00000000 00000000 00000000
    00101101
    00110000
    00101110
    00110001
    00110010
    00110101
    double 12.566370614359173 10-7 00111110 10110101 00010101 00110111
    00001111 10011001 11110110 11001011
    00110001
    00110010
    00101110
    00110101
    00110110
    00110110
    00110011
    00110111
    00110000
    00110110
    00110001
    00110100
    00110011
    00110101
    00111001
    00110001
    00110111
    00110011
    01100101
    00101101
    00110111
    (Ο τελευταίος αριθμός παριστάνει τη φυσική σταθερά μ0, τη διαπερατότητα του κενού, 4π 10-7. Το κείμενο παριστάνεται με την κωδικοποίηση UTF-8 και οι αριθμοί κινητής υποδιαστολής σύμφωνα με το πρότυπο IEEE 754-1985.)

    Ομαδοποίηση δεδομένων

    Η ομαδοποίηση στοιχείων μπορεί να γίνει:

    Παράδειγμα: ομαδοποίηση πεδίων σταθερού μήκους

    ΓΓΠΣ/ΑΑΔΕ: Αναλυτική γραμμή πωλήσεων (πελατών)
    ΠΙΝΑΚΑΣ 3. Αναλυτική γραμμή πωλήσεων (στοιχεία πελατών)
    (RECORD τύπου 2)
    ΠΕΡΙΓΡΑΦΗ
    ΠΕΔΙΟΥ
    ΘΕΣΕΙΣ
    ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΠΕΔΙΟΥ
    Σημειώσεις
    ΣΤΑΘΕΡΗ
    ΤΙΜΗ
    ΑΠΟ
    ΕΩΣ
    ΜΗΚΟΣ
    ΤΥΠΟΣ
    1
    Τύπος Record (κωδικός)
    1
    1
    1
    Numeric
    KENO
    2
    2
    Α/Α
    2
    6
    5
    Numeric
    KENO
    KENO
    3
    ΑΦΜ πελάτη
    7
    15
    9
    Character
    KENO
    KENO
    4
    Επωνυμία πελάτη
    16
    42
    27
    Character
    KENO
    KENO
    5
    Επαγγελμα πελάτη
    43
    57
    15
    Character
    KENO
    KENO
    61
    Μη υπόχρεοι υποβολής(αγρότες, περιστασιακά απασχολούμενοι κλπ)
    58
    58
    1
    Character
    0 (μηδέν)= υπόχρεος
    1 (ένα) = μη υπόχρεος
    KENO
    7
    Δ/νση / Πόλη πελάτη
    59
    68
    10
    Character
    KENO
    KENO
    8
    Δ/νση / Οδός πελάτη
    69
    84
    16
    Character
    KENO
    KENO
    9
    Δ/νση / Αριθμ πελάτη
    85
    87
    3
    Character
    KENO
    KENO
    10
    Ταχ. Κώδικας πελάτη
    88
    92
    5
    Numeric
    KENO
    KENO
    113
    Αριθμός τιμολογίων (πλήθος)
    93
    99
    7
    Numeric
    KENO
    KENO
    12
    Καθαρή αξία τιμολογίων
    100
    115
    16
    Numeric
    KENO
    KENO
    13
    FILLER
    116
    150
    35
    Character
    KENO
    spaces

    Παράδειγμα: ομαδοποίηση πεδίων με διαχωριστικό

    Αρχείο /etc/passwd στο λειτουργικό σύστημα Unix

    root:*:0:0:Charlie Root:/root:/bin/csh
    dds:*:1000:1000:Diomidis Spinellis:/home/dds:/usr/local/bin/bash
    nutmon:*:1056:1056:NUT UPS monitor unprivileged user:/nonexistent:/usr/sbin/nologin
    sgrig:*:1001:1001:Stavros Grigorakakis:/home/sgrig:/usr/local/bin/bash
    archie:*:1002:1002:Achilleas Anagnostopoulos:/home/archie:/usr/local/bin/bash
    path:*:1003:1003:Stephanos Androutselis:/home/path:/usr/local/bin/bash
    

    Τιμοκατάλογος της Microsoft (CSV)

    Product Description,1st AP Non-Platform,1st AP Platform,2nd AP Non-Platform,2nd AP Platform,3rd AP Non-Platform,3rd AP Platform,Non-Platform,Platform,,,,,,,
    OFFICE FAMILY,,,,,,,,,,
    Office Enterprise Listed Lic/SA Pack MVL,76J-01468,76J-01637, 190.31 , 161.77 , 190.31 , 161.77 , 190.31 , 161.77 ,,
    Office Enterprise Listed SA MVL,76J-01552,76J-01640, 98.96 , 94.02 , 98.96 , 94.02 , 98.96 , 94.02 ,,
    Office Enterprise Listed SA Step Up MVL from Office Pro,76J-01510,76J-00002, 34.51 , 29.33 , 34.51 , 29.33 , 34.51 , 29.33 ,,,,,,,
    Office Professional Plus Listed Lic/SA Pack MVL,269-05924,269-12441, 155.81 , 132.45 , 155.81 , 132.45 , 155.81 , 132.45 ,,,,,,,
    Office Professional Plus Listed SA MVL,269-05925,269-12444, 81.02 , 76.97 , 81.02 , 76.97 , 81.02 , 76.97 ,,,,,,,
    WINDOWS FAMILY,,,,,,,,,,,,,,,
    Windows Vista Business Listed Upg/SA Pack MVL w/VisEnterprise,66J-00588,66J-00579, 48.01 , 40.81 , 48.01 , 40.81 , 48.01 , 40.81 ,,,,,,,
    Windows Vista Business Listed SA MVL w/VisEnterprise,66J-00844,66J-00582, 31.76 , 30.17 , 31.76 , 30.17 , 31.76 , 30.17 ,,,,,,,
    

    Ανάγνωση δυαδικών δεδομένων

    Αυτόματη αποδέσμευση πόρων

    Παράδειγμα: ανάγνωση byte

    
    import java.io.*;
    
    /**
     * Count and display the number of bytes in the specified file
     * @author Diomidis Spinellis
     */
    class ByteCount {
        public static void main(String args[]) {
    	if (args.length != 1) {
    	    System.err.println("Usage: ByteCount file");
    	    System.exit(1);
    	}
    
    	// Try with resources; will auto-close in
    	try (var in = new BufferedInputStream(new FileInputStream(args[0]))) {
    
                // Count bytes
                int count = 0;
    	    int b;
    	    while ((b = in.read()) != -1)
    		count++;
    
                System.out.println(count);
    	} catch (FileNotFoundException e) {
    	    System.err.println("Unable to open file " + args[0] + ": " + e.getMessage());
    	    System.exit(1);
    	} catch (IOException e) {
    	    System.err.println("Error reading byte: " + e.getMessage());
    	    System.exit(1);
    	}
    
        }
    }
    

    Εγγραφή δυαδικών δεδομένων

    Παράδειγμα: εγγραφή εικόνας

    
    import java.io.*;
    
    /**
     * Create a 256*256 24-bit color PNM RGB file containing all combinations
     * of R and G.
     * @author Diomidis Spinellis
     */
    class ColorWrite {
    
        /** Write the specified ASCII string to out as bytes */
        static void writeStringAsBytes(OutputStream out, String s) throws IOException {
            for (int i = 0; i < s.length(); i++)
                    out.write((byte)s.charAt(i));
        }
    
        public static void main(String args[]) {
    	final String fileName = args[0];
    
    	// Open file; try with resources
    	try (var out =
                    new BufferedOutputStream(new FileOutputStream(fileName))) {
                // NetPBM PPM 24-bit color file header
                // https://netpbm.sourceforge.net/doc/ppm.html
                writeStringAsBytes(out, "P6 256 256 255 ");
    	    for (int r = 0; r < 256; r++)
    		for (int g = 0; g < 256; g++) {
    		    out.write(r);
    		    out.write(g);
    		    out.write(0);
    		}
    	} catch (FileNotFoundException e) {
    	    System.err.println("Unable to open file " + fileName
    		+ ": " + e.getMessage());
    	    System.exit(1);
    	} catch (IOException e) {
    	    System.err.println("Error writing byte: " + e.getMessage());
    	    System.exit(1);
    	}
        }
    }
    

    Παράδειγμα: αρχείο PNG

    PNG file format

    Ανάγνωση χαρακτήρων

    Παρένθεση: κωδικοποίηση ελληνικών χαρακτήρων

    Στη Java μπορούμε να επεξεργαστούμε αρχεία με ελληνικούς χαρακτήρες με βάση τα παρακάτω ονόματα κωδικοποίησης της κλάσης Charset.

    Διαθέσιμες κωδικοποιήσεις

    Το παρακάτω πρόγραμμα τυπώνει όλες τις διαθέσιμες κωδικοποιήσεις.
    
    import java.nio.charset.Charset;
    import java.util.SortedMap;
    
    /**
     * List the available character set encodins.
     * @author Diomidis Spinellis
     */
    class ListCharset {
        public static void main(String args[]) {
            SortedMap<String,Charset> ac = Charset.availableCharsets();
    
            for (String k : ac.keySet())
                System.out.println(k);
        }
    }
    

    Παράδειγμα: κατηγοριοποίηση χαρακτήρων

    
    import java.io.*;
    import java.util.*;
    import java.lang.Character.UnicodeBlock;
    
    /**
     * Count and display for the specified input file
     * the number of characters contained in various Unicode blocks .
     * @author Diomidis Spinellis
     */
    class CharCount {
        public static void main(String args[]) {
    	if (args.length != 2) {
    	    System.err.println("Usage: CharCount file encoding");
    	    System.exit(1);
    	}
    
    	// Open file; try-with-resources
    	try (var in = new BufferedReader(new InputStreamReader(
                            new FileInputStream(args[0]), args[1]))) {
    
                // Count characters in blocks
                var count = new HashMap<Character.UnicodeBlock, Integer>();
    	    int c;
    	    while ((c = in.read()) != -1) {
    		var u = Character.UnicodeBlock.of(c);
    		    Integer oldN = count.get(u);
    		    if (oldN == null)
    			count.put(u, 1);
    		    else
    			count.put(u, oldN + 1);
    	    }
    
                // Display results
                for (var s : count.entrySet())
                    System.out.println(s.getKey() + ": " + s.getValue());
    	} catch (FileNotFoundException e) {
    	    System.err.println("Unable to open file " + args[0] + ": " + e.getMessage());
    	    System.exit(1);
    	} catch (UnsupportedEncodingException e) {
    	    System.err.println("Unsupported encoding " + args[1] + ": " + e.getMessage());
    	} catch (IOException e) {
    	    System.err.println("Error reading character: " + e.getMessage());
    	    System.exit(1);
    	}
    
        }
    }
    

    Εγγραφή χαρακτήρων

    E/E συμβολοσειρών, πινάκων· σωληνώσεις

    Είσοδο και έξοδο μπορούμε να πραγματοποιήσουμε επιπλέον μέσω:

    Σειριακοποίηση αντικειμένων

    Δόκιμες λύσεις φύλαξης αντικειμένων

    Για να έχουμε συμβατότητα ανάμεσα σε διαφορετικές εκδόσεις του προγράμματος, καλύτερα είναι όταν έχουμε να αποθηκεύσουμε σύνθετες δομές να χρησιμοποιήσουμε μια εναλλακτική λύση, όπως:

    Ανακεφαλαίωση σειριακής πρόσβασης

    Ανάγνωση Εγγραφή
    byte FileInputStream FileOutputStream
    buffered byte BufferedInputStream BufferedOutputStream
    int/double/… DataInputStream DataOutputStream
    Object ObjectInputStream ObjectOutputStream
    char InputStreamReader OutputStreamWriter
    line(char) BufferedReader BufferedWriter
    PrintWriter

    Αρχεία τυχαίας πρόσβασης

    Η διεπαφή NIO

    H Java προσφέρει την διεπαφή προγραμματισμού (API) ΝΙΟ (New I/O) για πρόσβαση σε αρχεία όταν έχουμε ιδιαίτερα υψηλές απαιτήσεις απόδοσης. Σε σχέση με τη διεπαφή IO αυτή προσφέρει:

    Πρόσβαση στο σύστημα αρχείων

    Η κλάση File παρέχει πρόσβαση στη δομή με μεθόδους όπως τις παρακάτω:
    exists
    Ελέγχει την ύπαρξη ενός αρχείου.
    delete
    Διαγράφει ένα αρχείο.
    lastModified
    Επιστρέφει το χρόνο της τελευταίας αλλαγής στο αρχείο.
    renameTo
    Μετονομάζει ένα αρχείο
    length
    Επιστρέφει το μήκος ενός αρχείου
    list
    Επιστρέφει τα αρχεία που βρίσκονται σε ένα φάκελο.
    mkdir
    Δημιουργεί ένα νέο φάκελο
    getFreeSpace
    Επιστρέφει τον ελεύθερο χώρο στο δίσκο.

    Άσκηση: επεξεργασία αρχείου κειμένου

    Άσκηση 8

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Παράρτημα: Παράσταση ελληνικών χαρακτήρων

    ΧαρακτήραςUnicodeISO 8859-7CP 1253CP 737CP 851Mac GreekCP 423CP 869ISO IR-19ISO IR-27ISO IR-88ISO IR-18ISO IR-150ISO IR-55
    Ά0386b6a2ea86cd7186      
    Έ0388b8b8eb8dce728d      
    Ή0389b9b9ec8fd7738f      
    Ί038ababaed90d87590      
    Ϊ03aadada  ab 91      
    Ό038cbcbcee92d97692      
    Ύ038ebebeef95da7795      
    Ϋ03abdbdb  bd 96      
    Ώ038fbfbff098df7898      
    Α0391c1c180a4b041a461 41614141
    Β0392c2c281a5b542a562 42624242
    Γ0393c3c382a6a143a6672343674344
    Δ0394c4c483a7a244a7644044644445
    Ε0395c5c584a8b645a865 45654546
    Ζ0396c6c685a9b746a97a 467a4649
    Η0397c7c786aab847aa68 4768474a
    Θ0398c8c887aca348ac755c4875484b
    Ι0399c9c988adb949ad69 4969494c
    Κ039acaca89b5ba51b56b 4b6b4a4d
    Λ039bcbcb8ab6a452b66c5e4c6c4b4e
    Μ039ccccc8bb8bb53b76d 4d6d4c4f
    Ν039dcdcd8cb7c154b86e 4e6e4d50
    Ξ039ecece8dbda555bd6a214f6a4e51
    Ο039fcfcf8ebec356be6f 506f4f52
    Π03a0d0d08fc6a657c6703f51705053
    Ρ03a1d1d190c7c458c772 52725155
    Σ03a3d3d391cfaa59cf735f53735356
    Τ03a4d4d492d0c662d074 54745458
    Υ03a5d5d593d1cb63d179 55795559
    Φ03a6d6d694d2bc64d2665d5666565a
    Χ03a7d7d795d3cc65d378 5878575b
    Ψ03a8d8d896d4be66d4633a5963585c
    Ω03a9d9d997d5bf67d5765b5a76595d
    ά03acdcdce19bc0b19b      
    έ03addddde29ddbb29d      
    ή03aededee39edcb39e      
    ί03afdfdfe59fddb59f      
    ϊ03cafafae4a0fbb4a0      
    ΐ0390c0c0 a1fd a1      
    ό03ccfcfce6a2deb6a2      
    ύ03cdfdfde7a3e0b7a3      
    ϋ03cbfbfbe8fbfcb8fb      
    ΰ03b0e0e0 fcfe fc      
    ώ03cefefee9fdf1b9fd      
    α03b1e1e198d6e18ad6  61416161
    β03b2e2e299d7e28bd7  62426262
    γ03b3e3e39ad8e78cd8  63476364
    δ03b4e4e49bdde48ddd  64446465
    ε03b5e5e59cdee58ede  65456566
    ζ03b6e6e69de0fa8fe0  665a6669
    η03b7e7e79ee1e89ae1  6748676a
    θ03b8e8e89fe2f59be2  6855686b
    ι03b9e9e9a0e3e99ce3  6949696c
    κ03baeaeaa1e4eb9de4  6b4b6a6d
    λ03bbebeba2e5ec9ee5  6c4c6b6e
    μ03bcececa3e6ed9fe6  6d4d6c6f
    ν03bdededa4e7eeaae7  6e4e6d70
    ξ03beeeeea5e8eaabe8  6f4a6e71
    ο03bfefefa6e9eface9  704f6f72
    π03c0f0f0a7eaf0adea  71507073
    ρ03c1f1f1a8ebf2aeeb  72527175
    ς03c2f2f2aaedf7afed  77577277
    σ03c3f3f3a9ecf3baec  73537376
    τ03c4f4f4abeef4bbee  74547478
    υ03c5f5f5acf2f9bcf2  75597579
    φ03c6f6f6adf3e6bdf3  7646767a
    χ03c7f7f7aef4f8bef4  7858777b
    ψ03c8f8f8aff6e3bff6  7943787c
    ω03c9f9f9e0faf6dbfa  7a56797d

    Παράρτημα: το πρότυπο ASCII

    Ο παρακάτω πίνακας παρουσιάζει τις τιμές των χαρακτήρων, σύμφωνα με το πρότυπο ASCII (American Standard Code for Information Interchange). Οι πρώτες 32 θέσεις δεσμεύονται για χαρακτήρες διαφυγής (escape character).
    ΧαρακτήραςΔεκαδικήΔεκαεξαδικήΟκταδικήΔυαδική
    nul0000000000 0000
    soh1010010000 0001
    stx2020020000 0010
    etx3030030000 0011
    eot4040040000 0100
    enq5050050000 0101
    ack6060060000 0110
    bel7070070000 0111
    bs8080100000 1000
    ht9090110000 1001
    lf100a0120000 1010
    vt110b0130000 1011
    ff120c0140000 1100
    cr130d0150000 1101
    so140e0160000 1110
    si150f0170000 1111
    dle16100200001 0000
    dc117110210001 0001
    dc218120220001 0010
    dc319130230001 0011
    dc420140240001 0100
    nak21150250001 0101
    syn22160260001 0110
    etb23170270001 0111
    can24180300001 1000
    em25190310001 1001
    sub261a0320001 1010
    esc271b0330001 1011
    fs281c0340001 1100
    gs291d0350001 1101
    rs301e0360001 1110
    us311f0370001 1111
    sp32200400010 0000
    !33210410010 0001
    "34220420010 0010
    #35230430010 0011
    $36240440010 0100
    %37250450010 0101
    &38260460010 0110
    '39270470010 0111
    (40280500010 1000
    )41290510010 1001
    *422a0520010 1010
    +432b0530010 1011
    ,442c0540010 1100
    -452d0550010 1101
    .462e0560010 1110
    /472f0570010 1111
    048300600011 0000
    149310610011 0001
    250320620011 0010
    351330630011 0011
    452340640011 0100
    553350650011 0101
    654360660011 0110
    755370670011 0111
    856380700011 1000
    957390710011 1001
    :583a0720011 1010
    ;593b0730011 1011
    <603c0740011 1100
    =613d0750011 1101
    >623e0760011 1110
    ?633f0770011 1111
    @64401000100 0000
    A65411010100 0001
    B66421020100 0010
    C67431030100 0011
    D68441040100 0100
    E69451050100 0101
    F70461060100 0110
    G71471070100 0111
    H72481100100 1000
    I73491110100 1001
    J744a1120100 1010
    K754b1130100 1011
    L764c1140100 1100
    M774d1150100 1101
    N784e1160100 1110
    O794f1170100 1111
    P80501200101 0000
    Q81511210101 0001
    R82521220101 0010
    S83531230101 0011
    T84541240101 0100
    U85551250101 0101
    V86561260101 0110
    W87571270101 0111
    X88581300101 1000
    Y89591310101 1001
    Z905a1320101 1010
    [915b1330101 1011
    \925c1340101 1100
    ]935d1350101 1101
    ^945e1360101 1110
    _955f1370101 1111
    `96601400110 0000
    a97611410110 0001
    b98621420110 0010
    c99631430110 0011
    d100641440110 0100
    e101651450110 0101
    f102661460110 0110
    g103671470110 0111
    h104681500110 1000
    i105691510110 1001
    j1066a1520110 1010
    k1076b1530110 1011
    l1086c1540110 1100
    m1096d1550110 1101
    n1106e1560110 1110
    o1116f1570110 1111
    p112701600111 0000
    q113711610111 0001
    r114721620111 0010
    s115731630111 0011
    t116741640111 0100
    u117751650111 0101
    v118761660111 0110
    w119771670111 0111
    x120781700111 1000
    y121791710111 1001
    z1227a1720111 1010
    {1237b1730111 1011
    |1247c1740111 1100
    }1257d1750111 1101
    ~1267e1760111 1110
    del1277f1770111 1111

    Παράσταση δεδομένων με XML, JSON και κανονικές εκφράσεις

    Σύνταξη κανονικών εκφράσεων

    Σύμβολα με ειδικό νόημα

    Πρόσθετα σύμβολα με ειδικό νόημα

    Χαρακτήρες διαφυγής

    Πρόσθετοι χαρακτήρες διαφυγής

    Χρήση κανονικών εκφράσεων

    Παράδειγμα: Εύρεση κανονικών εκφράσεων σε αρχείο

    
    /*
     * Globally match regular expression and print
     * Modelled after the Unix command with the same name
     * D. Spinellis, January 2004-2024
     */
    
    import java.util.regex.*;
    import java.io.*;
    
    class Grep {
        public static void main(String args[]) {
            if (args.length != 2) {
                System.err.println("Usage: Grep pattern file");
                System.exit(1);
            }
    
            try (var in = new BufferedReader(new InputStreamReader(
                            new FileInputStream(args[1])))) {
                Pattern compiledRe = Pattern.compile(args[0]);
                String s;
                while ((s = in.readLine()) != null) {
                    Matcher m = compiledRe.matcher(s);
                    if (m.find())
                        System.out.println(s);
                }
            } catch (FileNotFoundException e) {
                System.err.println("Unable to open file " + args[1] + ": " + e.getMessage());
                System.exit(2);
            } catch (PatternSyntaxException e) {
                System.err.println("Invalid RE syntax: " + e.getDescription());
                System.exit(3);
            } catch (IOException e) {
                System.err.println("Error reading line: " + e.getMessage());
                System.exit(4);
            }
        }
    }
    

    Αποτέλεσμα αναζήτησης κανονικών εκφράσεων

    java Grep "abo" /usr/dict/words
    ...
    sabotage
    seaboard
    taboo
    thereabouts
    turnabout
    vagabond
    whereabout
    ...
    
    java Grep "^abo" /usr/dict/words
    aboard
    abode
    abolish
    abolition
    abominable
    abominate
    aboriginal
    
    java Grep bent /usr/dict/words
    absorbent
    bent
    benthic
    debenture
    incumbent
    recumbent
    
    java Grep "bent$" /usr/dict/words
    absorbent
    bent
    incumbent
    recumbent
    
    java Grep "[^AEIOUYaeiouy]{5,}" /usr/dict/words
    angstrom
    Armstrong
    birthplace
    bremsstrahlung
    corkscrew
    Dijkstra
    downstream
    hardscrabble
    jockstrap
    Knightsbridge
    lengthly
    Nietzsche
    nightclub
    offspring
    postscript
    Rothschild
    ...
    
    java Grep "(.)(.)(.)\3\2\1" /usr/dict/words
    braggart
    Brenner
    collocation
    diffident
    dissident
    glossolalia
    grammar
    grammarian
    installation
    staccato
    suffuse
    

    Διαίρεση συμβολοσειρών με πρότυπο

    Διαίρεση συμβολοσειρών με κανονική έκφραση

    Όταν τα τμήματα μιας συμβολοσειράς χωρίζονται από ίδια στοιχεία διαχωρισμού (π.χ. :, κενό, tab) τότε μπορούμε να τα διαχωρίσουμε με τη μέθοδο του αντικειμένου Pattern.
    
    import java.io.*;
    import java.util.regex.*;
    
    public class SplitWords {
        public static void main(String[] args) {
            if (args.length != 1) {
                System.err.println("Usage: SplitWords file");
                System.exit(1);
            }
    
            // Split on non-word characters
            Pattern splitPattern = Pattern.compile("[^a-zA-Z]+");
    
            try (var in = new BufferedReader(new InputStreamReader(
                            new FileInputStream(args[0])))) {
                String line;
                while ((line = in.readLine()) != null) {
                    String[] words = splitPattern.split(line);
                    for (String word : words) {
                        System.out.println(word);
                    }
                }
            } catch (FileNotFoundException e) {
                System.err.println("Unable to open file " + args[0] + ": " + e.getMessage());
                System.exit(2);
            } catch (IOException e) {
                System.err.println("Error reading line: " + e.getMessage());
                System.exit(3);
            }
        }
    }
    

    Παράδειγμα: επεξεργασία αρχείων καταγραφής πρόσβασης σε ιστοσελίδες

    
    /*
     * Collect and print Web statistics
     * D. Spinellis, 2004-2024
     */
    
    import java.util.*;
    import java.util.regex.*;
    import java.io.*;
    
    class WebStats {
    
        /**
         * Increment the integer value of map's member by 1
         * The member is obtained by using the matcher to extract
         * the specified group from the string s
         */
        static void increment(Map<String, Integer> map, String s, Matcher m, int group) {
    	String member = s.substring(m.start(group), m.end(group));
    	Integer i = map.get(member);
            map.put(member, i == null ? 1 : i + 1);
        }
    
        /** List the contents of the given map */
        static void list(String title, Map<String, Integer> map) {
    	System.out.println("\n" + title);
    	for (Map.Entry e : map.entrySet())
    	    System.out.println(e.getValue() + " " + e.getKey());
        }
    
        /** List the contents of the given map ordered by their values.
         * (You are not expected to undestand this).
         */
        static void sortedList(String title, Map<String, Integer> map) {
    	System.out.println("\n" + title);
    	var valueOrder = new TreeSet<Map.Entry<String, Integer>>(new
    	    Comparator<Map.Entry<String, Integer>>() {
    		public int compare(Map.Entry<String, Integer> a,
    			Map.Entry<String, Integer> b) {
    		    return (-a.getValue().compareTo(b.getValue()));
    		}
    	    }
    	);
    	valueOrder.addAll(map.entrySet());
    	for (Map.Entry e : valueOrder)
    	    System.out.println(e.getValue() + " " + e.getKey());
        }
    
    
    
        public static void main(String args[]) {
    	if (args.length != 1) {
    	    System.err.println("Usage: WebStats file");
    	    System.exit(1);
    	}
    
    	Pattern cre = null;	// Compiled RE
    	try {
    	    // A standard log line is a line like:
    	    // 192.168.136.16 - - [26/Jan/2004:19:45:48 +0200] "GET /c136.html HTTP/1.1" 200 1674 "http://office/c120.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007"
    	    String patternString = """
                    ([-\\w.]+)\\s+      # 1. Host
                    ([-\\w]+)\\s+       # 2. Logname
                    ([-\\w]+)\\s+       # 3. User
                    \\[(\\d+)/          # 4. Date
                    (\\w+)/             # 5. Month
                    (\\d+):             # 6. Year
                    (\\d+):             # 7. Hour
                    (\\d+)              # 8. Minute
                    ([^]]+?)\\]\\s+     # 9. Rest of time
                    \"([-\\w]+)\\s*     # 10. Request verb
                    ([^\\s]*)           # 11. Request URL
                    ([^\"]*?)\"\\s+     # 12. Request protocol etc.
                    (\\d+)\\s+          # 13. Status
                    ([-\\d]+)\\s+       # 14. Bytes
                    \"([^\"]*)\"\\s+    # 15. Referrer URL
                    \"([^\"]*)\"        # 16. Client
    	    """;
    	    cre = Pattern.compile(patternString, Pattern.COMMENTS);
    	} catch (PatternSyntaxException e) {
    	    System.err.println("Invalid RE syntax: " + e.getDescription());
    	    System.exit(1);
    	}
    
    	BufferedReader in = null;
    	try {
    	    in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0])));
    	} catch (FileNotFoundException e) {
    	    System.err.println("Unable to open file " + args[1] + ": " + e.getMessage());
    	    System.exit(1);
    	}
    
    	var host = new HashMap<String, Integer>();
    	var hour = new HashMap<String, Integer>();
    	var request = new HashMap<String, Integer>();
    	var referrer = new HashMap<String, Integer>();
    	try {
    	    String s;
    	    while ((s = in.readLine()) != null) {
    		Matcher m = cre.matcher(s);
    		if (!m.matches())
    		    System.out.println("Invalid line: " + s);
    		else {
    		    increment(host, s, m, 1);
    		    increment(hour, s, m, 7);
    		    increment(request, s, m, 11);
    		    increment(referrer, s, m, 15);
    		}
    	    }
    	} catch (Exception e) {
    	    System.err.println("Error reading line: " + e.getMessage());
    	    System.exit(1);
    	}
    	sortedList("Host Access Counts", host);
    	sortedList("Hourly Access Counts", hour);
    	sortedList("Request URL Access Counts", request);
    	sortedList("Referrer URL Access Counts", referrer);
        }
    }
    

    Υλοποίηση αναγνώρισης κανονικών εκφράσεων

    Μηχανή μετάπτωσης καταστάσεων για αναγνώριση της κανονικής έκφρασης (ΔΕΤ!+)|(ΔΕΟΣ) State machine example (Υλοποιείται από 9 άτομα.)

    Επιλογή ανάμεσα σε JSON και XML

    O μορφότυπος JSON

    Σύνταξη JSON

    
    {
        "name": "John",
        "age": 30,
        "isStudent": false,
        "courses": ["Math", "Science"],
        "address": {
            "city": "Athens",
            "country": "Greece"
        }
    }
    

    Βασικοί τύποι δεδομένων σε JSON

    Ενσωμάτωση JSON στη Java

    Ανάγνωση και δημιουργία δεδομένων JSON

    
    package gr.aueb.dmst.dds.example;
    
    import com.google.gson.Gson;
    
    record Person(String name, int age) {}
    
    public class JsonIO {
        public static void main(String[] args) {
            Gson gson = new Gson();
    
    	// Read a JSON object
            String json = "{\"name\":\"Anna\", \"age\":25}";
            Person person = gson.fromJson(json, Person.class);
            System.out.println("Read Person: " + person);
    
    	// Serialize a Java object into JSON
            String serializedJson = gson.toJson(person);
            System.out.println("Serialized JSON: " + serializedJson);
        }
    }
    

    Βέλτιστες πρακτικές

    Βάσεις της XML

    Έγγραφα XML

    Παραδείγματα XML

    Παράδειγμα: ένα στοιχείο με κείμενο

    
    <city>Larisa</city>
    

    Παράδειγμα: στοιχείο με περιεχόμενο άλλα στοιχεία

    
     <?xml version="1.0" encoding="US-ASCII" ?>
     <city_info>
        <name>Larisa</name>
        <area_code>241</area_code>
        <latitude>39.38</latitude>
        <longitude>-22.25</longitude>
        <country>Greece</country>
     </city_info>
    

    Παράδειγμα: κενό στοιχείο

    
    <alumnus />
    
    Ηλεκτρονικό τιμολόγιο (https://docs.oasis-open.org/ubl/os-UBL-2.1/xml/UBL-Invoice-2.1-Example.xml)

    Προσδιορισμοί

    Παράδειγμα:
    
    <city country="el" id="HER">
    <name>Hrakleio</name>
    </city>
    

    Οντότητες και σχόλια

    Οι παρακάτω οντότητες (entities) μπορούν να οριστούν περιφραστικά:
    ΟντότηταΣύνταξη XML
    <&lt;
    &&amp;
    >&gt;
    "&quot;
    '&apos;

    Σχόλια μέσα σε ένα έγγραφο XML γράφονται ως
    <!-- περιεχόμενο -->

    Διάκριση μεταξύ οντοτήτων, στοιχείων και προσδιορισμών

    Παράδειγμα: ΚΑΔ XML

    Τα παρακάτω αρχείο χρησιμοποιείται από τους φορολογούμενους για να δηλώσουν στη ΑΑΔΕ τον κωδικό αριθμό δραστηριότητάς (ΚΑΔ) τους.
    
    <?xml version="1.0" encoding="UTF-8"?>
    <ekad xmlns="http://www.gsis.gr/ekad"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      afm="046523469">
        <branch aa="0">
            <kad typeOfKad="1">
                <value>71121908</value>
            </kad>
        </branch>
    </ekad>
    

    Ορισμός σχήματος εγγράφων με τη χρήση XSD

    Σχήμα για απλά στοιχεία

    Στοιχεία XML που περιέχουν απλά δεδομένα όπως το παρακάτω
    
    <?xml version="1.0" ?>
    <studentID>802345</studentID>
    
    μπορούν να δηλωθούν με το στοιχείο element και τον προσδιορισμό του τύπου.
    
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="studentID" type="xsd:integer" />
    </xsd:schema>
    

    Διαθέσιμοι τύποι

    Μερικοί διαθέσιμοι τύποι είναι οι παρακάτω:

    Περιορισμοί σε απλά στοιχεία

    Αν θέλουμε να περιορίσουμε το περιεχόμενο του στοιχείου, μπορούμε να χρησιμοποιήσουμε τα στοιχεία simpleType και restriction μαζί με διάφορους περιορισμούς (restrictions) (στο παράδειγμα pattern).
    
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="studentID" >
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer">
                    <xsd:pattern value="80\d{4}" />
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>
    </xsd:schema>
    

    Είδη περιορισμών

    Μερικοί υποστηριζόμενοι περιορισμοί είναι οι παρακάτω: Όλοι παίρνουν μια παράμετρο value, που ορίζει την τιμή τους.

    Παραδείγματα περιορισμών

    Παράδειγμα σχήματος για βαθμό:
    
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <xsd:element name="grade" >
                    <xsd:simpleType>
                      <xsd:restriction base="xsd:float">
                        <xsd:pattern value="\d+\.[05]"/>
                        <xsd:minInclusive value="0"/>
                        <xsd:maxInclusive value="10"/>
                      </xsd:restriction>
                    </xsd:simpleType>
            </xsd:element>
    </xsd:schema>
    
    
    Παράδειγμα περιορισμού για επιλογή μιας πόλης:
    
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Athens"/>
        <xsd:enumeration value="Thessaloniki"/>
        <xsd:enumeration value="Argostoli"/>
        <xsd:enumeration value="Volos"/>
        <!-- ... -->
      </xsd:restriction>
    </xsd:simpleType>
    

    Σύνθετοι τύποι

    Ορισμοί προσδιορισμών

    Απλό περιεχόμενο

    Παράδειγμα απλού περιεχομένου

    Παράδειγμα σχήματος:
    
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="country">
      <xsd:complexType>
        <xsd:simpleContent >
            <xsd:extension base="xsd:string" >
                <xsd:attribute name="code" type="xsd:string" use="required" />
            </xsd:extension>
        </xsd:simpleContent >
      </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    
    Παράδειγμα εγγράφου:
    
    <?xml version="1.0" ?>
    <country code="el">Greece</country>
    

    Ομάδες

    Σε ένα στοιχείο complexType μπορούμε να ορίσουμε και τα παρακάτω στοιχεία

    Παράδειγμα ομάδων

    Παράδειγμα σχήματος:
    
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="javaProgram">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="package" type="xsd:string" />
                    <xsd:element name="import" type="xsd:string" maxOccurs="unbounded" />
                    <xsd:element name="class">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="name" type="xsd:string" />
                                <xsd:choice maxOccurs="unbounded">
                                    <xsd:element name="field" type="xsd:string" />
                                    <xsd:element name="ctor" type="xsd:string" />
                                    <xsd:element name="method" type="xsd:string" />
                                </xsd:choice>
                            </xsd:sequence>
                            <xsd:attribute name="extends" type="xsd:string" use="optional" />
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    
    Παράδειγμα εγγράφου:
    
    <?xml version="1.0" ?>
    <javaProgram>
            <package>gr.aueb.dds.bio</package>
            <import>java.util.Date</import>
            <import>java.math.BigDecimal</import>
            <class extends="Object">
                    <name>Point</name>
                    <field>int x</field>
                    <field>int y</field>
                    <ctor>Point(int x, int y)</ctor>
                    <field>static int numPoints</field>
            </class>
    </javaProgram>
    

    Αριθμητικοί περιορισμοί

    Παράδειγμα: Μια τάξη μπορεί να έχει 10-150 φοιτητές.
    
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="class" >
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="student" type="xsd:string"
                     minOccurs="10" maxOccurs="150" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    

    Ανακεφαλαίωση

    Η επιτρεπόμενη δομή ενός εγγράφου XSD εμφανίζεται στο παρακάτω σχήμα.
    the content models in an XML Schema
    (Αναδημοσιεύεται με την άδεια του συγγραφέα Rahul Srivastava).

    Παράδειγμα: ΚΑΔ XSD

    Τα παρακάτω σχήμα ορίζει τη μορφή του αρχείου που χρησιμοποιείται από τους φορολογούμενους για να δηλώσουν στη ΑΑΔΕ τον κωδικό αριθμό δραστηριότητάς (ΚΑΔ) τους.
    
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns="http://www.gsis.gr/ekad" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.gsis.gr/ekad" elementFormDefault="qualified" attributeFormDefault="unqualified">
      <xs:element name="ekad">
        <xs:annotation>
          <xs:documentation>root element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="branch" nillable="false" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>Εγκατάσταση</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="kad" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="value" nillable="false">
                          <xs:annotation>
                            <xs:documentation>Η τιμή του ΚΑΔ</xs:documentation>
                          </xs:annotation>
                          <xs:simpleType>
                            <xs:restriction base="xs:integer">
                              <xs:totalDigits value="15"/>
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                      </xs:sequence>
                      <xs:attribute name="typeOfKad" use="required">
                        <xs:annotation>
                          <xs:documentation>Είδος ΚΑΔ (δραστηριότητας). 1=Κύρια, 2=Δευτερεύουσα, 3=Λοιπή, 4=Βοηθητική</xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                          <xs:restriction base="xs:int">
                            <xs:enumeration value="1"/>
                            <xs:enumeration value="2"/>
                            <xs:enumeration value="3"/>
                            <xs:enumeration value="4"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="aa" use="required">
                  <xs:annotation>
                    <xs:documentation>ΑΑ εγκατάστασης. Η έδρα δηλώνεται σαν υποκατάστημα με ΑΑ=0. Εάν υπάρχει μητρική εταιρεία στο εξωτερικό, ο ΚΑΔ της δηλώνεται ως υποκατάστημα με ΑΑ=9999</xs:documentation>
                  </xs:annotation>
                  <xs:simpleType>
                    <xs:restriction base="xs:int">
                      <xs:minInclusive value="0"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="afm" use="required">
            <xs:annotation>
              <xs:documentation>ΑΦΜ υπόχρεου</xs:documentation>
            </xs:annotation>
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:minLength value="9"/>
                <xs:maxLength value="9"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    

    Μετασχηματισμοί με τη χρήση XSLT

    Στοιχεία της XSLT

    Παράδειγμα μετασχηματισμού: σχήμα

    
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="project">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="shortname" type="xsd:string" />
                    <xsd:element name="projtitle" type="xsd:string" />
                    <xsd:element name="startdate" type="xsd:date" minOccurs="0" />
                    <xsd:element name="enddate" type="xsd:date" />
                    <xsd:element name="web_site" type="xsd:string" minOccurs="0" />
                    <xsd:element name="our_budget" type="xsd:integer" minOccurs="0" />
                    <xsd:element name="total_budget" type="xsd:integer" minOccurs="0" />
                    <xsd:element name="funding_agency" type="xsd:string" minOccurs="0" />
                    <xsd:element name="funding_programme" type="xsd:string" minOccurs="0" />
                    <xsd:element name="project_code" type="xsd:string" minOccurs="0" />
                    <xsd:element name="partner" minOccurs="0" maxOccurs="unbounded">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="shortname" type="xsd:string" />
                                <xsd:element name="country" type="xsd:string" />
                                <xsd:element name="web_site" type="xsd:string" minOccurs="0" />
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="logo" type="xsd:string" minOccurs="0" />
                    <xsd:element name="description" type="xsd:string" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    

    Παράδειγμα μετασχηματισμού: έγγραφο

    
    <?xml version="1.0"?>
    <project>
            <shortname>mExpress</shortname>
            <projtitle>mobile in-EXhibition PRovision of Electronic Support Services</projtitle>
            <startdate>2002-03-05</startdate>
            <enddate>2004-04-01</enddate>
            <web_site>http://mexpress.intranet.gr/</web_site>
            <our_budget>328</our_budget>
            <total_budget>3493</total_budget>
            <funding_agency>European Commission</funding_agency>
            <funding_programme>IST</funding_programme>
            <project_code>IST-2001-33432</project_code>
            <partner>
                    <shortname>Intracom</shortname>
                    <country>EL</country>
                    <web_site>http://www.intracom.gr</web_site>
            </partner>
            <partner>
                    <shortname>Ericsson</shortname>
                    <country>DK</country>
                    <web_site>http://www.ericsson.com/</web_site>
            </partner>
            <partner>
                    <shortname>ELISA</shortname>
                    <country>FIN</country>
                    <web_site>http://www.elisa.com</web_site>
            </partner>
            <partner>
                    <shortname>POULIADIS</shortname>
                    <country>EL</country>
                    <web_site>http://www.pouliadis.gr</web_site>
            </partner>
            <partner>
                    <shortname>SSF</shortname>
                    <country>FIN</country>
                    <web_site>http://www.ssf.fi/</web_site>
            </partner>
            <partner>
                    <shortname>HUT</shortname>
                    <country>FIN</country>
                    <web_site>http://www.hut.fi</web_site>
            </partner>
            <partner>
                    <shortname>FFC</shortname>
                    <country>FIN</country>
            </partner>
            <partner>
                    <shortname>ROTA</shortname>
                    <country>EL</country>
                    <web_site>http://www.rota.gr</web_site>
            </partner>
            <logo>../images/p_mexpress.gif</logo>
            <description>
    mEXPRESS aims to exploit the technological opportunities arising from
    evolution in the areas of wireless networks and positioning mechanisms in
    order to support and facilitate the professional exhibition industry in
    a context-aware manner. It will contribute to the economic development of
    the Community by providing means for efficient operation and interaction
    in information-rich environments such as exhibitions, and significantly
    enhancing promotional activities and business communications. The mEXPRESS
    project will provide an integrated mediation platform (mEXPRESS Service
    Provider) oriented to exhibition shows and events.
            </description>
    </project>
    

    Παράδειγμα μετασχηματισμού: XSLT

    
    <?xml version="1.0"?>
    <!-- Apply using
    xml tr project.xslt mexpress.xml
    -->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="project">
                    <h1>
                    <xsl:value-of select="shortname" />
                    -
                    <xsl:value-of select="projtitle" />
                    </h1>
                    <!-- Show Logo -->
                    <xsl:element name="img">
                            <xsl:attribute name="src"><xsl:value-of select="logo" /></xsl:attribute>
                    </xsl:element>
                    <br /> <br />
                    <!-- Project Summary information -->
                    <xsl:if test="count(project_code) != 0">
                            Project Code:
                            <xsl:value-of select="project_code" />
                            <xsl:if test="@international = 'yes'">
                                    (International)
                            </xsl:if>
                            <br/>
                    </xsl:if>
                    <xsl:if test="count(funding_programme) != 0">
                            Funding programme: <xsl:value-of select="funding_programme" />
                            <br />
                    </xsl:if>
                    <xsl:if test="count(funding_agency) != 0">
                            Funding Agency: <xsl:value-of select="funding_agency" />
                            <br />
                    </xsl:if>
                    <xsl:if test="@type != ''">
                            Project type:
                            <xsl:choose>
                                    <xsl:when test="@type = 'rtd'">RTD</xsl:when>
                                    <xsl:when test="@type = 'consulting'">Consulting</xsl:when>
                                    <xsl:when test="@type = 'training'">Training</xsl:when>
                                    <xsl:when test="@type = 'dissemination'">Dissemination</xsl:when>
                            </xsl:choose>
                            <br />
                    </xsl:if>
                    <xsl:if test="count(web_site) != 0">
                            Web site:
                            <xsl:element name="a">
                                    <xsl:attribute name="href"><xsl:value-of select="web_site"/></xsl:attribute>
                                    <xsl:value-of select="web_site" />
                            </xsl:element>
                            <br />
                            <br />
                    </xsl:if>
                    <xsl:if test="count(our_budget) != 0">
                            ELTRUN budget: <xsl:value-of select="our_budget" /> EUR
                            <br />
                    </xsl:if>
                    <xsl:if test="count(total_budget) != 0">
                            Total budget: <xsl:value-of select="total_budget" /> EUR
                            <br />
                    </xsl:if>
                    <br />
            </xsl:template>
    </xsl:stylesheet>
    

    Παράδειγμα μετασχηματισμού: αποτέλεσμα

    mExpress - mobile in-EXhibition PRovision of Electronic Support Services



    Project Code: IST-2001-33432 (International)
    Funding programme: IST
    Funding Agency: European Commission
    Project type: RTD
    Web site: http://mexpress.intranet.gr/ (http://mexpress.intranet.gr/)

    ELTRUN budget: 328 EUR
    Total budget: 3493 EUR

    Το μοντέλο αντικειμένων εγγράφων

    Μέθοδοι της NodeList

    Η υλοποίηση του μοντέλου αντικειμένων εγγράφων στη Java

    Κλήσεις μέσω της διεπαφής Document

    Παράδειγμα: υπολογισμός μέσου όρου

    
    import javax.xml.parsers.*;
    import java.io.*;
    import org.w3c.dom.*;
    
    class Average {
        public static void main(String args[]) {
    
            if (args.length != 2) {
                System.err.println("Usage: Average element file");
                System.exit(1);
            }
    
            Document doc = null;
            try {
                // Create the DocumentBuilderFactory
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                // Create the document builder
                DocumentBuilder db = dbf.newDocumentBuilder();
                // Create DOM document from the file
                doc = db.parse(new File(args[1]));
            } catch (Exception e) {
                System.err.println("Parsing failed: " + e);
                System.exit(1);
            }
    
            NodeList nodes = doc.getElementsByTagName(args[0]);
            double sum = 0.0;
            for (int i = 0; i < nodes.getLength(); i++) {
                String grade = nodes.item(i).getFirstChild().getNodeValue();
                sum += (Integer.valueOf(grade)).doubleValue();
            }
            System.out.println(sum / nodes.getLength());
        }
    }
    

    Αποτέλεσμα υπολογισμού

    Η εκτέλεση στο αρχείο
    
    <result_list>
        <result>
            <id>809678</id>
            <grade>9</grade>
        </result>
        <result>
            <id>809630</id>
            <grade>8</grade>
        </result>
        <result>
            <id>809679</id>
            <grade>10</grade>
        </result>
        <result>
            <id>809673</id>
            <grade>6</grade>
        </result>
    </result_list>
    
    γίνεται ως εξής.
    java Average grade grade.xml
    8.25
    

    Άσκηση: Περιγραφή δεδομένων με XML και κανονικές εκφράσεις

    Άσκηση 10

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Παράρτημα: Ορισμός τύπου εγγράφων με τη χρήση DTD

    Υποστηρίζονται οι παρακάτω ορισμοί:
    Απλοί χαρακτήρες (parsed character data)
    
    <!ELEMENT name (#PCDATA)>
    
    Ένα στοιχείο
    
    <!ELEMENT student (person_data)>
    
    Ακολουθία στοιχείων
    
    <!ELEMENT person_data (name, surname)>
    
    Κανένα ή ένα στοιχείο
    
    <!ELEMENT person_name (given_name, initial?, last_name)>
    
    Μηδέν ή περισσότερα στοιχεία
    
    <!ELEMENT owned_cars (car*)>
    
    Ένα ή περισσότερα στοιχεία
    
    <!ELEMENT course_lecturer (person_data+)>
    
    Επιλογή στοιχείων
    
    <!ELEMENT engine (two_stroke | four_stroke | wankel | rotary)>
    
    Χρήση παρενθέσεων
    
    <!ELEMENT person_details (name, surname, (vat_number | id_number))>
    
    Κενό περιεχόμενο
    
    <!ELEMENT alumnus EMPTY>
    
    Τυχαίο περιεχόμενο
    
    <!ELEMENT text ANY>
    

    Παράδειγμα - DTD

    
    <!--
     -
     - Document Type Description for the projects
     -
     - $Id: project.dtd,v 1.2 2004/01/24 20:20:04 bkarak Exp $
     -
    -->
    <!ELEMENT project (
        shortname, 
        projtitle, 
        startdate?, 
        enddate, 
        web_site?, 
        our_budget?, 
        total_budget?, 
        funding_agency?, 
        funding_programme?, 
        project_code?, 
        partner*, 
        logo?, 
        description
    )>
    
    <!ELEMENT projtitle (#PCDATA)>
    <!ELEMENT our_budget (#PCDATA)>
    <!ELEMENT total_budget (#PCDATA)>
    <!ELEMENT funding_agency (#PCDATA)>
    <!ELEMENT funding_programme (#PCDATA)>
    <!ELEMENT project_code (#PCDATA)>
    <!ELEMENT web_site (#PCDATA)>
    <!ELEMENT startdate (#PCDATA)>
    <!ELEMENT enddate (#PCDATA)>
    <!ELEMENT shortname (#PCDATA)>
    <!ELEMENT logo (#PCDATA)>
    <!ELEMENT description (#PCDATA)>
    
    <!ELEMENT partner (shortname, country, web_site?)>
    <!ELEMENT shortname (#PCDATA)>
    <!ELEMENT country (#PCDATA)>
    

    Παράδειγμα - αντίστοιχη XML

    
    <?xml version="1.0"?>
    <project>
        <shortname>mExpress</shortname>
        <projtitle>mobile in-EXhibition PRovision of Electronic Support Services</projtitle>
        <startdate>20020305</startdate>
        <enddate>20040401</enddate>
        <web_site>http://mexpress.intranet.gr/</web_site>
        <our_budget>328 EUR</our_budget>
        <total_budget>3,493 EUR</total_budget>
        <funding_agency>European Commission</funding_agency>
        <funding_programme>IST</funding_programme>
        <project_code>IST-2001-33432</project_code>
        <partner>
            <shortname>Intracom</shortname>
            <country>EL</country>
            <web_site>http://www.intracom.gr</web_site>
        </partner>
        <partner>
            <shortname>Ericsson</shortname>
            <country>DK</country>
            <web_site>http://www.ericsson.com/</web_site>
        </partner>
        <partner>
            <shortname>ELISA</shortname>
            <country>FIN</country>
            <web_site>http://www.elisa.com</web_site>
        </partner>
        <partner>
            <shortname>POULIADIS</shortname>
            <country>EL</country>
            <web_site>http://www.pouliadis.gr</web_site>
        </partner>
        <partner>
            <shortname>SSF</shortname>
            <country>FIN</country>
            <web_site>http://www.ssf.fi/</web_site>
        </partner>
        <partner>
            <shortname>HUT</shortname>
            <country>FIN</country>
            <web_site>http://www.hut.fi</web_site>
        </partner>
        <partner>
            <shortname>FFC</shortname>
            <country>FIN</country>
        </partner>
        <partner>
            <shortname>ROTA</shortname>
            <country>EL</country>
            <web_site>http://www.rota.gr</web_site>
        </partner>
        <logo>../images/p_mexpress.gif</logo>
        <description>
    mEXPRESS aims to exploit the technological opportunities arising from
    evolution in the areas of wireless networks and positioning mechanisms in
    order to support and facilitate the professional exhibition industry in
    a context-aware manner. It will contribute to the economic development of
    the Community by providing means for efficient operation and interaction
    in information-rich environments such as exhibitions, and significantly
    enhancing promotional activities and business communications. The mEXPRESS
    project will provide an integrated mediation platform (mEXPRESS Service
    Provider) oriented to exhibition shows and events.
        </description>
    </project>
    

    Παράρτημα: Ορισμός τύπων προσδιορισμών με τη χρήση DTD

    Οι προδιορισμοί που επιτρέπονται σε ένα στοιχείο ορίζονται με στοιχεία της μορφής
    
    <!ATTLIST όνομα_στοιχείου
        όνομα_προσδιορισμού τύπος_προσδιορισμού περιορισμός
        ...
    >
    
    Υποστηρίζονται μεταξύ άλλων οι παρακάτω τύποι προσδιορισμού
    Χαρακτήρες
    CDATA
    Απαρίθμηση
    (επιλογή1 | επιλογή2 | ...)
    Κλειδί
    ID
    Αναφορά σε κλειδί
    IDREF
    Αναφορά σε κλειδιά
    IDREFS
    Οι πιο χρήσιμοι περιορισμοί προσδιορισμών είναι:
    #IMPLIED
    Προαιρετικός προσδιορισμός
    #REQUIRED
    Υποχρεωτικός προσδιορισμός

    Παράδειγμα - DTD

    
    <!ATTLIST project
        id ID #REQUIRED
        contact CDATA #IMPLIED
        scientific_coordinator CDATA #IMPLIED
        project_manager CDATA #IMPLIED
        group CDATA #REQUIRED
        international (yes | no) #REQUIRED
        type (consulting | rtd | training | dissemination) #REQUIRED
    >
    

    Παράδειγμα - XML

    
    <?xml version="1.0"?>
    <project
        id="p_mexpress"
        group="g_sense g_wrc"
        scientific_coordinator="m_dds"
        contact="m_pateli"
        international="yes"
        type="rtd"
        project_manager="m_pateli"
    >
    <!-- ... -->
    </project>
    

    Εκτενές παράδειγμα

    Γιορτινή κάρτα

    Ολοκληρωμένο παράδειγμα

    Διάγραμμα των κλάσεων

    XMas card class diagram

    HolidayCard

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import java.awt.Rectangle;
    
    /**
     * The Holiday Card program main class.
     *
     * @author Giorgos Gousios, Diomidis Spinellis
     * @depend - - - gr.aueb.card.DrawPanel
     * @depend - <instantiate> - gr.aueb.card.MidiPlayer
     * @depend - - - gr.aueb.card.Tree
     * @depend - - - gr.aueb.card.PointSnowFlake
     * @depend - - - gr.aueb.card.SlashSnowFlake
     */
    public class HolidayCard {
    
        /** Number of trees */
        private static final int NUM_TREES = 30;
        /** Number of snowflakes */
        private static final int NUM_SNOWFLAKES = 1500;
        /** Minimum tree width. */
        private static final int TREE_WIDTH = 30;
        /** Minimum tree height. */
        private static final int TREE_HEIGHT = 100;
        /** Additional variation to tree height and width */
        private static final int TREE_WOBBLE = 100;
        /** Song to play. */
        private static String musicFile = "/Jingle_Bells_full_Ab.mid";
    
        public static void main(String[] args) {
    
            // Create a window and the canvas to draw onto.
            DrawPanel d = DrawPanel.getInstance();
    
            // Create randomly-positioned trees.
            for (int i = 0; i < NUM_TREES; i++) {
                Rectangle treeBox = new Rectangle(
    		(int)(Math.random() * DrawPanel.WIDTH),
                    (int)(Math.random() * DrawPanel.HEIGHT),
                    TREE_WIDTH + (int)(Math.random() * TREE_WOBBLE),
                    TREE_HEIGHT + (int)(Math.random() * TREE_WOBBLE));
    
                Tree t = new Tree(d.getCanvas(), treeBox);
                d.addDrawObject(t);
            }
    
    	// Start playing music
    	MidiPlayer m = new MidiPlayer(musicFile);
    
            // Create the snowflakes.
            for (int i = 0; i < NUM_SNOWFLAKES; i++) {
    	    switch (i % 6) {
    	    case 0, 1:
                    d.addDrawObject(new PointSnowFlake(d.getCanvas(), '.', 15));
    		break;
    	    case 2:
                    d.addDrawObject(new PointSnowFlake(d.getCanvas(), 'o', 10));
    		break;
    	    case 3:
                    d.addDrawObject(new PointSnowFlake(d.getCanvas(), '*', 5));
    		break;
    	    case 4, 5:
                    d.addDrawObject(new SlashSnowFlake(d.getCanvas()));
    		break;
    	    }
    	    try {
    		// Allow existing snowflakes to fall a bit, before adding more
    		Thread.sleep(100);
    	    } catch (InterruptedException e) {
    	    }
            }
        }
    }
    

    DrawPanel

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.Vector;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    /**
     * The program's main window.
     * Extends JFrame to display the window where the
     * trees and snow are drawn. Implements the {@link java.lang.Runnable Runnable}
     * interface so as to create a thread that repeatedly calls the
     * {@link gr.aueb.card.Drawable#draw() draw}method.
     *
     * @author Giorgos Gousios, Diomidis Spinellis
     * @opt nodefillcolor lightblue
     * @assoc 1 drawablePanel 1 DrawablePanel
     */
    public class DrawPanel extends JFrame implements Runnable {
    
        /** The window's width. */
        public static final int WIDTH = 1024;
        /** The window's height. */
        public static final int HEIGHT = 768;
    
        /** The window's background color (blue). */
        public static final Color BACKGROUND_COLOR = new Color(0, 153, 204);
    
        /* A table that holds the objects to be drawn */
        private Vector<Drawable> drawObjects = null;
    
        /* The drawing thread (not serializable) */
        private transient Thread thread;
    
        /* The canvas to draw onto */
        private DrawablePanel drawablePanel = null;
    
        /** Serial number of persistant  data.
         * Required, because JFrame implements serializable.
         */
        static final long serialVersionUID = 1L;
    
        /**
         * Constructor to initialize an object with the minimal required state.
         * The constructor is private, as the full initialization is done
         * in the getInstance method.
         */
        private DrawPanel() {
            super("Holiday Card");
        }
    
        /**
         * Field initialization based on a constructed instance
         */
        private void initialize() {
            drawObjects = new Vector<Drawable>();
            initializeGraphics();
            initializeThread();
        }
    
        /**
         * Initialize, display the window, and start the animation.
         * The code here is separate from the constructor in order to
         * avoid the resulting "this escape".
         */
        public static DrawPanel getInstance() {
            DrawPanel instance = new DrawPanel();
            instance.initialize();
            return instance;
        }
    
        /** Initialize the main window. */
        private void initializeGraphics() {
            // Make our window look nice
            JFrame.setDefaultLookAndFeelDecorated(true);
    
            // Create our drawing canvas
            drawablePanel = new DrawablePanel(this);
            drawablePanel.setBackground(BACKGROUND_COLOR);
            drawablePanel.setPreferredSize(new Dimension(WIDTH, HEIGHT));
            setContentPane(drawablePanel);
    
            // Handle termination
            setDefaultCloseOperation(
                    javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    
            // Exit when the window is closed
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
            // Our size
            setSize(WIDTH, HEIGHT);
    
            // Force the parent window to expand the canvas to all available space
            pack();
    
            //Display the window
            setVisible(true);
        }
    
        /** Start the execution of the drawing thread. */
        private void initializeThread() {
            if (thread == null) {
                thread = new Thread(this);
                thread.setPriority(Thread.MIN_PRIORITY);
                thread.start();
            }
        }
    
        /** Add a component to be drawn. */
        public void addDrawObject(Drawable drawObject) {
            drawObjects.add(drawObject);
        }
    
        /** Return a copy of the component list to be drawn */
        public Vector<Drawable> getDrawables() {
            return new Vector<Drawable>(drawObjects);
        }
    
        /**
         * The method to be executed by the running thread. Executes the
         * {@link DrawablePanel#repaint()}method periodically.
         */
        public void run() {
            Thread me = Thread.currentThread();
    
            // Allow termination by setting thread to null
            while (thread == me) {
                // tell drawablePanel to repaint its contents
                drawablePanel.repaint();
                try {
                    Thread.sleep(250);
                } catch (InterruptedException e) {
                }
            }
            thread = null;
        }
    
        /**
         * Get the canvas's drawing panel
         *
         * @return javax.swing.JPanel
         */
        public JPanel getCanvas(){
            return drawablePanel;
        }
    }
    

    Drawable

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import javax.swing.JPanel;
    
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    
    /**
     * An abstract representation of a self-drawable object.
     *
     * @author Giorgos Gousios, Diomidis Spinellis
     */
    public abstract class Drawable {
    
        /**
         * The canvas to draw the object onto
         */
        protected Graphics2D canvas;
    
        /**
         * The canvas's bounds
         */
        protected Rectangle bounds;
    
        /**
         * Create drawable item
         *
         * @param panel The panel to draw the object onto
         */
        public Drawable(JPanel panel) {
            bounds = panel.getBounds();
            canvas = (Graphics2D)panel.getGraphics();
        }
    
        /**
         * Draws the object onto the canvas
         *
         */
        public abstract void draw(Graphics g);
    }
    

    DrawablePanel

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.util.Vector;
    
    import javax.swing.JPanel;
    
    
    /**
     * The Holiday Card program main class.
     *
     * @author Georgios Zouganelis
     * Draw components from this object to reduce flickering.
     */
    public class DrawablePanel extends JPanel {
    
        /** The DrawPanel this DrawablePanel is attached to **/
        private DrawPanel controller = null;
    
        /** Serial number of persistent  data.
         * Required, because JPanel implements serializable.
         */
        private static final long serialVersionUID = 1L;
    
        /**
         * Constructor to initialize the DrawablePanel with it's controller
         *
         */
        public DrawablePanel(DrawPanel panel) {
            controller = panel;
        }
    
        /**
         * Perform all drawing operations
         * By overriding the JPanel method and initiating all the drawing
         * from this place we take advantage of JPanel's double-buffering
         * capability.
         */
        @Override
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            setBackground(DrawPanel.BACKGROUND_COLOR);
    
            // Ask our controller for a copy of items to draw
            Vector<Drawable> toPaint = controller.getDrawables();
            for (Drawable d : toPaint)
                d.draw(g);
        }
    }
    

    Tree

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Polygon;
    import java.awt.Rectangle;
    import javax.swing.JPanel;
    
    /**
     * A self-drawable tree. Uses a box to specify the tree's bounds (the dimensions
     * constructor parameter). The trunk is placed in the middle of the bottom side
     * of the box, having a width equal to the 8% of the total width of the tree and
     * a height equal to the 20% of the total height of the bounding box. The main
     * body is represented as an isosceles triangle with a height of 80% of the
     * height of the bounding box.
     *
     * @author Giorgos Gousios, Diomidis Spinellis
     * @opt nodefillcolor green
     */
    public class Tree extends Drawable {
    
        /** Tree trunk width as % of the bounding rectangle width */
        private final double TRUNK_WIDTH_FACTOR = 0.08;
        /** Tree trunk height as % of the bounding rectangle height */
        private final double TRUNK_HEIGHT_FACTOR = 0.2;
        /** Tree body height as % of the bounding rectangle height */
        private final double BODY_HEIGHT_FACTOR = 0.8;
        /** Trunk's color (RGB) */
        private final Color BROWN = new Color(204, 102, 0);
        /** Body's color (RGB) */
        private final Color GREEN = new Color(0, 254, 0);
        /** Tree balls' color (RGB) */
        private final Color RED = new Color(250, 0, 0);
    
        /** The tree's bounding rectangle */
        private Rectangle dimensions;
    
        /**
         * Creates a tree from the specified bounding box
         *
         * @param panel The panel to draw the object onto
         * @param dimensions The bounding box dimensions.
         */
        public Tree(JPanel panel, Rectangle dimensions) {
        super(panel);
    	this.dimensions = dimensions;
        }
    
        /**
         * Draws the tree.
         *
         * @param g The Graphics object on which we will paint
         */
        @Override
        public void draw(Graphics g) {
    	drawTrunk(g);
    	drawBody(g);
        }
    
        /**
         * Draws the trunk. For details on how the lengths are calculated
         *
         * @param g The Graphics object on which we will paint
         * @see gr.aueb.Tree the class description.
         */
        private void drawTrunk(Graphics g) {
    	/* Calculate the trunk rectangle first */
    	Rectangle r = new Rectangle();
    
    	r.x = (int) (dimensions.x + (dimensions.width
                        - dimensions.width * TRUNK_WIDTH_FACTOR) / 2);
    	r.y = (int) (dimensions.y + dimensions.height * BODY_HEIGHT_FACTOR);
    	r.width = (int) (dimensions.width * TRUNK_WIDTH_FACTOR);
    	r.height = (int) (dimensions.height * TRUNK_HEIGHT_FACTOR);
    
    	/* Draw it! */
    	g.drawRect(r.x, r.y, r.width, r.height);
    
    	/* Fill it with brown color */
    	Color c = g.getColor();
    	g.setColor(BROWN);
    	g.fillRect(r.x, r.y, r.width, r.height);
    	g.setColor(c); //Revert paint color to default
        }
    
        /**
         * Draws the body. For details on how the lengths are calculated
         *
         * @param g The Graphics object on which we will paint
         * @see gr.aueb.Tree the class description.
         */
        private void drawBody(Graphics g) {
            /* Create the polygon (triangle) to draw */
            Polygon p = new Polygon();
            p.addPoint(dimensions.x + dimensions.width / 2, dimensions.y);
            p.addPoint(dimensions.x,
                    (int) (dimensions.y + dimensions.height * BODY_HEIGHT_FACTOR));
            p.addPoint(dimensions.x + dimensions.width,
                    (int) (dimensions.y + dimensions.height * BODY_HEIGHT_FACTOR));
            /* Draw the body */
            g.drawPolygon(p);
    
            /* Fill it with green color */
            Color c = g.getColor();
            g.setColor(GREEN);
            g.fillPolygon(p);
            g.setColor(c); // Revert paint color to default
    
            /* Set Ornaments to the body. */
            drawTreeOrnaments(g);
        }
    
        /**
         * Draws the ornaments of the tree.
         * @param g The Graphics object on which we will paint
         * @param x The Abscissa of the part of the body to draw the ornament
         * @param y The Ordinate of the part of the body to draw the ornament
         */
        private void addTreeOrnament(Graphics g, int x, int y) {
            /* Draw Tree Ornament. */
            g.drawOval(x, y, 10, 10);
            /* Set color to Red. */
            g.setColor(RED);
            /* Fill Tree Ornament with color. */
            g.fillOval(x, y, 10, 10);
        }
    
        /**
         * Calls addTreeOrnament for specific locations on
         * the tree body.
         * @param g The Graphics object on which we will paint
         */
        private void drawTreeOrnaments(Graphics g) {
            /* yAxis of the body. */
            int yAxis = (int) (dimensions.y + dimensions.height * BODY_HEIGHT_FACTOR);
            /* Add ornament to down left. */
            addTreeOrnament(g, dimensions.x - 2, yAxis - 2);
            /* Add ornament to down right. */
            addTreeOrnament(g, dimensions.x + dimensions.width - 1, yAxis - 1);
            /* Add ornament to up left. */
            addTreeOrnament(g, dimensions.x + dimensions.width / 2 - 5 - 20, yAxis - 25);
            /* Add ornament to up right. */
            addTreeOrnament(g, dimensions.x + dimensions.width / 2 - 5 + 20,  yAxis - 25);
            /* Add ornament to middle. */
            addTreeOrnament(g,dimensions.x + dimensions.width / 2 - 5, yAxis - 65);
        }
    }
    

    SnowFlake

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import java.awt.Color;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import javax.swing.JPanel;
    
    /**
     * A self-drawable 'snowflake' represented by a character. The move pattern and
     * character to be displayed is determined by subclasses.
     *
     * @author Giorgos Gousios, Diomidis Spinellis
     * @opt nodefillcolor white
     */
    public abstract class SnowFlake extends Drawable {
    
        /** The snowflake's background color. */
        private static final Color WHITE = new Color(255, 255, 255);
    
        /**
         * The 'x' current coordinate of the snowflake.
         */
        protected int coordX;
    
        /**
         * The 'y' current coordinate of the snowflake.
         */
        protected int coordY;
    
        /**
         * The character to be displayed as a snowflake
         */
        protected char displayChar;
    
        /**
         * Create a snowflake represented by a point-like character.
         *
         * @param panel The panel to draw the object onto
         */
        public SnowFlake(JPanel panel) {
            super(panel);
            coordX = (int) (bounds.width * Math.random()) + bounds.x;
            coordY = 0;
        }
    
        /**
         * Draw the snowflake and wrap around.
         *
         * @param g The Graphics object on which we will paint
         */
        @Override
        public void draw(Graphics g) {
            // Go back to the top when hitting the bottom
            if (coordY >= bounds.height + bounds.y)
                coordY = 0;
    
            // Draw the character in white
            g.setColor(WHITE);
            g.drawString((Character.valueOf(displayChar)).toString(),
            coordX, coordY);
        }
    }
    

    SlashSnowFlake

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import java.awt.Graphics;
    import javax.swing.JPanel;
    
    /**
     * A class that animates a slash on a canvas.
     *
     * @author Giorgos Gousios, Diomidis Spinellis
     * @opt nodefillcolor white
     */
    public class SlashSnowFlake extends SnowFlake {
    
        /**
         * Create a snowflake represented by a slash.
         *
         * @param panel The panel to draw the object onto
         */
        public SlashSnowFlake(JPanel panel) {
            super(panel);
            displayChar = '/';
        }
    
        /**
         * Display the slash on the drawing canvas. The slash alternates between
         * forward slash and backslash depending on the current 'y' coordinate.
         *
         * @param g The Graphics object on which we will paint
         */
        @Override
        public void draw(Graphics g) {
    
            /* / on even lines, \ on odd lines */
            displayChar = ((coordY % 2) == 0) ? '/' : '\\';
    
            /* Move by 0 to 10 pixels down*/
            coordY += (int) (Math.random() * 10);
    
            // Draw it through the superclass
            super.draw(g);
        }
    }
    

    PointSnowFlake

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import java.awt.Graphics;
    import javax.swing.JPanel;
    
    /**
     * A class that animates a point-like character on a canvas.
     * The character can be e.g. a . or a * or an o.
     *
     * @author Giorgos Gousios, Diomidis Spinellis
     * @opt nodefillcolor white
     */
    public class PointSnowFlake extends SnowFlake {
    
        /** The wieght of the snowflake. */
        int weight;
    
        /**
         * Create a snowflake represented by a point-like character.
         *
         * @param panel The panel to draw the object onto
         * @param c The character to draw
         * @param w The snowflake's weight
         */
        public PointSnowFlake(JPanel panel, char c, int w) {
            super(panel);
            displayChar = c;
            weight = w;
        }
    
        /**
         * Display the star onto the canvas. The star changes its 'x' coordinate,
         * depending on the 'y' coordinate.
         *
         * @param g The Graphics object on which we will paint
         */
        @Override
        public void draw(Graphics g) {
    
            // Move the snowflake left and right
            switch (coordY % 3) {
            case 1:
                coordX = coordX - 5;
                break;
            case 2:
                coordX = coordX + 5;
                break;
            default:
                break;
            }
    
            // Move down, based on the weight
            coordY += (int)(Math.random() * weight);
    
            // Draw it through the superclass
            super.draw(g);
        }
    }
    

    MidiPlayer

    
    /*-
     * Copyright 2005-2018 Diomidis Spinellis
     *
     *   Licensed under the Apache License, Version 2.0 (the "License");
     *   you may not use this file except in compliance with the License.
     *   You may obtain a copy of the License at
     *
     *       http://www.apache.org/licenses/LICENSE-2.0
     *
     *   Unless required by applicable law or agreed to in writing, software
     *   distributed under the License is distributed on an "AS IS" BASIS,
     *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *   See the License for the specific language governing permissions and
     *   limitations under the License.
     */
    
    package gr.aueb.card;
    
    import javax.sound.midi.*;
    import java.io.InputStream;
    import java.io.IOException;
    
    /**
     * Play the specified MIDI file
     * Note:
     * For this to work you must ensure that the computer's mixer
     * is configured to play the software synhtesizer output.
     *
     * @author Diomidis Spinellis
     */
    public class MidiPlayer {
        /** The sequencer we are using to play the MIDI data. */
        static Sequencer sequencer = null;
    
        /** Constructor for playing the specified file. */
        MidiPlayer(String file) {
    	playFile(file);
        }
    
        /** Play the specified file. */
        public void playFile(String file) {
            InputStream midiFile = getClass().getResourceAsStream(file);
            try {
    	    if (sequencer == null)
    		sequencer = MidiSystem.getSequencer();
    	    else
    		end();
    	    sequencer.setSequence(MidiSystem.getSequence(midiFile));
                sequencer.open();
                sequencer.start();
            } catch(MidiUnavailableException e) {
                System.err.println("Midi device unavailable:" + e);
            } catch(InvalidMidiDataException e) {
                System.err.println("Invalid MIDI data:" + e);
            } catch(IOException e) {
                System.err.println("I/O error:" + e);
            }
        }
    
        /** Return true if the music is still playing. */
        public boolean isPlaying() {
    	return sequencer.isRunning();
        }
    
        /* Stop playing. */
        public void end() {
                sequencer.stop();
                sequencer.close();
    	    sequencer = null;
        }
    }
    

    Τεκμηρίωση

    Τα σχόλια μέσα στον κώδικα επιτρέπουν την αυτόματη δημιουργία της τεκμηρίωσης, με τη χρήση του προγράμματος javadoc.
    Τεκμηρίωση σε μορφή XML

    Προαιρετική άσκηση

    Με βάση τον κώδικα της κάρτας υλοποιήστε ένα παιγνίδι (π.χ. απόφυγε το χιόνι, ή μάζεψε τις μπάλες, ή πιάσε τον τάρανδο, κ.λπ.).

    Πληροφορίες για την άσκηση

    Συναρτήσεις και ροές

    Συναρτησιακός προγραμματισμός

    Εκφράσεις λάμδα

    
    (a) -> a * a;
    (a, b) -> a + b;
    () -> true;
    

    Διαθέσιμοι τύποι

    Το πακέτο java.util.function ορίζει μια σειρά από διεπαφές FunctionalInterface:

    Οι παραπάνω μπορούν κατά περίπτωση να εξειδικευτούν παραπάνω με ένα από τα προθέματα: Bi (δέχεται δύο ορίσματα)· Int, Long, Double (τύπος ορίσματος)· Το (τύπος επιστροφής).

    Μέθοδοι σε συναρτήσεις

    Οι παρακάτω μέθοδοι είναι διαθέσιμες ανάλογα με το αντικείμενο.

    Παράδειγμα λάμδα

    
    import java.util.function.Function;
    
    class Lambda {
        public static void main(String args[]) {
            // Assign lambda to variable
            Function<Integer, Integer> square = (a) -> a * a;
            // Apply function to value
            System.out.println(square.apply(2));
    
            // Pass function to method and obtain function result
            Function<Integer, Integer> fourthPower = square.compose(square);
            System.out.println(fourthPower.apply(2));
        }
    }
    

    Μέθοδοι ως συναρτήσεις

    Μέθοδοι που ικανοποιούν μια διεπαφή Functional μπορούν να χρησιμοποιηθούν ως τέτοιες με τη χρήση του συμβόλου ::.
    
    import java.util.function.UnaryOperator;
    import java.math.BigInteger;
    
    // Methods compatible with a functional interface
    class FunctionalFactorial {
        public static BigInteger factorial(BigInteger i) {
            if (i.equals(BigInteger.ZERO))
                return BigInteger.ONE;
            else
                return i.multiply(factorial(i.subtract(BigInteger.ONE)));
        }
    
        public BigInteger instanceFactorial(BigInteger n) {
            return factorial(n);
        }
    
        // Prints 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
        public static void main(String args[]) {
            UnaryOperator<BigInteger> f;
    
            f = FunctionalFactorial::factorial;
            System.out.println(f.apply(new BigInteger("100")));
    
            f = new FunctionalFactorial()::instanceFactorial;
            System.out.println(f.apply(new BigInteger("100")));
        }
    }
    

    Παράδειγμα σύνθεσης μεθόδων

    
    import java.util.function.DoubleUnaryOperator;
    import java.util.function.Function;
    import static java.lang.Math.abs;
    import static java.lang.Math.PI;
    
    class Inverse {
        // Return true if a almost equals b.
        static boolean almostEquals(double a, double b) {
            final double EPSILON = 1e-15;
            return abs(a - b) < EPSILON;
        }
    
        public static void main(String args[]) {
            Function<DoubleUnaryOperator, DoubleUnaryOperator> inverse =
                (f) -> ( (x) -> 1. / f.applyAsDouble(x) );
    
            DoubleUnaryOperator cot = inverse.apply(Math::tan);
            DoubleUnaryOperator sec = inverse.apply(Math::cos);
            DoubleUnaryOperator csc = inverse.apply(Math::sin);
    
    	// Verify value for key arguments.
            assert almostEquals(sec.applyAsDouble(0), 1);
            assert almostEquals(csc.applyAsDouble(PI / 2), 1);
            assert almostEquals(cot.applyAsDouble(PI / 4), 1);
        }
    }
    

    Ορισμός τύπων συναρτήσεων

    
    @FunctionalInterface
    interface TripletChooser <T> {
        T choose(T a, T b, T c);
    }
    
    class TripletChooserExample {
        public static void main(String args[]) {
            TripletChooser<String> getFirst = (a, b, c) -> a;
            System.out.println(getFirst.choose(args[0], args[1], args[2]));
        }
    }
    

    Παράδειγμα χρήσης τύπου συνάρτησης

    
    @FunctionalInterface
    interface Combiner {
        int combine(int a, char operator, int b);
    }
    
    public class CombinerExample {
        public static void main(String[] args) {
            Combiner arithmeticCombiner = (a, operator, b) -> {
                switch (operator) {
                    case '+': return a + b;
                    case '*': return a * b;
                    default: throw new IllegalArgumentException("Invalid operator for arithmetic: " + operator);
                }
            };
    
            Combiner bitwiseCombiner = (a, operator, b) -> {
                switch (operator) {
                    case '+': return a | b;
                    case '*': return a & b;
                    default: throw new IllegalArgumentException("Invalid operator for bitwise: " + operator);
                }
            };
    
            // Verify Arithmetic Combiner
            assert arithmeticCombiner.combine(5, '+', 3) == 8;
            assert arithmeticCombiner.combine(5, '*', 3) == 15;
    
            // Verify Bitwise Combiner
            assert bitwiseCombiner.combine(5, '+', 3) == 7;
            assert bitwiseCombiner.combine(5, '*', 3) == 1;
        }
    }
    

    Ροές

    Μια ροή (stream) είναι μια επεξεργάσιμη ακολουθία ενός απροσδιόριστου αριθμού στοιχείων. Σε σχέση με μια συλλογή η ακολουθία έχει τις παρακάτω ιδιότητες.

    Τύποι ροών

    Ο τύπος Optional

    Η παραμετρική κλάση java.util.Optional περιέχει μια τιμή τύπου T που μπορεί και να απουσιάζει.

    Χρήσιμες μέθοδοι

    Πηγές ροών

    Ενδιάμεση επεξεργασία ροών

    Τελική επεξεργασία ροών

    Λέξεις κειμένου: Knuth vs McIlroy

    Donald Knuth Douglas McIlroy

    Σχετικά είναι αυτή η εργασία (https://dl.acm.org/doi/pdf/10.1145/5948.315654), αυτό το κόμικ (https://comic.browserling.com/97) και αυτό το βίντεο (https://www.youtube.com/watch?v=kQKrmDLvijo).

    Παράδειγμα: Λέξεις κειμένου

    
    /*
     * Output ordered list of a file's unique words
     */
    
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.stream.Stream;
    import java.io.IOException;
    
    class UniqueWords {
        public static void main(String args[]) {
            if (args.length != 1) {
                System.err.println("Usage: UniqueWords file");
                System.exit(1);
            }
    
            try {
                Files
                    .lines(Paths.get(args[0]))
                    .flatMap(line -> Stream.of(line.split("\\W+")))
                    .sorted()
                    .distinct()
                    .filter((x) -> x.length() > 0)
                    .forEach(System.out::println);
            } catch (IOException e) {
                System.err.println("Error reading line: " + e.getMessage());
                System.exit(1);
            }
        }
    }
    

    Παράδειγμα: εκτίμηση πληθάριθμου

    
    /**
     * Estimate the number of distinct elements in a data stream
     * (F0 estimation problem) based on the algorithm published in the
     * Proceedings of 30th Annual European Symposium on Algorithms (ESA 2022)
     * https://doi.org/10.48550/arXiv.2301.10191
     */
    
    import java.util.HashSet;
    import java.util.Random;
    import java.util.Set;
    import java.util.function.Function;
    import java.util.stream.IntStream;
    import java.util.stream.Stream;
    
    public class F0Estimator {
    
        // Probability to add an element
        private double p = 1.0;
    
        /**
         * Estimate number of unique elements in the passed stream
         * @param storageSize The storage to use
         */
        public <T> long uniqueElements(Stream<T> stream, int storageSize) {
            final float LOAD_FACTOR = 0.5f;
    
            Set<T> X = new HashSet<>(storageSize , LOAD_FACTOR);
            Random random = new Random();
    
            stream.forEach(element -> {
                // Ensure element is in the set with probability p
                if (random.nextDouble() < p)
                    X.add(element);
                else
                    X.remove(element);
    
                if (X.size() >= storageSize) {
                    // Randomly keep each element in X with probability 1/2
                    X.removeIf(e -> random.nextDouble() < 0.5);
                    p /= 2;
                    if (X.size() >= storageSize) {
                        throw new IllegalStateException("Threshold exceeded after sampling");
                    }
                }
            });
    
            return (long) (X.size() / p);
        }
    
        public static void main(String[] args) {
            // Create a Random instance
            Random random = new Random();
    
            // Create a stream of many random integers
            Stream<Integer> stream = IntStream
                .generate(random::nextInt).limit(1_000_000_000)
                .map(i -> i & 0xffff)
                .boxed();
    
            final int STORAGE_SIZE = 1000;
    
            var estimator = new F0Estimator();
    
            long uniqueCount = estimator.uniqueElements(stream, STORAGE_SIZE);
            System.out.println("Estimated number of unique elements: " + uniqueCount);
        }
    }
    

    Η μέθοδος Newton-Raphson

    Η προσεγγιστική μέθοδος Newton-Raphson μας επιτρέπει να βρούμε τη ρίζα οποιασδήποτε πραγματικής συνάρτησης. x n+1 = x n - f ( x n ) f ′ ( x n )

    Τετραγωνική ρίζα με Newton-Raphson

    Παράδειγμα: Υλοποίηση √2 με NR

    Το παρακάτω παράδειγμα υπολογίζει τη √2 δημιουργώντας μια άπειρου μήκους ακολουθία με διαδοχικά καλύτερες προσεγγίσεις.

    
    import java.util.Optional;
    import java.util.function.Predicate;
    import java.util.function.DoubleFunction;
    import java.util.stream.Stream;
    
    
    /** Find a square root using the Newton-Raphson approximation */
    class SquareRoot {
    
        /** Obtain successive approximations of a function's root using the
         * Newton-Raphson method. */
        static class NewtonRaphson {
            /** f(x) and f'(x) */
            DoubleFunction fx, fdx;
    
            NewtonRaphson(DoubleFunction fx, DoubleFunction fdx) {
                this.fx = fx;
                this.fdx = fdx;
            }
    
            /** Return next approximation, given the previous one */
            Double nextApproximation(double previous) {
                // xₙ₊₁ = xₙ - f(xₙ) / f′(xₙ)
                return previous - (double)fx.apply(previous) / (double)fdx.apply(previous);
            }
        }
    
        /** Test whether successive parts of a series differ more than a value */
        static class NotWithin implements Predicate<Double> {
            /** Previous value in series */
            Optional<Double> previous = Optional.empty();
            /** Difference value above which the test method returns true */
            Double epsilon;
    
            NotWithin(double d) {
                epsilon = d;
            }
    
            /**
             * Return true if successive parts of the series do not differ by
             * less than the specified epsilon.
             */
            @Override
            public boolean test(Double d) {
                boolean r;
    
                if (previous.isPresent())
                    r = (Math.abs(previous.get() - d) > epsilon);
                else
                    r = true;
                previous = Optional.of(d);
                return r;
            }
        }
    
        public static void main(String args[]) {
            final double SQRT_TO_FIND = 2;
            DoubleFunction fx = (x -> x * x - SQRT_TO_FIND); // f(x) = x² - α
            DoubleFunction fdx = (x -> 2 * x); // f'(x) = 2x
            var rootTwo = new NewtonRaphson(fx, fdx);
            var greaterThanEpsilon = new NotWithin(1e-15);
    
    	// SQRT_TO_FIND is also our first approximation
            System.out.println(Stream.iterate(SQRT_TO_FIND, rootTwo::nextApproximation)
                .dropWhile(greaterThanEpsilon)
                .findFirst()
                .get());
        }
    }
    

    Άσκηση: συναρτήσεις και ροές

    Άσκηση 17

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Ανάπτυξη διαδικτυακών εφαρμογών

    Περιεχόμενα

    Το μοντέλο αναφοράς OSI

    Φυσικό επίπεδο

    Επίπεδο σύνδεσης

    Επίπεδο δικτύου

    Πρωτόκολλα διαδικτύου: IPv4, IPv6, IPsec, ICMP

    IPv4

        0                   1                   2                   3   
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |Version|  IHL  |Type of Service|          Total Length         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |         Identification        |Flags|      Fragment Offset    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Time to Live |    Protocol   |         Header Checksum       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                       Source Address                          |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Destination Address                        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Options                    |    Padding    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    Επίπεδο μεταφοράς

    Πρωτόκολλα διαδικτύου: TCP, UDP, …

    TCP

        0                   1                   2                   3   
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |          Source Port          |       Destination Port        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                        Sequence Number                        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Acknowledgment Number                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Data |           |U|A|P|R|S|F|                               |
       | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
       |       |           |G|K|H|T|N|N|                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Checksum            |         Urgent Pointer        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Options                    |    Padding    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                             data                              |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    Επίπεδο συνόδου

    Πρωτόκολλα διαδικτύου: Sockets API

    Επίπεδο παρουσίασης

    (Σε παρένθεση σχετικά πρωτόκολλα του διαδικτύου)

    Επίπεδο εφαρμογής

    (Σε παρένθεση σχετικά πρωτόκολλα του διαδικτύου)

    Αρχιτεκτονική του παγκόσμιου ιστού

    Προσδιορισμός στοιχείων με URI

    URI = scheme ":" ["//" authority] path ["?" query] ["#" fragment]
    
    index.html
    https://www.dmst.aueb.gr/dds/
    https://www.google.com/search?q=AUEB
    https://www.aueb.gr/Hmerologio.pdf#page=3
    

    Το πρωτόκολλο HTTP

    Το πρωτόκολλο HTTP υποστηρίζει τις παρακάτω μεθόδους επικοινωνίας:

    Παράδειγμα HTTP

    Αίτηση

    GET /dds/ HTTP/1.1
    Host: www2.dmst.aueb.gr
    User-Agent: curl/7.71.1
    Accept: */*
    

    Απάντηση

    HTTP/1.1 200 OK
    Date: Sun, 08 Jan 2023 10:00:32 GMT
    Server: Apache/1.3.33 (Linux/RHEL)
    Content-Location: index.en.html
    Vary: negotiate,accept-language,accept-charset
    TCN: choice
    Last-Modified: Fri, 30 Dec 2022 21:03:52 GMT
    Accept-Ranges: bytes
    Content-Length: 22599
    Content-Type: text/html
    Content-Language: en
    

    Αίτημα HTTP στη Java

    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.MalformedURLException;
    
    public class UrlRetriever {
        public static void main(String[] args) {
    	if (args.length != 1) {
    	    System.err.println("Usage: UrlRetriever URL");
    	    System.exit(1);
    	}
    
            URL url = null;
            try {
                // Make a request to the specified URL
                url = new URL(args[0]);
            } catch (MalformedURLException e) {
                    System.err.println("Invalid URL: " + e);
                    System.exit(1);
            }
    
            HttpURLConnection connection = null;
            try {
                connection = (HttpURLConnection)url.openConnection();
            } catch (ClassCastException e) {
                System.err.println("Specified protocol is not HTTP");
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Connection error: " + e);
                System.exit(1);
            }
    
            try {
                connection.setRequestMethod("GET");
    
                // Get the response from the server
                int status = connection.getResponseCode();
                BufferedReader in = new BufferedReader(
                    new InputStreamReader(connection.getInputStream()));
                int c;
                StringBuilder content = new StringBuilder();
                while ((c = in.read()) != -1) {
                    content.append((char)c);
                }
                in.close();
    
                // Print the response
                System.out.println(content.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    Χαρακτηριστικά της αρχιτεκτονικής REST

    Παραδείγματα αιτήσεων REST

    
    java UrlRetriever https://www.gutenberg.org/cache/epub/1342/pg1342.txt
    
    curl 'https://aviationweather.gov/api/data/metar?ids=LGAV&hours=48'
    curl -v -k "https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&titles=Moon&sites=enwiki" |  jq .
    curl -A "Mozilla/5.0" 'http://telematics.oasa.gr/api/?act=getBusLocation&p1=1822'
    curl -LH "Accept: application/vnd.crossref.unixref+xml;q=1, application/rdf+json;q=0.5" https://doi.org/10.1126/science.169.3946.635
    
    curl --request POST -H "Authorization: Bearer $ROBBIE_API_KEY" --url http://robbie.dmst.aueb.gr:50135/completion --header "Content-Type: application/json" --data '{ "prompt": "You are a helpful Assistant responding to User queries. User: Which city is the capital of Germany?\nAssistant: Berlin\nWhich city is the capital of Greece?"}'
    
    curl https://api.openai.com/v1/engines/davinci/completions \
      -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $OPENAI_API_KEY" \
      -d '{
        "prompt": "I can convert a String into an int in Java program by ",
        "max_tokens": 50
      }'
    

    Εξυπηρετητής ώρας HTTP στη Java

    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    import com.sun.net.httpserver.HttpExchange;
    import com.sun.net.httpserver.HttpHandler;
    import com.sun.net.httpserver.HttpServer;
    
    public class TimeServer {
        static class GetHandler implements HttpHandler {
            @Override
            public void handle(HttpExchange exchange) throws IOException {
    
                var calendar = Calendar.getInstance();
                var dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss\n");
                byte[] response = dateFormat.format(calendar.getTime()).getBytes();
    
                // Set the response header and status code
                exchange.sendResponseHeaders(200, response.length);
    
                // Get the response body output stream
                OutputStream responseBody = exchange.getResponseBody();
    
                System.out.print(exchange.getRemoteAddress());
                responseBody.write(response);
                responseBody.close();
            }
        }
    
        public static void main(String[] args) throws Exception {
            // Create a server on port 8000
            HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
    
            server.createContext("/", new GetHandler()); // "GET /" handler
    
            server.start(); // Start serving requests
        }
    }
    

    Διαδικτυακές εφαρμογές στην πράξη

    Άσκηση: Επικοινωνία Πελάτη-Εξυπηρετητή

    Άσκηση 18

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

  • Rogers Candenhead. Πλήρες Εγχειρίδιο της Java 12. 8η Έκδοση. Εκδόσεις X. Γκιούρδα, 2023. Κεφ. 17, 20.
  • Ατομικές ασκήσεις και συμμετοχή

    Αρχείο των ασκήσεων και ηλεκτρονική παράδοση

    Οδηγίες

    Οδηγίες για την εκτέλεση, βαθμολογία και παράδοση των ασκήσεων υπάρχουν στην εισαγωγή του μαθήματος.

    Προθεσμίες παράδοσης

    Η ώρα παράδοσης είναι πάντα τοπική ώρα Ελλάδος.

    Άσκηση Ημερομηνία και ώρα παράδοσης
    1 Sun Oct 11 23:59:59 2026
    2 Sun Oct 18 23:59:59 2026
    3 Sun Oct 25 23:59:59 2026
    4 Sun Nov 1 23:59:59 2026
    5 Sun Nov 8 23:59:59 2026
    6 Sun Nov 15 23:59:59 2026
    16 Sun Nov 15 23:59:59 2026

    Συχνές ερωτήσεις και απαντήσεις (FAQ)

    Περιεχόμενα

    Που θα βρω τεκμηρίωση για τις κλάσεις που υποστηρίζει η Java;

    Στον αντίστοιχο ιστότοπο της Oracle (https://docs.oracle.com/en/java/javase/index.html).

    Πως θα ρυθμίσω το Visal Studio Code για να παραδώσω τον τρόπο επίλυσης των ασκήσεων

    Διαβάστε την τεκμηρίωση που παραπέμπεται στη σχετική σελίδα των σημειώσεων.

    Για κάποιο πολύ σοβαρό λόγο δεν μπόρεσα να παραδώσω την άσκηση στην ώρα της. Μπορώ να πάρω μια παράταση;

    Η προθεσμία παράδοσης της κάθε άσκησης είναι η τελευταία ημερομηνία στην οποία μπορείτε να παραδώσετε την άσκηση χωρίς επιπτώσεις στο βαθμό της. Καλό είναι να την παραδίδετε πριν το επόμενο μάθημα έτσι ώστε
    1. να μπορέσετε να ασχοληθείτε με την καινούρια όταν αυτή ανακοινωθεί
    2. να έχετε ένα περιθώριο χρόνου για να καλύψετε προσωπικά ή τεχνικά προβλήματα που μπορεί να εμφανιστούν
    Σε περίπτωση που δεν μπορέσατε να παραδώσετε την άσκηση μέσα στην προθεσμία, θα πρέπει να την παραδώσετε το συντομότερο δυνατό για να έχετε τη μικρότερη δυνατή επιβάρυνση στο βαθμό. Για λόγους διαφάνειας και αποτελεσματικότητας στη βαθμολόγηση αυτή γίνεται αυτόματα χωρίς να υπάρχει πρόβλεψη για εξαιρέσεις. Ο αριθμός όμως των ασκήσεων σας επιτρέπει να καλύψετε τη διαφορά στις επόμενες ασκήσεις.

    Πότε πρέπει να κατεβάζω ενημερωμένη έκδοση του αρχείου Jarpeb.jar;

    Στη σελίδα αυτή εμφανίζεται η τρέχουσα έκδοση και η ημερομηνία τελευταίας αλλαγής της κάθε άσκησης. Αν έχετε κατεβάσει το αρχείο πριν από την ημερομηνία τελευταίας αλλαγής της άσκησης που σας ενδιαφέρει ή αν η έκδοση της άσκησης στον υπολογιστή σας είναι προγενέστερη αυτής που περιέχει το αρχείο τότε θα πρέπει να κατεβάσετε νεώτερη έκδοση του αρχείου. Για να μπορέσετε να δείτε την έκδοση της άσκησης που έχετε στον υπολογιστή σας μπορείτε να τρέξετε την εντολή
    java -jar Exercise.jar -v <κωδικός μαθήματος> <κωδικός άσκησης> <ΑΜ φοιτητή>
    

    Μπορώ να ασχοληθώ με ασκήσεις που δεν έχουν ανακοινωθεί ακόμα;

    Ναι, αλλά με δική σας ευθύνη. Ασκήσεις που δεν έχουν ανακοινωθεί επίσημα στο μάθημα και για τις οποίες δεν έχει δωθεί ημερομηνία παράδοσης μπορεί να μην έχουν ελεγχθεί πλήρως, να βρίσκονται ακόμα υπό ανάπτυξη και να περιέχουν λάθη στην εκφώνηση και στη βαθμολόγηση. Ο βαθμός που θα καταχωρήσετε ισχύει, αλλά είναι πιθανό κατά την επίλυση να συναντήσετε προβλήματα που θα έχουν διορθωθεί μέχρι την επίσημη ανακοίνωση της άσκησης. Επίσης, σε ασκήσεις που δεν έχουν ανακοινωθεί, μπορεί οι βοηθοί του μαθήματος και οι επιβλέποντες στα εργαστήρια να μην μπορούν να σας βοηθήσουν.

    Γίνεται να υπολογιστούν στο μάθημα οι βαθμοί των ασκήσεων που είχα λάβει την περασμένη χρονιά;

    Δυστυχώς όχι, αυτό δε γίνεται. Κάθε χρόνο οι εκφωνήσεις των ασκήσεων και οι κωδικοί ελέγχου αλλάζουν. Η βαθμολογία των ασκήσεων ισχύει μόνο για την εξεταστική περίοδο του χειμερινού εξαμήνου και την πρόσθετη εξεταστική περίοδο του Σεπτεμβρίου του ίδιου έτους με αυτό στο οποίο έγιναν οι ασκήσεις.

    Ποιες είναι οι ημερομηνίες παράδοσης των ασκήσεων;

    Οι ημερομηνίες παράδοσης εμφανίζονται στη σελίδα αυτή. Για ασκήσεις που δεν έχουν ανακοινωθεί ακόμα σε μάθημα η ημερομηνία παράδοσης είναι ανοιχτή και συνεπώς δεν εμφανίζεται.

    Τι ρόλο παίζει το πεδίο "σχόλια" στη σελίδα παράδοσης της βαθμολογίας; Δεν έχω λάβει απάντηση σε κάποιο σχόλιο που είχα κάνει.

    Τα σχόλια απλώς καταγράφονται στη βάση δεδομένων της βαθμολογίας. Στην καλύτερη περίπτωση μπορεί να τα διαβάσει ο διδάσκων κατά τον υπολογισμό των βαθμών. Αν θέλετε απάντηση σε κάποιο σχόλιο να στείλετε κατευθείαν email στο διδάσκοντα μια και στη σελίδα παράδοσης δεν έχετε τη δυνατότητα να καταχωρήσετε τη διεύθυνσή σας για να μπορέσετε να λάβετε απάντηση.

    Πως ελέγχεται το ποιος υλοποιεί και ποιος καταχωρεί την άσκηση;

    Το πρόγραμμα Jarpeb καταχωρίζει στοιχεία που έχουν σχέση με την άσκηση, τον ΑΜ του φοιτητή ή της φοιτήτριας, τον τρόπο επίλυσης (όπως καταγράφεται από το Visual Studio Code) και το βαθμό. Επιπλέον κατά την καταχώρηση ο βαθμός και ο ΑΜ του φοιτητή συνδέονται με τη διεύθυνση IP του μηχανήματος που έκανε την καταχώρηση. Με τη χρήση στοιχείων ελέγχου οι διευθύνσεις IP αντιστοιχούνται σε συγκεκριμένους φοιτητές. Όπου διαπιστωθούν στοιχεία που δημιουργούν την εντύπωση πως μπορεί στην υλοποίηση να έχει αναμιχθεί τρίτος ή να έχει χρησιμοποιηθεί λογισμικό παραγωγικής τεχνητής νοημοσύνης, ο αντίστοιχος φοιτητής ή φοιτήτρια μπορεί να κληθεί για συμπληρωματική εξέταση.

    Επιτρέπεται η υλοποίηση και καταχώρηση ασκήσεων σε υπολογιστές εκτός του εργαστηρίου;

    Ναι, αλλά η υλοποίηση πρέπει να γίνεται από τον ίδιο το φοιτητή — απαγορεύεται αυστηρά η κάθε συνεργασία. Σε περιπτώσεις που έχουν βρεθεί στοιχεία που δείχνουν πως έχει υπάρξει συνεργασία, έχει ζητηθεί απο τους φοιτητές να επαναλάβουν την άσκηση στο εργαστήριο. Σε περίπτωση υποτροπής όλες οι αντίστοιχες ασκήσεις μηδενίζονται στο τέλος του χρόνου. Επίσης, δε μπορεί να σας παρασχεθεί βοήθεια σχετικά με την εγκατάσταση και διαμόρφωση του περιβάλλοντος εργασίας της Java στον υπολογιστή σας - ειδικά για το θέμα της εμφάνισης των ελληνικών χαρακτήρων στην οθόνη σας.

    Έχω καταχωρήσει το βαθμό μου αλλά δε βλέπω ούτε το βαθμό ούτε την καταχώρηση στις αντίστοιχες σελίδες. Γιατί;

    Ο έλεγχος των καταχωρήσεων και η ενημέρωση των βαθμών γίνονται σε περιοδικά διαστήματα. Κοιτάξτε την ημερομηνία τελευταίας ενημέρωσης που εμφανίζεται στο κάτω μέρος της σελίδας. Αν είναι μικρότερη από την ημερομηνία που καταχωρήσατε την άσκηση, τότε σωστά δεν εμφανίζονται τα στοιχεία της καταχώρησής σας.

    Έχω καταχωρήσει το βαθμό μου παρατηρώ πως η εκφώνηση της άσκησης έχει αλλάξει. Τι πρέπει να κάνω;

    Οι ασκήσεις που καταχωρούνται με επιτυχία κατοχυρώνονται. Δε χρειάζεται να κάνετε απολύτως τίποτα, εκτός αν θέλετε να ξανακάνετε την άσκηση με τη νέα εκφώνηση για να την καταλάβετε καλύτερα ή για να πάρετε υψηλότερο βαθμό.

    Γιατί σε υπολογιστή με λειτουργικό σύστημα Windows η εκφώνηση εμφανίζεται με περίεργους χαρακτήρες;

    Δοκιμάστε να δώσετε την εντολή
    
    chcp 737
    
    πριν την εκτέλεση του Exercise.jar.

    Δοκιμάστε να αλλάξετε τη γραμματοσειρά του παραθύρου σε Lucida Console (κάντε κλικ πάνω αριστερά - Properties - Font).

    Αν ο υπολογιστής σας τρέχει Windows 7–10 με αγγλικές ρυθμίσεις, θα πρέπει να τις ρυθμίσετε στα ελληνικά, με την παρακάτω διαδικασία:
    Control Panel - Region (and Language) - Administrative - Change System Locale και από εκεί επιλέγουμε "Greek (Greece)".

    Σε υπολογιστή με λειτουργικό σύστημα Windows και Internet Explorer το αρχείο Exercise.jar σώζεται ως Exercise.zip. Τι να κάνω;

    Το πρόβλημα οφείλεται σε δυσλειτουργία (bug) του Internet Explorer. Κατά τη διαδικασία της φύλαξης επιλέξτε από την επιλογή "Save as type" το "All Files" και βεβαιωθείτε πως στην επιλογή "File name" γράφει "Exercise.jar". Εναλλακτικά, χρησιμοποιείστε έναν άλλο φυλλομετρητή όπως τον Firefox (http://www.mozilla.com/en-US/firefox/).

    Γιατί σε υπολογιστή με λειτουργικό σύστημα Linux η εκφώνηση εμφανίζεται με περίεργους χαρακτήρες;

    Καταρχήν, μπράβο που πειραματίζεστε με διαφορετικά λειτουργικά συστήματα! Δοκιμάστε να δώσετε την εντολή
    
    export LANG=el_GR
    
    πριν την εκτέλεση του Exercise.jar.

    Τι να κάνω αν μου εμφανιστεί το μήνυμα «Δεν βρέθηκε εγκαταστημένος μεταγλωττιστής»;

    Φροντίστε να θέσετε σωστά τις μεταβλητές περιβάλλοντος, όπως αναφέρεται στον οδηγό των ασκήσεων (https://docs.google.com/document/d/1-7XbmxX5ZhTrxFEAcoQcxQdqi2cnGeun/view).

    Τι να κάνω αν μου εμφανιστεί το μήνυμα «Can not find an installed compiler»;

    Φροντίστε να θέσετε σωστά τις μεταβλητές περιβάλλοντος, όπως αναφέρεται στον οδηγό των ασκήσεων (https://docs.google.com/document/d/1-7XbmxX5ZhTrxFEAcoQcxQdqi2cnGeun/view).

    Γιατί ο κωδικός που καταχώρισα δεν έγινε δεκτός από το σύστημα;

    1. Βεβαιωθείτε πως τρέχετε την έκδοση 1.7 της Java ή νεώτερη (βλ. προηγούμενη απάντηση).
    2. Βεβαιωθείτε πως τρέχετε τη φετινή έκδοση του συστήματος Jarpeb. Οι κωδικοί ασκήσεων του προηγούμενου χρόνου δεν ισχύουν.

      Μπορείτε να εκτελέσετε την εντολή

      
      java -jar Exercise.jar -version
      
      για να δείτε την έκδοση του συστήματος που έχετε στα χέρια σας. Η ημερομηνία της έκδοσης δεν πρέπει να είναι παλαιότερη από το Σεπτέμβριο του αντίστοιχου ακαδημαϊκού έτους.

    Σωστά καταχωρημένες ασκήσεις

    Χρονοσφραγίδα ΑΜ Άσκηση Βαθμός Διεύθυνση IP Αναγνωριστικό
    2026-10-18T21:33:17 8250153 2 10 [...].84.143.[...] 001320DADDBE4269A6AAD6C4C75ED08C
    2026-11-02T19:31:45 8250038 4 10 [...].86.45.[...] 006781B29222403D863BEB9A0854E54E
    2026-11-08T11:07:46 8250062 5 10 [...].168.2.[...] 0081549E57A3481E9168FFCE686A01FD
    2026-10-26T14:55:59 8190332 2 10 [...].73.240.[...] 00A1A94E501841A4B2527F491B31DFCF
    2026-10-11T19:00:19 8250106 1 10 [...].217.168.[...] 00C745ADA926485AA00F01F03654EB19
    2026-10-26T16:32:40 8250032 4 10 [...].74.58.[...] 00C8A4B3DE354EB1BC120EA478F81357
    2026-11-08T20:28:27 8250018 5 10 [...].140.107.[...] 00EA8D313E574AB68348C8FA0794D7B5
    2026-10-25T10:18:13 8250017 3 10 [...].65.46.[...] 01121CA0170D42EBBDE5BAED39ABC379
    2026-10-28T22:24:00 8250146 4 10 [...].86.76.[...] 013B5FF18662453DB03BB2EC812FF1E4
    2026-10-18T15:33:05 8190318 2 9 [...].92.140.[...] 0149AA6AA3CE4A42ABE86A5EEB56C468
    2026-10-18T17:53:50 8250130 2 10 [...].140.25.[...] 0172F9443F4D4A0F8F9819D8F32BCDBD
    2026-10-24T18:47:20 8250098 3 10 [...].217.161.[...] 019BFD95AE3B4FB98B4C8D553A055AC9
    2026-10-19T20:01:25 8220060 11 8 [...].217.178.[...] 021A98CBB45048A688C7E1833A16872B
    2026-10-16T12:34:58 8230051 2 10 [...].178.136.[...] 02548312325642B9BCECAE691F10FDE2
    2026-11-03T22:39:23 8240129 2 9 [...].86.155.[...] 02651EAC0E044C75A470281B83B33243
    2026-10-22T10:48:46 8250069 3 10 [...].26.33.[...] 02C263E01B7B4E01BE9A4143D4E5AEEF
    2026-10-16T12:00:42 8210093 3 10 [...].166.173.[...] 02E3D8ECA5B0453193741A5910E9694A
    2026-10-16T12:44:22 8250096 2 10 [...].131.162.[...] 02F91D2BDCD741F2B653A3E5DEB37EAC
    2026-10-16T03:50:19 8250172 1 10 [...].87.50.[...] 03026060220B41FB96328ED0125A3824
    2026-11-09T22:47:15 8240266 6 10 [...].130.77.[...] 032F4C203F0D45DE8EE331C3A0A646C0
    2026-10-14T19:51:03 8250061 2 10 [...].242.137.[...] 0342521E80564C408281BA466B80330E
    2026-11-09T20:02:38 8250003 16 10 [...].26.30.[...] 0358CD8E57D34D6294933F22D91AD5B9
    2026-11-02T23:58:24 8250002 5 10 [...].217.170.[...] 03FEBB89971E41F1A6DE5DF2428AB898
    2026-11-08T17:40:57 8250028 7 10 [...].84.206.[...] 054C28636BFC484C884D097421FC2D4E
    2026-10-23T21:22:15 8250078 3 10 [...].4.162.[...] 0573AD5E03E8436C835DF3897B90023D
    2026-11-11T22:34:24 8250239 16 10 [...].74.18.[...] 05A48479A7894B199E407EA378D2397D
    2026-10-11T21:43:43 8250085 1 10 [...].84.212.[...] 05AB6296B3C24594BDC1A28EB85EA827
    2026-11-09T22:48:57 8250140 16 10 [...].140.0.[...] 05AE47AB49D54C07B690813115AE42CB
    2026-10-18T21:40:08 8190239 2 1 [...].6.96.[...] 05CD97BC43D141CEA8D14C35B8019B1E
    2026-11-10T18:34:44 8240315 6 8 [...].74.57.[...] 062DF0BAAC6740B5AF413B789174C1CD
    2026-10-18T15:35:20 8250052 8 6 [...].168.1.[...] 0630A07414D448629BCB6D0E732A960B
    2026-10-13T14:08:05 8250023 2 10 [...].210.231.[...] 06A93E190A114D9194967032AA85A685
    2026-10-25T20:37:32 8240235 3 10 [...].49.78.[...] 06C7EBA453B749A9B622254AD6EE68DD
    2026-10-28T18:25:21 8250158 4 10 [...].103.10.[...] 0726FE9DB0F64195BBF188ABE53A8821
    2026-10-30T22:04:01 8250274 4 10 [...].87.228.[...] 07704C88240443E0A2A63C470AB25B7E
    2026-11-02T17:55:29 8250055 4 10 [...].26.26.[...] 0770DAA4731B4D6C9B55A3CF058B020C
    2026-10-07T13:51:50 8250164 1 10 [...].140.93.[...] 07D4F7B2FCC447B28B54456635D13FEB
    2026-10-23T13:17:18 8250009 3 10 [...].242.185.[...] 0824E817C0DE424FAE7ABEDADF124962
    2026-10-31T14:18:18 8250107 4 10 [...].203.132.[...] 08487918E3864A1386277C6DF9370ED0
    2026-10-22T23:20:14 8250290 4 10 [...].86.44.[...] 084E55BEF3EA48418131F0DE2D7F2C1D
    2026-10-11T11:47:15 8250299 1 10 [...].74.212.[...] 0875787EC85B474AAAF9C3019D0FE5C9
    2026-10-17T13:22:32 8250264 2 10 [...].203.84.[...] 08A9C24405B94D569EACDA22B4C34979
    2026-11-07T23:51:07 8250247 5 3 [...].4.235.[...] 08BEABDAC6AA4C7EB040967A5BB82AB0
    2026-10-16T13:24:26 8250070 2 10 [...].54.130.[...] 08CAC3A646B147D4B2161CAF3E989554
    2026-10-10T22:51:10 8250150 1 10 [...].55.78.[...] 08FA99BFB3F7462FB70740144E3FE978
    2026-10-18T11:31:26 8250053 2 10 [...].168.1.[...] 0932B333A5704CAD98A30EB07752D5BA
    2026-11-08T19:11:10 8250036 5 10 [...].70.246.[...] 0956296B03FA4029939A6EB2D94C5085
    2026-10-28T16:23:02 8220060 17 10 [...].217.178.[...] 096349BD645C4917BDE49D49793FA906
    2026-10-21T20:24:11 8250158 3 10 [...].103.10.[...] 09721E5FAA72474C9551F73F4E2DEB88
    2026-10-27T18:55:19 8250097 4 10 [...].103.173.[...] 0988DFF1A63A48F095B31060AF39DC2C
    2026-11-03T15:47:55 8250027 4 10 [...].67.74.[...] 098A8ED4040544B9B64D43CB5151DE4B
    2026-10-27T18:12:28 8250006 4 10 [...].75.188.[...] 09A0EE7813A84D30A3A1CCC4B8BA909C
    2026-10-20T19:18:31 8250065 3 10 [...].69.6.[...] 09A1950DC0C04373B9F2939D7BB85B18
    2026-11-10T17:27:36 8250071 16 10 [...].73.236.[...] 09C10261536345EC8436E78460FA2BA9
    2026-10-11T16:13:21 8250275 1 10 [...].87.150.[...] 09C12264E72F4C2DB75B66B24E234D04
    2026-11-09T18:50:13 8210093 16 10 [...].74.61.[...] 09C849A4C6A5422AA2547B7192F9B2C1
    2026-11-11T17:39:10 8250303 16 10 [...].66.16.[...] 09CA5F56F9D04F92A984377E2BE4642D
    2026-10-28T18:49:22 8250168 4 10 [...].246.161.[...] 0A02A049970840D3B26B5541A52B0188
    2026-10-17T12:21:55 8230051 3 10 [...].178.180.[...] 0A0CEBF826A240A1B27825E4011A6C85
    2026-11-07T21:41:35 8250296 5 10 [...].58.138.[...] 0A1030F0F46B4E42AD76849A888FAA18
    2026-10-08T10:23:39 8250025 1 10 [...].203.213.[...] 0A1ADD9C6A2B4823A6CD803D28F02D06
    2026-10-11T14:47:04 8240316 1 10 [...].102.3.[...] 0A39B7396649493F8D660E950DEAABF3
    2026-10-12T20:05:24 8250289 2 10 [...].74.59.[...] 0A7AF0DA4DB94DC98F20A0B013FC874B
    2026-11-06T18:15:56 8250096 5 10 [...].75.38.[...] 0A9999CE032749EA9E4BD812C7CBF944
    2026-11-11T10:31:10 8250096 6 10 [...].75.38.[...] 0AC004DCFCA04339A11C2488B82AF4E6
    2026-11-01T02:42:15 8250236 4 10 [...].255.0.[...] 0B7A8F4CCD9241FDBDE4ED57485048C9
    2026-10-30T01:57:41 8250171 4 10 [...].84.130.[...] 0B8BAF9B2896421887969512C9F3CC71
    2026-10-20T20:20:15 8250088 3 10 [...].86.26.[...] 0B9788BFD8764AA099A80C80E9002A41
    2026-10-25T13:16:01 8250066 3 10 [...].65.157.[...] 0BBD77F37EFC44B4982312D6EFA0B82B
    2026-10-10T17:34:21 8250128 3 10 [...].140.93.[...] 0BDFF91F6A95431CA17A397AFB248997
    2026-10-18T01:46:53 8250168 2 10 [...].1.128.[...] 0BF95B9AD0634B259AC89A7133BC1F80
    2026-10-29T11:56:05 8250257 4 10 [...].26.15.[...] 0C252C02E7664C81B4F51DABF6D63B20
    2026-10-07T23:11:42 8250026 1 10 [...].178.148.[...] 0C2E6F26A5584955AFB5E8B1A9F5F110
    2026-10-26T17:12:15 8250145 3 10 [...].26.38.[...] 0C30036AF0474B1E82C6BB8A8539B287
    2026-11-10T22:00:39 8250042 16 10 [...].65.159.[...] 0C36257AA29F4C19847001C11529FB08
    2026-10-24T15:51:52 8250013 4 10 [...].66.136.[...] 0C5F4ABD44584B798B97B685E3D0D5E0
    2026-11-09T18:46:52 8250238 6 10 [...].140.101.[...] 0C6FD2EA5ADE44768DA75F7E6E004C89
    2026-11-03T00:19:06 8230222 5 10 [...].86.22.[...] 0C8F627392644F7D9CE4076AE566AE0E
    2026-10-08T16:32:36 8250067 1 8 [...].59.189.[...] 0CD1D5067D0E4D4688C869679ACE1124
    2026-11-06T17:16:30 8250166 6 10 [...].103.37.[...] 0CF46DB6DC8842CBB726CA3BDC7156CB
    2026-10-09T19:22:02 8250131 1 10 [...].84.194.[...] 0D2C3F8CEEF84D82A33ACC2A0C1C0B34
    2026-11-01T17:33:14 8240270 6 10 [...].86.31.[...] 0D5E78B125F24D89BEC6A06E33D66959
    2026-10-06T18:44:14 8240226 1 10 [...].55.107.[...] 0D5FBC9145394141A8C980FD3576B173
    2026-10-06T16:52:16 999 1 5 [...].86.153.[...] 0DFC58588C544F71B46DDCAF34563FAF
    2026-10-07T20:13:55 8250128 1 10 [...].242.231.[...] 0E6F5F45CE224E06854AD06D982288EB
    2026-10-16T15:22:23 8250144 2 10 [...].133.195.[...] 0E7EBABFEE034D45B9985A2FDC5C2E80
    2026-11-01T20:47:14 8100069 4 10 [...].247.46.[...] 0EA4E85B08DE46BD81A2A22AFFA1A9B1
    2026-10-17T10:58:49 8230051 2 10 [...].178.180.[...] 0EBBF1AE33994E37953F5220ECC0A4AC
    2026-10-25T14:52:20 8250141 2 10 [...].59.37.[...] 0F5123F8D18D40C48BAD9CA757D03C87
    2026-11-09T18:43:37 8250087 5 8 [...].58.137.[...] 0F55FE53994C466DA98D1F80969C301B
    2026-10-17T12:25:06 8250067 2 9 [...].59.189.[...] 0F6AA45CD30A4C2BB0376FAE95A7C6DD
    2026-11-02T20:48:08 8250156 5 10 [...].59.177.[...] 0F894BEB8E0A442688A7F92653FBF354
    2026-11-08T14:00:15 8250107 5 10 [...].217.174.[...] 0FEEC12668114A0B9EFE6B180BD58D4F
    2026-10-28T18:43:47 8250137 4 10 [...].86.154.[...] 10043BC8F6AD4D62ABF28A0C1A308CA5
    2026-10-18T11:38:32 8250018 2 10 [...].140.3.[...] 1025362684C04C439230575695F5127C
    2026-10-31T00:18:51 8210215 3 10 [...].86.155.[...] 10598D774CD642329715BC104A29D5B0
    2026-10-16T18:44:53 8250122 2 10 [...].217.169.[...] 1095DFC57F3B41B59AB83375EF2E9248
    2026-11-08T18:32:21 8250263 5 10 [...].203.206.[...] 10A2332AF8D0476EA2448C7E187070FE
    2026-10-11T21:29:17 8250049 1 10 [...].203.235.[...] 10BFC07474CF44E090D72015440BF6AB
    2026-10-24T23:53:27 8230046 3 10 [...].74.19.[...] 10D5C7B1940A49E0B52D1505AEE510C1
    2026-10-10T14:39:30 8250019 1 8 [...].214.209.[...] 111C1BDB79E749C792343B58FD68BC9A
    2026-10-26T23:16:20 8200100 3 10 [...].66.41.[...] 1237AF16E53E4909AF6D6C9AF122FD9B
    2026-10-25T23:51:27 8190239 2 3 [...].6.96.[...] 125563123411400CAD72A47C41D86F2C
    2026-10-18T23:00:03 8250035 2 10 [...].36.177.[...] 127A2D03C30D4D229FF55997FBFC89F2
    2026-10-27T13:39:48 8250088 4 10 [...].86.26.[...] 12A2D9D5EFEF4997AFA043DB8DE87AB4
    2026-11-10T18:26:23 8250044 16 10 [...].154.44.[...] 12FADC7F51CC413DB98EAF9512499F5F
    2026-10-13T17:55:44 8220060 8 10 [...].217.178.[...] 132905948A0F40C49BD8B4D0B5DFE284
    2026-10-16T01:22:15 8250290 2 10 [...].86.44.[...] 13A03BE45F09499D92C908C053DCFE25
    2026-10-28T21:51:24 8220060 18 8 [...].217.178.[...] 14055517AB6042D0969CD9169CB9BFE7
    2026-10-09T13:35:00 8250238 1 10 [...].207.159.[...] 142CE525E93A43638C8F7470C29D32E0
    2026-10-13T10:52:13 8250111 2 10 [...].86.153.[...] 146E6CB32F264EDE8AC4220A30DDACE9
    2026-10-07T20:35:21 8250158 1 10 [...].177.227.[...] 147457BFA2D94AB68CCC3E75DCE331FD
    2026-11-10T10:53:29 8250124 6 10 [...].74.8.[...] 1481E11C705C4732BEC46A511317EF15
    2026-11-05T18:39:25 8250140 5 10 [...].70.167.[...] 14B6BFE24F984B0A995ED7796D143616
    2026-10-19T20:58:21 8220060 12 8 [...].217.178.[...] 153782C37B9F42B7AEF5C3237B56CF76
    2026-10-19T02:00:09 8200091 1 10 [...].228.61.[...] 155CBF30208E4DF193149C11A2F6DA22
    2026-10-30T15:50:46 8250301 4 10 [...].74.19.[...] 1613BF9CD25B4408BCB59CD90922CE29
    2026-10-16T17:54:04 8250229 2 10 [...].86.155.[...] 164892DBB61B43FA829C4FBDE250E156
    2026-10-16T13:18:46 8250038 2 10 [...].203.159.[...] 1706E2E5A267411E86A8CBCBFAFE2875
    2026-10-31T14:09:09 8190306 4 10 [...].92.144.[...] 17362CE0876140BD81B3CDDD5B1E76F4
    2026-10-13T18:56:07 8250164 2 10 [...].242.230.[...] 17377279B4A04F15ACE11A5B5890A1C2
    2026-11-08T21:50:45 8250283 5 10 [...].242.93.[...] 1749837475A642B1B1AFA549567B5E4C
    2026-11-08T14:13:58 8250128 16 10 [...].140.93.[...] 17CAF79C655A4C2391F29714988E3B22
    2026-10-28T16:02:09 8250143 4 10 [...].217.168.[...] 17D6DB27CFE84F5AA57799F6B638BFCD
    2026-10-09T19:56:24 8250293 1 9 [...].203.84.[...] 18624C38B47E40D681179F6C00453510
    2026-10-28T15:17:08 8250299 4 10 [...].74.212.[...] 187737A3917041BDA12F730EF25002A4
    2026-10-25T15:13:25 8190343 5 10 [...].6.160.[...] 188A83C7FD5B4BC89CA04CB6BB23E854
    2026-10-11T21:29:28 8240235 1 10 [...].49.68.[...] 189FC4006E5549198532639F2CB196D8
    2026-11-08T14:14:38 8250057 5 10 [...].86.152.[...] 18BAA4187B304451A3D056A03E0B8AC0
    2026-10-19T17:34:14 8250162 3 10 [...].228.63.[...] 18ECBB9D270C4C8DA83F953A5E6D9580
    2026-11-06T21:49:38 8240030 5 8 [...].138.220.[...] 18EF577BCB164F8D9CB2D21D103811CD
    2026-10-16T11:52:50 8250309 18 10 [...].203.128.[...] 1918B905AB364F528E48A9E960718DAB
    2026-10-28T02:30:01 8250145 4 8 [...].140.100.[...] 195681334FC64029BB6045328FBED7F8
    2026-10-16T19:47:58 8240074 2 10 [...].73.198.[...] 19A5D325E716421E8A9EBA4D33C7E324
    2026-10-31T23:30:15 8230240 4 9 [...].242.230.[...] 19F2DF9A065C453CAC077B642E48DA03
    2026-10-15T14:24:45 8250236 2 10 [...].131.130.[...] 1A19DAEB5809435A9549E42DFB3215A8
    2026-10-25T23:34:48 8250120 3 10 [...].198.251.[...] 1A35FD8CB1B24ACA8A9A84C4034069A7
    2026-10-05T23:47:34 8240154 1 10 [...].228.61.[...] 1A59FA6BA2A24F4DBE2ECAACD759DDA0
    2026-11-02T21:01:54 8240270 16 10 [...].86.31.[...] 1A60BA24FB4A4DC6A102ED6CA5B3FDD0
    2026-11-01T22:01:42 8250280 4 10 [...].74.16.[...] 1A8A0C05DE5C4D31A22B1C51CBF78463
    2026-10-19T19:27:24 8250013 3 10 [...].66.136.[...] 1A93F707920041D199EF6E70357AE94C
    2026-10-31T19:38:02 8250283 4 10 [...].6.6.[...] 1B01F7568D754BFE8CC0DFBBD2B5ED0E
    2026-10-09T13:10:08 8250040 1 10 [...].70.74.[...] 1B3745D6464E497091FE921F52E10C50
    2026-10-23T13:48:33 8240054 3 10 [...].38.108.[...] 1B66864546DD477090FD3A06E46C4062
    2026-10-09T12:08:07 8250090 1 10 [...].65.3.[...] 1B7F3A0CEA7F486FB3E2ADB13BFBA059
    2026-10-31T00:41:55 8230223 4 10 [...].219.200.[...] 1BA38B8764BA47E4B1852F256BCD2345
    2026-11-05T16:45:57 8250165 5 10 [...].55.195.[...] 1BBD44BB8728466AA1302849539340E6
    2026-11-04T02:20:59 8200091 5 10 [...].228.63.[...] 1BD04E8C2669433BB9E2E8473526F154
    2026-10-05T21:45:00 8250088 1 10 [...].86.26.[...] 1BEE0D1505CD4055BFBE372AFAE3BA2B
    2026-11-03T02:24:22 8190332 16 10 [...].129.191.[...] 1C114096A84340FFB47414D6799A2E03
    2026-11-01T17:06:46 8250155 4 10 [...].140.88.[...] 1C3BFF281C194DC69ADA22A99B0F4A55
    2026-11-11T21:39:17 8250102 16 10 [...].67.236.[...] 1C72ACCBFC014439962406560B988061
    2026-10-13T23:02:04 8250091 2 10 [...].74.220.[...] 1CABFD67DC9A444E9569FB202EB6CCFB
    2026-10-18T18:03:41 8200239 2 6 [...].154.36.[...] 1CE10B66B63E4CFD9E1DA488851BCA46
    2026-10-14T15:18:59 8240154 2 10 [...].138.152.[...] 1CFC547DD746453B8D4212692C686BF6
    2026-10-28T18:53:26 8250066 4 10 [...].65.157.[...] 1D07ED6D297F47128712BBC1755A0208
    2026-10-16T20:51:41 8250146 2 10 [...].87.82.[...] 1D1EBAF5551F46D7B1598DDCEAB012D6
    2026-10-21T20:49:32 8250021 3 10 [...].74.58.[...] 1D87CE5EC8914E209F3ECE48EC512D66
    2026-10-17T11:07:24 8230051 2 10 [...].178.180.[...] 1DCE50E739DC42119F9808097B37DBC9
    2026-10-05T14:05:58 0 1 8 [...].168.10.[...] 1E1343EFAD81481C9252BE39D115C63A
    2026-10-18T05:13:44 8100069 2 10 [...].247.46.[...] 1E40E4F24F264C3688108A177E2E6500
    2026-11-02T14:51:11 8250081 5 10 [...].64.197.[...] 1E71BABB0394438D9FCAC8855ED435D8
    2026-10-30T18:45:27 8250048 4 10 [...].242.186.[...] 1E9F645CED5E419CB99A29E1BBC5A62D
    2026-10-21T18:35:49 8250041 2 10 [...].67.236.[...] 1EEEF83ABAC94EC29CBFB733748F56D3
    2026-10-10T17:22:13 8250082 1 9 [...].242.94.[...] 1F211B6939A7474CBD9F8100953EB6CB
    2026-11-02T16:35:03 8200100 5 8 [...].66.41.[...] 1F484080B36C452291B7DDB6A19B1917
    2026-10-25T19:13:51 8250085 3 10 [...].84.210.[...] 1FABF24523844ED2A44828EB24CDC42F
    2026-10-21T20:57:31 8250155 3 10 [...].4.202.[...] 1FC1D4E2C77B4A94887B520C8472CE39
    2026-10-14T13:30:33 8240093 2 10 [...].168.2.[...] 1FC46FE77AC64D6A8F2B3BD1855AE3B1
    2026-11-08T19:28:40 8250122 5 10 [...].217.169.[...] 2053EC8F1A73490AB7832074BB08A658
    2026-11-01T20:24:31 8250265 4 10 [...].217.171.[...] 205E23EAB95349E9862573CE8D1F8C9D
    2026-10-20T17:31:39 8250025 3 10 [...].92.14.[...] 206BF4F677CF4F7B86D8F1BC389FD9D5
    2026-10-26T15:22:57 8250065 4 10 [...].69.6.[...] 2079CECE556E4343B5B6042DB71F5617
    2026-11-06T17:06:33 8250137 5 8 [...].26.17.[...] 20820DFEAC474B90B0E46DDB2D21ABBE
    2026-10-22T10:16:00 8240074 3 10 [...].84.0.[...] 2083BC151755442784FFEE0B104C93C4
    2026-11-03T23:01:06 8250088 5 10 [...].86.26.[...] 20A3C2B8B9254A4097977DE3B78F2BA1
    2026-10-27T18:16:49 8250072 4 10 [...].67.74.[...] 20E2D3854BFB409F84B47888F705A563
    2026-11-01T18:03:47 8250106 4 10 [...].217.168.[...] 20EA20C180C24140B4B805817ADFE95D
    2026-10-22T10:43:20 8250241 3 9 [...].74.47.[...] 20EFD5AD31F14344A153B75885E5FF17
    2026-10-12T22:15:30 8250140 2 10 [...].140.16.[...] 211774B9911D4ABA9F7574B5465873CA
    2026-10-23T23:02:15 8250239 3 10 [...].74.12.[...] 211D978DA1114357AE8302D5B30675AB
    2026-10-18T14:24:06 8250052 6 10 [...].168.1.[...] 211EECB1A29843F0B068D9FEFE94F872
    2026-10-24T18:26:14 8190343 4 8 [...].6.160.[...] 2134792524F54B75B52443FD215E80CB
    2026-10-30T00:55:09 8250032 6 10 [...].74.60.[...] 214FB563E7DA45A79A9100F53F13CD3F
    2026-11-05T09:40:56 8250054 5 10 [...].242.92.[...] 2164DBC804364ECC8F4C66D55218E58E
    2026-11-11T23:53:02 8240315 12 10 [...].210.43.[...] 21679C0524654D338AD037A1511CC384
    2026-11-10T18:33:08 8250299 6 10 [...].74.212.[...] 218B921228D4438E80AB66206212317E
    2026-10-06T17:09:09 8250130 1 10 [...].129.228.[...] 21D3BC1BCE544F9FBC58E089F01AAF3F
    2026-10-30T13:58:37 8250007 4 10 [...].26.1.[...] 21DF0EAAC3EC48149B081B044FA1D9A8
    2026-10-07T13:08:01 8250065 1 10 [...].69.6.[...] 22174ADAB89445758BCE3630FE798676
    2026-10-16T16:42:50 8240148 3 10 [...].73.217.[...] 2224E72673234DCFB0ED8BC1AAADD0B8
    2026-11-08T16:37:16 8250304 5 8 [...].86.226.[...] 2234A7C6596F42F0B79E8EFB3C12A527
    2026-11-08T21:00:48 8250035 5 10 [...].36.177.[...] 2244C4F645AF48009D252D734D35919E
    2026-10-09T15:59:08 8250055 1 10 [...].86.62.[...] 2252940073E1496F92319790192CF145
    2026-10-09T21:37:56 8250229 1 10 [...].86.155.[...] 22B1A93318B54CE3A3381EAA86BA11B0
    2026-11-05T20:47:25 8250092 5 10 [...].242.229.[...] 22B7A39375834E79AAA91ABDFDC0A6E7
    2026-10-12T01:22:44 8210093 2 10 [...].55.23.[...] 22C7BE1EF18848BB858CC5098519771F
    2026-11-08T19:32:56 8250242 5 10 [...].242.138.[...] 22E39E31054848629B3B1B7B0B151991
    2026-10-17T19:02:10 8250142 2 10 [...].203.251.[...] 2314EE7E66824E0DA65B8F6992A72865
    2026-11-01T00:20:16 8250089 4 10 [...].66.41.[...] 231780BEE60F436BBBB488C0462F0F07
    2026-11-05T22:52:44 8250154 5 10 [...].178.146.[...] 232CA194DEEA4B178F7F611E050F1D1E
    2026-11-05T13:23:49 8250070 5 10 [...].74.76.[...] 23402310FA3A479AA4D8EA0BC85B3BD6
    2026-10-27T18:54:56 8250064 4 10 [...].103.173.[...] 2359EF2AFDCC411680AD77CA0D1271DA
    2026-10-29T20:24:01 8230150 4 10 [...].66.41.[...] 23E10D0507774CD1A96B6DC925789616
    2026-10-09T00:23:34 8250028 3 10 [...].84.206.[...] 24624F080CC04641AAF54852B2CE7E3C
    2026-10-06T18:13:12 8250023 1 10 [...].74.17.[...] 249E7EF557014355A352ADDD5D9DF23E
    2026-11-05T08:19:10 8240235 5 10 [...].49.78.[...] 24B2039F74E3471F806068B2894AAA52
    2026-10-11T20:51:54 8250309 17 10 [...].65.157.[...] 24BC486CA4CE4387897E928D027FD7F3
    2026-10-22T22:49:33 8250165 3 10 [...].55.195.[...] 250F65F4D18747649809AA2D5CDB27C2
    2026-10-25T17:59:54 8230060 3 10 [...].225.145.[...] 25807181D3174C009E5BD8E062774AE0
    2026-11-05T16:04:20 8250027 5 10 [...].67.74.[...] 25A341DBA91749A8832F22BE99D5D522
    2026-10-21T20:19:34 8250157 3 10 [...].84.148.[...] 25A3F774ABD842B680C351C50FA239AA
    2026-11-06T22:30:01 8250041 5 10 [...].66.41.[...] 263368AF919E497E8E572845D44C492B
    2026-10-24T01:26:51 8200091 3 10 [...].246.61.[...] 2635C4A8CC7241EFB748C996578F7C50
    2026-10-13T21:16:22 8250309 7 10 [...].65.157.[...] 2636E8D28C2E4435BC1F15E8EFE00BE8
    2026-10-23T23:07:10 8250283 3 10 [...].242.94.[...] 26482F5387D1436BBE1EFA311042B5F1
    2026-10-17T10:32:57 8250042 2 10 [...].65.159.[...] 264C234BA9AB42568E1D6D25E0169D22
    2026-10-21T11:50:59 8250257 3 10 [...].86.189.[...] 26C5AA2699ED49E6B66AC377CF4D7077
    2026-11-01T13:22:21 8250058 4 10 [...].66.41.[...] 270214DE1CC940ACA1B7B805A67C1361
    2026-10-13T20:54:18 8250049 2 10 [...].74.20.[...] 2706A456DD2345C786517F0D0DCD6AB4
    2026-11-10T12:45:48 8250061 6 10 [...].26.35.[...] 2713286C098540548CAC8A17EF06107E
    2026-10-15T13:56:27 8250098 2 10 [...].217.161.[...] 27531FF1972A48C794F2FDA1C913BB69
    2026-10-15T22:56:03 8250231 2 10 [...].167.78.[...] 277E1CD5131144658A1A94CFCFA670FC
    2026-11-01T14:20:18 8250144 4 10 [...].133.195.[...] 2780FF031D1C4CC59CB3FC9A678588C3
    2026-11-01T12:54:15 8250263 4 10 [...].217.162.[...] 27B1BC9601C2459D8EE41C3B4B502447
    2026-10-25T19:59:30 8250264 3 10 [...].72.156.[...] 2802BBCA9DDE434D9F716649626C1D04
    2026-11-08T20:12:32 8250280 5 10 [...].74.8.[...] 28077AB3D14442FFACA173CC5B9AEB0E
    2026-10-17T11:02:48 8230051 2 10 [...].178.180.[...] 2856FB9E696E46E08BEEEDBE563202F6
    2026-10-11T13:17:05 8250290 1 10 [...].86.44.[...] 28A5515D9BFE4EECB8A989FD930E32B6
    2026-10-23T15:17:26 8250293 3 9 [...].203.84.[...] 290F1C17575247D3AF40B623C2225CCA
    2026-10-25T16:53:41 8250037 3 10 [...].84.5.[...] 29435242ECFA497A83DFE0EE5E07D3AA
    2026-10-08T01:03:16 8240266 1 10 [...].130.77.[...] 295E94D3382C4200B180FF87DF470B76
    2026-11-08T22:40:38 8250120 5 8 [...].198.251.[...] 2979065DF27C4B68BB074A37CB389910
    2026-10-28T19:14:17 8250293 4 10 [...].203.84.[...] 297F66AA4D7E4C59B2A858B42F51BF16
    2026-10-25T19:38:34 8250104 3 10 [...].66.41.[...] 2992194B0F8544E69BBFBF128A990A6C
    2026-11-10T15:22:31 8250090 6 10 [...].71.69.[...] 29C0CBE77B6F485688C50D4C037232CC
    2026-10-09T19:45:14 8250010 1 10 [...].74.220.[...] 29FD03755EA74455A15B51999D620853
    2026-10-19T02:12:39 8250108 2 10 [...].217.174.[...] 2A39B97288AE4A51AD50EF2A6F1E321B
    2026-11-10T14:00:30 8250135 6 10 [...].86.153.[...] 2A8791F7492047708CA625AE995677FA
    2026-11-02T19:28:09 8250038 4 2 [...].86.45.[...] 2A89EAB36D764570A0F05FEA04E7B575
    2026-11-10T15:53:34 8230241 6 10 [...].242.186.[...] 2AB8D954FE154B19BDB3F71778921584
    2026-11-11T02:52:56 8250171 16 10 [...].107.35.[...] 2AE0BCE068984119A462E781020DDC5B
    2026-10-17T14:45:58 8250052 5 10 [...].168.1.[...] 2B1D868C10A34F85A7F85B70F2943844
    2026-10-08T00:44:34 8250058 1 10 [...].66.41.[...] 2B4088F8647744658B49116336D046CF
    2026-10-17T11:50:15 8250036 2 10 [...].86.155.[...] 2B552471CFB34913B1D845F8399E0642
    2026-10-23T15:14:40 8250102 3 10 [...].26.1.[...] 2B9C64086AB24C3C9156E4A06389D294
    2026-11-04T12:29:48 8250257 5 10 [...].86.189.[...] 2BC46695308D415188C290062C60BD3F
    2026-10-09T17:05:31 8250054 1 10 [...].242.90.[...] 2BE6784A7D8D489482C4DB2364F4F643
    2026-10-09T13:37:05 8250110 1 8 [...].86.136.[...] 2C48CD4D733D4A90856FFADC32F16589
    2026-11-01T19:13:15 8250105 4 10 [...].74.45.[...] 2CF7053B7BF0423484EB3E0955339FBB
    2026-11-05T02:11:27 8190332 10 10 [...].129.191.[...] 2D393FF2DE854AA0945E96AE4E460AE9
    2026-10-31T18:57:17 8240137 4 10 [...].71.244.[...] 2D8D50B0665A416291E891A30FCC37C9
    2026-10-13T12:06:42 8220060 4 10 [...].217.178.[...] 2DC94B1273F3407F99B896DEC756B312
    2026-11-10T16:30:44 8250289 16 10 [...].74.18.[...] 2DD1876556574FCE993BBE39167CA3C9
    2026-10-24T19:09:08 8240062 3 10 [...].74.70.[...] 2DE62CAEEC28493685AA17F3929217CA
    2026-11-07T23:50:08 8250168 5 10 [...].4.89.[...] 2E0B0802E2104DF2B3B37A4D5EF5ABFF
    2026-10-11T22:04:14 8250076 2 10 [...].107.29.[...] 2E0FB0042C0D407DB1CA3604A1B47868
    2026-11-04T12:05:55 8250279 5 10 [...].26.12.[...] 2E9C3CCF72CE41CCB3CD9CAC7B5E16C6
    2026-10-20T23:19:15 8250016 3 10 [...].69.45.[...] 2ECE3CCAA22344E5B2B1134CE059D371
    2026-10-24T20:22:47 8250251 3 10 [...].203.181.[...] 2EFEDBA6F6E7449E932548D5C971DB3C
    2026-11-10T14:00:41 8250135 16 10 [...].86.153.[...] 2F0A988B372644F9A6CE18F8D9764A45
    2026-11-06T19:36:21 8250290 5 10 [...].86.44.[...] 2F0EBAB3B6DE439EA03712BE98B27A6E
    2026-10-13T15:33:20 8250309 6 10 [...].203.174.[...] 2F221390283C41778E5B7766C00C8692
    2026-10-26T12:48:10 8250164 4 10 [...].140.92.[...] 2FB666982F0D4D12BEBD54A18AA06C21
    2026-10-06T21:23:28 8250117 1 8 [...].74.80.[...] 308762448E004EE69B3CA1D516EE0C29
    2026-10-18T14:48:22 8250292 2 6 [...].66.117.[...] 30D4AA91A10F435289569C3748C4B9BC
    2026-10-21T16:16:54 8240226 3 10 [...].138.152.[...] 30EB4F7CB40C467EBA3BFD8E541DF18A
    2026-10-22T19:28:07 8250027 3 10 [...].67.74.[...] 311620EE2DFF4925858D888BD762E920
    2026-10-11T16:41:56 8230141 1 10 [...].86.220.[...] 3136D9A1594446B1987FDBFC4C111817
    2026-10-25T21:37:20 8250243 3 10 [...].66.167.[...] 319495272E0B42F8801638D075BF4EC7
    2026-10-13T01:47:19 8250160 2 9 [...].140.52.[...] 31B490E8F0E64E9A9193A0CF10CDF258
    2026-11-10T21:19:32 8250042 6 10 [...].65.159.[...] 3212937CDD664C38AB0A23E5817D9184
    2026-10-18T11:38:47 8250027 2 10 [...].67.74.[...] 321CAF1BF82C41BDB6401807C19F5FBB
    2026-10-09T22:14:55 8240236 1 8 [...].84.131.[...] 32247183805A48E197F1573182AD837C
    2026-10-13T11:52:55 8250309 3 10 [...].203.174.[...] 3288C2074501474C8704C76B0B945B99
    2026-10-27T22:42:47 8250040 4 10 [...].69.54.[...] 32A51B88562F4EECAA27AC8179E3BEB1
    2026-10-18T23:54:49 8230046 2 8 [...].74.35.[...] 32FFE93C316A43AC9F59D83CDFC41729
    2026-10-21T18:34:17 8250094 3 10 [...].86.113.[...] 3314601163F647DE9C3340B46640B028
    2026-10-25T17:35:20 8250277 3 10 [...].217.170.[...] 33214455FC6B468CBCE36E68A1B89049
    2026-11-09T17:40:12 8250003 5 10 [...].26.30.[...] 33A64F03A8924E999A9100E174EC16D4
    2026-10-21T10:41:53 8250006 3 10 [...].75.188.[...] 33E47A7D86FF45578176A0FE7BDD52C8
    2026-10-30T13:41:39 8250041 4 10 [...].67.236.[...] 347EA57D7D80418C95648543EA2E5316
    2026-10-09T14:45:37 8250029 1 10 [...].65.88.[...] 347EF92019A245C48F04362CD5FF1CDB
    2026-10-17T13:33:06 8250159 2 10 [...].107.34.[...] 348B28DAA8BB4459A5A6328DAA4E278C
    2026-10-14T00:33:00 8250309 9 10 [...].65.157.[...] 349626B57827416ABD0C74350A41BD6B
    2026-10-07T14:43:03 8210105 1 10 [...].26.33.[...] 358148ABD6BA4F8EAA211C909CEC75F6
    2026-10-18T17:41:34 8250085 2 10 [...].71.244.[...] 3588A761F42C4D1D98CD76B048D2657C
    2026-11-02T19:52:25 8240154 5 6 [...].228.61.[...] 35C6DFE99F44422999D5DEEE127A1DDC
    2026-10-17T16:43:28 8250019 2 10 [...].58.251.[...] 35FDDF078505402C893C23EE5E0DF713
    2026-11-02T20:13:51 8250151 5 8 [...].73.39.[...] 360607CDBBA246AD8A000E6C3FB03AF2
    2026-10-18T11:09:01 8240064 2 10 [...].251.16.[...] 3619C6E3BB0B40F9B2390ECB1B230A61
    2026-11-07T18:37:12 8250099 5 10 [...].190.38.[...] 361EE1E741D74183BBC73927D4B09081
    2026-10-18T18:31:08 8200239 2 9 [...].154.36.[...] 3664CE44B17140339FB7526B68F635D2
    2026-10-18T16:57:49 8250004 2 10 [...].246.202.[...] 366B4945D79E4E58A53C61A363927CFE
    2026-11-03T00:01:12 8250028 5 8 [...].84.206.[...] 36D8062035DA400C939D34EC15F00AAB
    2026-10-06T20:50:43 8250241 1 8 [...].74.35.[...] 3708DA51716841FE8841E5EBBA4F447D
    2026-10-09T14:33:54 8250048 1 10 [...].242.92.[...] 371AC2C22C42471C87AF48011D46DD65
    2026-10-06T21:03:22 8250117 1 10 [...].74.80.[...] 372B6EBE633F487B9705DB2494865C15
    2026-10-12T11:26:42 8250309 2 10 [...].65.157.[...] 37A4028919FD4D088A8436D3DD390BB0
    2026-10-30T22:41:39 8240270 5 10 [...].86.31.[...] 37AD6BE0BDEF4D05BDA7F30546BEE040
    2026-11-04T17:24:49 8240236 5 10 [...].26.11.[...] 37B7D3E906264015A86BB41DD84EE208
    2026-10-29T12:31:30 8250235 4 5 [...].140.0.[...] 37C7C725167C47CEAC46F5A6D3EFE063
    2026-11-04T20:18:12 8250162 5 10 [...].228.61.[...] 37CECB60B99440EF97977A2A9AB2FCE9
    2026-10-21T17:37:15 8250070 3 10 [...].54.130.[...] 37D98B7036DB4D3C85AEAA1C6401A218
    2026-10-27T12:05:09 8250279 4 10 [...].26.12.[...] 3808AB597A934EEFA375A369932BA228
    2026-10-20T14:12:06 8230241 3 10 [...].242.93.[...] 386D7CE0F577434188BC14022930CF11
    2026-10-24T13:12:54 8250038 3 10 [...].86.45.[...] 38B0F0AAE60B4539A329D5AB89218F31
    2026-10-21T10:09:37 8240093 7 10 [...].168.2.[...] 3911F17621284DA4898A0EAE422A49F4
    2026-10-16T15:57:07 8250267 2 10 [...].38.153.[...] 39295501CC6D4FE2AA8384181F8BB9AF
    2026-10-13T15:48:22 8250001 2 10 [...].74.57.[...] 393137CCB7754D54A5CB7D6D30D34E69
    2026-10-20T15:07:43 8240150 3 10 [...].255.26.[...] 393B0B9AB4604AC693D72BE79CDF63DF
    2026-10-17T16:17:23 8250129 5 10 [...].86.113.[...] 394818F9910D44F0A06F4E8E2E120ED6
    2026-10-09T17:40:52 8250142 1 10 [...].127.218.[...] 39610757B6784A9E9255E4DA115F92E9
    2026-10-21T18:36:51 8250023 3 10 [...].210.231.[...] 396593909E6B45C085CE49C9ED189440
    2026-11-11T21:49:07 8250040 16 10 [...].69.54.[...] 3A360AE62F33439D9B2F6290FAEEB5F6
    2026-10-31T22:57:15 8230240 1 10 [...].242.230.[...] 3A56F897C80449E69D6A13EC1FA7253F
    2026-10-30T22:40:43 8250002 4 10 [...].217.170.[...] 3A68F624FA494AA4877EB2F685BBDAD8
    2026-11-10T21:14:27 8200100 16 10 [...].66.41.[...] 3A7F7BD6B6DC43788E3DDBD93572A7F2
    2026-10-21T22:08:24 8250043 3 10 [...].74.212.[...] 3AC1487CDA7547CB84F2273764429239
    2026-10-25T21:53:38 8250007 3 10 [...].65.96.[...] 3AC69F038EB341DD80CCB971310BBC34
    2026-10-27T15:28:45 8240150 7 10 [...].237.205.[...] 3B0005A1CD6B4FCE86727D6622F7D923
    2026-11-01T01:23:46 8190318 4 10 [...].92.140.[...] 3B8D432D872F49E0BD46FB31C3CC9C31
    2026-10-08T16:42:57 8250092 1 10 [...].242.136.[...] 3BB2B6998798403FAB93E788C8009F32
    2026-10-18T14:25:48 8250037 2 10 [...].66.231.[...] 3BFD7030C36C40AB8EDDD48C01DAC37D
    2026-10-10T21:11:10 8250247 1 10 [...].246.244.[...] 3CBB699F6A874FB894118BAAB65C7B38
    2026-10-17T13:57:11 8250052 2 10 [...].168.1.[...] 3CCEBA05D1EC41A5A949C1D10D6B7C98
    2026-11-06T17:08:49 8250261 5 10 [...].203.213.[...] 3CDA88ABD6614BC8BD01A2B957F93B2D
    2026-11-06T00:01:33 8250078 5 8 [...].49.126.[...] 3CFEC20193FA4EFDB531C4852A7E755B
    2026-10-14T13:41:07 8250081 2 10 [...].64.197.[...] 3D27A8FD01B045798472502030DB67F1
    2026-10-15T22:00:02 8250094 2 10 [...].86.113.[...] 3D39886E0C1F407CBFA143B09EFFD351
    2026-10-17T11:18:15 8250017 2 10 [...].65.46.[...] 3D43400234FE4D7C8A5559224CEAFDF5
    2026-10-07T18:55:46 8250261 1 10 [...].203.247.[...] 3D55A60751F1493CB5D7267AEF4C92E8
    2026-10-18T21:28:09 8250243 2 10 [...].66.167.[...] 3D57236463A14FE6AD4C8EC41390679C
    2026-10-10T18:57:24 8250127 1 10 [...].86.54.[...] 3D81F3D81A9A4BA5934C3CD1D7AC0E39
    2026-10-18T23:18:17 8250115 4 10 [...].130.136.[...] 3DC603499DA042A5B077FDD946E2F9A6
    2026-10-25T22:27:15 8250086 4 10 [...].107.22.[...] 3E0DE9025C634649BCD52A9A8B1D90AF
    2026-11-10T13:28:26 8250054 16 10 [...].26.33.[...] 3E219B85DBE44805A14E19B7A2259508
    2026-10-19T22:04:08 8250137 3 10 [...].86.154.[...] 3E39CBF6E9BE45219022CCC3B1D9B400
    2026-10-16T19:36:19 8250079 2 10 [...].152.172.[...] 3E527BEF84BF4CCABD0363070518A069
    2026-10-07T21:35:40 8250065 1 10 [...].69.6.[...] 3E87A8F7238E4AF8A562BD841B8806A7
    2026-11-09T19:23:36 8250003 6 10 [...].26.30.[...] 3ED7B68CC37745F19232427F5F725D5E
    2026-11-03T15:05:29 8250027 4 10 [...].67.74.[...] 3EFBBE67F04045AABA5851AD02670690
    2026-10-09T12:53:24 8250135 1 10 [...].86.153.[...] 3F62DCB3D11047169566528477E77FA8
    2026-10-09T21:03:50 8240062 1 10 [...].73.29.[...] 3FA22546961C497BADF86C9304C51C9E
    2026-11-11T14:54:32 8250107 6 10 [...].217.174.[...] 3FB64DC95B284BE0BB735676E1034E0A
    2026-10-11T18:05:53 8250289 1 10 [...].130.204.[...] 3FC6FDDF133644DDB2A00FC22418FCE5
    2026-11-04T20:23:21 8250043 6 10 [...].74.212.[...] 4013EED091BA4D95AD7BBE29FCB3D6C9
    2026-10-17T02:10:54 8250062 2 10 [...].168.2.[...] 402A31858A4741839DBD1A05C7C106BC
    2026-11-11T18:00:02 8250143 16 10 [...].251.255.[...] 405E00684FE54F6C99F83A50DF627396
    2026-10-06T20:52:50 8250069 1 10 [...].228.61.[...] 408E37DA9C064622BDA79E8D3EFEF13C
    2026-11-01T13:40:17 8250011 4 10 [...].74.92.[...] 40D686B1E998464586E1CB1AE7209553
    2026-10-17T20:04:59 8220018 2 9 [...].167.124.[...] 4104A3AE43FF43699E3B5B2E5ED1655A
    2026-11-01T23:43:22 8250264 4 10 [...].86.130.[...] 4154739867C441B5ACE858E37A1518BF
    2026-10-14T14:49:42 8250003 2 10 [...].26.30.[...] 417BD602596E4AEA9B41B0FAF06C69C7
    2026-11-01T19:59:27 8250120 4 10 [...].198.251.[...] 418247FD87A647FCA9F5FAF6FBB899A2
    2026-10-30T17:35:39 8250124 4 10 [...].75.33.[...] 418FAE936EDF433A9263F1ECD87CD75D
    2026-11-06T15:05:44 8250001 5 10 [...].74.57.[...] 41FCF07831794B59B66E8CE23C3BC740
    2026-10-12T21:05:05 8250282 2 10 [...].6.195.[...] 42219DC710E84233BC6E89D0E145E3B1
    2026-10-27T15:11:47 8250017 4 10 [...].65.46.[...] 424D8DDB50874DA8B42E1B88D7B1C421
    2026-10-24T19:48:58 8250042 3 10 [...].65.159.[...] 424F7ABB5BE7464EBC3C724078EF2DA4
    2026-10-09T14:30:37 8250007 1 10 [...].86.229.[...] 42806C5ADAC1428483EBC4AE4830D7AF
    2026-10-21T12:25:05 8250010 3 10 [...].74.220.[...] 431E27A10CC34F79A2F53D2AA8CB9C47
    2026-10-09T22:12:00 8250016 1 10 [...].69.45.[...] 43A593C675C947ED868F1E6277E9260F
    2026-10-23T20:20:27 8250076 3 10 [...].84.175.[...] 441C96EE327A4154B67C4002E7C59047
    2026-10-25T08:16:42 8240069 3 10 [...].73.97.[...] 445AA3520954465F9B0017BD982A42FE
    2026-10-23T14:51:48 8250004 3 0 [...].246.202.[...] 446C5D31C739449A92120E26D3DC0487
    2026-11-11T11:21:19 8250004 16 10 [...].246.202.[...] 4474AFEA18F04037B565FB7098CD8131
    2026-10-24T16:29:41 8250036 3 10 [...].70.246.[...] 4496FAB293BA404882F90DB81E28A4E5
    2026-10-09T11:45:50 8250125 1 10 [...].107.133.[...] 449AB5CEC2214F0C967AFBA158CD2F57
    2026-11-01T23:06:30 8250033 4 10 [...].74.17.[...] 44AB497A116B43718C98A56F92ECD0ED
    2026-11-05T18:30:18 8250229 5 10 [...].86.155.[...] 45A6F3E454454CAF96371FABCBB2416F
    2026-10-14T14:14:26 8200100 2 10 [...].217.174.[...] 45E7962A4F364789A42645B5B3E8A259
    2026-10-21T21:57:19 8190306 3 10 [...].92.144.[...] 46759044FE24456AB588DC2F25CE0776
    2026-10-10T13:58:31 8220060 1 8 [...].217.178.[...] 46B74661865848D98CB6FC529E0C8ABF
    2026-10-11T18:46:11 8250073 1 10 [...].92.180.[...] 46E38F7C5C844FAA8E6B5C17C48C4D29
    2026-10-10T19:29:49 8250033 1 10 [...].74.47.[...] 46F605ED5F694944972076872A12ED36
    2026-11-11T11:32:08 8250111 16 10 [...].86.153.[...] 4719129C3AF6401BA851F1916114CE89
    2026-10-11T14:24:57 8250036 1 10 [...].86.155.[...] 474BC1CC49B0486599279CD2E58B2420
    2026-11-08T22:23:20 8250084 5 10 [...].87.117.[...] 4774B522C5C6452297E32A50D79112D1
    2026-10-18T16:33:37 8250123 2 10 [...].65.88.[...] 477E51BC3499456292DBCD578BCE2BA7
    2026-10-15T21:12:02 8250055 2 10 [...].86.62.[...] 478672D1901649D7A9C03D6F5AB9F0C2
    2026-10-30T12:14:21 8230051 6 10 [...].203.192.[...] 4796FF1DF38D46ECA8D388E7D141CAC2
    2026-10-08T19:13:17 8250257 1 10 [...].84.45.[...] 47C823C214B74D6E98F06343343D4DB5
    2026-11-11T21:00:50 8240315 11 10 [...].74.33.[...] 47C87FF2308E4B21A5C7E230B6C69687
    2026-11-07T16:07:20 8250060 5 10 [...].92.249.[...] 4829CFA48EAA41C1A6E3C04BFA551B20
    2026-10-05T19:58:55 8230241 1 10 [...].242.88.[...] 48442F820C314F258B66DF1642819A49
    2026-11-07T10:06:16 8250042 5 10 [...].65.159.[...] 488B3A529ABC4FE99DBA33281EA2BBB2
    2026-10-28T19:08:39 8250275 4 10 [...].87.150.[...] 488D5553AA64482690B253A5E75C0366
    2026-10-15T00:38:36 8250280 2 10 [...].74.17.[...] 48970102D6344C249DF8469B40612635
    2026-11-08T18:13:32 8250029 5 10 [...].65.88.[...] 489BF094A8A746A7B71E4FB5C1062E16
    2026-11-09T22:48:37 8250138 5 10 [...].49.233.[...] 49353B60A21A4AB1AC52A79B93696CEE
    2026-11-01T13:15:39 8250027 4 10 [...].67.74.[...] 4955A8437E044AEDA2E364305D889DCA
    2026-10-17T12:15:25 8230051 3 10 [...].178.180.[...] 495B011B22B440D2B0D0A15B5DF95DEF
    2026-10-22T22:31:52 8250122 3 10 [...].217.169.[...] 4975679DDDCB43FE89C63F0D43112A50
    2026-10-28T21:12:22 8250009 4 10 [...].242.185.[...] 497A064E52AB4164BB219EF56EC21FE8
    2026-11-05T23:00:19 8250145 5 10 [...].58.136.[...] 49C7F58DC7A4455DB3A2B9C4F74A9FE9
    2026-11-05T00:03:06 8250147 5 10 [...].58.213.[...] 49D6CA4977B14A60BE176BD07B810714
    2026-10-18T21:48:51 8240235 2 10 [...].49.78.[...] 4A15198EB29044EAAE74953EDE7DFB63
    2026-10-25T17:03:48 8250151 3 10 [...].73.39.[...] 4A2F3DC90A2347E9B4FB04656702ACD4
    2026-11-10T16:35:46 8250070 6 10 [...].74.76.[...] 4A832DEF92FB4223B7E47478A63C8A3D
    2026-10-13T13:10:27 8220060 5 10 [...].217.178.[...] 4AB94F3A3E7E4FF29389D4ABBA66E332
    2026-11-01T22:29:40 8250243 4 10 [...].66.167.[...] 4AF79C99FD344F8A831E096606C15419
    2026-10-30T14:28:32 8250302 4 8 [...].210.243.[...] 4B4AD677EAC2449FA4AF1F43F3DDB632
    2026-10-25T19:14:39 8230222 3 10 [...].86.6.[...] 4B7C0DF5691B4FD8A868151201810BEB
    2026-11-08T17:06:15 8250028 5 10 [...].84.206.[...] 4B90E769DB4F4696870AF1B4D45852EF
    2026-11-09T19:16:05 8250162 6 10 [...].246.61.[...] 4BC40CA5DB114DD3929AE701C4794E8D
    2026-11-11T21:23:10 8250124 16 10 [...].251.255.[...] 4C2ADBF06BA34066B28375B0CD8813FB
    2026-11-10T01:22:17 8200091 6 10 [...].224.119.[...] 4C4C47733F294C1FAB517BFF08E43A4C
    2026-10-18T12:34:24 8250165 2 10 [...].166.113.[...] 4C4FC137BE3842C5872CEBD893D89EB1
    2026-10-20T16:03:12 8250025 3 10 [...].92.14.[...] 4C604640480644F1B9162D916F9175AD
    2026-10-08T23:12:41 8250147 1 10 [...].6.210.[...] 4C60B44712524EB3B7672B862F48DDF7
    2026-10-09T15:17:21 8240054 1 10 [...].38.108.[...] 4C878E665A5A4167B468A4A88440847A
    2026-10-20T10:36:36 8250111 3 10 [...].86.153.[...] 4CA75A696B484C58902E94C36B735D2E
    2026-11-09T21:02:12 8240150 8 10 [...].237.205.[...] 4CBB811600AE4B259E05C8D274B9A269
    2026-10-11T22:14:53 8250154 1 10 [...].65.46.[...] 4CBBBE5371C34F92910FB88FBC7624C5
    2026-10-14T12:33:52 8250072 2 10 [...].67.74.[...] 4CF43C0676A743ECAFDC560C3F4AB8FF
    2026-10-24T22:49:09 8250289 3 10 [...].74.13.[...] 4D5360425761456D9B3B14C41F80CF65
    2026-11-10T18:49:47 8250127 5 10 [...].75.33.[...] 4D5E458F6545409C986D1D394514AA05
    2026-10-27T02:28:15 8250005 4 10 [...].167.141.[...] 4DB8EFAFBC3D44A988437420B64836CC
    2026-10-19T17:39:37 8250135 3 10 [...].86.153.[...] 4E1495258BD3403EB01AC1C756CC06F8
    2026-10-21T19:28:50 8240148 9 10 [...].73.217.[...] 4E1FA4F50B1347EA814A53E3340EFE64
    2026-10-16T22:30:55 8250230 2 10 [...].166.21.[...] 4E4967F23C7C4CEFBADAB78A67489F05
    2026-11-07T23:58:29 8250265 5 10 [...].217.171.[...] 4E519F812366478C82875E07EF7BC660
    2026-10-29T14:20:52 8250172 4 8 [...].66.200.[...] 4E60885407DA49A0B27B5560A6643DCD
    2026-10-11T16:45:11 8250292 1 4 [...].66.117.[...] 4E69C01B9AF14906A1AC3302FDA223A2
    2026-10-06T18:57:33 8250032 1 10 [...].74.32.[...] 4E934D5BB0BE4E759F13D1896D2A9F7A
    2026-10-25T17:44:40 8250106 3 10 [...].217.168.[...] 4ED5EF2E29204441B50B5A9D191C27B1
    2026-11-01T12:31:48 8250125 4 10 [...].242.32.[...] 4EDB101122654B0CB7D013D2BD0440D3
    2026-11-07T18:57:41 8250004 5 10 [...].246.202.[...] 4EE82876D4584F7EAE14E5D1E8D32DD8
    2026-10-14T08:25:43 8250309 10 10 [...].65.157.[...] 4F1948B5CB584B019AA70FC8BC19E1C7
    2026-10-23T22:28:59 8250041 3 10 [...].66.41.[...] 4F2EF73C48E54C3FBB880E5D6322C560
    2026-10-24T09:59:39 8250087 3 10 [...].242.95.[...] 4F353E7BDF83408381451E000EB1F278
    2026-10-23T00:08:01 8250058 3 10 [...].66.41.[...] 4F723EAE67C34311A7C0B67522843F16
    2026-10-28T20:42:35 8250146 3 10 [...].86.76.[...] 4F73966E84814E67948E93465E6302DC
    2026-11-08T20:44:45 8250264 5 10 [...].131.143.[...] 4F7E37BCBABD452DAA20EDDF5B08285F
    2026-10-09T00:52:48 8250076 1 10 [...].107.29.[...] 4FAA10CF073644DE9517540E178AC0E2
    2026-10-15T19:34:12 8240093 4 10 [...].168.2.[...] 4FB4B25786D74A878AD066E3867EC61C
    2026-10-22T11:13:14 8240236 3 10 [...].251.255.[...] 4FC5D4B61F6440BB9794BA76048C9CCC
    2026-11-08T18:59:51 8250075 5 8 [...].75.29.[...] 4FE98ECEE7704E7A87E9AE9E93DC5369
    2026-10-26T19:00:58 8240154 4 10 [...].246.61.[...] 5012D6347FC84E969DA4BDDEE4D0DFEE
    2026-11-10T18:09:51 8250090 16 10 [...].71.69.[...] 50931DBB153A4F5EB7AC1BE7E3A01E0B
    2026-10-09T18:51:40 8250009 1 10 [...].242.95.[...] 50C92526CDF9437EB67D134631605D81
    2026-11-02T21:02:25 8250071 5 10 [...].73.238.[...] 50F3D6E63AF646F480C5CCE0E9EFB979
    2026-10-15T10:32:21 8250069 2 10 [...].26.33.[...] 50FF18692BD54CA6B6B74944E7F560A6
    2026-11-05T02:13:30 8190332 11 10 [...].129.191.[...] 512FBCBF63244AE7931E5CD881E9A9E8
    2026-10-27T21:33:19 8250167 5 10 [...].74.14.[...] 51A14E9C27764367A557D3C9100558B1
    2026-10-12T19:22:57 8250103 1 8 [...].1.100.[...] 51C0DEABFCF54E238B7118E56A9106FD
    2026-10-09T12:35:45 8250245 1 10 [...].138.195.[...] 5210B72D66344FEFA1F6886ADF613DBF
    2026-11-09T20:59:35 8240154 6 2 [...].74.60.[...] 5241A5FDE16D497A8DB6FCC0F965A0D8
    2026-10-15T20:07:50 8240093 5 10 [...].168.2.[...] 526E6A2438D94F5BA0E2C763681E0720
    2026-11-08T14:07:50 8240054 5 10 [...].86.154.[...] 52A0951508854D22B36749CD4967989B
    2026-11-08T12:43:24 8210105 5 10 [...].177.162.[...] 52A3184AD2904E47A7CF09FCA0D47CEB
    2026-10-13T15:20:12 8240150 2 10 [...].74.16.[...] 530C6A74DC064A21BEF363EBC63723DD
    2026-10-16T21:15:25 8250102 2 10 [...].74.107.[...] 530DC44033084ED181456BFF1FEA3BEE
    2026-10-11T20:03:39 8100069 1 10 [...].247.46.[...] 538A7FC0D09C4BEE82FE610BB0C2A007
    2026-10-23T18:21:23 8250062 3 9 [...].168.1.[...] 538E44F1EEC840958970441401E0E08C
    2026-10-27T15:03:08 8250103 4 10 [...].4.162.[...] 53AEE76E550346DDBDFF5BDCDFA1903C
    2026-10-09T22:40:16 8250002 1 10 [...].217.170.[...] 53C1E7B7850A43F2A5BBC1737F1A865B
    2026-10-14T19:32:40 8250275 2 10 [...].87.150.[...] 53DEF95F071C421E9120C24FF4881AA0
    2026-11-08T21:17:55 8250144 5 10 [...].133.195.[...] 53E6CBFFCC2647D08599DBEB918A7A27
    2026-10-14T13:03:35 8250309 11 10 [...].65.157.[...] 543277013D7A4E48A92C71F6DA7B1CC8
    2026-10-24T18:37:17 8250267 3 10 [...].38.153.[...] 543AC4B3842D494A9B1C7405698BDD18
    2026-10-20T17:26:25 8250049 3 10 [...].74.20.[...] 54550398CB944FAD967D6DFE6035067A
    2026-11-11T20:09:16 8250235 6 8 [...].255.3.[...] 548DB0D50D0F493B8AEAD8EE05554A5B
    2026-10-13T22:56:51 8250071 2 10 [...].73.239.[...] 54DF1DAA3B7543CEB022D0F432EA3574
    2026-11-02T15:43:54 8250111 5 10 [...].92.99.[...] 54EBE6CA96464B78BA2196D8C0919135
    2026-10-22T15:56:01 8250287 1 10 [...].26.42.[...] 54EC81B504714327BFC43865CB0F8887
    2026-10-11T19:03:01 8250151 1 8 [...].73.39.[...] 554EDABB324844C5A74185711139640C
    2026-11-09T18:15:58 8250293 6 9 [...].203.84.[...] 555EBC58E407484E8467DB9470E67AAA
    2026-11-10T16:01:25 8250088 16 10 [...].86.26.[...] 558E7949F40F4AF4B8FCC84061B2E707
    2026-11-03T02:03:51 8190332 5 10 [...].129.191.[...] 559840521E8D4A97880AC4F208F43F42
    2026-11-06T00:12:56 8250103 6 10 [...].4.162.[...] 55B7D5011CFC4015B1195B301CD45071
    2026-11-02T14:43:45 8250135 5 10 [...].86.153.[...] 55E3EDA955F04D4C8ED2F8A2CC3AB6B3
    2026-10-19T20:27:02 8250290 3 10 [...].86.44.[...] 5679FCB49DB341DDBA32FC2E9E7E3D64
    2026-11-11T15:45:42 8250303 6 10 [...].66.16.[...] 56889A855E674B0DA972A2AA1EDDDA81
    2026-10-11T15:37:11 8230150 1 10 [...].66.41.[...] 56A06E6D11A8468286AC37ADC0CDE38C
    2026-10-15T18:15:58 8230242 2 10 [...].1.235.[...] 56B13D599CCC475CAD021E7BBDE4066F
    2026-11-09T17:25:03 8250150 7 10 [...].26.6.[...] 56F73E3D30BB43F5A31535211AD30144
    2026-10-16T13:35:43 8240054 2 10 [...].38.108.[...] 5735B43394F04039B0761B490C94AC5F
    2026-10-17T12:27:15 8230051 3 10 [...].178.180.[...] 5738F31A913A407E8DA119CC3D78C245
    2026-10-25T18:02:33 8230060 3 10 [...].225.145.[...] 574E76A516E94DBF9A9A650617A88B18
    2026-10-25T16:15:22 8190343 7 10 [...].6.160.[...] 575117D8E1EB4FB08A1209E2793EC1DD
    2026-10-10T15:24:33 8240236 1 10 [...].84.131.[...] 579E01F0D83A4A1C9FB18A80948B0AFC
    2026-11-02T19:49:04 8250164 5 10 [...].242.229.[...] 57DC878498034E8E946782DDBF20B7B1
    2026-10-06T15:11:16 8250129 1 10 [...].86.113.[...] 57EAE76B32AE4CCF82BE24C2FC8577C6
    2026-10-26T17:53:33 8250113 4 10 [...].140.52.[...] 580C444B9761420A9D31ACE22AB7C245
    2026-10-09T11:37:08 8250042 1 10 [...].65.159.[...] 580C54AE6C82476EA586D537E55111EF
    2026-10-10T19:55:28 8250072 1 10 [...].67.74.[...] 5845ACAD4D054EDA82340F20FE2B67CA
    2026-10-31T19:29:13 8250251 4 10 [...].203.162.[...] 584A93A0E5194858A15EEFE2C3132367
    2026-11-11T19:58:09 8250299 16 10 [...].74.212.[...] 585817AB503D4373B2704EB2D9BD806F
    2026-10-06T15:53:33 999 1 10 [...].86.153.[...] 5880620BBB7A404098B8D74309D35716
    2026-11-11T14:42:31 8250167 16 10 [...].74.14.[...] 5882801E095142B0A7B8CAF4656343B6
    2026-10-17T22:29:00 8240069 2 10 [...].73.97.[...] 591F778AE11A4FF8A06E84C95E22B475
    2026-11-05T02:09:18 8190332 9 10 [...].129.191.[...] 5976551011FF43E09658F84EFBEE9A0A
    2026-10-20T00:14:16 8250071 3 10 [...].73.238.[...] 5978EE4952174E2EAA585D65041CC7AD
    2026-10-26T02:35:55 8230060 7 10 [...].225.145.[...] 59E3F01114E8449F9BA6480A923E803B
    2026-11-03T19:02:26 8250140 5 10 [...].75.76.[...] 5A19B2A378D442DF9B23E8E91A538A71
    2026-10-18T18:03:30 8230222 2 10 [...].86.10.[...] 5A488D478C404467B3C129A12D46B323
    2026-10-18T14:03:39 8250242 2 10 [...].73.239.[...] 5A66642B0EEA4E5F89FED47C15C59CFA
    2026-10-13T12:17:45 8250066 2 10 [...].65.157.[...] 5B2DD85241004DBDBB0FD1B30E9F0447
    2026-10-25T19:07:05 8250029 3 10 [...].65.88.[...] 5B67FDB510F54B21956000BBF036ECA8
    2026-10-31T13:44:37 8250098 4 10 [...].203.132.[...] 5BA151F52C114CCEBB0CD656DE199A65
    2026-10-11T15:57:04 8230223 1 10 [...].4.85.[...] 5BAFCE84040B41758308E5FF9C5FFB83
    2026-11-01T12:59:11 8250081 4 10 [...].46.255.[...] 5BBD9FBFA56D44ACB782948725ABF2F2
    2026-10-31T18:48:12 8240064 4 10 [...].251.16.[...] 5BC55BDD1B8D43928265479805958BCC
    2026-11-04T18:27:01 8240226 5 10 [...].74.9.[...] 5BD52D56505948829E2065A9803BE30D
    2026-10-28T12:12:14 8240054 4 10 [...].86.154.[...] 5BDD2476AE8D47C79C1B7B440DBBA8B4
    2026-10-25T03:48:31 8250141 1 10 [...].59.37.[...] 5BE790D30EA04A55A68AAB17C9784867
    2026-10-24T15:33:40 8250096 3 10 [...].131.162.[...] 5BEB896D2D9D43CDAEFEE537DA6D334D
    2026-10-11T13:06:10 8250138 1 10 [...].59.18.[...] 5BF24B28E0A0437281B7ACD19409A68D
    2026-10-25T00:18:56 8230062 3 10 [...].168.2.[...] 5C539054E41143E8AC83DAA12CEE1F5C
    2026-11-01T20:55:15 8230242 4 10 [...].46.8.[...] 5C942853FF6A461E9BCA74329672213F
    2026-10-25T22:11:57 8250086 3 10 [...].107.22.[...] 5C9650F668ED448993F6A4A982B95688
    2026-10-13T21:39:12 8250157 2 10 [...].84.148.[...] 5CA303864AE54299A8A97C45A0E2EA7F
    2026-10-17T00:32:31 8250251 2 10 [...].203.209.[...] 5CCF1704C7DD486FB4C13C7D8E71AFC1
    2026-11-07T20:43:42 8250040 5 10 [...].69.54.[...] 5D9A354D42744EF49D7F6F2A554F39D3
    2026-10-13T12:17:49 8250309 4 10 [...].203.174.[...] 5DD6279B761D424EA0CF6279AC6D8DB6
    2026-11-10T23:18:22 8250142 6 10 [...].203.205.[...] 5DE728F165094FB0915B3D2ACF5B9195
    2026-10-18T14:45:14 8250052 7 10 [...].168.1.[...] 5E1B26F4D6AF41A09EDC2C5BCD003755
    2026-10-19T19:12:09 8250263 2 8 [...].217.162.[...] 5E28B27F039B4715BBDC1DFA613A684E
    2026-11-03T13:51:05 8250069 5 10 [...].92.75.[...] 5E2DB20B014C4739833BF06DA52E0D08
    2026-10-18T19:52:24 8230223 2 10 [...].16.221.[...] 5E39148D92D540EBBE0E550B6B8BA5FA
    2026-10-11T11:51:45 8250087 1 10 [...].242.90.[...] 5E3D0E50655C465187C8C59D18EE1485
    2026-11-09T19:39:32 8250164 6 10 [...].140.30.[...] 5EC91694C42340C89D6C83C632B1B8F0
    2026-10-10T19:15:42 8250301 1 10 [...].84.0.[...] 5F1B6BEF2CFE4A0BA854B9628E61D929
    2026-10-27T19:26:47 8250091 4 10 [...].203.135.[...] 5F23AD68703846EC94AFC33141E6088E
    2026-11-11T14:23:00 8250231 16 10 [...].167.78.[...] 5F35E10EC5DD4B8B948C54C4B992DDED
    2026-11-11T01:14:58 8250072 6 10 [...].67.74.[...] 5FD8105EF08B418F842BCD0F28102D2E
    2026-10-15T13:42:40 8250078 1 10 [...].251.255.[...] 600EA6075A5C4B6C8BFFFFD7D8AE85D0
    2026-10-05T20:23:20 8250277 1 10 [...].217.170.[...] 60245B20DB66454D8BB545364E7961B2
    2026-10-17T10:45:41 8230051 2 10 [...].178.180.[...] 60674D7D68D6405FB07201DEA0903939
    2026-10-23T00:09:55 8250296 3 10 [...].242.95.[...] 606E7B8EF581482298220152BD0EF059
    2026-10-08T20:40:44 8250027 1 10 [...].67.74.[...] 6074C96C62184C879E378D204B6B9607
    2026-10-24T18:06:42 8250079 3 10 [...].86.155.[...] 60826064C31042E8822B15AEDC3EB2DE
    2026-11-01T06:39:33 8250122 4 10 [...].152.227.[...] 60CADAD3696244CE8CF80D0A4D086368
    2026-10-18T23:05:22 8250115 1 10 [...].130.136.[...] 60CE3C3746CC499A9D474674F3C85012
    2026-11-11T21:38:52 8210215 6 10 [...].86.155.[...] 60E38DB5145C4F579FF5588893539670
    2026-11-11T01:52:28 8250171 6 10 [...].107.35.[...] 6101E0A8264E4E59B68C1FB470DFDF9B
    2026-10-13T01:52:36 8250160 2 10 [...].140.52.[...] 6114811700BB47788F3D121CE56B1BEF
    2026-10-16T18:06:48 8240148 5 10 [...].73.217.[...] 6124B5D615BB497E825C4166CD77BF34
    2026-10-23T13:36:28 8250090 3 10 [...].75.251.[...] 61568BDE3CD44019A87664AE39B66757
    2026-11-08T16:54:53 8250110 5 10 [...].86.136.[...] 617A3AE5ED3F4C5CAADF48EBFD4EA5DE
    2026-10-26T19:36:00 8230141 3 9 [...].86.220.[...] 61A3A08E47A54477B3E1BF1255D2DA21
    2026-10-12T18:44:40 8250052 1 10 [...].74.60.[...] 61AEE02330A344FFA6F8BDE318DD02CD
    2026-10-08T20:23:08 8250061 1 10 [...].242.186.[...] 61DCC5F357C143C9AFCCE753D5A39049
    2026-11-05T02:05:24 8190332 6 10 [...].129.191.[...] 61FC2D9913AC4343BA1CB228E080F182
    2026-10-24T15:52:16 8250135 4 8 [...].152.196.[...] 628E52FF03FF4FC89604F92F618654E1
    2026-10-26T20:37:54 8250085 4 10 [...].71.244.[...] 62942C5A98AB47F4B79F613ED1687F5B
    2026-10-25T17:53:34 8230060 2 10 [...].225.145.[...] 62E08375DA134D6DAC0F671D5A96D239
    2026-10-26T15:01:41 8190332 3 10 [...].73.240.[...] 62F33BDDB649486F87D5174507DAB790
    2026-10-24T22:47:12 8250289 3 10 [...].74.13.[...] 6388460E24E948EB943902AEDBA4F5A9
    2026-10-25T23:58:49 8250274 3 10 [...].87.228.[...] 63C810380EBF4248BED6E0DD4EC84B5E
    2026-10-29T21:35:10 8250043 4 10 [...].74.212.[...] 6416DE5C6DB4443987F2F0C973B15925
    2026-10-21T22:55:14 8250131 3 10 [...].84.193.[...] 644EF6E8E1FB46A68E85ED235F29B902
    2026-10-18T14:22:17 8250059 2 10 [...].75.59.[...] 645930E6BDC943E9B65CC19F0CDB092B
    2026-10-23T19:47:43 8250245 3 10 [...].138.131.[...] 64A539ED44B742C7A1747A2878140674
    2026-11-08T19:41:18 8250251 5 8 [...].203.172.[...] 64C5B2ADD5A54BE09A445CF034D5B023
    2026-10-12T07:34:03 8250309 9 10 [...].65.157.[...] 652E1AD5A8C2431D9EA2ED33A5645AA8
    2026-10-11T17:55:50 8250053 1 10 [...].168.1.[...] 654FAF7B687940A8B0B89618A0FAE4CE
    2026-10-12T23:09:09 8220040 2 10 [...].202.40.[...] 65CC2E440DDC4A8892A1D53E8AD77871
    2026-10-10T21:24:22 8250083 1 10 [...].84.8.[...] 663C8DD5D18E4A70A166ED9379B14157
    2026-10-24T18:45:29 8250133 4 10 [...].4.161.[...] 66506FD0D32D4D3DB34289E8ACE66CE0
    2026-10-29T21:58:02 8250082 4 10 [...].242.91.[...] 66578341136C4AEA966ACB207CA86601
    2026-11-04T00:32:40 8250078 4 8 [...].49.113.[...] 66592A10753645C3952F7018D4F69ED2
    2026-10-12T23:30:13 8250167 2 10 [...].74.47.[...] 668F8DE4B0E148E9898981D8FD1B3D76
    2026-10-25T12:59:50 8250011 3 10 [...].74.92.[...] 669B4D61AACC43609C03D61F9CA8E712
    2026-10-10T15:55:03 8250077 1 10 [...].87.196.[...] 66A0699A2DEC453B9AFFDBCBFABE57FF
    2026-10-27T19:10:34 8250131 4 10 [...].203.135.[...] 66AB2F098DE94AFFB06FBCB9C28FAD58
    2026-11-08T13:34:40 8250274 5 10 [...].87.228.[...] 66B3F949B0464793BDE057E9A798DFDD
    2026-10-11T18:32:18 8250123 1 10 [...].65.88.[...] 66D1D18C4F6A4D7DA88B18A6AEA65DC5
    2026-10-18T15:50:11 8250303 3 10 [...].129.228.[...] 66F42516ADEF453381160FC46C4329CD
    2026-10-07T20:08:58 8250101 1 10 [...].26.5.[...] 67544A56F5F24B148F9FF11CE8A90674
    2026-11-11T00:03:24 8250238 16 10 [...].55.102.[...] 679B271AECBD400091D0946F78552866
    2026-10-08T19:57:25 8250148 2 10 [...].87.16.[...] 679D8C1317A74398A762D7078C4B6996
    2026-10-27T19:53:32 8250012 4 7 [...].140.93.[...] 67B99737C2AB4BB5A7AD38CE25B1E9F1
    2026-10-10T16:44:49 8250167 1 8 [...].74.9.[...] 68321E8CDD0344EE966DD44FB3C6D7BC
    2026-10-16T14:10:33 8250167 3 10 [...].74.13.[...] 6848B19B4F5D473DA9ABCE881674F3DD
    2026-10-26T02:07:59 8230060 6 10 [...].225.145.[...] 684CE4291B714A84A47F22B45206A778
    2026-10-30T12:02:57 8230051 5 10 [...].203.192.[...] 68AE3658F6A64F35999B09448D26D1F0
    2026-11-03T15:08:16 8250117 6 10 [...].84.28.[...] 6902EAD4D48D486B8FDC9FA443B44AA3
    2026-10-26T12:54:47 8250055 3 10 [...].86.62.[...] 6947D2505B614F5D8DB0A7360025B7DB
    2026-10-17T14:27:23 8250002 2 10 [...].217.170.[...] 69756B99D3BB4BD197BB8E62BC4FB26C
    2026-10-30T12:37:39 8230051 7 10 [...].203.192.[...] 697D284139EE436794A06515C07C169F
    2026-10-23T22:30:02 8250041 3 10 [...].66.41.[...] 69827406AB9A424A955E3BB309967885
    2026-10-30T23:33:33 8210215 1 10 [...].86.155.[...] 69E3CE18CB544E92845AADF2A633E28A
    2026-10-11T14:54:33 8250242 1 9 [...].73.239.[...] 69E3FC6EBB7F4527B485FB7252BECFD8
    2026-10-24T12:44:51 8250061 4 10 [...].140.31.[...] 6A2AB9C5A3014F81853C743B9EBF2938
    2026-11-03T02:23:57 8190332 15 10 [...].129.191.[...] 6A30627DD2264E1B992E93EC64B683C1
    2026-11-03T14:46:20 8250148 5 10 [...].75.77.[...] 6A402E0EB0D54D33AAF2F4CBB13F9BC8
    2026-10-22T19:29:55 8250099 3 10 [...].190.38.[...] 6A5822B3F0C04890B5C15C47E4D82B59
    2026-10-18T15:57:29 8240270 3 10 [...].86.31.[...] 6A9D8C46E4AC4870922B0AACDBACA76D
    2026-11-01T16:38:26 8250068 4 10 [...].66.231.[...] 6AE5D7BEC81B41CAB08BAC93BE0003AA
    2026-10-16T17:08:35 8250090 2 10 [...].86.157.[...] 6B662DCADF544CEE99E60DF5F34AA141
    2026-10-16T17:30:47 8240148 4 10 [...].73.217.[...] 6BB98FF453C640DBA02634E6381DE8E1
    2026-10-28T01:51:16 8250032 5 10 [...].74.56.[...] 6BC23BA372084420BFBB4A6671B0CA4C
    2026-10-16T16:03:24 8250124 2 10 [...].74.61.[...] 6C11526E7D9641C4BAA04A9EEA13C52B
    2026-11-11T15:29:45 8250107 16 10 [...].217.174.[...] 6C19B18415AD46F6946BC9990F174E97
    2026-11-08T15:46:13 8230240 5 10 [...].242.231.[...] 6C3E9536ABE440689FCCDB15A4BACD61
    2026-10-20T19:08:50 8250156 3 10 [...].167.147.[...] 6CC96C8C4E0F4322977DCA2B175F3A9C
    2026-11-10T22:55:22 8250006 16 10 [...].75.188.[...] 6D271D54EDD74A25BDB83F4533814C86
    2026-10-27T20:05:35 8250241 4 10 [...].74.47.[...] 6D96F31A8286485CAF9999A0E6F3A347
    2026-10-30T12:48:32 8250103 5 10 [...].4.162.[...] 6D9C29BDD4704FA99298E9061F164AD0
    2026-11-10T13:55:52 8250061 16 10 [...].26.35.[...] 6DCFBEC4720D4E83B8D947BE920E04E7
    2026-10-24T17:27:29 8250107 3 10 [...].217.174.[...] 6DEEB476DCDB4B34812880C910938D28
    2026-10-06T22:14:33 8250013 1 10 [...].130.149.[...] 6E0B8182BCD5443593B1E062380C37F6
    2026-10-19T18:33:44 8250164 3 10 [...].242.229.[...] 6E0DAB4AC24244A8A170BF38CC1CCAA6
    2026-10-16T16:18:13 8240062 2 10 [...].73.29.[...] 6E8EC0BF24DD4118B06D7B2022C1B959
    2026-10-19T20:54:08 8240154 3 10 [...].246.61.[...] 6EC22565DBE644F097CE47EF36CC1794
    2026-10-11T17:51:28 8250059 1 8 [...].72.122.[...] 6ED7031AA02B4A71973DE7458066B46B
    2026-10-23T12:52:08 8250001 3 10 [...].74.56.[...] 6EE709432DA145DFA4BA251C1E70F606
    2026-10-21T14:41:44 8250002 3 10 [...].217.170.[...] 6F969B5A3DD94B8D9B2B627FBFAF3959
    2026-10-24T18:54:52 8250054 3 10 [...].242.186.[...] 6FD1BB9C001140D08D94946A31B78A5F
    2026-11-01T15:06:20 8250025 4 10 [...].92.14.[...] 6FDD65FF6C5543F3B20D81D7F8218EAB
    2026-11-08T19:23:13 8250012 5 7 [...].140.29.[...] 70041FE6D63F45ECBC61210C958F2816
    2026-11-03T01:50:22 8240266 5 10 [...].130.77.[...] 701577BCE0B3406CB7EDD4AD17ECDEC6
    2026-10-24T20:44:17 8250247 3 10 [...].166.190.[...] 7044DB64095440C3BB4634531AB39677
    2026-10-19T00:54:29 8250247 2 10 [...].203.153.[...] 7044E92E8F924392954AF0861A468FCC
    2026-10-15T17:29:03 8250154 2 10 [...].74.19.[...] 704924E10E444B84BCC09EBB90ACDD42
    2026-10-16T20:59:13 8250117 2 10 [...].55.151.[...] 70E8FD128B0D4900A222F2E2F0CA5A23
    2026-11-04T01:50:30 8250049 5 10 [...].73.136.[...] 70FA418DE5394A42938BBBE2DF402BCC
    2026-10-14T17:01:45 8250004 1 10 [...].246.202.[...] 712106AA4D4F4A35A8C4F9DE18C5B336
    2026-10-18T19:20:12 8250021 2 10 [...].74.61.[...] 719E7C9C62714351A56BD19E9D8A48D0
    2026-10-25T16:38:38 8190343 9 10 [...].6.160.[...] 71C2B4AD46034ABDAD805AA69788811B
    2026-10-19T18:37:14 8250026 3 10 [...].49.75.[...] 71DE754CBDF9405D8865765E1061F40C
    2026-10-08T23:03:22 8250231 1 10 [...].55.78.[...] 7289DE46A8DD40E4B31CD7E60B3D4B4E
    2026-11-10T12:39:22 8250054 6 10 [...].26.33.[...] 72DF5E980B304F028BD2D993AE0B1220
    2026-11-04T00:07:40 8240129 3 9 [...].86.155.[...] 72F01561D0D14B848B1A098CF2AD8AB7
    2026-10-28T18:25:28 8230062 4 10 [...].168.2.[...] 7306B06884064E06AF01B7DBDBCD9D7F
    2026-11-03T02:22:54 8190332 13 10 [...].129.191.[...] 732E83A670E549388424E65E873E0649
    2026-10-11T15:48:08 8250047 1 10 [...].140.28.[...] 7373F0D50EFB44719C3A648759258CDB
    2026-10-23T16:07:25 8250230 3 10 [...].237.203.[...] 738635C4F7F648D6AC97C7C167912C49
    2026-10-16T13:24:07 8250099 1 10 [...].6.111.[...] 73BCE3767B0B40F8AE4F5A696F3FC735
    2026-10-20T15:07:14 8250172 3 10 [...].87.50.[...] 73C00697260041BA9E7ADE3E79DB1048
    2026-11-10T15:32:13 8250086 6 10 [...].107.22.[...] 73C3152D45DD46F1A41998DB1CF5F0B9
    2026-10-17T15:14:42 8250060 2 10 [...].246.150.[...] 73CF3683BB844DA19205BDB1ECBCAAE0
    2026-10-25T19:55:24 8230060 5 10 [...].28.80.[...] 73D3E8713EFA4EC484A5CFB64F67E99D
    2026-10-23T15:54:04 8250124 3 10 [...].75.96.[...] 742FB297BCA94FCC88C380CF065C226E
    2026-10-13T19:50:56 8250007 2 10 [...].86.229.[...] 7440A3D5F87D4878AFC00BA0660BF8F5
    2026-10-26T18:26:27 8250102 4 10 [...].210.67.[...] 7442D89D646F4865AB1CA1A9BC2FE5EC
    2026-11-03T02:26:03 8190332 18 10 [...].129.191.[...] 7475EC7974DD413C9F370A7C056A08EF
    2026-10-10T17:52:35 8250096 1 10 [...].131.162.[...] 74A4CB5E6FD249EBA9F3BA9CAE9A667E
    2026-10-23T22:11:48 8250229 3 10 [...].86.155.[...] 74F8EB1407EB4B7587DA631CFAF3172F
    2026-10-18T17:07:18 8250304 2 10 [...].152.152.[...] 753E490960654812872BD7CB23E6352E
    2026-11-06T00:05:00 8210093 6 10 [...].107.188.[...] 756C99BFF7B74AC8A74FA7EDC32CB1F0
    2026-10-07T11:32:09 8240148 1 10 [...].26.9.[...] 756E317E73B54916AC3444A83E96F594
    2026-10-11T18:35:26 8250274 1 10 [...].70.120.[...] 757E8158452845488927610F2923341E
    2026-11-11T14:28:25 8240226 6 10 [...].138.152.[...] 759135F362824E428A37F55BFAE46BC5
    2026-10-30T15:35:02 8250117 4 10 [...].26.13.[...] 75CDA9B7B10246638E473ADAC0BD773B
    2026-10-24T09:55:59 8190343 1 8 [...].6.160.[...] 75E10A6A755146119BCDF605DAA2DA10
    2026-10-25T15:11:25 8250141 3 10 [...].59.37.[...] 75FCAB1A5E4E4D17AA6BB3233F777BD4
    2026-10-13T14:03:54 8250013 2 10 [...].66.136.[...] 763290B8EC5D4464AE7B19FEAF6858B2
    2026-10-13T01:36:29 8250084 1 10 [...].107.20.[...] 7633748D4BB94C79B8C735752E63ACE9
    2026-10-11T15:35:54 8250302 1 10 [...].210.243.[...] 7645F4FAE38746248313799EB3012529
    2026-10-27T11:48:05 8230051 3 10 [...].178.142.[...] 76FB757413154D83BC68FD7033B720FB
    2026-11-08T22:57:15 8220018 5 10 [...].70.8.[...] 77205278EB364AD7B2D7EA7813CFF984
    2026-10-06T00:29:13 8250075 1 10 [...].86.131.[...] 77235DB1AC1C4869AF5AB1BEDAC00DF7
    2026-11-11T17:43:55 8250296 6 10 [...].58.137.[...] 77283A08D33F411E8738FE6309D7A060
    2026-11-08T17:27:27 250093 5 10 [...].242.88.[...] 775386FC8D2044FCBB1031C1537078E0
    2026-10-13T23:29:00 8230241 2 10 [...].242.93.[...] 7795CDA060884BC7A7E39DDC08B43185
    2026-10-26T23:37:23 8250292 3 10 [...].66.117.[...] 77A0F39FBB604B6FB77075CFC16B1647
    2026-11-10T15:54:17 8250088 16 10 [...].86.26.[...] 77A372D0CCDF49D485CA3861682D14BD
    2026-11-01T17:16:02 8250079 4 10 [...].86.155.[...] 783F8DDA89484EFEB64D8234FAA73A58
    2026-10-17T12:30:51 8220060 10 10 [...].217.178.[...] 784EC1B039E14EA19CC14EC53FC1A059
    2026-10-30T16:28:10 8250076 4 10 [...].84.175.[...] 787ED04B49AD4CADB832410F30C5F707
    2026-10-20T17:36:51 8250170 4 10 [...].66.178.[...] 78820F91790B49DABD7735AFFC683C39
    2026-10-27T13:46:15 8250062 4 10 [...].168.1.[...] 78C261F7014C47DF9F945C4CD2CF9F30
    2026-10-31T10:44:44 8250042 4 10 [...].65.159.[...] 78D49294AC39496A9536050CEFAF9358
    2026-10-31T16:48:35 8250166 4 10 [...].103.102.[...] 78E4B3421839499090C8199F23629B06
    2026-10-27T09:45:53 8230241 4 10 [...].242.88.[...] 790490E688DC45B99042714FD2F78E1E
    2026-11-03T17:11:26 8250017 5 8 [...].65.46.[...] 795A19A2893D444EB8518267758F5D72
    2026-11-10T15:41:09 8250086 16 10 [...].107.22.[...] 797BAEDCEFF64FEDB725D51CBD738664
    2026-10-12T20:54:10 8250140 2 10 [...].140.16.[...] 79A7E8C1794A4A8AB0AABF74E5169AC0
    2026-10-14T21:28:12 8240093 3 10 [...].168.2.[...] 79BA134778064ED9B351C627BF615B8C
    2026-10-29T18:26:36 8250238 4 10 [...].140.101.[...] 7A4679B6233445D595F160A991838B19
    2026-10-23T19:34:41 8240236 3 10 [...].66.41.[...] 7A52A479A8F94AB8AF1C4416B66BF08E
    2026-10-24T12:46:41 8250142 4 10 [...].203.147.[...] 7A53E0FC5D8A44BC83C13FF9996AD13E
    2026-10-28T02:19:52 8250145 4 10 [...].140.100.[...] 7A57F3A322C84826960F440E7F4A9008
    2026-11-11T02:15:36 8240266 16 10 [...].74.69.[...] 7A71ABD96F9B49AA8FA8D4CDAE11E815
    2026-10-19T23:11:52 8250003 3 10 [...].55.111.[...] 7A75B8A102634B85B63E008E0D03694A
    2026-10-23T01:59:17 8230150 3 10 [...].66.41.[...] 7A84D0FBF12E40E9997B8AEA7D2FA89C
    2026-11-01T17:11:32 8250087 4 10 [...].55.28.[...] 7B00D740BBDF4827A6095D0A88EC3F78
    2026-10-26T23:15:42 8200100 3 10 [...].66.41.[...] 7B27C6406C464306AB4948F1EA59D114
    2026-11-03T20:21:06 8250275 5 10 [...].87.150.[...] 7B5570AD8412422E964530BE54139C96
    2026-10-11T21:48:30 8250076 2 10 [...].107.29.[...] 7B5FB1DEF7B54120B170F5254DFB7C2E
    2026-10-21T11:22:44 8250301 3 10 [...].74.10.[...] 7B8986BEC9DC4368B439CB9DEB63F0E7
    2026-10-14T19:38:10 8250280 1 10 [...].74.11.[...] 7B8C4020DDF44B3AA1E704157CA81465
    2026-10-19T21:19:16 8240266 3 10 [...].130.77.[...] 7B965C1F44FA4C85A9B7F5EB7D6B8181
    2026-10-25T02:00:01 8250171 3 10 [...].84.130.[...] 7C2BC869B07940209E4E9D0043C7523F
    2026-11-07T18:13:07 8250089 5 10 [...].66.41.[...] 7C384FE2461B46EAA89FD6CBFBF375FD
    2026-10-14T12:07:18 8250075 2 10 [...].86.131.[...] 7C6545D02B594EAFAAC6EBC74C754D6B
    2026-10-20T13:41:46 8250064 3 10 [...].84.25.[...] 7C991A2257944288A8F73C636473F853
    2026-10-06T13:19:04 8250081 1 10 [...].64.197.[...] 7D335B23051243A1A6D156E752115FD7
    2026-10-12T23:50:19 8250156 2 10 [...].167.147.[...] 7D55DF8A47EE4DE5B4B46D74119CE462
    2026-10-25T19:58:17 8230223 3 10 [...].16.177.[...] 7D74742CEDE44B7DB1C91A5854D086FD
    2026-11-11T22:48:59 8250290 16 10 [...].86.44.[...] 7DD3206B396F4E2696F0B646BF5CF209
    2026-10-19T00:54:46 8220040 3 10 [...].202.40.[...] 7DD8829A9D194CEE84EEF84DC20210B0
    2026-10-13T20:05:57 8250138 2 10 [...].59.18.[...] 7DFE9C08F8EF47A1BC371ADC7103D8AF
    2026-10-25T03:16:16 8230240 3 10 [...].242.229.[...] 7E12FF74319144AF8FF62CA7181EA59D
    2026-10-14T22:25:59 8250155 2 10 [...].4.202.[...] 7E7D9419B1AC45A2887AFD06650494A7
    2026-10-29T23:23:04 8250021 4 10 [...].133.196.[...] 7E9A0DCF3ABF40C2B2FF5261C9042C14
    2026-11-08T22:29:01 8230223 5 10 [...].219.222.[...] 7EA2233DF31B41D5827C0867A8BB0CF0
    2026-10-25T15:47:25 8190343 6 10 [...].6.160.[...] 7ED64D8602CE4F61927AEF6BC9BCC8F3
    2026-10-30T14:35:42 8240074 4 10 [...].84.0.[...] 7F124849509E4C9F96A87767CDE299E9
    2026-10-18T12:28:43 8250073 2 10 [...].92.180.[...] 7F514C0B2593471B8DE8AF73623A3E63
    2026-10-06T23:27:08 8250027 1 10 [...].67.74.[...] 7FDF54CF61944BAD9B66E45F978073B9
    2026-10-11T16:32:11 8230062 1 10 [...].168.2.[...] 800BB09A60714E3E8D7841B05701AED3
    2026-10-10T12:02:05 8220018 1 10 [...].167.124.[...] 800EAA5744964B908953F82125AB107E
    2026-11-01T20:58:17 8250115 5 10 [...].75.249.[...] 801A40CB933C44AE9827DAB379725EE1
    2026-11-09T19:00:18 8250087 6 10 [...].58.137.[...] 8042F1966D854BD5B890495B107C6360
    2026-10-19T23:38:57 8190318 3 10 [...].92.140.[...] 80D26DA78059449BA6B2A5B2875E64E1
    2026-11-08T19:55:20 8250131 5 10 [...].156.60.[...] 81178C58E55B478097E1913B69793C05
    2026-10-24T16:32:26 8240061 3 10 [...].84.49.[...] 81215792D4A546F5BC38161949FCA2CF
    2026-10-19T22:02:21 8250231 3 10 [...].167.78.[...] 8138B2BB8BF142E68299C15931E2FC60
    2026-10-27T18:17:49 8250289 4 10 [...].130.205.[...] 817A18206370459A9E10006E290D870C
    2026-11-08T21:00:19 8250098 5 10 [...].217.161.[...] 81866C9FA3164D50A92681D3571A7D1B
    2026-11-05T16:15:05 8250026 5 10 [...].49.75.[...] 81CA5428B40C4ADABD0842D5B574E773
    2026-11-04T03:10:15 8190332 5 10 [...].129.191.[...] 81F32115C8DB4033847937AC3DADA70C
    2026-10-31T20:27:34 8250038 4 0 [...].86.45.[...] 8309A5DF558045B08D8A0485B51D37B1
    2026-10-21T12:00:42 8250275 3 10 [...].87.150.[...] 8326EBDE241349E9A258CF5634F9D240
    2026-10-07T21:52:21 8250068 1 10 [...].86.205.[...] 836597C9AFDD436DBD94C82EDC3587F3
    2026-10-13T14:34:15 8250043 2 10 [...].74.212.[...] 838A076506704CCBB5CC2935EC258CEA
    2026-10-28T19:08:36 8250004 4 9 [...].246.202.[...] 838A754432B84EB0BD7F34A5AE7A1967
    2026-10-11T13:23:19 8250006 1 10 [...].75.188.[...] 83D8B29E9E77413B91B276809598B88B
    2026-10-31T18:04:34 8200100 4 10 [...].66.41.[...] 83E06994A39C4157B173D06663D1BBFA
    2026-11-04T00:33:36 8240129 4 8 [...].86.155.[...] 8412D6A7600D4F868D9DFAE6AA1C9F83
    2026-10-26T15:05:27 8190332 4 10 [...].73.240.[...] 8447E5ADD8E94A5EBECA072CC8FD6860
    2026-10-07T15:19:54 8250063 1 10 [...].168.2.[...] 848CDBF06CCC438697C08D564218C582
    2026-11-08T13:56:10 8250025 5 10 [...].92.14.[...] 84FD5AB5FD984F2EBCC077D06A88BC7A
    2026-10-22T15:53:18 8250012 3 9 [...].140.92.[...] 85043202AD4B4E6784BD6F2E8E978BE3
    2026-10-12T20:58:26 8250265 2 10 [...].217.171.[...] 8508AFA403954538978C66EADEDC05F7
    2026-10-25T16:18:15 8220018 3 10 [...].167.124.[...] 850E9D698C6D411F8193B61455BEFAFD
    2026-11-09T18:26:49 824031 2 10 [...].74.46.[...] 853C5770C13A4BBABC568648431595C1
    2026-11-07T22:29:03 8250097 5 10 [...].87.77.[...] 85E244F4A4104954B5082B0D7E8F1931
    2026-10-19T00:00:35 8250131 2 10 [...].84.193.[...] 85F51A4DB74645FC8A8A1534EBA20843
    2026-10-15T18:31:21 8250241 2 10 [...].74.35.[...] 8606081D75B34DB4ABFD9C0F7E51D1E8
    2026-10-16T22:20:16 8250058 2 10 [...].66.41.[...] 860BA6F5924B436BA12381D4B6D87344
    2026-10-31T12:50:45 8200091 4 10 [...].228.63.[...] 86183D4182E34CC488A07842C63FAEC1
    2026-11-08T20:26:16 8250104 5 10 [...].66.41.[...] 861956B76F804275B4EFB6F876F50CE9
    2026-10-27T11:22:09 8210105 4 10 [...].87.55.[...] 8647B79A1FF04B22B81209139E43E77F
    2026-10-10T15:41:50 8250122 1 10 [...].217.169.[...] 865CA724AC704B76AD72F37DAB3F11DF
    2026-11-09T21:59:55 8250140 6 10 [...].140.0.[...] 868F8427BF2C45FE84AC6CA18EB8C95D
    2026-11-09T17:01:56 8250058 5 10 [...].130.51.[...] 8695BE688CC5494395F230FDEAA30098
    2026-10-19T22:50:12 8190318 1 10 [...].92.140.[...] 8699FC279DB14053AB4A997444221431
    2026-10-28T19:25:34 8250094 4 10 [...].203.245.[...] 86B772CAB9FE4940AC2CCE230426A9F5
    2026-11-08T14:36:44 8250010 5 10 [...].74.220.[...] 86BC9DDD192446388B6CC05D94A87470
    2026-10-12T23:44:23 8250296 2 10 [...].242.187.[...] 86F38670E61948A5B7870322C13AFE5C
    2026-11-03T20:30:41 8250157 5 10 [...].130.119.[...] 870C4B4FAC75450CAF6B1E65BC621E4E
    2026-11-10T17:15:12 8250070 16 10 [...].74.76.[...] 87188065AAB34027B049FCFF73B11E6B
    2026-11-09T14:14:44 8200100 6 8 [...].66.41.[...] 8755CAD61A80477A874B548480651C9F
    2026-10-16T15:54:40 8210105 2 10 [...].198.212.[...] 8792BEF9525A468BAEB122B618360BEC
    2026-11-01T23:23:19 8240316 4 10 [...].102.3.[...] 87937FF01FC742CEA9E499EF445B2DF2
    2026-10-16T04:05:34 8250172 2 10 [...].87.50.[...] 87949BE1EFB3404DAFD4FF998D09EA07
    2026-10-26T18:21:49 8250160 4 10 [...].140.52.[...] 87C5CAF5E77A4546B56BE6DBE3887FF9
    2026-11-01T13:05:35 8250029 4 10 [...].65.88.[...] 88525DF0B2794065BC3592A11AC33CB4
    2026-11-08T21:14:22 8250122 5 10 [...].217.169.[...] 88A5A2E6F632436D8A4CEFCE1802AE67
    2026-11-02T20:49:08 8250043 5 10 [...].74.212.[...] 88E2C27BCF164E28B090DCBD05C75110
    2026-10-13T20:28:24 8250129 4 10 [...].86.113.[...] 890184E6DB3D4AD7A1A37CFB4563BFF4
    2026-11-03T15:49:32 8250245 5 10 [...].38.105.[...] 89549297FA1F4CDB8987B1BB23C380E3
    2026-10-09T12:38:18 8250236 1 10 [...].138.195.[...] 89A1D158F3F94320950D28EB70A54738
    2026-11-01T23:59:17 8240235 4 10 [...].49.78.[...] 89D68D182B474DAD8CC55DD855404A6C
    2026-10-16T03:26:34 8250005 2 10 [...].167.173.[...] 8A069A1896844EF0A56677F53B5EF20D
    2026-10-28T15:38:42 8250096 4 10 [...].131.162.[...] 8A1752143BF348C1928696FD4AC91F74
    2026-11-01T15:13:59 8250247 4 10 [...].167.107.[...] 8A3EBFF5764542608D2FCECDE98453A5
    2026-10-14T19:31:31 8250158 2 10 [...].92.139.[...] 8A5AEABF0697484EBE4F71A5656C54AD
    2026-10-14T01:31:09 8250063 2 10 [...].168.2.[...] 8A666750A2D44190890A58836E0A09E4
    2026-10-27T18:34:12 8250154 4 10 [...].74.11.[...] 8A669A2EFB8B4B209D5CD2455661A41D
    2026-11-08T19:22:34 8250155 5 8 [...].4.202.[...] 8AE0555232C841B2A0105EFCD408C1D2
    2026-10-06T20:37:37 8250126 1 10 [...].217.169.[...] 8B09E5D66E054E6291389EF7F3B97250
    2026-11-07T19:22:31 8250027 4 10 [...].67.74.[...] 8B2ED2823B194F788CE02101506FB1ED
    2026-10-30T13:59:43 8250261 4 10 [...].72.229.[...] 8B7E17BD3E5949ECA81CB93606F7C6FE
    2026-10-09T14:25:27 8230242 1 10 [...].1.235.[...] 8BA1CD805DA34C47AE7A6EE7BDBC3769
    2026-10-14T19:39:09 8250302 2 10 [...].210.243.[...] 8BC9A3D04D4F4441B796211CAE589B5D
    2026-11-02T17:43:15 8250160 5 5 [...].58.148.[...] 8C10AFA43F0349459C07195B0B1EFD5D
    2026-10-17T13:16:56 8250089 2 10 [...].66.41.[...] 8C5A13FA9215441A95A1DD43AAE3FC0A
    2026-10-17T18:00:03 8250068 2 10 [...].86.205.[...] 8C5AFD9EEE5A49888823BE00BFA5B8BD
    2026-10-10T12:32:00 8240074 1 10 [...].73.198.[...] 8C90ABF2D3654D0297D5821631657184
    2026-11-01T21:43:47 8250277 4 10 [...].217.170.[...] 8CA1701D5146403993D75832E8EC40B2
    2026-11-08T20:20:29 8250289 5 10 [...].74.18.[...] 8CB155F72AAA4CD597619759CCE1C0F6
    2026-10-07T15:05:00 8250028 1 10 [...].26.22.[...] 8CC636DB6C1B4BD6997FE37FC32DE2DE
    2026-10-23T12:54:38 8250001 3 10 [...].74.46.[...] 8D29440D905B441C941376B262C56F52
    2026-10-23T23:56:49 8250236 3 10 [...].255.0.[...] 8E0320F217E647418C01BB3698B3C824
    2026-10-16T18:00:50 8250009 2 10 [...].58.138.[...] 8E0B50FF14FB4680A483262B7BBBA366
    2026-11-06T15:37:08 8250063 5 10 [...].168.2.[...] 8E2DF36B6B5C4E07ADA7167DE8CE844D
    2026-10-19T20:02:18 8250143 3 10 [...].251.255.[...] 8E4DDAE8D1104C56B7FC4ABE3E199479
    2026-10-24T18:30:43 8250242 3 10 [...].242.138.[...] 8E59C13340334F2C8572FCD7A2FB68F9
    2026-10-11T20:15:52 8250062 1 9 [...].168.1.[...] 8E82D4E80BBD4C8492945A27998A82E0
    2026-11-04T03:24:22 8190332 6 10 [...].129.191.[...] 8EA69E08218C432D8109DEE17C428E20
    2026-10-28T15:36:37 8220060 15 10 [...].217.178.[...] 8F40F85D7AB147B88B57D3350143E6B8
    2026-11-03T02:14:50 8190332 10 10 [...].129.191.[...] 8F6A81767E5344008D9E831704316261
    2026-10-09T18:27:35 8250117 1 10 [...].55.151.[...] 8F76774FDB334CE6BFF95CC4159DC3B6
    2026-10-23T15:24:29 8250082 3 10 [...].242.91.[...] 8F9B0FB6F7AE48039B0CDEB4B7170270
    2026-11-01T20:17:15 8250127 4 10 [...].75.33.[...] 8FA2562CC05E493580B0C0506A35D568
    2026-11-01T22:45:38 8250122 4 10 [...].217.169.[...] 8FAEA326837944F1A35E2C854F89CF6D
    2026-10-11T18:43:23 8250279 1 10 [...].129.228.[...] 8FD2A65A22E54EDFA0B5DB1FD10ADC35
    2026-11-07T19:39:07 8250292 5 10 [...].66.117.[...] 90357D1D1058428BB54304D189667993
    2026-10-24T14:59:23 8240030 3 10 [...].138.220.[...] 904902E8B26D4ED68E1F5FA0558D98EE
    2026-11-03T19:21:31 8250299 5 10 [...].74.212.[...] 90760B39D4704B3CB6C9A6C8B5E01C45
    2026-10-20T20:11:25 8250133 3 10 [...].4.161.[...] 90783C7953D94A0190D9797AB9D8C712
    2026-10-14T22:52:25 8250035 1 10 [...].36.177.[...] 9085939A0F124C16BDC4C70FF0E84AD3
    2026-10-28T11:42:30 8250044 4 10 [...].154.44.[...] 90A80DB84A874BB798B4E83332795522
    2026-11-11T22:45:18 8250082 6 10 [...].242.91.[...] 9183E1FBDBF4484D8236335304E3FC0F
    2026-10-10T13:41:44 250093 1 10 [...].58.136.[...] 91C7D49E29774BF1BC8EE5C3D5025E8C
    2026-10-09T20:13:52 8240266 1 8 [...].130.77.[...] 91C99028CAAE4E38BEA202AB72B53729
    2026-10-25T23:36:56 8250280 3 10 [...].74.13.[...] 91D29F3FE28B405CA4E07E7E20D4321B
    2026-10-17T12:01:47 8250032 2 10 [...].74.60.[...] 921346370BF0408D9DD935821CB24C4A
    2026-10-18T22:39:40 8250083 2 10 [...].203.238.[...] 9220C89A61A843E486E7C8B8BCF7902A
    2026-10-18T22:58:57 8250029 2 10 [...].65.88.[...] 9225498F980A47E6A43C990831CC981B
    2026-10-13T10:11:49 8220060 2 10 [...].217.178.[...] 924DCF13D30545F88029B1011FB818D8
    2026-10-10T18:04:15 8250128 4 10 [...].140.93.[...] 928C6F98A08B40D792C62AD258FF231F
    2026-11-10T20:28:49 8250241 6 9 [...].251.255.[...] 928DC7D9FC524092A202805830268B99
    2026-11-06T16:46:58 8250302 5 10 [...].210.243.[...] 92CCDD772DBD4D6C9685A95C3CB1577F
    2026-11-03T19:32:05 8250303 5 10 [...].66.16.[...] 931F6BEACFBF47CF8323D0C8BEB0619F
    2026-10-21T08:51:57 8250235 3 7 [...].140.82.[...] 939019BC23C149BC83524933ADA69050
    2026-10-25T18:10:14 8250081 3 10 [...].64.197.[...] 93B85298C94A4BB2A68BBC744D383E87
    2026-10-27T16:34:17 8250070 4 10 [...].54.130.[...] 93DCA68B04ED4783BFE91889BA2A19AA
    2026-10-21T20:55:35 8250072 3 10 [...].67.74.[...] 9405D008FF30475C8476F86501C35BC8
    2026-11-10T14:31:29 8250043 16 10 [...].74.212.[...] 9433675A16A340FA9EB7A6D1359675F5
    2026-10-26T14:53:00 8250140 4 10 [...].1.90.[...] 943F4626D96A4FC98BEA41D32AEAE2D8
    2026-10-19T21:42:34 8250126 3 10 [...].217.169.[...] 944D37D4C90D46C29654BE671934C986
    2026-10-25T18:19:29 8250110 3 10 [...].86.136.[...] 944E6D427A16442C8EB3AC817ED5594B
    2026-10-13T11:00:03 8240236 2 10 [...].26.8.[...] 947A95F23C844FCC9ACB30D876A998CB
    2026-11-10T21:05:46 8250241 16 9 [...].251.255.[...] 94CCFBA16B30408AACD737A00F8FD554
    2026-11-11T19:40:07 8250277 6 10 [...].217.170.[...] 9535701C0AF54A58B69ECACD4F058F68
    2026-10-25T22:10:58 8250130 3 10 [...].74.199.[...] 959623650B5549B094E18E1B640C87AB
    2026-10-17T14:31:52 8250010 2 10 [...].74.220.[...] 95D7363905D2472684B46124CD4E7F51
    2026-11-07T22:35:09 8250064 5 10 [...].87.77.[...] 963B5A22A60E4EC9B613DD4892C1EA2B
    2026-10-24T11:25:37 8250138 3 10 [...].49.234.[...] 9658465A446B4A1FA466BD1DC011A7B5
    2026-10-22T18:30:46 8250149 3 10 [...].255.90.[...] 96FA2EF0E32E46E68EF1042654F4CDEA
    2026-10-11T18:00:56 8240061 1 10 [...].84.49.[...] 974C70A3DEAF45BA9EF3CE602708CFB3
    2026-10-23T13:13:15 8230242 3 10 [...].86.149.[...] 97E931F7001746B0BCCA51CA83A0526B
    2026-10-07T20:32:09 8250066 1 10 [...].65.157.[...] 98194307030C4B5D91277ECFB2955BD9
    2026-10-12T21:34:57 8250282 3 9 [...].6.195.[...] 984B671F5C2D4EF1BEDC5AAF301ECCA8
    2026-11-11T10:49:44 8250279 6 10 [...].26.12.[...] 9871ABFF63814D25826DCABA8DE13E5A
    2026-11-12T00:45:20 8250013 16 10 [...].84.113.[...] 99390ABFA8B24F4DBA4FD984F34D67F5
    2026-11-04T19:36:33 8240062 5 10 [...].73.29.[...] 993D9A5693084A038850462FD6310A58
    2026-10-17T21:00:02 8250266 2 10 [...].73.238.[...] 9943C2BFDC2C4F399E02B37D3DD706E8
    2026-11-04T23:22:22 8250149 5 10 [...].54.193.[...] 995935895CBC4B1F9EF43934C294FA7A
    2026-10-09T11:50:51 8240030 1 10 [...].203.182.[...] 995E0AC9427C4E988633288B1F1ED57D
    2026-10-25T20:06:29 8200239 3 10 [...].154.37.[...] 9960F158753547108C934AFCDC3A400D
    2026-10-08T12:58:07 8250149 1 10 [...].74.58.[...] 997158E4D01A4C0286FA16C8ECC0DA9B
    2026-10-07T11:40:44 8250111 1 10 [...].86.153.[...] 9987DA44F9FC4D41A1DDE98D2409C42C
    2026-10-14T21:04:14 8250277 2 10 [...].217.170.[...] 999A61989D834A54A4CAC78F8E2BF5D2
    2026-10-17T16:35:53 8250107 2 10 [...].217.174.[...] 9A15F510ACCE42D0B1AFEA551B2503B1
    2026-10-14T00:19:43 8250309 8 10 [...].65.157.[...] 9A1DE1C8584B491693ED7AEB04EBF7B6
    2026-10-11T20:59:28 8250037 1 10 [...].66.231.[...] 9A2D133619AD43538CC00E641F6CA980
    2026-11-11T20:02:43 8250102 6 10 [...].67.236.[...] 9A2E930E51AD47CBA61FE5DB750243FD
    2026-10-15T13:49:40 8250245 2 10 [...].131.130.[...] 9A350E93B7224F788965CED9DE641B00
    2026-10-11T21:53:29 8250091 1 10 [...].74.220.[...] 9A5478778AC243E0BC325DBD6A919E0D
    2026-10-17T13:53:14 8190306 2 10 [...].210.98.[...] 9A61469D31A24C2AA59FBC7730914E57
    2026-10-11T17:23:50 8250263 1 10 [...].178.178.[...] 9A63A3B9A1EF49BB92D0DA2C94EA6050
    2026-11-08T14:44:25 8250171 5 10 [...].107.35.[...] 9A85F3A90A9C487DB840F7BB3A4BC82B
    2026-10-24T14:07:28 8250061 5 10 [...].140.31.[...] 9ABE37FA617041B09BCC20C64D4D454E
    2026-10-18T02:05:38 8250084 2 10 [...].107.20.[...] 9AF763A181504EB9B1DA9DD052B458B8
    2026-11-11T23:05:34 8250236 6 10 [...].255.0.[...] 9AFF1E8C1AB64FC889A07D069B8EC4F1
    2026-10-08T16:46:29 8250067 1 10 [...].59.189.[...] 9B07E96976904D8EB4A2DE199CD3535A
    2026-10-07T20:07:13 8250064 1 10 [...].26.6.[...] 9B1B50948E0940D390241D29084DFE2F
    2026-10-20T15:47:49 8250167 4 10 [...].74.13.[...] 9B2BF25D8FDF42C68036B57FC65604DB
    2026-10-21T13:21:13 8250061 3 10 [...].242.184.[...] 9B2E0CB6D0A743D69C4B3087E62D0BA8
    2026-11-10T18:17:53 8250044 6 10 [...].154.44.[...] 9B377CD2437742D69A527A958F40A784
    2026-10-12T13:14:29 8250079 1 10 [...].86.155.[...] 9B45D976297F40DFB55607BBF3D661CC
    2026-11-10T20:50:17 8240062 6 10 [...].87.240.[...] 9B542CBE7F5F4269B534A1FCC09C5F6F
    2026-10-30T10:01:25 8250035 4 10 [...].36.181.[...] 9B8098EC1D774B47881CDB7EAB0259DE
    2026-10-31T19:20:29 8250153 3 10 [...].64.36.[...] 9BC0FC5361E04165911061637ACEEA9F
    2026-10-15T11:43:09 8250301 2 10 [...].74.59.[...] 9BD14572CAFF48D4957E770A45766233
    2026-10-31T23:06:58 8230222 4 10 [...].86.22.[...] 9BD7DFD16E284C6D9949AB69DBF3826A
    2026-11-01T19:22:39 250093 4 10 [...].242.88.[...] 9BF123D164CD440087FBDF09C3AA1A9E
    2026-10-26T19:48:34 8250102 5 10 [...].210.67.[...] 9C01E0CCCDCE49689AFACB5C8A745FAF
    2026-10-25T19:26:46 8250231 4 10 [...].167.78.[...] 9C206F37FE0E4FE9BC956E3F56A86BC6
    2026-11-11T20:34:40 8250235 16 9 [...].255.3.[...] 9C3ABBB883AE4317A49A2B1BE79E7F12
    2026-10-20T01:37:40 8250170 3 10 [...].66.178.[...] 9C42660472C248A9903ECAFFBBC5F7C9
    2026-10-16T18:38:16 8250274 2 10 [...].70.120.[...] 9C69BD93A13348BEA9CCE3DA5710B16B
    2026-10-26T11:12:48 8250047 3 10 [...].219.245.[...] 9CB4EEB7C3A54152A4F4F81F2843C165
    2026-10-10T18:18:50 8250266 1 8 [...].49.185.[...] 9CCD1693213A4D1FBD95362D529F6722
    2026-10-23T14:12:32 8240054 3 10 [...].38.108.[...] 9CF0CDC16A0D44228101191CB35F2AC3
    2026-10-07T22:44:55 8250097 1 10 [...].66.62.[...] 9D05086B06D6472EB80A5E648927D476
    2026-11-06T10:26:50 8230242 5 10 [...].86.149.[...] 9D45008331794460B1934721C43169FF
    2026-10-08T18:03:35 8250143 1 8 [...].251.255.[...] 9D5599A26DDC4C31A5FD30CA41CCC872
    2026-10-27T19:14:53 8250101 4 10 [...].103.173.[...] 9D6128A3D50F49B2B6B28A2558DF2C8A
    2026-10-07T21:58:31 8250001 1 10 [...].74.14.[...] 9D8517F7D2C048F9B9C838C006B589A2
    2026-10-08T21:47:42 8230046 1 10 [...].197.66.[...] 9DB2944014B84C9F996BA684EA27EC84
    2026-10-19T16:09:03 8240064 3 10 [...].84.181.[...] 9E41F42401C3420D9EF10EC1431F3D8B
    2026-10-16T20:03:43 8250309 15 10 [...].65.157.[...] 9E58E58327D945DB95806E1CA389BBBD
    2026-10-28T20:17:45 8250150 4 10 [...].55.78.[...] 9E5B1680C5FE45D5A74AA3ED6B46C687
    2026-10-11T15:31:43 8250011 1 10 [...].74.92.[...] 9E80E73B303F4BD891909D14BDA4FE5D
    2026-10-26T11:36:46 8250047 4 10 [...].219.245.[...] 9EAA3DE18619492199CDCF0BB13F9565
    2026-10-25T13:07:38 8250048 3 10 [...].254.28.[...] 9EEB65C98ED84854B592C9C95022FC0E
    2026-10-30T14:15:15 8230051 9 10 [...].203.192.[...] 9F00EBF0427A4683833656E894B31A9F
    2026-10-09T00:41:33 8250005 1 10 [...].237.212.[...] 9F4F43691A6B4A8998C33738876B9517
    2026-11-01T20:12:42 8250083 4 10 [...].84.8.[...] 9F4F8F71F4E14568B8DCA913E68CA678
    2026-10-28T12:41:47 8250010 4 10 [...].74.220.[...] 9F62C938B336427F8AE3D5DF4D2BDDC1
    2026-10-13T01:44:56 8250160 2 9 [...].140.52.[...] 9FB7E1FAFCF84A16BD7B1F5F5CCEA659
    2026-11-02T18:10:57 8250023 5 10 [...].87.50.[...] 9FDC13644D3F49EBA5D7D9724AC9C473
    2026-11-12T00:28:29 8250012 6 10 [...].242.239.[...] A01BE588B6F94A3BA0497830B41C72CE
    2026-11-10T15:51:35 8250038 16 9 [...].86.45.[...] A0288BE7EB384B7A831C3B0E461C28F2
    2026-10-09T23:18:44 8250309 16 10 [...].65.157.[...] A07EA8F8A2884FB3BF4AFE1EEE0AC5A1
    2026-10-31T19:41:26 8250282 4 10 [...].6.195.[...] A0ACF9B4F6E0491280CF8EFCF5738E88
    2026-10-12T21:45:51 8250170 2 10 [...].66.178.[...] A0BD9422688D4854A5F9FE6000B3FCA8
    2026-10-21T11:55:30 8250103 3 10 [...].4.147.[...] A0C99F3786DA49F09FF408417EC04392
    2026-11-10T14:02:32 8250038 6 10 [...].86.45.[...] A1A3CF2718A64EE993E25DADC83DC081
    2026-10-25T18:38:06 8250060 3 10 [...].219.57.[...] A1A91DE2E3424404A349C71798FB5191
    2026-10-18T22:39:18 8250115 1 10 [...].130.136.[...] A1CECB26E77C419AA352E68EC26A64BC
    2026-11-04T22:33:14 8250065 5 10 [...].54.193.[...] A215788E5B74489F8E8B05788A81D995
    2026-10-12T16:50:32 8240226 2 10 [...].55.107.[...] A21BE7BB5DBC4407A10B4E474410836A
    2026-11-08T13:49:34 8250068 5 10 [...].87.231.[...] A269C377F5174A1B9C13BC13E87FCAA5
    2026-11-02T12:34:46 8250304 4 10 [...].86.226.[...] A26DE444C6E04F609DB503C96EAD0E10
    2026-10-25T22:51:40 8240316 3 10 [...].102.3.[...] A277CF88E2A74A418482F70B627598A9
    2026-11-04T20:08:49 8250241 5 9 [...].64.22.[...] A27F6417311A4900A340BB6C56B978CF
    2026-11-11T16:33:14 8250230 16 10 [...].38.105.[...] A2C11BFED83043CA9561CAA3DCAF4743
    2026-10-18T17:42:16 8250279 2 10 [...].203.32.[...] A2C99D15720E462D8B64D683B25A5A49
    2026-11-09T21:45:04 8250113 16 10 [...].58.148.[...] A2D1DF35A1494B329316E5AAC1ABA25C
    2026-11-01T11:09:07 8250130 4 10 [...].70.120.[...] A2D9C7EBBE544398A28ABB273030CDD3
    2026-10-10T21:43:44 8250038 1 10 [...].217.161.[...] A3309AD61DCF4E0BA0DCC10AC8DAFCBB
    2026-10-30T11:53:55 8250054 4 10 [...].140.31.[...] A351F5AD1937497F8A02A52C0B19FD8C
    2026-10-11T00:20:59 8250146 1 10 [...].87.82.[...] A36D845CCFD14E7A806AF84093717C56
    2026-11-01T18:09:14 8250083 3 10 [...].84.8.[...] A37D44C32C5F4D5892052F13EF7FE084
    2026-11-10T15:21:43 8250086 5 10 [...].107.22.[...] A38902A129254B1E87967A762B45046F
    2026-10-19T01:24:20 8250108 1 10 [...].217.174.[...] A3931FAF081B47C99173300316BADEBE
    2026-11-01T14:46:02 8230051 12 10 [...].203.154.[...] A3ABD4701EB84894A271E07F64C67ADD
    2026-11-06T11:20:37 8250167 6 10 [...].74.10.[...] A3CCAD101D214EDAA5278F719BB62D27
    2026-10-18T23:05:54 8250115 3 10 [...].130.136.[...] A3F6FDF2829140219A1E0F32001D85F0
    2026-10-20T13:49:21 8250101 3 10 [...].203.228.[...] A44B022A999A42B6B067FBE36B690EB9
    2026-10-17T22:07:09 8230062 2 9 [...].168.2.[...] A4950C207AC046FF8B41C134850E4DC4
    2026-11-08T21:43:35 8200239 5 10 [...].154.37.[...] A4AA0F6F84EB4731BEF939C92359702E
    2026-10-10T21:19:14 8250283 1 10 [...].242.90.[...] A4ADF30D4E374CA08801D382F9402545
    2026-11-03T23:45:08 8250239 5 10 [...].74.15.[...] A4B983709045463798E384B1992560A5
    2026-10-27T15:21:53 8240150 6 10 [...].237.205.[...] A4D471019CDB42B6B69DA35D66DF1427
    2026-10-25T13:49:56 250093 3 10 [...].242.88.[...] A50AB1F3B29E46E398E337B76055C15B
    2026-10-31T19:23:43 8250104 4 10 [...].66.41.[...] A5247862871E4FB4A1520384F0528E5E
    2026-10-17T13:49:45 8200239 1 9 [...].154.36.[...] A596DAA246CF47E7BD1D06A37F3C1D28
    2026-11-05T16:49:26 8210093 5 10 [...].26.42.[...] A5AF997295F447C2A733C8F6C12F5B9F
    2026-11-01T13:34:09 8240061 4 10 [...].140.28.[...] A6326F89463845329A3F6C127F44D549
    2026-10-25T14:48:28 8240270 4 10 [...].86.31.[...] A63CD275DB8C482AB6DB72D4FA12FAA7
    2026-10-08T21:34:39 8250156 1 10 [...].167.147.[...] A678191214304FCC9F18018AF9458D57
    2026-10-11T13:13:23 8250267 1 10 [...].38.153.[...] A6DD3E828E4F449F856E2EEC7A6ACE73
    2026-10-14T19:26:32 8250097 2 10 [...].203.225.[...] A70657DF51F24B369FC56E2F4C18AE07
    2026-10-23T13:48:57 8250159 3 10 [...].107.34.[...] A765076DDDB4400FA1BA482C9CB0C9BB
    2026-10-16T13:19:12 8250133 2 10 [...].4.168.[...] A772503E89444860B505A96B52EF8DA9
    2026-10-15T22:47:21 8250125 2 10 [...].107.133.[...] A78E8742E997498CBA6107DC93AC8954
    2026-10-13T15:17:53 8250309 5 10 [...].203.174.[...] A7970A8A3485448DA18C03850C8C40E8
    2026-11-08T19:57:49 8250033 5 10 [...].74.34.[...] A79E967EE8AE4B3FBD85891C618BB8B9
    2026-10-14T19:29:54 8250064 2 10 [...].26.6.[...] A7A1A8B7C2C64716A06CD161D72681D7
    2026-10-11T20:36:49 8250003 1 10 [...].55.111.[...] A7F5F49090B542A6A951AE63CD541306
    2026-11-09T21:43:19 8250289 6 10 [...].74.9.[...] A836199FCEF24EBA824DFFF8FF55BE48
    2026-10-18T12:14:04 8240316 2 9 [...].102.3.[...] A87EEC5CFCD04EEEA7F8A772A2EA1F60
    2026-10-11T21:42:40 8250140 1 10 [...].140.16.[...] A889C8AF60314CEF8EBE06E4299EC72E
    2026-10-09T17:30:43 8250157 1 10 [...].84.148.[...] A88D6C0624ED4567972C3C889333C790
    2026-11-03T02:23:26 8190332 14 10 [...].129.191.[...] A89050E456AD423C9DF66F61BDF82603
    2026-10-13T12:17:33 8250103 2 10 [...].1.100.[...] A8D68175ED854595AB95E0894C3D56DE
    2026-10-18T11:44:26 250093 2 10 [...].74.151.[...] A8F15E278A9545E8BFC297890C139D14
    2026-11-08T18:16:50 8250007 5 10 [...].65.107.[...] A96981999E174B9C88A6129134A18369
    2026-11-10T14:28:54 8250111 6 10 [...].86.136.[...] A988CB5F6926407088561C2F85111E6F
    2026-10-27T10:29:02 8250147 4 10 [...].107.108.[...] A9CB168DAA7C4529972F046C6171AE0D
    2026-11-08T20:21:01 8250243 5 10 [...].66.167.[...] A9CF0A4F267D43199FF7373122FAEF3F
    2026-10-18T15:44:10 8250052 9 10 [...].168.1.[...] A9E9EA2A6C1045C8843BE24DA0E633DB
    2026-10-10T17:28:52 8250082 1 10 [...].242.94.[...] AA0BF88DDF0747D4A5C866F2CCACEE4E
    2026-10-11T18:30:33 8190239 1 10 [...].6.96.[...] AA0D1A250CA14F49AB7C09902AC1BF65
    2026-11-07T18:16:42 8250153 5 8 [...].64.44.[...] AA202C7B4E334B649558D23D1AA5EBCE
    2026-11-10T00:01:19 8250113 6 10 [...].58.148.[...] AA68B9103C4C4D28898FA583F209AB06
    2026-10-28T15:51:34 8220060 16 10 [...].217.178.[...] AA71CD3EA55A4A3388D4CE3BB02C4380
    2026-10-17T10:44:32 8230051 2 10 [...].178.180.[...] AA835E72809D4B4DB04EA5F9E22706F9
    2026-10-17T19:31:06 8240061 2 10 [...].84.49.[...] AABBE859C21D42059A5B1D87F08A2FE8
    2026-11-02T22:46:33 8250231 5 10 [...].167.78.[...] AB003A4411D141D8B593CD9DAE10CC58
    2026-11-01T16:36:01 8250249 4 10 [...].71.237.[...] AB1483D8D6924997B144E11C116F54E1
    2026-10-14T14:45:45 8240069 1 10 [...].138.152.[...] AB448327E47E45F4B26B19D188A7C04C
    2026-10-27T15:15:11 8240150 5 10 [...].237.205.[...] ABBBFEFA046D4FE097DDE38A281E490B
    2026-10-15T11:10:07 8250293 2 10 [...].26.33.[...] ABF7A9E79B8F451DB82D3429073ECD02
    2026-11-12T00:10:55 8250013 6 10 [...].84.113.[...] AC0D829F1C334A399F3C93388526584B
    2026-10-23T00:07:00 8250058 3 10 [...].66.41.[...] AC2B4D698CB84AFFADD5AFB5A9111C00
    2026-10-10T16:19:10 8250070 1 10 [...].86.208.[...] AD253C5C2CDF47BFA36EA73318374BCC
    2026-10-05T21:04:31 8250160 1 10 [...].140.58.[...] AD2CE4E8F90748FB918CB76B81DFC11E
    2026-10-15T21:48:55 8250239 2 10 [...].74.14.[...] AD495EA75EEA47AE8C085D138DB29CAD
    2026-10-12T19:58:10 8250048 2 10 [...].254.28.[...] ADDA3021C5A145C18E5E3E0B95CA7AF2
    2026-11-02T18:15:05 8250113 5 10 [...].58.148.[...] ADEE5A7A0C2E4C50A7A82048991472E6
    2026-10-07T11:48:13 8240093 1 10 [...].168.2.[...] ADFD537EC9C042778DB06F7FBC119D54
    2026-10-10T18:48:14 8250153 1 10 [...].65.23.[...] AE437A53A3C64794A353072E1929DDF5
    2026-10-06T21:07:24 8250144 1 10 [...].133.195.[...] AE900C674A5C4788A2FD6E74EADE2F9E
    2026-10-13T12:21:12 8250088 2 10 [...].86.26.[...] AEA6173E69614377AEABF13BD9A1BAF3
    2026-11-02T17:45:54 8250160 5 10 [...].58.148.[...] AEF94F1DE93244C6B99ABD1DFA400319
    2026-11-08T23:16:40 8240316 5 10 [...].102.3.[...] AEFE24E351C1434FA78B7E11FBC38091
    2026-11-06T19:55:14 8250158 5 10 [...].92.133.[...] AF371A3E8EC64E3CAB4F9CD0045697BF
    2026-10-25T18:40:13 8100069 3 10 [...].247.46.[...] AF48641B32AC4ABF82478CBCE7926935
    2026-10-16T12:49:01 8230051 2 8 [...].178.136.[...] AF52EEFBA48E4CE5832CEA56232ACBF3
    2026-11-05T17:23:47 8250053 6 10 [...].26.18.[...] AF817A6AB1C74DDEB6557D6B69C128C7
    2026-11-01T23:06:05 8250108 3 10 [...].217.174.[...] AF8D30A4C28D464986F6FAC04B38DAB6
    2026-10-22T14:37:57 8250117 3 10 [...].138.152.[...] AF9FCA377E564BEEB7FFD3A010278DC0
    2026-11-04T03:25:30 8190332 7 10 [...].129.191.[...] AFA719789C154025AB28B7D9396538FD
    2026-11-08T21:50:32 8250105 5 10 [...].74.45.[...] AFCF922217F248D49631E7393308690A
    2026-11-10T14:59:04 8250137 6 10 [...].198.166.[...] AFDAC5A1B5BA4DDBA5493050B54CEDBB
    2026-10-31T20:35:32 8240030 4 10 [...].138.220.[...] B0255A1355234A06A00B6F62A176F3A0
    2026-10-27T02:38:33 8250261 3 10 [...].72.229.[...] B05C4AEE7A3A4FA7BFB14494BC969108
    2026-11-11T10:36:58 8230242 16 10 [...].86.149.[...] B07DF6F56642473384CE191A7F1DB333
    2026-11-03T21:04:00 8250072 5 10 [...].67.74.[...] B0CEC576B77A44C5BB7BC48538657891
    2026-10-24T12:27:53 8240045 3 10 [...].74.46.[...] B0DF7F7474324546B56249CB2FDEF238
    2026-10-25T13:11:16 8250057 3 10 [...].86.152.[...] B0F0EBF8B346416FBCEDB7A050F991E3
    2026-10-17T12:39:53 8230051 3 10 [...].178.180.[...] B11A3DF8B69048CCB86D895C40DF0227
    2026-10-14T19:39:18 8250101 2 10 [...].26.5.[...] B12F7F84973A40CFB834EBFCC5CF8E89
    2026-10-28T21:04:52 8240226 4 10 [...].74.10.[...] B13B7A8FE6814A3CA3C66EC3FBA0CD77
    2026-10-11T01:38:21 8210093 1 10 [...].6.124.[...] B142FBE2C94649BDB15BA145509D3CC5
    2026-10-17T20:51:29 8250033 2 10 [...].74.60.[...] B17D293454CA49559695FE79299D2615
    2026-10-08T21:57:32 8250105 1 10 [...].74.45.[...] B1DCA5D76F2A41C598B6389F26FD644D
    2026-11-10T12:31:03 8250066 6 10 [...].65.157.[...] B2314C815DFF4074A319A0660859C0AA
    2026-11-05T17:17:46 8250293 5 10 [...].203.84.[...] B29C8D5E2E224D4A839D548B8330F537
    2026-11-01T17:24:07 8250019 4 10 [...].214.209.[...] B2DF9F93176245F39F5F5857831ADD2C
    2026-10-30T21:38:11 8250090 4 10 [...].217.170.[...] B2F610ADA6FC4948BB6B1F1217A68746
    2026-10-30T16:47:31 8250027 4 10 [...].67.74.[...] B30C2678BBBD4548AAB4694677A35C76
    2026-10-22T23:24:55 8250053 4 10 [...].156.60.[...] B30E7F30F1394B95BAADA65C3D5804EC
    2026-10-21T19:22:38 8250129 6 10 [...].86.113.[...] B31D4F4D925543AF806ACFB86C0E74F7
    2026-10-19T21:19:49 8230141 2 10 [...].86.220.[...] B3301D71F67741A8AAB94A612EDCE3E9
    2026-10-11T18:16:14 8250171 1 10 [...].84.142.[...] B338F3756127443FA9554DF5BC2F176C
    2026-10-07T22:37:00 8250166 1 10 [...].103.97.[...] B365286C13A94C71BC5AF11625E520CE
    2026-10-17T14:19:35 8240030 2 10 [...].73.168.[...] B366A4DA443A4DE28E175B610D0C6B92
    2026-10-29T20:11:13 8250126 4 8 [...].74.201.[...] B381C54DAB0148EB932405A56825C4F3
    2026-11-11T12:36:42 8250279 16 10 [...].26.12.[...] B3B9C21676964A1F8C583A0094DCDCB4
    2026-11-06T14:20:18 8250038 5 10 [...].217.161.[...] B3F48F0A2EFB468BABFA37EEC22F134C
    2026-11-01T19:45:20 8250148 4 10 [...].75.77.[...] B412456582BD4B62986E1933AB27C66D
    2026-11-08T17:21:28 8250028 6 10 [...].84.206.[...] B4176C91613548C9ACD210F5840BCF8C
    2026-10-13T20:26:10 8250137 2 10 [...].86.154.[...] B45C7F575D84469AA71562E8CE3F23FE
    2026-10-25T15:55:09 8250068 3 10 [...].66.231.[...] B47B38C5901D4410B6A48CDD5116D11A
    2026-10-21T01:13:00 8200091 2 10 [...].224.119.[...] B4ABB5354E39408C8B815A9DEF347998
    2026-10-14T15:06:20 8250086 1 10 [...].130.152.[...] B5E0063A1B7E413A9835848BA05BC637
    2026-10-25T18:21:36 8250035 3 10 [...].36.177.[...] B6065F42D5A44FDBA5F2C713CFBB7DE6
    2026-10-30T15:56:34 8250099 4 10 [...].190.38.[...] B615AB916F314AE39DC75B836657863A
    2026-10-16T12:45:21 8230051 2 10 [...].178.136.[...] B646F093E214436B901CF5C7CBBE58C6
    2026-10-26T17:34:02 8250053 5 10 [...].26.18.[...] B64A3627ECD5403FAC7B661A19C4E3B0
    2026-10-25T16:30:35 8190343 8 7 [...].6.160.[...] B65515CDEB854BAA8BBF311B74B57A0F
    2026-11-06T15:00:57 8250016 5 10 [...].26.0.[...] B680C02E00E3469597AA49273945FD28
    2026-11-10T15:05:46 8240045 4 10 [...].92.14.[...] B685BB38843C4FB09D29F6C774E54E1F
    2026-10-10T13:21:11 8250089 1 10 [...].66.41.[...] B69A6234A4E844BA999D605960C8CC31
    2026-11-03T02:24:52 8190332 17 10 [...].129.191.[...] B726542966304CBCB77029387CD45823
    2026-10-05T21:19:38 8250113 1 10 [...].140.58.[...] B7451FAD69B448DF9DA9FD6616E5CB2A
    2026-11-08T19:59:55 8250126 5 10 [...].217.169.[...] B770B334C0984ABBB8ADBBAE9AF1A2B2
    2026-10-09T13:39:56 8250168 1 10 [...].1.128.[...] B7CD05131C0A4A19B5E8A8DCDBCE4D8F
    2026-11-04T20:40:55 8250076 5 10 [...].107.67.[...] B83B2D466AC74C69AA29BA9CB1714B1E
    2026-11-08T15:56:21 8250011 5 10 [...].74.92.[...] B8426BF67CDC469D86F76E09F467B1D5
    2026-10-08T02:14:23 8250071 1 10 [...].73.239.[...] B8585CFFD8BE434E96132FF70F6DD134
    2026-10-17T11:18:29 8230051 2 9 [...].178.180.[...] B87D2E12BF6545AAAFE1FD2340DFF015
    2026-10-17T21:03:58 8250150 2 10 [...].55.78.[...] B88B47803EF3423FB6282F98AC7CBD3C
    2026-11-11T14:11:02 8250063 6 10 [...].168.2.[...] B9575856FA8546E68C5C6A52EBD719A5
    2026-11-06T18:42:55 8250085 5 10 [...].71.244.[...] B983E4AFD5A84A4F9801BD7CB0B8D274
    2026-10-13T17:08:14 8220060 7 10 [...].217.178.[...] B9FB22255A0B416EB443DD7008F39053
    2026-10-11T13:18:56 8250249 1 10 [...].71.237.[...] BA08956759E34364AB541E14C27661B1
    2026-10-17T19:12:38 8250127 2 10 [...].86.54.[...] BA41A89CA9EB4804A8764ABDBA932E93
    2026-10-15T10:17:47 8250309 12 10 [...].65.157.[...] BA4B6E0FAC6F4E1D80ED0A56A928AFAF
    2026-11-03T02:10:44 8190332 9 10 [...].129.191.[...] BA7C2E5994124263B9227A4FC5BABE05
    2026-11-01T16:53:32 8250267 4 10 [...].38.153.[...] BAC3F09A519F42418A6FF28AB698F5DE
    2026-11-05T13:03:21 8250166 5 10 [...].138.152.[...] BB1CE2F466DB4E76B9884D7C97115ECE
    2026-10-26T16:21:37 8220040 4 10 [...].202.40.[...] BB24DF67FFEA4EACBF371DEE7C68D3F9
    2026-10-19T17:52:16 8250160 3 10 [...].140.52.[...] BB3D775DFF40429C8C84AAE1B41695F8
    2026-11-11T21:42:11 8250239 6 10 [...].74.18.[...] BB72A472FCA041D08C6F184F86FD1685
    2026-10-20T15:28:34 8250067 3 9 [...].59.189.[...] BB966305B67B4246BE6D1DDAA16B41B6
    2026-10-09T15:07:57 8250309 1 10 [...].203.251.[...] BBB2E7B6832743849D271A4439644A1D
    2026-10-17T13:31:02 8240045 2 10 [...].74.13.[...] BBBB9339EE5F4459B5E9593D7BE66764
    2026-10-18T10:55:23 8250166 2 5 [...].103.108.[...] BC8145351E8B433694ED1479D715114E
    2026-10-30T22:38:05 8220018 4 10 [...].167.124.[...] BC86FA969EEB4ABCA721AEA14DFB0451
    2026-10-25T21:47:41 8190239 3 10 [...].6.96.[...] BC944F37B739431589E359693D9B260E
    2026-11-11T01:20:04 8230241 16 10 [...].242.186.[...] BD1991891D844DABB56E820B60E8B3E5
    2026-10-13T20:19:26 8240270 2 10 [...].86.31.[...] BD609C2DFB344DBF86E13E428D003C1D
    2026-10-14T12:01:47 8250006 2 10 [...].75.188.[...] BDA45846034A4D9DB16C29C605A6CECA
    2026-10-20T10:36:59 8250111 3 10 [...].86.153.[...] BDDD5FC5B8D94C86979EE8D462008115
    2026-10-05T22:34:35 8250265 1 10 [...].217.171.[...] BDFBAA81E7E1491A9DE748B490C7DCBB
    2026-11-03T02:05:49 8190332 6 10 [...].129.191.[...] BE07709EEEE749CFB2823893BF90CF41
    2026-10-25T15:29:39 8250166 3 10 [...].178.141.[...] BE52D1E3FB9D44159D461558300B22DF
    2026-10-11T16:24:27 8250304 1 10 [...].217.161.[...] BE6A365DA64A4F43B6856855D9298E9A
    2026-10-29T10:23:49 8250069 4 10 [...].26.33.[...] BE7E7C46D6B749E383FD4088229B5243
    2026-11-10T19:05:48 8250006 6 10 [...].75.188.[...] BE89EF36850D4AA68BB5A215BDE19A20
    2026-11-01T14:07:25 8230051 11 10 [...].203.154.[...] BE8F0B0DE14E49B484AFD2D81D46FEB4
    2026-10-19T23:55:29 8250140 3 10 [...].140.16.[...] BEB44714FE1E44E2AF40BEB88CF0E28C
    2026-10-12T19:03:13 8250129 2 10 [...].86.113.[...] BEBF0A49E10E4480B5BA483CB7E4F29B
    2026-10-31T19:16:10 8240129 1 8 [...].86.155.[...] BF0BF76D9AC54CDDA5909E55D3198B17
    2026-11-11T12:36:31 8250231 6 10 [...].167.78.[...] BF368B879AEB42FCA0FE3B889BECA2CE
    2026-10-10T18:36:55 8250018 1 10 [...].140.109.[...] BF42BD3F012D444DB2492B0F78E42366
    2026-10-20T18:16:33 8240148 7 10 [...].73.217.[...] BFA35AAB5A1144518052F35371F82485
    2026-10-18T23:45:23 8250105 2 10 [...].74.45.[...] BFBD39D0E1EA4C958A25FD8417FE36B1
    2026-10-09T22:01:01 8250094 1 10 [...].55.102.[...] BFCF235C77DB4F2B8E41D34E11C5FBFA
    2026-11-09T20:48:29 8250164 16 10 [...].140.30.[...] C05E06D00ECD42EC860AD21D2AD89FBD
    2026-11-01T23:20:09 8250242 4 10 [...].242.138.[...] C0B82D28B74B4297B8C9064BC717925D
    2026-10-18T23:17:31 8250115 3 10 [...].130.136.[...] C0C71EE088C240BAA8DC8E3D5B6E5038
    2026-10-13T19:23:07 8250135 2 10 [...].86.153.[...] C14A967B7E5E41D5884ACC292E615296
    2026-10-10T01:39:28 8220040 1 10 [...].202.40.[...] C153F57F368A49758094C315E1557A19
    2026-10-17T17:26:02 8250104 2 10 [...].66.41.[...] C16506370A35483C930E09B215E97B30
    2026-10-15T22:47:54 8250149 2 10 [...].255.90.[...] C17EAAFB560C43BFBD2EF2ADE3B2E2BA
    2026-11-10T16:29:17 8250070 6 10 [...].74.76.[...] C185D6605AF14B6DB7865348786E40A5
    2026-10-06T20:31:06 8250303 1 10 [...].129.228.[...] C20AC2420A89408A8738C78DA159F471
    2026-11-02T21:18:17 8250170 5 10 [...].73.221.[...] C240AD4470664F0BB022C0E8002B92F0
    2026-11-03T14:48:44 8250117 5 10 [...].84.28.[...] C252C45FA7C94DABB5F4B204CC8D1EE2
    2026-11-01T18:19:17 8250018 4 10 [...].190.40.[...] C253B070BE1B4CFCA039DB35EFF50172
    2026-10-31T13:57:26 8250110 4 10 [...].86.136.[...] C253E14EE53C4D87A19E062974C12E43
    2026-10-27T14:48:10 8240150 4 10 [...].237.205.[...] C26EFE2DC37F4A319661ACC97BEC505D
    2026-10-23T01:41:16 8250032 3 10 [...].74.46.[...] C2D3BCCBAC2F471F874AB9E4E05F9370
    2026-11-09T13:31:45 8250055 5 10 [...].86.62.[...] C2DC65A27478497BA6A91D8FD63AD864
    2026-10-11T23:19:37 8250309 9 7 [...].65.157.[...] C2E1F9EC6E794808B08DF1A464607132
    2026-11-09T23:58:06 8250028 16 10 [...].84.206.[...] C3557C4BD44D4070B4C936AAF88C76F5
    2026-10-16T13:18:19 8240137 5 10 [...].71.244.[...] C38563D42D104B35BF678CCA880CE2E6
    2026-11-07T17:55:32 8250133 5 10 [...].92.240.[...] C3A556AA089D41DDA733F7059E7CC932
    2026-10-18T21:27:31 8250011 2 10 [...].74.92.[...] C3F2BC15D88B403DB63D85B54F823EBB
    2026-11-10T13:44:44 8250004 6 10 [...].203.40.[...] C44317AB84E74030869A8C6392033021
    2026-10-17T14:29:42 8250052 4 2 [...].168.1.[...] C450E6D89AFE4BB095874EC53167DC23
    2026-10-26T17:57:26 8250102 4 10 [...].210.67.[...] C4B09A6A64164F3C9425029682CD1333
    2026-11-10T14:07:34 8250082 5 10 [...].242.91.[...] C4F0CCD8715149508EF18984228904B5
    2026-10-25T21:44:56 8250019 3 10 [...].214.209.[...] C51FBD036CBB4143B1E1962956DB8EA2
    2026-10-24T14:31:00 8250127 3 10 [...].70.44.[...] C5702A28308041DFA860AE7E0AE094BF
    2026-11-11T14:36:32 8240226 16 10 [...].138.152.[...] C597A02A3AAC45BFB43DD6F952B15FA0
    2026-11-10T20:23:12 8250229 16 10 [...].86.155.[...] C625BCE3CC7E4605A6AF4CE7C39FDDEE
    2026-11-03T02:09:12 8190332 8 10 [...].129.191.[...] C63ABD0113934F628A228494E940B6A7
    2026-10-16T11:53:04 8250143 2 10 [...].251.255.[...] C67434468C574029A5E4DF6C147BCF03
    2026-10-08T17:29:30 8250025 2 10 [...].92.14.[...] C6CEF6A23B0D4B73936B4B2572F4F7EF
    2026-10-24T17:17:15 8250018 3 10 [...].251.255.[...] C708B5200BE94A8B945AC06EA7B5757E
    2026-10-08T19:23:50 8250148 1 10 [...].87.16.[...] C7BC692986BE4BE8895804185977ADBA
    2026-10-06T01:43:36 8240150 1 9 [...].255.26.[...] C7C73E1227B243D1B13E898D4145F85E
    2026-10-20T22:28:11 8250092 3 10 [...].242.136.[...] C7E7284BB410453DB3D3EF7EB599198F
    2026-10-29T17:06:27 8250156 4 10 [...].255.0.[...] C808A12A7DBE4ECC8DC84BE0FD2B0297
    2026-10-21T01:24:43 8250067 3 10 [...].59.189.[...] C8455692AA0F473D80688952F8C1D626
    2026-10-18T02:30:54 8230240 2 10 [...].242.228.[...] C84BC7D1E84742BC9C852B63D785F618
    2026-10-22T16:54:56 8250279 3 10 [...].26.12.[...] C86088AF72C5409E9DFDA6626A2EF6BA
    2026-11-03T02:08:04 8190332 7 10 [...].129.191.[...] C87152382F7D439A810FD96B8FC9CD0C
    2026-10-16T12:22:00 8230051 1 10 [...].178.136.[...] C8CF3BED301D4E10B9EF455B4994BC01
    2026-10-19T23:45:35 8250003 4 10 [...].55.111.[...] C99D9FA83D294A4B8850D311E5B4675D
    2026-10-25T19:18:51 8250105 3 10 [...].74.45.[...] C9B64E897E7943F0BA663880C8598824
    2026-10-24T20:43:48 8250251 3 10 [...].203.181.[...] C9D6D3DDCF804609BA26FD6E295A3122
    2026-10-30T14:16:44 8230051 8 10 [...].203.192.[...] CA23E5D130894960AEFA6F4FE395DD97
    2026-10-31T00:37:55 8210215 4 10 [...].86.155.[...] CA371881D97C4268B0E6200D89FE2085
    2026-10-21T17:28:57 8250302 3 10 [...].210.243.[...] CAADC30107204AC599D03A6828AB5D1C
    2026-10-21T16:32:42 8250145 1 10 [...].26.38.[...] CABDFE91353A4601B2D1D1BFE375EF56
    2026-11-10T19:23:52 8250229 6 10 [...].86.155.[...] CAED71C54F7B4C239A2F0EDBA53189F8
    2026-11-11T20:20:40 8250023 6 10 [...].64.203.[...] CAEE6277804D41F3B6659D2158138224
    2026-11-06T20:03:35 8240074 5 10 [...].84.0.[...] CB06A4AE57A3451194F09E781D2BE932
    2026-11-03T19:13:04 8250143 5 10 [...].217.168.[...] CB072650BC764F38B881AF23763F9D42
    2026-11-02T18:05:21 8210215 5 10 [...].86.155.[...] CB8B031609894753AF084C07452FA5E4
    2026-10-28T23:49:55 8250049 4 10 [...].86.89.[...] CB980EE5AF5140DB8A83934582EE22A0
    2026-10-27T18:21:52 8250157 4 10 [...].130.119.[...] CBB00FE5E27E4CC09B90AF74764B1758
    2026-10-31T16:06:55 8250245 4 10 [...].138.131.[...] CBDDDEFBD3B5405FBD46AB4DD4FBBD21
    2026-11-07T21:25:03 8250091 5 10 [...].74.220.[...] CC6544FBA16A422996666B9547940D94
    2026-11-10T17:20:02 8240315 6 10 [...].74.57.[...] CCA7A516549E44778ECFA6993583655A
    2026-10-06T15:46:20 8250137 1 10 [...].86.154.[...] CCADEAF4F72941B6A1530E28AD557B3C
    2026-11-07T12:42:44 8250277 5 10 [...].217.170.[...] CCC637C5E4FF4DFBAA9907E02FB1814A
    2026-10-06T22:47:14 8250043 1 10 [...].74.212.[...] CCE56BD95FBA46E39191DE85566A57E8
    2026-10-14T20:16:37 8250110 2 10 [...].86.136.[...] CD1F8C0C28EB4464AE19943EF455B038
    2026-10-31T12:41:41 8250292 4 10 [...].66.117.[...] CD4FBE417A3847BC819140300FCB1ECA
    2026-10-28T12:15:54 8240054 4 7 [...].86.154.[...] CD6352ACA790448DBD70C0A80A85E6E7
    2026-10-22T16:48:45 8250287 2 9 [...].26.42.[...] CD738F20899242A8873300E7EB68AC14
    2026-10-11T19:29:46 8250057 1 5 [...].86.152.[...] CDCFEC70943C4D0CA92AC6E91C309470
    2026-10-14T08:45:42 8250047 2 10 [...].242.229.[...] CDD3AE96C5DA4102B1FC8EA6A5CF7E7A
    2026-10-24T21:48:26 8250125 3 10 [...].6.192.[...] CDD852D827F24C3489A163E4C305FC7D
    2026-11-09T13:51:04 8250021 6 10 [...].1.78.[...] CDFBAB4B3EF04CEBA2B48040E81342D0
    2026-10-05T23:12:43 0 1 3 [...].86.79.[...] CEEDF73C7CBA46168E7EA9AD99E8A3AB
    2026-11-08T23:34:43 8250123 5 10 [...].65.88.[...] CFAD5DCA450C4AAF9D7F703F4D6278C3
    2026-10-29T19:03:13 8250150 5 10 [...].55.78.[...] CFCE1A49A5584A3092AE46F6F40C2DFE
    2026-10-08T21:32:10 8190306 1 8 [...].255.21.[...] CFD5D83D0B07401482DE8148FD3A33C4
    2026-10-13T11:22:04 8220060 3 10 [...].217.178.[...] CFDFC40614F040C1BB92D34FA215ABDD
    2026-11-07T22:39:58 8250101 5 10 [...].87.77.[...] D01C02626406445288A5D9647E59E431
    2026-10-21T21:05:51 8220060 13 10 [...].217.178.[...] D026EA49C049487A98EED01EFC96AF76
    2026-11-05T02:08:17 8190332 8 10 [...].129.191.[...] D04541711D81424D8A0690602BBAE138
    2026-10-11T13:10:04 8250267 1 10 [...].38.153.[...] D06BCBC27BF449D995DB71298F7540B5
    2026-10-14T16:50:16 8250065 2 10 [...].69.6.[...] D08E137DABF74B389DCE43D84D0DD53A
    2026-11-01T15:58:25 8250073 4 10 [...].59.168.[...] D09390E46EEF44F88BFC1690564B343A
    2026-11-01T23:37:37 8230141 4 10 [...].86.220.[...] D0BB633C8701478C90A5B025C35D0DDF
    2026-10-23T00:13:45 8250296 3 10 [...].242.95.[...] D117CB0E23C1495E8CDB9721CE744563
    2026-10-18T15:30:20 8250087 2 10 [...].242.90.[...] D1DF568DAFEE46D69A6B203A5193BD9A
    2026-10-31T16:41:15 8250060 4 10 [...].16.172.[...] D1E72CC58474416EA57DEBB68181D5E1
    2026-11-09T19:52:50 8240315 4 10 [...].74.46.[...] D21A8FB41D8E4098BFA8D0B6922EDBE9
    2026-11-01T20:17:36 8250016 4 10 [...].178.152.[...] D305127617744DB4A5350A58A2DE25A2
    2026-10-30T14:26:04 8250230 4 10 [...].237.203.[...] D3154A9D15314A69BBC27EDF37E63588
    2026-10-21T20:08:59 8240148 10 8 [...].73.217.[...] D31FB82CD9CC43C3A04D072D12B1E15E
    2026-10-16T13:58:00 8240137 2 10 [...].71.244.[...] D326B7558FFF4ED09D1696B525C6FAC3
    2026-10-18T22:55:12 8250115 2 10 [...].130.136.[...] D346E0AE7EB14A74A92CA1E94A0F6056
    2026-11-11T17:27:48 8250143 6 10 [...].251.255.[...] D354FB6DDB4D4DA2AA0AB3FE6D21C784
    2026-10-20T19:03:48 8250091 3 10 [...].74.220.[...] D37E47A0B3D94E2F855138FB8074C3A2
    2026-10-07T20:38:54 8250244 1 10 [...].86.98.[...] D3FF283DD7C441BB833E8AA3E697B4D2
    2026-10-30T23:49:36 8210215 2 10 [...].86.155.[...] D4052D3B2A2844ACB9D5244649212D7E
    2026-10-18T16:37:24 8230150 2 10 [...].66.41.[...] D495C25FDBFF4C2E96B4AF1A1FB5F4E7
    2026-10-11T16:31:13 8230141 1 10 [...].86.220.[...] D4ADBD7BD9FF442C862FE6ADC9232CD9
    2026-10-26T17:29:36 8250053 5 10 [...].26.18.[...] D4E2A7250C4943BABF037ACFA7CBC546
    2026-11-03T22:25:16 8250094 5 10 [...].86.113.[...] D4E903058BAD431FA9AB3199A0433293
    2026-11-07T15:02:21 8250066 5 10 [...].65.157.[...] D54149FAAB704B8FBA39F85961FACAFD
    2026-11-11T00:01:20 8250290 6 10 [...].86.44.[...] D5510E6E5BA8497FB198D6D8CF476F3A
    2026-10-25T03:32:19 8250075 3 10 [...].86.131.[...] D5562468D5164FD880D8A482C954F445
    2026-10-27T11:59:03 8230051 2 10 [...].178.142.[...] D581A874FA73467ABA0CD4BC64E74298
    2026-10-14T21:28:01 8250054 2 10 [...].242.88.[...] D58690706E47424D8B2C1B5F76713107
    2026-10-28T09:00:12 8250092 4 10 [...].242.136.[...] D58ED91948A7496C81CF452A9B10E099
    2026-10-12T00:03:38 819318 1 7 [...].66.118.[...] D5C3DECE7F7440B7A70AC20787399582
    2026-11-01T23:58:03 8250084 4 10 [...].75.15.[...] D5C73777AA3643F7BD2DCE1A067AEAE2
    2026-10-17T11:17:07 8230051 2 10 [...].178.180.[...] D5CCC7FC579F4AF3B28AFC97CF79312B
    2026-10-12T18:19:02 8250160 1 4 [...].140.52.[...] D5F85A8FD3AC497695A5DA0EF7447277
    2026-10-09T12:57:15 8250239 1 10 [...].138.195.[...] D63771BBC8EC49D78604A0D1D647CFB6
    2026-11-08T22:59:14 8230141 5 10 [...].86.220.[...] D652E3AFCE05420AB493F37536215C71
    2026-10-25T22:55:46 8190343 10 10 [...].6.160.[...] D6CD679589614BCAB7526644B9C49276
    2026-11-03T00:05:11 8230062 5 10 [...].168.2.[...] D71B6E1D16054710BE96AC68B7FA6AB0
    2026-10-16T01:51:26 8250171 2 10 [...].84.130.[...] D71CD3083EF14ACB914F687440F001DE
    2026-10-09T20:32:56 8240270 1 10 [...].86.31.[...] D78B2DAC08A64ADCAE7ADDFCAB7930DC
    2026-10-06T18:35:39 8250235 1 9 [...].140.73.[...] D792B6F467BA4BD6A0028108B33DC770
    2026-10-08T21:15:08 8250028 2 10 [...].84.206.[...] D7B9A90322684B2097FB50C0B6DD1C74
    2026-10-29T23:55:23 8250149 4 10 [...].54.193.[...] D7E2EF50A2684C2FBE59AF146B387427
    2026-10-20T23:17:45 8250065 3 10 [...].69.6.[...] D7EE17EA54224F0BB3F8B67A082868AE
    2026-10-07T11:55:49 8250261 1 10 [...].203.149.[...] D7FE433441D84CD7A4CBBF7D89274D27
    2026-10-25T14:07:05 8250057 3 10 [...].86.152.[...] D815D6F9852B4957A5C09CB4C44F2B91
    2026-10-22T20:54:36 8250044 3 10 [...].154.44.[...] D853B0CE312B4FB28D5F915CF40AF6E5
    2026-10-08T11:49:34 8250282 1 10 [...].6.195.[...] D85D2BB127B744008558B504747570DE
    2026-10-16T13:45:38 8240137 1 8 [...].71.244.[...] D861FCC6968D466EAB34D2A49A6C0656
    2026-10-23T20:04:03 8250238 3 10 [...].140.101.[...] D86810135A35495FAF038A3E4E6E6304
    2026-10-13T17:15:45 8250129 3 10 [...].86.113.[...] D89C744ABF2F4FE08471374025DEABB5
    2026-10-09T15:04:11 8250017 1 10 [...].65.46.[...] D8AC1DF0805A40059AEC52474D3A4814
    2026-10-30T17:46:46 8240236 4 10 [...].26.11.[...] D8EAE180AC93497FB0C1DEA69F7FCC5F
    2026-11-01T23:55:06 8250108 4 10 [...].217.174.[...] D90F1875F9F240DE99A0D995C2CEBD20
    2026-10-14T13:51:53 8200100 1 10 [...].217.174.[...] D91117E3F9B04C0A894F59AF4B2E1C00
    2026-11-03T22:49:01 8250124 5 10 [...].75.33.[...] D99D8804C0FC454C9ED17B57FCFACC7A
    2026-10-23T19:31:09 8240236 3 10 [...].66.41.[...] D9EC0FDD9C0A453EA75165919A8F9FF6
    2026-10-09T22:52:10 8250102 1 10 [...].74.107.[...] D9F91D9562854CD1807B8CBD72C5063E
    2026-10-18T21:21:55 8250106 2 10 [...].217.168.[...] DA0D124B303349F99DFC19DD2D2F69F8
    2026-10-21T12:11:07 8250147 3 10 [...].107.171.[...] DAED6A7FE1074C6BB947D7A5DB4433A9
    2026-11-02T16:53:32 8250021 5 10 [...].194.184.[...] DB39A1CF366844EC9E2CB0D64FCA8E9B
    2026-11-06T01:12:21 8230241 5 10 [...].242.91.[...] DB3B203F4D4C4D59AE223EAB7FEF4600
    2026-10-13T15:13:47 8220060 6 10 [...].217.178.[...] DB89FACD960742DBBED6B8A909874133
    2026-10-17T02:51:05 8250099 2 10 [...].70.130.[...] DBB773A23976442D9114475F679625B1
    2026-11-07T12:37:41 8250125 5 10 [...].242.120.[...] DBD95D13E8FF4DE7BCC248ECB040DD24
    2026-10-25T14:16:37 8250148 3 10 [...].75.77.[...] DC017AC286D24B8E8AAA6445A1E85086
    2026-10-10T19:22:31 8250104 1 10 [...].66.41.[...] DC272F2824C44991BA67499DC09427BE
    2026-11-09T20:51:03 8240315 5 8 [...].74.46.[...] DC9E5303432B454EBEC1683A1C35AFB1
    2026-11-10T19:17:42 8240315 8 10 [...].74.57.[...] DCAF11EEE12F4194A5D3AD064314BC98
    2026-10-25T02:24:45 8250084 3 10 [...].107.20.[...] DD1B6EAC22C149878FF6865E07E7E85B
    2026-10-24T18:59:47 8250054 3 10 [...].242.186.[...] DD33F6B6719F4D83A6E0E2F28A5553A3
    2026-10-11T18:14:43 8250028 4 10 [...].84.206.[...] DD69E304E8164AD8BE83BED3A3984BA4
    2026-10-11T20:23:57 8250264 1 10 [...].203.84.[...] DDA0650FF2D943EE95DFE5C6FCA133F6
    2026-11-08T13:46:29 8250128 6 10 [...].140.93.[...] DDC65016C1684AD4B2602056DFC95712
    2026-11-09T19:14:39 824031 2 10 [...].74.46.[...] DDE0C17E88EE4E5480885E1517164C06
    2026-10-13T10:55:55 8240236 2 10 [...].26.8.[...] DE594CB7513040BEBC0FBB335DF11D8F
    2026-10-24T13:29:36 8250033 3 10 [...].74.34.[...] DE5B22C36B1D4DEAADD3939A165E0B6D
    2026-11-01T13:21:57 8250027 4 10 [...].67.74.[...] DE9375E7233546F3AFB4D0EFB76BDA9C
    2026-10-12T21:16:55 8250044 2 10 [...].154.44.[...] DF70E98AEBBF4FDF844D838F630CF573
    2026-11-03T11:26:49 8240064 5 10 [...].251.16.[...] E026073C43144B61870678032E347AB4
    2026-11-10T15:12:36 8250088 6 10 [...].86.26.[...] E061FCFB0A17439188A5FA7B16A4B17C
    2026-10-08T18:36:21 8250159 1 10 [...].107.34.[...] E0641EABF0084E698C47EE36961CF7F7
    2026-11-08T18:36:51 8250267 5 10 [...].38.153.[...] E088F72C46B340039557B09E59C734A7
    2026-11-11T13:28:24 8250231 6 10 [...].167.78.[...] E0B0271A93DF41EDBA4B1AA66188D49E
    2026-10-17T18:35:22 8250162 2 10 [...].228.63.[...] E0BD8C3EC4B945D78CFC37C99553FB92
    2026-10-27T19:16:27 8250023 4 10 [...].210.71.[...] E15B8EC341C84A9A903E4CBB0EF6E1F0
    2026-10-29T23:11:35 8250026 4 10 [...].49.75.[...] E1B93C4316394B3492EE77B03443DEFC
    2026-10-13T20:08:09 8250128 5 10 [...].140.28.[...] E1C4D355ED524CD7ADEDB31545D398BC
    2026-11-08T22:53:09 8190318 6 10 [...].66.118.[...] E1D69F4DD3ED4FB79687DD57E13980DF
    2026-10-26T02:06:31 8230060 6 10 [...].225.145.[...] E1F526C9F73E45278A673F482A0640E2
    2026-10-13T16:20:26 8250126 2 10 [...].217.169.[...] E2253581A8F84E8782148EBB30EA53DB
    2026-11-08T18:58:25 8220040 5 10 [...].202.40.[...] E246638EDEF646F29A634EE9E71C3FDD
    2026-10-17T14:08:17 8250052 3 10 [...].168.1.[...] E2CB08AFFCF64AB6B413BFB33206E0F0
    2026-10-09T18:53:53 8250162 1 10 [...].228.61.[...] E30ACDD2D8C247F8B3642EE08E6ACA19
    2026-10-11T20:03:22 8240045 1 10 [...].55.140.[...] E319BC47D96F42C987E3F5F36260063D
    2026-11-05T20:19:23 8250172 5 8 [...].84.181.[...] E35EEA552C7646339FBB49513C8634B6
    2026-11-03T17:30:51 8250005 5 10 [...].217.169.[...] E3CE425F0E3246E5A490BB333BF17835
    2026-10-11T14:14:11 8250230 1 5 [...].166.21.[...] E3E9A3298C704094BC63B931F0CDF9B9
    2026-11-01T17:29:43 8250059 4 10 [...].202.30.[...] E3F253D986FE46899D5D2B42C9620AAD
    2026-10-24T11:43:44 8250263 3 10 [...].217.162.[...] E432A13A06D74088AA75274A35335764
    2026-11-05T02:06:40 8190332 7 10 [...].129.191.[...] E442C0EBEBB04CDAA6DE3C8D32EC1A65
    2026-10-31T20:32:56 8250075 4 10 [...].86.131.[...] E44DBB975CCA4EFEB917AC3118B8C619
    2026-10-25T14:00:40 8250249 3 10 [...].71.237.[...] E452A2D0519E4999A08AEE494D8B78F2
    2026-10-13T19:50:39 8250147 2 10 [...].58.141.[...] E4CEF5B010C24ECDA658CC6805E0148C
    2026-11-03T18:18:36 8250009 5 10 [...].242.185.[...] E4CF8D6967E14541B277B4A454CCF240
    2026-10-20T20:19:37 8250088 3 10 [...].86.26.[...] E524DA5F772943C892670EF102339BDC
    2026-10-22T16:15:58 8250154 3 10 [...].74.32.[...] E55D7933F62C44839D1A35BAFA97865B
    2026-10-16T12:39:27 8230051 2 10 [...].178.136.[...] E564D5C5B63A449C90DB151807ABD22B
    2026-10-21T18:28:46 8240137 3 10 [...].84.200.[...] E5B4D36A6A454C639EB9DD63806CFDA8
    2026-11-08T18:21:43 8240061 5 10 [...].242.229.[...] E5C1210ADE86477A846A97B625A7A04C
    2026-10-28T23:58:41 8250071 4 10 [...].73.238.[...] E5EA715259F247A290BCC7C769582AA6
    2026-10-14T18:41:37 8250040 2 10 [...].69.54.[...] E5FCF01672F24CC2BD1D7015FBCB77FC
    2026-11-01T15:17:19 8250123 4 10 [...].65.88.[...] E6321F1726FA4115B97EFC41DD56F070
    2026-10-29T18:35:43 8250159 4 10 [...].107.34.[...] E653049AD24347369D823DA02E4383AE
    2026-10-24T13:22:54 8250059 3 10 [...].232.187.[...] E699B604794049A28782822E906BCE30
    2026-11-03T02:21:17 8190332 11 10 [...].129.191.[...] E6C0A031BC134387B3BD4ED763C01FA1
    2026-10-13T21:08:38 8250082 2 10 [...].242.94.[...] E6D2FA695DCF4291B11A114C8CF14098
    2026-10-25T19:58:32 8250067 4 10 [...].59.189.[...] E6D9D150383F42E595AAC2C4AB1A7E17
    2026-10-13T20:27:28 8250261 2 9 [...].203.142.[...] E6F435FAE06E440CB71F8E9E72BFB136
    2026-10-09T12:42:16 8250128 2 10 [...].242.231.[...] E6FFEAF569A04EF1B94B7C66F065D717
    2026-10-17T11:26:32 8250032 1 10 [...].74.60.[...] E73FCD05943948DBA5ACF7470FB6495F
    2026-10-10T17:14:23 8250133 1 10 [...].49.133.[...] E7647175F77140688E4D252BBF4009BF
    2026-10-30T14:14:13 8230051 10 10 [...].203.192.[...] E7873CFA8FA44346B8E384C717F176A7
    2026-10-06T19:10:08 8250120 2 10 [...].219.254.[...] E7CEB6BCB7504C7596C047DDF71250BE
    2026-10-27T20:41:02 8250296 4 9 [...].242.95.[...] E87BC4BAEA4A48428288F3B4ADA8058B
    2026-10-19T14:07:54 8250078 2 10 [...].74.56.[...] E8930A0E5FBB4224A11ACCCEB0AD1D9C
    2026-10-14T10:06:08 8250235 2 6 [...].140.73.[...] E8A2671DC6744C7E8F9DFC03160E2B0F
    2026-11-07T12:05:42 8250301 5 10 [...].84.14.[...] E8CC6BD091C74591BA2F09182C0E1A9C
    2026-11-08T11:17:37 8250048 5 10 [...].242.186.[...] E9187806C8FB4B38B21212E3023BDAF7
    2026-11-01T14:41:30 8250057 4 10 [...].86.152.[...] E964F27AE15A4EF89FBADFD50A391E6E
    2026-11-10T11:37:22 8250129 16 10 [...].86.113.[...] E9875D43F0984B41ABD21BB10A880445
    2026-10-22T18:59:30 8250142 3 10 [...].203.221.[...] E9BA95B77D4844ED81CF8B3914BE7489
    2026-11-09T19:26:28 8250003 6 10 [...].26.30.[...] E9F860DA58554A088B9D13ECAE04FBA8
    2026-11-08T22:04:45 8100069 5 10 [...].247.46.[...] EA2C19E459444CC690D7038AD2653D5E
    2026-10-25T13:06:29 8250249 3 10 [...].203.221.[...] EA5DE50A6C0C4589A9CC0B2C0D0FB0D0
    2026-11-02T18:16:42 8250159 5 10 [...].107.34.[...] EA685E83ED1441F584B8198507FCB811
    2026-10-16T14:59:08 8250016 2 10 [...].178.129.[...] EA6CA1B8373443E8918446C56EE30517
    2026-10-09T15:55:12 8250155 1 10 [...].4.202.[...] EAD54B0E560348689B8C17694CEC0B00
    2026-11-11T09:51:58 8230242 6 10 [...].86.149.[...] EADC178672FE4277B4F0836746FD9D98
    2026-10-13T14:25:42 8250026 2 10 [...].49.75.[...] EB184CA3519F458BB78382AACAB5CE18
    2026-10-14T22:09:20 8250092 2 10 [...].242.228.[...] EB3F154B8A3042A386F0D1BA77C30246
    2026-11-08T22:10:34 8190318 5 8 [...].66.118.[...] EB4CBBA278BA4E1392380208653F67AA
    2026-10-19T21:15:29 8250041 1 10 [...].67.236.[...] EB75CA6935424DF29DDD5ECB42613A2A
    2026-10-19T10:29:41 8250057 2 10 [...].86.152.[...] EB8103252C084AFBB9CA2306F8DBE6C8
    2026-11-01T11:48:08 8250138 4 10 [...].49.234.[...] EBBE5286277C4E079293D818077D64D3
    2026-10-07T20:59:04 8250044 1 10 [...].154.45.[...] EBFD6EC8C6944101A4C9253406D377A4
    2026-10-18T12:40:28 8240148 2 10 [...].73.217.[...] EBFE914D20134424B4E18C1521EE5059
    2026-10-11T15:35:21 8250242 1 8 [...].73.239.[...] EBFFE9AE5AB84810A086176AADDF0C12
    2026-10-27T19:12:27 8250303 4 10 [...].66.16.[...] EC4B644705C24FB89C6A12193BA7544F
    2026-10-10T17:10:05 8230222 1 10 [...].86.11.[...] EC4C6C93CA0741E5ACDC92B4DA126926
    2026-10-20T21:43:24 8250053 3 10 [...].203.227.[...] EC79BC7895CD4B29ACDD6A5662638067
    2026-11-01T22:57:26 8250151 4 10 [...].73.39.[...] EDC5C144E2584983A26E8F4A76965482
    2026-10-21T14:03:27 8250063 3 10 [...].168.2.[...] EDDB11D3FB8B409BAFE8A210F6296D31
    2026-10-26T17:19:52 8250145 3 10 [...].26.38.[...] EE007934F1894D57910D1244BDAC0840
    2026-11-06T14:24:47 8250013 5 10 [...].26.8.[...] EE45D446654E4390926943F5370D3974
    2026-10-24T17:49:54 8190343 2 10 [...].6.160.[...] EE736CDE4BC74C1FA5D71DD1DF9B5F49
    2026-10-14T15:29:33 8250086 2 10 [...].130.152.[...] EF0A72BD2FC346319D9C0D35C3124E54
    2026-10-16T17:33:53 8240093 6 10 [...].168.2.[...] EF29FC70020A4AD881510185AB347926
    2026-11-05T23:44:20 8250236 5 10 [...].255.0.[...] EF3ED57C5B404231B1E0AE7CCE695286
    2026-11-03T11:32:04 8250235 5 7 [...].140.79.[...] EF787A2AD0E94D399D2D76205F91201F
    2026-10-17T14:22:25 8240148 6 10 [...].73.217.[...] EF8D891A34F94C56ADEE37B579892C4F
    2026-11-03T18:14:26 8250238 5 10 [...].140.101.[...] EF9F71A24DC44DB59334BFC859B3C609
    2026-10-26T14:53:30 8190332 1 10 [...].73.240.[...] EFCBAFD938CB4194A8DF8D3E19FFA4D0
    2026-10-17T21:24:43 8250249 2 10 [...].71.237.[...] EFFB286024E743E8BF97CAC003BB5854
    2026-11-11T14:18:35 8250040 6 10 [...].69.54.[...] F02DC0E52C054754B13A765E66951ED1
    2026-10-17T10:36:39 8230051 2 10 [...].178.180.[...] F02E7176CA3C4017B481CA3783E50E19
    2026-10-25T01:23:44 8250145 2 10 [...].140.100.[...] F038E53593774EEF84ABB4D838420035
    2026-10-09T10:52:59 8240064 1 5 [...].251.16.[...] F07A0C5D0C6F49238748898D7D2EF62B
    2026-10-25T17:51:44 8230060 1 10 [...].225.135.[...] F0B11A32628C4B4B9993BBCC996B9DC4
    2026-10-15T14:19:13 8250309 13 10 [...].65.157.[...] F0F8C640FDFF438DB6278558FFECEE3A
    2026-10-11T13:30:27 8250296 1 10 [...].242.187.[...] F1664C02ACA8403BBA157983532D7306
    2026-10-24T20:26:19 8250168 3 10 [...].1.128.[...] F191F942D3934263BCAC26944112487D
    2026-10-16T13:21:05 8210093 4 10 [...].166.173.[...] F2108678BBFB4B6EB7AE580D891226D0
    2026-11-01T17:20:06 8230046 4 10 [...].75.98.[...] F215F34F2D234396B249632D68B055EE
    2026-10-14T01:45:07 8240266 2 10 [...].130.77.[...] F2265C9B66E848E9B91CFB4D5DCFC082
    2026-11-05T12:18:10 8250006 5 8 [...].75.188.[...] F23303791FA9467683C5CFA1B6E65014
    2026-10-11T18:05:36 8250243 1 10 [...].66.170.[...] F2A3B19243AB4FA0B40623D5B9CDBD5E
    2026-10-14T15:06:53 8240266 2 10 [...].152.235.[...] F2B6A0D8932C45D1AFD15B66B21D2231
    2026-11-10T14:34:29 8250230 6 10 [...].167.61.[...] F4011A400B314398B965C93250ABB737
    2026-11-03T12:29:13 8250230 5 10 [...].38.105.[...] F46409DEABF34021A41F10823864AA6C
    2026-10-27T11:35:56 8250239 4 10 [...].74.9.[...] F46BAA1E7C3A442A9DA2922664D1B23D
    2026-10-16T13:23:40 8250257 2 10 [...].86.189.[...] F496B625F7234DF08C562C1BD889A917
    2026-10-26T21:30:18 8240266 4 10 [...].130.77.[...] F4DE236518384250882251A70AA00138
    2026-10-29T00:50:01 8250063 4 10 [...].168.2.[...] F504F5416A4B42D4A29DF741386B2A42
    2026-11-07T23:21:25 8230150 5 10 [...].66.41.[...] F51DC5501A324DA4B0ADF82C948C3D28
    2026-10-20T16:13:09 8210105 3 10 [...].87.55.[...] F52E3358A1E746D0B53C558F08C35EB1
    2026-10-19T22:06:07 8250137 3 10 [...].86.154.[...] F53A268AFB9F4EDE8276DE4EE01D4B22
    2026-10-27T21:24:25 8250142 5 10 [...].203.167.[...] F5DA57CB5DB04DABBAEBD2B6B7BB7639
    2026-10-27T22:23:51 8250229 4 10 [...].86.155.[...] F5F6DC3A694A42C68D2057BA3EC355A6
    2026-10-25T18:55:47 8250265 3 10 [...].217.171.[...] F6AA990AF1CE47A98E7875C50E56E7B7
    2026-11-09T19:42:45 8250162 16 10 [...].246.61.[...] F6D163F8F4BA4047915F6682333ADBBB
    2026-11-05T19:54:46 8250008 1 10 [...].228.63.[...] F6D1DE35EEA5481BAFD1D5F889D88BB4
    2026-10-06T00:12:52 8250120 1 10 [...].210.109.[...] F6DF24AAFBBE4EAD98ACDB15F0772230
    2026-10-25T19:39:34 8230060 4 10 [...].28.80.[...] F6FF5AEDAAB4404A9C0F2A5AAF5470A8
    2026-11-07T18:19:55 8250090 5 10 [...].217.174.[...] F7AC43A7B4C240A7956B2B9DEDB0406F
    2026-10-25T08:42:44 8250005 3 10 [...].167.141.[...] F7B796E381FF40B0AA1B05A65C2E1FBA
    2026-11-03T21:11:53 8250044 5 10 [...].154.44.[...] F7BBF34294A94312BB03AD8F3B4317E3
    2026-10-08T21:54:33 8250165 1 10 [...].166.113.[...] F861E6FB2B35475681E22EA0EE3FA3AC
    2026-10-25T14:18:30 8250073 3 10 [...].92.178.[...] F8675AE5A3844272A25C69A10D7AD06D
    2026-10-13T16:28:32 8250303 2 10 [...].129.228.[...] F86EE1B03CD3411CBC2F842B85046462
    2026-11-07T15:32:36 8190306 5 10 [...].92.144.[...] F894EFC208054B4CA4DE44EF5AA5EEA9
    2026-10-25T20:17:11 8250150 3 10 [...].55.78.[...] F8E834A123624F29BA798AA19BF3F3B1
    2026-11-08T21:37:59 8250047 5 10 [...].219.245.[...] F8FC80B61B2A4C0E95434D52E06D14F7
    2026-10-09T17:13:03 8250098 1 10 [...].217.161.[...] F92DE6851FAF4F10895D7D4A69C28C35
    2026-10-13T18:11:20 8220060 9 8 [...].217.178.[...] F95780A170AC42D9A201543FDAB42D94
    2026-11-07T20:57:57 8250150 6 10 [...].55.78.[...] F986CAD676AB46FB83B3E6D994D39F71
    2026-11-01T12:27:41 8240062 4 10 [...].72.214.[...] FA0173F2B4814A50A8D4A6BF2AD00D8D
    2026-10-16T15:23:00 8250124 1 10 [...].74.61.[...] FAF0354E0CE74E28AA542566D69470D1
    2026-10-31T19:25:56 8250036 4 10 [...].70.246.[...] FB4669EE4F314FECA951884D82121CB6
    2026-10-31T18:21:55 8250165 4 10 [...].55.195.[...] FB5D3CEC823E499D8D2731A253DAFC82
    2026-10-06T16:08:12 999 2 8 [...].86.153.[...] FB725EFF54B34BDEB91DCE48F0FF8C9B
    2026-10-26T21:29:37 8250162 4 10 [...].246.61.[...] FBAB0E1F05814F708203E7E1E8B5168E
    2026-10-12T18:33:12 8250113 2 10 [...].140.52.[...] FBD1948C9C934FC29A72A4CBD605A01F
    2026-11-08T23:16:10 8230046 5 10 [...].197.78.[...] FC1CF96742D44F72876559F1B2014D44
    2026-11-05T02:02:27 8190332 5 10 [...].129.191.[...] FC4DC3172C964C44B79DEFDDF145BDC7
    2026-10-18T15:01:17 8250113 3 10 [...].140.52.[...] FCCDFAB0D3324103BD0F714841BEEEB5
    2026-10-08T11:04:35 8250066 1 10 [...].65.157.[...] FCFA1204FAFC45B79407D2B545DE7B77
    2026-10-16T13:20:35 8250299 2 10 [...].74.212.[...] FD44E0E558404282B4299BB9F8C83577
    2026-10-24T18:13:20 8190343 3 10 [...].6.160.[...] FD5D373605F448988F4EFC770209BDC5
    2026-11-08T18:11:32 8250146 5 10 [...].86.96.[...] FD5DC65B969548F8B0080E03CBD5BF4E
    2026-10-31T20:14:33 8250001 4 10 [...].74.61.[...] FD71B498E8BC4FEE865DE021FD5C0A05
    2026-10-21T11:15:22 8250299 3 10 [...].74.212.[...] FD72C39E494944BB828FF88F44EB311E
    2026-10-20T13:26:53 8250097 3 10 [...].84.25.[...] FD88DDB943F0464B9453F4E0B969DD7A
    2026-10-26T11:48:05 8250111 4 10 [...].86.153.[...] FD8F9431C8654068B6D766138725E73F
    2026-10-11T22:16:04 8250060 1 10 [...].16.216.[...] FDA3FF467862425DBEBEF7A1EFB8F4C4
    2026-10-24T12:45:32 8250089 3 10 [...].66.41.[...] FDF21A153E2F436C8DBD3C48D8078022
    2026-10-10T19:39:48 8250107 1 10 [...].217.174.[...] FDF2482792544BCE931B7A23E40ADEF9
    2026-11-03T02:22:15 8190332 12 10 [...].129.191.[...] FE435E35BB8A432E97F37DB483690E2B
    2026-10-20T17:34:11 8250144 3 10 [...].133.195.[...] FE7E45C0FEB84A0E86E1E424301D804B
    2026-10-21T11:54:51 8250040 3 10 [...].69.54.[...] FECC0359AE054AD0AC70AABF15272AE6
    2026-11-10T16:14:20 8250071 6 10 [...].73.236.[...] FF1355B5EF264E469FBBEDC858DD590B
    2026-11-10T11:05:17 8240154 6 10 [...].138.152.[...] FF17516B634944A4AD54518308BC8279
    2026-11-01T12:23:54 8250153 4 10 [...].64.36.[...] FF35807637B2439E9C0EB1C1459ADF9D
    2026-10-28T18:16:18 8200239 4 10 [...].154.36.[...] FF682E8DA2F049EB8F4E5692B5D5A949
    2026-10-08T20:33:40 8250170 1 10 [...].66.178.[...] FF6E51563E3442FB96E292730D377E6B
    2026-11-03T18:51:18 8250249 5 10 [...].71.237.[...] FFF9AF269EF247AFBD2E4F58A24598D3

    Βαθμοί ασκήσεων ανά Α.Μ.

    Α.Μ. Βαθμοί ατομικής άσκησης Μ.Ο. ατομικών ασκήσεων που έχουν παραδοθεί Μ.Ο. απαιτούμενων ατομικών ασκήσεων (7) Ομαδικές ασκήσεις
    250093Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8100069Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190239Α1=10 Α2=3 Α3=10 7.73.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190306Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190318Α1=10 Α2=9 Α3=10 Α4=10 Α5=8 Α6=10 9.58.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190332Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α11=10 Α12=10 Α13=10 Α14=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190343Α1=8 Α2=10 Α3=10 Α4=8 Α5=10 Α6=10 Α7=10 Α8=7 Α9=10 Α10=10 9.310.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    819318Α1=7 7.01.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200091Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200100Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 Α6=8 Α16=10 9.49.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200239Α1=9 Α2=9 Α3=10 Α4=10 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210093Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210105Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210215Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220018Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 9.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220040Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220060Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=8 Α10=10 Α11=8 Α12=8 Α13=10 Α15=10 Α16=10 Α17=10 Α18=8 9.410.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230046Α1=10 Α2=8 Α3=10 Α4=10 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230051Α1=10 Α2=10 Α3=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α11=10 Α12=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230060Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230062Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 9.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230141Α1=10 Α2=10 Α3=9 Α4=10 Α5=10 9.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230150Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230222Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230223Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230240Α1=10 Α2=10 Α3=10 Α4=9 Α5=10 9.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230241Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230242Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240030Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240045Α1=10 Α2=10 Α3=10 Α4=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240054Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240061Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240062Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240064Α1=5 Α2=10 Α3=10 Α4=10 Α5=10 9.06.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240069Α1=10 Α2=10 Α3=10 10.04.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240074Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240093Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240129Α1=8 Α2=9 Α3=9 Α4=8 8.54.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240137Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240148Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 Α10=8 9.810.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240150Α1=9 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 9.910.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240154Α1=10 Α2=10 Α3=10 Α4=10 Α5=6 Α6=10 9.38.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240226Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240235Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240236Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240266Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240270Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    824031Α2=10 10.01.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240315Α4=10 Α5=8 Α6=10 Α8=10 Α11=10 Α12=10 9.78.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8240316Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 9.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250001Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250002Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250003Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250004Α1=10 Α2=10 Α3=0 Α4=9 Α5=10 Α6=10 Α16=10 8.48.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250005Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250006Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 Α6=10 Α16=10 9.79.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250007Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250008Α1=10 10.01.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250009Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250010Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250011Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250012Α3=9 Α4=7 Α5=7 Α6=10 8.24.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250013Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250016Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250017Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250018Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250019Α1=8 Α2=10 Α3=10 Α4=10 9.55.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250021Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250023Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250025Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250026Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250027Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250028Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250029Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250032Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250033Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250035Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250036Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250037Α1=10 Α2=10 Α3=10 10.04.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250038Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=9 9.99.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250040Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250041Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250042Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250043Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250044Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250047Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250048Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250049Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250052Α1=10 Α2=10 Α3=10 Α4=2 Α5=10 Α6=10 Α7=10 Α8=6 Α9=10 8.710.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250053Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250054Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250055Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250057Α1=5 Α2=10 Α3=10 Α4=10 Α5=10 9.06.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250058Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250059Α1=8 Α2=10 Α3=10 Α4=10 9.55.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250060Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250061Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250062Α1=9 Α2=10 Α3=9 Α4=10 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250063Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250064Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250065Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250066Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250067Α1=10 Α2=9 Α3=10 Α4=10 9.85.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250068Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250069Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250070Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250071Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250072Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250073Α1=10 Α2=10 Α3=10 Α4=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250075Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250076Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250077Α1=10 10.01.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250078Α1=10 Α2=10 Α3=10 Α4=8 Α5=8 9.26.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250079Α1=10 Α2=10 Α3=10 Α4=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250081Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250082Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250083Α1=10 Α2=10 Α3=10 Α4=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250084Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250085Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250086Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250087Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 Α6=10 9.78.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250088Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250089Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250090Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250091Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250092Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250094Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250096Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250097Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250098Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250099Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250101Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250102Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250103Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 9.78.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250104Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250105Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250106Α1=10 Α2=10 Α3=10 Α4=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250107Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250108Α1=10 Α2=10 Α3=10 Α4=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250110Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250111Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250113Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250115Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250117Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250120Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250122Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250123Α1=10 Α2=10 Α4=10 Α5=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250124Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250125Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250126Α1=10 Α2=10 Α3=10 Α4=8 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250127Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250128Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250129Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250130Α1=10 Α2=10 Α3=10 Α4=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250131Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250133Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250135Α1=10 Α2=10 Α3=10 Α4=8 Α5=10 Α6=10 Α16=10 9.79.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250137Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 Α6=10 9.78.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250138Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250140Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250141Α1=10 Α2=10 Α3=10 10.04.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250142Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250143Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 9.79.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250144Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250145Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250146Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250147Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250148Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250149Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250150Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250151Α1=8 Α3=10 Α4=10 Α5=8 9.05.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250153Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250154Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250155Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250156Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250157Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250158Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250159Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250160Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250162Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250164Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250165Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250166Α1=10 Α2=5 Α3=10 Α4=10 Α5=10 Α6=10 9.27.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250167Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 9.79.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250168Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250170Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250171Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250172Α1=10 Α2=10 Α3=10 Α4=8 Α5=8 9.26.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250229Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250230Α1=5 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 9.39.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250231Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250235Α1=9 Α2=6 Α3=7 Α4=5 Α5=7 Α6=8 Α16=9 7.37.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250236Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250238Α1=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250239Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250241Α1=8 Α2=10 Α3=9 Α4=10 Α5=9 Α6=9 Α16=9 9.19.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250242Α1=9 Α2=10 Α3=10 Α4=10 Α5=10 9.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250243Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250244Α1=10 10.01.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250245Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250247Α1=10 Α2=10 Α3=10 Α4=10 Α5=3 8.66.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250249Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250251Α2=10 Α3=10 Α4=10 Α5=8 9.55.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250257Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250261Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 9.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250263Α1=10 Α2=8 Α3=10 Α4=10 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250264Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250265Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250266Α1=8 Α2=10 9.02.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250267Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250274Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250275Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250277Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.08.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250279Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250280Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250282Α1=10 Α2=10 Α3=9 Α4=10 9.85.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250283Α1=10 Α3=10 Α4=10 Α5=10 10.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250287Α1=10 Α2=9 9.52.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250289Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250290Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250292Α1=4 Α2=6 Α3=10 Α4=10 Α5=10 8.05.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250293Α1=9 Α2=10 Α3=9 Α4=10 Α5=10 Α6=9 9.58.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250296Α1=10 Α2=10 Α3=10 Α4=9 Α5=10 Α6=10 9.88.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250299Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250301Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250302Α1=10 Α2=10 Α3=10 Α4=8 Α5=10 9.66.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250303Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250304Α1=10 Α2=10 Α4=10 Α5=8 9.55.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8250309Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α11=10 Α12=10 Α13=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    999Α1=10 Α2=8 9.02.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0

    Φοιτητές που παραδίδουν ασκήσεις: 230
    Μέσος όρος ατομικής άσκησης για φοιτητές που παραδίδουν ασκήσεις: 9.8
    Ατομικές ασκήσεις με προθεσμία παράδοσης: 7
    Μέσος όρος 7 ατομικών ασκήσεων για φοιτητές που παραδίδουν ασκήσεις: 7.6

    Λάθη στον έλεγχο του βαθμού

    Χρονοσφραγίδα ΑΜ Άσκηση Βαθμός Διεύθυνση IP Αναγνωριστικό
    2026-10-13T21:39:44 8200100 1 10 [...].217.174.[...] 12799DD26F4943A7A99F513CADDCCC29
    2026-10-13T22:44:59 8200100 2 10 [...].217.174.[...] 42C9775513634C3B94B0641588F93349

    Ενδιαφέρουσα βιβλιογραφία

    Θέματα εξετάσεων

    Πιλοτικά θέματα εξετάσεων

    Τα πιλοτικά θέματα σε μορφή PDF (έκδοση 1.1 - 2004.02.13).

    Για να βρείτε τις σωστές απαντήσεις αρκεί να μεταγλωττίσετε το πρόγραμμα με μερικές εντολές println στο τέλος.

    Εξεταστική περίοδος Φεβρουαρίου 2004

    Μια διατύπωση των θεμάτων σε μορφή PDF.

    Για να βρείτε τις σωστές απαντήσεις αρκεί να μεταγλωττίσετε το πρόγραμμα με μερικές εντολές println στο τέλος.

    Παράδειγμα προγράμματος

    
    class Exam {
        public static void main(String args[]) {
            int gargoyle = 5;
            int i = 2;
            int dobby = 5;
            while (i < 11) {
                i = i + 4;
                gargoyle = gargoyle + 2;
            }
            for (i = 2; i < 11; i = i + 4)
                dobby = dobby + 2;
            int dockhead = 6;
            try {
                dockhead = 11;
                if (dockhead == 11)
                    throw new Exception();
                dockhead = 21;
            } catch (Exception e) {
                dockhead = 16;
            }
            Ingluvial y = new Ingluvial(2);
            Ingluvial z = new Ingluvial();
            Ingluvial w = y;
            Aneurism x = new Aneurism();
            Ingluvial u = y; Aneurism v = x;
            int toeplate = 11;
            int tubeful = z.m() + 2 * x.m() + 3 * x.t();
            int fenrir = y.naumk;
            toeplate = 20;
            if (w.naumk != y.naumk)
                toeplate += 1;
            else
                toeplate += 10;
            String s = "footful" + "hexameron";
            int unparty = s.substring(1, 13).length();
            int umbelwort = Aneurism.count;
            int arusa = 23;
            Ingluvial r = new Aneurism();
            arusa = r.m();
            int smethe = 25;
            boolean array[] = new boolean[16];
            try {
                if (array[24])
                    smethe = 54;
                else
                    smethe = 44;
            } catch (ArrayIndexOutOfBoundsException e) {
                smethe = 31;
            }
        }
    }
    class Ingluvial {
        public int naumk;
        private char kahan;
        Ingluvial() {naumk = 11; }
        Ingluvial(int v0) { naumk = v0; }
        public int t() { return 1; }
        public int m() { return 37; }
    }
    class Aneurism extends Ingluvial {
        public static int count = 6;
        Aneurism() { count += 6; }
        public int n() { return naumk; }
        public int m() { return 15; }
    }
    

    Μεταβλητές

    Προσοχή

    Τα παραπάνω θέματα μοιάζουν αρκετά με τα πιλοτικά θέματα. Αυτό είναι απίθανο να συμβεί σε επόμενες εξεταστικές περιόδους.

    Εξεταστική περίοδος Σεπτεμβρίου 2005

    Μια διατύπωση των θεμάτων σε μορφή PDF.

    Για να βρείτε τις σωστές απαντήσεις αρκεί να μεταγλωττίσετε το πρόγραμμα με μερικές εντολές println στο τέλος.

    Παράδειγμα προγράμματος

    
    class Exam {
        static boolean ba[] = new boolean[6];
        public static void main(String args[]) {
            int lunula = 12;
            for (int i = 3; i < 11; i += 1)
                if (i % 3 == 1)
                    lunula = lunula + 2;
            int upglean = upslant(4, 9);
            String s = "alfet";
            s += "ceras" + "alfet";
            int chinaware = (s.substring(1, 8) + s).length();
            int bedstock = 6;
            try {
                bedstock = 10;
                if (bedstock == 10)
                    throw new Exception();
                bedstock = 20;
            } catch (Exception e) {
                bedstock = 15;
            }
            Bitted y = new Bitted(2);
            Bitted z = new Bitted();
            Bitted w = y;
            Samantha x = new Samantha();
            Bitted u = y; Samantha v = x;
            int megachile = 11;
            int powerless = z.m(16) - 2 * x.m(18) - 3 * x.t();
            int peccable = y.kangaroo;
            megachile = 23;
            if (w.kangaroo != y.kangaroo)
                megachile += 2;
            else
                megachile += 12;
            int archwise = Samantha.count;
            int drumming = 26;
            int ai = 0;
            ba[ai++] = false; ba[ai++] = true; ba[ai++] = true;
            ba[ai++] = true; ba[ai++] = true; ba[ai++] = true;
            for (int i = 0; i < ba.length - 1; i++) {
                if (!ba[i]) drumming += 11;
                if (ba[i] || ba[i + 1]) drumming += 9;
                if (ba[i] && ba[i + 1]) drumming -= 3;
            }
            int unhumble = 25;
            Bitted r = new Samantha();
            unhumble = r.m(17);
        }
        private static int upslant(int a, int b) {
            int loc1 = a;
            int loc2 = b;
            return (3 * loc1 + 2 * loc2 * loc2);
        }
    }
    class Bitted {
        public int kangaroo;
        Bitted() {kangaroo = 11; }
        Bitted(int v0) { kangaroo = v0 + 1; }
        public int t() { return 2 * 2; }
        public int m(int v) { return 31 - v; }
    }
    class Samantha extends Bitted {
        public static int count = 5;
        Samantha() { count += 7; }
        public int m(int v) { return v - 13 * 2; }
    }
    

    Μεταβλητές

    Περιεχόμενα