Commit Graph

1132 Commits

Author SHA1 Message Date
johnmccutchan@google.com 2820a12766 Allow for embedder provided service request handlers
BUG=
R=turnidge@google.com

Review URL: https://codereview.chromium.org//170943003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@32769 260f80e4-7a28-3924-810f-c04153c831b5
2014-02-18 22:38:11 +00:00
regis@google.com 7830430adf Implement eager instantiation and canonicalization of type arguments at run
time using a cache in uninstantiated type arguments.
Remove InstantiatedTypeArguments class.
Fix a bug in optimized code: do not update unused type test cache for Smi.
Fix a bug in optimized code on ARM and MIPS in type test cache lookup.

R=iposva@google.com, srdjan@google.com

Review URL: https://codereview.chromium.org//154393003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@32447 260f80e4-7a28-3924-810f-c04153c831b5
2014-02-07 19:54:33 +00:00
asiva@google.com addb9ed934 Add new Dart API function Dart_IsolateData which returns the peer isolate data associated with an isolate.
R=iposva@google.com

Review URL: https://codereview.chromium.org//148453016

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@32397 260f80e4-7a28-3924-810f-c04153c831b5
2014-02-07 00:43:18 +00:00
asiva@google.com 732d1a44de Add a UpdatedGuardedCidBit to Class object so that we don't have
to iterate over all the classes and it's fields to update the
GuardedCid value on each call to Dart_Allocate.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//153103004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@32271 260f80e4-7a28-3924-810f-c04153c831b5
2014-02-04 01:12:55 +00:00
turnidge@google.com b891e78325 Post-meetup feature extravaganza.
Remodel the top-level isolate summary page.

Add variables to stack frames in the stack trace.

Stop putting small integers and bools in the object id ring.

Rework how we pass down null references (and null-like references like
uninitialized values).

Collect all isolate timers by default.

Change the lifetime of IsolateSpawnState so that we can refer to it
later to know how an isolate started up.  Stop pretending that
IsolateSpawnState is a void*.  Clean up vestigial IsolateStartData.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//145323002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@32128 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-29 18:40:12 +00:00
hausner@google.com 0c434b3073 Rename kDummyTokenIndex to kNoSourcePos
Addresses comment to previous change list.

R=regis@google.com

Review URL: https://codereview.chromium.org//144343002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31969 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-21 23:46:26 +00:00
lrn@google.com 9357caa547 Revert "Make VM TypedList not implement ByteBuffer."
Html transferable test fails to send buffer as buffer.

Review URL: https://codereview.chromium.org//137783019

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31875 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-16 11:48:07 +00:00
lrn@google.com c2f6609181 Make VM TypedList not implement ByteBuffer.
BUG= http://dartbug.com/10136
R=asiva@google.com, sra@google.com

Review URL: https://codereview.chromium.org//138033002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31873 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-16 10:18:41 +00:00
johnmccutchan@google.com 8205cbf364 Fix mac build breakage in dart_api_impl.cc
BUG=

Review URL: https://codereview.chromium.org//137443008

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31811 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-14 23:05:57 +00:00
johnmccutchan@google.com c76b6eb1c2 Split service into VM and embedder specific bits.
Move most service sources into the VM.

R=asiva@google.com

Review URL: https://codereview.chromium.org//125103004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31809 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-14 22:34:43 +00:00
asiva@google.com 88de88feb5 Add Dart API method Dart_SetPersistentHandle to enable setting the value of
a persistent handle.

R=iposva@google.com

Review URL: https://codereview.chromium.org//116473004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31443 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-03 18:47:38 +00:00
asiva@google.com 7f1055df45 Implement GetNativeReceiver without handles under a NoGCScope, this should
eliminate the hot InitializeHandle calls that were observed in the profile.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//101153005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31405 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-30 19:55:28 +00:00
asiva@google.com 491035987f Change Dart_GetNativeBooleanArgument to use class Ids and direct
pointer comparision of the singleton objects to determine value.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org//113763004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31311 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 00:15:13 +00:00
asiva@google.com a576fec3c0 Allow the native resolver to setup whether it needs the Dart API scope to
be setup automatically or not when a native function is invoked.
This would allow the embedder to treat some native functions as leaf
functions whose invocation can be very light.

R=hausner@google.com, zra@google.com

