Quantcast
Channel: ClearScript
Viewing all 2297 articles
Browse latest View live

Source code checked in, #6c75e44d6b0530f56ee6e4ea96a9acdba65af6fe

0
0
Version 5.3.7: Fixed V8ScriptEngine compiled script evaluation result marshaling (Issue #16), added a test for the fix, cleared PYTHONPATH in V8Update. Tested with V8 3.21.2.

Updated Release: ClearScript 5.3 (Aug 22, 2013)

0
0
5.3.7
  • Fixed V8ScriptEngine compiled script evaluation result marshaling (Issue #16).
  • Added a test for the fix.
  • Cleared PYTHONHOME in V8Update.
  • Tested with V8 3.21.2.

5.3.6
  • Added numeric conversion methods in HostFunctions.
  • Fixed bugs affecting numeric arguments and return values.
  • Added tests for bug fixes and new APIs.
  • Tested with V8 3.20.16.

5.3.5
  • Fixed invocation of base interface methods on derived interface targets (Issue #14).
  • Fixed V8 and ClearScript builds on certain non-English locales (Issue #13).
  • Added boxed enum reference canonicalization (Issue #15).
  • PropertyBag enhancements.
  • Lots of minor host integration fixes.
  • Updates for breaking V8 API changes.
  • Several new tests.
  • Tested with V8 3.20.12.

5.3.4
  • Fixed script interruption crash in V8ScriptEngine.
  • Added a test for the fix.

5.3.3
  • Improved V8 error handling (Issue #12).
  • Lowered .NET Framework target to v4.0.
  • Added several tests.
  • Tested with V8 3.19.18.

5.3.2
  • Updates for breaking V8 API changes.
  • V8Update now fetches a tested revision by default.
  • Tested with V8 3.19.9.

5.3.1
  • Fixed JScriptEngine dynamic binding bug (Issue #9).

5.3.0
  • Enhancements for V8 users:
    • V8ScriptEngine now supports script compilation and re-execution.
    • New V8Runtime class allows engines to share resources and compiled scripts.
    • New experimental APIs for restricting and querying V8 memory usage.
    • Improved V8 loading algorithm for simplified deployment.
    • V8Update can now fetch a V8 version that is known to work with ClearScript.
  • New method: ScriptEngine.CollectGarbage().
  • Host item caching improves performance and reduces memory usage.
  • Several new tests.

Released: ClearScript 5.3 (May 21, 2013)

0
0
5.3.7
  • Fixed V8ScriptEngine compiled script evaluation result marshaling (Issue #16).
  • Added a test for the fix.
  • Cleared PYTHONHOME in V8Update.
  • Tested with V8 3.21.2.

5.3.6
  • Added numeric conversion methods in HostFunctions.
  • Fixed bugs affecting numeric arguments and return values.
  • Added tests for bug fixes and new APIs.
  • Tested with V8 3.20.16.

5.3.5
  • Fixed invocation of base interface methods on derived interface targets (Issue #14).
  • Fixed V8 and ClearScript builds on certain non-English locales (Issue #13).
  • Added boxed enum reference canonicalization (Issue #15).
  • PropertyBag enhancements.
  • Lots of minor host integration fixes.
  • Updates for breaking V8 API changes.
  • Several new tests.
  • Tested with V8 3.20.12.

5.3.4
  • Fixed script interruption crash in V8ScriptEngine.
  • Added a test for the fix.

5.3.3
  • Improved V8 error handling (Issue #12).
  • Lowered .NET Framework target to v4.0.
  • Added several tests.
  • Tested with V8 3.19.18.

5.3.2
  • Updates for breaking V8 API changes.
  • V8Update now fetches a tested revision by default.
  • Tested with V8 3.19.9.

5.3.1
  • Fixed JScriptEngine dynamic binding bug (Issue #9).

5.3.0
  • Enhancements for V8 users:
    • V8ScriptEngine now supports script compilation and re-execution.
    • New V8Runtime class allows engines to share resources and compiled scripts.
    • New experimental APIs for restricting and querying V8 memory usage.
    • Improved V8 loading algorithm for simplified deployment.
    • V8Update can now fetch a V8 version that is known to work with ClearScript.
  • New method: ScriptEngine.CollectGarbage().
  • Host item caching improves performance and reduces memory usage.
  • Several new tests.

Updated Release: ClearScript 5.3 (May 21, 2013)

0
0
5.3.7
  • Fixed V8ScriptEngine compiled script evaluation result marshaling (Issue #16).
  • Added a test for the fix.
  • Cleared PYTHONHOME in V8Update.
  • Tested with V8 3.21.2.

5.3.6
  • Added numeric conversion methods in HostFunctions.
  • Fixed bugs affecting numeric arguments and return values.
  • Added tests for bug fixes and new APIs.
  • Tested with V8 3.20.16.

5.3.5
  • Fixed invocation of base interface methods on derived interface targets (Issue #14).
  • Fixed V8 and ClearScript builds on certain non-English locales (Issue #13).
  • Added boxed enum reference canonicalization (Issue #15).
  • PropertyBag enhancements.
  • Lots of minor host integration fixes.
  • Updates for breaking V8 API changes.
  • Several new tests.
  • Tested with V8 3.20.12.

5.3.4
  • Fixed script interruption crash in V8ScriptEngine.
  • Added a test for the fix.

5.3.3
  • Improved V8 error handling (Issue #12).
  • Lowered .NET Framework target to v4.0.
  • Added several tests.
  • Tested with V8 3.19.18.

5.3.2
  • Updates for breaking V8 API changes.
  • V8Update now fetches a tested revision by default.
  • Tested with V8 3.19.9.

5.3.1
  • Fixed JScriptEngine dynamic binding bug (Issue #9).

5.3.0
  • Enhancements for V8 users:
    • V8ScriptEngine now supports script compilation and re-execution.
    • New V8Runtime class allows engines to share resources and compiled scripts.
    • New experimental APIs for restricting and querying V8 memory usage.
    • Improved V8 loading algorithm for simplified deployment.
    • V8Update can now fetch a V8 version that is known to work with ClearScript.
  • New method: ScriptEngine.CollectGarbage().
  • Host item caching improves performance and reduces memory usage.
  • Several new tests.

Updated Wiki: Announcements

0
0

8/22/2013: Version 5.3.7 released.

View the release notes and download the source code here.

8/14/2013: Version 5.3.6 released.

View the release notes and download the source code here.

8/2/2013: Version 5.3.5 released.

View the release notes and download the source code here.

7/10/2013: Version 5.3.4 released.

View the release notes and download the source code here.

7/2/2013: Version 5.3.3 released.

View the release notes and download the source code here.

6/6/2013: Version 5.3.2 released.

View the release notes and download the source code here. Due to issues with several recent V8 trunk releases (build failures, breaking API changes, etc.), and because more breaking changes are coming soon, this release modifies V8Update so that it fetches a tested, known-good V8 revision by default. See the ClearScript ReadMe for more information.

5/31/2013: Version 5.3.1 released.

View the release notes and download the source code here.

5/21/2013: ClearScript 5.3 released.

View the release notes and download the source code here.

5/15/2013: Version 5.2.2 released.

View the release notes and download the source code here. This release addresses the build issue reported yesterday and can be used with the latest V8 version. Here's how to update your copy of V8:
C:\ClearScript> set V8REV=
C:\ClearScript> V8Update

5/14/2013: ClearScript build failure due to API deprecation in V8 3.19.1.

We are aware of a ClearScript build issue with the latest version of V8. Until this issue is resolved we recommend that you explicitly use V8 3.19.0:
C:\ClearScript> set V8REV=14604
C:\ClearScript> V8Update

5/2/2013: Version 5.2.1 released.

View the release notes and download the source code here.

4/18/2013: V8Update failure resolved by V8 3.18.1.

The V8Update issue reported yesterday has been fixed by a new version of V8 released today. Here's how to update to the latest V8 version:
C:\ClearScript> set V8REV=
C:\ClearScript> V8Update

4/17/2013: V8Update failure with V8 3.18.0.

We are aware of a V8Update issue with the latest version of V8. Until this issue is resolved we recommend that you explicitly use V8 3.17.16:
C:\ClearScript> set V8REV=14138
C:\ClearScript> V8Update

3/27/2013: ClearScript 5.2 released.

View the release notes and download the source code here.

3/8/2013: Version 5.1.3 released.

View the release notes and download the source code here.

3/4/2013: V8Update failure resolved by V8 3.17.7.

The V8Update issue reported earlier has been fixed by a new version of V8 released today. Here's how to update to the latest V8 version:
C:\ClearScript> set V8REV=
C:\ClearScript> V8Update

3/4/2013: V8Update failure with V8 3.17.6.

We are aware of a V8Update issue with the latest version of V8. The issue affects the "Building 64-bit V8" step. The V8 team appears to have already submitted a fix, but the fix has not yet been merged into the trunk. In the meantime, we recommend that you explicitly use V8 3.17.5:
C:\ClearScript> set V8REV=13745
C:\ClearScript> V8Update

Updated Wiki: Home

0
0
InfoIcon.jpg8/22/2013: Version 5.3.7 released. More...

Description

ClearScript is a library that makes it easy to add scripting to your .NET applications. It currently supports JavaScript (via V8 and JScript) and VBScript.

Features

  • Simple usage; create a script engine, add your objects and/or types, run scripts
  • Support for several script engines: Google's V8, Microsoft's JScript and VBScript
  • Exposed resources require no modification, decoration, or special coding of any kind
  • Scripts get simple access to most of the features of exposed objects and types:
    • Methods, properties, fields, events
    • (Objects) Indexers, extension methods, conversion operators, explicitly implemented interfaces
    • (Types) Constructors, nested types
  • Full support for generic types and methods, including C#-like type inference and explicit type arguments
  • Scripts can invoke methods with output parameters, optional parameters, and parameter arrays
  • Script delegates enable callbacks into script code
  • Support for exposing all the types defined in one or more assemblies in one step
  • Optional support for importing types and assemblies from script code
  • The host can invoke script functions and access script objects directly
  • Full support for script debugging

Examples

using System;
using Microsoft.ClearScript;
using Microsoft.ClearScript.V8;

// create a script engineusing (var engine = new V8ScriptEngine())
{
    // expose a host type
    engine.AddHostType("Console", typeof(Console));
    engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");

    // expose a host object
    engine.AddHostObject("random", new Random());
    engine.Execute("Console.WriteLine(random.NextDouble())");

    // expose entire assemblies
    engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));
    engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

    // create a host object from script
    engine.Execute(@"
        birthday = new lib.System.DateTime(2007, 5, 22);
        Console.WriteLine(birthday.ToLongDateString());
    ");

    // use a generic class from script
    engine.Execute(@"
        Dictionary = lib.System.Collections.Generic.Dictionary;
        dict = new (Dictionary(lib.System.String, lib.System.Int32))();
        dict.Add('foo', 123);
    ");

    // call a host method with an output parameter
    engine.AddHostObject("host", new HostFunctions());
    engine.Execute(@"
        intVar = host.newVar(lib.System.Int32);
        found = dict.TryGetValue('foo', intVar.out);
        Console.WriteLine('{0} {1}', found, intVar);
    ");

    // create and populate a host array
    engine.Execute(@"
        numbers = host.newArr(lib.System.Int32, 20);
        for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }
        Console.WriteLine(lib.System.String.Join(', ', numbers));
    ");

    // create a script delegate
    engine.Execute(@"
        Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);
        oddFilter = new Filter(function(value) {
            return (value & 1) ? true : false;
        });
    ");

    // use LINQ from script
    engine.Execute(@"
        oddNumbers = numbers.Where(oddFilter);
        Console.WriteLine(lib.System.String.Join(', ', oddNumbers));
    ");

    // call a script function
    engine.Execute("function print(x) { Console.WriteLine(x); }");
    engine.Script.print(DateTime.Now.DayOfWeek);

    // examine a script object
    engine.Execute("person = { name: 'Fred', age: 5 }");
    Console.WriteLine(engine.Script.person.name);
}

Edited Issue: V8ScriptEngine.Evaluate(V8Script) returns HostObject for .net objects [16]

0
0
```
public class TestItem
{
public string Str { get; set; }
}

class Program
{
static void Main(string[] args)
{
using (var runtime = new V8Runtime())
using (var engine = runtime.CreateScriptEngine())
{
engine.AddHostObject("test", new TestItem());

string scriptCode = "test";
V8Script compiledScript = runtime.Compile(scriptCode);

object result = engine.Evaluate(scriptCode); //TestItem type
object resultFromCompiled = engine.Evaluate(compiledScript); // HostObject type

if (!result.Equals(resultFromCompiled)) // Different type of objects.
throw new ApplicationException();
}

Console.ReadLine();
}
}
```

Commented Issue: V8ScriptEngine.Evaluate(V8Script) returns HostObject for .net objects [16]

0
0
```
public class TestItem
{
public string Str { get; set; }
}

class Program
{
static void Main(string[] args)
{
using (var runtime = new V8Runtime())
using (var engine = runtime.CreateScriptEngine())
{
engine.AddHostObject("test", new TestItem());

string scriptCode = "test";
V8Script compiledScript = runtime.Compile(scriptCode);

object result = engine.Evaluate(scriptCode); //TestItem type
object resultFromCompiled = engine.Evaluate(compiledScript); // HostObject type

if (!result.Equals(resultFromCompiled)) // Different type of objects.
throw new ApplicationException();
}

Console.ReadLine();
}
}
```
Comments: Fixed in [Version 5.3.7](https://clearscript.codeplex.com/SourceControl/changeset/6c75e44d6b0530f56ee6e4ea96a9acdba65af6fe).

Released: ClearScript 5.3 (May 21, 2013)

0
0
5.3.7
  • Fixed V8ScriptEngine compiled script evaluation result marshaling (Issue #16).
  • Added a test for the fix.
  • Cleared PYTHONPATH in V8Update.
  • Tested with V8 3.21.2.

5.3.6
  • Added numeric conversion methods in HostFunctions.
  • Fixed bugs affecting numeric arguments and return values.
  • Added tests for bug fixes and new APIs.
  • Tested with V8 3.20.16.

5.3.5
  • Fixed invocation of base interface methods on derived interface targets (Issue #14).
  • Fixed V8 and ClearScript builds on certain non-English locales (Issue #13).
  • Added boxed enum reference canonicalization (Issue #15).
  • PropertyBag enhancements.
  • Lots of minor host integration fixes.
  • Updates for breaking V8 API changes.
  • Several new tests.
  • Tested with V8 3.20.12.

5.3.4
  • Fixed script interruption crash in V8ScriptEngine.
  • Added a test for the fix.

5.3.3
  • Improved V8 error handling (Issue #12).
  • Lowered .NET Framework target to v4.0.
  • Added several tests.
  • Tested with V8 3.19.18.

5.3.2
  • Updates for breaking V8 API changes.
  • V8Update now fetches a tested revision by default.
  • Tested with V8 3.19.9.

5.3.1
  • Fixed JScriptEngine dynamic binding bug (Issue #9).

5.3.0
  • Enhancements for V8 users:
    • V8ScriptEngine now supports script compilation and re-execution.
    • New V8Runtime class allows engines to share resources and compiled scripts.
    • New experimental APIs for restricting and querying V8 memory usage.
    • Improved V8 loading algorithm for simplified deployment.
    • V8Update can now fetch a V8 version that is known to work with ClearScript.
  • New method: ScriptEngine.CollectGarbage().
  • Host item caching improves performance and reduces memory usage.
  • Several new tests.

Updated Release: ClearScript 5.3 (May 21, 2013)

0
0
5.3.7
  • Fixed V8ScriptEngine compiled script evaluation result marshaling (Issue #16).
  • Added a test for the fix.
  • Cleared PYTHONPATH in V8Update.
  • Tested with V8 3.21.2.

5.3.6
  • Added numeric conversion methods in HostFunctions.
  • Fixed bugs affecting numeric arguments and return values.
  • Added tests for bug fixes and new APIs.
  • Tested with V8 3.20.16.

5.3.5
  • Fixed invocation of base interface methods on derived interface targets (Issue #14).
  • Fixed V8 and ClearScript builds on certain non-English locales (Issue #13).
  • Added boxed enum reference canonicalization (Issue #15).
  • PropertyBag enhancements.
  • Lots of minor host integration fixes.
  • Updates for breaking V8 API changes.
  • Several new tests.
  • Tested with V8 3.20.12.

5.3.4
  • Fixed script interruption crash in V8ScriptEngine.
  • Added a test for the fix.

5.3.3
  • Improved V8 error handling (Issue #12).
  • Lowered .NET Framework target to v4.0.
  • Added several tests.
  • Tested with V8 3.19.18.

5.3.2
  • Updates for breaking V8 API changes.
  • V8Update now fetches a tested revision by default.
  • Tested with V8 3.19.9.

5.3.1
  • Fixed JScriptEngine dynamic binding bug (Issue #9).

5.3.0
  • Enhancements for V8 users:
    • V8ScriptEngine now supports script compilation and re-execution.
    • New V8Runtime class allows engines to share resources and compiled scripts.
    • New experimental APIs for restricting and querying V8 memory usage.
    • Improved V8 loading algorithm for simplified deployment.
    • V8Update can now fetch a V8 version that is known to work with ClearScript.
  • New method: ScriptEngine.CollectGarbage().
  • Host item caching improves performance and reduces memory usage.
  • Several new tests.

Edited Feature: Dynamic host object projection [3]

0
0
Host objects that provide custom behavior via the `dynamic` keyword would benefit from a similar access mode from script code. As with C#, script code should be able to choose which "view" of the object it's dealing with. One possibility:
```
hostObject.Add('foo', 123); // normal access
num = hostObject.dynamic.foo; // dynamic access
```

Commented Issue: V8ScriptEngine.Evaluate(V8Script) returns HostObject for .net objects [16]

0
0
```
public class TestItem
{
public string Str { get; set; }
}

class Program
{
static void Main(string[] args)
{
using (var runtime = new V8Runtime())
using (var engine = runtime.CreateScriptEngine())
{
engine.AddHostObject("test", new TestItem());

string scriptCode = "test";
V8Script compiledScript = runtime.Compile(scriptCode);

object result = engine.Evaluate(scriptCode); //TestItem type
object resultFromCompiled = engine.Evaluate(compiledScript); // HostObject type

if (!result.Equals(resultFromCompiled)) // Different type of objects.
throw new ApplicationException();
}

Console.ReadLine();
}
}
```
Comments: Thanks!

Updated Wiki: Home

0
0

Description

ClearScript is a library that makes it easy to add scripting to your .NET applications. It currently supports JavaScript (via V8 and JScript) and VBScript.

Features

  • Simple usage; create a script engine, add your objects and/or types, run scripts
  • Support for several script engines: Google's V8, Microsoft's JScript and VBScript
  • Exposed resources require no modification, decoration, or special coding of any kind
  • Scripts get simple access to most of the features of exposed objects and types:
    • Methods, properties, fields, events
    • (Objects) Indexers, extension methods, conversion operators, explicitly implemented interfaces
    • (Types) Constructors, nested types
  • Full support for generic types and methods, including C#-like type inference and explicit type arguments
  • Scripts can invoke methods with output parameters, optional parameters, and parameter arrays
  • Script delegates enable callbacks into script code
  • Support for exposing all the types defined in one or more assemblies in one step
  • Optional support for importing types and assemblies from script code
  • The host can invoke script functions and access script objects directly
  • Full support for script debugging

Examples

using System;
using Microsoft.ClearScript;
using Microsoft.ClearScript.V8;

// create a script engineusing (var engine = new V8ScriptEngine())
{
    // expose a host type
    engine.AddHostType("Console", typeof(Console));
    engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");

    // expose a host object
    engine.AddHostObject("random", new Random());
    engine.Execute("Console.WriteLine(random.NextDouble())");

    // expose entire assemblies
    engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));
    engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

    // create a host object from script
    engine.Execute(@"
        birthday = new lib.System.DateTime(2007, 5, 22);
        Console.WriteLine(birthday.ToLongDateString());
    ");

    // use a generic class from script
    engine.Execute(@"
        Dictionary = lib.System.Collections.Generic.Dictionary;
        dict = new (Dictionary(lib.System.String, lib.System.Int32))();
        dict.Add('foo', 123);
    ");

    // call a host method with an output parameter
    engine.AddHostObject("host", new HostFunctions());
    engine.Execute(@"
        intVar = host.newVar(lib.System.Int32);
        found = dict.TryGetValue('foo', intVar.out);
        Console.WriteLine('{0} {1}', found, intVar);
    ");

    // create and populate a host array
    engine.Execute(@"
        numbers = host.newArr(lib.System.Int32, 20);
        for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }
        Console.WriteLine(lib.System.String.Join(', ', numbers));
    ");

    // create a script delegate
    engine.Execute(@"
        Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);
        oddFilter = new Filter(function(value) {
            return (value & 1) ? true : false;
        });
    ");

    // use LINQ from script
    engine.Execute(@"
        oddNumbers = numbers.Where(oddFilter);
        Console.WriteLine(lib.System.String.Join(', ', oddNumbers));
    ");

    // call a script function
    engine.Execute("function print(x) { Console.WriteLine(x); }");
    engine.Script.print(DateTime.Now.DayOfWeek);

    // examine a script object
    engine.Execute("person = { name: 'Fred', age: 5 }");
    Console.WriteLine(engine.Script.person.name);
}

New Post: dll is missing

0
0
can you upload the dll files?

if i try to compile, many errors

New Post: dll is missing

0
0
Greetings, furesoft!

We cannot post ClearScript binaries, but we've tried to make building ClearScript as easy as possible. What errors are you seeing? Have you read the build instructions in the ReadMe?

New Post: dll is missing

0
0
ive read the readme

here is the error: /home/chris/Arbeitsfläche/ClearScript-5.3.7/ClearScript/Windows/WindowsScriptEngine.Site.cs(20,20): Error CS0246: The type or namespace name
CustomQueryInterfaceResult' could not be found. Are you missing a using directive or an assembly reference? (CS0246) (ClearScript)


im developing in ubuntu with mono

New Post: dll is missing

0
0
Unfortunately ClearScript does not support Mono. We recommend that you check out V8.NET - a project that's shaping up nicely and was designed with Mono compatibility in mind. You might also have success with a pure .NET JavaScript engine such as Jurassic. Good luck!

Commented Unassigned: V8 deployment issue in IIS [23]

0
0
Hi, I have a problem deploying V8, as https://clearscript.codeplex.com/workitem/18, bu on my "on premise" iis.
I have already installed VCredist, just 64 (or is necessary also 32?): we are only 64! I have installed update 3 (not Update 4 that came out yesterday! but I don't think it's an issue).
The load path for dll is correctly the root of the web app, and dlls are loaded there.

Any idea how to check?

Thanks in advance.

Marco Parenzan

Comments: Hi, I have just finished solving. dlls were added as nuget package. So I had the postbuild script that copies dlls "clearscript* and v*" as postbuild events. I have removed the script, inserted dlls as content in the root of web application (copy if newer). Than I have regenerated the entire project adding the correct dependencies (I had a lot of unuseful dlls - ASPNET MVC Internet template). now the situation is clear and working. Thanks! Great work!!!!

Edited Issue: V8 deployment issue in IIS [23]

0
0
Hi, I have a problem deploying V8, as https://clearscript.codeplex.com/workitem/18, bu on my "on premise" iis.
I have already installed VCredist, just 64 (or is necessary also 32?): we are only 64! I have installed update 3 (not Update 4 that came out yesterday! but I don't think it's an issue).
The load path for dll is correctly the root of the web app, and dlls are loaded there.

Any idea how to check?

Thanks in advance.

Marco Parenzan

Commented Issue: V8 deployment issue in IIS [23]

0
0
Hi, I have a problem deploying V8, as https://clearscript.codeplex.com/workitem/18, bu on my "on premise" iis.
I have already installed VCredist, just 64 (or is necessary also 32?): we are only 64! I have installed update 3 (not Update 4 that came out yesterday! but I don't think it's an issue).
The load path for dll is correctly the root of the web app, and dlls are loaded there.

Any idea how to check?

Thanks in advance.

Marco Parenzan

Comments: We're glad to hear that it's working for you! We still recommend that you set those files to "Do Not Copy". Cheers!
Viewing all 2297 articles
Browse latest View live




Latest Images