Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Guru Meditation Error when connecting to Eduroam (WPA2-Enterprise)

    Scheduled Pinned Locked Moved LoPy
    eduroamwpa2guru meditation
    14 Posts 6 Posters 2.7k Views 6 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A Offline
      asergio @seb
      last edited by asergio

      @seb yep

      (sysname='LoPy', nodename='LoPy', release='1.17.3.b1', version='v1.8.6-849-83e2f7f on 2018-03-19', machine='LoPy with ESP32', lorawan='1.0.2')
      1 Reply Last reply Reply Quote 0
      • A Offline
        asergio
        last edited by

        Any idea of how I can at least debug this? The crash dumps doesn't help much.

        1 Reply Last reply Reply Quote 0
        • sebS Offline
          seb
          last edited by

          @asergio

          The process for decoding the dumps is quite cumbersome but here goes:

          Requirements:

          1. The core dump as a text file. You want the text between (but NOT including)
            ================= CORE DUMP START ================= and ================= CORE DUMP END =================
          2. Setup the pycom version of the ESP-IDF from here: https://github.com/pycom/pycom-esp-idf
          3. A copy of the exact firmware elf file used on your device. If you are using pycom released firmware these can be found here: https://github.com/pycom/pycom-micropython-sigfox/releases

          Steps:

          1. Open a terminal and navigate to {ESP-IDF}/components/espcoredump/
          2. Run the following command:
          $ ./espcoredump.py info_corefile -t b64 -c core_dump.txt firmware.elf
          

          This will output the decoded core dump which should give clues as to where the error occurs.

          A O 2 Replies Last reply Reply Quote 2
          • A Offline
            asergio @seb
            last edited by

            @seb said in Guru Meditation Error when connecting to Eduroam (WPA2-Enterprise):

            espcoredump.py

            Thanks, this is what I got, any idea of what could be the problem?

            ===============================================================
            ==================== ESP32 CORE DUMP START ====================
            
            ================== CURRENT THREAD REGISTERS ===================
            pc             0x400e2552	0x400e2552 <machine_idle+6>
            lbeg           0x0	0
            lend           0x0	0
            lcount         0x0	0
            sar            0x0	0
            ps             0x60a20	395808
            threadptr      <unavailable>
            br             <unavailable>
            scompare1      <unavailable>
            acclo          <unavailable>
            acchi          <unavailable>
            m0             <unavailable>
            m1             <unavailable>
            m2             <unavailable>
            m3             <unavailable>
            expstate       <unavailable>
            f64r_lo        <unavailable>
            f64r_hi        <unavailable>
            f64s           <unavailable>
            fcr            <unavailable>
            fsr            <unavailable>
            a0             0x400f1358	1074729816
            a1             0x3ffd96b0	1073583792
            a2             0x3f402adc	1061169884
            a3             0x0	0
            a4             0x0	0
            a5             0x0	0
            a6             0x0	0
            a7             0x0	0
            a8             0x0	0
            a9             0x0	0
            a10            0x0	0
            a11            0x0	0
            a12            0x0	0
            a13            0x0	0
            a14            0x0	0
            a15            0x0	0
            
            ==================== CURRENT THREAD STACK =====================
            #0  machine_idle () at mods/modmachine.c:180
            #1  0x400f1358 in mp_call_function_n_kw (fun_in=0x3f402adc <machine_idle_obj>, n_args=0, n_kw=1074729816, args=0x3ffd96b0) at ../py/runtime.c:574
            Backtrace stopped: Cannot access memory at address 0x40000002
            
            ======================== THREADS INFO =========================
              Id   Target Id         Frame 
              15   process 14        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffdb51c, pvBuffer=0x3ffe62c0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
              14   process 13        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffbc1e8, pvBuffer=0x3ffbd7e0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
              13   process 12        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd289c, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
              12   process 11        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffb46dc, pvBuffer=0x3ffb5150, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
              11   process 10        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd9abc, pvBuffer=0x3ffdac60, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
              10   process 9         0x40081522 in esp_crosscore_int_send_yield (core_id=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/esp32/./crosscore_int.c:112
              9    process 8         0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd3ddc, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
              8    process 7         0x40081522 in esp_crosscore_int_send_yield (core_id=1) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/esp32/./crosscore_int.c:112
              7    process 6         0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd45a0, pvBuffer=0x3ffd55e0, xTicksToWait=100, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
              6    process 5         0x4008c220 in vTaskDelay (xTicksToDelay=<optimized out>) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./tasks.c:1491
              5    process 4         /builds/idf/crosstool-NG/.build/src/gdb-7.10/gdb/inline-frame.c:171: internal-error: inline_frame_this_id: Assertion `!frame_id_eq (*this_id, outer_frame_id)' failed.
            A problem internal to GDB has been detected,
            further debugging may prove unreliable.
            Quit this debugging session? (y or n) [answered Y; input not from terminal]
            /builds/idf/crosstool-NG/.build/src/gdb-7.10/gdb/inline-frame.c:171: internal-error: inline_frame_this_id: Assertion `!frame_id_eq (*this_id, outer_frame_id)' failed.
            A problem internal to GDB has been detected,
            further debugging may prove unreliable.
            Create a core file of GDB? (y or n) [answered Y; input not from terminal]
            GDB exited (None / )!
            Problem occured! GDB exited, restart it.
            Reading symbols from LoPy-1.17.3.b1-application.elf...done.
            [New <main task>]
            [New process 1]
            [New process 2]
            [New process 3]
            [New process 4]
            [New process 5]
            [New process 6]
            [New process 7]
            [New process 8]
            [New process 9]
            [New process 10]
            [New process 11]
            [New process 12]
            [New process 13]
            [New process 14]
            [Current thread is 1 (<main task>)]
            
            ======================= ALL MEMORY REGIONS ========================
            Name   Address   Size   Attrs
            .rtc.text 0x400c0000 0x6c R XA
            .rtc.data 0x50000000 0x10 RW A
            .iram0.vectors 0x40080000 0x400 R XA
            .iram0.text 0x40080400 0x1b27c R XA
            .dram0.data 0x3ffc0000 0x4418 RW A
            .flash.rodata 0x3f400020 0x2bbc4 RW A
            .flash.text 0x400d0018 0xeb5f8 R XA
            .coredump.tasks 0x3ffc536c 0x16c RW 
            .coredump.tasks 0x3ffd9670 0x444 RW 
            .coredump.tasks 0x3ffdfaa0 0x16c RW 
            .coredump.tasks 0x3ffdf510 0x588 RW 
            .coredump.tasks 0x3ffd5fec 0x16c RW 
            .coredump.tasks 0x3ffd5e70 0x174 RW 
            .coredump.tasks 0x3ffd6560 0x16c RW 
            .coredump.tasks 0x3ffd63e0 0x178 RW 
            .coredump.tasks 0x3ffd71cc 0x16c RW 
            .coredump.tasks 0x3ffd7070 0x154 RW 
            .coredump.tasks 0x3ffd5958 0x16c RW 
            .coredump.tasks 0x3ffdb3b0 0x164 RW 
            .coredump.tasks 0x3ffd5678 0x16c RW 
            .coredump.tasks 0x3ffd5490 0x1e0 RW 
            .coredump.tasks 0x3ffb7458 0x16c RW 
            .coredump.tasks 0x3ffb7240 0x210 RW 
            .coredump.tasks 0x3ffd4238 0x16c RW 
            .coredump.tasks 0x3ffd40b0 0x180 RW 
            .coredump.tasks 0x3ffd3c6c 0x16c RW 
            .coredump.tasks 0x3ffd3ac0 0x1a4 RW 
            .coredump.tasks 0x3ffd57e8 0x16c RW 
            .coredump.tasks 0x3ffdab60 0x1b0 RW 
            .coredump.tasks 0x3ffb51f0 0x16c RW 
            .coredump.tasks 0x3ffb5050 0x198 RW 
            .coredump.tasks 0x3ffd34f8 0x16c RW 
            .coredump.tasks 0x3ffd3370 0x180 RW 
            .coredump.tasks 0x3ffbd884 0x16c RW 
            .coredump.tasks 0x3ffbd6d0 0x1ac RW 
            .coredump.tasks 0x3ffe4a10 0x16c RW 
            .coredump.tasks 0x3ffe6160 0x21c RW 
            
            ===================== ESP32 CORE DUMP END =====================
            ===============================================================
            Done!
            A 1 Reply Last reply Reply Quote 0
            • A Offline
              asergio @asergio
              last edited by

              @asergio

              I did one without the machine idle

              espcoredump.py v0.1-dev
              ===============================================================
              ==================== ESP32 CORE DUMP START ====================
              
              ================== CURRENT THREAD REGISTERS ===================
              pc             0x4018674d	0x4018674d <bignum_set_unsigned_bin+49>
              lbeg           0x40184821	1075333153
              lend           0x40184827	1075333159
              lcount         0x0	0
              sar            0x18	24
              ps             0x60720	395040
              threadptr      <unavailable>
              br             <unavailable>
              scompare1      <unavailable>
              acclo          <unavailable>
              acchi          <unavailable>
              m0             <unavailable>
              m1             <unavailable>
              m2             <unavailable>
              m3             <unavailable>
              expstate       <unavailable>
              f64r_lo        <unavailable>
              f64r_hi        <unavailable>
              f64s           <unavailable>
              fcr            <unavailable>
              fsr            <unavailable>
              a0             0x4018160e	1075320334
              a1             0x3ffe1990	1073617296
              a2             0x3ffdffd0	1073610704
              a3             0x1	1
              a4             0x3ffdf448	1073607752
              a5             0x1	1
              a6             0x3ffe1a64	1073617508
              a7             0x1	1
              a8             0x80186749	-2145884343
              a9             0x3ffe3850	1073625168
              a10            0x0	0
              a11            0xff	255
              a12            0x3ffdffd0	1073610704
              a13            0x0	0
              a14            0x2	2
              a15            0x5	5
              
              ==================== CURRENT THREAD STACK =====================
              #0  0x4018674d in mp_read_unsigned_bin (c=1073607751, b=0x2 <error: Cannot access memory at address 0x2>, a=0x3ffdffd0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/wpa_supplicant/src/crypto/libtommath.h:990
              #1  bignum_set_unsigned_bin (n=0x3ffdffd0, buf=0x1 <error: Cannot access memory at address 0x1>, len=1073607752) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/wpa_supplicant/src/crypto/bignum.c:114
              #2  0x4018160e in crypto_mod_exp (base=<optimized out>, base_len=<optimized out>, power=0x4018160e <crypto_mod_exp+74> \"\\226j\\376\\315\\005\\275\\004\\255\\003e\\020\\005\\226\\252\\375\\310\\021\\255\\a\\270\\001\\245\\017\\005\\226\\352\\374\\335\\006\\315\\a\\275\\003\\255\\002e\\036\\005\\226\
              \\374\\310\321\255\\006\\270\\301\\345\\002\\005M\
              \\255\\002\\345\\376\\004\\255\\003\\245\\376\\004\\255\\ae\\376\\004\\255\\006%\\376\\004-\\004\", <incomplete sequence \\360>, power_len=1073617296, modulus=0x3ffe1a64 \"3\", modulus_len=1061285312, result=0x2 <error: Cannot access memory at address 0x2>, result_len=0x10) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/wpa_supplicant/src/crypto/crypto_internal-modexp.c:40
              #3  0x40144165 in x509_certificate_check_signature ()
              #4  0x40144362 in x509_certificate_chain_validate ()
              #5  0x40140f61 in ?? ()
              #6  0x40141374 in tlsv1_client_process_handshake ()
              #7  0x40140594 in tlsv1_client_handshake ()
              #8  0x4013fff1 in tls_connection_handshake2 ()
              #9  0x40140054 in tls_connection_handshake ()
              #10 0x4013e5bc in eap_peer_tls_process_helper ()
              #11 0x4013dcea in ?? ()
              #12 0x4013c14c in eap_sm_process_request ()
              #13 0x4013c4dc in wpa2Task ()
              
              ======================== THREADS INFO =========================
                Id   Target Id         Frame 
                15   process 14        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffdb51c, pvBuffer=0x3ffe62c0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
                14   process 13        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffbc1e8, pvBuffer=0x3ffbd7e0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
                13   process 12        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd289c, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
                12   process 11        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffb46dc, pvBuffer=0x3ffb5150, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
                11   process 10        0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd3810, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
                10   process 9         0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd9abc, pvBuffer=0x3ffdac60, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
                9    process 8         0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd3ddc, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
                8    process 7         0x40081522 in esp_crosscore_int_send_yield (core_id=1) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/esp32/./crosscore_int.c:112
                7    process 6         0x4008b4d8 in xQueueGenericReceive (xQueue=0x3ffd45a0, pvBuffer=0x3ffd55e0, xTicksToWait=100, xJustPeeking=0) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./queue.c:1591
                6    process 5         0x4008c220 in vTaskDelay (xTicksToDelay=<optimized out>) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./tasks.c:1491
                5    process 4         0x4008c220 in vTaskDelay (xTicksToDelay=<optimized out>) at /Users/danicampora/Code/Espressif/IDF/esp-idf-20180112/components/freertos/./tasks.c:1491
                4    process 3         /builds/idf/crosstool-NG/.build/src/gdb-7.10/gdb/inline-frame.c:171: internal-error: inline_frame_this_id: Assertion `!frame_id_eq (*this_id, outer_frame_id)' failed.
              A problem internal to GDB has been detected,
              further debugging may prove unreliable.
              Quit this debugging session? (y or n) [answered Y; input not from terminal]
              /builds/idf/crosstool-NG/.build/src/gdb-7.10/gdb/inline-frame.c:171: internal-error: inline_frame_this_id: Assertion `!frame_id_eq (*this_id, outer_frame_id)' failed.
              A problem internal to GDB has been detected,
              further debugging may prove unreliable.
              Create a core file of GDB? (y or n) [answered Y; input not from terminal]
              GDB exited (None / )!
              Problem occured! GDB exited, restart it.
              Reading symbols from LoPy-1.17.3.b1-application.elf...done.
              [New <main task>]
              [New process 1]
              [New process 2]
              [New process 3]
              [New process 4]
              [New process 5]
              [New process 6]
              [New process 7]
              [New process 8]
              [New process 9]
              [New process 10]
              [New process 11]
              [New process 12]
              [New process 13]
              [New process 14]
              [Current thread is 1 (<main task>)]
              
              ======================= ALL MEMORY REGIONS ========================
              Name   Address   Size   Attrs
              .rtc.text 0x400c0000 0x6c R XA
              .rtc.data 0x50000000 0x10 RW A
              .iram0.vectors 0x40080000 0x400 R XA
              .iram0.text 0x40080400 0x1b27c R XA
              .dram0.data 0x3ffc0000 0x4418 RW A
              .flash.rodata 0x3f400020 0x2bbc4 RW A
              .flash.text 0x400d0018 0xeb5f8 R XA
              .coredump.tasks 0x3ffde1d8 0x16c RW 
              .coredump.tasks 0x3ffe18d0 0x588 RW 
              .coredump.tasks 0x3ffd6560 0x16c RW 
              .coredump.tasks 0x3ffd63e0 0x178 RW 
              .coredump.tasks 0x3ffd5fec 0x16c RW 
              .coredump.tasks 0x3ffd5e70 0x174 RW 
              .coredump.tasks 0x3ffd71cc 0x16c RW 
              .coredump.tasks 0x3ffd7070 0x154 RW 
              .coredump.tasks 0x3ffc536c 0x16c RW 
              .coredump.tasks 0x3ffd9760 0x354 RW 
              .coredump.tasks 0x3ffd5958 0x16c RW 
              .coredump.tasks 0x3ffdb3b0 0x164 RW 
              .coredump.tasks 0x3ffd5678 0x16c RW 
              .coredump.tasks 0x3ffd5490 0x1e0 RW 
              .coredump.tasks 0x3ffb7458 0x16c RW 
              .coredump.tasks 0x3ffb7240 0x210 RW 
              .coredump.tasks 0x3ffd4238 0x16c RW 
              .coredump.tasks 0x3ffd40b0 0x180 RW 
              .coredump.tasks 0x3ffd57e8 0x16c RW 
              .coredump.tasks 0x3ffdab60 0x1b0 RW 
              .coredump.tasks 0x3ffd3c6c 0x16c RW 
              .coredump.tasks 0x3ffd3ae0 0x184 RW 
              .coredump.tasks 0x3ffb51f0 0x16c RW 
              .coredump.tasks 0x3ffb5050 0x198 RW 
              .coredump.tasks 0x3ffd34f8 0x16c RW 
              .coredump.tasks 0x3ffd3370 0x180 RW 
              .coredump.tasks 0x3ffbd884 0x16c RW 
              .coredump.tasks 0x3ffbd6d0 0x1ac RW 
              .coredump.tasks 0x3ffe4a10 0x16c RW 
              .coredump.tasks 0x3ffe6160 0x21c RW 
              
              ===================== ESP32 CORE DUMP END =====================
              ===============================================================
              Done!
              1 Reply Last reply Reply Quote 0
              • sebS Offline
                seb
                last edited by

                Thanks for posting those decoded dumps, I have passed this onto the firmware team, they will try look into but they will need to setup a WPA2-ENT network to test it.

                A 1 Reply Last reply Reply Quote 0
                • A Offline
                  asergio @seb
                  last edited by

                  @seb

                  I just tested with a LoPy with an older firmware

                  >>> os.uname()
                  (sysname='LoPy', nodename='LoPy', release='1.7.7.b1', version='v1.8.6-715-g5fa16c2c on 2017-07-20', machine='LoPy with ESP32', lorawan='1.0.0')
                  

                  and it worked...

                  >>> wlan.isconnected()
                  True
                  
                  

                  I guess this is really a firmware problem.

                  sebS 1 Reply Last reply Reply Quote 0
                  • sebS Offline
                    seb @asergio
                    last edited by

                    @asergio

                    Looks like it, the firmware team have been made aware of this issue and will look into it

                    1 Reply Last reply Reply Quote 0
                    • S Offline
                      Stefano.Tondini
                      last edited by

                      Hi,
                      I got the same issue both with LoPy4 and with FiPy... Any news? Thanks

                      Stefano

                      1 Reply Last reply Reply Quote 0
                      • G Offline
                        gman @seb
                        last edited by

                        First lines of my dump.. after I removed the
                        ========= CORE DUMP lines

                        looks like
                        EDkAABAAAABsAQAA
                        WNj7P5DW+z9Q2Ps/
                        sNb7P/DX+z/48WtoPFH8PzxR/D9Y2Ps/NFH8PwIAAADowfs/6MH7P1jY+z8AAAAA

                        Python DIES with MemoryError as task_num is unpacked as a very huge number in espcoredump.py:579 as

                        tot_len,task_num,tcbsz = struct.unpack_from(self.ESP32_COREDUMP_HDR_FMT, data)

                        Which yields

                        (1097548869, 1094795841, 1933721921)

                        Probably a simple mistake with core dump file format

                        1 Reply Last reply Reply Quote 0
                        • O Offline
                          olivieroswald @seb
                          last edited by

                          @seb latest release (18.1.2.r1) is a set of BIN files, no ELF. how can i use these with espcoredump.py ?

                          1 Reply Last reply Reply Quote 0
                          • A Offline
                            andreas
                            last edited by andreas

                            Dear @asergio, @Stefano-Tondini and @gman,

                            back in the time you have been recognizing this issue, it looks like connecting to WPA2-Enterprise was not supported by the ESP-IDF at all.

                            Since October 2018, appropriate support has been merged [1,2] and we can confirm we are seeing these bits within the current Pycom fork [3].

                            So, we would encourage you to try again with one of the more recent releases of the Pycom firmware.

                            With kind regards,
                            Andreas.

                            [1] https://github.com/espressif/esp-idf/issues/2181
                            [2] https://github.com/espressif/esp-idf/pull/2354
                            [3] https://github.com/pycom/pycom-esp-idf

                            1 Reply Last reply Reply Quote 0

                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                            With your input, this post could be even better 💗

                            Register Login
                            • 1 / 1
                            • First post
                              Last post

                            Pycom on Twitter

                            Pycom