Miu’s connections at Nitroglobus in Second Life

The Annex, Nitroglobus Roof Gallery, July 2024: Miu (MuiMira)

In introducing the July / August exhibition at the Annex of her Nitroglobus Roof Gallery, Dido notes that she Established the extension to her gallery with the goal of providing young, talented artists an opportunity to showcase their work, but she feels she have not always succeeded in this goal. I would, with love and respect to Dido, dispute this.

One of the major attractions of Nitroglobus is Dido’s ability to provide an opportunity for new talents in Second Life to display their art. Whether it is via the Annex or within the main galley, Dido has consistently been able to showcase the work of people who have subsequently gone on to be highly regarded within the broader Second Life arts community.  It is this innate ability to recognise talent – and to challenge and stretch the abilities of established artists beyond their comfort zones – that makes Dido one of the most skilled curator / patrons of the ats in SL, and Nitroglobus one of the foremost galleries in-world for hosting consistently engaging and often personal exhibitions.

The Annex, Nitroglobus Roof Gallery, July 2024: Miu (MiuMira)

Such is the case with Connections, which opened on July 19th, 2024 within the Annex. This is a small but utterly engaging collection of pieces offered by Miu (MiuMira) in what is her first public exhibition of her photography in-world, although she has already gathered deserved recognition on Flickr. Her work mixing colour and black-and-white photography, predominantly avatar-centric and showing a highly skilled eye and touch for post-processing.

Connections is very much a themed exhibition both in focus and tone. All of the images are black-and-white, the majority with highly minimalist backgrounds (and those that do have a visible background utilise a considered depth of field to ensure it does remain a backdrop, rather than becoming a distracting focus for the eyes), whilst the overall tone is set by a quote from Margaret Atwood:

In the end, we all become stories.

–  Moral Disorder and Other Stories by Margaret Atwood

First published in 2008, Moral Disorders is an exploration of the interconnectedness of lives and life, the stories within it winding through the lives of parents and children, of siblings and friends, of mentors and enemies from the 1930s through the the present, offering – if you will – an album of photographs written in words, spanning the decades from the 1930s through to the present.

The Annex, Nitroglobus Roof Gallery, July 2024: Miu (MiuMira)

It’s a fitting quote and fitting selection of stories, perfectly reflecting the way Connections offers a visual essay concerning the relationship of the connections between mind, heart and emotions which give the passage of life meaning to each and every one of us. Each image offers an expression of one or all of these aspects of experience, offering a set of images which, as Miu notes herself,  reflect the fact that, “We are the authors of our lives, creating our own beautiful adventures and deciding on the main characters within our book”.

For me, more than this, is the fact that Connections reads as a very personal story: throughout the nine images – and with encouragement from Dido – Miu gently reveals how her avatar is very much the digital embodiment of who she is, and how she embraces her own moods, sensitivities and emotions.

Take, for example, Connections (4); the use of the shawl in both hiding most of Miu’s features, the over-the shoulder revealing just a hint of nose and mouth, suggest a person given to a certain shyness and possible introverted self-reflection. However, the shawl also draws attention to the partially-visible tattoo Never Give Up. Even without the rose which tops it (as seen in other images) being visible, the statement speaks to an inner strength, to embraces the lessons of life and the ups and downs of emotions and use them as a means to learn and grow, and also speaks to an ability to support and love.

The Annex, Nitroglobus Roof Gallery, July 2024: Miu (MiuMira)

In this, Miu’s avatar bears much that reflects her own nature, expressions given form through tattoos and via her mode of dress and choice of looks. They combine to tell a story of a person who is very at ease with herself, her heart and her emotions, and who can freely give expression to her inner self, writing the story of her life with each passing day.

A genuinely impressive and engaging collection, and a superb debut exhibition. Highly recommended, and congratulations to Miu and Dido.

SLurl Details

2024 week #29: SL CCUG summary

Nong Han Kumphawapi, June 2024 – blog post

The following notes were taken from my audio recording and chat log transcript of the Content Creation User Group (CCUG) meeting held on Thursday, July 18th, 2024.

