IQ7 App Battery Abort Tablet


Author
Message
pinguin
pinguin
Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)
Group: Forum Members
Posts: 21, Visits: 91
Hi Dave,

we have had a similar issue last year with IQ6 (https://forums.millisecond.com/Topic36481.aspx). Back then, it seemed to be a RAM problem. However, we managed to get everything running.

Now, we have updated our test battery.

It (https://mili2nd.eu/rkjc) runs smoothly on a computer (using the full application), but in offline mode via the app on a tablet (in this case an iPad Pro with M1 chip) the battery aborts after the second test (the third script of our batch). This is also true for one of the older Samsung tablets, which are also causing us the trouble regarding the headphones.

Just to make sure, is everything correctly uploaded in our project? It seems as if some files cannot be found, although we see them in the overview. Please see the screenshots.

Do you have any other tips on how to proceed to get everything running? We were really hoping that IQ7 would solve our RAM issues. Maybe there is something we are missing?

We appreciate your input.

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 107K
pinguin - 4/23/2025
Hi Dave,

we have had a similar issue last year with IQ6 (https://forums.millisecond.com/Topic36481.aspx). Back then, it seemed to be a RAM problem. However, we managed to get everything running.

Now, we have updated our test battery.

It (https://mili2nd.eu/rkjc) runs smoothly on a computer (using the full application), but in offline mode via the app on a tablet (in this case an iPad Pro with M1 chip) the battery aborts after the second test (the third script of our batch). This is also true for one of the older Samsung tablets, which are also causing us the trouble regarding the headphones.

Just to make sure, is everything correctly uploaded in our project? It seems as if some files cannot be found, although we see them in the overview. Please see the screenshots.

Do you have any other tips on how to proceed to get everything running? We were really hoping that IQ7 would solve our RAM issues. Maybe there is something we are missing?

We appreciate your input.

All necessary files appear to the uploaded. Toggle ofline mode off on the devices, close the app, re-open it, and then toggle it back on.

Inquisit 7 can't / won't solve your RAM problem. If there's not enough memory to do all the things you're asking Inquisit to do, you'll run into issues. (The log for that iPad shows that it had only a little over 100MB of available RAM at the time you took the screenshot.)
pinguin
pinguin
Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)
Group: Forum Members
Posts: 21, Visits: 91
Dave - 4/23/2025
pinguin - 4/23/2025
Hi Dave,

we have had a similar issue last year with IQ6 (https://forums.millisecond.com/Topic36481.aspx). Back then, it seemed to be a RAM problem. However, we managed to get everything running.

Now, we have updated our test battery.

It (https://mili2nd.eu/rkjc) runs smoothly on a computer (using the full application), but in offline mode via the app on a tablet (in this case an iPad Pro with M1 chip) the battery aborts after the second test (the third script of our batch). This is also true for one of the older Samsung tablets, which are also causing us the trouble regarding the headphones.

Just to make sure, is everything correctly uploaded in our project? It seems as if some files cannot be found, although we see them in the overview. Please see the screenshots.

Do you have any other tips on how to proceed to get everything running? We were really hoping that IQ7 would solve our RAM issues. Maybe there is something we are missing?

We appreciate your input.

All necessary files appear to the uploaded. Toggle ofline mode off on the devices, close the app, re-open it, and then toggle it back on.

Inquisit 7 can't / won't solve your RAM problem. If there's not enough memory to do all the things you're asking Inquisit to do, you'll run into issues. (The log for that iPad shows that it had only a little over 100MB of available RAM at the time you took the screenshot.)

Hi Dave,

thank you for your quick reply — it’s great to hear the upload went through properly.

Your suggestion to toggle offline mode off and then back on did help us progress a bit further through the batch, which was encouraging at first. However, we're still encountering script terminations at a certain point.

I completely agree: Inquisit likely struggles to handle what we’re asking of it when we push it to its limits.

Is there anything that stands out to you in our scripts that might be optimized to ease the load?

Our worst-case fallback would be to split the battery into multiple parts and launch them one after the other. However, since we’re testing first graders in groups of around 15, that would mean our test administrators would need to re-enter subject codes repeatedly — which isn’t very practical in that setting.

Thanks again for your support!

Best,

pinguin
pinguin
pinguin
Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)
Group: Forum Members
Posts: 21, Visits: 91
P.S.: Do you think it could help to split the single test scripts into several parts? (i.e., instead of having one script for "language-related task", we would have two scripts for it.)
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 107K
pinguin - 4/24/2025
P.S.: Do you think it could help to split the single test scripts into several parts? (i.e., instead of having one script for "language-related task", we would have two scripts for it.)

If you want me to look at something, you need to be more specific. "[We could] progress a bit further through the batch, which was encouraging at first. However, we're still encountering script terminations at a certain point." doesn't tell me much. How far? Which scripts terminate and when? Always the same scripts? Always at the same point? Or different scripts at different points? What are the error messages, if any? I don't have time to review more than a dozen scripts, involving more than 1800 external files (images, sounds, etc.), on a hunch.

Simple optimizations you can do to cut down on memory usage: Re-size excessively large images. For example, d_sh_021_b.jpg alone has a resolution of 5665 x  4170 pixels and weighs in at almost 3MB on disk. In memory, that will be much larger. I doubt that any of the screens you are using comes close to having a resolution of 5665 x 4170 pixels, so that's just a waste of memory: Loading all those excess pixels costs memory, and scaling them down to the actual resolution costs memory on top.
pinguin
pinguin
Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)
Group: Forum Members
Posts: 21, Visits: 91
Dave - 4/24/2025
pinguin - 4/24/2025
P.S.: Do you think it could help to split the single test scripts into several parts? (i.e., instead of having one script for "language-related task", we would have two scripts for it.)

If you want me to look at something, you need to be more specific. "[We could] progress a bit further through the batch, which was encouraging at first. However, we're still encountering script terminations at a certain point." doesn't tell me much. How far? Which scripts terminate and when? Always the same scripts? Always at the same point? Or different scripts at different points? What are the error messages, if any? I don't have time to review more than a dozen scripts, involving more than 1800 external files (images, sounds, etc.), on a hunch.

Simple optimizations you can do to cut down on memory usage: Re-size excessively large images. For example, d_sh_021_b.jpg alone has a resolution of 5665 x  4170 pixels and weighs in at almost 3MB on disk. In memory, that will be much larger. I doubt that any of the screens you are using comes close to having a resolution of 5665 x 4170 pixels, so that's just a waste of memory: Loading all those excess pixels costs memory, and scaling them down to the actual resolution costs memory on top.

Dear Dave,

yes, you are right. Thank you for being patient with us.

We have re-sized the larger files.

Instead of 73MB, the files now all amount to ~ 20MB.

As soon as the script „pause1min.iqx“ is finished, the script still aborts (so basically, between scripts) - this position, from my runs, is the most frequent one. Yesterday I had one run, where the run aborted before „updating_position_1_kids_short_iq7_noprog.iqx“.

The first error is from „introduction.iqx“ which throws:

Error playing /data/user/0/com.millisecond.InquisitPlayer7/cache/scripts/75089_bcdf431c3a4d76aed3578abb63aa1b65/instruction.mp3: 0: Failed to open /data/user/0/59com.millisecond.InquisitPlayer7/cache/scripts/75089_bcdf431c3a4d76aed3578abb63aa1b65/instruction.mp3'. Line 169, File SoundPlayer_android.cpp

After that, for the script „lang_block.iqx“ Inquisit says the .mp3-files for this script cannot be found.

Both scripts are called within "_gc_klass1_sprache.iqx", so right after „pause1min.iqx“.

I tried attaching two JPEGs to this post, but the upload did not work. So here are two links to the pictures with the error messages: (Please note that everything above those errors is warnings (e.g., „The ‚responseTrial‘ attribute has been deprecated and may not be supported in a future release.“)

https://ibb.co/b5sZhpp1
https://ibb.co/2wmGW36

Down below you can find our batch.

Of course you will not be able to check all our scripts - I was rather thinking that maybe there is something that we could change within the batch file that we are unaware of.

This is the tablet I used:

Samsung Galaxy Tab A7
Model Number: SM-T500

Software:
Android 12
T500XXS8CXG1

___

<batch>
/ file = "stop.iqx"
/ file = "binding_position_1_kids_short_iq7_noprog.iqx"
/ file = "binding_stimulus_1_kids_short_iq7_noprog.iqx"
/ file = "updating_position_1_kids_short_iq7_noprog.iqx"
/ file = "metakog_wmc_iq7.iqx"
/ file = "ratingscale_wmc_iq7.iqx"
/ file = "pause1min.iqx"
/ file = "_gc_klasse1_sprache.iqx"
/ file = "_metakog_gc_iq7_sprache.iqx"
/ file = "ratingscale_sprache.iqx"
/ file = "pause2min.iqx"
/ file = "_gc_klasse1_schriftsprache.iqx"
/ file = "_metakog_gc_iq7_schriftsprache.iqx"
/ file = "ratingscale_schrift.iqx"
/ file = "pause1min.iqx"
/ file = "_gc_klasse1_mathe.iqx"
/ file = "_metakog_gc_iq7_mathe.iqx"
/ file = "ratingscale_mathe.iqx"
</batch>

Please note that the script "_gc_klass1_sprache.iqx" contains the following:

<include>
/ file = "setup.iqx"
/ file = "lang_items.iqx"
/ file = "stimuli.iqx"
/ file = "trials.iqx"
/ file = "blocks.iqx"
/ file = "lang_block.iqx"
/ file = "lang_placeholders.iqx"
/ file = "introduction.iqx"
</include>

<expt main>
/ blocks = [1 = lang_instruction; 2 = lang]
/ onexptbegin = [
    values.startTime = script.currenttime;

    if(parameters.debug) {
        if(parameters.maxInstructionTime != -1) {
            values.instructionTime = parameters.maxInstructionTime * 1000;
        }
    }
    else {
        text.debugTXT.skip = true;
        clock.blocktimer.skip = true;
    }
    
    values.allowedTime = parameters.allowedTime * 1000; //- values.instructionTime;

]
/ onexptend = [
    values.endTime = script.currenttime;
]

</expt>


<summarydata>
/ columns = (values.startTime, block.lang.timestamp, values.endTime)
</summarydata>

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 107K
pinguin - 4/24/2025
Dave - 4/24/2025
pinguin - 4/24/2025
P.S.: Do you think it could help to split the single test scripts into several parts? (i.e., instead of having one script for "language-related task", we would have two scripts for it.)

If you want me to look at something, you need to be more specific. "[We could] progress a bit further through the batch, which was encouraging at first. However, we're still encountering script terminations at a certain point." doesn't tell me much. How far? Which scripts terminate and when? Always the same scripts? Always at the same point? Or different scripts at different points? What are the error messages, if any? I don't have time to review more than a dozen scripts, involving more than 1800 external files (images, sounds, etc.), on a hunch.

Simple optimizations you can do to cut down on memory usage: Re-size excessively large images. For example, d_sh_021_b.jpg alone has a resolution of 5665 x  4170 pixels and weighs in at almost 3MB on disk. In memory, that will be much larger. I doubt that any of the screens you are using comes close to having a resolution of 5665 x 4170 pixels, so that's just a waste of memory: Loading all those excess pixels costs memory, and scaling them down to the actual resolution costs memory on top.

Dear Dave,

yes, you are right. Thank you for being patient with us.

We have re-sized the larger files.

Instead of 73MB, the files now all amount to ~ 20MB.

As soon as the script „pause1min.iqx“ is finished, the script still aborts (so basically, between scripts) - this position, from my runs, is the most frequent one. Yesterday I had one run, where the run aborted before „updating_position_1_kids_short_iq7_noprog.iqx“.

The first error is from „introduction.iqx“ which throws:

Error playing /data/user/0/com.millisecond.InquisitPlayer7/cache/scripts/75089_bcdf431c3a4d76aed3578abb63aa1b65/instruction.mp3: 0: Failed to open /data/user/0/59com.millisecond.InquisitPlayer7/cache/scripts/75089_bcdf431c3a4d76aed3578abb63aa1b65/instruction.mp3'. Line 169, File SoundPlayer_android.cpp

After that, for the script „lang_block.iqx“ Inquisit says the .mp3-files for this script cannot be found.

Both scripts are called within "_gc_klass1_sprache.iqx", so right after „pause1min.iqx“.

I tried attaching two JPEGs to this post, but the upload did not work. So here are two links to the pictures with the error messages: (Please note that everything above those errors is warnings (e.g., „The ‚responseTrial‘ attribute has been deprecated and may not be supported in a future release.“)

https://ibb.co/b5sZhpp1
https://ibb.co/2wmGW36

Down below you can find our batch.

Of course you will not be able to check all our scripts - I was rather thinking that maybe there is something that we could change within the batch file that we are unaware of.

This is the tablet I used:

Samsung Galaxy Tab A7
Model Number: SM-T500

Software:
Android 12
T500XXS8CXG1

___

<batch>
/ file = "stop.iqx"
/ file = "binding_position_1_kids_short_iq7_noprog.iqx"
/ file = "binding_stimulus_1_kids_short_iq7_noprog.iqx"
/ file = "updating_position_1_kids_short_iq7_noprog.iqx"
/ file = "metakog_wmc_iq7.iqx"
/ file = "ratingscale_wmc_iq7.iqx"
/ file = "pause1min.iqx"
/ file = "_gc_klasse1_sprache.iqx"
/ file = "_metakog_gc_iq7_sprache.iqx"
/ file = "ratingscale_sprache.iqx"
/ file = "pause2min.iqx"
/ file = "_gc_klasse1_schriftsprache.iqx"
/ file = "_metakog_gc_iq7_schriftsprache.iqx"
/ file = "ratingscale_schrift.iqx"
/ file = "pause1min.iqx"
/ file = "_gc_klasse1_mathe.iqx"
/ file = "_metakog_gc_iq7_mathe.iqx"
/ file = "ratingscale_mathe.iqx"
</batch>

Please note that the script "_gc_klass1_sprache.iqx" contains the following:

<include>
/ file = "setup.iqx"
/ file = "lang_items.iqx"
/ file = "stimuli.iqx"
/ file = "trials.iqx"
/ file = "blocks.iqx"
/ file = "lang_block.iqx"
/ file = "lang_placeholders.iqx"
/ file = "introduction.iqx"
</include>

<expt main>
/ blocks = [1 = lang_instruction; 2 = lang]
/ onexptbegin = [
    values.startTime = script.currenttime;

    if(parameters.debug) {
        if(parameters.maxInstructionTime != -1) {
            values.instructionTime = parameters.maxInstructionTime * 1000;
        }
    }
    else {
        text.debugTXT.skip = true;
        clock.blocktimer.skip = true;
    }
    
    values.allowedTime = parameters.allowedTime * 1000; //- values.instructionTime;

]
/ onexptend = [
    values.endTime = script.currenttime;
]

</expt>


<summarydata>
/ columns = (values.startTime, block.lang.timestamp, values.endTime)
</summarydata>

I don't see those MP3s uploaded to your web experiment, so that's why they're not found.
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 107K
Dave - 4/24/2025
pinguin - 4/24/2025
Dave - 4/24/2025
pinguin - 4/24/2025
P.S.: Do you think it could help to split the single test scripts into several parts? (i.e., instead of having one script for "language-related task", we would have two scripts for it.)

If you want me to look at something, you need to be more specific. "[We could] progress a bit further through the batch, which was encouraging at first. However, we're still encountering script terminations at a certain point." doesn't tell me much. How far? Which scripts terminate and when? Always the same scripts? Always at the same point? Or different scripts at different points? What are the error messages, if any? I don't have time to review more than a dozen scripts, involving more than 1800 external files (images, sounds, etc.), on a hunch.

Simple optimizations you can do to cut down on memory usage: Re-size excessively large images. For example, d_sh_021_b.jpg alone has a resolution of 5665 x  4170 pixels and weighs in at almost 3MB on disk. In memory, that will be much larger. I doubt that any of the screens you are using comes close to having a resolution of 5665 x 4170 pixels, so that's just a waste of memory: Loading all those excess pixels costs memory, and scaling them down to the actual resolution costs memory on top.

Dear Dave,

yes, you are right. Thank you for being patient with us.

We have re-sized the larger files.

Instead of 73MB, the files now all amount to ~ 20MB.

As soon as the script „pause1min.iqx“ is finished, the script still aborts (so basically, between scripts) - this position, from my runs, is the most frequent one. Yesterday I had one run, where the run aborted before „updating_position_1_kids_short_iq7_noprog.iqx“.

The first error is from „introduction.iqx“ which throws:

Error playing /data/user/0/com.millisecond.InquisitPlayer7/cache/scripts/75089_bcdf431c3a4d76aed3578abb63aa1b65/instruction.mp3: 0: Failed to open /data/user/0/59com.millisecond.InquisitPlayer7/cache/scripts/75089_bcdf431c3a4d76aed3578abb63aa1b65/instruction.mp3'. Line 169, File SoundPlayer_android.cpp

After that, for the script „lang_block.iqx“ Inquisit says the .mp3-files for this script cannot be found.

Both scripts are called within "_gc_klass1_sprache.iqx", so right after „pause1min.iqx“.

I tried attaching two JPEGs to this post, but the upload did not work. So here are two links to the pictures with the error messages: (Please note that everything above those errors is warnings (e.g., „The ‚responseTrial‘ attribute has been deprecated and may not be supported in a future release.“)

https://ibb.co/b5sZhpp1
https://ibb.co/2wmGW36

Down below you can find our batch.

Of course you will not be able to check all our scripts - I was rather thinking that maybe there is something that we could change within the batch file that we are unaware of.

This is the tablet I used:

Samsung Galaxy Tab A7
Model Number: SM-T500

Software:
Android 12
T500XXS8CXG1

___

<batch>
/ file = "stop.iqx"
/ file = "binding_position_1_kids_short_iq7_noprog.iqx"
/ file = "binding_stimulus_1_kids_short_iq7_noprog.iqx"
/ file = "updating_position_1_kids_short_iq7_noprog.iqx"
/ file = "metakog_wmc_iq7.iqx"
/ file = "ratingscale_wmc_iq7.iqx"
/ file = "pause1min.iqx"
/ file = "_gc_klasse1_sprache.iqx"
/ file = "_metakog_gc_iq7_sprache.iqx"
/ file = "ratingscale_sprache.iqx"
/ file = "pause2min.iqx"
/ file = "_gc_klasse1_schriftsprache.iqx"
/ file = "_metakog_gc_iq7_schriftsprache.iqx"
/ file = "ratingscale_schrift.iqx"
/ file = "pause1min.iqx"
/ file = "_gc_klasse1_mathe.iqx"
/ file = "_metakog_gc_iq7_mathe.iqx"
/ file = "ratingscale_mathe.iqx"
</batch>

Please note that the script "_gc_klass1_sprache.iqx" contains the following:

<include>
/ file = "setup.iqx"
/ file = "lang_items.iqx"
/ file = "stimuli.iqx"
/ file = "trials.iqx"
/ file = "blocks.iqx"
/ file = "lang_block.iqx"
/ file = "lang_placeholders.iqx"
/ file = "introduction.iqx"
</include>

<expt main>
/ blocks = [1 = lang_instruction; 2 = lang]
/ onexptbegin = [
    values.startTime = script.currenttime;

    if(parameters.debug) {
        if(parameters.maxInstructionTime != -1) {
            values.instructionTime = parameters.maxInstructionTime * 1000;
        }
    }
    else {
        text.debugTXT.skip = true;
        clock.blocktimer.skip = true;
    }
    
    values.allowedTime = parameters.allowedTime * 1000; //- values.instructionTime;

]
/ onexptend = [
    values.endTime = script.currenttime;
]

</expt>


<summarydata>
/ columns = (values.startTime, block.lang.timestamp, values.endTime)
</summarydata>

I don't see those MP3s uploaded to your web experiment, so that's why they're not found.

P.S.: Quick tip. If, as here, you have many fo upload, the simple way is to just ZIP them all up on your computer, then upload the ZIP. The server will extract the ZIP.
pinguin
pinguin
Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)
Group: Forum Members
Posts: 21, Visits: 91
Hi Dave,

you were right - the files were online, but must have gotten lost, when we were editing the experiment. Our mistake.
Good news: Now it is working and we can finish the complete test battery.
The only other thing that is still pending is the issue with the headphones on those Samsung tablets.
Many thanks for your patience.

Best, 

pinguin
pinguin
pinguin
Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)Associate Member (98 reputation)
Group: Forum Members
Posts: 21, Visits: 91
Hi Dave,

Thank you for your continued commitment to helping us get our experiment up and running—we really appreciate your support.

On the Samsung Galaxy Tab A7s, the tests are now running smoothly.

However, we did some more testing with other devices and we are still running into issues with our battery.

On an iPad Pro (2021), the error was:
pause1min.iqx - Unable to load video. Error playing 'Pause_1min.mp3'. Format not supported on this device.
—> This seems odd, as this iPad has 8GB of RAM.

The same was true for a Lenovo IdeaPad 5 and an iPad Air (5th generation).

On another iPad (approximately 2018), the battery aborted right before the script „_gc_klasse1_mathe.iqx“. Unfortunately, our student assistant did not photograph the error message. As „pause1min.iqx“ is presented right before this script again, maybe it has something to do with this - although this was at a much later position of the batch.

We have more questions and would appreciate your input:

1) Is RAM really the issue?
2) Is there something wrong with the file „Pause_1min.mp3“?
3) Is there any other way that we could adjust our programming so that it runs more stable, independent of the end device we will be using?
4) Do you see any more potential in shrinking any other files? Should we change the format of any of our pictures and/or sound files?
5) Is there any other way for us to run our tests? For example, if we used two separate links (i.e., two uploaded experiments) and we started with EXP1 - can we somehow transfer the subject IDs to EXP2 without typing those in manually on each given tablet?

In short: How can we keep the barrel from overflowing?

This is the most recent link: https://mili2nd.eu/eljc

Again, thank you for your support.

Best,

pinguin
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search