Commit Graph

920 Commits

Author SHA1 Message Date
morkt
92604f96cc (MioDecoder): implemented PCM and MSS decompression. 2015-05-29 18:21:16 +04:00
morkt
15dfa73de8 Entis audio format implementation. 2015-05-29 14:58:13 +04:00
morkt
74e8d13846 (EriFile): new wrapper class for Entis files reading. 2015-05-29 14:57:21 +04:00
morkt
5d2d620153 (EriFormat): implemented huffman decompression. 2015-05-28 13:11:48 +04:00
morkt
68493ede0f removed header length check. 2015-05-27 14:42:11 +04:00
morkt
ed9ae05853 implemented Entis rasterized image format. 2015-05-27 14:19:54 +04:00
morkt
11b6b12f07 FPK archives implementation. 2015-05-27 13:58:00 +04:00
morkt
d2eb1bbf8f implemented Entis archives decryption. 2015-05-27 13:57:34 +04:00
morkt
6fa4b53299 disable unused variable warning. 2015-05-27 13:55:42 +04:00
morkt
461e31b0d7 implemented 'SPack' archives. 2015-05-22 10:08:11 +04:00
morkt
3041b90606 fixed index size check. 2015-05-22 10:06:12 +04:00
morkt
fcce2da234 fixed scripts decryption. 2015-05-21 23:42:45 +04:00
morkt
c2d54d4bfa (UnpackV0): limit decompression loop by input length. 2015-05-21 23:42:03 +04:00
morkt
a3f973c1f7 improved HyPack archive version awareness. 2015-05-16 19:16:49 +04:00
morkt
f7e5b40314 assembly version update. 2015-05-15 18:50:05 +04:00
morkt
a2051e6752 use string.EndsWith() method instead of Path.GetExtension() 2015-05-15 18:49:37 +04:00
morkt
8640e34c27 renamed local var. 2015-05-15 17:51:23 +04:00
morkt
a60a95f226 recognize LZSS-compressed entries. 2015-05-15 17:34:45 +04:00
morkt
a313a32c03 implemented EAGLS system resources. 2015-05-15 17:32:07 +04:00
morkt
08abdbfd92 released v1.1.1 2015-05-14 20:04:35 +04:00
morkt
18a4089224 (Pt1Format): implemented compression type 0. 2015-05-14 15:42:58 +04:00
morkt
9a43b6b055 refactored SoundInput interface.
added Source property for access to underlying stream.
2015-05-14 11:26:47 +04:00
morkt
7e5dc325c0 (Wa1Audio.TryOpen): removed redundant null checks. 2015-05-13 23:49:58 +04:00
morkt
9e9e88f09d use Stream.WriteByte() to overwrite signature. 2015-05-13 23:49:08 +04:00
morkt
27d4cb6b69 implemented FFA System resources. 2015-05-13 23:22:27 +04:00
morkt
3425b92ef2 (Pt1Format): implemented V1 reader. 2015-05-13 23:21:41 +04:00
morkt
76d0dce6b2 recognize and unpack LZSS-compressed files. 2015-05-13 23:20:25 +04:00
morkt
6150e7f29c (Mp3Input): removed wave conversion streams. 2015-05-13 23:19:09 +04:00
morkt
6b4ee7a146 implemented MEGU engine resources. 2015-05-11 20:23:32 +04:00
morkt
417fbfdc78 (ArcOpener): recognize BMP file header. 2015-05-06 02:51:09 +04:00
morkt
308b881f45 (AmiFormat.Reader): removed unused field. 2015-05-06 02:50:15 +04:00
morkt
72eff1fb2c (Xp3Opener): support XP3 archives merged with EXE files. 2015-05-06 02:48:13 +04:00
morkt
d686846894 'MAI' resources implementation. 2015-05-03 22:06:09 +04:00
morkt
946173bd1a use remainder for format check. 2015-05-03 05:37:08 +04:00
morkt
9527412933 (PacOpener): fixed compressed entries extraction. 2015-05-03 05:34:05 +04:00
morkt
436e447d1b removed unused namespaces. 2015-05-03 05:33:07 +04:00
morkt
2ce7c55bdf implemented MP3 audio wrapper. 2015-05-01 23:33:22 +04:00
morkt
ca01b2c13b some fixes. 2015-05-01 23:32:04 +04:00
morkt
a2a9ced8df Pajamas Adventure System formats implementation. 2015-05-01 09:30:31 +04:00
morkt
7b1d5dc2f9 (PmpFormat.ReadMetaData): refined checking for valid zlib stream. 2015-05-01 09:24:57 +04:00
morkt
6e0a1ceff5 ScenePlayer compressed files implementation. 2015-05-01 03:03:03 +04:00
morkt
d7f7548fd0 (LpkOpener): added some predefined keys. 2015-04-30 21:08:17 +04:00
morkt
b6a354f52a Silky's MFG format implementation. 2015-04-30 21:07:11 +04:00
morkt
9aa4f8bb77 (AdvReader): fixed encryption scheme search logic. 2015-04-27 21:40:51 +04:00
morkt
35ad091adf (ArcOpener.OpenEntry): decrypt ASB scripts (the only known key is hard-coded). 2015-04-27 21:35:48 +04:00
morkt
8ee82a8c31 alternative encryption schemes for LPK archives. 2015-04-25 02:07:14 +04:00
morkt
0e18247492 removed copy-paste remnants. 2015-04-25 02:05:52 +04:00
morkt
17037fd7eb Entis GLS archives preliminary implementation (no encryption yet). 2015-04-25 02:04:43 +04:00
morkt
a12d481d21 minor fixes. 2015-04-23 13:39:04 +04:00
morkt
3a4a3901fc AZ system engine resources implementation. 2015-04-22 22:39:16 +04:00
morkt
ec8f39a2c7 Lucifen Game System resources implementation.
LPK archives;
ELG images.
2015-04-22 05:14:41 +04:00
morkt
62a1bcc738 updated supported formats. 2015-04-21 03:51:05 +04:00
morkt
d8811e17e3 Ail (?) resource archives implementation. 2015-04-21 03:42:13 +04:00
morkt
b74f27cd6a Nexton LikeC script engine archives. 2015-04-21 03:39:55 +04:00
morkt
f929504e91 implemented AST script engine archives. 2015-04-21 03:39:17 +04:00
morkt
1a8add3ab9 implemented ShiinaRio resources.
WARC archives;
S25 images;
OGV sound files.
2015-04-20 20:57:01 +04:00
morkt
1ca1a219c2 generalized public methods interface for convenience. 2015-04-20 14:14:21 +04:00
morkt
44cf44f7c9 (Pt1Format): use ImageData.Create method. 2015-04-20 14:13:10 +04:00
morkt
b33577c051 DRG images implementation updates.
support for 8-bit images;
support for alpha-channel in GGA0 images.
2015-04-20 14:11:36 +04:00
morkt
c641738821 (DatOpener.OpenEntry): get rid of the intermediate MemoryStream. 2015-04-20 14:08:59 +04:00
morkt
167d9b53a1 (HuffmanDecode): clean-up reverse-engineered stuff. 2015-04-20 14:06:20 +04:00
morkt
1342736ee6 renamed Will ARC-related settings and widget.
to distinguish from upcoming ShiinaRio WARC stuff.
2015-04-19 19:08:56 +04:00
morkt
00f5d31d23 ignore private stuff. 2015-04-19 15:30:42 +04:00
morkt
329b7f476d Black Package resources implementation. 2015-04-19 15:29:35 +04:00
morkt
d3a459cfb0 (MblOpener): another archive format variant. 2015-04-19 15:27:52 +04:00
morkt
c5c996b092 (AniOpener): discard empty containers. 2015-04-19 15:21:41 +04:00
morkt
41d2accec5 GsPack resources implementation. 2015-04-16 22:41:34 +04:00
morkt
127a2bcf4d AutoEntry.Offset set in constructor now. 2015-04-16 22:41:03 +04:00
morkt
0aaf977c8a AuroEntry changes.
(constructor): set offset property.
(GetName): use Path.ChangeExtension to set filename extension.
2015-04-16 22:38:47 +04:00
morkt
75c3f8b61e (HuffmanDecoder): class made public and moved to ArcCommon.cs 2015-04-14 10:28:00 +04:00
morkt
e1c2d0f2ce (AVC.DatOpener): try out several predefined schemes. 2015-04-14 10:26:55 +04:00
morkt
8b6e7d869c implemented IFL archives and GRD images. 2015-04-12 23:02:29 +04:00
morkt
3d4b74e34a additional check to avoid false positives. 2015-04-12 23:01:45 +04:00
morkt
0183e8be52 implemented archive version 2 reading. 2015-04-12 23:01:05 +04:00
morkt
c1614a20c7 renamed archive tag. 2015-04-12 23:00:08 +04:00
morkt
bd2aa6c757 PD/PB archives and auxiliary image formats. 2015-04-11 10:00:44 +04:00
morkt
9cabb73c00 implemented ALD archive and QNT image formats. 2015-04-10 06:35:06 +04:00
morkt
6e472559f1 fixed mistake. 2015-04-10 06:33:00 +04:00
morkt
642d82295d Ainos image format implementation. 2015-04-06 17:11:32 +04:00
morkt
1bafacfa09 Ainos image format implementation. 2015-04-06 17:11:15 +04:00
morkt
31ec7d240d added LZSS decompression support. 2015-04-06 17:09:14 +04:00
morkt
68038edf00 fixed entries skipping in AVC index parser. 2015-04-06 17:06:31 +04:00
morkt
3650164c2d added another A98SYS engine archive version. 2015-04-06 17:05:41 +04:00
morkt
3e56c4dd8f implemented "M no Violet" engine resources. 2015-04-04 05:32:01 +04:00
morkt
0ca1c7248f use AutoEntry to determine type of entries. 2015-04-04 05:30:51 +04:00
morkt
487a134800 use common LzssReader class for decompression. 2015-04-04 05:29:23 +04:00
morkt
ead52fc075 (SaiminCrypt.Decrpyt): fixed byte decryption method logic. 2015-04-04 05:28:17 +04:00
morkt
8be92da42b BGI/Ethornell engine image format. 2015-04-04 05:26:59 +04:00
morkt
bf9ea96717 (AutoEntry, LzssReader): new classes.
AutoEntry is an Entry that changes its name/type according to underlying
file contents.
LzssReader is a LZSS unpacker.
2015-04-04 05:26:14 +04:00
morkt
086649d7e7 new resource formats.
Studio e.go and Marble engine archives.
WADY - Marble engine audio format.
PRS - Marble engine image format.
2015-03-31 14:43:19 +04:00
morkt
336d5c7174 (TryOpen): fixed skipping of invalid entries. 2015-03-31 14:41:27 +04:00
morkt
dba869d134 (ReadMetaData): height is a 32-bit integer. 2015-03-31 14:40:49 +04:00
morkt
26905015c2 Marble engine resources implementation. 2015-03-31 14:34:49 +04:00
morkt
e95cec0f3c added Ore no Saimin Fantasia encryption scheme. 2015-03-31 14:34:01 +04:00
morkt
7c01c8e5f9 Studio e.go! engine archive implementation. 2015-03-31 14:30:35 +04:00
morkt
5319000ad5 BMD image format implementation. 2015-03-26 06:57:33 +04:00
morkt
cc297869e5 (DatOpener): define signatures in constructor. 2015-03-26 06:54:12 +04:00
morkt
9ae74ce5bb added PB archive format. 2015-03-26 06:53:33 +04:00
morkt
60dedf0328 NekoPack archives are actually hierarchical.
Instead of directory and file names, their hash sums are stored. Hash is
one-way function, so reconstructing names is impossible unless there's
some predefined set of widely-used names, like "script", "bgm" etc.
2015-03-26 06:52:45 +04:00
morkt
0442de677a initialize Extensions property since Tag was changed. 2015-03-26 06:47:37 +04:00
morkt
b74a9f9265 implemented ISG image format. 2015-03-20 02:21:44 +04:00
morkt
87c6a210be implemented ISA archives. 2015-03-18 05:44:21 +04:00
morkt
fb60862b58 (PacOpener.TryOpen): set IsPacked property. 2015-03-18 05:43:18 +04:00
morkt
e895f636ab new archive formats, AVC and NeXAS. 2015-03-16 05:43:11 +04:00
morkt
9afd8e6cb3 added password for "Itazura Mahjong". 2015-03-16 05:36:25 +04:00
morkt
9ed7665e33 changed format tag to "PAC1". 2015-03-16 05:32:53 +04:00
morkt
2b973c0bd6 split indexed image reader into separate method. 2015-03-16 05:31:03 +04:00
morkt
8111f52541 (OpenEntry): limit returned stream to block length. 2015-03-13 15:32:51 +04:00
morkt
9b4dd096e7 NEKOPACK archives implementation. 2015-03-13 04:48:45 +04:00
morkt
6c3e1ed433 released v1.0.4 2015-03-11 21:27:02 +04:00
morkt
5b56d8df14 (PackOpener): store known schemes as Dictionary. 2015-03-11 18:51:52 +04:00
morkt
2c2dfec477 KCAP archives are hierarchic. 2015-03-11 16:45:21 +04:00
morkt
85c55b9aec removed commented out code. 2015-03-11 16:42:55 +04:00
morkt
7580d36414 implemented Selene 'KCAP' archive format. 2015-03-11 16:37:51 +04:00
morkt
520e7215ba limit alpha channel values to 0xff 2015-03-11 16:36:13 +04:00
morkt
bbc286b0fd BIP: new image format. 2015-03-05 17:40:56 +04:00
morkt
f703789685 (PrefixStream.Read): changed underlying stream position reset logic. 2015-03-05 17:40:13 +04:00
morkt
bc3e1bc2d9 (DatOpener): new archive format. 2015-03-05 17:38:40 +04:00
morkt
b2ab176ef3 (FlyingShinePdOpener): changed signature. 2015-03-05 17:37:57 +04:00
morkt
722d907504 (ReadMetaData): check unpacked bitmap signature. 2015-03-05 17:37:22 +04:00
morkt
a5dc3c9943 GSP archives and BMZ bitmaps implementation. 2015-03-04 16:27:23 +04:00
morkt
3214e05609 Moved PrefixStream class implementation to separate file. 2015-02-26 22:07:49 +04:00
morkt
74f1f1ef7b new formats. 2015-02-26 08:23:56 +04:00
morkt
eb3dded3e3 Nitro+ PAK archives implementation. 2015-02-26 08:22:54 +04:00
morkt
1431ac3124 Tactics resource archive implementation. 2015-02-26 08:21:49 +04:00
morkt
00def88163 Riddle Soft archive implementation. 2015-02-26 08:21:00 +04:00
morkt
85d5336c53 new image formats. 2015-02-26 08:20:29 +04:00
morkt
8118780b79 indexed images not implemented. 2015-02-26 08:20:15 +04:00
morkt
6f907c3204 year. 2015-02-26 08:18:26 +04:00
morkt
ccb903a673 FVP engine archive implementation. 2015-02-26 08:18:11 +04:00
morkt
4636ddf8c3 Opener description. 2015-02-26 08:17:29 +04:00
morkt
a2c5e2eb95 Adpack32 archive implementation. 2015-02-26 08:16:51 +04:00
morkt
250858262b added another version of DRS archives. 2015-02-15 19:53:04 +04:00
morkt
9bb3701488 NVorbis updated. 2015-02-15 19:52:04 +04:00
morkt
7fcdf1e356 added another version of PD archive. 2015-02-15 19:51:42 +04:00
morkt
797931eef8 added GG2 image format. 2015-02-15 19:51:16 +04:00
morkt
7de11127a7 AFS and PACKDAT archives implementation. 2015-01-19 09:43:52 +04:00
morkt
2a7520939d use Buffer.BlockCopy instead of Array.Copy. 2014-11-07 17:11:11 +04:00
morkt
3a2be63bf3 added Ogg/Vorbis audio format. 2014-11-07 02:51:32 +04:00
morkt
c08a8f4579 implemented MGPK archives. 2014-11-07 02:47:51 +04:00
morkt
0164ce838a released v1.0.3 2014-11-01 13:26:08 +04:00
morkt
0b8eb1f9d4 implemented Will co. archives creation. 2014-11-01 02:14:51 +04:00
morkt
56d2a45d94 implemented Will co. engine resources. 2014-10-31 18:50:43 +04:00
morkt
6736819db1 cosmetic changes. 2014-10-31 18:47:37 +04:00
morkt
6aeb3ea27e automatically update assembly build/revision number. 2014-10-31 18:47:02 +04:00
morkt
1faea63667 cosmetic changes. 2014-09-12 16:04:38 +04:00
morkt
f02cc382a1 BGI/Ethornell engine archive implementation. 2014-09-12 15:59:56 +04:00
morkt
12df1dcdfd (GetScheme): fixed potential bug when looking up unknown encryption scheme. 2014-09-09 01:04:27 +04:00
morkt
58f8b4845d incremented version number. 2014-09-08 11:54:39 +04:00
morkt
a0162b4bbc Cx encryption bytecode generation fix. 2014-09-08 11:27:24 +04:00
morkt
12d8236d3d fixed Imouto Style encryption constants. 2014-09-08 08:29:05 +04:00
morkt
a267a8dd1f implemented KiriKiri "Cx" encryption scheme. 2014-09-08 08:02:07 +04:00
morkt
5d4696de4c cosmetic changes. 2014-09-08 07:36:20 +04:00
morkt
c5982da278 Revert "cosmetic changes."
This reverts commit 06e651d43b.
2014-09-07 21:30:47 +04:00
morkt
06e651d43b cosmetic changes. 2014-08-31 18:49:42 +04:00
morkt
f06396f1e3 implemented Kogado archives creation. 2014-08-25 18:22:55 +04:00
morkt
870e65cd42 import GameRes.Utility namespace. 2014-08-25 15:12:53 +04:00
morkt
fa4b8b6bce implemented Kogado resource archive. 2014-08-25 15:11:34 +04:00
morkt
b0f621e8ab CopyOverlapped function defined in GameRes.Utitlity now.
CopyOverlapped copies ranges within array the same way standard C
function memcpy does (that is, ignoring potential region overlapping).
2014-08-25 15:04:26 +04:00
morkt
1b85159ed2 (DrsOpener): additional entry offset sanity checks. 2014-08-24 14:11:41 +04:00
morkt
2420cfa07c minor DRG compression fix. 2014-08-24 08:42:38 +04:00
morkt
a9228c7534 minor DRG compression fix. 2014-08-23 05:48:31 +04:00
morkt
4dbf556531 implemented RctFormat.Write method. 2014-08-22 16:48:41 +04:00
morkt
792aa82091 implemented Digital Romance System resources. 2014-08-22 10:18:03 +04:00
morkt
ad6e83cc60 minor decryption fix. 2014-08-22 10:17:14 +04:00
morkt
dc9f0ebb44 implemented encrypted Nitro+ archives creation. 2014-08-19 04:33:52 +04:00
morkt
8697257e79 implemented Nitro+ archives creation.
encryption not implemented yet.
2014-08-18 09:07:35 +04:00
morkt
881a95c165 fixed packed file size in created archives. 2014-08-18 03:17:03 +04:00
morkt
5688546a85 fixed list serialization. 2014-08-17 22:27:50 +04:00
morkt
3bbf2d6a90 implemented Ren'Py archives creation. 2014-08-17 01:31:58 +04:00
morkt
97b9e28fbc changed zlib compression level to maximum (Level9). 2014-08-17 01:28:42 +04:00
morkt
5e15fb5091 implemented Ren'Py game engine archives support. 2014-08-16 10:38:26 +04:00
morkt
dc30eb0083 implemented Yu-Ris archives creation. 2014-08-16 04:42:20 +04:00
morkt
089becd4d3 implemented Majiro version 1 archive creation. 2014-08-16 00:52:16 +04:00
morkt
8fc34f9161 implemented non-encrypted INT archives creation. 2014-08-15 21:41:45 +04:00
morkt
d1bde19bb3 implemented Flying Shine resource archive. 2014-08-14 21:39:51 +04:00
morkt
a1cd7172ee adjusted label alignment. 2014-08-03 10:55:09 +04:00
morkt
15a81fab18 sort known encryption schemes list. 2014-08-03 10:48:08 +04:00
morkt
ad9fc13068 (UpdateFileTable): check added file for existence. 2014-08-03 10:47:34 +04:00
morkt
f6bb4716a6 (WriteImageEntry): tweaked linq query syntax. 2014-08-02 11:24:00 +04:00
morkt
1b46da45a6 refactoring.
(ArchiveFormat): added Query<ResourceOptions> protected method for
convenient invocation of  parameters requests.
(FormatCatalog): changed misguiding method name 'LookupTag' to
'LookupExtension'.
2014-08-02 10:01:06 +04:00
morkt
13674f2e11 correctly check reserved view size. 2014-08-02 00:42:59 +04:00
morkt
e90643d71d use ArcView.Frame.AsciiEqual for sanity check. 2014-08-01 20:40:14 +04:00
morkt
e2773d437e (Parser.Decrypt): less cryptic. 2014-08-01 20:38:36 +04:00
morkt
959dec52f2 changed target framework version to v4.5 2014-08-01 20:14:08 +04:00
morkt
b7505b1f86 (YpfOpener): cosmetic changes. 2014-08-01 19:50:21 +04:00
morkt
3ba8c6d237 disable PDB generation in release build. 2014-08-01 19:49:00 +04:00
morkt
bc42670aae implemented Majiro archives and auxiliary image formats. 2014-08-01 16:48:21 +04:00
morkt
32b320d550 (WcgFormat.Reader): cosmetic changes. 2014-08-01 16:46:58 +04:00
morkt
eefa7d2fc2 added creation options for AMI archives. 2014-08-01 16:44:53 +04:00
morkt
b1015ff785 helper classes made internal. 2014-08-01 16:43:31 +04:00
morkt
e880cac7c3 moved to GameRes.Formats.KiriKiri namespace. 2014-08-01 16:36:10 +04:00
morkt
0249ecf40e (GetKeyFromEntry): fixed PHENOMENO key. 2014-07-30 01:14:45 +04:00
morkt
6005016a07 implemented AMI archive creation. 2014-07-29 19:05:58 +04:00
morkt
5d876b69bc fixed zlibnet reference. 2014-07-29 15:10:13 +04:00
morkt
c1c6ad519d implemented LZSS compression. 2014-07-29 14:50:29 +04:00
morkt
20efb9d89e (TryOpen): check entry placement. 2014-07-29 14:18:24 +04:00
morkt
b3e35162f6 implemented ON-Scripter archive creation. 2014-07-29 11:53:05 +04:00
morkt
f9a8d808f0 (Create): cosmetic changes. 2014-07-29 11:51:16 +04:00
morkt
a1ff08e138 (Create): fixed real entries count writing. 2014-07-29 11:50:12 +04:00
morkt
81efc33676 (Create): use localized strings. 2014-07-29 11:49:22 +04:00
morkt
a8a6f31efa removed compression check for SAR archives. 2014-07-29 07:06:27 +04:00
morkt
32b33e5433 cosmetic changes. 2014-07-29 07:05:28 +04:00
morkt
3e2bab9dac implemented Steins;Gate archive creation. 2014-07-29 07:02:49 +04:00
morkt
9922955323 added license clause and third-party copyright notices. 2014-07-28 00:50:18 +04:00
morkt
54a80b3573 (OpenEntry): fixed compressed entries access.
(Unpacker): use byte[] buffer directly instead of MemoryStream wrapper.
2014-07-28 00:26:51 +04:00
morkt
aab7efaa1f added ONScripter (NSA/SAR) archives reader. 2014-07-27 14:48:32 +04:00
morkt
9fb51e57e3 (TryOpen): check entry name validity. 2014-07-27 09:45:47 +04:00
morkt
1c33e4c9d5 refactored ResourceOptions handling. 2014-07-27 07:39:58 +04:00
morkt
08b8e8a46b added callback into archive creation method. 2014-07-27 03:37:51 +04:00
morkt
b72d9194e8 implemented XP3 archive creation. 2014-07-26 23:13:17 +04:00
morkt
bedba61ff5 added CanCreate property. 2014-07-26 23:12:05 +04:00
morkt
5019124514 rearranged archive parameters widgets. 2014-07-26 23:11:24 +04:00
morkt
ee4584d1f0 implemented Xfl.Create method. 2014-07-25 06:57:14 +04:00
morkt
c807fcb1e7 changed archive tag. 2014-07-25 06:21:07 +04:00
morkt
91cb7bd956 (NpaArchive.QueryGameEncryption): restore last choice from Settings. 2014-07-25 00:56:06 +04:00
morkt
de30012635 Nitro+ Steins;Gate archive reader. 2014-07-25 00:53:48 +04:00
morkt
17bc0c0391 Nitro+ Steins;Gate archive reader. 2014-07-25 00:53:32 +04:00
morkt
0a1f14e051 added preliminary archive creation support. 2014-07-24 05:43:20 +04:00
Poddav
e208029dd3 Initial commit. 2014-07-21 23:26:28 +04:00