Meeting Purpose

  • The CCUG meeting is for discussion of work related to content creation in Second Life, including current and upcoming LL projects, and encompasses requests or comments from the community, together with related viewer development work. This meeting is held on alternate Thursdays at Hippotropolis.
  • In regards to meetings:
    • Dates and times are recorded in the SL Public Calendar.
    • Commence at 13:00 SLT on their respective dates.
    • Are conducted in a mix of Voice and text chat.
    • Are open to all with an interest in content creation.
  • The notes herein are a summary of topics discussed and are not intended to be a full transcript of the meeting.

Official Viewers Status

  • Release viewer: version 7.1.8.9375512768, formerly the Graphics Featurettes RC viewer dated June 5 and promoted June 10th.
  • Release channel cohorts (please see my notes on manually installing RC viewer versions if you wish to install any release candidate(s) yourself).
    • WebRTC Voice RC, version 7.1.9.9688089989, July 1.
    • Atlasaurus RC (object take options; improved MOAP URL handling), version 7.1.9.9620320242, June 27.
    • Maintenance B RC (usability updates / imposter changes) 7.1.9.9555137545, June 21.
    • Maintenance C RC (reset skeleton in all viewers), version 7.1.9.9469671545, June 14.
  • Project viewers:
    • None.

WebRTC Voice Update

Not strictly a Content Creation tool / subject, but of import to SL as a whole.

Summary

  • A project intended to move Second Life away from reliance on the Vivox voice service and plug-in, and to using the WebRTC communications protocol (RTC=”real-time communication”). Roxie Linden is leading this work.
  • Key benefits:
    • WebRTC supports a wide range of real-time communications tools in common use (e.g. Google Meet), supporting audio, video and data communications, and is thus something of a “standard” approach.
    • Offers a good range of features: automatic echo cancellation, better noise cancellation and automatic gain control, much improved audio sampling rates for improved audio quality.
    • Opens the door to features and capabilities to voice services which could not be implemented whilst using Vivox.
  • In addition:
    • LL are are of some of the security concerns around WebRTC voice (e.g. risk of eavesdropping, exposure of users’ IP addresses, etc), and is actively working to block these through the use of an internal proxy service.
    • LL will be looking to Linux devs to help give feedback on how well WebRTC is working on their Linux viewers
  • Feature requests for WebRTC should be made via the WebRTC board on the SL Feedback Portal.

Status

  • There is a Release Candidate viewer available on the Alternate Viewers page. Thus is expected to be the next viewer to be promoted to de facto release status.
    • This promotion is liable to occur ahead of the planned simulator deployments (see below), allowing time for TPVs to adopt the code.
  • Currently, LL is looking at August for a potential deployment across all of SL on the server-side.
    • This will follow the usual approach of roll-out to the simulator RC channels first, then to the SLS Main channel.
    • As a result, there will be some short-term issues around peer-to-peer, Group and ad-hoc voice connections between those on regions running the two different voice services (Vivox and WebRTC).
    • Depending on how the deployment goes (e.g. first to a single RC, then multiple RCs, then the SLS Main channel), it is hoped that any such issues will only be for around 2 weeks.
  • Viewers adopting the WebRTC code prior to or during this deployment period will be able to process both WebRTC and Vivox voice, so outside of the possible short-term issues during the back-end deployment mentioned above, voice services should not be interrupted for users.

Graphics / glTF

Transmission / IOR

  • Geenz Linden continues to work on Transmission and Index of Reflection (IOR). This will provide:
    • Both refraction and “blurry” refraction suitable for things like frosted glass surfaces.
    • Dispersion, allowing chromatic aberration, allowing the RGB channels to “separate out” based on a certain factor.
    • Volume, allowing an object surface to be tinted at different surface thicknesses.
  • There are still some bugs to be resolved with this work, after which it will be folded into the main viewer development branch, but is currently tied to the work on mesh import, but may be separated out.