Review URL: https://codereview.chromium.org//117723002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31286 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-19 17:47:56 +00:00
turnidge@google.com b640712e6b Handle vmservice messages while at breakpoint.
Allow rudimentary inspection of breakpoints from vmservice.

R=hausner@google.com, johnmccutchan@google.com

Review URL: https://codereview.chromium.org//113513004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31233 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-18 17:45:17 +00:00
iposva@google.com 1e8061f060 - Remove the reply_port from the VM internal message object.
- Adjust all the uses of this API.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//93873015

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31205 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-17 21:11:18 +00:00
srdjan@google.com 3274f92827 Rename FinalizeTypeHierarchy to ProcessPendingClasses.
R=regis@google.com

Review URL: https://codereview.chromium.org//83983004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30688 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-27 00:11:32 +00:00
srdjan@google.com 3485989ae7 Do not eagerly finalize classes in CHA, instead regard unfinalized classes as ’non-existent’ and only invalidate optimized code at finalization of the class.
Rename FinalizePendingClasses to FinalizePendingClassInterfaces as the class finalization occurs lazily.
TODO: add dependency information to deoptimize/remove only relevant optimized code.

R=regis@google.com

Review URL: https://codereview.chromium.org//81333003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30582 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-22 17:59:23 +00:00
regis@google.com db2cec593d Distinguish between malformed and malbounded types more efficiently using the
recently introduced LanguageError 'kind' field.

R=hausner@google.com

Review URL: https://codereview.chromium.org//75713002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30383 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-18 23:31:12 +00:00
srdjan@google.com 5cd22e2dd3 Fixes issue 14742. Dart API may allocate objects without calling the constructor, this messes up the nullability tracking in the VM. Simple fix for now: initialize fields nullability, type, length if allocated via Dart API.
R=asiva@google.com

Review URL: https://codereview.chromium.org//70983002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30233 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-13 16:01:41 +00:00
regis@google.com e3da5e16e4 Check type bounds of redirecting factories (issue 14699).
Add tests for malbounded redirecting factories.
Clean up bound checking code and type error reporting code.

R=hausner@google.com

Review URL: https://codereview.chromium.org//66033006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30177 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-11 22:59:48 +00:00
iposva@google.com 070d3dedf7 - Add a per-isolate pseudo random number generator to the
VM internals. This PRNG is not used to generate random
  numbers in Dart code.
- Use the PRNG to generate JIT cookies for large constants
  if needed during assembly.
- Add the possibility to set an external entropy source
  for the PRNG through the C API.

R=asiva@google.com

Review URL: https://codereview.chromium.org//59773007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29950 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-06 00:59:46 +00:00
srdjan@google.com 2b9fad92c7 In preparation of inlining remainder and modulo binary Smi operations:
- Add REM token
- Fix checking of function fingerprints.
- Remove unused intrinsic for remainder (the function gets inlined and intrinsic is not generated)

R=hausner@google.com

Review URL: https://codereview.chromium.org//59933004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29929 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-05 19:27:46 +00:00
asiva@google.com 545bec0843 Cleanup StaticResolveType, it does not seem to be used anywhere.
R=regis@google.com

Review URL: https://codereview.chromium.org//50523018

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29696 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-31 20:41:59 +00:00
sgjesse@google.com 36a67fa046 Implement fromEnvironment on bool, int and String
This implements const constructor fromEnvironment on bool, int and
String.

The VM have the added -Dname=value option to define the value for the
properties. All values are provided by using the -D - nothing is read
from the environment.

If the resulting value is null or - in the case of int.fromEnvironment
- not a number an ArgumentError is thrown.

This CL does not have any implementation for dart2js.

This is a continuation of the change
https://chromiumcodereview.appspot.com/24975002 by iposva@
BUG=
R=iposva@google.com

Review URL: https://codereview.chromium.org//50983002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29642 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-31 05:46:57 +00:00
floitsch@google.com 6a72655d1b Very simple version of Isolates.
R=ajohnsen@google.com, iposva@google.com, kasperl@google.com, lrn@google.com

Review URL: https://codereview.chromium.org//27215002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29271 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-25 19:23:00 +00:00
iposva@google.com 06719f8ea7 Fix bug 13827:
- Do not attempt to GC old space while in full growth mode when creating
  the token stream for a newly loaded source file.

