mirror of
https://github.com/rclone/rclone.git
synced 2025-12-14 07:13:26 +00:00
Compare commits
1 Commits
zip-backen
...
protondriv
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ea8b3db4f |
16
.github/workflows/build.yml
vendored
16
.github/workflows/build.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
||||
include:
|
||||
- job_name: linux
|
||||
os: ubuntu-latest
|
||||
go: '1.21.0-rc.4'
|
||||
go: '1.21.0-rc.3'
|
||||
gotags: cmount
|
||||
build_flags: '-include "^linux/"'
|
||||
check: true
|
||||
@@ -43,14 +43,14 @@ jobs:
|
||||
|
||||
- job_name: linux_386
|
||||
os: ubuntu-latest
|
||||
go: '1.21.0-rc.4'
|
||||
go: '1.21.0-rc.3'
|
||||
goarch: 386
|
||||
gotags: cmount
|
||||
quicktest: true
|
||||
|
||||
- job_name: mac_amd64
|
||||
os: macos-11
|
||||
go: '1.21.0-rc.4'
|
||||
go: '1.21.0-rc.3'
|
||||
gotags: 'cmount'
|
||||
build_flags: '-include "^darwin/amd64" -cgo'
|
||||
quicktest: true
|
||||
@@ -59,14 +59,14 @@ jobs:
|
||||
|
||||
- job_name: mac_arm64
|
||||
os: macos-11
|
||||
go: '1.21.0-rc.4'
|
||||
go: '1.21.0-rc.3'
|
||||
gotags: 'cmount'
|
||||
build_flags: '-include "^darwin/arm64" -cgo -macos-arch arm64 -cgo-cflags=-I/usr/local/include -cgo-ldflags=-L/usr/local/lib'
|
||||
deploy: true
|
||||
|
||||
- job_name: windows
|
||||
os: windows-latest
|
||||
go: '1.21.0-rc.4'
|
||||
go: '1.21.0-rc.3'
|
||||
gotags: cmount
|
||||
cgo: '0'
|
||||
build_flags: '-include "^windows/"'
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
|
||||
- job_name: other_os
|
||||
os: ubuntu-latest
|
||||
go: '1.21.0-rc.4'
|
||||
go: '1.21.0-rc.3'
|
||||
build_flags: '-exclude "^(windows/|darwin/|linux/)"'
|
||||
compile_all: true
|
||||
deploy: true
|
||||
@@ -244,7 +244,7 @@ jobs:
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.21.0-rc.4'
|
||||
go-version: '1.21.0-rc.3'
|
||||
check-latest: true
|
||||
|
||||
- name: Install govulncheck
|
||||
@@ -269,7 +269,7 @@ jobs:
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.21.0-rc.4'
|
||||
go-version: '1.21.0-rc.3'
|
||||
|
||||
- name: Go module cache
|
||||
uses: actions/cache@v3
|
||||
|
||||
@@ -428,19 +428,14 @@ Getting going
|
||||
* box is a good one to start from if you have a directory-based remote
|
||||
* b2 is a good one to start from if you have a bucket-based remote
|
||||
* Add your remote to the imports in `backend/all/all.go`
|
||||
* HTTP based remotes are easiest to maintain if they use rclone's [lib/rest](https://pkg.go.dev/github.com/rclone/rclone/lib/rest) module, but if there is a really good go SDK then use that instead.
|
||||
* HTTP based remotes are easiest to maintain if they use rclone's rest module, but if there is a really good go SDK then use that instead.
|
||||
* Try to implement as many optional methods as possible as it makes the remote more usable.
|
||||
* Use [lib/encoder](https://pkg.go.dev/github.com/rclone/rclone/lib/encoder) to make sure we can encode any path name and `rclone info` to help determine the encodings needed
|
||||
* Use lib/encoder to make sure we can encode any path name and `rclone info` to help determine the encodings needed
|
||||
* `rclone purge -v TestRemote:rclone-info`
|
||||
* `rclone test info --all --remote-encoding None -vv --write-json remote.json TestRemote:rclone-info`
|
||||
* `go run cmd/test/info/internal/build_csv/main.go -o remote.csv remote.json`
|
||||
* open `remote.csv` in a spreadsheet and examine
|
||||
|
||||
Important:
|
||||
|
||||
* Please use [lib/rest](https://pkg.go.dev/github.com/rclone/rclone/lib/rest) if you are implementing a REST like backend and parsing XML/JSON in the backend. It makes maintenance much easier.
|
||||
* If your backend is HTTP based then please use rclone's Client or Transport from [fs/fshttp](https://pkg.go.dev/github.com/rclone/rclone/fs/fshttp) - this adds features like `--dump bodies`, `--tpslimit`, `--user-agent` without you having to code anything!
|
||||
|
||||
Unit tests
|
||||
|
||||
* Create a config entry called `TestRemote` for the unit tests to use
|
||||
|
||||
@@ -54,6 +54,5 @@ import (
|
||||
_ "github.com/rclone/rclone/backend/uptobox"
|
||||
_ "github.com/rclone/rclone/backend/webdav"
|
||||
_ "github.com/rclone/rclone/backend/yandex"
|
||||
_ "github.com/rclone/rclone/backend/zip"
|
||||
_ "github.com/rclone/rclone/backend/zoho"
|
||||
)
|
||||
|
||||
@@ -134,6 +134,19 @@ cache. Thus, if there are concurrent clients accessing the same mount point,
|
||||
then we might have a problem with caching the stale data.`,
|
||||
Advanced: true,
|
||||
Default: true,
|
||||
}, {
|
||||
Name: "skip_signature_verifications",
|
||||
Help: `Skip signature verifications during decryption operations
|
||||
|
||||
During development and beta testing phase, signature verification is a big
|
||||
source of problem which affects the normal usage.
|
||||
|
||||
Before a proper signature-related failure report-only mode is properly
|
||||
implemented, we currently offer this feature flag to disable verifying
|
||||
signatures during decryption operations.
|
||||
`,
|
||||
Advanced: true,
|
||||
Default: false,
|
||||
}},
|
||||
})
|
||||
}
|
||||
@@ -145,11 +158,12 @@ type Options struct {
|
||||
TwoFA string `config:"2fa"`
|
||||
|
||||
// advanced
|
||||
Enc encoder.MultiEncoder `config:"encoding"`
|
||||
ReportOriginalSize bool `config:"original_file_size"`
|
||||
AppVersion string `config:"app_version"`
|
||||
ReplaceExistingDraft bool `config:"replace_existing_draft"`
|
||||
EnableCaching bool `config:"enable_caching"`
|
||||
Enc encoder.MultiEncoder `config:"encoding"`
|
||||
ReportOriginalSize bool `config:"original_file_size"`
|
||||
AppVersion string `config:"app_version"`
|
||||
ReplaceExistingDraft bool `config:"replace_existing_draft"`
|
||||
EnableCaching bool `config:"enable_caching"`
|
||||
SkipSignatureVerifications bool `config:"skip_signature_verifications"`
|
||||
}
|
||||
|
||||
// Fs represents a remote proton drive
|
||||
@@ -270,6 +284,7 @@ func newProtonDrive(ctx context.Context, f *Fs, opt *Options, m configmap.Mapper
|
||||
|
||||
config.ReplaceExistingDraft = opt.ReplaceExistingDraft
|
||||
config.EnableCaching = opt.EnableCaching
|
||||
config.SkipSignatureVerifications = opt.SkipSignatureVerifications
|
||||
|
||||
// let's see if we have the cached access credential
|
||||
uid, accessToken, refreshToken, saltedKeyPass, hasUseReusableLoginCredentials := getConfigMap(m)
|
||||
|
||||
@@ -24,7 +24,6 @@ import (
|
||||
|
||||
"storj.io/uplink"
|
||||
"storj.io/uplink/edge"
|
||||
"storj.io/uplink/private/testuplink"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -277,8 +276,6 @@ func (f *Fs) connect(ctx context.Context) (project *uplink.Project, err error) {
|
||||
UserAgent: "rclone",
|
||||
}
|
||||
|
||||
ctx = testuplink.WithConcurrentSegmentUploadsDefaultConfig(ctx)
|
||||
|
||||
project, err = cfg.OpenProject(ctx, f.access)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("storj: project: %w", err)
|
||||
|
||||
@@ -561,7 +561,7 @@ func (f *Fs) newObjectWithInfo(ctx context.Context, remote string, info *swift.O
|
||||
// returned as 0 bytes in the listing. Correct this here by
|
||||
// making sure we read the full metadata for all 0 byte files.
|
||||
// We don't read the metadata for directory marker objects.
|
||||
if info != nil && info.Bytes == 0 && info.ContentType != "application/directory" && !o.fs.opt.NoLargeObjects {
|
||||
if info != nil && info.Bytes == 0 && info.ContentType != "application/directory" {
|
||||
err := o.readMetaData(ctx) // reads info and headers, returning an error
|
||||
if err == fs.ErrorObjectNotFound {
|
||||
// We have a dangling large object here so just return the original metadata
|
||||
|
||||
@@ -1,572 +0,0 @@
|
||||
// Package zip provides wrappers for Fs and Object which read and
|
||||
// write a zip file.
|
||||
//
|
||||
// Use like :zip:remote:path/to/file.zip
|
||||
package zip
|
||||
|
||||
/*
|
||||
FIXME could maybe make an append to zip file with specially named zip
|
||||
files having more info in?
|
||||
|
||||
So have base zip file file.zip then file.extra000.zip etc.
|
||||
|
||||
We read the objects sequentially but can transfer them in parallel.
|
||||
|
||||
FIXME what happens when we want to copy a file out of the zip?
|
||||
|
||||
So rclone copy remote:file.zip/file/inside.zip?
|
||||
Maybe rclone copy remote:file.zip#file/inside.zip?
|
||||
Or just look for first .zip file?
|
||||
|
||||
FIXME what happens when writing - need to know the end... Don't have a
|
||||
backend Shutdown call.
|
||||
|
||||
Could have a read only Feature flag so we turn that on when we have a
|
||||
zip. Then if placed in dest position could error. Might be useful for
|
||||
http also.
|
||||
|
||||
FIXME this will perform poorly for unpacking as the VFS Reader is bad
|
||||
at multiple streams.
|
||||
|
||||
FIXME not writing directories
|
||||
|
||||
cf zipinfo
|
||||
drwxr-xr-x 3.0 unx 0 bx stor 19-Oct-05 12:14 rclone-v1.49.5-linux-amd64/
|
||||
|
||||
FIXME can probably check directories better than trailing /
|
||||
|
||||
FIXME enormous atexit bodge
|
||||
|
||||
FIXME crc32 skip on write bodge
|
||||
|
||||
Bodge bodge bodge
|
||||
|
||||
*/
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/rclone/rclone/fs"
|
||||
"github.com/rclone/rclone/fs/cache"
|
||||
"github.com/rclone/rclone/fs/config/configmap"
|
||||
"github.com/rclone/rclone/fs/config/configstruct"
|
||||
"github.com/rclone/rclone/fs/dirtree"
|
||||
"github.com/rclone/rclone/fs/fspath"
|
||||
"github.com/rclone/rclone/fs/hash"
|
||||
"github.com/rclone/rclone/fs/log"
|
||||
"github.com/rclone/rclone/lib/atexit"
|
||||
"github.com/rclone/rclone/lib/readers"
|
||||
"github.com/rclone/rclone/vfs"
|
||||
)
|
||||
|
||||
// Globals
|
||||
// Register with Fs
|
||||
func init() {
|
||||
fs.Register(&fs.RegInfo{
|
||||
Name: "zip",
|
||||
Description: "Read or write a zip file",
|
||||
NewFs: NewFs,
|
||||
Options: []fs.Option{},
|
||||
})
|
||||
}
|
||||
|
||||
// NewFs constructs an Fs from the path, container:path
|
||||
func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, error) {
|
||||
// Parse config into Options struct
|
||||
opt := new(Options)
|
||||
err := configstruct.Set(m, opt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Parse the root which should be remote:path/to/file.zip
|
||||
parent, leaf, err := fspath.Split(root)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse root %q: %w", root, err)
|
||||
}
|
||||
if leaf == "" {
|
||||
return nil, fmt.Errorf("failed to parse root %q: not pointing to a file", root)
|
||||
}
|
||||
root = strings.TrimRight(parent, "/")
|
||||
|
||||
// Create the remote from the cache
|
||||
wrappedFs, err := cache.Get(ctx, root)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to make %q to wrap: %w", root, err)
|
||||
}
|
||||
// FIXME vfs cache?
|
||||
// FIXME could factor out ReadFileHandle and just use that rather than the full VFS
|
||||
VFS := vfs.New(wrappedFs, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create VFS for %q: %w", root, err)
|
||||
}
|
||||
node, err := VFS.Stat(leaf)
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return nil, fmt.Errorf("failed to find %q object: %w", leaf, err)
|
||||
}
|
||||
if node != nil && node.IsDir() {
|
||||
return nil, fmt.Errorf("can't unzip a directory %q", leaf)
|
||||
}
|
||||
f := &Fs{
|
||||
f: wrappedFs,
|
||||
name: name,
|
||||
root: root,
|
||||
opt: *opt,
|
||||
vfs: VFS,
|
||||
node: node,
|
||||
leaf: leaf,
|
||||
}
|
||||
// FIXME Maybe delay this until first read size if writing we don't need it?
|
||||
if node != nil {
|
||||
err = f.readZip()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to open zip file: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME
|
||||
// the features here are ones we could support, and they are
|
||||
// ANDed with the ones from wrappedFs
|
||||
//
|
||||
// FIXME some of these need to be forced on - CanHaveEmptyDirectories
|
||||
f.features = (&fs.Features{
|
||||
CaseInsensitive: false,
|
||||
DuplicateFiles: false,
|
||||
ReadMimeType: false, // MimeTypes not supported with gzip
|
||||
WriteMimeType: false,
|
||||
BucketBased: false,
|
||||
CanHaveEmptyDirectories: true,
|
||||
}).Fill(ctx, f).Mask(ctx, wrappedFs).WrapsFs(f, wrappedFs)
|
||||
|
||||
return f, nil
|
||||
}
|
||||
|
||||
// Options defines the configuration for this backend
|
||||
type Options struct {
|
||||
}
|
||||
|
||||
// Fs represents a wrapped fs.Fs
|
||||
type Fs struct {
|
||||
f fs.Fs
|
||||
wrapper fs.Fs
|
||||
name string
|
||||
root string
|
||||
opt Options
|
||||
features *fs.Features // optional features
|
||||
vfs *vfs.VFS
|
||||
node vfs.Node // zip file object - set if reading
|
||||
leaf string // leaf name of the zip file object
|
||||
dt dirtree.DirTree // read from zipfile
|
||||
|
||||
wrmu sync.Mutex // writing mutex protects the below
|
||||
wh vfs.Handle // write handle
|
||||
zw *zip.Writer
|
||||
}
|
||||
|
||||
// Name of the remote (as passed into NewFs)
|
||||
func (f *Fs) Name() string {
|
||||
return f.name
|
||||
}
|
||||
|
||||
// Root of the remote (as passed into NewFs)
|
||||
func (f *Fs) Root() string {
|
||||
return f.root
|
||||
}
|
||||
|
||||
// Features returns the optional features of this Fs
|
||||
func (f *Fs) Features() *fs.Features {
|
||||
return f.features
|
||||
}
|
||||
|
||||
// String returns a description of the FS
|
||||
func (f *Fs) String() string {
|
||||
return fmt.Sprintf("Zip '%s:%s'", f.name, f.root)
|
||||
}
|
||||
|
||||
// readZip the zip file into f
|
||||
func (f *Fs) readZip() (err error) {
|
||||
if f.node == nil {
|
||||
return fs.ErrorDirNotFound
|
||||
}
|
||||
size := f.node.Size()
|
||||
if size < 0 {
|
||||
return errors.New("can't read from zip file with unknown size")
|
||||
}
|
||||
r, err := f.node.Open(os.O_RDONLY)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to open zip file: %w", err)
|
||||
}
|
||||
zr, err := zip.NewReader(r, size)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read zip file: %w", err)
|
||||
}
|
||||
dt := dirtree.New()
|
||||
for _, file := range zr.File {
|
||||
remote := strings.Trim(path.Clean(file.Name), "/")
|
||||
if remote == "." {
|
||||
remote = ""
|
||||
}
|
||||
if strings.HasSuffix(file.Name, "/") {
|
||||
dir := fs.NewDir(remote, file.Modified)
|
||||
dt.AddDir(dir)
|
||||
} else {
|
||||
o := &Object{
|
||||
f: f,
|
||||
remote: remote,
|
||||
fh: &file.FileHeader,
|
||||
file: file,
|
||||
}
|
||||
dt.Add(o)
|
||||
}
|
||||
}
|
||||
dt.CheckParents("")
|
||||
dt.Sort()
|
||||
f.dt = dt
|
||||
fs.Debugf(nil, "dt = %#v", dt)
|
||||
return nil
|
||||
}
|
||||
|
||||
// List the objects and directories in dir into entries. The
|
||||
// entries can be returned in any order but should be for a
|
||||
// complete directory.
|
||||
//
|
||||
// dir should be "" to list the root, and should not have
|
||||
// trailing slashes.
|
||||
//
|
||||
// This should return ErrDirNotFound if the directory isn't
|
||||
// found.
|
||||
func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err error) {
|
||||
defer log.Trace(f, "dir=%q", dir)("entries=%v, err=%v", &entries, &err)
|
||||
entries, ok := f.dt[dir]
|
||||
if !ok {
|
||||
return nil, fs.ErrorDirNotFound
|
||||
}
|
||||
fs.Debugf(f, "dir=%q, entries=%v", dir, entries)
|
||||
return entries, nil
|
||||
}
|
||||
|
||||
// ListR lists the objects and directories of the Fs starting
|
||||
// from dir recursively into out.
|
||||
//
|
||||
// dir should be "" to start from the root, and should not
|
||||
// have trailing slashes.
|
||||
//
|
||||
// This should return ErrDirNotFound if the directory isn't
|
||||
// found.
|
||||
//
|
||||
// It should call callback for each tranche of entries read.
|
||||
// These need not be returned in any particular order. If
|
||||
// callback returns an error then the listing will stop
|
||||
// immediately.
|
||||
//
|
||||
// Don't implement this unless you have a more efficient way
|
||||
// of listing recursively that doing a directory traversal.
|
||||
func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) (err error) {
|
||||
for _, entries := range f.dt {
|
||||
err = callback(entries)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// NewObject finds the Object at remote.
|
||||
func (f *Fs) NewObject(ctx context.Context, remote string) (o fs.Object, err error) {
|
||||
defer log.Trace(f, "remote=%q", remote)("obj=%v, err=%v", &o, &err)
|
||||
if f.dt == nil {
|
||||
return nil, fs.ErrorObjectNotFound
|
||||
}
|
||||
_, entry := f.dt.Find(remote)
|
||||
if entry == nil {
|
||||
return nil, fs.ErrorObjectNotFound
|
||||
}
|
||||
o, ok := entry.(*Object)
|
||||
if !ok {
|
||||
return nil, fs.ErrorNotAFile
|
||||
}
|
||||
return o, nil
|
||||
}
|
||||
|
||||
// Precision of the ModTimes in this Fs
|
||||
func (f *Fs) Precision() time.Duration {
|
||||
return time.Second
|
||||
}
|
||||
|
||||
// Mkdir makes the directory (container, bucket)
|
||||
//
|
||||
// Shouldn't return an error if it already exists
|
||||
func (f *Fs) Mkdir(ctx context.Context, dir string) error {
|
||||
// FIXME should this create a "directory" entry if not already created?
|
||||
return nil
|
||||
}
|
||||
|
||||
// Rmdir removes the directory (container, bucket) if empty
|
||||
//
|
||||
// Return an error if it doesn't exist or isn't empty
|
||||
func (f *Fs) Rmdir(ctx context.Context, dir string) error {
|
||||
return errors.New("can't remove directories from zip file")
|
||||
}
|
||||
|
||||
// Wrapper for src to make it into os.FileInfo
|
||||
type fileInfo struct {
|
||||
src fs.ObjectInfo
|
||||
}
|
||||
|
||||
// Name - base name of the file (actually full name for zip)
|
||||
func (fi fileInfo) Name() string {
|
||||
return fi.src.Remote()
|
||||
}
|
||||
|
||||
// Size - length in bytes for regular files; system-dependent for others
|
||||
func (fi fileInfo) Size() int64 {
|
||||
return fi.src.Size()
|
||||
}
|
||||
|
||||
// Mode - file mode bits
|
||||
func (fi fileInfo) Mode() os.FileMode {
|
||||
return 0777
|
||||
}
|
||||
|
||||
// ModTime - modification time
|
||||
func (fi fileInfo) ModTime() time.Time {
|
||||
return fi.src.ModTime(context.Background())
|
||||
}
|
||||
|
||||
// IsDir - abbreviation for Mode().IsDir()
|
||||
func (fi fileInfo) IsDir() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// Sys - underlying data source (can return nil)
|
||||
func (fi fileInfo) Sys() interface{} {
|
||||
return nil
|
||||
}
|
||||
|
||||
// check type
|
||||
var _ os.FileInfo = fileInfo{}
|
||||
|
||||
// Put in to the remote path with the modTime given of the given size
|
||||
//
|
||||
// May create the object even if it returns an error - if so
|
||||
// will return the object and the error, otherwise will return
|
||||
// nil and the error
|
||||
func (f *Fs) Put(ctx context.Context, in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) (o fs.Object, err error) {
|
||||
defer log.Trace(f, "src=%v", src)("obj=%v, err=%v", &o, &err)
|
||||
f.wrmu.Lock()
|
||||
defer f.wrmu.Unlock()
|
||||
|
||||
size := src.Size()
|
||||
if size < 0 {
|
||||
return nil, errors.New("can't zip unknown sized objects")
|
||||
}
|
||||
|
||||
if f.zw == nil {
|
||||
wh, err := f.vfs.OpenFile(f.leaf, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0777)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("zip put: failed to open output file: %w", err)
|
||||
}
|
||||
f.wh = wh
|
||||
f.zw = zip.NewWriter(f.wh)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("zip put: failed to create zip writer: %w", err)
|
||||
}
|
||||
|
||||
// FIXME enormous bodge to work around no lifecycle for backends
|
||||
atexit.Register(func() {
|
||||
err = f.zw.Close()
|
||||
if err != nil {
|
||||
fs.Errorf(f, "Error closing zip writer: %v", err)
|
||||
}
|
||||
err = f.wh.Close()
|
||||
if err != nil {
|
||||
fs.Errorf(f, "Error closing zip file: %v", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// FIXME not putting in directories?
|
||||
|
||||
fh, err := zip.FileInfoHeader(fileInfo{src})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("zip put: failed to create file header: %w", err)
|
||||
}
|
||||
w, err := f.zw.CreateHeader(fh)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("zip put: failed to open file: %w", err)
|
||||
}
|
||||
// FIXME just a guess!
|
||||
// should probably try a better heuristic?
|
||||
if size < 10 {
|
||||
fh.Method = zip.Store
|
||||
} else {
|
||||
fh.Method = zip.Deflate
|
||||
}
|
||||
_, err = io.CopyN(w, in, size)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("zip put: failed to copy file: %w", err)
|
||||
}
|
||||
|
||||
// err = w.Close()
|
||||
// if err != nil {
|
||||
// return nil,fmt.Errorf("zip put: failed to close file: %w", err)
|
||||
// }
|
||||
|
||||
o = &Object{
|
||||
f: f,
|
||||
fh: fh,
|
||||
remote: src.Remote(),
|
||||
}
|
||||
|
||||
return o, nil
|
||||
|
||||
}
|
||||
|
||||
// Hashes returns the supported hash sets.
|
||||
func (f *Fs) Hashes() hash.Set {
|
||||
return hash.Set(hash.CRC32)
|
||||
}
|
||||
|
||||
// UnWrap returns the Fs that this Fs is wrapping
|
||||
func (f *Fs) UnWrap() fs.Fs {
|
||||
return f.f
|
||||
}
|
||||
|
||||
// WrapFs returns the Fs that is wrapping this Fs
|
||||
func (f *Fs) WrapFs() fs.Fs {
|
||||
return f.wrapper
|
||||
}
|
||||
|
||||
// SetWrapper sets the Fs that is wrapping this Fs
|
||||
func (f *Fs) SetWrapper(wrapper fs.Fs) {
|
||||
f.wrapper = wrapper
|
||||
}
|
||||
|
||||
// Object describes an object to be read from the raw zip file
|
||||
type Object struct {
|
||||
f *Fs
|
||||
remote string
|
||||
fh *zip.FileHeader
|
||||
file *zip.File
|
||||
}
|
||||
|
||||
// Fs returns read only access to the Fs that this object is part of
|
||||
func (o *Object) Fs() fs.Info {
|
||||
return o.f
|
||||
}
|
||||
|
||||
// Return a string version
|
||||
func (o *Object) String() string {
|
||||
if o == nil {
|
||||
return "<nil>"
|
||||
}
|
||||
return o.Remote()
|
||||
}
|
||||
|
||||
// Remote returns the remote path
|
||||
func (o *Object) Remote() string {
|
||||
return o.remote
|
||||
}
|
||||
|
||||
// Size returns the size of the file
|
||||
func (o *Object) Size() int64 {
|
||||
return int64(o.fh.UncompressedSize64)
|
||||
}
|
||||
|
||||
// ModTime returns the modification time of the object
|
||||
//
|
||||
// It attempts to read the objects mtime and if that isn't present the
|
||||
// LastModified returned in the http headers
|
||||
func (o *Object) ModTime(ctx context.Context) time.Time {
|
||||
return o.fh.Modified
|
||||
}
|
||||
|
||||
// SetModTime sets the modification time of the local fs object
|
||||
func (o *Object) SetModTime(ctx context.Context, modTime time.Time) error {
|
||||
fs.Debugf(o, "Can't set mod time - ignoring")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Storable raturns a boolean indicating if this object is storable
|
||||
func (o *Object) Storable() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// Hash returns the selected checksum of the file
|
||||
// If no checksum is available it returns ""
|
||||
func (o *Object) Hash(ctx context.Context, ht hash.Type) (string, error) {
|
||||
if ht == hash.CRC32 {
|
||||
// FIXME return empty CRC if writing
|
||||
if o.f.dt == nil {
|
||||
return "", nil
|
||||
}
|
||||
return fmt.Sprintf("%08x", o.fh.CRC32), nil
|
||||
}
|
||||
return "", hash.ErrUnsupported
|
||||
}
|
||||
|
||||
// Open opens the file for read. Call Close() on the returned io.ReadCloser
|
||||
func (o *Object) Open(ctx context.Context, options ...fs.OpenOption) (rc io.ReadCloser, err error) {
|
||||
var offset, limit int64 = 0, -1
|
||||
for _, option := range options {
|
||||
switch x := option.(type) {
|
||||
case *fs.SeekOption:
|
||||
offset = x.Offset
|
||||
case *fs.RangeOption:
|
||||
offset, limit = x.Decode(o.Size())
|
||||
default:
|
||||
if option.Mandatory() {
|
||||
fs.Logf(o, "Unsupported mandatory option: %v", option)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rc, err = o.file.Open()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// discard data from start as necessary
|
||||
if offset > 0 {
|
||||
_, err = io.CopyN(ioutil.Discard, rc, offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
// If limited then don't return everything
|
||||
if limit >= 0 {
|
||||
return readers.NewLimitedReadCloser(rc, limit-offset), nil
|
||||
}
|
||||
|
||||
return rc, nil
|
||||
}
|
||||
|
||||
// Update in to the object with the modTime given of the given size
|
||||
func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, options ...fs.OpenOption) error {
|
||||
return errors.New("can't Update zip files")
|
||||
}
|
||||
|
||||
// Remove an object
|
||||
func (o *Object) Remove(ctx context.Context) error {
|
||||
return errors.New("can't Remove zip file objects")
|
||||
}
|
||||
|
||||
// Check the interfaces are satisfied
|
||||
var (
|
||||
_ fs.Fs = (*Fs)(nil)
|
||||
_ fs.UnWrapper = (*Fs)(nil)
|
||||
_ fs.ListRer = (*Fs)(nil)
|
||||
// _ fs.Abouter = (*Fs)(nil) - FIXME can implemnet
|
||||
_ fs.Wrapper = (*Fs)(nil)
|
||||
_ fs.Object = (*Object)(nil)
|
||||
)
|
||||
@@ -1,94 +0,0 @@
|
||||
package info
|
||||
|
||||
// Create files with all possible base 32768 file names
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/rclone/rclone/fs"
|
||||
"github.com/rclone/rclone/fs/fspath"
|
||||
"github.com/rclone/rclone/fs/operations"
|
||||
"github.com/rclone/rclone/fs/sync"
|
||||
)
|
||||
|
||||
const safeAlphabet = "ƀɀɠʀҠԀڀڠݠހ߀ကႠᄀᄠᅀᆀᇠሀሠበዠጠᎠᏀᐠᑀᑠᒀᒠᓀᓠᔀᔠᕀᕠᖀᖠᗀᗠᘀᘠᙀᚠᛀកᠠᡀᣀᦀ᧠ᨠᯀᰀᴀ⇠⋀⍀⍠⎀⎠⏀␀─┠╀╠▀■◀◠☀☠♀♠⚀⚠⛀⛠✀✠❀➀➠⠀⠠⡀⡠⢀⢠⣀⣠⤀⤠⥀⥠⦠⨠⩀⪀⪠⫠⬀⬠⭀ⰀⲀⲠⳀⴀⵀ⺠⻀㇀㐀㐠㑀㑠㒀㒠㓀㓠㔀㔠㕀㕠㖀㖠㗀㗠㘀㘠㙀㙠㚀㚠㛀㛠㜀㜠㝀㝠㞀㞠㟀㟠㠀㠠㡀㡠㢀㢠㣀㣠㤀㤠㥀㥠㦀㦠㧀㧠㨀㨠㩀㩠㪀㪠㫀㫠㬀㬠㭀㭠㮀㮠㯀㯠㰀㰠㱀㱠㲀㲠㳀㳠㴀㴠㵀㵠㶀㶠㷀㷠㸀㸠㹀㹠㺀㺠㻀㻠㼀㼠㽀㽠㾀㾠㿀㿠䀀䀠䁀䁠䂀䂠䃀䃠䄀䄠䅀䅠䆀䆠䇀䇠䈀䈠䉀䉠䊀䊠䋀䋠䌀䌠䍀䍠䎀䎠䏀䏠䐀䐠䑀䑠䒀䒠䓀䓠䔀䔠䕀䕠䖀䖠䗀䗠䘀䘠䙀䙠䚀䚠䛀䛠䜀䜠䝀䝠䞀䞠䟀䟠䠀䠠䡀䡠䢀䢠䣀䣠䤀䤠䥀䥠䦀䦠䧀䧠䨀䨠䩀䩠䪀䪠䫀䫠䬀䬠䭀䭠䮀䮠䯀䯠䰀䰠䱀䱠䲀䲠䳀䳠䴀䴠䵀䵠䶀䷀䷠一丠乀习亀亠什仠伀传佀你侀侠俀俠倀倠偀偠傀傠僀僠儀儠兀兠冀冠净几刀删剀剠劀加勀勠匀匠區占厀厠叀叠吀吠呀呠咀咠哀哠唀唠啀啠喀喠嗀嗠嘀嘠噀噠嚀嚠囀因圀圠址坠垀垠埀埠堀堠塀塠墀墠壀壠夀夠奀奠妀妠姀姠娀娠婀婠媀媠嫀嫠嬀嬠孀孠宀宠寀寠尀尠局屠岀岠峀峠崀崠嵀嵠嶀嶠巀巠帀帠幀幠庀庠廀廠开张彀彠往徠忀忠怀怠恀恠悀悠惀惠愀愠慀慠憀憠懀懠戀戠所扠技抠拀拠挀挠捀捠掀掠揀揠搀搠摀摠撀撠擀擠攀攠敀敠斀斠旀无昀映晀晠暀暠曀曠最朠杀杠枀枠柀柠栀栠桀桠梀梠检棠椀椠楀楠榀榠槀槠樀樠橀橠檀檠櫀櫠欀欠歀歠殀殠毀毠氀氠汀池沀沠泀泠洀洠浀浠涀涠淀淠渀渠湀湠満溠滀滠漀漠潀潠澀澠激濠瀀瀠灀灠炀炠烀烠焀焠煀煠熀熠燀燠爀爠牀牠犀犠狀狠猀猠獀獠玀玠珀珠琀琠瑀瑠璀璠瓀瓠甀甠畀畠疀疠痀痠瘀瘠癀癠皀皠盀盠眀眠着睠瞀瞠矀矠砀砠础硠碀碠磀磠礀礠祀祠禀禠秀秠稀稠穀穠窀窠竀章笀笠筀筠简箠節篠簀簠籀籠粀粠糀糠紀素絀絠綀綠緀締縀縠繀繠纀纠绀绠缀缠罀罠羀羠翀翠耀耠聀聠肀肠胀胠脀脠腀腠膀膠臀臠舀舠艀艠芀芠苀苠茀茠荀荠莀莠菀菠萀萠葀葠蒀蒠蓀蓠蔀蔠蕀蕠薀薠藀藠蘀蘠虀虠蚀蚠蛀蛠蜀蜠蝀蝠螀螠蟀蟠蠀蠠血衠袀袠裀裠褀褠襀襠覀覠觀觠言訠詀詠誀誠諀諠謀謠譀譠讀讠诀诠谀谠豀豠貀負賀賠贀贠赀赠趀趠跀跠踀踠蹀蹠躀躠軀軠輀輠轀轠辀辠迀迠退造遀遠邀邠郀郠鄀鄠酀酠醀醠釀釠鈀鈠鉀鉠銀銠鋀鋠錀錠鍀鍠鎀鎠鏀鏠鐀鐠鑀鑠钀钠铀铠销锠镀镠門閠闀闠阀阠陀陠隀隠雀雠需霠靀靠鞀鞠韀韠頀頠顀顠颀颠飀飠餀餠饀饠馀馠駀駠騀騠驀驠骀骠髀髠鬀鬠魀魠鮀鮠鯀鯠鰀鰠鱀鱠鲀鲠鳀鳠鴀鴠鵀鵠鶀鶠鷀鷠鸀鸠鹀鹠麀麠黀黠鼀鼠齀齠龀龠ꀀꀠꁀꁠꂀꂠꃀꃠꄀꄠꅀꅠꆀꆠꇀꇠꈀꈠꉀꉠꊀꊠꋀꋠꌀꌠꍀꍠꎀꎠꏀꏠꐀꐠꑀꑠ꒠ꔀꔠꕀꕠꖀꖠꗀꗠꙀꚠꛀ꜀꜠ꝀꞀꡀ"
|
||||
|
||||
func (r *results) checkBase32768() {
|
||||
r.canBase32768 = false
|
||||
ctx := context.Background()
|
||||
|
||||
n := 0
|
||||
dir, err := os.MkdirTemp("", "rclone-base32768-files")
|
||||
if err != nil {
|
||||
log.Printf("Failed to make temp dir: %v", err)
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
_ = os.RemoveAll(dir)
|
||||
}()
|
||||
|
||||
// Create test files
|
||||
for _, c := range safeAlphabet {
|
||||
var out strings.Builder
|
||||
for i := rune(0); i < 32; i++ {
|
||||
out.WriteRune(c + i)
|
||||
}
|
||||
fileName := filepath.Join(dir, fmt.Sprintf("%04d-%s.txt", n, out.String()))
|
||||
err = os.WriteFile(fileName, []byte(fileName), 0666)
|
||||
if err != nil {
|
||||
log.Printf("write %q failed: %v", fileName, err)
|
||||
return
|
||||
}
|
||||
n++
|
||||
}
|
||||
|
||||
// Make a local fs
|
||||
fLocal, err := fs.NewFs(ctx, dir)
|
||||
if err != nil {
|
||||
log.Printf("Failed to make local fs: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
testDir := "test-base32768"
|
||||
|
||||
// Make a remote fs
|
||||
s := fs.ConfigStringFull(r.f)
|
||||
s = fspath.JoinRootPath(s, testDir)
|
||||
fRemote, err := fs.NewFs(ctx, s)
|
||||
if err != nil {
|
||||
log.Printf("Failed to make remote fs: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
defer func() {
|
||||
err := operations.Purge(ctx, r.f, testDir)
|
||||
if err != nil {
|
||||
log.Printf("Failed to purge test directory: %v", err)
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
// Sync local to remote
|
||||
err = sync.Sync(ctx, fRemote, fLocal, false)
|
||||
if err != nil {
|
||||
log.Printf("Failed to sync remote fs: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Check local to remote
|
||||
err = operations.Check(ctx, &operations.CheckOpt{
|
||||
Fdst: fRemote,
|
||||
Fsrc: fLocal,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("Failed to check remote fs: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
r.canBase32768 = true
|
||||
}
|
||||
@@ -37,7 +37,6 @@ var (
|
||||
checkControl bool
|
||||
checkLength bool
|
||||
checkStreaming bool
|
||||
checkBase32768 bool
|
||||
all bool
|
||||
uploadWait time.Duration
|
||||
positionLeftRe = regexp.MustCompile(`(?s)^(.*)-position-left-([[:xdigit:]]+)$`)
|
||||
@@ -54,7 +53,6 @@ func init() {
|
||||
flags.DurationVarP(cmdFlags, &uploadWait, "upload-wait", "", 0, "Wait after writing a file", "")
|
||||
flags.BoolVarP(cmdFlags, &checkLength, "check-length", "", false, "Check max filename length", "")
|
||||
flags.BoolVarP(cmdFlags, &checkStreaming, "check-streaming", "", false, "Check uploads with indeterminate file size", "")
|
||||
flags.BoolVarP(cmdFlags, &checkBase32768, "check-base32768", "", false, "Check can store all possible base32768 characters", "")
|
||||
flags.BoolVarP(cmdFlags, &all, "all", "", false, "Run all tests", "")
|
||||
}
|
||||
|
||||
@@ -73,7 +71,7 @@ a bit of go code for each one.
|
||||
},
|
||||
Run: func(command *cobra.Command, args []string) {
|
||||
cmd.CheckArgs(1, 1e6, command, args)
|
||||
if !checkNormalization && !checkControl && !checkLength && !checkStreaming && !checkBase32768 && !all {
|
||||
if !checkNormalization && !checkControl && !checkLength && !checkStreaming && !all {
|
||||
log.Fatalf("no tests selected - select a test or use --all")
|
||||
}
|
||||
if all {
|
||||
@@ -81,7 +79,6 @@ a bit of go code for each one.
|
||||
checkControl = true
|
||||
checkLength = true
|
||||
checkStreaming = true
|
||||
checkBase32768 = true
|
||||
}
|
||||
for i := range args {
|
||||
f := cmd.NewFsDir(args[i : i+1])
|
||||
@@ -103,7 +100,6 @@ type results struct {
|
||||
canReadUnnormalized bool
|
||||
canReadRenormalized bool
|
||||
canStream bool
|
||||
canBase32768 bool
|
||||
}
|
||||
|
||||
func newResults(ctx context.Context, f fs.Fs) *results {
|
||||
@@ -145,9 +141,6 @@ func (r *results) Print() {
|
||||
if checkStreaming {
|
||||
fmt.Printf("canStream = %v\n", r.canStream)
|
||||
}
|
||||
if checkBase32768 {
|
||||
fmt.Printf("base32768isOK = %v // make sure maxFileLength for 2 byte unicode chars is the same as for 1 byte characters\n", r.canBase32768)
|
||||
}
|
||||
}
|
||||
|
||||
// WriteJSON writes the results to a JSON file when requested
|
||||
@@ -490,9 +483,6 @@ func readInfo(ctx context.Context, f fs.Fs) error {
|
||||
if checkStreaming {
|
||||
r.checkStreaming()
|
||||
}
|
||||
if checkBase32768 {
|
||||
r.checkBase32768()
|
||||
}
|
||||
r.Print()
|
||||
r.WriteJSON()
|
||||
return nil
|
||||
|
||||
@@ -755,5 +755,3 @@ put them back in again.` >}}
|
||||
* yuudi <yuudi@users.noreply.github.com>
|
||||
* Zach <github@prozach.org>
|
||||
* nielash <31582349+nielash@users.noreply.github.com>
|
||||
* Julian Lepinski <lepinsk@users.noreply.github.com>
|
||||
* Raymond Berger <RayBB@users.noreply.github.com>
|
||||
|
||||
@@ -473,27 +473,3 @@ remote.
|
||||
|
||||
See [List of backends that do not support rclone about](https://rclone.org/overview/#optional-features) and [rclone about](https://rclone.org/commands/rclone_about/)
|
||||
|
||||
## Get your own Box App ID
|
||||
|
||||
Here is how to create your own Box App ID for rclone:
|
||||
|
||||
1. Go to the [Box Developer Console](https://app.box.com/developers/console)
|
||||
and login, then click `My Apps` on the sidebar. Click `Create New App`
|
||||
and select `Custom App`.
|
||||
|
||||
2. In the first screen on the box that pops up, you can pretty much enter
|
||||
whatever you want. The `App Name` can be whatever. For `Purpose` choose
|
||||
automation to avoid having to fill out anything else. Click `Next`.
|
||||
|
||||
3. In the second screen of the creation screen, select
|
||||
`User Authentication (OAuth 2.0)`. Then click `Create App`.
|
||||
|
||||
4. You should now be on the `Configuration` tab of your new app. If not,
|
||||
click on it at the top of the webpage. Copy down `Client ID`
|
||||
and `Client Secret`, you'll need those for rclone.
|
||||
|
||||
5. Under "OAuth 2.0 Redirect URI", add `http://127.0.0.1:53682/`
|
||||
|
||||
6. For `Application Scopes`, select `Read all files and folders stored in Box`
|
||||
and `Write all files and folders stored in box` (assuming you want to do both).
|
||||
Leave others unchecked. Click `Save Changes` at the top right.
|
||||
|
||||
@@ -69,7 +69,7 @@ This is an SHA256 sum of all the 4 MiB block SHA256s.
|
||||
² SFTP supports checksums if the same login has shell access and
|
||||
`md5sum` or `sha1sum` as well as `echo` are in the remote's PATH.
|
||||
|
||||
³ WebDAV supports hashes when used with Fastmail Files, Owncloud and Nextcloud only.
|
||||
³ WebDAV supports hashes when used with Fastmail Files. Owncloud and Nextcloud only.
|
||||
|
||||
⁴ WebDAV supports modtimes when used with Fastmail Files, Owncloud and Nextcloud only.
|
||||
|
||||
|
||||
@@ -10,26 +10,6 @@
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header" style="padding: 5px 15px;">
|
||||
Gold Sponsors
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<a href="https://www.idrive.com/e2/?refer=rclone" target="_blank" rel="noopener" title="Visit rclone's sponsor IDrive e2"><img src="/img/logos/idrive_e2.svg" viewBox="0 0 60 55"></a><br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{if .IsHome}}
|
||||
<div class="card">
|
||||
<div class="card-header" style="padding: 5px 15px;">
|
||||
Silver Sponsors
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<a href="https://min.io/persona/developers?utm_source=rclone&utm_medium=display&utm_campaign=developers-know-rclone-part-0823" target="_blank" rel="noopener" title="High Performance Object Storage, Any Cloud, Any HW, Any Workload"><img src="/img/logos/minio.svg"></a><br />
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header" style="padding: 5px 10px;">
|
||||
Share and Enjoy
|
||||
@@ -59,3 +39,14 @@
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header" style="padding: 5px 15px;">
|
||||
Sponsors
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="menu">
|
||||
<a href="https://www.idrive.com/e2/?refer=rclone" target="_blank" rel="noopener" aria-label="Visit rclone's sponsor IDrive e2"><img src="/img/logos/idrive_e2.svg" viewBox="0 0 60 55"></a><br />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
331
docs/static/img/logos/minio.svg
vendored
331
docs/static/img/logos/minio.svg
vendored
@@ -1,331 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 400 120"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="minio.svg"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs78"><rect
|
||||
x="-12.310704"
|
||||
y="130.17005"
|
||||
id="rect2854" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
id="namedview76"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="1.9289873"
|
||||
inkscape:cx="166.66776"
|
||||
inkscape:cy="91.239585"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1023"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="text2852"
|
||||
height="154px" />
|
||||
<style
|
||||
type="text/css"
|
||||
id="style2">
|
||||
.st0{fill:none;}
|
||||
.st1{enable-background:new ;}
|
||||
.st2{fill:#343434;}
|
||||
.st3{fill:#D03850;}
|
||||
.st4{clip-path:url(#SVGID_00000148662086262103992630000015539105521009494150_);}
|
||||
</style>
|
||||
<rect
|
||||
class="st0"
|
||||
width="300"
|
||||
height="250"
|
||||
id="rect4"
|
||||
x="-8.8682652"
|
||||
y="-54.99836" />
|
||||
<g
|
||||
class="st1"
|
||||
id="g36"
|
||||
transform="translate(56.286064,-62.767478)">
|
||||
<path
|
||||
class="st2"
|
||||
d="m 50.7,119.1 v 9.4 h -3.6 v -27.7 h 3.6 v 13.5 l 2.7,-3.4 8.1,-10.2 h 4.3 l -9.7,12.1 10.3,15.6 h -4.3 l -8.4,-12.9 z"
|
||||
id="path28" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 69.6,107.9 h 3.2 l 0.2,3 c 0.3,-0.4 0.6,-0.8 1,-1.2 0.4,-0.4 0.7,-0.7 1.2,-0.9 0.6,-0.4 1.3,-0.7 2,-0.9 0.7,-0.2 1.5,-0.3 2.3,-0.4 1.1,0 2.1,0.2 2.9,0.5 0.9,0.3 1.6,0.8 2.3,1.4 0.6,0.6 1.1,1.5 1.4,2.5 0.3,1 0.5,2.2 0.5,3.6 v 13.1 H 83 v -13 c 0,-0.9 -0.1,-1.7 -0.3,-2.3 -0.2,-0.6 -0.5,-1.1 -0.9,-1.5 -0.4,-0.4 -0.9,-0.7 -1.5,-0.9 -0.6,-0.2 -1.2,-0.3 -2,-0.3 -0.6,0 -1.3,0.1 -1.8,0.3 -0.6,0.2 -1.1,0.4 -1.5,0.8 -0.4,0.3 -0.7,0.6 -1.1,1 -0.3,0.4 -0.6,0.8 -0.8,1.2 v 14.8 h -3.5 z"
|
||||
id="path30" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 91.7,113.9 c 0.4,-1.3 1.1,-2.4 1.9,-3.3 0.8,-0.9 1.8,-1.7 2.9,-2.2 1.2,-0.5 2.5,-0.8 3.9,-0.8 1.5,0 2.8,0.3 3.9,0.8 1.2,0.5 2.1,1.3 3,2.2 0.8,0.9 1.4,2 1.8,3.3 0.4,1.3 0.6,2.7 0.6,4.1 v 0.4 c 0,1.5 -0.2,2.9 -0.6,4.1 -0.4,1.2 -1,2.4 -1.8,3.3 -0.8,0.9 -1.8,1.7 -3,2.2 -1.2,0.5 -2.5,0.8 -3.9,0.8 -1.5,0 -2.8,-0.3 -3.9,-0.8 -1.2,-0.5 -2.1,-1.3 -2.9,-2.2 -0.8,-0.9 -1.4,-2 -1.9,-3.3 -0.5,-1.3 -0.6,-2.6 -0.6,-4.1 V 118 c -0.1,-1.5 0.2,-2.9 0.6,-4.1 z m 3.2,7.4 c 0.2,0.9 0.6,1.7 1.1,2.4 0.5,0.7 1.1,1.3 1.8,1.7 0.7,0.4 1.6,0.6 2.6,0.6 1,0 1.8,-0.2 2.5,-0.6 0.7,-0.4 1.3,-1 1.8,-1.7 0.5,-0.7 0.8,-1.5 1.1,-2.4 0.2,-0.9 0.4,-1.9 0.4,-2.9 V 118 c 0,-1 -0.1,-2 -0.4,-2.9 -0.2,-0.9 -0.6,-1.7 -1.1,-2.4 -0.5,-0.7 -1.1,-1.3 -1.8,-1.7 -0.7,-0.4 -1.6,-0.6 -2.6,-0.6 -1,0 -1.8,0.2 -2.6,0.6 -0.7,0.4 -1.3,1 -1.8,1.7 -0.5,0.7 -0.9,1.5 -1.1,2.4 -0.2,0.9 -0.4,1.9 -0.4,2.9 v 0.4 c 0.2,1 0.3,2 0.5,2.9 z"
|
||||
id="path32" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 112.1,107.9 h 3.1 l 2.4,13.1 0.4,3 0.5,-3 3.3,-13.1 h 2.3 l 3.3,13.1 0.6,3.2 0.5,-3.2 2.3,-13.1 h 3.1 l -4.4,20.6 h -2.8 l -3.2,-12.6 -0.5,-3.2 -0.5,3.2 -3.2,12.6 h -2.8 z"
|
||||
id="path34" />
|
||||
</g><g
|
||||
id="g501"
|
||||
transform="translate(0,-6)"><g
|
||||
class="st1"
|
||||
id="g26"
|
||||
transform="translate(56.646962,-42.531195)">
|
||||
<path
|
||||
class="st2"
|
||||
d="m 46.8,52.8 h 6.4 c 1.1,0 2.1,0.1 3.1,0.3 1,0.2 1.8,0.5 2.7,0.9 1.1,0.5 2.1,1.2 3,2 0.9,0.8 1.6,1.8 2.1,2.9 0.5,0.9 0.8,2 1.1,3.1 0.2,1.1 0.4,2.3 0.4,3.6 v 2 c 0,1.2 -0.1,2.4 -0.4,3.5 -0.3,1.1 -0.6,2.1 -1,3 -0.5,1 -1,1.8 -1.7,2.6 -0.7,0.8 -1.5,1.4 -2.3,2 -0.9,0.6 -1.9,1 -3.1,1.3 -1.2,0.3 -2.4,0.5 -3.7,0.5 H 47 V 52.8 Z m 3.6,24.8 h 2.8 c 1,0 1.9,-0.1 2.8,-0.4 0.9,-0.3 1.6,-0.6 2.2,-1 0.7,-0.5 1.3,-1 1.8,-1.7 0.5,-0.7 0.9,-1.4 1.2,-2.2 0.3,-0.7 0.4,-1.4 0.6,-2.2 0.1,-0.8 0.2,-1.6 0.2,-2.4 V 65.6 C 62,64.7 61.9,63.9 61.8,63.1 61.7,62.3 61.5,61.6 61.2,60.9 60.9,60 60.4,59.2 59.8,58.5 59.2,57.8 58.5,57.2 57.7,56.8 57.1,56.5 56.4,56.2 55.7,56 55,55.8 54.2,55.7 53.3,55.7 h -2.8 v 21.9 z"
|
||||
id="path6" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 74.7,80.1 c -1.2,-0.5 -2.3,-1.2 -3.1,-2.1 -0.8,-0.9 -1.5,-1.9 -2,-3.2 -0.5,-1.3 -0.7,-2.5 -0.7,-4 V 70 c 0,-1.7 0.3,-3.2 0.8,-4.5 0.5,-1.3 1.2,-2.4 2.1,-3.3 0.9,-0.9 1.9,-1.6 3,-2.1 1.1,-0.5 2.3,-0.7 3.5,-0.7 1.5,0 2.8,0.3 3.9,0.8 1.1,0.5 2,1.2 2.8,2.1 0.7,0.9 1.3,2 1.6,3.2 0.4,1.2 0.5,2.6 0.5,4 v 1.6 H 72.4 v 0.1 c 0.1,1 0.3,1.9 0.6,2.6 0.3,0.7 0.7,1.4 1.3,2 0.6,0.6 1.2,1.1 2,1.5 0.8,0.4 1.7,0.5 2.6,0.5 1.3,0 2.4,-0.3 3.4,-0.8 1,-0.5 1.8,-1.2 2.4,-2 l 2.2,1.7 c -0.7,1 -1.7,2 -3.1,2.8 -1.4,0.8 -3,1.2 -5.1,1.2 -1.4,0.2 -2.8,-0.1 -4,-0.6 z m 1.5,-17.3 c -0.6,0.3 -1.2,0.6 -1.7,1.1 -0.5,0.5 -0.9,1.1 -1.3,1.9 -0.3,0.7 -0.6,1.6 -0.7,2.5 h 11.1 v -0.2 c 0,-0.6 -0.1,-1.3 -0.4,-2 -0.2,-0.7 -0.6,-1.4 -1,-1.9 -0.4,-0.5 -1,-1 -1.6,-1.3 -0.7,-0.3 -1.4,-0.5 -2.3,-0.5 -0.8,0 -1.4,0.1 -2.1,0.4 z"
|
||||
id="path8" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 90.6,59.9 h 3.6 l 5.9,15.5 0.3,1.3 0.3,-1.3 5.8,-15.5 h 3.6 l -8.4,20.6 H 99 Z"
|
||||
id="path10" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 119.6,80.1 c -1.2,-0.5 -2.3,-1.2 -3.1,-2.1 -0.8,-0.9 -1.5,-1.9 -2,-3.2 -0.5,-1.3 -0.7,-2.5 -0.7,-4 V 70 c 0,-1.7 0.3,-3.2 0.8,-4.5 0.5,-1.3 1.2,-2.4 2.1,-3.3 0.9,-0.9 1.9,-1.6 3,-2.1 1.1,-0.5 2.3,-0.7 3.5,-0.7 1.5,0 2.8,0.3 3.9,0.8 1.1,0.5 2,1.2 2.8,2.1 0.7,0.9 1.3,2 1.6,3.2 0.4,1.2 0.5,2.6 0.5,4 v 1.6 h -14.7 v 0.1 c 0.1,1 0.3,1.9 0.6,2.6 0.3,0.7 0.7,1.4 1.3,2 0.6,0.6 1.2,1.1 2,1.5 0.8,0.4 1.7,0.5 2.6,0.5 1.3,0 2.4,-0.3 3.4,-0.8 1,-0.5 1.8,-1.2 2.4,-2 l 2.2,1.7 c -0.7,1 -1.7,2 -3.1,2.8 -1.4,0.8 -3,1.2 -5.1,1.2 -1.5,0.2 -2.8,-0.1 -4,-0.6 z m 1.5,-17.3 c -0.6,0.3 -1.2,0.6 -1.7,1.1 -0.5,0.5 -0.9,1.1 -1.3,1.9 -0.3,0.7 -0.6,1.6 -0.7,2.5 h 11.1 v -0.2 c 0,-0.6 -0.1,-1.3 -0.4,-2 -0.2,-0.7 -0.6,-1.4 -1,-1.9 -0.4,-0.5 -1,-1 -1.6,-1.3 -0.7,-0.3 -1.4,-0.5 -2.3,-0.5 -0.8,0 -1.5,0.1 -2.1,0.4 z"
|
||||
id="path12" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 148,51.2 v 26.2 h 6.7 v 3 h -17.3 v -3 h 7 V 54.3 h -7 v -3.1 z"
|
||||
id="path14" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 159,65.9 c 0.4,-1.3 1.1,-2.4 1.9,-3.3 0.8,-0.9 1.8,-1.7 2.9,-2.2 1.2,-0.5 2.5,-0.8 3.9,-0.8 1.5,0 2.8,0.3 3.9,0.8 1.2,0.5 2.1,1.3 3,2.2 0.8,0.9 1.4,2 1.8,3.3 0.4,1.3 0.6,2.7 0.6,4.1 v 0.4 c 0,1.5 -0.2,2.9 -0.6,4.1 -0.4,1.2 -1,2.4 -1.8,3.3 -0.8,0.9 -1.8,1.7 -3,2.2 -1.2,0.5 -2.5,0.8 -3.9,0.8 -1.5,0 -2.8,-0.3 -3.9,-0.8 -1.1,-0.5 -2.1,-1.3 -2.9,-2.2 -0.8,-0.9 -1.4,-2 -1.9,-3.3 -0.5,-1.3 -0.6,-2.6 -0.6,-4.1 V 70 c -0.1,-1.5 0.1,-2.9 0.6,-4.1 z m 3.2,7.4 c 0.2,0.9 0.6,1.7 1.1,2.4 0.5,0.7 1.1,1.3 1.8,1.7 0.7,0.4 1.6,0.6 2.6,0.6 1,0 1.8,-0.2 2.5,-0.6 0.7,-0.4 1.3,-1 1.8,-1.7 0.5,-0.7 0.8,-1.5 1.1,-2.4 0.2,-0.9 0.4,-1.9 0.4,-2.9 V 70 c 0,-1 -0.1,-2 -0.4,-2.9 -0.2,-0.9 -0.6,-1.7 -1.1,-2.4 -0.5,-0.7 -1.1,-1.3 -1.8,-1.7 -0.7,-0.4 -1.6,-0.6 -2.6,-0.6 -1,0 -1.8,0.2 -2.6,0.6 -0.7,0.4 -1.3,1 -1.8,1.7 -0.5,0.7 -0.9,1.5 -1.1,2.4 -0.2,0.9 -0.4,1.9 -0.4,2.9 v 0.4 c 0.1,1 0.3,2 0.5,2.9 z"
|
||||
id="path16" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 181.7,59.9 h 3.2 l 0.2,2.2 c 0.3,-0.4 0.6,-0.7 0.9,-1 0.3,-0.3 0.7,-0.5 1.1,-0.7 0.5,-0.3 1.1,-0.5 1.8,-0.7 0.7,-0.2 1.4,-0.2 2.1,-0.2 1.3,0 2.5,0.3 3.5,0.8 1,0.5 1.9,1.2 2.6,2.2 0.7,1 1.2,2 1.6,3.3 0.4,1.3 0.5,2.7 0.5,4.2 v 0.4 c 0,1.5 -0.2,2.8 -0.5,4.1 -0.4,1.3 -0.9,2.4 -1.6,3.3 -0.7,0.9 -1.5,1.7 -2.5,2.2 -1,0.5 -2.2,0.8 -3.5,0.8 -0.8,0 -1.5,-0.1 -2.2,-0.2 -0.7,-0.2 -1.3,-0.4 -1.8,-0.7 -0.3,-0.2 -0.6,-0.4 -0.9,-0.6 -0.3,-0.2 -0.6,-0.5 -0.8,-0.8 v 9.9 h -3.5 V 59.9 Z m 13.6,7.3 c -0.2,-0.9 -0.6,-1.7 -1,-2.4 -0.5,-0.7 -1.1,-1.2 -1.8,-1.6 -0.7,-0.4 -1.6,-0.6 -2.6,-0.6 -0.5,0 -1.1,0.1 -1.5,0.2 -0.5,0.1 -0.9,0.3 -1.2,0.6 -0.4,0.2 -0.8,0.5 -1.1,0.9 -0.3,0.4 -0.6,0.7 -0.8,1.2 v 9.9 c 0.2,0.4 0.5,0.7 0.7,1.1 0.2,0.4 0.6,0.6 1,0.8 0.4,0.3 0.9,0.5 1.4,0.6 0.5,0.1 1.1,0.2 1.7,0.2 1,0 1.8,-0.2 2.5,-0.6 0.7,-0.4 1.3,-1 1.8,-1.7 0.5,-0.7 0.8,-1.5 1,-2.4 0.2,-0.9 0.3,-1.9 0.3,-2.9 V 70 c -0.1,-1 -0.2,-1.9 -0.4,-2.8 z"
|
||||
id="path18" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 209.3,80.1 c -1.2,-0.5 -2.3,-1.2 -3.1,-2.1 -0.8,-0.9 -1.5,-1.9 -2,-3.2 -0.5,-1.3 -0.7,-2.5 -0.7,-4 V 70 c 0,-1.7 0.3,-3.2 0.8,-4.5 0.5,-1.3 1.2,-2.4 2.1,-3.3 0.9,-0.9 1.9,-1.6 3,-2.1 1.1,-0.5 2.3,-0.7 3.5,-0.7 1.5,0 2.8,0.3 3.9,0.8 1.1,0.5 2,1.2 2.8,2.1 0.7,0.9 1.3,2 1.6,3.2 0.4,1.2 0.5,2.6 0.5,4 v 1.6 H 207 v 0.1 c 0.1,1 0.3,1.9 0.6,2.6 0.3,0.8 0.7,1.4 1.3,2 0.6,0.6 1.2,1.1 2,1.5 0.8,0.4 1.7,0.5 2.6,0.5 1.3,0 2.4,-0.3 3.4,-0.8 1,-0.5 1.8,-1.2 2.4,-2 l 2.2,1.7 c -0.7,1 -1.7,2 -3.1,2.8 -1.4,0.8 -3.1,1.2 -5.1,1.2 -1.5,0.2 -2.8,-0.1 -4,-0.6 z m 1.5,-17.3 c -0.6,0.3 -1.2,0.6 -1.7,1.1 -0.5,0.5 -0.9,1.1 -1.3,1.9 -0.3,0.7 -0.6,1.6 -0.7,2.5 h 11.1 v -0.2 c 0,-0.6 -0.1,-1.3 -0.4,-2 -0.2,-0.7 -0.6,-1.4 -1,-1.9 -0.4,-0.5 -1,-1 -1.6,-1.3 -0.7,-0.3 -1.4,-0.5 -2.3,-0.5 -0.8,0 -1.5,0.1 -2.1,0.4 z"
|
||||
id="path20" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 242.1,59.6 c 0.7,0.1 1.2,0.2 1.6,0.4 l -0.5,3.4 c -0.7,-0.2 -1.3,-0.3 -2,-0.3 -0.6,-0.1 -1.3,-0.1 -1.9,-0.1 -0.9,0 -1.6,0.1 -2.3,0.3 -0.7,0.2 -1.3,0.5 -1.8,0.9 -0.5,0.4 -0.9,0.8 -1.2,1.3 -0.3,0.5 -0.6,1.1 -0.9,1.7 v 13.2 h -3.5 V 59.9 h 3.4 l 0.2,2.8 v 0.5 c 0.8,-1.1 1.8,-2 3,-2.7 1.2,-0.7 2.5,-1 4,-1 0.5,0 1.2,0.1 1.9,0.1 z"
|
||||
id="path22" />
|
||||
<path
|
||||
class="st2"
|
||||
d="m 262.5,73.9 c -0.2,-0.3 -0.4,-0.6 -0.8,-0.9 -0.4,-0.3 -0.9,-0.5 -1.6,-0.8 -0.6,-0.2 -1.5,-0.4 -2.4,-0.6 -1.2,-0.2 -2.3,-0.5 -3.2,-0.9 -1,-0.3 -1.8,-0.8 -2.5,-1.2 -0.7,-0.5 -1.2,-1 -1.6,-1.7 -0.4,-0.6 -0.6,-1.4 -0.6,-2.2 0,-0.8 0.2,-1.6 0.6,-2.4 0.4,-0.7 0.9,-1.4 1.7,-1.9 0.7,-0.5 1.6,-1 2.5,-1.3 1,-0.3 2.1,-0.5 3.2,-0.5 1.3,0 2.4,0.2 3.4,0.5 1,0.3 1.9,0.8 2.6,1.4 0.7,0.6 1.3,1.3 1.6,2 0.4,0.8 0.6,1.6 0.6,2.5 h -3.5 c 0,-0.4 -0.1,-0.9 -0.3,-1.3 -0.2,-0.4 -0.5,-0.8 -1,-1.1 -0.5,-0.3 -0.9,-0.6 -1.5,-0.8 -0.6,-0.2 -1.2,-0.3 -2,-0.3 -0.7,0 -1.4,0.1 -2,0.2 -0.6,0.2 -1,0.4 -1.4,0.7 -0.4,0.3 -0.7,0.6 -0.9,1 -0.2,0.4 -0.3,0.7 -0.3,1.1 0,0.4 0.1,0.8 0.2,1.1 0.1,0.3 0.4,0.6 0.8,0.9 0.4,0.3 0.9,0.5 1.5,0.7 0.6,0.2 1.4,0.4 2.4,0.6 1.3,0.3 2.4,0.6 3.4,0.9 1,0.3 1.8,0.8 2.5,1.2 0.7,0.5 1.2,1.1 1.6,1.7 0.4,0.6 0.5,1.4 0.5,2.2 0,0.9 -0.2,1.7 -0.6,2.5 -0.4,0.8 -1,1.4 -1.7,1.9 -0.7,0.5 -1.6,0.9 -2.6,1.2 -1,0.3 -2.2,0.4 -3.4,0.4 -1.4,0 -2.6,-0.2 -3.7,-0.6 -1.1,-0.4 -2,-0.9 -2.8,-1.5 -0.8,-0.6 -1.3,-1.3 -1.7,-2.1 -0.4,-0.8 -0.6,-1.7 -0.6,-2.5 h 3.5 c 0.1,0.7 0.2,1.3 0.6,1.8 0.3,0.5 0.8,0.9 1.3,1.2 0.5,0.3 1,0.5 1.7,0.6 0.6,0.1 1.2,0.2 1.8,0.2 0.9,0 1.8,-0.1 2.5,-0.3 0.7,-0.2 1.2,-0.5 1.6,-0.9 0.2,-0.2 0.4,-0.5 0.6,-0.8 0.2,-0.3 0.2,-0.6 0.2,-0.9 0,-0.3 -0.1,-0.7 -0.2,-1 z"
|
||||
id="path24" />
|
||||
</g><g
|
||||
class="st1"
|
||||
id="g40"
|
||||
transform="translate(56.646962,-42.531195)">
|
||||
<path
|
||||
class="st2"
|
||||
d="m 23.2,69.1 v 0.4 l -5.5,7.2 h -2.6 l 4.8,-7.4 -4.8,-7.4 h 2.6 z"
|
||||
id="path38" />
|
||||
</g></g><g
|
||||
id="g486"
|
||||
transform="translate(0.36089765,-41.096058)"><g
|
||||
transform="translate(102.60296,110.71581)"
|
||||
id="g64">
|
||||
<rect
|
||||
x="59.799999"
|
||||
y="0.69999999"
|
||||
class="st3"
|
||||
width="10.3"
|
||||
height="30.299999"
|
||||
id="rect42" />
|
||||
<g
|
||||
id="g62">
|
||||
<g
|
||||
id="g60">
|
||||
<defs
|
||||
id="defs45"><rect
|
||||
id="SVGID_1_"
|
||||
x="0"
|
||||
y="0"
|
||||
width="184.60001"
|
||||
height="31.6" /></defs>
|
||||
<clipPath
|
||||
id="SVGID_00000095313647804014869330000001592249187272067725_">
|
||||
<use
|
||||
xlink:href="#SVGID_1_"
|
||||
style="overflow:visible"
|
||||
id="use47"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</clipPath>
|
||||
<g
|
||||
clip-path="url(#SVGID_00000095313647804014869330000001592249187272067725_)"
|
||||
id="g58">
|
||||
<path
|
||||
class="st3"
|
||||
d="m 47.3,1 -21,12.8 c -0.3,0.2 -0.7,0.2 -1,0 L 4.4,1 C 3.9,0.7 3.4,0.6 2.9,0.6 v 0 C 1.3,0.5 0,1.8 0,3.4 v 27.5 h 10.3 v -13 c 0,-0.6 0.5,-1 1,-1 0.2,0 0.4,0.1 0.5,0.2 l 11.8,7.2 c 1.2,0.7 2.6,0.7 3.8,0 L 39.9,17 c 0.5,-0.3 1.1,-0.1 1.4,0.4 0.1,0.2 0.1,0.3 0.1,0.5 V 31 H 51.7 V 3.4 c 0,-1.6 -1.3,-2.9 -2.9,-2.9 v 0 c -0.5,0 -1,0.2 -1.5,0.5"
|
||||
id="path50" />
|
||||
<path
|
||||
class="st3"
|
||||
d="m 121.7,0.7 h -10.5 v 13.9 c 0,0.6 -0.5,1 -1,1 -0.2,0 -0.3,0 -0.5,-0.1 L 82.6,1 C 82.2,0.8 81.7,0.7 81.2,0.7 v 0 C 79.6,0.7 78.3,2 78.3,3.6 V 31 H 88.7 V 17.3 c 0,-0.6 0.5,-1 1,-1 0.2,0 0.3,0 0.5,0.1 l 27.3,14.5 c 1.4,0.7 3.1,0.2 3.9,-1.2 0.2,-0.4 0.3,-0.9 0.3,-1.3 z"
|
||||
id="path52" />
|
||||
<rect
|
||||
x="130.10001"
|
||||
y="0.69999999"
|
||||
class="st3"
|
||||
width="4.8000002"
|
||||
height="30.299999"
|
||||
id="rect54" />
|
||||
<path
|
||||
class="st3"
|
||||
d="m 162.6,31.6 c -12.8,0 -21.9,-6.1 -21.9,-15.8 0,-9.7 9.1,-15.8 21.9,-15.8 12.8,0 21.9,6.1 21.9,15.8 0,9.7 -8.9,15.8 -21.9,15.8 m 0,-27.6 c -9.5,0 -16.8,4.2 -16.8,11.8 0,7.7 7.3,11.8 16.8,11.8 9.5,0 16.9,-4.1 16.9,-11.8 C 179.5,8.2 172.1,4 162.6,4"
|
||||
id="path56" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g><g
|
||||
transform="translate(102.60296,110.71581)"
|
||||
id="g68">
|
||||
<rect
|
||||
x="59.799999"
|
||||
y="0.69999999"
|
||||
class="st3"
|
||||
width="10.3"
|
||||
height="30.299999"
|
||||
id="rect66" />
|
||||
</g><path
|
||||
class="st2"
|
||||
d="m 334.64696,144.8688 h -30.2 v -5 h 30.2 z"
|
||||
id="path70" /></g>
|
||||
<g
|
||||
aria-label="High Performance Object Storage, Any Cloud, Any HW, Any Workload"
|
||||
transform="translate(16,-26)"
|
||||
id="text2852"
|
||||
style="font-weight:bold;font-size:10.2667px;line-height:125%;font-family:FreeMono;-inkscape-font-specification:'FreeMono, Bold';letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect2854);stroke-width:1px"><path
|
||||
d="m -8.2654672,139.66662 q -0.6776021,0 -0.6776021,-0.51334 0,-0.51333 0.6776021,-0.51333 h 0.1540005 v -1.44761 H -10.30854 v 1.44761 h 0.154 q 0.6776023,0 0.6776023,0.51333 0,0.51334 -0.6776023,0.51334 h -1.242271 q -0.677602,0 -0.677602,-0.51334 0,-0.29773 0.174534,-0.4004 0.174534,-0.11293 0.503068,-0.11293 h 0.0616 v -3.93215 q -0.533869,-0.0513 -0.533869,-0.51333 0,-0.29774 0.174534,-0.4004 0.174534,-0.11294 0.503068,-0.11294 h 1.036937 q 0.6776023,0 0.6776023,0.51334 0,0.51333 -0.6776023,0.51333 h -0.154 v 1.45787 h 2.1970733 v -1.45787 h -0.1540005 q -0.6776021,0 -0.6776021,-0.51333 0,-0.29774 0.1745339,-0.4004 0.1745338,-0.11294 0.5030682,-0.11294 h 1.0369367 q 0.6776022,0 0.6776022,0.51334 0,0.462 -0.5338684,0.51333 v 3.93215 h 0.0616 q 0.6776022,0 0.6776022,0.51333 0,0.51334 -0.6776022,0.51334 z"
|
||||
id="path46819" /><path
|
||||
d="m -1.3046604,138.63995 q 0.67760215,0 0.67760215,0.51333 0,0.51334 -0.67760215,0.51334 h -3.5317448 q -0.6776021,0 -0.6776021,-0.51334 0,-0.29773 0.1745338,-0.4004 0.1745339,-0.11293 0.5030683,-0.11293 h 1.2525374 v -2.43321 h -0.8008026 q -0.6878689,0 -0.6878689,-0.51333 0,-0.308 0.1745339,-0.41067 0.1848006,-0.10267 0.513335,-0.10267 h 1.8274726 v 3.45988 z m -1.3962712,-5.36948 v 1.078 h -1.2114706 v -1.078 z"
|
||||
id="path46821" /><path
|
||||
d="m 1.4570661,141.20662 q 0,-0.29773 0.1745339,-0.41066 0.1745339,-0.10267 0.5030683,-0.10267 h 1.1190702 q 0.4517348,0 0.7084023,-0.2156 0.2566675,-0.2156 0.2566675,-0.60574 v -0.56467 q -0.6776022,0.50307 -1.4476047,0.50307 -1.0369366,0 -1.7350722,-0.6776 -0.6878689,-0.68787 -0.6878689,-1.70427 0,-1.02667 0.6878689,-1.70427 0.6981356,-0.68787 1.7350722,-0.68787 0.8418694,0 1.4476047,0.51333 v -0.3696 h 1.1909372 q 0.6776022,0 0.6776022,0.51334 0,0.51333 -0.6776022,0.51333 H 5.2454783 v 3.66521 q 0,0.81107 -0.5646685,1.32441 -0.5544018,0.5236 -1.3962712,0.5236 H 2.1346683 q -0.6776022,0 -0.6776022,-0.51334 z m 1.3346709,-5.14361 q -0.5852018,0 -1.0061365,0.4004 -0.410668,0.39013 -0.410668,0.9548 0,0.56467 0.410668,0.96507 0.4209347,0.4004 1.0061365,0.4004 0.5852019,0 1.0061366,-0.39013 0.4209347,-0.4004 0.4209347,-0.9548 0,-0.57494 -0.4209347,-0.97534 -0.410668,-0.4004 -1.0061366,-0.4004 z"
|
||||
id="path46823" /><path
|
||||
d="m 6.3029331,133.7838 q 0,-0.51333 0.6776022,-0.51333 h 1.1909372 v 2.4024 q 0.616002,-0.62627 1.4065378,-0.62627 0.8213357,0 1.3141377,0.47227 0.503068,0.462 0.503068,1.23201 v 1.88907 h 0.0616 q 0.677603,0 0.677603,0.51333 0,0.51334 -0.677603,0.51334 h -1.14987 q -0.6878689,0 -0.6878689,-0.51334 0,-0.51333 0.6878689,-0.51333 h 0.0616 v -1.75561 q 0,-0.39013 -0.1848,-0.59547 -0.174534,-0.2156 -0.7186693,-0.2156 -0.3593345,0 -0.6057353,0.13347 -0.2464008,0.13347 -0.6878689,0.5544 v 1.87881 h 0.0616 q 0.6878689,0 0.6878689,0.51333 0,0.51334 -0.6878689,0.51334 H 7.0832023 q -0.6776022,0 -0.6776022,-0.51334 0,-0.51333 0.6776022,-0.51333 h 0.0616 v -4.34281 H 6.9805353 q -0.3285344,0 -0.5030683,-0.10267 -0.1745339,-0.11294 -0.1745339,-0.41067 z"
|
||||
id="path46825" /><path
|
||||
d="m 23.920558,135.62154 q 0,0.2772 -0.0616,0.53387 -0.0616,0.25667 -0.236134,0.53387 -0.174534,0.26693 -0.441468,0.47226 -0.256667,0.19507 -0.698135,0.32854 -0.431202,0.1232 -0.99587,0.1232 h -1.006137 v 1.02667 h 1.016403 q 0.677603,0 0.677603,0.51333 0,0.51334 -0.677603,0.51334 h -2.197073 q -0.677603,0 -0.677603,-0.51334 0,-0.51333 0.677603,-0.51333 h 0.154 v -3.93215 h -0.154 q -0.677603,0 -0.677603,-0.51333 0,-0.29774 0.174534,-0.4004 0.174534,-0.11294 0.503069,-0.11294 h 2.392141 q 0.975336,0 1.601605,0.54414 0.626269,0.54413 0.626269,1.39627 z m -3.439345,-0.91374 v 1.87881 h 1.211471 q 0.533868,0 0.831602,-0.2464 0.308001,-0.25667 0.308001,-0.68787 0,-0.44147 -0.308001,-0.68787 -0.297734,-0.25667 -0.831602,-0.25667 z"
|
||||
id="path46827" /><path
|
||||
d="m 30.296164,138.97875 q 0,0.32853 -0.595469,0.54414 -0.595468,0.20533 -1.11907,0.25666 -0.513335,0.0513 -0.882936,0.0513 -1.190937,0 -1.950673,-0.66734 -0.759736,-0.66733 -0.759736,-1.71454 0,-1.0164 0.759736,-1.70427 0.770002,-0.69814 1.889073,-0.69814 1.14987,0 1.899339,0.69814 0.759736,0.69814 0.759736,1.75561 v 0.4004 H 26.10735 q 0.349068,0.90347 1.683739,0.90347 0.544135,0 1.211471,-0.16427 0.667335,-0.17453 0.800802,-0.17453 0.205334,0 0.349068,0.154 0.143734,0.14373 0.143734,0.35933 z m -4.158014,-1.98147 h 3.01841 q -0.1232,-0.42094 -0.533868,-0.66734 -0.410668,-0.25667 -0.975337,-0.25667 -0.564668,0 -0.985603,0.25667 -0.410668,0.25667 -0.523602,0.66734 z"
|
||||
id="path46829" /><path
|
||||
d="m 35.378164,135.05687 q 0.431201,0 0.862403,0.26694 0.431201,0.26693 0.431201,0.60573 0,0.2156 -0.154,0.3696 -0.154001,0.154 -0.359335,0.154 -0.174534,0 -0.400401,-0.1848 -0.225868,-0.1848 -0.400401,-0.1848 -0.246401,0 -0.605736,0.22587 -0.349067,0.2156 -1.08827,0.82133 v 1.50921 h 1.427071 q 0.687869,0 0.687869,0.51333 0,0.51334 -0.687869,0.51334 h -3.049209 q -0.677603,0 -0.677603,-0.51334 0,-0.29773 0.174534,-0.4004 0.174534,-0.11293 0.503069,-0.11293 h 0.595468 v -2.43321 h -0.359334 q -0.677603,0 -0.677603,-0.51333 0,-0.51334 0.677603,-0.51334 h 1.386004 v 0.66734 q 0.616002,-0.462 0.975337,-0.62627 0.359334,-0.16427 0.739202,-0.16427 z"
|
||||
id="path46831" /><path
|
||||
d="m 40.994033,133.27047 q 1.837739,0 1.837739,0.6468 0,0.22586 -0.143734,0.37987 -0.133467,0.14373 -0.338801,0.14373 -0.05133,0 -0.564669,-0.0719 -0.503068,-0.0719 -0.882936,-0.0719 -0.862403,0 -0.862403,0.50306 v 0.37987 h 1.550272 q 0.677602,0 0.677602,0.51334 0,0.51333 -0.677602,0.51333 h -1.550272 v 2.43321 h 1.427072 q 0.677602,0 0.677602,0.51333 0,0.51334 -0.677602,0.51334 h -3.04921 q -0.677602,0 -0.677602,-0.51334 0,-0.29773 0.174534,-0.4004 0.174534,-0.11293 0.503068,-0.11293 h 0.595468 v -2.43321 h -0.482534 q -0.677603,0 -0.677603,-0.51333 0,-0.308 0.174534,-0.41067 0.184801,-0.10267 0.513335,-0.10267 h 0.472268 v -0.37987 q 0,-0.7084 0.533869,-1.11907 0.533868,-0.41066 1.447605,-0.41066 z"
|
||||
id="path46833" /><path
|
||||
d="m 46.2403,135.0466 q 1.08827,0 1.848006,0.69814 0.770002,0.69814 0.770002,1.69401 0,1.00613 -0.770002,1.70427 -0.770003,0.68787 -1.878806,0.68787 -1.108804,0 -1.878806,-0.68787 -0.770003,-0.69814 -0.770003,-1.70427 0,-1.01641 0.770003,-1.70428 0.770002,-0.68787 1.909606,-0.68787 z m -0.01027,1.02667 q -0.698135,0 -1.170404,0.39014 -0.472268,0.39013 -0.472268,0.97534 0,0.57493 0.462002,0.97533 0.472268,0.39014 1.160137,0.39014 0.687869,0 1.14987,-0.39014 0.472268,-0.4004 0.472268,-0.97533 0,-0.57494 -0.472268,-0.96507 -0.462001,-0.40041 -1.129337,-0.40041 z"
|
||||
id="path46835" /><path
|
||||
d="m 53.858175,135.05687 q 0.431201,0 0.862403,0.26694 0.431201,0.26693 0.431201,0.60573 0,0.2156 -0.154,0.3696 -0.154001,0.154 -0.359335,0.154 -0.174534,0 -0.400401,-0.1848 -0.225868,-0.1848 -0.400401,-0.1848 -0.246401,0 -0.605736,0.22587 -0.349068,0.2156 -1.08827,0.82133 v 1.50921 h 1.427071 q 0.687869,0 0.687869,0.51333 0,0.51334 -0.687869,0.51334 h -3.049209 q -0.677603,0 -0.677603,-0.51334 0,-0.29773 0.174534,-0.4004 0.174534,-0.11293 0.503069,-0.11293 h 0.595468 v -2.43321 h -0.359334 q -0.677603,0 -0.677603,-0.51333 0,-0.51334 0.677603,-0.51334 h 1.386004 v 0.66734 q 0.616002,-0.462 0.975337,-0.62627 0.359334,-0.16427 0.739202,-0.16427 z"
|
||||
id="path46837" /><path
|
||||
d="m 55.942303,139.66662 q -0.687869,0 -0.687869,-0.51334 0,-0.51333 0.616002,-0.51333 v -2.43321 q -0.616002,-0.0205 -0.616002,-0.51333 0,-0.51334 0.687869,-0.51334 h 0.954803 v 0.2464 q 0.472268,-0.37987 0.872669,-0.37987 0.585202,0 1.047204,0.50307 0.462001,-0.50307 1.067736,-0.50307 0.574936,0 0.954803,0.39014 0.390135,0.37987 0.390135,0.9548 v 2.24841 q 0.616002,0 0.616002,0.51333 0,0.51334 -0.677602,0.51334 h -0.96507 v -3.19294 q 0,-0.22587 -0.08213,-0.30801 -0.07187,-0.0924 -0.2772,-0.0924 -0.205334,0 -0.369602,0.0924 -0.154,0.0924 -0.410668,0.36961 v 2.10467 q 0.287468,0 0.451735,0.14373 0.164267,0.13347 0.164267,0.3696 0,0.51334 -0.677602,0.51334 h -0.96507 v -3.19294 q 0,-0.21561 -0.08213,-0.30801 -0.08213,-0.0924 -0.277201,-0.0924 -0.369601,0 -0.780269,0.46201 v 2.10467 q 0.626268,0 0.626268,0.51333 0,0.51334 -0.677602,0.51334 z"
|
||||
id="path46839" /><path
|
||||
d="m 62.040706,138.44488 q 0,-0.69813 0.687869,-1.21147 0.687869,-0.5236 1.796672,-0.5236 0.462002,0 1.067737,0.10267 v -0.23614 q 0,-0.50307 -0.954803,-0.50307 -0.420935,0 -0.954803,0.1232 -0.533868,0.11294 -0.646802,0.11294 -0.215601,0 -0.359335,-0.14374 -0.143733,-0.154 -0.143733,-0.37986 0,-0.32854 0.308001,-0.4312 0.872669,-0.30801 1.765872,-0.30801 0.944536,0 1.478405,0.40041 0.544135,0.4004 0.544135,1.11907 v 2.07387 h 0.164267 q 0.677602,0 0.677602,0.51333 0,0.51334 -0.677602,0.51334 h -1.201204 v -0.23613 q -0.770002,0.4004 -1.704272,0.4004 -0.759736,0 -1.303871,-0.4004 -0.544135,-0.41067 -0.544135,-0.98561 z m 3.562545,-0.16427 v -0.51333 q -0.646802,-0.11293 -1.139604,-0.11293 -0.523601,0 -0.934269,0.22586 -0.400402,0.22587 -0.400402,0.52361 0,0.17453 0.225868,0.28746 0.225867,0.11294 0.554401,0.11294 0.84187,0 1.694006,-0.52361 z"
|
||||
id="path46841" /><path
|
||||
d="m 68.683245,139.66662 q -0.677603,0 -0.677603,-0.51334 0,-0.51333 0.677603,-0.51333 h 0.0616 v -2.43321 q -0.626269,-0.0205 -0.626269,-0.51333 0,-0.51334 0.687869,-0.51334 h 0.96507 v 0.4928 q 0.369601,-0.34906 0.677602,-0.48253 0.308001,-0.14374 0.728936,-0.14374 0.800802,0 1.314137,0.45174 0.513335,0.45173 0.513335,1.27307 v 1.86854 q 0.626269,0 0.626269,0.51333 0,0.51334 -0.677602,0.51334 h -0.913737 q -0.687868,0 -0.687868,-0.51334 0,-0.51333 0.626268,-0.51333 v -1.82747 q 0,-0.73921 -0.924003,-0.73921 -0.359334,0 -0.646802,0.154 -0.277201,0.15401 -0.636535,0.54414 v 1.86854 h 0.0616 q 0.677602,0 0.677602,0.51333 0,0.51334 -0.677602,0.51334 z"
|
||||
id="path46843" /><path
|
||||
d="m 79.47353,136.51474 q 0,0.6776 -0.513335,0.6776 -0.277201,0 -0.390135,-0.154 -0.102667,-0.154 -0.164267,-0.37986 -0.0616,-0.22587 -0.205334,-0.32854 -0.420935,-0.25667 -1.08827,-0.25667 -0.728936,0 -1.170404,0.41067 -0.431201,0.4004 -0.431201,1.05747 0,1.26281 1.806939,1.26281 0.544135,0 0.90347,-0.0924 0.359334,-0.0924 0.482534,-0.19507 0.133468,-0.10267 0.256668,-0.19507 0.133467,-0.0924 0.256667,-0.0924 0.205334,0 0.359335,0.154 0.154,0.154 0.154,0.3696 0,0.44147 -0.687868,0.75974 -0.677603,0.31827 -1.796673,0.31827 -0.636535,0 -1.139604,-0.14374 -0.492801,-0.14373 -0.790536,-0.3696 -0.297734,-0.23613 -0.492801,-0.54413 -0.195067,-0.308 -0.266934,-0.60574 -0.07187,-0.308 -0.07187,-0.62627 0,-1.09853 0.728935,-1.79667 0.739203,-0.69814 1.89934,-0.69814 0.882936,0 1.478405,0.30801 0.0924,-0.30801 0.390134,-0.30801 0.492802,0 0.492802,0.67761 z"
|
||||
id="path46845" /><path
|
||||
d="m 85.736201,138.97875 q 0,0.32853 -0.595469,0.54414 -0.595469,0.20533 -1.11907,0.25666 -0.513335,0.0513 -0.882936,0.0513 -1.190938,0 -1.950673,-0.66734 -0.759736,-0.66733 -0.759736,-1.71454 0,-1.0164 0.759736,-1.70427 0.770002,-0.69814 1.889072,-0.69814 1.149871,0 1.89934,0.69814 0.759736,0.69814 0.759736,1.75561 v 0.4004 h -4.188814 q 0.349068,0.90347 1.683739,0.90347 0.544135,0 1.21147,-0.16427 0.667336,-0.17453 0.800803,-0.17453 0.205334,0 0.349068,0.154 0.143734,0.14373 0.143734,0.35933 z m -4.158014,-1.98147 h 3.01841 q -0.123201,-0.42094 -0.533868,-0.66734 -0.410668,-0.25667 -0.975337,-0.25667 -0.564668,0 -0.985603,0.25667 -0.410668,0.25667 -0.523602,0.66734 z"
|
||||
id="path46847" /><path
|
||||
d="m 95.489533,133.5374 q 0.225867,0 0.533868,0.0719 0.308001,0.0616 0.728936,0.2772 0.431201,0.2156 0.770003,0.54413 0.349067,0.32854 0.585201,0.93427 0.246401,0.59547 0.246401,1.35521 0,1.2628 -0.852136,2.17654 -0.841869,0.91373 -2.012273,0.91373 -1.190937,0 -2.032807,-0.91373 -0.831602,-0.92401 -0.831602,-2.22788 0,-1.2936 0.841869,-2.20734 0.841869,-0.924 2.02254,-0.924 z m 0,1.02667 q -0.749469,0 -1.293604,0.62627 -0.544135,0.616 -0.544135,1.4784 0,0.87267 0.533868,1.49894 0.544135,0.616 1.303871,0.616 0.749469,0 1.293604,-0.616 0.544135,-0.616 0.544135,-1.46814 0,-0.88293 -0.544135,-1.5092 -0.533868,-0.62627 -1.293604,-0.62627 z"
|
||||
id="path46849" /><path
|
||||
d="m 98.487393,133.7838 q 0,-0.51333 0.677602,-0.51333 h 1.190935 v 2.2792 q 0.6468,-0.51333 1.54001,-0.51333 1.16013,0 1.848,0.68787 0.68787,0.6776 0.68787,1.70427 0,1.02667 -0.69813,1.70427 -0.69814,0.6776 -1.82748,0.6776 -0.82133,0 -1.55027,-0.50307 v 0.35934 h -1.190935 q -0.677602,0 -0.677602,-0.51334 0,-0.29773 0.174534,-0.4004 0.174534,-0.11293 0.503068,-0.11293 h 0.164267 v -4.34281 h -0.164267 q -0.328534,0 -0.503068,-0.10267 -0.174534,-0.11294 -0.174534,-0.41067 z m 3.398277,2.27921 q -0.69813,0 -1.11907,0.39013 -0.41067,0.37987 -0.41067,0.95481 0,0.60573 0.42094,0.99587 0.4312,0.37986 1.1088,0.37986 0.66734,0 1.08827,-0.37986 0.4312,-0.39014 0.4312,-0.98561 0,-0.57493 -0.42093,-0.96507 -0.42094,-0.39013 -1.09854,-0.39013 z"
|
||||
id="path46851" /><path
|
||||
d="m 105.62273,141.20662 q 0,-0.29773 0.17454,-0.41066 0.1848,-0.10267 0.50307,-0.10267 h 1.1396 q 0.45173,0 0.7084,-0.2156 0.25667,-0.2156 0.25667,-0.60574 v -3.66521 h -2.07387 q -0.67761,0 -0.67761,-0.51333 0,-0.29774 0.17454,-0.4004 0.17453,-0.11294 0.50307,-0.11294 h 3.10054 v 4.69188 q 0,0.80081 -0.56467,1.32441 -0.5544,0.5236 -1.39627,0.5236 h -1.1704 q -0.67761,0 -0.67761,-0.51334 z m 3.21348,-7.93615 v 1.078 h -1.22174 v -1.078 z"
|
||||
id="path46853" /><path
|
||||
d="m 116.53622,138.97875 q 0,0.32853 -0.59547,0.54414 -0.59547,0.20533 -1.11907,0.25666 -0.51333,0.0513 -0.88294,0.0513 -1.19093,0 -1.95067,-0.66734 -0.75973,-0.66733 -0.75973,-1.71454 0,-1.0164 0.75973,-1.70427 0.77,-0.69814 1.88907,-0.69814 1.14987,0 1.89934,0.69814 0.75974,0.69814 0.75974,1.75561 v 0.4004 h -4.18881 q 0.34906,0.90347 1.68373,0.90347 0.54414,0 1.21147,-0.16427 0.66734,-0.17453 0.80081,-0.17453 0.20533,0 0.34907,0.154 0.14373,0.14373 0.14373,0.35933 z m -4.15801,-1.98147 h 3.01841 q -0.12321,-0.42094 -0.53387,-0.66734 -0.41067,-0.25667 -0.97534,-0.25667 -0.56467,0 -0.9856,0.25667 -0.41067,0.25667 -0.5236,0.66734 z"
|
||||
id="path46855" /><path
|
||||
d="m 122.59356,136.51474 q 0,0.6776 -0.51333,0.6776 -0.2772,0 -0.39014,-0.154 -0.10266,-0.154 -0.16426,-0.37986 -0.0616,-0.22587 -0.20534,-0.32854 -0.42093,-0.25667 -1.08827,-0.25667 -0.72893,0 -1.1704,0.41067 -0.4312,0.4004 -0.4312,1.05747 0,1.26281 1.80694,1.26281 0.54413,0 0.90347,-0.0924 0.35933,-0.0924 0.48253,-0.19507 0.13347,-0.10267 0.25667,-0.19507 0.13347,-0.0924 0.25667,-0.0924 0.20533,0 0.35933,0.154 0.154,0.154 0.154,0.3696 0,0.44147 -0.68787,0.75974 -0.6776,0.31827 -1.79667,0.31827 -0.63654,0 -1.1396,-0.14374 -0.49281,-0.14373 -0.79054,-0.3696 -0.29773,-0.23613 -0.4928,-0.54413 -0.19507,-0.308 -0.26694,-0.60574 -0.0719,-0.308 -0.0719,-0.62627 0,-1.09853 0.72893,-1.79667 0.73921,-0.69814 1.89934,-0.69814 0.88294,0 1.47841,0.30801 0.0924,-0.30801 0.39013,-0.30801 0.4928,0 0.4928,0.67761 z"
|
||||
id="path46857" /><path
|
||||
d="m 125.40662,138.21901 q 0,0.31827 0.17454,0.45174 0.17453,0.13347 0.7084,0.13347 0.4004,0 0.72893,-0.0719 0.33881,-0.0719 0.50307,-0.154 0.17454,-0.0924 0.3388,-0.16427 0.17454,-0.0719 0.28747,-0.0719 0.20534,0 0.34907,0.15401 0.14373,0.154 0.14373,0.3696 0,0.28746 -0.44146,0.5236 -0.43121,0.22587 -0.96507,0.32853 -0.52361,0.11294 -0.95481,0.11294 -0.87267,0 -1.386,-0.37987 -0.51334,-0.37987 -0.51334,-1.03694 v -2.20734 h -0.35933 q -0.6776,0 -0.6776,-0.51333 0,-0.29774 0.17453,-0.4004 0.17453,-0.11294 0.50307,-0.11294 h 0.35933 v -0.90347 q 0,-0.6776 0.51334,-0.6776 0.29773,0 0.4004,0.17453 0.11293,0.17454 0.11293,0.50307 v 0.90347 h 1.85828 q 0.32853,0 0.50306,0.11294 0.17454,0.10266 0.17454,0.4004 0,0.51333 -0.6776,0.51333 h -1.85828 z"
|
||||
id="path46859" /><path
|
||||
d="m 140.33437,133.5374 q 0.308,0 0.4004,0.17453 0.10267,0.17454 0.10267,0.50307 v 0.90347 q 0,0.68787 -0.50307,0.68787 -0.0821,0 -0.154,-0.0103 -0.0616,-0.0205 -0.11293,-0.0411 -0.0411,-0.0308 -0.0821,-0.0719 -0.0411,-0.0513 -0.0616,-0.0821 -0.0205,-0.0308 -0.0411,-0.0924 -0.0205,-0.0616 -0.0308,-0.0821 0,-0.0308 -0.0205,-0.0924 -0.0103,-0.0719 -0.0103,-0.0821 -0.0719,-0.308 -0.41067,-0.4928 -0.32854,-0.19507 -0.81107,-0.19507 -0.48254,0 -0.82134,0.22587 -0.3388,0.22586 -0.3388,0.5544 0,0.34907 0.3388,0.54413 0.3388,0.1848 0.79054,0.2464 0.45173,0.0513 1.00614,0.20534 0.5544,0.14373 0.87267,0.4004 0.60573,0.48253 0.60573,1.28334 0,0.8008 -0.6468,1.2936 -0.6468,0.4928 -1.70427,0.4928 -0.85214,0 -1.60161,-0.4004 -0.20533,0.2464 -0.41067,0.2464 -0.5236,0 -0.5236,-0.6776 v -0.6776 q 0,-0.3388 0.11294,-0.50307 0.11293,-0.17453 0.4004,-0.17453 0.0924,0 0.16426,0.0205 0.0821,0.0205 0.13347,0.0616 0.0513,0.0411 0.0821,0.0821 0.0411,0.0308 0.0616,0.0924 0.0308,0.0616 0.0411,0.0924 0.0103,0.0308 0.0205,0.0821 0.0205,0.0513 0.0205,0.0616 0.0719,0.2772 0.4928,0.47227 0.42093,0.19506 0.93427,0.19506 0.57493,0 0.96507,-0.22586 0.39013,-0.22587 0.39013,-0.55441 0,-0.308 -0.308,-0.4928 -0.29773,-0.1848 -0.69813,-0.2464 -0.39014,-0.0616 -0.92401,-0.1848 -0.5236,-0.1232 -0.84186,-0.29773 -0.39014,-0.22587 -0.61601,-0.60574 -0.22586,-0.37987 -0.22586,-0.82133 0,-0.78027 0.63653,-1.29361 0.63654,-0.5236 1.59134,-0.5236 0.79054,0 1.33467,0.3388 0.0821,-0.19507 0.16427,-0.26693 0.0821,-0.0719 0.23613,-0.0719 z"
|
||||
id="path46861" /><path
|
||||
d="m 143.88663,138.21901 q 0,0.31827 0.17454,0.45174 0.17453,0.13347 0.7084,0.13347 0.4004,0 0.72894,-0.0719 0.3388,-0.0719 0.50306,-0.154 0.17454,-0.0924 0.3388,-0.16427 0.17454,-0.0719 0.28747,-0.0719 0.20534,0 0.34907,0.15401 0.14373,0.154 0.14373,0.3696 0,0.28746 -0.44146,0.5236 -0.43121,0.22587 -0.96507,0.32853 -0.52361,0.11294 -0.95481,0.11294 -0.87267,0 -1.386,-0.37987 -0.51334,-0.37987 -0.51334,-1.03694 v -2.20734 h -0.35933 q -0.6776,0 -0.6776,-0.51333 0,-0.29774 0.17453,-0.4004 0.17453,-0.11294 0.50307,-0.11294 h 0.35933 v -0.90347 q 0,-0.6776 0.51334,-0.6776 0.29773,0 0.4004,0.17453 0.11293,0.17454 0.11293,0.50307 v 0.90347 h 1.85828 q 0.32853,0 0.50306,0.11294 0.17454,0.10266 0.17454,0.4004 0,0.51333 -0.6776,0.51333 h -1.85828 z"
|
||||
id="path46863" /><path
|
||||
d="m 150.96037,135.0466 q 1.08827,0 1.84801,0.69814 0.77,0.69814 0.77,1.69401 0,1.00613 -0.77,1.70427 -0.77,0.68787 -1.87881,0.68787 -1.1088,0 -1.8788,-0.68787 -0.77001,-0.69814 -0.77001,-1.70427 0,-1.01641 0.77001,-1.70428 0.77,-0.68787 1.9096,-0.68787 z m -0.0103,1.02667 q -0.69814,0 -1.17041,0.39014 -0.47227,0.39013 -0.47227,0.97534 0,0.57493 0.46201,0.97533 0.47226,0.39014 1.16013,0.39014 0.68787,0 1.14987,-0.39014 0.47227,-0.4004 0.47227,-0.97533 0,-0.57494 -0.47227,-0.96507 -0.462,-0.40041 -1.12933,-0.40041 z"
|
||||
id="path46865" /><path
|
||||
d="m 158.57825,135.05687 q 0.4312,0 0.8624,0.26694 0.4312,0.26693 0.4312,0.60573 0,0.2156 -0.154,0.3696 -0.154,0.154 -0.35933,0.154 -0.17454,0 -0.4004,-0.1848 -0.22587,-0.1848 -0.4004,-0.1848 -0.24641,0 -0.60574,0.22587 -0.34907,0.2156 -1.08827,0.82133 v 1.50921 h 1.42707 q 0.68787,0 0.68787,0.51333 0,0.51334 -0.68787,0.51334 h -3.04921 q -0.6776,0 -0.6776,-0.51334 0,-0.29773 0.17453,-0.4004 0.17454,-0.11293 0.50307,-0.11293 h 0.59547 v -2.43321 h -0.35933 q -0.67761,0 -0.67761,-0.51333 0,-0.51334 0.67761,-0.51334 h 1.386 v 0.66734 q 0.616,-0.462 0.97534,-0.62627 0.35933,-0.16427 0.7392,-0.16427 z"
|
||||
id="path46867" /><path
|
||||
d="m 160.60077,138.44488 q 0,-0.69813 0.68787,-1.21147 0.68787,-0.5236 1.79667,-0.5236 0.46201,0 1.06774,0.10267 v -0.23614 q 0,-0.50307 -0.9548,-0.50307 -0.42094,0 -0.95481,0.1232 -0.53386,0.11294 -0.6468,0.11294 -0.2156,0 -0.35933,-0.14374 -0.14374,-0.154 -0.14374,-0.37986 0,-0.32854 0.308,-0.4312 0.87267,-0.30801 1.76588,-0.30801 0.94453,0 1.4784,0.40041 0.54414,0.4004 0.54414,1.11907 v 2.07387 h 0.16426 q 0.67761,0 0.67761,0.51333 0,0.51334 -0.67761,0.51334 h -1.2012 v -0.23613 q -0.77,0.4004 -1.70427,0.4004 -0.75974,0 -1.30387,-0.4004 -0.54414,-0.41067 -0.54414,-0.98561 z m 3.56255,-0.16427 v -0.51333 q -0.6468,-0.11293 -1.13961,-0.11293 -0.5236,0 -0.93427,0.22586 -0.4004,0.22587 -0.4004,0.52361 0,0.17453 0.22587,0.28746 0.22587,0.11294 0.5544,0.11294 0.84187,0 1.69401,-0.52361 z"
|
||||
id="path46869" /><path
|
||||
d="m 167.77718,141.20662 q 0,-0.29773 0.17453,-0.41066 0.17454,-0.10267 0.50307,-0.10267 h 1.11907 q 0.45174,0 0.7084,-0.2156 0.25667,-0.2156 0.25667,-0.60574 v -0.56467 q -0.6776,0.50307 -1.4476,0.50307 -1.03694,0 -1.73508,-0.6776 -0.68786,-0.68787 -0.68786,-1.70427 0,-1.02667 0.68786,-1.70427 0.69814,-0.68787 1.73508,-0.68787 0.84187,0 1.4476,0.51333 v -0.3696 h 1.19094 q 0.6776,0 0.6776,0.51334 0,0.51333 -0.6776,0.51333 h -0.16427 v 3.66521 q 0,0.81107 -0.56467,1.32441 -0.5544,0.5236 -1.39627,0.5236 h -1.14987 q -0.6776,0 -0.6776,-0.51334 z m 1.33467,-5.14361 q -0.5852,0 -1.00614,0.4004 -0.41066,0.39013 -0.41066,0.9548 0,0.56467 0.41066,0.96507 0.42094,0.4004 1.00614,0.4004 0.5852,0 1.00614,-0.39013 0.42093,-0.4004 0.42093,-0.9548 0,-0.57494 -0.42093,-0.97534 -0.41067,-0.4004 -1.00614,-0.4004 z"
|
||||
id="path46871" /><path
|
||||
d="m 178.13626,138.97875 q 0,0.32853 -0.59547,0.54414 -0.59546,0.20533 -1.11907,0.25666 -0.51333,0.0513 -0.88293,0.0513 -1.19094,0 -1.95067,-0.66734 -0.75974,-0.66733 -0.75974,-1.71454 0,-1.0164 0.75974,-1.70427 0.77,-0.69814 1.88907,-0.69814 1.14987,0 1.89934,0.69814 0.75973,0.69814 0.75973,1.75561 v 0.4004 h -4.18881 q 0.34907,0.90347 1.68374,0.90347 0.54413,0 1.21147,-0.16427 0.66733,-0.17453 0.8008,-0.17453 0.20534,0 0.34907,0.154 0.14373,0.14373 0.14373,0.35933 z m -4.15801,-1.98147 h 3.01841 q -0.1232,-0.42094 -0.53387,-0.66734 -0.41067,-0.25667 -0.97534,-0.25667 -0.56466,0 -0.9856,0.25667 -0.41067,0.25667 -0.5236,0.66734 z"
|
||||
id="path46873" /><path
|
||||
d="m 180.89799,138.29088 h 1.3552 l -1.4476,2.75148 q -0.1232,0.2464 -0.32854,0.2464 -0.13346,0 -0.22586,-0.0924 -0.0924,-0.0821 -0.0924,-0.19507 0,-0.0821 0.0308,-0.19507 z"
|
||||
id="path46875" /><path
|
||||
d="m 194.56293,139.15328 q 0,-0.29773 0.17454,-0.4004 0.17453,-0.11293 0.50307,-0.11293 h 0.23613 l -0.23613,-0.59547 h -2.44348 l -0.23613,0.59547 h 0.23613 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 h -1.36547 q -0.6776,0 -0.6776,-0.51334 0,-0.308 0.1848,-0.41066 0.17453,-0.10267 0.50307,-0.10267 l 1.59134,-3.93215 h -0.64681 q -0.68787,0 -0.68787,-0.51333 0,-0.308 0.17454,-0.41067 0.1848,-0.10267 0.51333,-0.10267 h 2.21761 l 2.04307,4.95882 q 0.69814,0 0.69814,0.51333 0,0.51334 -0.6776,0.51334 h -1.42707 q -0.67761,0 -0.67761,-0.51334 z m 0.25667,-2.13547 -0.8008,-1.97121 -0.81107,1.97121 z"
|
||||
id="path46877" /><path
|
||||
d="m 198.04333,139.66662 q -0.6776,0 -0.6776,-0.51334 0,-0.51333 0.6776,-0.51333 h 0.0616 v -2.43321 q -0.62627,-0.0205 -0.62627,-0.51333 0,-0.51334 0.68787,-0.51334 h 0.96507 v 0.4928 q 0.3696,-0.34906 0.6776,-0.48253 0.308,-0.14374 0.72894,-0.14374 0.8008,0 1.31413,0.45174 0.51334,0.45173 0.51334,1.27307 v 1.86854 q 0.62627,0 0.62627,0.51333 0,0.51334 -0.6776,0.51334 h -0.91374 q -0.68787,0 -0.68787,-0.51334 0,-0.51333 0.62627,-0.51333 v -1.82747 q 0,-0.73921 -0.924,-0.73921 -0.35934,0 -0.64681,0.154 -0.2772,0.15401 -0.63653,0.54414 v 1.86854 h 0.0616 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 z"
|
||||
id="path46879" /><path
|
||||
d="m 204.08013,141.71996 q -0.308,0 -0.44147,-0.16427 -0.13346,-0.154 -0.13346,-0.34907 0,-0.51333 0.6776,-0.51333 h 1.02667 l 0.56467,-1.05747 -1.76587,-3.42908 q -0.50307,-0.0616 -0.50307,-0.51333 0,-0.51334 0.6776,-0.51334 h 0.924 q 0.32854,0 0.50307,0.11294 0.17453,0.10266 0.17453,0.4004 0,0.4928 -0.60573,0.51333 l 1.1704,2.28948 1.23201,-2.28948 q -0.65707,0 -0.65707,-0.51333 0,-0.51334 0.68787,-0.51334 h 0.94453 q 0.32854,0 0.50307,0.11294 0.17454,0.10266 0.17454,0.4004 0,0.462 -0.53387,0.51333 l -2.36134,4.48655 h 0.0513 q 0.32853,0 0.50307,0.10267 0.17453,0.11293 0.17453,0.41066 0,0.51334 -0.6776,0.51334 h -2.20734 z"
|
||||
id="path46881" /><path
|
||||
d="m 218.99761,138.78368 q 0.48254,0 0.82134,-0.11293 0.34907,-0.1232 0.4928,-0.25667 0.14374,-0.14373 0.28747,-0.25667 0.154,-0.1232 0.28747,-0.1232 0.20533,0 0.35933,0.154 0.154,0.154 0.154,0.35934 0,0.44147 -0.7084,0.85213 -0.69814,0.41067 -1.72481,0.41067 -1.30387,0 -2.16627,-0.75973 -0.85214,-0.77001 -0.85214,-1.94041 v -0.6776 q 0,-1.23201 0.80081,-2.06361 0.8008,-0.8316 1.99174,-0.8316 0.71867,0 1.45787,0.34907 l 0.10267,0.0411 q 0.17453,-0.2464 0.4312,-0.2464 0.29773,0 0.4004,0.17454 0.11293,0.17453 0.11293,0.50307 v 0.8624 q 0,0.6776 -0.51333,0.6776 -0.1848,0 -0.308,-0.10267 -0.11294,-0.10266 -0.14374,-0.1848 -0.0205,-0.0924 -0.0513,-0.25666 -0.0616,-0.30801 -0.37987,-0.49281 -0.308,-0.19506 -0.57493,-0.2464 -0.26694,-0.0513 -0.49281,-0.0513 -0.78027,0 -1.2936,0.53387 -0.51334,0.5236 -0.51334,1.33467 v 0.65707 q 0,0.77 0.54414,1.232 0.5544,0.462 1.4784,0.462 z"
|
||||
id="path46883" /><path
|
||||
d="m 222.84761,133.7838 q 0,-0.29773 0.17453,-0.4004 0.17454,-0.11293 0.51334,-0.11293 h 1.82747 v 5.36948 h 1.25254 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 h -3.53174 q -0.67761,0 -0.67761,-0.51334 0,-0.29773 0.17454,-0.4004 0.17453,-0.11293 0.50307,-0.11293 h 1.25253 v -4.34281 h -0.8008 q -0.68787,0 -0.68787,-0.51334 z"
|
||||
id="path46885" /><path
|
||||
d="m 231.04042,135.0466 q 1.08827,0 1.84801,0.69814 0.77,0.69814 0.77,1.69401 0,1.00613 -0.77,1.70427 -0.77001,0.68787 -1.87881,0.68787 -1.1088,0 -1.8788,-0.68787 -0.77001,-0.69814 -0.77001,-1.70427 0,-1.01641 0.77001,-1.70428 0.77,-0.68787 1.9096,-0.68787 z m -0.0103,1.02667 q -0.69813,0 -1.1704,0.39014 -0.47227,0.39013 -0.47227,0.97534 0,0.57493 0.462,0.97533 0.47227,0.39014 1.16014,0.39014 0.68787,0 1.14987,-0.39014 0.47227,-0.4004 0.47227,-0.97533 0,-0.57494 -0.47227,-0.96507 -0.462,-0.40041 -1.12934,-0.40041 z"
|
||||
id="path46887" /><path
|
||||
d="m 237.83696,136.20674 q -0.308,0 -0.44147,-0.154 -0.13346,-0.16427 -0.13346,-0.35933 0,-0.51334 0.6776,-0.51334 h 1.386 v 3.45988 q 0.62627,0 0.62627,0.51333 0,0.51334 -0.6776,0.51334 h -0.97534 v -0.4928 q -0.37987,0.35933 -0.68787,0.4928 -0.29773,0.13347 -0.71867,0.13347 -0.81107,0 -1.3244,-0.45174 -0.50307,-0.462 -0.50307,-1.28334 v -1.85827 h -0.2772 q -0.25667,0 -0.41067,-0.14373 -0.154,-0.14374 -0.154,-0.3696 0,-0.29774 0.17454,-0.4004 0.17453,-0.11294 0.50306,-0.11294 h 1.19094 v 2.85414 q 0,0.73921 0.90347,0.73921 0.39014,0 0.6468,-0.13347 0.25667,-0.14373 0.65707,-0.56467 v -1.86854 h -0.35933 z"
|
||||
id="path46889" /><path
|
||||
d="m 245.8655,138.63995 q 0.67761,0 0.67761,0.51333 0,0.51334 -0.67761,0.51334 h -1.19093 v -0.35934 q -0.73921,0.50307 -1.55028,0.50307 -1.14987,0 -1.848,-0.68787 -0.68787,-0.68786 -0.68787,-1.70427 0,-1.0164 0.68787,-1.694 0.69813,-0.68787 1.85827,-0.68787 0.8932,0 1.54001,0.51333 v -1.2628 h -0.16427 q -0.32854,0 -0.50307,-0.10267 -0.17453,-0.11293 -0.17453,-0.41067 0,-0.28746 0.17453,-0.39013 0.17453,-0.11293 0.50307,-0.11293 h 1.19094 v 5.36948 z m -1.19093,-1.2012 q 0,-0.61601 -0.42094,-0.99587 -0.42093,-0.37987 -1.11907,-0.37987 -0.68787,0 -1.1088,0.4004 -0.41067,0.39013 -0.41067,0.9548 0,0.5852 0.42093,0.97534 0.43121,0.39013 1.10881,0.39013 0.6776,0 1.09853,-0.37986 0.43121,-0.39014 0.43121,-0.96507 z"
|
||||
id="path46891" /><path
|
||||
d="m 248.65804,138.29088 h 1.35521 l -1.44761,2.75148 q -0.1232,0.2464 -0.32853,0.2464 -0.13347,0 -0.22587,-0.0924 -0.0924,-0.0821 -0.0924,-0.19507 0,-0.0821 0.0308,-0.19507 z"
|
||||
id="path46893" /><path
|
||||
d="m 262.32299,139.15328 q 0,-0.29773 0.17453,-0.4004 0.17454,-0.11293 0.50307,-0.11293 h 0.23614 l -0.23614,-0.59547 h -2.44347 l -0.23614,0.59547 h 0.23614 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 h -1.36547 q -0.67761,0 -0.67761,-0.51334 0,-0.308 0.1848,-0.41066 0.17454,-0.10267 0.50307,-0.10267 l 1.59134,-3.93215 h -0.6468 q -0.68787,0 -0.68787,-0.51333 0,-0.308 0.17453,-0.41067 0.1848,-0.10267 0.51334,-0.10267 h 2.21761 l 2.04307,4.95882 q 0.69814,0 0.69814,0.51333 0,0.51334 -0.67761,0.51334 h -1.42707 q -0.6776,0 -0.6776,-0.51334 z m 0.25667,-2.13547 -0.80081,-1.97121 -0.81106,1.97121 z"
|
||||
id="path46895" /><path
|
||||
d="m 265.80338,139.66662 q -0.6776,0 -0.6776,-0.51334 0,-0.51333 0.6776,-0.51333 h 0.0616 v -2.43321 q -0.62626,-0.0205 -0.62626,-0.51333 0,-0.51334 0.68787,-0.51334 h 0.96506 v 0.4928 q 0.36961,-0.34906 0.67761,-0.48253 0.308,-0.14374 0.72893,-0.14374 0.80081,0 1.31414,0.45174 0.51334,0.45173 0.51334,1.27307 v 1.86854 q 0.62626,0 0.62626,0.51333 0,0.51334 -0.6776,0.51334 h -0.91373 q -0.68787,0 -0.68787,-0.51334 0,-0.51333 0.62627,-0.51333 v -1.82747 q 0,-0.73921 -0.92401,-0.73921 -0.35933,0 -0.6468,0.154 -0.2772,0.15401 -0.63654,0.54414 v 1.86854 h 0.0616 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 z"
|
||||
id="path46897" /><path
|
||||
d="m 271.84019,141.71996 q -0.308,0 -0.44147,-0.16427 -0.13347,-0.154 -0.13347,-0.34907 0,-0.51333 0.6776,-0.51333 h 1.02667 l 0.56467,-1.05747 -1.76587,-3.42908 q -0.50307,-0.0616 -0.50307,-0.51333 0,-0.51334 0.6776,-0.51334 h 0.92401 q 0.32853,0 0.50307,0.11294 0.17453,0.10266 0.17453,0.4004 0,0.4928 -0.60574,0.51333 l 1.17041,2.28948 1.232,-2.28948 q -0.65707,0 -0.65707,-0.51333 0,-0.51334 0.68787,-0.51334 h 0.94454 q 0.32853,0 0.50307,0.11294 0.17453,0.10266 0.17453,0.4004 0,0.462 -0.53387,0.51333 l -2.36134,4.48655 h 0.0513 q 0.32853,0 0.50306,0.10267 0.17454,0.11293 0.17454,0.41066 0,0.51334 -0.6776,0.51334 h -2.20735 z"
|
||||
id="path46899" /><path
|
||||
d="m 287.41474,139.66662 q -0.6776,0 -0.6776,-0.51334 0,-0.51333 0.6776,-0.51333 h 0.154 v -1.44761 h -2.19707 v 1.44761 h 0.154 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 h -1.24227 q -0.67761,0 -0.67761,-0.51334 0,-0.29773 0.17454,-0.4004 0.17453,-0.11293 0.50307,-0.11293 h 0.0616 v -3.93215 q -0.53387,-0.0513 -0.53387,-0.51333 0,-0.29774 0.17453,-0.4004 0.17454,-0.11294 0.50307,-0.11294 h 1.03694 q 0.6776,0 0.6776,0.51334 0,0.51333 -0.6776,0.51333 h -0.154 v 1.45787 h 2.19707 v -1.45787 h -0.154 q -0.6776,0 -0.6776,-0.51333 0,-0.29774 0.17453,-0.4004 0.17453,-0.11294 0.50307,-0.11294 h 1.03694 q 0.6776,0 0.6776,0.51334 0,0.462 -0.53387,0.51333 v 3.93215 h 0.0616 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 z"
|
||||
id="path46901" /><path
|
||||
d="m 295.11475,133.68113 q 0.6776,0 0.6776,0.51334 0,0.4312 -0.48253,0.51333 l -0.61601,4.95882 h -1.12933 l -0.95481,-2.84388 -0.93427,2.84388 h -1.1396 l -0.63654,-4.95882 q -0.47226,-0.0616 -0.47226,-0.4928 0,-0.308 0.16426,-0.42093 0.17454,-0.11294 0.51334,-0.11294 h 1.34494 q 0.68786,0 0.68786,0.51334 0,0.51333 -0.68786,0.51333 h -0.49281 l 0.36961,2.79255 0.78026,-2.32028 h 1.06774 l 0.78027,2.32028 0.35934,-2.79255 h -0.54414 q -0.6776,0 -0.6776,-0.51333 0,-0.29774 0.17453,-0.4004 0.17454,-0.11294 0.50307,-0.11294 z"
|
||||
id="path46903" /><path
|
||||
d="m 297.93807,138.29088 h 1.35521 l -1.44761,2.75148 q -0.1232,0.2464 -0.32853,0.2464 -0.13347,0 -0.22587,-0.0924 -0.0924,-0.0821 -0.0924,-0.19507 0,-0.0821 0.0308,-0.19507 z"
|
||||
id="path46905" /><path
|
||||
d="m 311.60302,139.15328 q 0,-0.29773 0.17453,-0.4004 0.17454,-0.11293 0.50307,-0.11293 h 0.23614 l -0.23614,-0.59547 h -2.44347 l -0.23614,0.59547 h 0.23614 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 h -1.36547 q -0.67761,0 -0.67761,-0.51334 0,-0.308 0.1848,-0.41066 0.17454,-0.10267 0.50307,-0.10267 l 1.59134,-3.93215 h -0.6468 q -0.68787,0 -0.68787,-0.51333 0,-0.308 0.17453,-0.41067 0.1848,-0.10267 0.51334,-0.10267 h 2.21761 l 2.04307,4.95882 q 0.69813,0 0.69813,0.51333 0,0.51334 -0.6776,0.51334 h -1.42707 q -0.6776,0 -0.6776,-0.51334 z m 0.25667,-2.13547 -0.80081,-1.97121 -0.81107,1.97121 z"
|
||||
id="path46907" /><path
|
||||
d="m 315.08341,139.66662 q -0.6776,0 -0.6776,-0.51334 0,-0.51333 0.6776,-0.51333 h 0.0616 v -2.43321 q -0.62626,-0.0205 -0.62626,-0.51333 0,-0.51334 0.68786,-0.51334 h 0.96507 v 0.4928 q 0.36961,-0.34906 0.67761,-0.48253 0.308,-0.14374 0.72893,-0.14374 0.8008,0 1.31414,0.45174 0.51333,0.45173 0.51333,1.27307 v 1.86854 q 0.62627,0 0.62627,0.51333 0,0.51334 -0.6776,0.51334 h -0.91374 q -0.68786,0 -0.68786,-0.51334 0,-0.51333 0.62626,-0.51333 v -1.82747 q 0,-0.73921 -0.924,-0.73921 -0.35933,0 -0.6468,0.154 -0.2772,0.15401 -0.63654,0.54414 v 1.86854 h 0.0616 q 0.67761,0 0.67761,0.51333 0,0.51334 -0.67761,0.51334 z"
|
||||
id="path46909" /><path
|
||||
d="m 321.12022,141.71996 q -0.308,0 -0.44147,-0.16427 -0.13347,-0.154 -0.13347,-0.34907 0,-0.51333 0.6776,-0.51333 h 1.02667 l 0.56467,-1.05747 -1.76587,-3.42908 q -0.50307,-0.0616 -0.50307,-0.51333 0,-0.51334 0.6776,-0.51334 h 0.92401 q 0.32853,0 0.50307,0.11294 0.17453,0.10266 0.17453,0.4004 0,0.4928 -0.60574,0.51333 l 1.17041,2.28948 1.232,-2.28948 q -0.65707,0 -0.65707,-0.51333 0,-0.51334 0.68787,-0.51334 h 0.94454 q 0.32853,0 0.50307,0.11294 0.17453,0.10266 0.17453,0.4004 0,0.462 -0.53387,0.51333 l -2.36134,4.48655 h 0.0513 q 0.32854,0 0.50307,0.10267 0.17454,0.11293 0.17454,0.41066 0,0.51334 -0.67761,0.51334 h -2.20734 z"
|
||||
id="path46911" /><path
|
||||
d="m 338.23477,133.68113 q 0.67761,0 0.67761,0.51334 0,0.4312 -0.48254,0.51333 l -0.616,4.95882 h -1.12934 l -0.9548,-2.84388 -0.93427,2.84388 h -1.1396 l -0.63654,-4.95882 q -0.47227,-0.0616 -0.47227,-0.4928 0,-0.308 0.16427,-0.42093 0.17453,-0.11294 0.51333,-0.11294 h 1.34494 q 0.68787,0 0.68787,0.51334 0,0.51333 -0.68787,0.51333 h -0.4928 l 0.3696,2.79255 0.78027,-2.32028 h 1.06774 l 0.78027,2.32028 0.35933,-2.79255 h -0.54413 q -0.67761,0 -0.67761,-0.51333 0,-0.29774 0.17454,-0.4004 0.17453,-0.11294 0.50307,-0.11294 z"
|
||||
id="path46913" /><path
|
||||
d="m 341.9205,135.0466 q 1.08827,0 1.84801,0.69814 0.77,0.69814 0.77,1.69401 0,1.00613 -0.77,1.70427 -0.77,0.68787 -1.87881,0.68787 -1.1088,0 -1.8788,-0.68787 -0.77001,-0.69814 -0.77001,-1.70427 0,-1.01641 0.77001,-1.70428 0.77,-0.68787 1.9096,-0.68787 z m -0.0103,1.02667 q -0.69814,0 -1.17041,0.39014 -0.47227,0.39013 -0.47227,0.97534 0,0.57493 0.46201,0.97533 0.47226,0.39014 1.16013,0.39014 0.68787,0 1.14987,-0.39014 0.47227,-0.4004 0.47227,-0.97533 0,-0.57494 -0.47227,-0.96507 -0.462,-0.40041 -1.12933,-0.40041 z"
|
||||
id="path46915" /><path
|
||||
d="m 349.53838,135.05687 q 0.4312,0 0.8624,0.26694 0.4312,0.26693 0.4312,0.60573 0,0.2156 -0.154,0.3696 -0.154,0.154 -0.35933,0.154 -0.17454,0 -0.4004,-0.1848 -0.22587,-0.1848 -0.40041,-0.1848 -0.2464,0 -0.60573,0.22587 -0.34907,0.2156 -1.08827,0.82133 v 1.50921 h 1.42707 q 0.68787,0 0.68787,0.51333 0,0.51334 -0.68787,0.51334 h -3.04921 q -0.6776,0 -0.6776,-0.51334 0,-0.29773 0.17453,-0.4004 0.17454,-0.11293 0.50307,-0.11293 h 0.59547 v -2.43321 h -0.35934 q -0.6776,0 -0.6776,-0.51333 0,-0.51334 0.6776,-0.51334 h 1.38601 v 0.66734 q 0.616,-0.462 0.97534,-0.62627 0.35933,-0.16427 0.7392,-0.16427 z"
|
||||
id="path46917" /><path
|
||||
d="m 356.30412,138.63995 q 0.68787,0 0.68787,0.51333 0,0.51334 -0.68787,0.51334 h -1.21147 q -0.67761,0 -0.67761,-0.51334 0,-0.20533 0.16427,-0.37986 l -1.05747,-0.93427 -0.1848,0.14373 v 1.68374 h -1.19094 q -0.6776,0 -0.6776,-0.51334 0,-0.29773 0.17453,-0.4004 0.17454,-0.11293 0.50307,-0.11293 h 0.16427 v -4.34281 h -0.16427 q -0.32853,0 -0.50307,-0.10267 -0.17453,-0.11294 -0.17453,-0.41067 0,-0.51333 0.6776,-0.51333 h 1.19094 v 3.44961 l 0.81107,-0.64681 q -0.16427,-0.19506 -0.16427,-0.37986 0,-0.51334 0.68787,-0.51334 h 1.14987 q 0.3388,0 0.50307,0.11294 0.17453,0.11293 0.17453,0.4004 0,0.51333 -0.6776,0.51333 h -0.28747 l -1.21147,0.9856 1.64268,1.44761 z"
|
||||
id="path46919" /><path
|
||||
d="m 358.36771,133.7838 q 0,-0.29773 0.17453,-0.4004 0.17453,-0.11293 0.51334,-0.11293 h 1.82747 v 5.36948 h 1.25254 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 h -3.53175 q -0.6776,0 -0.6776,-0.51334 0,-0.29773 0.17453,-0.4004 0.17454,-0.11293 0.50307,-0.11293 h 1.25254 v -4.34281 h -0.8008 q -0.68787,0 -0.68787,-0.51334 z"
|
||||
id="path46921" /><path
|
||||
d="m 366.56052,135.0466 q 1.08827,0 1.848,0.69814 0.77001,0.69814 0.77001,1.69401 0,1.00613 -0.77001,1.70427 -0.77,0.68787 -1.8788,0.68787 -1.10881,0 -1.87881,-0.68787 -0.77,-0.69814 -0.77,-1.70427 0,-1.01641 0.77,-1.70428 0.77,-0.68787 1.90961,-0.68787 z m -0.0103,1.02667 q -0.69814,0 -1.1704,0.39014 -0.47227,0.39013 -0.47227,0.97534 0,0.57493 0.462,0.97533 0.47227,0.39014 1.16014,0.39014 0.68787,0 1.14987,-0.39014 0.47227,-0.4004 0.47227,-0.97533 0,-0.57494 -0.47227,-0.96507 -0.462,-0.40041 -1.12934,-0.40041 z"
|
||||
id="path46923" /><path
|
||||
d="m 370.04091,138.44488 q 0,-0.69813 0.68787,-1.21147 0.68787,-0.5236 1.79667,-0.5236 0.462,0 1.06774,0.10267 v -0.23614 q 0,-0.50307 -0.9548,-0.50307 -0.42094,0 -0.95481,0.1232 -0.53386,0.11294 -0.6468,0.11294 -0.2156,0 -0.35933,-0.14374 -0.14374,-0.154 -0.14374,-0.37986 0,-0.32854 0.308,-0.4312 0.87267,-0.30801 1.76588,-0.30801 0.94453,0 1.4784,0.40041 0.54414,0.4004 0.54414,1.11907 v 2.07387 h 0.16426 q 0.67761,0 0.67761,0.51333 0,0.51334 -0.67761,0.51334 h -1.2012 v -0.23613 q -0.77,0.4004 -1.70427,0.4004 -0.75974,0 -1.30387,-0.4004 -0.54414,-0.41067 -0.54414,-0.98561 z m 3.56255,-0.16427 v -0.51333 q -0.64681,-0.11293 -1.13961,-0.11293 -0.5236,0 -0.93427,0.22586 -0.4004,0.22587 -0.4004,0.52361 0,0.17453 0.22587,0.28746 0.22587,0.11294 0.5544,0.11294 0.84187,0 1.69401,-0.52361 z"
|
||||
id="path46925" /><path
|
||||
d="m 381.3856,138.63995 q 0.6776,0 0.6776,0.51333 0,0.51334 -0.6776,0.51334 h -1.19094 v -0.35934 q -0.7392,0.50307 -1.55027,0.50307 -1.14987,0 -1.84801,-0.68787 -0.68786,-0.68786 -0.68786,-1.70427 0,-1.0164 0.68786,-1.694 0.69814,-0.68787 1.85828,-0.68787 0.8932,0 1.54,0.51333 v -1.2628 h -0.16427 q -0.32853,0 -0.50306,-0.10267 -0.17454,-0.11293 -0.17454,-0.41067 0,-0.28746 0.17454,-0.39013 0.17453,-0.11293 0.50306,-0.11293 h 1.19094 v 5.36948 z m -1.19094,-1.2012 q 0,-0.61601 -0.42093,-0.99587 -0.42094,-0.37987 -1.11907,-0.37987 -0.68787,0 -1.10881,0.4004 -0.41066,0.39013 -0.41066,0.9548 0,0.5852 0.42093,0.97534 0.4312,0.39013 1.1088,0.39013 0.67761,0 1.09854,-0.37986 0.4312,-0.39014 0.4312,-0.96507 z"
|
||||
id="path46927" /></g></svg>
|
||||
|
Before Width: | Height: | Size: 50 KiB |
@@ -272,10 +272,10 @@ func (acc *Account) checkReadAfter(bytesUntilLimit int64, n int, err error) (out
|
||||
return n, err
|
||||
}
|
||||
|
||||
// ServerSideTransferStart should be called at the start of a server-side transfer
|
||||
// ServerSideCopyStart should be called at the start of a server-side copy
|
||||
//
|
||||
// This pretends a transfer has started
|
||||
func (acc *Account) ServerSideTransferStart() {
|
||||
func (acc *Account) ServerSideCopyStart() {
|
||||
acc.values.mu.Lock()
|
||||
// Set start time.
|
||||
if acc.values.start.IsZero() {
|
||||
@@ -284,9 +284,8 @@ func (acc *Account) ServerSideTransferStart() {
|
||||
acc.values.mu.Unlock()
|
||||
}
|
||||
|
||||
// ServerSideTransferEnd accounts for a read of n bytes in a sever
|
||||
// side transfer to be treated as a normal transfer.
|
||||
func (acc *Account) ServerSideTransferEnd(n int64) {
|
||||
// ServerSideCopyEnd accounts for a read of n bytes in a sever side copy
|
||||
func (acc *Account) ServerSideCopyEnd(n int64) {
|
||||
// Update Stats
|
||||
acc.values.mu.Lock()
|
||||
acc.values.bytes += n
|
||||
@@ -295,20 +294,10 @@ func (acc *Account) ServerSideTransferEnd(n int64) {
|
||||
acc.stats.Bytes(n)
|
||||
}
|
||||
|
||||
// ServerSideCopyEnd accounts for a read of n bytes in a sever side copy
|
||||
func (acc *Account) ServerSideCopyEnd(n int64) {
|
||||
acc.stats.AddServerSideCopy(n)
|
||||
}
|
||||
|
||||
// ServerSideMoveEnd accounts for a read of n bytes in a sever side move
|
||||
func (acc *Account) ServerSideMoveEnd(n int64) {
|
||||
acc.stats.AddServerSideMove(n)
|
||||
}
|
||||
|
||||
// DryRun accounts for statistics without running the operation
|
||||
func (acc *Account) DryRun(n int64) {
|
||||
acc.ServerSideTransferStart()
|
||||
acc.ServerSideTransferEnd(n)
|
||||
acc.ServerSideCopyStart()
|
||||
acc.ServerSideCopyEnd(n)
|
||||
}
|
||||
|
||||
// Account for n bytes from the current file bandwidth limit (if any)
|
||||
|
||||
@@ -28,40 +28,36 @@ var MaxCompletedTransfers = 100
|
||||
// N.B.: if this struct is modified, please remember to also update sum() function in stats_groups
|
||||
// to correctly count the updated fields
|
||||
type StatsInfo struct {
|
||||
mu sync.RWMutex
|
||||
ctx context.Context
|
||||
ci *fs.ConfigInfo
|
||||
bytes int64
|
||||
errors int64
|
||||
lastError error
|
||||
fatalError bool
|
||||
retryError bool
|
||||
retryAfter time.Time
|
||||
checks int64
|
||||
checking *transferMap
|
||||
checkQueue int
|
||||
checkQueueSize int64
|
||||
transfers int64
|
||||
transferring *transferMap
|
||||
transferQueue int
|
||||
transferQueueSize int64
|
||||
renames int64
|
||||
renameQueue int
|
||||
renameQueueSize int64
|
||||
deletes int64
|
||||
deletesSize int64
|
||||
deletedDirs int64
|
||||
inProgress *inProgress
|
||||
startedTransfers []*Transfer // currently active transfers
|
||||
oldTimeRanges timeRanges // a merged list of time ranges for the transfers
|
||||
oldDuration time.Duration // duration of transfers we have culled
|
||||
group string
|
||||
startTime time.Time // the moment these stats were initialized or reset
|
||||
average averageValues
|
||||
serverSideCopies int64
|
||||
serverSideCopyBytes int64
|
||||
serverSideMoves int64
|
||||
serverSideMoveBytes int64
|
||||
mu sync.RWMutex
|
||||
ctx context.Context
|
||||
ci *fs.ConfigInfo
|
||||
bytes int64
|
||||
errors int64
|
||||
lastError error
|
||||
fatalError bool
|
||||
retryError bool
|
||||
retryAfter time.Time
|
||||
checks int64
|
||||
checking *transferMap
|
||||
checkQueue int
|
||||
checkQueueSize int64
|
||||
transfers int64
|
||||
transferring *transferMap
|
||||
transferQueue int
|
||||
transferQueueSize int64
|
||||
renames int64
|
||||
renameQueue int
|
||||
renameQueueSize int64
|
||||
deletes int64
|
||||
deletesSize int64
|
||||
deletedDirs int64
|
||||
inProgress *inProgress
|
||||
startedTransfers []*Transfer // currently active transfers
|
||||
oldTimeRanges timeRanges // a merged list of time ranges for the transfers
|
||||
oldDuration time.Duration // duration of transfers we have culled
|
||||
group string
|
||||
startTime time.Time // the moment these stats were initialized or reset
|
||||
average averageValues
|
||||
}
|
||||
|
||||
type averageValues struct {
|
||||
@@ -114,10 +110,6 @@ func (s *StatsInfo) RemoteStats() (out rc.Params, err error) {
|
||||
out["deletedDirs"] = s.deletedDirs
|
||||
out["renames"] = s.renames
|
||||
out["elapsedTime"] = time.Since(s.startTime).Seconds()
|
||||
out["serverSideCopies"] = s.serverSideCopies
|
||||
out["serverSideCopyBytes"] = s.serverSideCopyBytes
|
||||
out["serverSideMoves"] = s.serverSideMoves
|
||||
out["serverSideMoveBytes"] = s.serverSideMoveBytes
|
||||
eta, etaOK := eta(s.bytes, ts.totalBytes, ts.speed)
|
||||
if etaOK {
|
||||
out["eta"] = eta.Seconds()
|
||||
@@ -457,16 +449,6 @@ func (s *StatsInfo) String() string {
|
||||
_, _ = fmt.Fprintf(buf, "Transferred: %10d / %d, %s\n",
|
||||
s.transfers, ts.totalTransfers, percent(s.transfers, ts.totalTransfers))
|
||||
}
|
||||
if s.serverSideCopies != 0 || s.serverSideCopyBytes != 0 {
|
||||
_, _ = fmt.Fprintf(buf, "Server Side Copies:%6d @ %s\n",
|
||||
s.serverSideCopies, fs.SizeSuffix(s.serverSideCopyBytes).ByteUnit(),
|
||||
)
|
||||
}
|
||||
if s.serverSideMoves != 0 || s.serverSideMoveBytes != 0 {
|
||||
_, _ = fmt.Fprintf(buf, "Server Side Moves:%7d @ %s\n",
|
||||
s.serverSideMoves, fs.SizeSuffix(s.serverSideMoveBytes).ByteUnit(),
|
||||
)
|
||||
}
|
||||
_, _ = fmt.Fprintf(buf, "Elapsed time: %10ss\n", strings.TrimRight(fs.Duration(elapsedTime.Truncate(time.Minute)).ReadableString(), "0s")+fmt.Sprintf("%.1f", elapsedTimeSecondsOnly.Seconds()))
|
||||
}
|
||||
|
||||
@@ -874,19 +856,3 @@ func (s *StatsInfo) PruneTransfers() {
|
||||
}
|
||||
s.mu.Unlock()
|
||||
}
|
||||
|
||||
// AddServerSideMove counts a server side move
|
||||
func (s *StatsInfo) AddServerSideMove(n int64) {
|
||||
s.mu.Lock()
|
||||
s.serverSideMoves += 1
|
||||
s.serverSideMoveBytes += n
|
||||
s.mu.Unlock()
|
||||
}
|
||||
|
||||
// AddServerSideCopy counts a server side copy
|
||||
func (s *StatsInfo) AddServerSideCopy(n int64) {
|
||||
s.mu.Lock()
|
||||
s.serverSideCopies += 1
|
||||
s.serverSideCopyBytes += n
|
||||
s.mu.Unlock()
|
||||
}
|
||||
|
||||
@@ -97,10 +97,6 @@ Returns the following values:
|
||||
"lastError": last error string,
|
||||
"renames" : number of files renamed,
|
||||
"retryError": boolean showing whether there has been at least one non-NoRetryError,
|
||||
"serverSideCopies": number of server side copies done,
|
||||
"serverSideCopyBytes": number bytes server side copied,
|
||||
"serverSideMoves": number of server side moves done,
|
||||
"serverSideMoveBytes": number bytes server side moved,
|
||||
"speed": average speed in bytes per second since start of the group,
|
||||
"totalBytes": total number of bytes in the group,
|
||||
"totalChecks": total number of checks in the group,
|
||||
|
||||
@@ -392,7 +392,7 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
|
||||
}
|
||||
if doCopy := f.Features().Copy; doCopy != nil && (SameConfig(src.Fs(), f) || (SameRemoteType(src.Fs(), f) && (f.Features().ServerSideAcrossConfigs || ci.ServerSideAcrossConfigs))) {
|
||||
in := tr.Account(ctx, nil) // account the transfer
|
||||
in.ServerSideTransferStart()
|
||||
in.ServerSideCopyStart()
|
||||
newDst, err = doCopy(ctx, src, remote)
|
||||
if err == nil {
|
||||
dst = newDst
|
||||
@@ -639,7 +639,7 @@ func Move(ctx context.Context, fdst fs.Fs, dst fs.Object, remote string, src fs.
|
||||
}
|
||||
// Move dst <- src
|
||||
in := tr.Account(ctx, nil) // account the transfer
|
||||
in.ServerSideTransferStart()
|
||||
in.ServerSideCopyStart()
|
||||
newDst, err = doMove(ctx, src, remote)
|
||||
switch err {
|
||||
case nil:
|
||||
@@ -648,7 +648,7 @@ func Move(ctx context.Context, fdst fs.Fs, dst fs.Object, remote string, src fs.
|
||||
} else {
|
||||
fs.Infof(src, "Moved (server-side)")
|
||||
}
|
||||
in.ServerSideMoveEnd(newDst.Size()) // account the bytes for the server-side transfer
|
||||
in.ServerSideCopyEnd(newDst.Size()) // account the bytes for the server-side transfer
|
||||
_ = in.Close()
|
||||
return newDst, nil
|
||||
case fs.ErrorCantMove:
|
||||
|
||||
10
go.mod
10
go.mod
@@ -28,8 +28,8 @@ require (
|
||||
github.com/go-chi/chi/v5 v5.0.10
|
||||
github.com/google/uuid v1.3.0
|
||||
github.com/hanwen/go-fuse/v2 v2.3.0
|
||||
github.com/henrybear327/Proton-API-Bridge v0.0.0-20230725204219-611ec433f83c
|
||||
github.com/henrybear327/go-proton-api v0.0.0-20230725203741-316f1b3227a9
|
||||
github.com/henrybear327/Proton-API-Bridge v0.0.0-20230802163840-e054c27a8f64
|
||||
github.com/henrybear327/go-proton-api v0.0.0-20230802163738-2539e3d6e690
|
||||
github.com/hirochachacha/go-smb2 v1.1.0
|
||||
github.com/iguanesolutions/go-systemd/v5 v5.1.1
|
||||
github.com/jcmturner/gokrb5/v8 v8.4.4
|
||||
@@ -66,7 +66,7 @@ require (
|
||||
go.etcd.io/bbolt v1.3.7
|
||||
goftp.io/server v1.0.0-rc1
|
||||
golang.org/x/crypto v0.11.0
|
||||
golang.org/x/net v0.12.0
|
||||
golang.org/x/net v0.13.0
|
||||
golang.org/x/oauth2 v0.10.0
|
||||
golang.org/x/sync v0.3.0
|
||||
golang.org/x/sys v0.10.0
|
||||
@@ -83,7 +83,7 @@ require (
|
||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
|
||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect
|
||||
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf // indirect
|
||||
github.com/ProtonMail/gluon v0.17.0 // indirect
|
||||
github.com/ProtonMail/gluon v0.17.1-0.20230724134000-308be39be96e // indirect
|
||||
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect
|
||||
github.com/ProtonMail/go-srp v0.0.7 // indirect
|
||||
github.com/ProtonMail/gopenpgp/v2 v2.7.2 // indirect
|
||||
@@ -151,7 +151,7 @@ require (
|
||||
github.com/zeebo/blake3 v0.2.3 // indirect
|
||||
github.com/zeebo/errs v1.3.0 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 // indirect
|
||||
golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230720185612-659f7aaaa771 // indirect
|
||||
google.golang.org/grpc v1.56.2 // indirect
|
||||
|
||||
28
go.sum
28
go.sum
@@ -1,7 +1,5 @@
|
||||
bazil.org/fuse v0.0.0-20221209211307-2abb8038c751 h1:WDXfyDLJ+tg8PYC6yIkOmc/RWFrqMgxk1rLpRrlR8Ng=
|
||||
bazil.org/fuse v0.0.0-20221209211307-2abb8038c751/go.mod h1:eX+feLR06AMFrTGQBzFnMMDz1vjBv2yHZBFlI9RJeaQ=
|
||||
bazil.org/fuse v0.0.0-20230120002735-62a210ff1fd5 h1:A0NsYy4lDBZAC6QiYeJ4N+XuHIKBpyhAVRMHRQZKTeQ=
|
||||
bazil.org/fuse v0.0.0-20230120002735-62a210ff1fd5/go.mod h1:gG3RZAMXCa/OTes6rr9EwusmR1OH1tDDy+cg9c5YliY=
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
||||
@@ -62,8 +60,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v
|
||||
github.com/ProtonMail/bcrypt v0.0.0-20210511135022-227b4adcab57/go.mod h1:HecWFHognK8GfRDGnFQbW/LiV7A3MX3gZVs45vk5h8I=
|
||||
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf h1:yc9daCCYUefEs69zUkSzubzjBbL+cmOXgnmt9Fyd9ug=
|
||||
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf/go.mod h1:o0ESU9p83twszAU8LBeJKFAAMX14tISa0yk4Oo5TOqo=
|
||||
github.com/ProtonMail/gluon v0.17.0 h1:QfMRUcXd47MANHmoerj1ZHXsNzfW9gjsLmF+7Dim5ZU=
|
||||
github.com/ProtonMail/gluon v0.17.0/go.mod h1:Og5/Dz1MiGpCJn51XujZwxiLG7WzvvjE5PRpZBQmAHo=
|
||||
github.com/ProtonMail/gluon v0.17.1-0.20230724134000-308be39be96e h1:lCsqUUACrcMC83lg5rTo9Y0PnPItE61JSfvMyIcANwk=
|
||||
github.com/ProtonMail/gluon v0.17.1-0.20230724134000-308be39be96e/go.mod h1:Og5/Dz1MiGpCJn51XujZwxiLG7WzvvjE5PRpZBQmAHo=
|
||||
github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE=
|
||||
github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwCL+mmXnjLWEAOYO+2l2AE4YMmqG1ZpZHBs=
|
||||
github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
|
||||
@@ -297,10 +295,10 @@ github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/C
|
||||
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/henrybear327/Proton-API-Bridge v0.0.0-20230725204219-611ec433f83c h1:dtM2iOEwFBbpV7jSAZ+EHL4LUWhm2rsofkZhFzTL2jM=
|
||||
github.com/henrybear327/Proton-API-Bridge v0.0.0-20230725204219-611ec433f83c/go.mod h1:iY633SZMUnQE1PCV7gBU7u+35TCDVkEqA0IhHHyBdOg=
|
||||
github.com/henrybear327/go-proton-api v0.0.0-20230725203741-316f1b3227a9 h1:ITuA1x2yBCE4Wgae+ywZmezVuKOKhJ4nuDtColKE32c=
|
||||
github.com/henrybear327/go-proton-api v0.0.0-20230725203741-316f1b3227a9/go.mod h1:eHoT/G3lmdatxoY04LSQthG/YnPmu4aebNZe8h+yvBc=
|
||||
github.com/henrybear327/Proton-API-Bridge v0.0.0-20230802163840-e054c27a8f64 h1:4e2+OI11mLq6XCzGvWcUKCoxgZZhWItLZI1qvIwGhD8=
|
||||
github.com/henrybear327/Proton-API-Bridge v0.0.0-20230802163840-e054c27a8f64/go.mod h1:ZkRlm86TtjTcLoafz4AwFNBE0CrXpw6EkKBQhZMjyIs=
|
||||
github.com/henrybear327/go-proton-api v0.0.0-20230802163738-2539e3d6e690 h1:AW2p1djlmA2S7ss6hVj+TcEwtKdIOphFL4SpaOVHwfE=
|
||||
github.com/henrybear327/go-proton-api v0.0.0-20230802163738-2539e3d6e690/go.mod h1:w63MZuzufKcIZ93pwRgiOtxMXYafI8H74D77AxytOBc=
|
||||
github.com/hirochachacha/go-smb2 v1.1.0 h1:b6hs9qKIql9eVXAiN0M2wSFY5xnhbHAQoCwRKbaRTZI=
|
||||
github.com/hirochachacha/go-smb2 v1.1.0/go.mod h1:8F1A4d5EZzrGu5R7PU163UcMRDJQl4FtcxjBfsY8TZE=
|
||||
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
|
||||
@@ -421,8 +419,6 @@ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI=
|
||||
github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk=
|
||||
github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
|
||||
github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
|
||||
github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
|
||||
@@ -430,10 +426,6 @@ github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI
|
||||
github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc=
|
||||
github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI=
|
||||
github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
|
||||
github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg=
|
||||
github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM=
|
||||
github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
|
||||
github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
|
||||
github.com/putdotio/go-putio/putio v0.0.0-20200123120452-16d982cac2b8 h1:Y258uzXU/potCYnQd1r6wlAnoMB68BiCkCcCnKx1SH8=
|
||||
github.com/putdotio/go-putio/putio v0.0.0-20200123120452-16d982cac2b8/go.mod h1:bSJjRokAHHOhA+XFxplld8w2R/dXLH7Z3BZ532vhFwU=
|
||||
github.com/rclone/ftp v0.0.0-20230327202000-dadc1f64e87d h1:ZyH6ZfA/PzxF4qQS2MgFLXRdw/pWOSNJA7Lq0pkX49Y=
|
||||
@@ -576,8 +568,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
||||
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
||||
golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 h1:Di6/M8l0O2lCLc6VVRWhgCiApHV8MnQurBnFSHsQtNY=
|
||||
golang.org/x/exp v0.0.0-20230725093048-515e97ebf090/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
|
||||
golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b h1:r+vk0EmXNmekl0S0BascoeeoHk/L7wmaW2QF90K+kYI=
|
||||
golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
|
||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
@@ -644,8 +636,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
|
||||
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
|
||||
golang.org/x/net v0.13.0 h1:Nvo8UFsZ8X3BhAC9699Z1j7XQ3rsZnUUm7jfBEk1ueY=
|
||||
golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
||||
Reference in New Issue
Block a user