PBR Terrain Painting

  • This is the next planned project for Cosmic Linden, and is in the very early stages of planning, so things are subject to potential change.
  • Currently, the thinking is:
    • The four PBR materials currently used for PBR terrain would remain available for use / painting.
    • The painting element would allow a user to define how these materials are mixed (via a paint map), rather than having to rely purely on the the existing height map.
    • The paint map is likely to initially be on the basis of one blended texture at region level (not parcel), although the resolution of the texture is still TBA at the time of writing.
    • The permissions for terrain painting will be based on ability to edit the height map (if you can alter the latter through the Region settings, then you’ll be able to use the terrain painting capability).
  • This effectively means:
    • Users who have terrain editing permissions will be able to use the existing terrain texture system, using the height map (terrain elevation) to define which textures are visible, and the “blending” between them. or – if provided at the region level – access the PBR terrain paint map and use that to define the terrain (e.g. where grass, dirt, rock, etc., appears),  without having to use terrain elevation changes.
    • Use of the paint map will still be based of the X,Y positioning of terrain (as with the current height map), but all allow for actual blending of materials, rather than just creating transitional noise between textures set for different elevations, as with the height map.
  • Terrain painting will be a significant departure in how terrain texturing has been managed, requiring a new entity to be introduced. This is also still being thought through, but it is unlikely it will be a new asset type stored on the asset servers.
  • LL prefer to limit terrain painting to the four available slots at region revel, rather than allowing fully customisable swatches / slots at parcel level, as the latter presents “non-trivial issues” for terrain texture handling /loading.
  • Two further ideas being discussed in relation to terrain but not on the implementation road map are:
    • Implementing a means by which a prim can act as if it is part of the terrain, and inheriting the materials of the terrain on which it is placed, whilst allowing the geometry of the prim to be still be manipulated.
    • Instead of using terrain, provide a means by which “something else” (something created external to SL and then imported) as terrain. However, it idea is described as “more pie in the sky” thinking.

glTF Scene Import

  • No update, as Runitai Linden is out of the office.

(Non-Ambient) Lighting

  • Punctual lights is a glTF extension that has recently been folded into the main specification, defining the use of lighting sources (house light, table lamps, street lights, etc.).
  • Geenz Linden is working to implement punctual lights, but they will be tied to the node hierarchy for glTF scene imports.
  • Longer term, they hope to use the extension to enable punctual lights to render shadows (so, if your table lamp is a punctual light, it will cast shadows).
    • However, the extension is currently ambiguous as to what parameters should be used to define/ constrain such shadows, so this aspect of the work is liable to take longer to achieve, and may be dependent upon how other companies implement punctual lighting shadows.
    • In the meantime, Geenz does have some ideas on handling shadows from point and spotlights, which might leverage the work done on reflection probes.
  • In discussing the adoption of glTF punctual lighting, Geenz further noted:
    • There are some notable differences between glTF lighting and SL’s physically-based lighting model and also with the capabilities of lighting projectors as they are currently in SL.
    • As such, trying to unify punctual lighting with SL’s existing lighting / projectors could lead to content breakage.
    • Because of this, it is likely that as punctual lighting ins introduced, the existing lighting system will cease to be significantly enhanced, and pretty much left as-is, with the focus shifting to enhancing the punctual lighting system.

General Notes

  • Cosmic has also been completing work on support for PBR terrain texture transforms. This is s subset of the texture manipulation options (scale, offset, rotation, etc.), available with texturing prims, and is per material.
  • A request has been received to get planar face alignment to be functional for PBR, and this is defined as something the Lab wants to resolve “soon”.
  • Order-independent transparency is not something on the current road map, as it is seen as “too performance costly” to implement.
  • There is some potential for performance improvements / optimisations for mirrors.
    • Currently, whilst the mirror surface is planar, the reflection probe generates reflections for a full 180º in front of the mirror, not all of which might be required.
    • It might therefore be possible to adjust this to angles more appropriate for such viewers, making them slightly more performant – but the improvement will not be huge.
    • It should be remembered that mirrors can also be turned off (or have the update rate reduced) through Preferences by those feeling a mirror they are closes to and is active is too big a performance hit.
  • There have been multiple calls for Linden Water to be restored to its pre-PBR looks. Geenz noted that while making improvements to the appearance of Linden Water are not out of the question, the fact that Linden Water is not glTF compliant makes what can be done more difficult.

Next Meeting

† The header images included in these summaries are not intended to represent anything discussed at the meetings; they are simply here to avoid a repeated image of a gathering of people every week. They are taken from my list of region visits, with a link to the post for those interested.

Grauland’s Corsair Island in Second Life

Grauland / Corsair Island, July 2024 – click any image for full size

Update, July 20th: Jim dropped me a line of the lack of soundscape noted below – apparently it was an easily-done oversight, and has now been rectified, so be sure to have local sounds enabled when visiting!

