embulk 0.6.16 → 0.6.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +33 -45
- data/build.gradle +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/Exec.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +73 -1
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +25 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +53 -0
- data/embulk-docs/src/_static/embulk-logo.svg +133 -0
- data/embulk-docs/src/release.rst +1 -0
- data/embulk-docs/src/release/release-0.6.17.rst +39 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +2 -17
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +3 -22
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +2 -2
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +0 -1
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +18 -42
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +3 -3
- data/lib/embulk/command/embulk_new_plugin.rb +40 -14
- data/lib/embulk/command/embulk_run.rb +3 -3
- data/lib/embulk/data/new/README.md.erb +18 -17
- data/lib/embulk/data/new/java/build.gradle.erb +1 -1
- data/lib/embulk/data/new/java/decoder.java.erb +53 -9
- data/lib/embulk/data/new/java/encoder.java.erb +54 -8
- data/lib/embulk/data/new/java/file_input.java.erb +91 -12
- data/lib/embulk/data/new/java/file_output.java.erb +35 -8
- data/lib/embulk/data/new/java/filter.java.erb +16 -7
- data/lib/embulk/data/new/java/formatter.java.erb +16 -7
- data/lib/embulk/data/new/java/input.java.erb +18 -14
- data/lib/embulk/data/new/java/output.java.erb +16 -8
- data/lib/embulk/data/new/java/parser.java.erb +17 -8
- data/lib/embulk/data/new/java/plugin_loader.rb.erb +1 -1
- data/lib/embulk/data/new/java/test.java.erb +1 -1
- data/lib/embulk/data/new/ruby/filter.rb.erb +6 -4
- data/lib/embulk/data/new/ruby/formatter.rb.erb +6 -4
- data/lib/embulk/data/new/ruby/gemspec.erb +2 -2
- data/lib/embulk/data/new/ruby/input.rb.erb +6 -4
- data/lib/embulk/data/new/ruby/output.rb.erb +6 -4
- data/lib/embulk/data/new/ruby/parser.rb.erb +6 -4
- data/lib/embulk/file_input.rb +4 -0
- data/lib/embulk/file_output.rb +4 -0
- data/lib/embulk/version.rb +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c667cedd2e533e4a3404c81baa92618dfd826644
|
4
|
+
data.tar.gz: fc3c840b3c855395c02b3d2ba3e84cf3428a8a55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e30b36e74c05cc9a3f63565691fd4366803be573f9909c1cfcce1292a65a1c7b70a1a6d324990555f89b774c786a8dc1316012f9f9a4330f52c3963573cedaa9
|
7
|
+
data.tar.gz: 8299b1e6c264a0031e2de1c557fd1a91eae1d24bf7badfc671e81fdc007421c4cc77dbc40cb8e6c15f66d54bd259be44b925772104055105988a704401f52418
|
data/README.md
CHANGED
@@ -1,58 +1,48 @@
|
|
1
1
|
# What's Embulk?
|
2
2
|
|
3
|
-
Embulk is a
|
3
|
+
Embulk is a parallel bulk data loader that **helps data transfer between various storages, databases, NoSQL and cloud services**.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
[Embulk, an open-source plugin-based parallel bulk data loader](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed) at Slideshare
|
5
|
+
**Embulk supports plugins** to add functions. You can [share the plugins](http://www.embulk.org/plugins/) to keep your custom scripts readable, maintainable, and reusable.
|
8
6
|
|
9
7
|
[![Embulk](https://gist.githubusercontent.com/frsyuki/f322a77ee2766a508ba9/raw/e8539b6b4fda1b3357e8c79d3966aa8148dbdbd3/embulk-overview.png)](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed/12)
|
8
|
+
[Embulk, an open-source plugin-based parallel bulk data loader](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed) at Slideshare
|
10
9
|
|
11
10
|
# Document
|
12
11
|
|
13
|
-
|
14
|
-
* [Using plugins](#using-plugins)
|
15
|
-
* [Using plugin bundle](#using-plugin-bundle)
|
16
|
-
* [Releasing plugins to RubyGems](#releasing-plugins-to-rubygems)
|
17
|
-
* [Resuming a failed transaction](#resuming-a-failed-transaction)
|
18
|
-
* [Embulk Development](#embulk-development)
|
19
|
-
* [Build](#build)
|
20
|
-
* [Release](#release)
|
12
|
+
Embulk documents: http://www.embulk.org/docs/
|
21
13
|
|
22
14
|
## Quick Start
|
23
15
|
|
24
|
-
The single-file package is the simplest way to try Embulk. You can download the latest embulk-VERSION.jar from [the releases page](https://bintray.com/embulk/maven/embulk/view#files) and run it with java.
|
25
|
-
|
26
16
|
### Linux & Mac & BSD
|
27
17
|
|
28
|
-
Embulk is a Java application. Please make sure that
|
18
|
+
Embulk is a Java application. Please make sure that [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) is installed.
|
29
19
|
|
30
20
|
Following 4 commands install embulk to your home directory:
|
31
21
|
|
32
|
-
```
|
22
|
+
```sh
|
33
23
|
curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
|
34
24
|
chmod +x ~/.embulk/bin/embulk
|
35
25
|
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
|
36
26
|
source ~/.bashrc
|
37
27
|
```
|
38
28
|
|
39
|
-
Next step: [
|
29
|
+
Next step: [Running example in 4 commands](#running-example)
|
40
30
|
|
41
31
|
### Windows
|
42
32
|
|
43
|
-
Embulk is a Java application. Please make sure that
|
33
|
+
Embulk is a Java application. Please make sure that [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) is installed.
|
44
34
|
|
45
|
-
You can
|
35
|
+
You can download `embulk.bat` using this command on cmd.exe or PowerShell.exe:
|
46
36
|
|
47
37
|
```
|
48
38
|
PowerShell -Command "& {Invoke-WebRequest http://dl.embulk.org/embulk-latest.jar -OutFile embulk.bat}"
|
49
39
|
```
|
50
40
|
|
51
|
-
Next step: [
|
41
|
+
Next step: [Running example in 4 commands](#running-example)
|
52
42
|
|
53
|
-
###
|
43
|
+
### Running example
|
54
44
|
|
55
|
-
|
45
|
+
`embulk example` command generates a sample CSV file so that you can try embulk quickly:
|
56
46
|
|
57
47
|
```
|
58
48
|
embulk example ./try1
|
@@ -78,9 +68,10 @@ embulk gem list
|
|
78
68
|
|
79
69
|
Embulk bundles some built-in plugins such as `embulk-encoder-gzip` or `embulk-formatter-csv`. You can use those plugins with following configuration file:
|
80
70
|
|
81
|
-
```
|
71
|
+
```yaml
|
82
72
|
in:
|
83
|
-
|
73
|
+
type: file
|
74
|
+
path_prefix: "./try1/csv/sample_"
|
84
75
|
out:
|
85
76
|
type: command
|
86
77
|
command: "cat - > task.$INDEX.$SEQID.csv.gz"
|
@@ -90,27 +81,6 @@ out:
|
|
90
81
|
type: csv
|
91
82
|
```
|
92
83
|
|
93
|
-
### Using plugin bundle
|
94
|
-
|
95
|
-
`embulk bundle` subcommand creates (or updates if already exists) a private (isolated) bundle of a plugins.
|
96
|
-
You can use the bundle using `-b <bundle_dir>` option. `embulk bundle` also generates some example plugins to \<bundle_dir>/embulk/\*.rb directory.
|
97
|
-
|
98
|
-
See the generated \<bundle_dir>/Gemfile file how to plugin bundles work.
|
99
|
-
|
100
|
-
```
|
101
|
-
embulk bundle ./embulk_bundle
|
102
|
-
embulk guess -b ./embulk_bundle ...
|
103
|
-
embulk run -b ./embulk_bundle ...
|
104
|
-
```
|
105
|
-
|
106
|
-
### Releasing plugins to RubyGems
|
107
|
-
|
108
|
-
TODO: documents
|
109
|
-
|
110
|
-
```
|
111
|
-
embulk-plugin-xyz
|
112
|
-
```
|
113
|
-
|
114
84
|
### Resuming a failed transaction
|
115
85
|
|
116
86
|
Embulk supports resuming failed transactions.
|
@@ -132,6 +102,24 @@ If you give up on resuming the transaction, you can use `embulk cleanup` subcomm
|
|
132
102
|
embulk cleanup config.yml -r resume-state.yml
|
133
103
|
```
|
134
104
|
|
105
|
+
### Using plugin bundle
|
106
|
+
|
107
|
+
`embulk bundle` subcommand creates (or updates if already exists) a private (isolated) bundle of a plugins.
|
108
|
+
You can use the bundle using `-b <bundle_dir>` option. `embulk bundle` also generates some example plugins to \<bundle_dir>/embulk/\*.rb directory.
|
109
|
+
|
110
|
+
See the generated \<bundle_dir>/Gemfile file how to plugin bundles work.
|
111
|
+
|
112
|
+
```
|
113
|
+
embulk bundle ./embulk_bundle
|
114
|
+
embulk guess -b ./embulk_bundle ...
|
115
|
+
embulk run -b ./embulk_bundle ...
|
116
|
+
```
|
117
|
+
|
118
|
+
## Use cases
|
119
|
+
|
120
|
+
* [Scheduled bulk data loading to Elasticsearch + Kibana 4 from CSV files](http://www.embulk.org/docs/recipe/scheduled-csv-load-to-elasticsearch-kibana4.html)
|
121
|
+
|
122
|
+
For further details, visit [Embulk documentation](http://www.embulk.org/docs/).
|
135
123
|
|
136
124
|
## Embulk Development
|
137
125
|
|
data/build.gradle
CHANGED
@@ -11,7 +11,7 @@ def release_projects = [project(":embulk-core"), project(":embulk-standards")]
|
|
11
11
|
|
12
12
|
allprojects {
|
13
13
|
group = 'org.embulk'
|
14
|
-
version = '0.6.
|
14
|
+
version = '0.6.17'
|
15
15
|
|
16
16
|
ext {
|
17
17
|
jrubyVersion = '1.7.19'
|
@@ -282,9 +282,9 @@ Manual operations:
|
|
282
282
|
bintrayUpload.mustRunAfter('releaseCheck')
|
283
283
|
rubyGemsUpload.mustRunAfter('releaseCheck')
|
284
284
|
|
285
|
-
task
|
285
|
+
task setVersion << {
|
286
286
|
if (!project.hasProperty("to")) {
|
287
|
-
throw new GradleException("Usage: ./gradlew -Pto=VERSION")
|
287
|
+
throw new GradleException("Usage: ./gradlew setVersion -Pto=VERSION")
|
288
288
|
}
|
289
289
|
|
290
290
|
File gradle_ver = file('build.gradle')
|
@@ -10,6 +10,7 @@ import org.embulk.config.ConfigDiff;
|
|
10
10
|
import org.embulk.config.ConfigSource;
|
11
11
|
import org.embulk.config.TaskSource;
|
12
12
|
import org.embulk.plugin.PluginType;
|
13
|
+
import org.embulk.spi.time.Timestamp;
|
13
14
|
|
14
15
|
public class Exec
|
15
16
|
{
|
@@ -43,6 +44,11 @@ public class Exec
|
|
43
44
|
return session().getInjector();
|
44
45
|
}
|
45
46
|
|
47
|
+
public static Timestamp getTransactionTime()
|
48
|
+
{
|
49
|
+
return session().getTransactionTime();
|
50
|
+
}
|
51
|
+
|
46
52
|
public static Logger getLogger(String name)
|
47
53
|
{
|
48
54
|
return session().getLogger(name);
|
@@ -19,7 +19,13 @@ public class InputStreamFileInput
|
|
19
19
|
public void close() throws IOException;
|
20
20
|
}
|
21
21
|
|
22
|
-
public
|
22
|
+
public interface Opener
|
23
|
+
{
|
24
|
+
public InputStream open() throws IOException;
|
25
|
+
}
|
26
|
+
|
27
|
+
public static class IteratorProvider implements Provider
|
28
|
+
{
|
23
29
|
private Iterator<InputStream> iterator;
|
24
30
|
|
25
31
|
public IteratorProvider(Iterable<InputStream> iterable)
|
@@ -32,6 +38,7 @@ public class InputStreamFileInput
|
|
32
38
|
this.iterator = iterator;
|
33
39
|
}
|
34
40
|
|
41
|
+
@Override
|
35
42
|
public InputStream openNext() throws IOException
|
36
43
|
{
|
37
44
|
if (!iterator.hasNext()) {
|
@@ -49,6 +56,61 @@ public class InputStreamFileInput
|
|
49
56
|
}
|
50
57
|
}
|
51
58
|
|
59
|
+
private static class OpenerProvider implements Provider
|
60
|
+
{
|
61
|
+
private Opener opener;
|
62
|
+
|
63
|
+
public OpenerProvider(Opener opener)
|
64
|
+
{
|
65
|
+
this.opener = opener;
|
66
|
+
}
|
67
|
+
|
68
|
+
@Override
|
69
|
+
public InputStream openNext() throws IOException
|
70
|
+
{
|
71
|
+
if (opener == null) {
|
72
|
+
return null;
|
73
|
+
}
|
74
|
+
InputStream stream = opener.open();
|
75
|
+
opener = null;
|
76
|
+
return stream;
|
77
|
+
}
|
78
|
+
|
79
|
+
@Override
|
80
|
+
public void close() throws IOException
|
81
|
+
{ }
|
82
|
+
}
|
83
|
+
|
84
|
+
private static class InputStreamProvider implements Provider
|
85
|
+
{
|
86
|
+
private InputStream input;
|
87
|
+
|
88
|
+
public InputStreamProvider(InputStream input)
|
89
|
+
{
|
90
|
+
this.input = input;
|
91
|
+
}
|
92
|
+
|
93
|
+
@Override
|
94
|
+
public InputStream openNext() throws IOException
|
95
|
+
{
|
96
|
+
if (input == null) {
|
97
|
+
return null;
|
98
|
+
}
|
99
|
+
InputStream ret = input;
|
100
|
+
input = null;
|
101
|
+
return ret;
|
102
|
+
}
|
103
|
+
|
104
|
+
@Override
|
105
|
+
public void close() throws IOException
|
106
|
+
{
|
107
|
+
if (input != null) {
|
108
|
+
input.close();
|
109
|
+
input = null;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
52
114
|
private final BufferAllocator allocator;
|
53
115
|
private final Provider provider;
|
54
116
|
private InputStream current;
|
@@ -60,6 +122,16 @@ public class InputStreamFileInput
|
|
60
122
|
this.current = null;
|
61
123
|
}
|
62
124
|
|
125
|
+
public InputStreamFileInput(BufferAllocator allocator, Opener opener)
|
126
|
+
{
|
127
|
+
this(allocator, new OpenerProvider(opener));
|
128
|
+
}
|
129
|
+
|
130
|
+
public InputStreamFileInput(BufferAllocator allocator, InputStream openedStream)
|
131
|
+
{
|
132
|
+
this(allocator, new InputStreamProvider(openedStream));
|
133
|
+
}
|
134
|
+
|
63
135
|
public Buffer poll()
|
64
136
|
{
|
65
137
|
// TODO check current != null and throw Illegal State - file is not opened
|
@@ -0,0 +1,25 @@
|
|
1
|
+
package org.embulk.spi.util;
|
2
|
+
|
3
|
+
import java.io.InputStream;
|
4
|
+
import org.embulk.spi.TransactionalFileInput;
|
5
|
+
import org.embulk.spi.BufferAllocator;
|
6
|
+
|
7
|
+
public abstract class InputStreamTransactionalFileInput
|
8
|
+
extends InputStreamFileInput
|
9
|
+
implements TransactionalFileInput
|
10
|
+
{
|
11
|
+
public InputStreamTransactionalFileInput(BufferAllocator allocator, Provider provider)
|
12
|
+
{
|
13
|
+
super(allocator, provider);
|
14
|
+
}
|
15
|
+
|
16
|
+
public InputStreamTransactionalFileInput(BufferAllocator allocator, Opener opener)
|
17
|
+
{
|
18
|
+
super(allocator, opener);
|
19
|
+
}
|
20
|
+
|
21
|
+
public InputStreamTransactionalFileInput(BufferAllocator allocator, InputStream openedStream)
|
22
|
+
{
|
23
|
+
super(allocator, openedStream);
|
24
|
+
}
|
25
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
package org.embulk.spi.util;
|
2
|
+
|
3
|
+
import java.util.Map;
|
4
|
+
import com.google.common.base.Optional;
|
5
|
+
import org.embulk.config.Task;
|
6
|
+
import org.embulk.spi.Column;
|
7
|
+
import org.embulk.spi.Schema;
|
8
|
+
import org.embulk.spi.ColumnConfig;
|
9
|
+
import org.embulk.spi.SchemaConfig;
|
10
|
+
import org.embulk.spi.time.TimestampFormatter;
|
11
|
+
import org.embulk.spi.type.TimestampType;
|
12
|
+
import org.embulk.spi.time.TimestampParser;
|
13
|
+
import org.embulk.spi.SchemaConfig;
|
14
|
+
|
15
|
+
public class Timestamps
|
16
|
+
{
|
17
|
+
private Timestamps() { }
|
18
|
+
|
19
|
+
private interface TimestampColumnOption
|
20
|
+
extends Task, TimestampParser.TimestampColumnOption
|
21
|
+
{ }
|
22
|
+
|
23
|
+
public static TimestampParser[] newTimestampColumnParsers(
|
24
|
+
TimestampParser.Task parserTask, SchemaConfig schema)
|
25
|
+
{
|
26
|
+
TimestampParser[] parsers = new TimestampParser[schema.getColumnCount()];
|
27
|
+
int i = 0;
|
28
|
+
for (ColumnConfig column : schema.getColumns()) {
|
29
|
+
if (column.getType() instanceof TimestampType) {
|
30
|
+
TimestampColumnOption option = column.getOption().loadConfig(TimestampColumnOption.class);
|
31
|
+
parsers[i] = new TimestampParser(parserTask, option);
|
32
|
+
}
|
33
|
+
i++;
|
34
|
+
}
|
35
|
+
return parsers;
|
36
|
+
}
|
37
|
+
|
38
|
+
public static TimestampFormatter[] newTimestampColumnFormatters(
|
39
|
+
TimestampFormatter.Task formatterTask, Schema schema,
|
40
|
+
Map<String, ? extends TimestampFormatter.TimestampColumnOption> columnOptions)
|
41
|
+
{
|
42
|
+
TimestampFormatter[] formatters = new TimestampFormatter[schema.getColumnCount()];
|
43
|
+
int i = 0;
|
44
|
+
for (Column column : schema.getColumns()) {
|
45
|
+
if (column.getType() instanceof TimestampType) {
|
46
|
+
Optional<TimestampFormatter.TimestampColumnOption> option = Optional.fromNullable(columnOptions.get(column.getName()));
|
47
|
+
formatters[i] = new TimestampFormatter(formatterTask, option);
|
48
|
+
}
|
49
|
+
i++;
|
50
|
+
}
|
51
|
+
return formatters;
|
52
|
+
}
|
53
|
+
}
|
@@ -0,0 +1,133 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
4
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
5
|
+
width="466px" height="268px" viewBox="0 0 466 268" enable-background="new 0 0 466 268" xml:space="preserve">
|
6
|
+
<g>
|
7
|
+
<path fill="#EF4F39" d="M124.753,173.479c0,0,7.781,2.789,8.031,6.721c0.57,8.859,5.539,30.307-0.93,30.686
|
8
|
+
c-8.516,0.502-20.797-12.975-24.602-22.738c-5.82-14.951-4.18-19.992-4.18-19.992L124.753,173.479z"/>
|
9
|
+
<g>
|
10
|
+
<g>
|
11
|
+
<path fill="#1F1F1F" d="M38.015,225.368c1.477,4.021,3.523,7.008,6.141,8.953s5.891,2.918,9.828,2.918
|
12
|
+
c2.859,0,5.742-0.58,8.648-1.744c0.762-0.312,3.422-1.586,7.984-3.822c1.383-0.672,2.93-1.006,4.625-1.006
|
13
|
+
c2.328,0,4.297,1.051,5.906,3.152c1.34,1.699,2.012,3.398,2.012,5.096c0,3.803-2.707,7.246-8.113,10.33
|
14
|
+
c-6.488,3.713-13.844,5.57-22.07,5.57c-12.297,0-21.98-4.273-29.047-12.814c-5.094-6.17-7.645-13.592-7.645-22.268
|
15
|
+
c0-11.762,3.777-21.152,11.336-28.172c6.527-6.037,14.266-9.057,23.207-9.057c7.828,0,14.781,2.416,20.859,7.246
|
16
|
+
c5.859,4.695,9.75,11.066,11.672,19.115c0.672,2.863,1.008,5.725,1.008,8.586c0,5.277-2.93,7.916-8.789,7.916H38.015z
|
17
|
+
M64.511,211.616c-0.848-3.264-1.832-5.701-2.949-7.312c-2.414-3.531-5.812-5.299-10.195-5.299c-3.758,0-6.953,1.365-9.594,4.094
|
18
|
+
c-1.699,1.787-3.195,4.627-4.492,8.518H64.511z"/>
|
19
|
+
<path fill="#1F1F1F" d="M112.202,189.481c2.367-2.102,4.539-3.623,6.508-4.561c3.352-1.609,7.133-2.416,11.336-2.416
|
20
|
+
c5.23,0,9.812,1.117,13.75,3.354c1.742,0.984,3.598,2.797,5.566,5.434c3.355-2.727,6.215-4.693,8.586-5.902
|
21
|
+
c3.934-1.922,8.16-2.885,12.676-2.885c6.977,0,12.742,2.215,17.305,6.641c4.609,4.518,6.91,10.061,6.91,16.635v35.146
|
22
|
+
c0,3.848-0.449,6.666-1.34,8.451c-0.762,1.432-1.957,2.627-3.59,3.59c-1.633,0.961-3.344,1.443-5.129,1.443
|
23
|
+
c-1.793,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-30.652
|
24
|
+
c0-2.951-0.895-5.342-2.684-7.176c-2.012-2.146-4.559-3.221-7.645-3.221c-3.133,0-5.75,1.051-7.852,3.154
|
25
|
+
c-1.875,1.832-2.816,4.246-2.816,7.242v30.652c0,3.805-0.449,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.59,3.623
|
26
|
+
c-1.633,0.941-3.344,1.41-5.129,1.41c-1.789,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623
|
27
|
+
c-0.895-1.785-1.34-4.604-1.34-8.451v-28.641c0-4.066-0.961-7.152-2.887-9.254c-1.922-2.104-4.449-3.154-7.578-3.154
|
28
|
+
c-3.086,0-5.699,1.098-7.848,3.287c-1.789,1.879-2.68,4.248-2.68,7.109v30.652c0,3.805-0.453,6.621-1.344,8.451
|
29
|
+
c-0.762,1.477-1.957,2.684-3.59,3.623c-1.633,0.941-3.34,1.41-5.133,1.41c-1.785,0-3.496-0.469-5.129-1.41
|
30
|
+
c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-46.414c0-3.398,0.848-6.127,2.547-8.186
|
31
|
+
c1.879-2.279,4.336-3.42,7.379-3.42c2.594,0,4.809,0.873,6.641,2.617C109.897,186.284,110.952,187.603,112.202,189.481z"/>
|
32
|
+
<path fill="#1F1F1F" d="M112.202,189.481c2.367-2.102,4.539-3.623,6.508-4.561c3.352-1.609,7.133-2.416,11.336-2.416
|
33
|
+
c5.23,0,9.812,1.117,13.75,3.354c1.742,0.984,3.598,2.797,5.566,5.434c3.355-2.727,6.215-4.693,8.586-5.902
|
34
|
+
c3.934-1.922,8.16-2.885,12.676-2.885c6.977,0,12.742,2.215,17.305,6.641c4.609,4.518,6.91,10.061,6.91,16.635v35.146
|
35
|
+
c0,3.848-0.449,6.666-1.34,8.451c-0.762,1.432-1.957,2.627-3.59,3.59c-1.633,0.961-3.344,1.443-5.129,1.443
|
36
|
+
c-1.793,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-30.652
|
37
|
+
c0-2.951-0.895-5.342-2.684-7.176c-2.012-2.146-4.559-3.221-7.645-3.221c-3.133,0-5.75,1.051-7.852,3.154
|
38
|
+
c-1.875,1.832-2.816,4.246-2.816,7.242v30.652c0,3.805-0.449,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.59,3.623
|
39
|
+
c-1.633,0.941-3.344,1.41-5.129,1.41c-1.789,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623
|
40
|
+
c-0.895-1.785-1.34-4.604-1.34-8.451v-28.641c0-4.066-0.961-7.152-2.887-9.254c-1.922-2.104-4.449-3.154-7.578-3.154
|
41
|
+
c-3.086,0-5.699,1.098-7.848,3.287c-1.789,1.879-2.68,4.248-2.68,7.109v30.652c0,3.805-0.453,6.621-1.344,8.451
|
42
|
+
c-0.762,1.477-1.957,2.684-3.59,3.623c-1.633,0.941-3.34,1.41-5.133,1.41c-1.785,0-3.496-0.469-5.129-1.41
|
43
|
+
c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-46.414c0-3.398,0.848-6.127,2.547-8.186
|
44
|
+
c1.879-2.279,4.336-3.42,7.379-3.42c2.594,0,4.809,0.873,6.641,2.617C109.897,186.284,110.952,187.603,112.202,189.481z"/>
|
45
|
+
</g>
|
46
|
+
</g>
|
47
|
+
<g>
|
48
|
+
<path fill="#FFFFFF" d="M32.706,101.839c0,0,12.794,37.536,28.406,50.635c23.352,19.592,42.266,24.008,63.57,26.375
|
49
|
+
c27.992,3.109,68.055,0.375,76.672-3.381c19.914-8.666,36.523-27.725,41.93-43.279c5.414-15.557-82.844-32.125-82.844-32.125
|
50
|
+
l-30.766-13.865c0,0-19.617-10.143-26.719-6.76c-7.102,3.381-13.859,5.748-19.273,7.1c-5.406,1.354-13.523,0.338-22.656,2.029
|
51
|
+
C51.901,90.257,32.706,101.839,32.706,101.839z"/>
|
52
|
+
<path fill="#EF4F39" d="M32.331,101.245c0,0,0.391,10.795,3.898,14.678c4.727,5.23,3.203,11.189,13.461,25.664
|
53
|
+
c13.281,18.732,38.328,36.789,89.406,38.908c50.391,2.094,50.086-1.395,50.086-1.395s-6.891,1.152-44.25-0.252
|
54
|
+
c-23.625-0.889-56.344-5.354-75.016-20.842c-17.734-14.709-24.203-24.42-29.125-39.309c-2.094-6.34-5.797-6.422-5.992-15.996
|
55
|
+
C34.776,101.249,32.331,101.245,32.331,101.245z"/>
|
56
|
+
<g>
|
57
|
+
<path fill="#F16523" d="M195.331,176.63c0,0,5.219-1.023,11.352-4.504c8.711-4.943,14.773-11.02,15.852-11.918
|
58
|
+
c4.883-4.057,15.219-16.484,15.219-16.484c-0.414,0.613-5.562,9.764-12.305,15.977c-4.484,4.133-1.898,2.156-9.25,7.861
|
59
|
+
c-9.078,7.043-22,11.92-22,11.92"/>
|
60
|
+
<path fill="#F16523" d="M284.198,12.147c0,0-7.016,13.777-24.008,15.553c-11.57,1.211-13.188,11.16-13.188,11.16
|
61
|
+
s-4.055-10.652-14.453-12.174c-15.477-2.264-20.375-13.525-20.375-13.525c-4.391,16.23,0.68,24.346,3.383,28.404
|
62
|
+
c5.188,7.781,18.258,9.469,21.305,16.23c3.039,6.764,0.672,11.498-2.703,27.391c-3.383,15.893-19.281,12.848-32.125,11.156
|
63
|
+
c-7.117-0.934-18.672-8.105-41.508-16.402c0.242-4.438-2.695-9.434-1.016-16.23c6.086-24.6,24.094-34.361,12.938-32.715
|
64
|
+
c-8.805,1.301-50.031,32.121-56.523,36.102c-8.344-1.617-17.086-2.822-26.156-3.387c-31.359-1.947-39.305,14.033-48.945,20.627
|
65
|
+
c-17.148,11.734-8.07,17.84-8.07,17.84s28.812,1.553,40.109,3.975c9.469,2.027,32.125,8.453,33.812,11.496
|
66
|
+
c1.695,3.043,4.398,11.834,12.516,10.145c8.109-1.691,8.75-7.969,8.75-7.969c-0.344,9.131,6.805,21.156,14.242,31.639
|
67
|
+
s19.273,13.188,19.273,13.188c2.031,25.359-11.562,49.064-8.031,49.195c23.844,0.889,38.156-23.922,40.453-28.275
|
68
|
+
c4.82-9.131,3.297-19.656,3.297-19.656c42.266-8.113,49.461-34.107,53.203-45.637c6.344-19.529,3.055-59.438,3.055-59.438
|
69
|
+
s8.789-0.676,20.961-9.467C286.565,42.579,284.198,12.147,284.198,12.147z"/>
|
70
|
+
</g>
|
71
|
+
<path fill="#FFFFFF" d="M107.753,97.312c0,0-0.617-14.115,18.625-10.881s19.953,13.1,4.945,17.168
|
72
|
+
C116.323,107.669,108.065,103.565,107.753,97.312z"/>
|
73
|
+
<g>
|
74
|
+
<circle fill="#1F1F1F" cx="101.776" cy="92.2" r="4.312"/>
|
75
|
+
<path fill="#FFFFFF" d="M101.776,96.761c-2.516,0-4.562-2.046-4.562-4.561c0-2.516,2.047-4.562,4.562-4.562
|
76
|
+
s4.562,2.047,4.562,4.562C106.339,94.715,104.292,96.761,101.776,96.761z M101.776,88.138c-2.24,0-4.062,1.822-4.062,4.062
|
77
|
+
c0,2.239,1.822,4.061,4.062,4.061s4.062-1.822,4.062-4.061C105.839,89.96,104.017,88.138,101.776,88.138z"/>
|
78
|
+
<path fill="#FFFFFF" d="M104.394,90.595c0,0.512-0.414,0.928-0.93,0.928c-0.508,0-0.93-0.416-0.93-0.928
|
79
|
+
c0-0.516,0.422-0.932,0.93-0.932C103.979,89.663,104.394,90.079,104.394,90.595z"/>
|
80
|
+
</g>
|
81
|
+
<g>
|
82
|
+
<path fill="#EF4F39" d="M164.237,161.2c-1.523,0.254-4.141,0.254-9.383-1.184c-4.789-1.311-12.648-9.082-13.984-10.43
|
83
|
+
c0.438,0.631,0.875,1.254,1.312,1.875c7.438,10.482,19.273,13.188,19.273,13.188c1.969,24.617-10.773,47.672-8.297,49.121
|
84
|
+
c0.008-0.064,0.094-0.949,0.258-1.764c0.164-0.846,0.594-2.283,1.266-3.805c0.68-1.521,10.062-18.682,12.172-26.543
|
85
|
+
c2.117-7.861,1.188-21.727,1.188-21.727S165.761,160.948,164.237,161.2z"/>
|
86
|
+
<path fill="#EF4F39" d="M122.995,115.067c0,0,2.531-7.607,10.648-6.086s5.328,10.271,5.328,10.271s0.031-6.586-5.711-7.734
|
87
|
+
C128.19,110.503,122.995,115.067,122.995,115.067z"/>
|
88
|
+
<path fill="#EF4F39" d="M117.237,126.362c-5.328-0.635-5.711-8.242-9.891-11.287c-3.484-2.529-25.367-9.129-34.242-11.031
|
89
|
+
s-36.266-3.803-38.547-3.93s-2.914-3.043-3.297-3.553c-0.242-0.326,0.25-2.391,0.633-3.816c-3.898,6.225,0.859,9.432,0.859,9.432
|
90
|
+
s28.812,1.553,40.109,3.975c9.469,2.027,32.125,8.453,33.812,11.496c1.695,3.043,4.398,11.834,12.516,10.145
|
91
|
+
c8.109-1.691,8.75-7.969,8.75-7.969S122.144,126.946,117.237,126.362z"/>
|
92
|
+
<path fill="#EF4F39" d="M251.394,111.146c-1.352,7.1-6.594,22.994-16.398,32.799c-6.102,6.098-15.898,10.652-23.672,14.203
|
93
|
+
c-6.266,2.859-15.219,3.887-15.219,3.887l1.07,3.879c42.266-8.113,49.461-34.107,53.203-45.637
|
94
|
+
c2.305-7.115,3.344-16.934,3.719-26.541C253.448,98.396,252.308,106.351,251.394,111.146z"/>
|
95
|
+
</g>
|
96
|
+
</g>
|
97
|
+
<rect x="133.667" y="203.567" fill="#1F1F1F" width="20.055" height="21.766"/>
|
98
|
+
<g>
|
99
|
+
<g>
|
100
|
+
<path fill="#1F1F1F" d="M226.835,188.409c2.816-2.104,5.188-3.512,7.109-4.227c2.992-1.162,6.059-1.744,9.188-1.744
|
101
|
+
c8.32,0,15.586,3.379,21.801,10.127c6.348,6.889,9.527,15.496,9.527,25.826c0,11.402-3.555,20.658-10.668,27.77
|
102
|
+
c-5.723,5.768-12.543,8.654-20.457,8.654c-4.609,0-8.562-1.031-11.875-3.086c-1.516-0.984-3.148-2.619-4.895-4.896
|
103
|
+
c-2.059,5.051-5.23,7.578-9.527,7.578c-2.637,0-4.961-0.85-6.973-2.549c-2.238-1.967-3.355-4.697-3.355-8.182v-77.543
|
104
|
+
c0-3.799,0.449-6.594,1.344-8.383c0.758-1.477,1.953-2.684,3.59-3.623c1.629-0.939,3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408
|
105
|
+
s2.828,2.146,3.586,3.623c0.895,1.789,1.344,4.584,1.344,8.383V188.409z M240.519,201.22c-3.758,0-7.02,1.631-9.793,4.896
|
106
|
+
c-2.684,3.219-4.023,7.379-4.023,12.477c0,5.141,1.34,9.324,4.023,12.543c2.773,3.264,6.078,4.896,9.926,4.896
|
107
|
+
c4.16,0,7.488-1.746,9.996-5.23c2.457-3.49,3.688-7.535,3.688-12.143c0-4.695-1.23-8.742-3.688-12.143
|
108
|
+
C248.097,202.987,244.718,201.22,240.519,201.22z"/>
|
109
|
+
<path fill="#1F1F1F" d="M345.358,196.39v29.916c0,6.842-1.637,12.387-4.898,16.635c-2.773,3.578-6.352,6.396-10.734,8.451
|
110
|
+
c-4.918,2.324-10.148,3.488-15.695,3.488c-7.781,0-14.598-2.078-20.457-6.238c-4.559-3.221-7.645-7.064-9.258-11.537
|
111
|
+
c-1.074-3.037-1.605-6.641-1.605-10.799V196.39c0-3.801,0.445-6.617,1.336-8.451c0.762-1.477,1.949-2.684,3.559-3.623
|
112
|
+
c1.605-0.938,3.332-1.408,5.164-1.408c1.789,0,3.496,0.471,5.129,1.408c1.633,0.939,2.828,2.146,3.59,3.623
|
113
|
+
c0.895,1.789,1.34,4.607,1.34,8.451v27.434c0,2.818,0.449,4.945,1.344,6.373c2.281,3.668,5.57,5.502,9.859,5.502
|
114
|
+
c3.129,0,5.793-1.074,7.984-3.221c2.145-2.059,3.219-4.941,3.219-8.654V196.39c0-3.844,0.445-6.662,1.34-8.451
|
115
|
+
c0.762-1.477,1.957-2.684,3.59-3.623c1.633-0.938,3.344-1.408,5.133-1.408c1.785,0,3.5,0.471,5.129,1.408
|
116
|
+
c1.633,0.939,2.828,2.146,3.59,3.623C344.909,189.728,345.358,192.546,345.358,196.39z"/>
|
117
|
+
<path fill="#1F1F1F" d="M377.351,166.138v74.789c0,3.848-0.445,6.666-1.344,8.451c-0.758,1.477-1.953,2.684-3.586,3.623
|
118
|
+
c-1.633,0.941-3.344,1.41-5.133,1.41s-3.5-0.469-5.129-1.41c-1.633-0.939-2.832-2.146-3.59-3.623
|
119
|
+
c-0.895-1.785-1.344-4.604-1.344-8.451v-74.789c0-3.799,0.449-6.594,1.344-8.383c0.758-1.477,1.957-2.684,3.59-3.623
|
120
|
+
c1.629-0.939,3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408s2.828,2.146,3.586,3.623
|
121
|
+
C376.905,159.544,377.351,162.339,377.351,166.138z"/>
|
122
|
+
<path fill="#1F1F1F" d="M409.343,220.403v20.523c0,3.805-0.445,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.586,3.623
|
123
|
+
c-1.633,0.941-3.344,1.41-5.133,1.41s-3.496-0.469-5.129-1.41c-1.633-0.939-2.828-2.146-3.594-3.623
|
124
|
+
c-0.891-1.785-1.34-4.604-1.34-8.451v-74.789c0-3.799,0.449-6.594,1.34-8.383c0.766-1.477,1.961-2.684,3.594-3.623
|
125
|
+
s3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408c1.629,0.939,2.824,2.146,3.586,3.623c0.895,1.789,1.34,4.584,1.34,8.383v40.582
|
126
|
+
l18.516-18.982c3.445-3.533,6.527-5.299,9.258-5.299c2.727,0,5.051,0.984,6.977,2.951c1.922,1.924,2.883,4.227,2.883,6.908
|
127
|
+
c0,1.969-0.738,3.936-2.215,5.904c-0.488,0.625-1.566,1.744-3.219,3.354l-12.609,12.072l17.641,21.936
|
128
|
+
c2.902,3.578,4.355,6.551,4.355,8.918c0,3.178-1.27,5.793-3.82,7.85c-1.836,1.432-3.957,2.146-6.375,2.146
|
129
|
+
c-2.41,0-4.672-0.961-6.77-2.885c-0.629-0.58-1.656-1.787-3.09-3.621L409.343,220.403z"/>
|
130
|
+
</g>
|
131
|
+
</g>
|
132
|
+
</g>
|
133
|
+
</svg>
|