R=bak@google.com

Review URL: https://codereview.chromium.org//33753005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29153 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-24 05:45:09 +00:00
rmacnak@google.com de7c68ce3a Test for OscillatorNode.type=. Fix bug in StringGetPeerHelper when passed an immediate object. Fix asserts when getting typed data address to allow for empty arrays.
BUG=http://dartbug.com/11984
R=asiva@google.com, vsm@google.com

Review URL: https://codereview.chromium.org//28973003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29049 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-23 00:12:09 +00:00
asiva@google.com f5b0f9beae Remove deprecated call Dart_Error from the API. There are no uses of it.
R=turnidge@google.com

Review URL: https://codereview.chromium.org//26751005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28944 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-21 19:53:31 +00:00
asiva@google.com 1a2f236fab Fix issue 13942 - Dart_Error function invokes OS::VSNPrint with the "format" string containing data derived from the string
R=iposva@google.com

Review URL: https://codereview.chromium.org//27694005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28809 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-17 17:49:45 +00:00
regis@google.com 2f900dab13 Cache number of type arguments in class object instead of recalculating it.
Reduce size of num_native_fields field in class object.

R=asiva@google.com

Review URL: https://codereview.chromium.org//26682003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28670 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-15 18:31:31 +00:00
asiva@google.com f21708a38a - Dart_ObjectIsType was allowing classes as parameter, changed it to only
allow types.
- Return canonical Dart_Null, Dart_True and Dart_False handles instead of
creating a new handle

R=srdjan@google.com

Review URL: https://codereview.chromium.org//26306006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28366 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-08 16:42:30 +00:00
asiva@google.com 21cefcd726 Add a new method Dart_InvokeConstructor to allow invocation of generative
constructors on an object that has already been allocated using Dart_Allocate.

R=regis@google.com

Review URL: https://codereview.chromium.org//25675009

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28276 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-04 20:00:48 +00:00
asiva@google.com 1cd2ad79ec Fix for 12312 (Dartium crash when reloading after running tests).
Add framework for Dart_Cleanup which will cleanup stuff on exit.
Ideally the VM isolate should be shutdown in Dart_Terminate but we don't
seem to have a clean thread pool shutdown as a result of which there are
racing isolates.

R=iposva@google.com

Review URL: https://codereview.chromium.org//25674009

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28248 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-03 22:17:48 +00:00
rmacnak@google.com ab2d2fc25b Make ClassMirror.newInstance deal with reordered etc type arguments for redirecting factories.
BUG=http://dartbug.com/11781
BUG=http://dartbug.com/13365
R=regis@google.com

Review URL: https://codereview.chromium.org//25097005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28106 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-01 18:23:24 +00:00
asiva@google.com 8912fdd1f8 Rename NativeReceiver to NativeArg0 as this method is used not necessarily
to access the receiver in dartium. It is used to access the first argument.

Review URL: https://codereview.chromium.org//25136002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28032 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-27 23:50:13 +00:00
asiva@google.com bbbe821434 - Add special access for receiver as it is a frequently used operation
- Merge closure/instance function bitfields into one bitfield to simplify
  access to arguments.

R=regis@google.com

Review URL: https://codereview.chromium.org//25062003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28028 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-27 22:22:23 +00:00
asiva@google.com 292d8c9c21 Fix 13594.
R=iposva@google.com

Review URL: https://codereview.chromium.org//24785002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@28017 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-27 16:55:20 +00:00
mlippautz@google.com 19763aae4d Implementation for ClosureMirror.findInContext.
Fixes issue 5897.

BUG=https://code.google.com/p/dart/issues/detail?id=5897
R=asiva@google.com, gbracha@google.com, rmacnak@google.com

Review URL: https://codereview.chromium.org//23633002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27982 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-27 01:28:12 +00:00
asiva@google.com 3fe818e16b Minor cleanup for the Null string case.
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//24660002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27919 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-25 22:54:07 +00:00
asiva@google.com 928894a58c - Added Dart_GetNativeIsolateData so that the bindings code can access the IsolateCurrentData
where possible without having to invoke Isolate::Current()
- Modified lookupWrapper to accept DartDOMData as a parameter so that the return to Dart functions
  won't invoke Isolate::Current()