About a couple of weeks ago, if memory serves, I bounced into Jim Garand’s Grauland on one of my periodic visits to see what might have changed since my last visit. At the time, Jim appeared to be smack in the middle of redressing his Homsetead region – also home to his M1 Poses store – and so I pretty rapidly bounced my way back out again to allow him to finish things off, but with my curiosity well and truly piqued. I had intended to return just a few days later, but life had other plans, and so have only just made it back.

Jim has a habit of pulling together settings that are a mix of landscape, art, architecture and narrative. Sometimes they are themed, as with the last edition of the region I blogged about – see: Grauland’s Last Trees in Second Life, or they may be inspired by an actual location; at other times they might be more nuanced in ideas and themes, and at others still, others they are simply offered as opportunities for photography and art. Grauland / Corsair Island appears to fall within the latter two groups, offering hints of a theme here and there whilst in general offered a highly photographic setting with a lean towards artistic expression.

Grauland / Corsair Island, July 2024

The setting’s little  – Corsair Island – might perhaps suggest the idea of pirates, sailing ships, treasure and all that; however, this is not the case. Rather, the name appears to be taken from the World War 2 vintage Vought F4F Corsair single-seat fighter displayed almost as a museum piece towards the south-west corner of the region. Sitting with wheels on its own of concrete apron, a separate square of the same close by hosting a mighty sea anchor which might have hailed from a WW2 battleship of aircraft carrier, the Corsair looks out to sea from flat-topped table of rock with a broad throw of sand curving around its base to form a golden beach.

The local vegetation suggests this is a tropical island, one amidst a small group, with the Corsair itself immediately raising thoughts of the Pacific conflict of WW2. This is perhaps further enhanced by the general layout of the island, which suggest it may have once been an airbase for a land-based contingent of US Navy aviators and their aircraft. The road running north-to-south might have at one time been a runway, and whilst the sound side of the island is now in part excavated and home to free-standing art installations, there is a chance that it may have once been flat and home to a second runway.

Grauland / Corsair Island, July 2024

Of course, the huge concrete bulk of a road tunnel rising from the sea and with its  darkened maw open to either disgorge or swallow road vehicles at the north end of the road tends to suggest that perhaps this is a place much closer to the US mainland, but it does not entirely eliminate the dance of the imagination in thoughts of airbases from past conflicts.

In fact, the placement of some of the buildings alongside the road might also add to the idea, their position suggesting they’ve replaced what may have been an aircraft dispersal area and / or hangers and workshops. But again, in opposition to that, the presence of the gas station and motel with its slab-sided beachfront cabins again give the impression this is a place much closer to the US mainland, and one which sees a degree of vacation traffic passing back and forth through the tunnel; so I’ll leave it to you to form your own backstory for the setting.

Grauland / Corsair Island, July 2024

The southern side of the island is given over to art installations. Three of these are bound the draw attention, possibly at the expense of the fourth. The latter take the form of a series of disks, rings and cylinder elements arranged in a manner that presents a series of spaces that can be walked around and through. The three main installations, meanwhile, are a mix of the familiar and the new.

Many of Jim’s past installation have included the motif of standing blocks, generally in geometric arrangements. These have frequently been in the form of cubes resembling block of cement, but here Jim includes a pyramid to the eastern end of the island with its flanks being climbed by ranks of stone uprights in a design by Alex Bader. Next to this is the excavated area, walled by heavy blocks and its floor tiled. Within it stands a series of walls forming something of a maze-like area, squares of blue tiles mounted on the wall sections like windows. The maze isn’t hard – it’s not intended to be – and has a roofed platform at its centre, served by two stairways.

Grauland / Corsair Island, July 2024

Alongside of this maze, sitting between it and the southern beach is an area suggestive of ancient ruins fronted by a large bust of a female torso. Steps down to a lower area passing under the “ruins” provides access to the beach. To the north of the island, hidden among rock formations, is a formal garden area watched over by Buddha, Psyche and a reproduction of Horatio Greenough’s (1805-1852) Arno the Greyhound as found at Boston’s Museum of Fine Arts.

East of the garden and most directly reached via a winding paved driveway that links it to the main road, is a large warehouse style of building sitting walled-off from the rest of the island, giving the impression it is separate to the rest. It is dressed as a private home and not for public access, but the gates guarding it open on approach and there is no security system in evidence – so I have no idea if it is meant to be public or private, so I remained circumspect.

