File:Terraplan7.png
Original file (3,600 × 2,700 pixels, file size: 3.83 MB, MIME type: image/png)
Captions
Summary edit
DescriptionTerraplan7.png |
English: Terrestric fictional exoplanet, that is also habitable, Earth-like |
Date | |
Source | Own work |
Author | Merikanto |
POV-Ray 3.7 source code
Source of basic code is Michale Horvatsh HPlanet
Github https://github.com/mjhorvath/POVRay-Object-Collection/tree/main/HabitablePlanet
https://isometricland.net/blog/pov-ray-projects/
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
This work is licensed under the Creative Commons GNU Lesser General Public
License License. To view a copy of this license, visit
http://creativecommons.org/licenses/LGPL/2.1/ or send a letter to Creative
Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
// Title: Habitable planet texture include v0.50
// Author: Michael Horvath
// Homepage: http://www.geocities.com/Area51/Quadrant/3864/povray.htm
// Created: 2008-02-07
// Last Updated: 2008-11-07
// This file is licensed under the terms of the CC-LGPL.
// +KFI0 +KFF15 +KC
// +k0.5
// Title: Habitable planet texture include v0.50
// Author: Michael Horvath
// Homepage: http://www.geocities.com/Area51/Quadrant/3864/povray.htm
// Created: 2008-02-07
// Last Updated: 2008-11-07
// This file is licensed under the terms of the CC-LGPL.
// +KFI0 +KFF15 +KC
// +k0.5
// ----------------------------------------
//background {color rgb <0.6,0.7,1.0>}
global_settings
{
assumed_gamma 1.0
}
/*
camera
{
// orthographic
location -z * 36000
look_at 0
angle 33
// direction +z * 1024
direction +z
right x * 4 * image_width/image_height
up y * 4
}
- /
/*
sky_sphere
{
pigment
{
gradient y
color_map
{
[0.0 rgb <0.6,0.7,1.0>]
[0.7 rgb <0.0,0.1,0.8>]
}
}
}
- /
/*
light_source
{
-z * 149000000
color rgb 2
parallel
// shadowless
rotate x * 30
rotate y * 30
}
*/
// pov-ray planet: rigded multifractal, isosurfece attempt, atmosphere
- include "colors.inc"
- include "consts.inc"
- include "functions.inc"
global_settings
{
#if (version < 3.7) assumed_gamma 1 #end
max_trace_level 20
}
default { finish { ambient 0.000002 diffuse 0.000001 reflection 0.0 } }
// Units
- declare m = 0.1; // A value of 1 makes the sun's distance ouside POV's numerical domain.
- declare km = 1000*m;
- declare mm = 0.001*m;
// -------------
// -- | Parameters | ------
// -------------
// Earth parameters
- declare TP_EARTH_RADIUS = 6378.137*km;
// Sun parameters
- declare TP_SUN_HEADING = 10;
- declare TP_SUN_ELEVATION = 30;
- declare TP_BRIGHTNESS = 1;
- declare TP_SUN_COLOR = White;
- declare TP_SUN_APPARENT_APERTURE = 0.5; // Commonly admitted value
// Atmosphere parameters
- declare TP_ATMO_BOTTOM = -1*m;
- declare TP_RAYLEIGH_FACTOR = 1;
- declare TP_RAYLEIGH_DENSITY_MAX = 1;
- declare TP_RAYLEIGH_AMOUNT = 1;
- declare TP_ATMO_INTERVALS = 3; // Necessary for good integration
- declare TP_ATMO_SAMPLES = 3;
- declare TP_ATMO_METHOD = 3; // Adaptive
// Default camera parameters
- declare TP_DEFCAM_HEIGHT = 2*m; // Let's be tall
- declare TP_DEFCAM_HEADING = 0;
- declare TP_DEFCAM_ELEVATION = 5; // Let's look up a little
- declare TP_DEFCAM_ANGLE = 40;
// hplanet
- declare HPlanet_Height_Ratio = 0.005;
- declare HPlanet_Water_Ratio = 1/6;
- declare HPlanet_Ice_Ratio = 2/3;
- declare HPlanet_Planet_Radius =TP_EARTH_RADIUS ;
- declare HPlanet_Tilt_Angle = 25;
//#declare HPlanet_Rotate_Angle = clock * 360;
- declare HPlanet_Rotate_Angle = clock * 360+180+90;
- declare HPlanet_View_Angle = 25;
- declare HPlanet_Seed_Value = seed(12345123444);
- declare HPlanet_Show_Mode = 3;
- include "colors.inc"
- include "functions.inc"
- include "rand.inc"
- include "HPlanet_include.inc"
/*
// Earth
- declare _tp_earth = sphere
{
0, TP_EARTH_RADIUS
// pigment {White} // Could be any predefined texture, but normally, the terrain hides the sphere
pigment {
// color rgb <0.9294, 0.7882,0.6863>*0.1
// color rgb <0.9686, 0.8784,0.6627>
function {
f_hetero_mf(x,y,z, 0.9, 1.7,12, 0.5, 0.9, 3 )
// f_hetero_mf(x/1000,y/1000,z/1000, 0.9, 1.7, 12, 0.5,0.9, 3 )
// f_noise3d(x/200,y/200,z/200)
// f_ridge(x/500, y/500, z/500, 1, 8, 1, 3,1,1)
// f_ridged_mf(x/1000, y/1000, z/1000, 0.5, 4, 13, 3, 5, 1)*-1
}
scale TP_EARTH_RADIUS
// agate
// granite
// scale 3
octaves 14
pigment_map
{
[0.0 color rgb <0.0,0.6,0.2>/5 ]
// [0.5 color rgb <0.9,0.8,0.7> ]
[0.5 colour rgb <216, 137, 105>/128 ]
[0.51 color rgb <0.0,0.0,0.3> ]
[1.0 color rgb <0.0,0.0,0.20> ]
}
// Desert0
// scale 4
} // ... pigment
normal {
function {
f_hetero_mf(x,y,z, 0.9, 1.7,12, 0.5, 0.9, 3 ) *0.5
// f_ridged_mf(x/1000, y/1000, z/1000, 0.5, 4, 13, 3, 5, 1)*-1
}
scale TP_EARTH_RADIUS
bump_size 2
// agate
// granite
// scale 3
octaves 14
}
finish {
reflection 0.1
diffuse 0.2
// specular 0.05
// phong 0.05
}
rotate y*180
// translate -TP_EARTH_RADIUS*y
}
- /
- declare fn_Pigm=function {
pigment {
// granite
function {
// f_hetero_mf(x,y,z, 0.9, 1.7,12, 0.5, 0.9, 3 ) *0.5
f_ridged_mf(x/1000, y/1000, z/1000, 0.5, 4, 13, 3, 5, 1)*-1
}
color_map {
[0 color rgb 0]
[1 color rgb 1]
}
}
}
- declare _tp_earth = object {
isosurface {
function {
f_sphere(x, y, z, 1) -
fn_Pigm(x, y, z).gray*0.0001
}
}
pigment {
// color rgb <0,0.35,0>
function {
// f_sphere(x, y, z, 1) -
fn_Pigm(x, y, z).gray
}
pigment_map
{
[0.0 color rgb <0.0,0.6,0.2>/5 ]
// [0.5 color rgb <0.9,0.8,0.7> ]
[0.5 colour rgb <216, 137, 105>/128 ]
[0.51 color rgb <0.0,0.0,0.3> ]
[1.0 color rgb <0.0,0.0,0.20> ]
}
}
finish {
diffuse 0.9
// ambient 1
// emission 1
}
scale TP_EARTH_RADIUS
}
// Sun
- declare TP_SUN_DISTANCE = 10*TP_EARTH_RADIUS; // Far enough. Actual distance in the scene is not very critical, as the light ays are parallel
- declare TP_SUN_RADIUS =
TP_SUN_DISTANCE*tan(radians(TP_SUN_APPARENT_APERTURE/2));
- declare _tp_basic_sun = light_source
{
<0, 0, 0>
color rgb TP_SUN_COLOR*TP_BRIGHTNESS
looks_like {sphere{0, TP_SUN_RADIUS pigment{Yellow} finish {diffuse 0
ambient 1}}}
translate TP_SUN_DISTANCE*z
parallel point_at -z
rotate -TP_SUN_ELEVATION*x
rotate TP_SUN_HEADING*y
}
// Atmosphere: density
- declare TP_BASE_RAYLEIGH_POWER = 6.7; // Constant
- declare _tp_rayleigh_power = TP_BASE_RAYLEIGH_POWER*TP_RAYLEIGH_FACTOR;
//#declare TP_ATMO_THICKNESS = 50*km;
- declare TP_ATMO_THICKNESS = 50*km;
- declare _tp_rayleigh_density = density
{
function
{
//TP_RAYLEIGH_DENSITY_MAX*exp(-_tp_rayleigh_power*(sqrt(x*x+(y+TP_EARTH_RADIUS)*(y+TP_EARTH_RADIUS)+z*z)
//- TP_EARTH_RADIUS - TP_ATMO_BOTTOM)/TP_ATMO_THICKNESS)
TP_RAYLEIGH_DENSITY_MAX*exp(-_tp_rayleigh_power*(sqrt(x*x+(y)*(y)+z*z)
- TP_EARTH_RADIUS - TP_ATMO_BOTTOM)/TP_ATMO_THICKNESS)
}
}
// Atmosphere: scattering color
- declare TP_LAMBDA_RED = 650; // nanometres
- declare TP_LAMBDA_GREEN = 555; // nanometres
- declare TP_LAMBDA_BLUE = 460; // nanometres
- declare TP_RAYLEIGH_SCATTERING_COLOR = rgb
<pow(TP_LAMBDA_BLUE/TP_LAMBDA_RED, 4), pow(TP_LAMBDA_BLUE/TP_LAMBDA_GREEN,
4), 1>;
// Atmosphere: media
- declare _tp_rayleigh_media = media
{
method TP_ATMO_METHOD
intervals TP_ATMO_INTERVALS
samples TP_ATMO_SAMPLES
scattering
{
RAYLEIGH_SCATTERING
color TP_RAYLEIGH_AMOUNT*TP_RAYLEIGH_SCATTERING_COLOR/TP_ATMO_THICKNESS
extinction 1 // The only physically accurate value
}
density {_tp_rayleigh_density}
}
// Atmosphere: shell
- declare _tp_rayleigh_atmosphere = difference
{
sphere {0, TP_EARTH_RADIUS + TP_ATMO_BOTTOM + TP_ATMO_THICKNESS
//translate -TP_EARTH_RADIUS*y
}
sphere {0, TP_EARTH_RADIUS + TP_ATMO_BOTTOM
// translate
//-TP_EARTH_RADIUS*y
}
hollow
pigment {rgbt 1}
interior {media{_tp_rayleigh_media}}
}
// Default camera
- declare _tp_default_camera = camera
{
location 0
angle TP_DEFCAM_ANGLE
right x*image_width/image_height
look_at z
rotate -TP_DEFCAM_ELEVATION*x
rotate TP_DEFCAM_HEADING*y
translate TP_DEFCAM_HEIGHT*y // Could use trace() to make sure we are above the surface. But no terrain yet ...
}
#declare Clouds3x = pigment {
//marble
dents
turbulence 6
octaves 32
lambda 4
// omega 0.75
scale 10
color_map {
[0.0 color White*1.5 filter 0]
[0.05 color White filter 1 ]
[0.95 color White filter 1 ]
[1.0 color White*1.4 filter 0]
}
}
#declare CloudArea = texture {
pigment {
gradient y
// onion
// sine_wave
turbulence 3
octaves 15
scale 1
//lambda 2
// omega 2
scale 5
//scale 0.2
// scale <10,10,10>
pigment_map {
[0.00 Clouds3x scale 0.1]
// [0.00 Clouds3 scale 1]
[0.2 Clouds3x]
[0.50 Clouds3x scale 0.01]
[0.8 Clouds3x scale 1]
[1.00 Clouds3x scale 0.5]
}
}
finish {
ambient 0.000002
diffuse 0.9
// phong 0.1
// specular 0.05
reflection 0.1
}
}
- declare CloudsLayer1 = sphere
{
0, 1.001
texture {
CloudArea
}
}
/*
- declare Planet_Surf1=function(x,y,z)
{
pigment {
HPlanet_Final_pigment
}
}
*/
//--------------------------------------------------------------
- declare Planet1= object {
sphere
{
0, 1
pigment {HPlanet_Final_pigment}
// pigment {color rgb Red}
rotate y * HPlanet_Rotate_Angle
rotate x * HPlanet_Tilt_Angle
rotate y * HPlanet_View_Angle
}
/*
normal {
function {
Planet_Surf1(x,y,z)
}
}
*/
scale HPlanet_Planet_Radius
finish {
diffuse 0.4
// ambient 1
}
}
// object {Planet1}
//sun
object {_tp_basic_sun}
// planet
union {
object {
Planet1
}
//object {_tp_earth
//rotate x*45
//}
object {_tp_rayleigh_atmosphere}
object {CloudsLayer1 scale 1.00001*TP_EARTH_RADIUS }
rotate y*-90
}
//camera {_tp_default_camera}
camera {
location <1,1,0>*1200000
look_at <0,0,0>
// look_at <0,-TP_EARTH_RADIUS,0>
}
HPlanet.inc plugin from github
// Title: Habitable planet texture include v0.50
// Author: Michael Horvath
// Homepage: http://www.geocities.com/Area51/Quadrant/3864/povray.htm
// Created: 2008-02-07
// Last Updated: 2008-11-07
// This file is licensed under the terms of the CC-LGPL.
// +KFI0 +KFF15 +KC
// +k0.5
- local HPlanet_Crackle_pigment = pigment
{
crackle form <1,0,0>
color_map
{
[0 rgbt 0]
[1 rgbt 1]
}
scale 2
sine_wave
}
- local HPlanet_Black_pigment = pigment {color rgbt 0}
- local HPlanet_Granite_pigment = pigment
{
granite
// poly_wave 2
color_map
{
[0 rgbt 0]
[1 rgbt 1]
}
scale 10
scale .5
warp
{
turbulence .75
lambda 3
}
scale .5
}
- local HPlanet_Altitude_function = function
{
pigment
{
HPlanet_Crackle_pigment
#local HPlanet_WarpCount = 0;
#local HPlanet_WarpTotal = 512;
#while (HPlanet_WarpCount < HPlanet_WarpTotal)
warp
{
black_hole VRand_On_Sphere(HPlanet_Seed_Value), Rand_Beta(1,6,HPlanet_Seed_Value)
falloff 3/6
strength 3/6
inverse
}
#local HPlanet_WarpCount = HPlanet_WarpCount + 1;
#end
warp
{
turbulence 1/8 //.125
lambda 3 //3
// octaves 20
// omega SetOmega
}
pigment_map
{
[0 HPlanet_Black_pigment]
[1 HPlanet_Granite_pigment]
}
}
}
- local HPlanet_Altitude_function_b = function
{
pigment
{
function {HPlanet_Altitude_function(x,y,z).transmit}
color_map
{
[0 rgbt 0]
[1 rgbt 1]
}
#local HPlanet_WarpCount = 0;
#local HPlanet_WarpTotal = 1024;
#while (HPlanet_WarpCount < HPlanet_WarpTotal)
warp
{
black_hole VRand_On_Sphere(HPlanet_Seed_Value), Rand_Beta(1,12,HPlanet_Seed_Value)
falloff 6/6
strength 6/6
inverse
}
#local HPlanet_WarpCount = HPlanet_WarpCount + 1;
#end
}
}
- declare HPlanet_Latitude_function = function
{
pigment
{
function {f_ph(x,y,z) / pi}
color_map
{
[0/2 rgbt 1]
[1/2 rgbt 0]
[2/2 rgbt 1]
}
}
}
- declare HPlanet_Altitiude_color_map = color_map
{
[0 rgb <000,000,050,>/255] //blue
[HPlanet_Water_Ratio * 97.5/100 rgb <000,000,050,>/255] //blue
[HPlanet_Water_Ratio * 1/1 rgb <034,180,180,>/255] //teal
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 0/6 rgb <067,084,029,>/255] //light green
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 2/6 rgb <040,066,018,>/255] //dark green
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 3/6 rgb <084,076,037,>/255] //dark tan
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 4/6 rgb <132,114,076,>/255] //light tan
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 4/6 rgb <255,255,255,>/255] //white
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 6/6 rgb <255,255,255,>/255] //white
}
- declare HPlanet_Altitiude_color_map_no_land = color_map
{
[0 rgb <000,000,050,>/255] //blue
[HPlanet_Water_Ratio * 97.5/100 rgb <000,000,050,>/255] //blue
[HPlanet_Water_Ratio * 1/1 rgb <034,180,180,>/255] //teal
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 0/3 rgb <067,084,029,>/255] //light green
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 3/3 rgb <067,084,029,>/255] //light green
}
- declare HPlanet_Altitiude_color_map_no_water = color_map
{
[0 rgb <067,084,029,>/255] //light green
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 0/2 rgb <067,084,029,>/255] //light green
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 1/3 rgb <040,066,018,>/255] //dark green
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 1/2 rgb <084,076,037,>/255] //dark tan
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 2/3 rgb <132,114,076,>/255] //light tan
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 3/3 rgb <132,114,076,>/255] //light tan
}
- declare HPlanet_Altitiude_color_map_ice_only = color_map
{
[0 rgb <132,114,076,>/255] //light tan
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 2/3 rgb <132,114,076,>/255] //light tan
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 2/3 rgb <255,255,255,>/255] //white
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 3/3 rgb <255,255,255,>/255] //white
}
- declare HPlanet_Vegetation_color_map = color_map
{
//rgb <253,234,157,>/255 //blond
[ 00/12 rgb <060,056,029,>/255] //olive
[ 03/12 rgb <060,056,029,>/255] //olive
[ 04/12 rgb <040,066,018,>/255] //dark green
[ 5.5/12 rgb <067,084,029,>/255] //green
[ 06/12 rgb <071,059,037,>/255] //brown
[6.75/12 rgb <180,148,103,>/255] //blond
[8.25/12 rgb <180,148,103,>/255] //blond
[ 09/12 rgb <071,059,037,>/255] //brown
[ 9.5/12 rgb <067,084,029,>/255] //green
[ 12/12 rgb <040,066,018,>/255] //dark green
}
- declare HPlanet_Latitude_pigment = pigment
{
function {HPlanet_Latitude_function(x, y, z).transmit}
color_map {HPlanet_Altitiude_color_map}
}
- declare HPlanet_Vegetation_pigment = pigment
{
function {HPlanet_Altitude_function_b(x, y, z).transmit + 1 - HPlanet_Latitude_function(x, y, z).transmit}
color_map {HPlanet_Vegetation_color_map}
warp
{
turbulence 1/16 //.125
lambda 3 //3
// octaves 20
// omega SetOmega
}
}
- declare HPlanet_Water_pigment = pigment
{
function {HPlanet_Altitude_function_b(x, y, z).transmit}
color_map {HPlanet_Altitiude_color_map_no_land}
}
// version 1
- declare HPlanet_Land_pigment = pigment
{
function {HPlanet_Altitude_function(x, y, z).transmit}
color_map {HPlanet_Altitiude_color_map_no_water}
warp
{
turbulence 1/8 //.125
lambda 3 //3
// octaves 20
// omega SetOmega
}
}
// version 2
- declare HPlanet_Land_pigment = pigment
{
function {min(HPlanet_Altitude_function(x, y, z).transmit + HPlanet_Latitude_function(x, y, z).transmit * HPlanet_Ice_Ratio, 1)}
color_map {HPlanet_Altitiude_color_map_no_water}
warp
{
turbulence 1/8 //.125
lambda 3 //3
// octaves 20
// omega SetOmega
}
}
- declare HPlanet_Average_pigment = pigment
{
average
pigment_map
{
[1 HPlanet_Land_pigment]
[2 HPlanet_Vegetation_pigment]
}
}
// version 1
- declare HPlanet_Ice_pigment = pigment {color rgb 1}
// version 2
- declare HPlanet_Ice_pigment = pigment
{
function {min(HPlanet_Altitude_function(x, y, z).transmit + HPlanet_Latitude_function(x, y, z).transmit * HPlanet_Ice_Ratio, 1)}
pigment_map
{
[0 HPlanet_Average_pigment]
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 2/3 HPlanet_Average_pigment]
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 2/3 color rgb 1]
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 3/3 color rgb 1]
}
warp
{
turbulence 1/8 //.125
lambda 3 //3
// octaves 20
// omega SetOmega
}
}
// version 1
- declare HPlanet_Combined_pigment = pigment
{
function {HPlanet_Altitude_function_b(x, y, z).transmit}
pigment_map
{
[0 HPlanet_Water_pigment]
[HPlanet_Water_Ratio HPlanet_Water_pigment]
[HPlanet_Water_Ratio HPlanet_Land_pigment]
[1 HPlanet_Land_pigment]
}
}
// version 2
- declare HPlanet_Combined_pigment = pigment
{
function {HPlanet_Altitude_function_b(x, y, z).transmit}
pigment_map
{
[0 HPlanet_Water_pigment]
[HPlanet_Water_Ratio HPlanet_Water_pigment]
[HPlanet_Water_Ratio HPlanet_Average_pigment]
[1 HPlanet_Average_pigment]
}
}
// version 1
- declare HPlanet_Final_pigment = pigment
{
function {min(HPlanet_Altitude_function(x, y, z).transmit + HPlanet_Latitude_function(x, y, z).transmit * HPlanet_Ice_Ratio, 1)}
pigment_map
{
[0 HPlanet_Combined_pigment]
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 2/3 HPlanet_Combined_pigment]
// [HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 3/3 HPlanet_Combined_pigment]
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 2/3 HPlanet_Ice_pigment]
[HPlanet_Water_Ratio + (1 - HPlanet_Water_Ratio) * 3/3 HPlanet_Ice_pigment]
}
}
// version 2
//#declare HPlanet_Final_pigment = HPlanet_Combined_pigment;
Licensing edit
- You are free:
- to share – to copy, distribute and transmit the work
- to remix – to adapt the work
- Under the following conditions:
- attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
- share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.
File history
Click on a date/time to view the file as it appeared at that time.
Date/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
current | 13:56, 15 September 2022 | 3,600 × 2,700 (3.83 MB) | Merikanto (talk | contribs) | Uploaded own work with UploadWizard |
You cannot overwrite this file.
File usage on Commons
There are no pages that use this file.
Metadata
This file contains additional information such as Exif metadata which may have been added by the digital camera, scanner, or software program used to create or digitize it. If the file has been modified from its original state, some details such as the timestamp may not fully reflect those of the original file. The timestamp is only as accurate as the clock in the camera, and it may be completely wrong.
PNG file comment |
|
---|---|
File change date and time | 13:51, 15 September 2022 |
Software used |