Some Dromaeo numbers before this change:
CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-attr getAttribute runs-per-second 1162.2
CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-attr element_property_access runs-per-second 1255.6

after this change:
CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-attr getAttribute runs-per-second 1237.6
CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-attr element_property_access runs-per-second 1385.4

R=rmacnak@google.com, vsm@google.com

Review URL: https://codereview.chromium.org//24376005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27789 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-23 23:53:39 +00:00
rmacnak@google.com c9eabbcb56 Make Dart_IdentityEqual live up to its sepc and not leak boxing implementation detail. (Reland r27542.)
R=asiva@google.com

Review URL: https://codereview.chromium.org//24254004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27774 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-23 16:23:06 +00:00
rmacnak@google.com 89d5616468 Never return a Dart_Handle on a dart::Class from the embedding API.
R=asiva@google.com

Review URL: https://codereview.chromium.org//24210003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27715 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-20 18:29:56 +00:00
asiva@google.com ca128dea70 - Modify toDart to first do a simple lookup in the appropriate table before going down the templatized
morass of switch statements
- Add a returnToDart function so that the WeakPersistent Handle returned from a lookup/create of the wrapper
  could be returned as is without the need to call Dart_handleFromWeakPersistentHandle
- Use Dart_SetDoubleReturnValue for doubles

some DromaeoDartium numbers before this change:

CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-query getElementsByTagName(div) runs-per-second 84240.6
CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-traverse nextSibling runs-per-second 207.91683326669332
CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-query getElementsByTagName(*) runs-per-second 69599.2

some DromaeoDartium numbers after this change:

CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-query getElementsByTagName(div) runs-per-second 104252.4
CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-traverse nextSibling runs-per-second 366.8
CONSOLE MESSAGE: RESULT: Dromaeo-drt dartium-dart dom-query getElementsByTagName(*) runs-per-second 94922.6

R=rmacnak@google.com, vsm@google.com

Review URL: https://codereview.chromium.org//23681014

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27710 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-20 16:25:12 +00:00
ricow@google.com fab06df0eb Revert revision 27542 "Make Dart_IdentityEqual live up to its spec and not leak boxing implementation detail."
This is causing checked mode failures on all vm bots.

Review URL: https://codereview.chromium.org//23587024

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27545 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-17 06:29:47 +00:00
rmacnak@google.com 8ed7a0367f Make Dart_IdentityEqual live up to its spec and not leak boxing implementation detail.
R=asiva@google.com

Review URL: https://codereview.chromium.org//23464073

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27542 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-17 01:30:30 +00:00
asiva@google.com 5c8925ea69 Use CHECK_ISOLATE instead of the more heavy DARTSCOPE for
Dart_HandleFromPersistent and DartHandleFromWeakPersistent. These
functions do not allocate any VM handles.

R=hausner@google.com

Review URL: https://codereview.chromium.org//23537051

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27535 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-16 21:57:46 +00:00
rmacnak@google.com 07c4d9d0c6 Fill in type arguments when creating an object from the mirrors or embedding API.
BUG=http://dartbug.com/13186
BUG=http://dartbug.com/12921
R=regis@google.com

Review URL: https://codereview.chromium.org//23983026

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27417 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-12 00:48:16 +00:00
hausner@google.com fd57843900 Update handling of ambiguous name references
Update VM to latest spec. Referencing a name that is imported
from more than one library is no longer a compile-time error.
If one of the sources of an ambiguous reference is a dart library,
the dart library declaration is automatically hidden.

Also fixes a bug where looking up a getter name in a library
found the getter even though the name is filtered out in the
'hide' combinator.

Long-term we should fix the need for repeatedly convert between
the mangled getter and setter names and the untangled name.

Fixes 12915, 12913, 12724.

R=regis@google.com

Review URL: https://codereview.chromium.org//23484020

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27312 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-09 21:52:40 +00:00
asiva@google.com d6aaf0cc94 1. Add flag --trace-api to trace API function invocation
2. Add tracing of external native functions under --trace-natives flag
3. Added a _printCurrentStacktrace() function so that one could get a
   dart stack trace under 'gdb' when in a native or runtime function.

R=regis@google.com

Review URL: https://codereview.chromium.org//23453035

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27166 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-04 23:42:13 +00:00