Grauland / Corsair Island, July 2024

As always, this iteration of Grauland is photogenic and attractive, holding a lot to see (not all of which is mentioned here). It is strangely devoid of any soundscape (either that, or my viewer simply was not registering local sounds during my visit!), but to make up for this (if it is the case), a gift from Jim is available for visitors at the landing point.

SLurl Details

Stevie’s serenity: an exploration of Second Life

Kondor Art Garden, July 2024: Steive Basevi

It was back to Kondor Art Centre for me once more, this time for a visit to the Art Garden to witness a new exhibition of Second Life centric art by Stevie Basevi.

Stevie is probably best known as the owner of the Sanctuary RP Community, which operates across three regions offering a mix of themed role play and combat. Outside of this, she has worked extensively with the American Cancer Society (14 years) and One Billion Rising, and is a member of The Seanchai Library’s Special Projects Creative team.

By her own admission, Stevie has only relatively recently become immersed in Second Life photography. However, she has quickly and deservedly gained recognition for her approach and style, and has been featured in numerous exhibitions, and her range covers both avatar studies – she has worked as a fashion photographer of BOSL – and SL landscapes.

Kondor Art Garden, July 2024: Steive Basevi

She is also, like myself, a Second Life traveller, capturing memories of the places she visits as photographs; and with Capturing Serenity, An Exploration of SL, she provides a pleasurable taste of both her travels and her work in this latter regard.

I wander the grid in search of scenes that connect my emotions and feelings from my eyes to my heart. The things that I photograph, I don’t photograph them because I wanted an image of a particular thing. I went to the regions, looked around and waited for something to connect with me, to call out for me to come, visually commune, and make my heart sing.

– Stevie Basevi

Kondor Art Garden, July 2024: Steive Basevi

The exhibition in the Kondor Art Garden presents twelve pieces by Stevie, all perfectly suited for viewing under a night-time sky setting (as seen here). They reveal a handful of some of Second Life’s most popular public destinations, including Elvion (4 images and a frequent feature in these pages), Sainte Rose sur Mer (4 images, and also featured in these pages), the Karasu Estate (2 images), Blossomvale and Summerville (1 image apiece).

All twelve images are superbly captured, framed and cropped, Stevie using a minimum of post-processing (something I try to do with my images, but not with the same skill as Stevie demonstrates). They are also all finished in colours than emphasise the title of the exhibition, presenting each of the locations at a place evocative of serenity and peace; rich in a sense of nature and the ability for humanity to live in harmony with the natural world.

Kondor Art Garden, July 2024: Steive Basevi

Capturing Serenity, An Exploration of SL officially opens at 12:00 noon on Thursday, July 18th, the opening featuring music by DJ Joss Floss (jossinta). However, the exhibition has already had a soft opening ahead of time, and is available for viewing as of the time of writing this piece.

SL Details

2024 SL SUG meetings week #29 summary

Endless: Antipodes, June 2024 – blog post

The following notes were taken from the Tuesday,  July 16th, 2024 Simulator User Group (SUG) meeting. They form a summary of the items discussed, and are not intended to be a full transcript, and were taken from my chat log. No video this week.

Meeting Overview

  • The Simulator User Group (also referred to by its older name of Server User Group) exists to provide an opportunity for discussion about simulator technology, bugs, and feature ideas.
  • These meetings are conducted (as a rule):
  • Meetings are open to anyone with a concern / interest in the above topics, and form one of a series of regular / semi-regular User Group meetings conducted by Linden Lab.
  • Dates and times of all current meetings can be found on the Second Life Public Calendar, and descriptions of meetings are defined on the SL wiki.

Simulator Deployments

  • The SLS Main channel was restarted on Tuesday, July 16th, 2024.
  • On Wednesday, July 17th:
    • The BlueSteel RC is due to be updated with the summer Fun simulator update, which includes the initial Combat 2 updates from Rider Linden.
    • The remaining RC channels will be restarted.

Upcoming Simulator Updates

The simulator that we currently have on deck is Picnic, I cut that on Friday and should be getting it deployed onto Aditi in the next day or so. Next up is Barbecue. I believe that it already has a find text for notecards in it. I’m going to be taking another shot at llRotateAvatar.

– Rider Linden on upcoming simulator updates

