Commit graph

366 commits

Author SHA1 Message Date
nobu
7bd638b7a4 object.c: suppress warning
* object.c (rb_obj_alloc): suppress unused variable warning.

* tool/gen_dummy_probes.rb: define dtrace disabling macro.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-16 17:02:39 +00:00
naruse
f82d652f35 Fix dtrace commit r37631, it is [Feature #2565]
* configure.in: disable dtrace because it doesn't work on FreeBSD.

* common.mk (clean-local): rm probes.h.

* common.mk (parse.o): depend $(PROBES_H_INCLUDES).

* common.mk (.d.h): moved from Makefile.in and use BASERUBY.

* tool/gen_dummy_probes.rb: reimplemented with ruby because sed is not
  available on Windows Microsoft VC++ environment.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-13 06:13:39 +00:00
tenderlove
4c740bae97 * probes.d: add DTrace probe declarations. [ruby-core:27448]
* array.c (empty_ary_alloc, ary_new): added array create DTrace probe.

* compile.c (rb_insns_name): allowing DTrace probes to access
  instruction sequence name.

* Makefile.in: translate probes.d file to appropriate header file.

* common.mk: declare dependencies on the DTrace header.

* configure.in: add a test for existence of DTrace.

* eval.c (setup_exception): add a probe for when an exception is
  raised.

* gc.c: Add DTrace probes for mark begin and end, and sweep begin and
  end.

* hash.c (empty_hash_alloc): Add a probe for hash allocation.

* insns.def: Add probes for function entry and return.

* internal.h: function declaration for compile.c change.

* load.c (rb_f_load): add probes for `load` entry and exit, require
  entry and exit, and wrapping search_required for load path search.

* object.c (rb_obj_alloc): added a probe for general object creation.

* parse.y (yycompile0): added a probe around parse and compile phase.

* string.c (empty_str_alloc, str_new): DTrace probes for string
  allocation.

* test/dtrace/*: tests for DTrace probes.

* vm.c (vm_invoke_proc): add probes for function return on exception
  raise, hash create, and instruction sequence execution.

* vm_core.h: add probe declarations for function entry and exit.

* vm_dump.c: add probes header file.

* vm_eval.c (vm_call0_cfunc, vm_call0_cfunc_with_frame): add probe on
  function entry and return.

* vm_exec.c: expose instruction number to instruction name function.

* vm_insnshelper.c: add function entry and exit probes for cfunc
  methods.

* vm_insnhelper.h: vm usage information is always collected, so
  uncomment the functions.

12 19:14:50 2012  Akinori MUSHA  <knu@iDaemons.org>

* configure.in (isinf, isnan): isinf() and isnan() are macros on
  DragonFly which cannot be found by AC_REPLACE_FUNCS().  This
  workaround enforces the fact that they exist on DragonFly.

12 15:59:38 2012  Shugo Maeda  <shugo@ruby-lang.org>

* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
  vm_insnhelper.c (vm_search_method): revert r37616 because it's too
  slow.  [ruby-dev:46477]

* test/ruby/test_refinement.rb (test_inline_method_cache): skip
  the test until the bug is fixed efficiently.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12 21:52:12 +00:00
kou
e91c04e2e9 * tool/rbinstall.rb: Don't install *.gemspec under lib/.
[ruby-core:48966] [Bug #7289]
  Reported by Vit Ondruch. Thanks!!!


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37608 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-10 03:15:55 +00:00
usa
e4d1a8a157 * tool/merger.rb: typo.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-09 15:42:55 +00:00
naruse
082e1344cc * tool/merger.rb: add feature to tag preview/rc.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-01 19:24:21 +00:00
naruse
b2bbfb3e18 * tool/make-snapshot: fix wrong regexp for releasing preview.
patched by mame.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-01 18:22:31 +00:00
nobu
bd89d0cba5 rbconfig/obsolete.rb: Config
* lib/rbconfig/obsolete.rb (Config): re-introduce warnings for a
  lame-duck.  [ruby-core:46836] [Bug #6809]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-29 18:08:56 +00:00
usa
8ca58751c1 * tool/mkconfig.rb: remove string literal concatenation.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-25 04:36:15 +00:00
nobu
ca968ee45e remove garbage line
* compile.c (new_insn_send): remove garbage line.
* tool/instruction.rb (sp_increase_c_expr): ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37182 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-14 17:20:42 +00:00
ko1
cbd597e9bc * insns.def (send, invokesuper, invokeblock, opt_*), vm_core.h:
use only a `ci' (rb_call_info_t) parameter instead of using
  parameters such as `op_id', 'op_argc', `blockiseq' and flag.
  These information are stored in rb_call_info_t at the compile
  time.
  This technique simplifies parameter passings at related
  function calls (~10% speedups for simple mehtod invocation at
  my machine).
  `rb_call_info_t' also has new function pointer variable `call'.
  This `call' variable enables to customize method (block)
  invocation process for each place. However, it always call
  `vm_call_general()' at this changes.
  `rb_call_info_t' also has temporary variables for method
  (block) invocation.
* vm_core.h, compile.c, insns.def: introduce VM_CALL_ARGS_SKIP_SETUP
  VM_CALL macro.  This flag indicates that this call can skip
  caller_setup (block arg and splat arg).
* compile.c: catch up above changes.
* iseq.c: catch up above changes (especially for TS_CALLINFO).
* tool/instruction.rb: catch up above chagnes.
* vm_insnhelper.c, vm_insnhelper.h: ditto. Macros and functions
  parameters are changed.
* vm_eval.c (vm_call0): ditto (it will be rewriten soon).



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-14 16:59:05 +00:00
usa
727c8cdfe7 * tool/merger.rb: now can merge revision(s) without --ticket again.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37154 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-12 07:07:10 +00:00
ko1
7ea3edc409 * vm_core.h (rb_call_info_t): add new type `rb_call_inf_t'.
This data structure contains information including inline method
  cache. After that, `struct iseq_inline_cache_entry' does not
  need to contain inline cache for method invocation.
  Other information will be added to this data structure.
* vm_core.h (rb_iseq_t): add `callinfo_entries' and `callinfo_size'
  members to `rb_iseq_t'.
* insns.def, compile.c: Use CALL_INFO instead of IC.
* tool/instruction.rb: support CALL_INFO as operand type.
* vm_insnhelper.c, vm_insnhelper.h: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37121 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-09 05:33:54 +00:00
ko1
08c8605de9 * insns.def (getlocal, setlocal): remove old getlocal/setlocal
instructions and rename getdaynmic/setdynamic instructions
  to getlocal/setlocal.
* compile.c: ditto.
* iseq.c: remove TS_DINDEX.
* vm_exec.h (dindex_t): remove type definition of `dindex_t'.
* tool/instruction.rb: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37087 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-04 13:52:20 +00:00
ko1
23dc0dbc4a * vm.c (VM_COLLECT_USAGE_DETAILS): make new VM usage analysis
hooks (old macro name is COLLECT_USAGE_ANALYSIS).
  This feature is only for VM developers.  (I'm not sure I can use
  `VM developers' (the plural form) in this sentence).
  If VM_COLLECT_USAGE_DETAILS is not 0, VM enables the following
  usage collection features:
  (1) insntruction: collect intruction usages.
  (2) operand: collect operand usages.
  (3) register: collect register usages.
  The results are stored in
  RubyVM::USAGE_ANALYSIS_INSN for (1, 2),
  RubyVM::USAGE_ANALYSIS_INSN_BIGRAM for (1) and
  RubyVM::USAGE_ANALYSIS_REGS for (3).
  You can stop collecting usages with
  RubyVM::USAGE_ANALYSIS_INSN_STOP(),
  RubyVM::USAGE_ANALYSIS_OPERAND_STOP(),
  RubyVM::USAGE_ANALYSIS_REGISTER_STOP()
  for (1), (2), (3) respectively.
  You can also change the hook functions by setting
  C level global variables
  `ruby_vm_collect_usage_func_(insn|operand|register)'
  for (1), (2), (3) respectively.
  See codes for more details.
* tool/instruction.rb: fix macro names.
* iseq.c (insn_operand_intern): make it export (used in vm.c).
  fix to skip several processes if not needed (pointer is 0).
* vm_dump.c: move codes for collection features to vm.c.
* vm_exec.h: rename macro and function names.
* vm_insnhelper.h: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-04 12:31:05 +00:00
naruse
8ac52a95d5 * tool/merger.rb: add --ticket option to add ticket number.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37023 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-09-24 02:23:48 +00:00
drbrain
32d416db0d * tool/change_maker.rb: Update svn detection for subversion 1.7's
single .svn directory.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36982 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-09-16 08:47:53 +00:00
nobu
7d79f355fc rbinstall.rb: skip symlinks
* tool/rbinstall.rb (install_recursive): skip symlinks, which are made
  by `make runnable'.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-09-04 01:40:11 +00:00
nobu
470c941ce5 id.h: independent from parse.h
* template/id.h.tmpl, tool/id2token.rb: make id.h independent from
  parse.h, and make parse.c dependent on it instead.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36864 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-31 05:31:20 +00:00
nobu
06d98b4d4d mkrunnable.rb: config directory names
* tool/mkrunnable.rb: collect directory names from config.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36846 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-29 05:59:07 +00:00
nobu
bcbc1f722c generic_erb.rb: --vpath option
* tool/generic_erb.rb (vpath.open): move --vpath option from
  template/id.h.tmpl.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36822 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-25 07:20:29 +00:00
nobu
402edc568a mkrunnable.rb: build_os
* tool/mkrunnable.rb: see build_os instead of target arch for
  cross-compiling.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-09 14:46:53 +00:00
nobu
681c1b9f1b mkrunnable.rb: mswin
* tool/mkrunnable.rb (ln_safe, ln_dir_safe): separate for mklink
  command on Windows.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36537 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-07-25 08:17:46 +00:00
naruse
131f694330 Suppress warnings.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36534 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-07-25 06:49:35 +00:00
nobu
c558195999 * tool/ytab.sed: fix for Bison 2.6.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-07-25 04:12:44 +00:00
nobu
1474cfa846 obsolete Config
* lib/rbconfig/obsolete.rb (Config): remove obsolete Config.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36330 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-07-06 03:27:10 +00:00
nobu
3fceaf10ab make runnable
* common.mk (runnable): make symbolic links to run in build directory.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-07-03 02:16:08 +00:00
ko1
c4bc9b5758 * iseq.c, vm_eval.c: set th->base_block properly.
th->base_block is information for (a) parsing, (b) compiling
  and (c) setting up the frame to execute the program passed by
  `eval' method.  For example, (1) parser need to know up-level
  variables to detect it is variable or method without paren.
  Befor (a), (b) and (c), VM set th->base_block by passed bindng
  (or previous frame information).  After execute (a), (b) and (c),
  VM should clear th->base_block.  However, if (a), (b) or (c)
  raises an exception, then th->base_block is not cleared.
  Problem is that the uncleared value th->balo_block is used for
  irrelevant iseq compilation.  It causes SEGV or critical error.
  I tried to solve this problem: to clear them before exception,
  but finally I found out that it is difficult to do it (Ruby
  program can be run in many places).
  Because of this background, I set th->base_block before
  compiling iseq and restore it after compiling.
  Basically, th->base_block is dirty hack (similar to global
  variable) and this patch is also dirty.
* bootstraptest/test_eval.rb: add a test for above.
* internal.h: remove unused decl.
* iseq.c (rb_iseq_compile_with_option): add base_block parameter.
  set th->base_block before compation and restore it after
  compilation.
* ruby.c (require_libraries): pass 0 as base_block instead of
  setting th->base_block
* tool/compile_prelude.rb (prelude_eval): apply above changes.
* vm.c, vm_eval.c: ditto.
* vm_core.h: add comments.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-06-22 09:32:56 +00:00
nobu
3f6e8aef37 [Bug #6598]
* tool/runruby.rb (File.realpath): return real path of expanded path.
  [Bug #6598]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36107 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-06-15 22:12:58 +00:00
nobu
7931bbf1b3 tool/make-snapshot MKDIR_P
* tool/make-snapshot (package): MKDIR_P is needed as direct macro to
  build enc/unicode/name2ctype.h.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36090 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-06-14 15:14:05 +00:00
nobu
a73d6eb0e4 tool/make-snapshot MKDIR_P
* tool/make-snapshot (package): MKDIR_P is needed to build
  enc/unicode/name2ctype.h.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-06-14 15:07:13 +00:00
naruse
06d483006c * Makefile.in: don't remove macros. now name2ctype uses macros.
* tool/enc-unicode.rb: add comment why it uses Hash#index.

* enc/unicode/{name2ctype.kwd,name2ctype.src,name2ctype.h.blt}:
  update to follow the current name2ctype.h.
  FYI current Unicode version is 6.1.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36070 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-06-13 17:54:14 +00:00
nobu
2696fb9503 test: realpath
* test/runner.rb (src_testdir): expand real path so that
  TestGem#test_self_find_files does not fail by aliased load path when
  srcdir contains a symbolic link.
* tool/runruby.rb (srcdir): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35961 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-06-08 07:19:38 +00:00
nobu
a8f87d6d8d common test options
* common.mk (btest, test-sample, test-knownbugs, test-all, test-ruby):
  pass common options by TESTOPTS.

* tool/rubytest.rb: pass ARGV from make to sample/test.rb.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35839 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-30 01:24:05 +00:00
nobu
3f6349a1bf * tool/rbinstall.rb (capi): install to capi directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35527 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-03 14:56:39 +00:00
usa
756ffef448 * enc/euc_jp.c: added EUC-JP-2004 and its alias EUC-JISX0213.
[ruby-dev:45571] [Feature #6349]
  Requested by Kyouhei Yanagita <yanagi@shakenbu.org>.

* enc/trans/japanese_euc.trans: ditto.

* enc/trans/JIS/JISX0213-[12]%UCS@{BMP,SIP}.src: JIS X 0213:2004 ->
  Unicode mapping table from NetBSD.

* enc/trans/JIS/UCS@{BMP,SIP}%JISX0213-[12].src: Unicode -> JIX X
  0213:2004 mapping table from NetBSD.

* tool/transcode-tblgen.rb: added SIP support.

* test/ruby/test_transcode.rb: tests of above changes.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35460 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-04-24 11:14:18 +00:00
nobu
8354d2f700 * enc/unicode/name2ctype.h, tool/transcode-tblgen.rb: revert
unlogged changes which committed by accident probably.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-04-06 18:17:01 +00:00
duerst
6111599230 struct.c (documentation for rb_struct_members_m):
fix 'array of strings' to 'array of symbols'
  [ruby-core:44152][Bug #6264]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35244 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-04-06 07:23:40 +00:00
nobu
9052a8cd94 * tool/make-snapshot (package): EXEEXT is now used in mkmf.rb.
[ruby-core:43685]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35145 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-03-27 03:11:51 +00:00
nobu
be42c35424 * tool/make-snapshot (package): suppress constant overwritting warnings.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-03-27 03:11:48 +00:00
nobu
06fba52338 * tool/merger.rb (interactive): allow editing commit message.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35133 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-03-26 03:57:07 +00:00
nobu
1b2a60759b * tool/merger.rb (default_merge_branch): use IO.popen to invoke pager.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35132 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-03-26 03:57:03 +00:00
nobu
7e82db2e1e * tool/rbinstall.rb (prepare): skip if basedir is not defined.
[ruby-core:39135][Bug #5238]
* tool/rbinstall.rb (CONFIG.[]): check for mandatory
  configurations.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34993 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-03-13 01:59:54 +00:00
nobu
8e6dfeecc9 * tool/rubytest.rb: separate errors from dots.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34711 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-20 15:59:15 +00:00
naruse
6227690604 * tool/enc-unicode.rb: don't use 1.9 feature on tools.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34671 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-18 02:47:41 +00:00
naruse
0424e152c6 * Merge Onigmo-5.13.1. [ruby-dev:45057] [Feature #5820]
https://github.com/k-takata/Onigmo
  cp reg{comp,enc,error,exec,parse,syntax}.c reg{enc,int,parse}.h
  cp oniguruma.h
  cp tool/enc-unicode.rb
  cp -r enc/

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-17 07:42:23 +00:00
naruse
3b243514ff * tool/merger.rb: remove borders from the commit message which is used
when the commit doesn't change ChangeLog.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-17 03:37:44 +00:00
naruse
375fd3152f * tool/transcode-tblgen.rb (import_ucm): don't use \h because the
script should work with ruby 1.8.

* tool/enc-unicode.rb: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34650 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-17 00:53:13 +00:00
knu
24dbd19791 * tool/merger.rb (#default_merge_branch): Add support for
Subversion 1.7 which adopted a whole new working directory
  structure.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34568 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-12 07:33:09 +00:00
naruse
1a991ffebc * tool/merger.rb: don't abort, update first.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34470 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-08 01:04:07 +00:00