SL Viewer Updates

  • Release viewer: version 7.1.8.9375512768, formerly the Graphics Featurettes RC viewer dated June 5 and promoted June 10th.
  • Release channel cohorts:
    • WebRTC Voice RC, version 7.1.9.9688089989, July 1.
    • Atlasaurus RC (object take options; improved MOAP URL handling), version 7.1.9.9620320242, June 27.
    • Maintenance B RC (usability updates / imposter changes) 7.1.9.9555137545, June 21.
    • Maintenance C RC (reset skeleton in all viewers), version 7.1.9.9469671545, June 14.
  • Project viewers:
    • None.

Simulator-Side Lua(u) Project Update

In Brief

  • Rider Linden reminded people that Thursday, July 25th will be the final meeting of the Combat User Group, and will take the form of a combat session to take place on the Lexington combat region. Those wishing to participate and who have suitable Combat 2 weapons they are willing to share are asked to bring them to the meet-up.
  • As per the most recent (to this meeting) TPVD meeting, the project to replace Vivox Voice with WebRTC communications protocol (RTC=”real-time communication”) will  – subject to third-party viewer readiness – be deployed across the Main grid in August and the switch thrown.
  • Pepper Linden noted LL has deployed some map server changes which fixes issues with region surrounds in tile generation, as well as old stale tiles.
    • Part of this work has involved fixes to the Akamai cache retention period.
    • This should mean that rather than the system caching region tiles for many days and serving them to viewers, it should now only cache up to 12 hours. This means that in a worse case scenario map tiles displayed in the viewer should be no more than 24 hours behind.
    • The request to be able to call up map tiles via their UUIDs (like textures) was again made. This might be in the work queue.
    • Garfield Linden re-iterated his tangential project to bring maps.sl.com up to parity with Maps-in-the-viewer, and make it Mobile friendly. A Leaflets update for this has just been made, and will be expanded upon at the end Web User Group.
  • There is a reported bug in  the core viewer code which causes glTF overrides to be cleared while the cache has not been yet saved by a neighbour region. As the simulator does not resend glTF data after the initial connection, the viewer’s object caches ends up with corrupted glTF cache entries from the affected region.
  • There appears to be an issue within llGetMass(), wherein a objects mass will not remain constant if it is resized and its density changed (via llSetPhysicsMaterial) to compensate. This resulted in an extended discussion on the subjects of mass and density under LSL adjustments.
  • The subject of implementing a variable walk speed on the simulator locomotion graph was again raised – an request raised a number of times at CCUG meetings. This was crossed with a discussion on avatar rotation by LSL in line with Rider’s hopes around llRotate Avatar and controlling avatar motion in general.

† The header images included in these summaries are not intended to represent anything discussed at the meetings; they are simply here to avoid a repeated image of a rooftop of people every week. They are taken from my list of region visits, with a link to the post for those interested.

2024 SL viewer release summaries week #28

Logos representative only and should not be seen as an endorsement / preference / recommendation

Updates from the week through to Sunday, July 14th, 2024

This summary is generally published every Monday, and is a list of SL viewer / client releases (official and TPV) made during the previous week. When reading it, please note:

  • It is based on my Current Viewer Releases Page, a list of all Second Life viewers and clients that are in popular use (and of which I am aware), and which are recognised as adhering to the TPV Policy. This page includes comprehensive links to download pages, blog notes, release notes, etc., as well as links to any / all reviews of specific viewers / clients made within this blog.
  • By its nature, this summary presented here will always be in arrears, please refer to the Current Viewer Release Page for more up-to-date information.
  • Note that for purposes of length, TPV test viewers, preview / beta viewers / nightly builds are generally not recorded in these summaries.

Official LL Viewers

  • Release viewer: version 7.1.8.9375512768, formerly the Graphics Featurettes RC viewer dated June 5 and promoted June 10th.
  • Release channel cohorts (please see my notes on manually installing RC viewer versions if you wish to install any release candidate(s) yourself).
    • No updates.
  • Project viewers:
    • No updates.

LL Viewer Resources

Third-party Viewers

V6-style

  • No Updates.

V1-style

  • Cool VL Viewer Stable branch updated to version: 1.32.2.5 (PBR) on July 12 – release notes.

Mobile / Other Clients

  • No updates.

Additional TPV Resources

Related Links