summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Shadura <andrewsh@debian.org>2016-07-19 11:12:41 +0200
committerAndrew Shadura <andrewsh@debian.org>2016-07-19 11:12:41 +0200
commit2040e3232f6d2283ba8ac24e8785b055a8c89796 (patch)
tree0cff1863269b44d1c268bc95a8a31a972e7dd280
parentdc07d8fbc513a49101e53e57a98906d7e07092a7 (diff)
Imported Upstream version 0.4.2
-rw-r--r--.travis.yml117
-rw-r--r--CHANGELOG.md5
-rw-r--r--README.md2
-rw-r--r--VERSION2
-rw-r--r--docs/CMakeLists.txt29
-rw-r--r--docs/graphics.pdfbin368598 -> 0 bytes
-rw-r--r--docs/graphics.vsdxbin110408 -> 0 bytes
-rwxr-xr-xdocs/nfstrace_manual.docxbin271106 -> 0 bytes
-rw-r--r--docs/nfstrace_manual.pdfbin707110 -> 377098 bytes
-rw-r--r--docs/nfstrace_manual.tex626
-rwxr-xr-xdocs/nfstrace_manual_includes/breakdown_output.txt67
-rwxr-xr-xdocs/nfstrace_manual_includes/libwatch_output.txt29
-rwxr-xr-xdocs/nfstrace_manual_includes/telnet_output.txt9
-rwxr-xr-xdocs/pictures/allocator-queue.svg1050
-rwxr-xr-xdocs/pictures/epam-logo.pngbin0 -> 1623 bytes
-rwxr-xr-xdocs/pictures/epam-logo.svg46
-rwxr-xr-xdocs/pictures/general-structure.pngbin0 -> 75539 bytes
-rwxr-xr-xdocs/pictures/general-structure.svg876
-rwxr-xr-x[-rw-r--r--]docs/pictures/logo.png (renamed from docs/logo.png)bin25537 -> 25537 bytes
-rwxr-xr-x[-rw-r--r--]docs/pictures/logo64.png (renamed from docs/logo64.png)bin2078 -> 2078 bytes
-rwxr-xr-xdocs/pictures/metrics.svg297
-rwxr-xr-xdocs/pictures/session-visualization.pngbin0 -> 95322 bytes
22 files changed, 3107 insertions, 48 deletions
diff --git a/.travis.yml b/.travis.yml
index 4ae5fcb..c55db71 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,57 +1,94 @@
+sudo: false
language: cpp
-compiler:
- - gcc
- #- clang
+addons:
+ apt:
+ packages:
+ - ccache
+cache:
+ apt: true
+ directories:
+ - ccache
+ - $HOME/.ccache
+ - $DEPS_DIR
+
+env:
+ global:
+ - DEPS_DIR="$HOME/install"
+ - CMAKE_DIR="$DEPS_DIR/cmake-3.3.2-Linux-x86_64"
+ - CMAKE="$CMAKE_DIR/bin/cmake"
+ - JSON_DIR="$DEPS_DIR/json-c-0.11"
+ - JSON_LIB="$JSON_DIR/install"
+ - JSON_INCLUDE_DIR="$JSON_DIR"
+ - LCOV_DIR="$DEPS_DIR/lcov-1.11"
+ - LCOV="$LCOV_DIR/bin/lcov"
+ - GMOCK_DIR="$DEPS_DIR/gmock-1.7.0"
+
+matrix:
+ include:
+ - os: linux
+ compiler: gcc-4.9
+ addons:
+ apt:
+ sources: ['ubuntu-toolchain-r-test']
+ packages: ['texlive-latex-base','gcc-4.9','g++-4.9','libpcap-dev','valgrind']
+ env:
+ # You can not set CXX directly as Travis CI will overwrite it. You need an intermediate variable like COMPILER
+ - COMPILER=g++-4.9 CXX_FLAGS="-g -O0 -fprofile-arcs -ftest-coverage -fPIC" C_FLAGS="-g -O0 -fprofile-arcs -ftest-coverage" gcov="/usr/bin/gcov-4.9"
+ fast_finish: true
before_install:
- uname -a
- pwd
- export
- - sudo pip install codecov
- - sudo pip install --user cpp-coveralls
- - sudo apt-add-repository -y ppa:ubuntu-toolchain-r/test
- - sudo apt-get install software-properties-common
- #- sudo add-apt-repository -y ppa:george-edison55/cmake-3.x
- - sudo apt-add-repository -y ppa:ondrej/php5-5.6 # libjson0-dev 0.11
- - sudo apt-get update -qq
+ - export PATH="$PATH:$JSON_LIB"
+
install:
- - sudo apt-get -y --force-yes install -qq build-essential g++-4.9 gcc-4.9 libpcap-dev valgrind libjson0-dev
- - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
- - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
- - sudo update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-4.9 20
- - sudo update-alternatives --config gcc
- - sudo update-alternatives --config g++
- - sudo update-alternatives --config gcov
- - sudo apt-get install cmake
- - wget -O - --no-check-certificate https://cmake.org/files/v3.3/cmake-3.3.2-Linux-x86_64.tar.gz | tar xz && sudo cp -fR cmake-3.3.2-Linux-x86_64/* /usr
- - wget -q https://googlemock.googlecode.com/files/gmock-1.7.0.zip && unzip gmock-1.7.0.zip -d /tmp
- # install latest LCOV
- - wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz
- - tar xf lcov_1.11.orig.tar.gz
- - sudo make -C lcov-1.11/ install
+ - pip install --user --upgrade cpp-coveralls
- gem install coveralls-lcov
+ - |
+ if [ ! -f "$CMAKE" ]; then
+ wget -O - --no-check-certificate https://cmake.org/files/v3.3/cmake-3.3.2-Linux-x86_64.tar.gz | tar xz && cp -r cmake-3.3.2-Linux-x86_64 $DEPS_DIR
+ else
+ echo "Using cached cmake"
+ fi
+ - |
+ if [ ! -f "$GMOCK_DIR/CMakeLists.txt" ]; then
+ wget -q https://googlemock.googlecode.com/files/gmock-1.7.0.zip && unzip gmock-1.7.0.zip -d $DEPS_DIR
+ else
+ echo "Using cached gmock"
+ fi
+
+ # installing libjson-c from source because #'ondrej/php5-5.6' is disallowed source in travis-ci
+ - |
+ if [ ! -f "$JSON_DIR/configure" ]; then
+ wget -O - --no-check-certificate https://s3.amazonaws.com/json-c_releases/releases/json-c-0.11.tar.gz | tar xz && cp -r json-c-0.11 $DEPS_DIR && (cd $JSON_DIR && mkdir -p $JSON_LIB && sh ./autogen.sh && ./configure --prefix=$JSON_LIB && make install)
+ else
+ echo "Using cached json"
+ fi
+
+ - |
+ if [ ! -f "$LCOV" ]; then
+ wget -O - --no-check-certificate http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz | tar xz && cp -r lcov-1.11 $DEPS_DIR
+ make -C $LCOV_DIR
+ else
+ echo "Using cached lcov"
+ fi
before_script:
- - cmake --version
+ - $CMAKE --version
- gcov --version
- - if [ $CXX == 'g++' ];
- then
- export CXX="g++-4.9";
- export CC="gcc-4.9";
- export CXX_FLAGS="-g -O0 -fprofile-arcs -ftest-coverage -fPIC";
- export C_FLAGS="-g -O0 -fprofile-arcs -ftest-coverage";
- fi
- - lcov --directory . --zerocounters
+ - $LCOV --gcov-tool "/usr/bin/gcov-4.9" --directory . --zerocounters
script:
- mkdir debug && cd debug
- - cmake -DCMAKE_BUILD_TYPE=DEBUG -DGMOCK_SOURCE_DIR=/tmp/gmock-1.7.0 -D"CMAKE_CXX_FLAGS=$CXX_FLAGS" -D"CMAKE_C_FLAGS=$C_FLAGS" -DINCLUDE_COVERAGE_INFO="true" ../
- - sudo make install
+ - $CMAKE -DCMAKE_CXX_COMPILER="$COMPILER" -DCMAKE_BUILD_TYPE=DEBUG -DGMOCK_SOURCE_DIR=$GMOCK_DIR -D"CMAKE_CXX_FLAGS=$CXX_FLAGS" -DCMAKE_C_FLAGS="$C_FLAGS" -DINCLUDE_COVERAGE_INFO="true" ../
+ - make
- make test
- #- cpack -G DEB
+ - make documentation-pdflatex
+ - ccache -s
-after_success:
- - lcov --compat-libtool --directory . --capture --output-file coverage.info # capture coverage info
- - lcov --remove coverage.info 'tests/*' '/usr/*' '*gmock*' --output-file coverage.info # filter out system and test code
- #- lcov --list coverage.info # debug before upload
+after_success:
+ - $LCOV --gcov-tool "/usr/bin/gcov-4.9" --compat-libtool --directory . --capture --output-file coverage.info # capture coverage info
+ - $LCOV --gcov-tool "/usr/bin/gcov-4.9" --remove coverage.info 'tests/*' '/usr/*' '*gmock*' --output-file coverage.info # filter out system and test code
- coveralls-lcov coverage.info
+ # - coveralls --gcov "$(which "${GCOV}")" --encoding iso-8859-1 || echo 'coveralls upload failed.'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6d7899d..eb1ec08 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+0.4.1
+=====
+- minor bug fixes for Debian platforms;
+- add travis-ci and coveralls.io integration with github.com repo.
+
0.4.0
=====
- new libwatch plugin that outputs statistics to terminal via ncurses;
diff --git a/README.md b/README.md
index 38fe471..82b02f9 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
[![Issues](https://img.shields.io/github/issues/epam/nfstrace.svg)](https://github.com/epam/nfstrace/issues?q=is%3Aopen+is%3Aissue)
[![Build Status](https://img.shields.io/travis/epam/nfstrace/master.svg)](https://travis-ci.org/epam/nfstrace)
[![Coverage Status](http://img.shields.io/coveralls/epam/nfstrace/master.svg)](https://coveralls.io/r/epam/nfstrace?branch=master)
-NFSTRACE ![NFSTRACE Logo](docs/logo64.png "Logo")
+NFSTRACE ![NFSTRACE Logo](docs/pictures/logo64.png "Logo")
========
`nfstrace` is an NFS and CIFS tracing/monitoring/capturing/analyzing tool.
diff --git a/VERSION b/VERSION
index 1d0ba9e..2b7c5ae 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.4.0
+0.4.2
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
index 5b119bd..bf540f8 100644
--- a/docs/CMakeLists.txt
+++ b/docs/CMakeLists.txt
@@ -1,11 +1,28 @@
add_custom_target (documentation)
-find_program (DOXYGEN_PATH doxygen)
-if (DOXYGEN_PATH)
+find_package (Doxygen)
+if (DOXYGEN_FOUND)
add_custom_target (documentation-doxygen
- COMMAND ${DOXYGEN_PATH} Doxyfile
+ COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_dependencies (documentation documentation-doxygen)
-else ()
- message (WARNING "Doxygen is not found - source-code documentation is not available")
-endif () \ No newline at end of file
+endif ()
+
+find_package (LATEX COMPONENTS PDFLATEX)
+file (GLOB_RECURSE TEXS "*.tex")
+if (TEXS AND LATEX_PDFLATEX_FOUND)
+ foreach (tex ${TEXS})
+ get_filename_component (name ${tex} NAME_WE)
+ set (pdf "${name}.pdf")
+ list (APPEND PDFS ${pdf})
+ set(args ${tex} -quiet -interaction=nonstopmode -halt-on-error -disable-installer -aux-directory=${CMAKE_CURRENT_BINARY_DIR})
+ add_custom_command (OUTPUT ${pdf}
+ COMMAND ${PDFLATEX_COMPILER} ${args}
+ COMMAND ${PDFLATEX_COMPILER} ${args}
+ DEPENDS ${tex}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMENT "Converting ${tex} to ${pdf}" VERBATIM)
+ endforeach ()
+ add_custom_target (documentation-pdflatex DEPENDS ${PDFS} SOURCES ${TEXS})
+ add_dependencies (documentation documentation-pdflatex)
+endif ()
diff --git a/docs/graphics.pdf b/docs/graphics.pdf
deleted file mode 100644
index a1bb237..0000000
--- a/docs/graphics.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/graphics.vsdx b/docs/graphics.vsdx
deleted file mode 100644
index f07dcea..0000000
--- a/docs/graphics.vsdx
+++ /dev/null
Binary files differ
diff --git a/docs/nfstrace_manual.docx b/docs/nfstrace_manual.docx
deleted file mode 100755
index 98fbafb..0000000
--- a/docs/nfstrace_manual.docx
+++ /dev/null
Binary files differ
diff --git a/docs/nfstrace_manual.pdf b/docs/nfstrace_manual.pdf
index 75672a6..aa408dd 100644
--- a/docs/nfstrace_manual.pdf
+++ b/docs/nfstrace_manual.pdf
Binary files differ
diff --git a/docs/nfstrace_manual.tex b/docs/nfstrace_manual.tex
new file mode 100644
index 0000000..11a3b58
--- /dev/null
+++ b/docs/nfstrace_manual.tex
@@ -0,0 +1,626 @@
+\documentclass[oneside]{article}
+
+% packages
+
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{fancyhdr}
+\usepackage{verbatim}
+\usepackage{tabularx}
+\usepackage{array}
+\usepackage[
+ left=0.80in,
+ right=0.80in,
+ top=1.0in,
+ bottom=1.0in,
+ paperheight=11in,
+ paperwidth=8.5in
+]{geometry}%
+\usepackage{alltt}
+
+\geometry{a4paper}
+
+{\hyphenpenalty 10000}
+\setlength{\parindent}{1cm} % Default is 15pt.
+
+% new commands
+% redefine itemsize: adds more vertical space between elements
+\let\OLDitemize\itemize
+\renewcommand\itemize{\OLDitemize\addtolength{\itemsep}{10pt}}
+\definecolor{lightblue}{RGB}{12,183,240}
+\definecolor{orange}{RGB}{255,165,0}
+\newcommand*{\includeCodeInsting}[2][]{\VerbatimInput[
+ frame=single,
+ rulecolor=\color{listingframecolor},
+ framesep=4pt,#1]{#2}}
+
+\newcommand{\code}[1]{\texttt{#1}}
+\newcommand{\includetext}[1]{
+\begin{alltt}
+ % \texttt{\fbox{\parbox{\textwidth}{\small{\input{#1}}}}}
+ \small{\input{#1}}
+\end{alltt}
+}
+
+\newcommand{\gls}{}
+
+\newcommand*{\textfile}[1]{\textsf{#1}}
+\newcommand*{\textprog}[1]{\textfile{#1}}
+
+\widowpenalties 1 10000
+\raggedbottom
+
+\pagestyle{fancy}
+\fancyfoot[L]{Nfstrace User and Developer Manual}% \fancyfoot[R]{\thepage}
+\renewcommand{\headrulewidth}{0.4pt}% Default \headrulewidth is 0.4pt
+\renewcommand{\footrulewidth}{0.4pt}% Default \footrulewidth is 0pt
+\rfoot{\today}
+
+% ==============================================================================
+\begin{document}
+%\title{NFTRACE USER AND DEVELOPER MANUAL}
+
+% Title begin
+% (titlepage is needed to display
+% image logo and title on the same page)
+\begin{titlepage}
+
+\newcommand{\HRule}{\rule{\linewidth}{0.5mm}} % Defines a new command for the horizontal lines, change thickness here
+
+\includegraphics[width=2cm]{pictures/epam-logo.png}
+\newline
+\center
+\vspace{3cm}
+\includegraphics[width=5cm]{pictures/logo.png}
+
+\par\vspace{1cm}
+\center
+{\huge NFSTRACE USER AND DEVELOPER MANUAL}\\[0.4cm] % Title of your document
+{\centering {\small Version 0.4.0}}
+\vfill
+\end{titlepage}
+% Title end
+
+%\maketitle
+
+\newpage
+
+\vspace{5mm}
+NFSTRACE User and developer manual
+
+\vspace{5mm}
+EPAM Systems
+
+\vspace{5mm}
+Copyright © 2014, 2015 EPAM Systems
+
+\vspace{5mm} This documentation is free software; you can redistribute it
+and/or modify it under the terms of the GNU General Public License version 2 as
+published by the Free Software Foundation.
+
+\vspace{5mm} This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+more details.
+
+\vspace{5mm} You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+\vspace{5mm} For more details see the file LICENSE in the source of nfstrace.
+
+\vspace{5mm} This manual provides basic instructions on how to use \textprog{nfstrace} to
+monitor \gls{NFS} and \gls{CIFS} activity and how to develop pluggable analysis
+modules.
+
+\newpage
+
+\tableofcontents
+
+\newpage
+
+\section{INTRODUCTION}
+
+\textprog{nfstrace} performs live Ethernet 1 Gbps – 10 Gbps packets capturing and helps to
+determine \gls{NFS} and \gls{CIFS} procedures in raw network traffic.
+Furthermore, it performs filtration, dumping, compression, statistical
+analysis, visualization and provides the API for custom pluggable analysis
+modules.
+
+\textprog{nfstrace} captures raw packets from an Ethernet interface using libpcap
+interface to Linux (\gls{LSF}) or FreeBSD (\gls{BPF}) implementations. At the
+moment it is assumed that libpcap delivers correct TCP and UDP packets.
+Assembling of IP packets from ethernet frames and IP packets defragmentation
+are performed in the operating system's kernel.
+
+The application has been tested on the workstations with integrated 1 Gbps
+\gls{NIC}s (Ethernet 1000baseT/Full).
+
+Currently \textprog{nfstrace} supports the following protocols:
+\begin{alltt}
+Ethernet | IPv4 | IPv6 | UDP | TCP | NFSv3 | NFSv4 | NFSv4.1 | CIFSv1 | CIFSv2
+\end{alltt}
+
+
+\subsection{PORTABILITY}
+
+The application has been developed and tested on GNU/Linux (Fedora 20, OpenSUSE
+13.2, Ubuntu 14.04/14.10, CentOS 7, Arch Linux, Alt Linux 7.0.5) and FreeBSD
+(FreeBSD 10.1). It is written in C++11 programming language and uses standard
+\gls{POSIX} interfaces and the following libraries: libpthread, libpcap,
+libstdc++.
+
+\section{USAGE}
+\subsection{OPTIONS}
+%\setlength\extrarowheight{3pt}
+\begin{tabularx}{\linewidth}{ r X }
+\textprog{-m}, & \code{--mode=live|dump|drain|stat} \\
+ & Set the running mode (see the description below) (default: live).\\
+\textprog{-i}, & \code{--interface=INTERFACE}\\
+& Listen interface, it is required for live and dump modes (default: searches
+for the lowest numbered, configured up interface (except loopback)).\\
+\textprog{-f}, & \code{--filtration="filter"}\\
+ & Specify the packet filter in \gls{BPF} syntax; for the expression syntax, see
+pcapfilter(7) (default: "\code{port 2049 or port 445}").\\
+\textprog{-s}, & \code{--snaplen=1..65535}\\
+& Set the max length of captured raw packet (bigger packets will be truncated).
+Can be used only for UDP (default: 65535).\\
+\textprog{-t}, & \code{--timeout=milliseconds}\\
+& Set the read timeout that will be used while capturing (default: 100).\\
+\textprog{-b}, & \code{--bsize=MBytes}\\
+& Set the size of the operating system capture buffer in MBytes; note that this
+option is crucial for capturing performance (default: 20).\\
+\textprog{-p}, & \code{--promisc}\\
+& Put the capturing interface into promiscuous mode (default: true).\\
+\textprog{-d}, & \code{--direction=in|out|inout}\\
+& Set the direction for which packets will be captured (default: inout).\\
+\textprog{-a}, & \code{--analysis=PATH\#opt1,opt2=val,...}\\
+& Specify the path to an analysis module and set its options (if any).\\
+\textprog{-I}, & \code{--ifile=PATH}\\
+& Specify the input file for stat mode, '-' means stdin (default:
+nfstrace\{filter\}.pcap).\\
+\textprog{-O}, & \code{--ofile=PATH}\\
+& Specify the output file for dump mode, '-' means stdout (default:
+nfstrace-\{filter\}.pcap).\\
+\textprog{--log}, & --log=PATH\\ & Specify the log file (default: nfstrace.log).\\
+\textprog{-C}, & \code{--command="shell command"} \\
+& Execute command for each dumped file.\\
+\textprog{-D}, & \code{--dump-size=MBytes}\\
+& Set the size of dumping file portion, 0 means no limit (default: 0).\\
+\textprog{-E}, & \code{--enum=interfaces|plugins|-}\\
+& Enumerate all available network interfaces and and/or all available plugins,
+then exit; please note that interfaces can't be listed unless \textprog{nfstrace} was
+built against the recent version of libpcap that supports the
+pcap\_findalldevs() function (default: none).\\
+\textprog{-M}, &
+\textprog{--msg-header=1..4000}\\
+& Truncate RPC messages to this limit (specified in bytes) before passing to a
+pluggable analysis module (default: 512).\\
+\textprog{-Q}, & \code{--qcapacity=1..65535}\\
+& Set the initial capacity of the queue with RPC messages (default: 4096).\\
+\textprog{-T}, & \code{--trace}\\
+& Print collected NFSv3/NFSv4/NFSv4.1/CIFSv2 procedures, true if no modules were
+passed with -a option.\\
+\textprog{-Z}, & \code{--droproot=username}\\
+& Drop root privileges after opening the capture device.\\
+\textprog{-v}, & \code{--verbose=0|1|2}\\
+& Specify verbosity level (default: 1).\\
+\textprog{-h}, & \code{--help}\\
+& Print help message and usage for modules passed with -a option, then exit.\\
+\end{tabularx}
+
+\subsection{RUNNING MODES}
+
+\begin{minipage}[t]{\linewidth}
+\textprog{nfstrace} can operate in four different modes:
+\vspace{5mm}
+\begin{itemize}
+\item online analysis (\textprog{--mode=live}): performs online capturing,
+ filtration and live analysis of detected NFS/CIFS procedures using a
+ pluggable analysis module or prints out them to stdout (\code{-T} or
+ \code{--trace} options); \item online dumping (\textprog{--mode=dump}):
+ performs online traffic capturing, filtration and dumping to the output
+ file (specified with \code{-O} or \code{--ofile} options);
+\item offline analysis (\textprog{--mode=stat}):
+ performs offline filtration of the .pcap that contains previously captured
+ traces and performs analysis using a pluggable analysis module or prints
+ found NFS/CIFS procedures to stdout (\code{-T} or \code{–trace} options);
+\item offline dumping (\textprog{--mode=drain}): performs a reading of traffic
+ from the .pcap file (specified with \code{-I} or \code{--ifile} options),
+ filtration, dumping to the output .pcap file (specified with \code{-O} or
+ \code{--ofile} options) and removing all the packets that are not related
+ to NFS/CIFS procedures. \end{itemize}
+\end{minipage}
+
+\subsection{PACKETS FILTRATION}
+
+Internally \textprog{nfstrace} uses libpcap that provides a portable interface to
+the native system API for capturing network traffic. By so doing, filtration is
+performed in the operating system's kernel. \textprog{nfstrace} provides a special option
+(\code{-f} or \code{–-filtration}) for specifying custom filters in \gls{BPF} syntax.
+
+The default \gls{BPF} filter in \textprog{nfstrace} is \textprog{port 2049 or port
+445}, which means that each packet that is delivered to user-space from the
+kernel satisfies the following conditions: it has IPv4 or IPv6 header and it
+has TCP and UDP header with source or destination port number equals to 2049
+(default NFS port) or 445 (default \gls{CIFS} port).
+
+The reality is that this filter is very heavy and support of IPv6 is
+experimental, so if you want to reach faster filtration of IPv4-only traffic we
+suggest to use the following \gls{BPF} filter: \textprog{ip and port 2049 or port
+445}.
+
+\subsection{DUMP FILE FORMAT}
+\label{sec:dumpfileformat}
+
+\textprog{nfstrace} uses libpcap file format for input and output files so any
+external tool (e.g. \gls{Wireshark}) can be used in order to inspect filtered
+traces.
+
+\subsection{USAGE EXAMPLES}
+
+In this sections some use cases will be explained. Every next example inherit
+something from the previous ones, so we suggest to read all of them from the
+beginning.
+
+\subsubsection{AVAILABLE OPTIONS}
+
+The following command demonstrates available options of the application and
+plugged analysis modules (attached with \code{--analysis} or \code{-a} options). Note that
+you can pass more than one module here.
+\begin{alltt}
+nfstrace –-help --analysis=libjson.so
+\end{alltt}
+
+\subsubsection{ONLINE TRACING}
+
+The following command will run \textprog{nfstrace} in online analysis mode (specified with
+\code{--mode} or \code{-m} options) without a pluggable analysis module. It will capture
+\gls{NFS} traffic transferred over TCP or UDP with source or destination port
+number equals to 2049 and will simply print them out to stdout (\code{-T} or \code{--trace}
+options). Capturing is over when \textprog{nfstrace} receives \textprog{SIGINT} (Control-C). Note
+that capturing from network interface requires superuser privileges.
+
+\begin{alltt}
+nfstrace -–mode=live --filtration="ip and port 2049" -T
+\end{alltt}
+
+\subsubsection{ONLINE ANALYSIS}
+
+The following command demonstrates running \textprog{nfstrace} in online analysis mode.
+Just like in the previous example it will capture \gls{NFS} traffic transferred
+over TCP or UDP with source or destination port number equals to 2049 and then
+it will perform Operation Breakdown analysis using pluggable analysis module
+\code{libbreakdown.so}.
+\begin{alltt}
+nfstrace –-mode=live -–filtration=”ip and port 2049” --analysis=libbreakdown.so
+\end{alltt}
+
+\subsubsection{ONLINE DUMPING AND OFFLINE ANALYSIS}
+
+The following example demonstrates running \textprog{nfstrace} in online
+dumping and offline analysis modes. At first \textprog{nfstrace} will capture
+\gls{NFS} traffic transferred over TCP or UDP with source or destination port
+number equals to 2049 and will dump captured packets to \code{dump.pcap} file
+(specified with \code{--ofile} or \code{-O} options). At the second run
+\textprog{nfstrace} will perform offline Operation Breakdown analysis using
+pluggable analysis module \code{libbreakdown.so}.
+\begin{alltt}
+\# Dump captured packets to dump.pcap
+nfstrace --mode=dump
+ --filtration="ip and port 2049"
+ -O dump.pcap
+\# Analyse dump.pcap using libbreakdown.so
+nfstrace --mode=stat
+ -I dump.pcap
+ --analysis=libbreakdown.so
+\end{alltt}
+
+\subsubsection{ONLINE DUMPING, COMPRESSION AND OFFLINE ANALYSIS}
+
+The following example demonstrates running \textprog{nfstrace} in online dumping and
+offline analysis modes. Since dump file can easily exhaust disk space,
+compression makes sense.
+
+At first \textprog{nfstrace} will capture \gls{NFS} traffic transferred over TCP or UDP
+with source or destination port number equals to 2049 and will dump captured
+packets to \code{dump.pcap} file.
+
+Note that compression is done by the external tool (executed in script passed
+with \code{--command} or \code{-C} options) and it will be executed when
+capturing is done. The output file can be inspected using some external tool
+as described in \ref{sec:dumpfileformat}.
+
+At the second run \textprog{nfstrace} will perform offline analysis. Again, the external
+tool (bzcat in this example) is used in order to decompress previously saved
+dump.
+\textprog{nfstrace} will read \code{stdin} (note the \code{-I -} option) and perform offline
+analysis using Operation Breakdown analyzer.
+
+\begin{alltt}
+\# Dump captured procedures to dump.pcap file.
+\# Compress output using bzip2 when capturing is over.
+nfstrace --mode=dump
+ --filtration="ip and port 2049"
+ -O dump.pcap
+ -C "bzip2 -f -9"
+\# Extract dump.pcap from dump.pcap.bz2 to stdin.
+\# Read stdin and analyze data with libbreakdown.so module.
+bzcat dump.pcap.bz2 | nfstrace --mode=stat
+ -I -
+ --analysis=libbreakdown.so
+\end{alltt}
+
+\subsubsection{ONLINE DUMPING WITH FILE LIMIT, COMPRESSION AND OFFLINE ANALYSIS}
+
+This example is similar to the previous one except one thing: output dump file
+can be very huge and cause problems in some situations, so \textprog{nfstrace} provides
+the ability to split it into parts.
+
+At first \textprog{nfstrace} will be invoked in online dumping mode. Everything is similar
+to the previous example except \code{-D} (\code{--dump-size}) option: it specifies the size
+limit in MBytes, so dump file will be split according to this value.
+
+At the second run \textprog{nfstrace} will perform offline analysis of captured packets
+using Operation Breakdown analyzer.
+
+Please note that only the first dump file has the pcap header.
+
+\begin{alltt}
+\# Dump captured procedures to the multiple files and compress them.
+nfstrace --mode=dump --filtration="ip and port 2049" -O dump.pcap -D 1 -C "bzip2 -f -9"
+
+\# get list of parts in the right order:
+\# dump.pcap.bz2
+\# dump.pcap-1.bz2
+parts=\$(ls dump.pcap*.bz2 | sort -n -t - -k 2)
+\# Extract main dump.pcap and parts from dump.pcap.bz2 to stdin.
+\# Read stdin and analyze data with libbreakdown.so module.
+bzcat “\$parts” | nfstrace --mode=stat
+-I -
+--analysis=libbreakdown.so
+\end{alltt}
+
+\subsubsection{VISUALIZATION}
+\label{sec:visualization}
+
+This example demonstrates the ability to plot graphical representation of data
+collected by Operation Breakdown analyzer.
+
+\code{nst.sh} is a shell script that collects data generated by analyzers and
+passes it to \gls{Gnuplot} script specified with -a option.
+
+\code{breakdown\_nfsv3.plt} and \code{breakdown\_nfsv4.plt} are a \gls{Gnuplot}
+scripts that understand output data format of Operation Breakdown analyzer and
+generate .png files with plots. Note that \gls{Gnuplot} must be installed.
+
+\begin{minipage}[t]{\linewidth}
+\begin{alltt}
+\# Extract dump.pcap from dump.pcap.bz2 to stdin.
+\# Read stdin and analyze data with libbreakdown.so module.
+bzcat trace.pcap.bz2 | nfstrace -m stat -I - -a libbreakdown.so
+
+\# Generate plot according to *.dat files generated by
+\# libbreakdown.so analyzer.
+nst.sh -a breakdown.plt -d . -p 'breakdown*.dat' -v
+\end{alltt}
+\end{minipage}
+
+\section{ANALYZERS}
+
+All pluggable modules are implemented as external shared libraries.
+
+\subsection{OPERATION BREAKDOWN ANALYZER (LIBBREAKDOWN.SO)}
+
+Operation Breakdown (OB) analyzer calculates average frequency of NFS/CIFS
+procedures and computes standard deviation of latency.
+
+\begin{alltt}
+\$ nfstrace -a libbreakdown.so –h
+nfstrace 0.4.0 (Release) built on Linux-3.16.1-1-generic by C++ compiler GNU 4.9.1
+Usage: ./nfstrace [OPTIONS]...
+\end{alltt}
+And the result of execution will look something like this:
+%\includetextListing{nfstrace_manual_includes/breakdown_output.txt}
+\includetext{nfstrace_manual_includes/breakdown_output.txt}
+
+%\begin{CodeListing}
+%\end{CodeListing}
+OB analyzer produces \code{.dat} file in the current directory for each detected
+NFS/CIFS session:
+\begin{alltt}
+\$ ls -a *.dat breakdown\_10.6.137.79:949 --> 10.6.7.38:2049 [TCP].dat
+\end{alltt}
+As described in \ref{sec:visualization}, produced \code{.dat}
+files can be visualized using \code{nst.sh} and \code{breakdown\_nfsv3.plt} or
+\code{breakdown\_nfsv4.plt} (according to \gls{NFS} version).
+\begin{alltt}
+nst.sh -a breakdown\_nfsv3.plt -d . -f 'breakdown\_10.6.137.79:949 -->
+10.6.7.38:2049 [TCP].dat'
+\end{alltt}
+
+\begin{figure}
+\includegraphics[width=\linewidth]{./pictures/session-visualization.png}
+\caption{Session visualization}
+\label{Session visualization}
+\centering
+\end{figure}
+
+\subsection{WATCH (LIBWATCH.SO)}
+
+Watch plugin mimics old nfswatch utility: it monitors \gls{NFS} and \gls{CIFS}
+traffic and displays it in terminal using \code{ncurses}. It supports NFSv3, NFSv4,
+NFSv4.1, CIFSv1 and CIFSv2.
+
+\begin{minipage}[t]{\linewidth}
+\includetext{nfstrace_manual_includes/libwatch_output.txt}
+\end{minipage}
+
+\vspace{5mm}
+
+By default watch plugin will update its screen every second, you can specify
+another timeout in milliseconds:
+
+\begin{alltt}
+\$ nfstrace -a libwatch.so\#2000
+\end{alltt}
+
+\subsection{JSON ANALYZER (LIBJSON.SO)}
+JSON analyzer calculates a total amount of each supported application protocol
+operation. It accepts TCP-connections on particular TCP-endpoint (host:port),
+sends a respective JSON to the TCP-client and closes connection. Suggested to
+be used in live mode.
+
+Available options:
+
+\begin{minipage}[t]{\linewidth}
+\begin{tabular}{ll}
+\textprog{host=HOSTNAME} &
+Network interface to listen (default: listen all interfaces)\\
+\textprog{port=PORT} &
+IP-port to bind to (default: 8888)\\
+\textprog{workers=WORKERS} &
+Amount of worker threads (default: 10)\\
+\textprog{duration=DURATION} &
+Max serving duration in milliseconds (default: 500)\\
+\textprog{backlog=BACKLOG} &
+Listen backlog (default: 15)\\
+\end{tabular}
+\end{minipage}
+
+In order to try this analyzer out you can start \textprog{nfstrace} in on terminal:
+\begin{alltt}
+\$ nfstrace -i eth0 -a libjson.so\#host=localhost
+\end{alltt}
+And then you can make a TCP-request to \textprog{nfstrace} in another terminal to fetch
+current statistics:
+
+\begin{minipage}[t]{\linewidth}
+\includetext{nfstrace_manual_includes/telnet_output.txt}
+\end{minipage}
+
+\section{IMPLEMENTATION DETAILS}
+
+This section may be interested for the developers who want to contribute or
+implement new pluggable analysis module.
+
+\subsection{PAYLOAD FILTRATION}
+
+Each NFSv3 procedure consists of two RPC messages:
+
+\begin{itemize}
+ \item call – request from client to server;
+ \item reply – reply from server with result of requested procedure.
+\end{itemize}
+\vspace{5mm}
+
+Both RPC messages may contain data useful for analysis. Both RPC messages may
+contain thousands of \gls{Payload} bytes useless for analysis. nfstrace
+captures headers of calls and replies and then matches pairs of them to
+complete \gls{NFS} procedures.
+
+The \code{--snaplen} option sets up the amount of bytes of incoming packet for
+uprising from the kernel to user-space. In case of TCP transport layer this
+option is useless because TCP connection is a bidirectional stream of data
+(instead of UDP that is form of interchange up to 64k datagrams). In case of
+\gls{NFS} over TCP \textprog{nfstrace} captures whole packets and copies them to
+user-space from the kernel for \gls{DPI} and performing \gls{NFS} statistical
+analysis.
+
+Finally, \textprog{nfstrace} filtrates whole \gls{NFS} traffic passed from the kernel to
+user-space and detects RPC/NFS message headers (up to 4 Kbytes) within
+gigabytes of network traffic.
+
+Detected headers are copied into internal buffers (or dumped into a
+\code{.pcap} file) for statistical analysis.
+
+The key principle of the filtration here is \textbf{discard \gls{Payload}
+ASAP}.
+
+Filtration module works in a separate thread and captures packets from network
+interface using libpcap. It matches packets to a related session (TCP or UDP)
+and performs reassembling of TCP flow from a TCP segment of a packet. After
+that the part of a packet will be passed to \code{RPCFiltrator}. In case of NFSv4 the
+whole packet will be passed to \code{RPCFiltrator} because it consists of several
+NFSv4 operations.
+
+There are two \code{RPCFiltrator} in one TCP session. Both of them
+know the state of the current RPC message in related TCP flow. They can detect
+RPC messages and perform actions on a packet: discard it or collect for
+analysis.
+
+The size of the kernel capture buffer can be set with \code{-b} option (in
+MBytes). Note that this option is very crucial for capturing performance.
+
+\gls{wsize} and \gls{rsize} of an \gls{NFS} connection are important for
+filtration and performance analysis too.
+
+\subsection{PLUGGABLE ANALYSIS MODULES}
+
+nfstrace provides C++ api for implementing pluggable analysis modules. Header
+files provide definitions of \code{IAnalyzer} interface, NFS/CIFS data structures and
+functions. The \code{IAnalyzer} interface is a set of NFS/CIFS handlers that will be
+called by \code{Analysis} module for each NFS/CIFS procedure. All constants and
+definitions of types will be included with \code{<nfstrace/api/plugin\_api.h>} header.
+
+A pluggable analysis module must be a dynamically linked shared object and must
+export the following C functions:
+
+\begin{alltt}
+const char* usage (); // return description of expected opts for create(opts)
+IAnalyzer* create (const char* opts); // create and return an instance of an Analyzer
+void destroy (IAnalyzer* instance); // destroy created instance of an Analyzer
+const AnalyzerRequirements* requirements(); // return Analyzer's requirements
+\end{alltt}
+After the declaration of all these function there must be the following macro:
+\begin{alltt}
+NST\_PLUGIN\_ENTRY\_POINTS (\&usage, \&create, \&destroy, \&requirements)
+\end{alltt}
+
+\textprog{usage()} function must return a C-string with module description and
+required parameters for creation of an instance of analyzer, this string will
+be shown in the output of \code{--help} option.
+
+\textprog{IAnalyzer* create(const char* opts)} must create and return an instance
+of the analyzer according to passed options.
+
+\textprog{void destroy(IAnalyzer* instance)} must destroy previously created
+analyzer instance and perform required cleanups (e.g. close connection to a
+database etc.).
+
+\textprog{const AnalyzerRequirements* requirements()} must create and return an
+instance of analyzer requirements. Its silence property is used if exclusive
+control over standard output is required.
+
+All existing analyzers are implemented as pluggable analysis modules and can be
+attached to \textprog{nfstrace} with \code{-a} option.
+
+\subsection{GENERAL SCHEMA}
+
+\begin{minipage}[t]{\linewidth}
+The general schema of \textprog{nfstrace} is presented in the Figure \ref{fig:generalschema}.
+In this schema you can see how data flows in different modes:
+\begin{itemize}
+ \item on-line analysis – \colorbox{green}{green line}
+ \item on-line dumping – \colorbox{yellow}{yellow line}
+ \item off-line dumping – \colorbox{lightblue}{blue line}
+ \item off-line analysis – \colorbox{orange}{orange line}
+\end{itemize}
+\end{minipage}
+
+\newpage
+
+%\begin{sidewaysfigure}
+\begin{figure}
+\includegraphics[width=\linewidth]{./pictures/general-structure.png}
+\caption{General schema}
+\label{General schema}
+\centering
+\label{fig:generalschema}
+\end{figure}
+
+\clearpage
+
+% \printglossaries
+
+\end{document}
diff --git a/docs/nfstrace_manual_includes/breakdown_output.txt b/docs/nfstrace_manual_includes/breakdown_output.txt
new file mode 100755
index 0000000..6516e64
--- /dev/null
+++ b/docs/nfstrace_manual_includes/breakdown_output.txt
@@ -0,0 +1,67 @@
+LLog file: nfstrace.log
+Loading module: 'libbreakdown.so' with args: []
+Read packets from: datalink: EN10MB (Ethernet) version: 2.4
+Note: It's potentially unsafe to run this program as root without dropping root privileges.
+Note: Use -Z username option for dropping root privileges when you run this program as user with root privileges.
+Processing packets. Press CTRL-C to quit and view results.
+Detect session 127.0.0.1:34744 --> 127.0.1.1:2049 [TCP]
+Detect session 127.0.0.1:929 --> 127.0.1.1:2049 [TCP]
+Detect session 127.0.0.1:774 --> 127.0.1.1:2049 [TCP]
+Detect session 127.0.0.1:854 --> 127.0.1.1:2049 [TCP]
+Detect session 10.0.2.15:55529 --> 10.6.208.121:445 [TCP]
+Detect session 10.0.2.15:55530 --> 10.6.208.121:445 [TCP]
+\#\#\# Breakdown analyzer \#\#\#
+CIFS v1 protocol Total operations: 101. Per operation:
+CREATE\_DIRECTORY 0 0.00\%
+DELETE\_DIRECTORY 0 0.00\%
+OPEN 0 0.00\%
+CREATE 0 0.00\% ...complete output has been omitted...
+Per connection info:
+Session: 10.0.2.15:55529 --> 10.6.208.121:445 [TCP] Total operations: 101. Per operation:
+CREATE\_DIRECTORY Count: 0 ( 0.00\%) Min: 0.000 Max: 0.000 Avg: 0.000 StDev:
+0.00000000
+DELETE\_DIRECTORY Count: 0 ( 0.00\%) Min: 0.000 Max: 0.000 Avg: 0.000 StDev:
+0.00000000
+OPEN Count: 0 ( 0.00\%) Min: 0.000 Max: 0.000 Avg: 0.000 StDev:
+0.00000000
+CREATE Count: 0 ( 0.00\%) Min: 0.000 Max: 0.000 Avg: 0.000 StDev:
+0.00000000
+CLOSE Count: 2 ( 1.98\%) Min: 0.001 Max: 0.002 Avg: 0.001 StDev:
+0.00057205
+...complete output has been omitted...
+\#\#\# Breakdown analyzer \#\#\#
+CIFS v2 protocol Total operations: 77. Per operation:
+NEGOTIATE 1 1.30\%
+SESSION SETUP 2 2.60\%
+
+LOGOFF 0 0.00\%
+TREE CONNECT 2 2.60\%
+...complete output has been omitted...
+\#\#\# Breakdown analyzer \#\#\#
+NFS v3 protocol Total operations: 7123. Per operation:
+NULL 2 0.03\%
+GETATTR 47 0.66\%
+SETATTR 5 0.07\%
+LOOKUP 4 0.06\%
+...complete output has been omitted...
+\#\#\# Breakdown analyzer \#\#\#
+NFS v4.0 protocol
+Total procedures: 3264. Per procedure:
+NULL 2 0.06\%
+COMPOUND 3262 99.94\%
+Total operations: 9701. Per operation:
+ILLEGAL 0 0.00\%
+ACCESS 16 0.16\%
+CLOSE 5 0.05\%
+...complete output has been omitted...
+\#\#\# Breakdown analyzer \#\#\#
+NFS v4.1 protocol
+Total procedures: 8127. Per procedure:
+NULL 0 0.00\%
+COMPOUND 8127 100.00\%
+Total operations: 32359. Per operation:
+ILLEGAL 0 0.00\%
+ACCESS 15 0.05\%
+CLOSE 5 0.02\%
+COMMIT 81 0.25\%
+...complete output has been omitted...
diff --git a/docs/nfstrace_manual_includes/libwatch_output.txt b/docs/nfstrace_manual_includes/libwatch_output.txt
new file mode 100755
index 0000000..8d49018
--- /dev/null
+++ b/docs/nfstrace_manual_includes/libwatch_output.txt
@@ -0,0 +1,29 @@
+-------------------------------------------------------------------------------|
+|Nfstrace watch plugin. To scroll press up or down keys. Ctrl + c to exit. |
+|Host name: epbyminw0059.minsk.epam.com |
+|Date: 3.4.2015 Time: 16:57:58 |
+|Elapsed time: 0 days; 0:1:50 times |
+-------------------------------------------------------------------------------¬
+| NFS v3 NFS v4 NFS v41 CIFS v1 < CIFS v2 > |
+| |
+|Total: 182 |
+|NEGOTIATE 3 1.65% |
+|SESSION SETUP 8 4.40% |
+|LOGOFF 1 0.55% |
+|TREE CONNECT 4 2.20% |
+|TREE DISCONNECT 2 1.10% |
+|CREATE 33 18.13% |
+|CLOSE 32 17.58% |
+|FLUSH 0 0.00% |
+|READ 2 1.10% |
+|WRITE 1 0.55% |
+|LOCK 0 0.00% |
+|IOCTL 0 0.00% |
+|CANCEL 0 0.00% |
+|ECHO 50 27.47% |
+|QUERY DIRECTORY 34 18.68% |
+|CHANGE NOTIFY 0 0.00% |
+|QUERY INFO 9 4.95% |
+|SET INFO 3 1.65% |
+|OPLOCK BREAK 0 0.00% |
+L-------------------------------------------------------------------------------
diff --git a/docs/nfstrace_manual_includes/telnet_output.txt b/docs/nfstrace_manual_includes/telnet_output.txt
new file mode 100755
index 0000000..ba42dfb
--- /dev/null
+++ b/docs/nfstrace_manual_includes/telnet_output.txt
@@ -0,0 +1,9 @@
+\$ telnet localhost 8888 Trying 127.0.0.1...
+Connected to localhost.
+Escape character is ’\^\{\}]’.
+\{
+"nfs\_v3":\{ "null":32,
+"getattr":4582, ...
+\},
+"nfs\_v4":\{ ... \}, ...
+\}Connection closed by foreign host.
diff --git a/docs/pictures/allocator-queue.svg b/docs/pictures/allocator-queue.svg
new file mode 100755
index 0000000..240ea07
--- /dev/null
+++ b/docs/pictures/allocator-queue.svg
@@ -0,0 +1,1050 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export allocator-queue.svg BlockAllocator and Queue -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+ xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="11.6929in" height="8.26772in"
+ viewBox="0 0 841.89 595.276" xml:space="preserve" color-interpolation-filters="sRGB" class="st24">
+ <v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
+ <v:userDefs>
+ <v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
+ <v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
+ </v:userDefs>
+ </v:documentProperties>
+
+ <style type="text/css">
+ <![CDATA[
+ .st1 {fill:#ffffff;stroke:#000000;stroke-width:0.25}
+ .st2 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+ .st3 {fill:#ffffff;stroke:#000000;stroke-dasharray:3.75,2.25;stroke-width:0.25}
+ .st4 {visibility:visible}
+ .st5 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+ .st6 {fill:#a5a5a5;stroke:#000000;stroke-width:0.5}
+ .st7 {marker-end:url(#mrkr3-61);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}
+ .st8 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.25773195876289}
+ .st9 {fill:#ffffff;stroke:none;stroke-width:0.25}
+ .st10 {fill:#a5a5a5;stroke:#000000;stroke-width:0.25}
+ .st11 {fill:none;stroke:none;stroke-width:0.25}
+ .st12 {marker-end:url(#mrkr3-213);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st13 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.51020408163265}
+ .st14 {fill:#ffffff;stroke:#000000;stroke-width:0.5}
+ .st15 {fill:none;filter:url(#filter_2)}
+ .st16 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+ .st17 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.00001em;opacity:0.219608}
+ .st18 {font-size:1em}
+ .st19 {fill:none}
+ .st20 {stroke:#c7c8c8;stroke-width:0.25}
+ .st21 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+ .st22 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.22}
+ .st23 {fill:none;stroke:#c7c8c8;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.25}
+ .st24 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs id="Markers">
+ <g id="lend3">
+ <path d="M 2 1 L 0 0 L 2 -1 " style="stroke-linecap:round;stroke-linejoin:round;fill:none"/>
+ </g>
+ <marker id="mrkr3-61" class="st8" v:arrowType="3" v:arrowSize="0" orient="auto" markerUnits="strokeWidth"
+ overflow="visible">
+ <use xlink:href="#lend3" transform="scale(-3.88,-3.88) "/>
+ </marker>
+ <marker id="mrkr3-213" class="st13" v:arrowType="3" v:arrowSize="0" orient="auto" markerUnits="strokeWidth"
+ overflow="visible">
+ <use xlink:href="#lend3" transform="scale(-1.96,-1.96) "/>
+ </marker>
+ </defs>
+ <defs id="Filters">
+ <filter id="filter_2">
+ <feGaussianBlur stdDeviation="2"/>
+ </filter>
+ </defs>
+ <g v:mID="4" v:index="2" v:groupContext="foregroundPage">
+ <v:userDefs>
+ <v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
+ </v:userDefs>
+ <title>BlockAllocator and Queue</title>
+ <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+ v:shadowOffsetY="-8.50394"/>
+ <v:layer v:name="Connector" v:index="0"/>
+ <v:layer v:name="Container" v:index="1"/>
+ <g id="shape4-1" v:mID="4" v:groupContext="shape" transform="translate(178.583,-118.63)">
+ <title>Rectangle.4</title>
+ <desc>Queue&#60;T&#62;</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
+ <v:textRect cx="216.85" cy="505.559" width="433.71" height="179.433"/>
+ <rect x="0" y="415.843" width="433.701" height="179.433" class="st1"/>
+ <text x="4" y="428.84" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Queue&#60;T&#62;</text> </g>
+ <g id="shape251-4" v:mID="251" v:groupContext="shape" transform="translate(232.933,-216.86)">
+ <title>Rectangle.251</title>
+ <desc>allocator spinlock</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="159.449" cy="579.69" width="318.9" height="31.1719"/>
+ <path d="M0 595.28 L318.9 595.28 L318.9 564.1 L0 564.1 L0 595.28 Z" class="st3"/>
+ <text x="123.9" y="582.69" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>allocator spinlock</text> </g>
+ <g id="shape242-7" v:mID="242" v:groupContext="shape" transform="translate(1159.2,333.071) rotate(90)">
+ <title>Rectangle.242</title>
+ <desc>ElementList</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="63.7795" cy="576.014" width="127.56" height="38.5228"/>
+ <rect x="0" y="556.753" width="127.559" height="38.5228" class="st1"/>
+ <text x="40.04" y="579.01" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ElementList</text> </g>
+ <g id="shape238-10" v:mID="238" v:groupContext="shape" transform="translate(782.196,338.594) rotate(90)">
+ <title>Rectangle.238</title>
+ <desc>ElementPtr</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="63.7795" cy="578.102" width="127.56" height="34.3479"/>
+ <rect x="0" y="560.928" width="127.559" height="34.3479" class="st1"/>
+ <text x="40.92" y="581.1" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ElementPtr</text> </g>
+ <g id="shape157-13" v:mID="157" v:groupContext="shape" transform="translate(366.781,-188.646)">
+ <title>Sheet.157</title>
+ <g id="shadow157-14" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape153-18" v:mID="153" v:groupContext="shape" transform="translate(338.435,-188.646)">
+ <title>Sheet.153</title>
+ <g id="shadow153-19" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape149-23" v:mID="149" v:groupContext="shape" transform="translate(311.67,-188.646)">
+ <title>Sheet.149</title>
+ <g id="shadow149-24" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape133-28" v:mID="133" v:groupContext="shape" transform="translate(283.77,-188.646)">
+ <title>Sheet.133</title>
+ <g id="shadow133-29" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape165-33" v:mID="165" v:groupContext="shape" transform="translate(480.973,-188.646)">
+ <title>Sheet.165</title>
+ <g id="shadow165-34" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape167-38" v:mID="167" v:groupContext="shape" transform="translate(452.626,-188.646)">
+ <title>Sheet.167</title>
+ <g id="shadow167-39" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape170-43" v:mID="170" v:groupContext="shape" transform="translate(425.861,-188.646)">
+ <title>Sheet.170</title>
+ <g id="shadow170-44" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape173-48" v:mID="173" v:groupContext="shape" transform="translate(397.962,-188.646)">
+ <title>Sheet.173</title>
+ <g id="shadow173-49" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape1-53" v:mID="1" v:groupContext="shape" transform="translate(195.591,-347.244)">
+ <title>Rectangle.2</title>
+ <desc>BlockAllocator</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
+ <v:textRect cx="199.843" cy="513.78" width="399.69" height="162.992"/>
+ <rect x="0" y="432.283" width="399.685" height="162.992" class="st1"/>
+ <text x="4" y="445.28" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>BlockAllocator</text> </g>
+ <g id="shape26-56" v:mID="26" v:groupContext="shape" v:layerMember="0" transform="translate(289.134,-425.197)">
+ <title>Dynamic connector</title>
+ <path d="M0 595.28 L21.26 581.1" class="st7"/>
+ </g>
+ <g id="group28-62" transform="translate(250.611,-403.937)" v:mID="28" v:groupContext="group">
+ <title>Sheet.28</title>
+ <g id="shape22-63" v:mID="22" v:groupContext="shape" transform="translate(1.19904E-014,-17.0079)">
+ <title>Rectangle.22</title>
+ <desc>Block 0</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="19.2614" cy="591.024" width="38.53" height="8.50394"/>
+ <rect x="0" y="586.772" width="38.5228" height="8.50394" class="st1"/>
+ <text x="4" y="594.02" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Block 0</text> </g>
+ <g id="shape24-66" v:mID="24" v:groupContext="shape" transform="translate(0,-8.53228)">
+ <title>Rectangle.24</title>
+ <desc>Block 1</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="19.2614" cy="591.024" width="38.53" height="8.50394"/>
+ <rect x="0" y="586.772" width="38.5228" height="8.50394" class="st1"/>
+ <text x="4" y="594.02" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Block 1</text> </g>
+ <g id="shape25-69" v:mID="25" v:groupContext="shape">
+ <title>Rectangle.25</title>
+ <desc>Block n</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="19.2614" cy="591.024" width="38.53" height="8.50394"/>
+ <rect x="0" y="586.772" width="38.5228" height="8.50394" class="st1"/>
+ <text x="4" y="594.02" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Block n</text> </g>
+ </g>
+ <g id="shape54-72" v:mID="54" v:groupContext="shape" transform="translate(303.307,-462.047)">
+ <title>Rectangle.25</title>
+ <desc>free</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="12.7559" cy="588.898" width="25.52" height="12.7559"/>
+ <rect x="0" y="582.52" width="25.5118" height="12.7559" class="st9"/>
+ <text x="4" y="591.9" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>free</text> </g>
+ <g id="group55-75" transform="translate(310.394,-420.954)" v:mID="55" v:groupContext="group">
+ <title>Sheet.55</title>
+ <g id="group21-76" transform="translate(0,-5.66009)" v:mID="21" v:groupContext="group">
+ <title>Sheet.21</title>
+ <g id="shape10-77" v:mID="10" v:groupContext="shape">
+ <title>Rectangle.10</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st10"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape11-80" v:mID="11" v:groupContext="shape" transform="translate(34.526,0)">
+ <title>Rectangle.11</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st10"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape12-83" v:mID="12" v:groupContext="shape" transform="translate(69.052,0)">
+ <title>Rectangle.12</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape13-86" v:mID="13" v:groupContext="shape" transform="translate(103.578,0)">
+ <title>Rectangle.13</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape14-89" v:mID="14" v:groupContext="shape" transform="translate(138.104,0)">
+ <title>Rectangle.14</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st10"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape15-92" v:mID="15" v:groupContext="shape" transform="translate(172.63,0)">
+ <title>Rectangle.15</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape17-95" v:mID="17" v:groupContext="shape" transform="translate(207.156,0)">
+ <title>Rectangle.17</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape18-98" v:mID="18" v:groupContext="shape" transform="translate(241.682,-1.13687E-013)">
+ <title>Rectangle.18</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ </g>
+ <g id="shape45-101" v:mID="45" v:groupContext="shape" transform="translate(86.315,0)">
+ <title>Sheet.45</title>
+ <path d="M0 589.62 C5.42 595.28 7.79 595.68 13.89 595.08 C16.34 594.84 19.38 594.43 22.68 589.62" class="st7"/>
+ </g>
+ <g id="shape46-106" v:mID="46" v:groupContext="shape" transform="translate(120.841,0)">
+ <title>Sheet.46</title>
+ <path d="M0 589.62 C16.5 595.28 23.73 595.68 42.3 595.08 C49.75 594.84 59.02 594.43 69.05 589.62" class="st7"/>
+ </g>
+ <g id="shape48-111" v:mID="48" v:groupContext="shape" transform="translate(189.893,0)">
+ <title>Sheet.48</title>
+ <path d="M0 589.62 C5.42 595.28 7.79 595.68 13.89 595.08 C16.34 594.84 19.38 594.43 22.68 589.62" class="st7"/>
+ </g>
+ <g id="shape49-116" v:mID="49" v:groupContext="shape" transform="translate(224.419,-1.13687E-013)">
+ <title>Sheet.49</title>
+ <path d="M0 589.62 C5.42 595.28 7.79 595.68 13.89 595.08 C16.34 594.84 19.38 594.43 22.68 589.62" class="st7"/>
+ </g>
+ </g>
+ <g id="shape58-121" v:mID="58" v:groupContext="shape" transform="translate(314.391,-362.835)">
+ <title>Rectangle.58</title>
+ <desc>NULL</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="19.2614" cy="588.898" width="38.53" height="12.7559"/>
+ <rect x="0" y="582.52" width="38.5228" height="12.7559" class="st11"/>
+ <text x="4" y="591.9" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>NULL</text> </g>
+ <g id="shape59-124" v:mID="59" v:groupContext="shape" v:layerMember="0" transform="translate(289.134,-408.189)">
+ <title>Dynamic connector.59</title>
+ <path d="M0 595.28 L25.26 634.25" class="st7"/>
+ </g>
+ <g id="shape62-129" v:mID="62" v:groupContext="shape" transform="translate(467.786,-451.977) rotate(13.5003)">
+ <title>Sheet.62</title>
+ <path d="M0 595.28 C15.88 590.58 24.96 588.95 38.98 589.6 C44.61 589.86 51.03 590.49 69.82 595.28" class="st7"/>
+ </g>
+ <g id="group100-134" transform="translate(310.564,-381.264)" v:mID="100" v:groupContext="group">
+ <title>Sheet.100</title>
+ <g id="group101-135" transform="translate(0,-5.66009)" v:mID="101" v:groupContext="group">
+ <title>Sheet.101</title>
+ <g id="shape102-136" v:mID="102" v:groupContext="shape">
+ <title>Rectangle.10</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st10"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape103-139" v:mID="103" v:groupContext="shape" transform="translate(34.526,0)">
+ <title>Rectangle.11</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st10"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape104-142" v:mID="104" v:groupContext="shape" transform="translate(69.052,0)">
+ <title>Rectangle.12</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape105-145" v:mID="105" v:groupContext="shape" transform="translate(103.578,0)">
+ <title>Rectangle.13</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape106-148" v:mID="106" v:groupContext="shape" transform="translate(138.104,0)">
+ <title>Rectangle.14</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape107-151" v:mID="107" v:groupContext="shape" transform="translate(172.63,0)">
+ <title>Rectangle.15</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape108-154" v:mID="108" v:groupContext="shape" transform="translate(207.156,0)">
+ <title>Rectangle.17</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st1"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ <g id="shape109-157" v:mID="109" v:groupContext="shape" transform="translate(241.682,-1.13687E-013)">
+ <title>Rectangle.18</title>
+ <desc>Chunk</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="17.263" cy="582.52" width="34.53" height="25.5118"/>
+ <rect x="0" y="569.764" width="34.526" height="25.5118" class="st10"/>
+ <text x="4" y="585.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk</text> </g>
+ </g>
+ <g id="shape110-160" v:mID="110" v:groupContext="shape" transform="translate(86.315,0)">
+ <title>Sheet.110</title>
+ <path d="M0 589.62 C5.42 595.28 7.79 595.68 13.89 595.08 C16.34 594.84 19.38 594.43 22.68 589.62" class="st7"/>
+ </g>
+ <g id="shape112-165" v:mID="112" v:groupContext="shape" transform="translate(189.893,0)">
+ <title>Sheet.112</title>
+ <path d="M0 589.62 C5.42 595.28 7.79 595.68 13.89 595.08 C16.34 594.84 19.38 594.43 22.68 589.62" class="st7"/>
+ </g>
+ </g>
+ <g id="shape114-170" v:mID="114" v:groupContext="shape" v:layerMember="0" transform="translate(289.134,-416.721)">
+ <title>Dynamic connector.114</title>
+ <path d="M0 595.28 L21.43 612.32" class="st7"/>
+ </g>
+ <g id="shape115-175" v:mID="115" v:groupContext="shape" transform="translate(465.931,-381.264)">
+ <title>Sheet.115</title>
+ <path d="M0 589.62 C5.42 595.28 7.79 595.68 13.89 595.08 C16.34 594.84 19.38 594.43 22.68 589.62" class="st7"/>
+ </g>
+ <g id="shape116-180" v:mID="116" v:groupContext="shape" transform="translate(618.045,761.134) rotate(175.3)">
+ <title>Sheet.116</title>
+ <path d="M0 594.47 C2.82 586.17 -9.74 585.59 70.67 591.28 C102.92 593.56 150.12 596.86 173.04 594.47" class="st7"/>
+ </g>
+ <g id="shape117-185" v:mID="117" v:groupContext="shape" transform="translate(431.405,-381.264)">
+ <title>Sheet.117</title>
+ <path d="M0 589.62 C5.42 595.28 7.79 595.68 13.89 595.08 C16.34 594.84 19.38 594.43 22.68 589.62" class="st7"/>
+ </g>
+ <g id="shape118-190" v:mID="118" v:groupContext="shape" transform="translate(348.661,-263.622)">
+ <title>Rectangle.118</title>
+ <desc>BlockAllocator</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="43.7209" cy="582.52" width="87.45" height="25.5118"/>
+ <rect x="0" y="569.764" width="87.4417" height="25.5118" class="st1"/>
+ <text x="14.44" y="585.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>BlockAllocator</text> </g>
+ <g id="shape128-193" v:mID="128" v:groupContext="shape" transform="translate(232.441,-141.732)">
+ <title>Rectangle.128</title>
+ <desc>queue spinlock</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="159.449" cy="579.69" width="318.9" height="31.1719"/>
+ <path d="M0 595.28 L318.9 595.28 L318.9 564.1 L0 564.1 L0 595.28 Z" class="st3"/>
+ <text x="128.93" y="582.69" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>queue spinlock</text> </g>
+ <g id="shape129-196" v:mID="129" v:groupContext="shape" transform="translate(239.528,-143.531)">
+ <title>Rectangle.129</title>
+ <desc>push(T*)</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="23.1024" cy="587.483" width="46.21" height="15.586"/>
+ <rect x="0" y="579.69" width="46.2047" height="15.586" class="st9"/>
+ <text x="5.31" y="590.48" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>push(T*)</text> </g>
+ <g id="shape130-199" v:mID="130" v:groupContext="shape" transform="translate(477.638,-145.329)">
+ <title>Rectangle.130</title>
+ <desc>T[] pop_list()</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="33.3071" cy="587.483" width="66.62" height="15.586"/>
+ <rect x="0" y="579.69" width="66.6142" height="15.586" class="st9"/>
+ <text x="7.34" y="590.48" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T[] pop_list()</text> </g>
+ <g id="shape123-202" v:mID="123" v:groupContext="shape" transform="translate(241.917,-225.354)">
+ <title>Rectangle.123</title>
+ <desc>T* allocate()</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="29.5884" cy="588.898" width="59.18" height="12.7559"/>
+ <rect x="0" y="582.52" width="59.1768" height="12.7559" class="st9"/>
+ <text x="4" y="591.9" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>T* allocate()</text> </g>
+ <g id="shape124-205" v:mID="124" v:groupContext="shape" transform="translate(477.098,-226.772)">
+ <title>Rectangle.124</title>
+ <desc>deallocate(T*)</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="33.0909" cy="588.898" width="66.19" height="12.7559"/>
+ <rect x="0" y="582.52" width="66.1819" height="12.7559" class="st9"/>
+ <text x="4" y="591.9" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>deallocate(T*)</text> </g>
+ <g id="shape125-208" v:mID="125" v:groupContext="shape" v:layerMember="0" transform="translate(348.661,-276.378)">
+ <title>Dynamic connector.125</title>
+ <path d="M0 595.28 L-77.16 633.54" class="st12"/>
+ </g>
+ <g id="shape126-214" v:mID="126" v:groupContext="shape" v:layerMember="0" transform="translate(510.189,-239.528)">
+ <title>Dynamic connector.126</title>
+ <path d="M0 595.28 L-74.09 558.43" class="st12"/>
+ </g>
+ <g id="shape160-219" v:mID="160" v:groupContext="shape" transform="translate(240.139,-155.906)">
+ <title>Rectangle.160</title>
+ <desc>list</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st9"/>
+ <text x="4.4" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>list</text> </g>
+ <g id="shape161-222" v:mID="161" v:groupContext="shape" v:layerMember="0" transform="translate(250.463,-168.661)">
+ <title>Dynamic connector.161</title>
+ <path d="M0 595.28 L32.5 566.93" class="st7"/>
+ </g>
+ <g id="shape162-227" v:mID="162" v:groupContext="shape" transform="translate(507.566,-157.323)">
+ <title>Rectangle.162</title>
+ <desc>first</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="15.4264" cy="588.898" width="30.86" height="12.7559"/>
+ <rect x="0" y="582.52" width="30.8529" height="12.7559" class="st9"/>
+ <text x="7.38" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>first</text> </g>
+ <g id="shape176-230" v:mID="176" v:groupContext="shape" transform="translate(110.424,-177.316)">
+ <title>Rectangle.176</title>
+ <desc>Writer</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="29.8913" cy="579.69" width="59.79" height="31.1719"/>
+ <rect x="0" y="564.104" width="59.7827" height="31.1719" class="st1"/>
+ <text x="16.65" y="582.69" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Writer</text> </g>
+ <g id="shape177-233" v:mID="177" v:groupContext="shape" transform="translate(627.746,-181.422)">
+ <title>Rectangle.177</title>
+ <desc>Reader</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="29.8913" cy="579.69" width="59.79" height="31.1719"/>
+ <rect x="0" y="564.104" width="59.7827" height="31.1719" class="st1"/>
+ <text x="15.44" y="582.69" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Reader</text> </g>
+ <g id="shape156-236" v:mID="156" v:groupContext="shape" transform="translate(365.975,-190.63)">
+ <title>Rectangle.156</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ <g id="shape152-239" v:mID="152" v:groupContext="shape" transform="translate(337.628,-190.63)">
+ <title>Rectangle.152</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ <g id="shape154-242" v:mID="154" v:groupContext="shape" v:layerMember="0" transform="translate(368.482,-190.346)">
+ <title>Dynamic connector.154</title>
+ <path d="M-1.7 588.19 L-12.47 588.19" class="st7"/>
+ </g>
+ <g id="shape148-247" v:mID="148" v:groupContext="shape" transform="translate(310.863,-190.63)">
+ <title>Rectangle.148</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ <g id="shape150-250" v:mID="150" v:groupContext="shape" v:layerMember="0" transform="translate(340.926,-190.346)">
+ <title>Dynamic connector.150</title>
+ <path d="M-2.49 588.19 L-11.68 588.19" class="st7"/>
+ </g>
+ <g id="shape134-255" v:mID="134" v:groupContext="shape" transform="translate(282.964,-190.63)">
+ <title>Rectangle.134</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ <g id="shape145-258" v:mID="145" v:groupContext="shape" v:layerMember="0" transform="translate(313.594,-190.346)">
+ <title>Dynamic connector.145</title>
+ <path d="M-1.92 588.19 L-12.25 588.19" class="st7"/>
+ </g>
+ <g id="shape164-263" v:mID="164" v:groupContext="shape" transform="translate(480.167,-190.63)">
+ <title>Rectangle.164</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ <g id="shape166-266" v:mID="166" v:groupContext="shape" transform="translate(451.82,-190.63)">
+ <title>Rectangle.166</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ <g id="shape168-269" v:mID="168" v:groupContext="shape" v:layerMember="0" transform="translate(482.674,-190.346)">
+ <title>Dynamic connector.168</title>
+ <path d="M-1.7 588.19 L-12.47 588.19" class="st7"/>
+ </g>
+ <g id="shape169-274" v:mID="169" v:groupContext="shape" transform="translate(425.055,-190.63)">
+ <title>Rectangle.169</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ <g id="shape171-277" v:mID="171" v:groupContext="shape" v:layerMember="0" transform="translate(455.118,-190.346)">
+ <title>Dynamic connector.171</title>
+ <path d="M-2.49 588.19 L-11.68 588.19" class="st7"/>
+ </g>
+ <g id="shape172-282" v:mID="172" v:groupContext="shape" transform="translate(397.156,-190.63)">
+ <title>Rectangle.172</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ <g id="shape174-285" v:mID="174" v:groupContext="shape" v:layerMember="0" transform="translate(427.786,-190.346)">
+ <title>Dynamic connector.174</title>
+ <path d="M-1.92 588.19 L-12.25 588.19" class="st7"/>
+ </g>
+ <g id="shape175-290" v:mID="175" v:groupContext="shape" v:layerMember="0" transform="translate(398.246,-190.346)">
+ <title>Dynamic connector.175</title>
+ <path d="M-0.28 588.19 L-13.89 588.19" class="st7"/>
+ </g>
+ <g id="shape183-295" v:mID="183" v:groupContext="shape" transform="translate(372.089,932.539) rotate(167.114)">
+ <title>Sheet.183</title>
+ <path d="M0 583.7 C38.54 597.44 83.34 600.97 104.23 583.7" class="st12"/>
+ </g>
+ <g id="shape184-300" v:mID="184" v:groupContext="shape" transform="translate(287.889,-145.324) rotate(14.6809)">
+ <title>Sheet.184</title>
+ <path d="M0 582.29 C24.9 607.39 69.61 589.7 102.56 582.29" class="st12"/>
+ </g>
+ <g id="shape185-305" v:mID="185" v:groupContext="shape" transform="translate(403.494,-121.803) rotate(-14.0141)">
+ <title>Sheet.185</title>
+ <path d="M0 581.26 C12.78 584.97 50.85 595.17 74.95 595.28 C95.42 595.36 105.8 588.16 116.86 581.26" class="st12"/>
+ </g>
+ <g id="shape186-310" v:mID="186" v:groupContext="shape" transform="translate(554.066,958.884) rotate(-169.81)">
+ <title>Sheet.186</title>
+ <path d="M0 585.44 C33.25 596.44 83.96 600.67 116.19 585.44" class="st12"/>
+ </g>
+ <g id="shape163-315" v:mID="163" v:groupContext="shape" v:layerMember="0" transform="translate(522.992,-170.079)">
+ <title>Dynamic connector.163</title>
+ <path d="M0 595.28 L-26.45 573.51" class="st7"/>
+ </g>
+ <g id="group210-320" transform="translate(193.77,-141.732)" v:mID="210" v:groupContext="group">
+ <title>Sheet.210</title>
+ <g id="shape197-321" v:mID="197" v:groupContext="shape" transform="translate(0.806102,0)">
+ <title>Sheet.197</title>
+ <g id="shadow197-322" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape196-326" v:mID="196" v:groupContext="shape" transform="translate(0,-1.98425)">
+ <title>Rectangle.196</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ </g>
+ <g id="group211-329" transform="translate(564.989,-146.268)" v:mID="211" v:groupContext="group">
+ <title>Sheet.211</title>
+ <g id="shape200-330" v:mID="200" v:groupContext="shape" transform="translate(0.806102,0)">
+ <title>Sheet.200</title>
+ <g id="shadow200-331" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape199-335" v:mID="199" v:groupContext="shape" transform="translate(0,-1.98425)">
+ <title>Rectangle.199</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ </g>
+ <g id="group217-338" transform="translate(194.784,-223.937)" v:mID="217" v:groupContext="group">
+ <title>Sheet.217</title>
+ <g id="shape193-339" v:mID="193" v:groupContext="shape" transform="translate(0.806102,0)">
+ <title>Sheet.193</title>
+ <g id="shadow193-340" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st14"/>
+ </g>
+ <g id="shape192-344" v:mID="192" v:groupContext="shape" transform="translate(0,-1.98425)">
+ <title>Rectangle.192</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ </g>
+ <g id="group218-347" transform="translate(573.613,-227.906)" v:mID="218" v:groupContext="group">
+ <title>Sheet.218</title>
+ <g id="shape206-348" v:mID="206" v:groupContext="shape" transform="translate(0.806102,0)">
+ <title>Sheet.206</title>
+ <g id="shadow206-349" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st14"/>
+ </g>
+ <g id="shape205-353" v:mID="205" v:groupContext="shape" transform="translate(0,-1.98425)">
+ <title>Rectangle.123</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ </g>
+ <g id="group219-356" transform="translate(569.972,-146.551)" v:mID="219" v:groupContext="group">
+ <title>Sheet.219</title>
+ <g id="shape220-357" v:mID="220" v:groupContext="shape" transform="translate(0.806102,0)">
+ <title>Sheet.220</title>
+ <g id="shadow220-358" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape221-362" v:mID="221" v:groupContext="shape" transform="translate(0,-1.98425)">
+ <title>Rectangle.199</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ </g>
+ <g id="group222-365" transform="translate(573.821,-147.118)" v:mID="222" v:groupContext="group">
+ <title>Sheet.222</title>
+ <g id="shape223-366" v:mID="223" v:groupContext="shape" transform="translate(0.806102,0)">
+ <title>Sheet.223</title>
+ <g id="shadow223-367" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape224-371" v:mID="224" v:groupContext="shape" transform="translate(0,-1.98425)">
+ <title>Rectangle.199</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ </g>
+ <g id="group225-374" transform="translate(578.551,-147.402)" v:mID="225" v:groupContext="group">
+ <title>Sheet.225</title>
+ <g id="shape226-375" v:mID="226" v:groupContext="shape" transform="translate(0.806102,0)">
+ <title>Sheet.226</title>
+ <g id="shadow226-376" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape227-380" v:mID="227" v:groupContext="shape" transform="translate(0,-1.98425)">
+ <title>Rectangle.199</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ </g>
+ <g id="group228-383" transform="translate(582.236,-147.969)" v:mID="228" v:groupContext="group">
+ <title>Sheet.228</title>
+ <g id="shape229-384" v:mID="229" v:groupContext="shape" transform="translate(0.806102,0)">
+ <title>Sheet.229</title>
+ <g id="shadow229-385" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st5"/>
+ </g>
+ <ellipse cx="8.7874" cy="586.488" rx="8.7874" ry="8.7874" class="st6"/>
+ </g>
+ <g id="shape230-389" v:mID="230" v:groupContext="shape" transform="translate(0,-1.98425)">
+ <title>Rectangle.199</title>
+ <desc>T</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="10.3243" cy="588.898" width="20.65" height="12.7559"/>
+ <rect x="0" y="582.52" width="20.6486" height="12.7559" class="st11"/>
+ <text x="7.89" y="591.9" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>T</text> </g>
+ </g>
+ <g id="shape232-392" v:mID="232" v:groupContext="shape" v:layerMember="0" transform="translate(527.992,-387.21)">
+ <title>Dynamic connector.232</title>
+ <path d="M6.99 595.56 L7.18 609.16" class="st7"/>
+ </g>
+ <g id="shape234-397" v:mID="234" v:groupContext="shape" transform="translate(520.381,-360.567)">
+ <title>Rectangle.234</title>
+ <desc>NULL</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="14.7929" cy="588.898" width="29.59" height="12.7559"/>
+ <rect x="0" y="582.52" width="29.5857" height="12.7559" class="st11"/>
+ <text x="4" y="591.9" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>NULL</text> </g>
+ <g id="shape66-400" v:mID="66" v:groupContext="shape" transform="translate(209.853,-474.803)">
+ <title>Rectangle.66</title>
+ <desc>Chunk* allocate()</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="39.6405" cy="588.898" width="79.29" height="12.7559"/>
+ <rect x="0" y="582.52" width="79.2809" height="12.7559" class="st9"/>
+ <text x="4" y="591.9" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>Chunk* allocate()</text> </g>
+ <g id="shape75-403" v:mID="75" v:groupContext="shape" transform="translate(208.123,-446.457)">
+ <title>Rectangle.75</title>
+ <desc>deallocate(Chunk*)</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="43.7209" cy="588.898" width="87.45" height="12.7559"/>
+ <rect x="0" y="582.52" width="87.4417" height="12.7559" class="st9"/>
+ <text x="4" y="591.9" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>deallocate(Chunk*)</text> </g>
+ <g id="shape98-406" v:mID="98" v:groupContext="shape" v:layerMember="0" transform="translate(316.063,-470.906)">
+ <title>Dynamic connector.98</title>
+ <path d="M0 591.38 L-26.93 585" class="st12"/>
+ </g>
+ <g id="shape99-411" v:mID="99" v:groupContext="shape" v:layerMember="0" transform="translate(295.564,-450.354)">
+ <title>Dynamic connector.99</title>
+ <path d="M0 592.8 L20.5 583.58" class="st12"/>
+ </g>
+ <g id="group190-416" transform="translate(528.661,-70.1575)" v:mID="190" v:groupContext="group">
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="msvStructureType" v:prompt="" v:val="VT4(Callout)"/>
+ <v:ud v:nameU="msvSDTargetIntersection" v:prompt=""/>
+ <v:ud v:nameU="msvSDCalloutNoHighlight" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="msvShapeCategories" v:prompt="" v:val="VT0(0):26"/>
+ <v:ud v:nameU="Side" v:prompt="" v:val="VT0(4):26"/>
+ <v:ud v:nameU="LeaderEnd" v:prompt="" v:val="VT7(PNT(6.25MM,-0.28346456692913)):40"/>
+ <v:ud v:nameU="WHBoxIntersection" v:prompt="" v:val="VT7(PNT(10.096153846154MM,0)):40"/>
+ <v:ud v:nameU="FoldSize" v:prompt="" v:val="VT0(0.11811023622047):24"/>
+ <v:ud v:nameU="msvSDTargetIntersection" v:prompt="" v:val="VT7(PNT(-0.12709905838268,1.0440494563244)):40"/>
+ <v:ud v:nameU="Side" v:prompt="" v:val="VT0(3):26"/>
+ <v:ud v:nameU="LeaderEnd" v:prompt="" v:val="VT7(PNT(-0.12709905838268,1.0440494563244)):40"/>
+ <v:ud v:nameU="WHBoxIntersection" v:prompt="" v:val="VT7(PNT(0,0.53149606299213)):40"/>
+ </v:userDefs>
+ <title>Note.190</title>
+ <desc>take out all Ts from the Queue</desc>
+ <g id="shape190-417" v:mID="190" v:groupContext="groupContent">
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="52.4409" cy="576.142" width="104.89" height="36.8038"/>
+ <g id="shadow190-418" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28 Z" class="st15"/>
+ <path d="M0 557.01 L-9.15 520.1" class="st16"/>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28" class="st16"/>
+ <text x="5.31" y="572.54" class="st17" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>take out all Ts from <tspan
+ x="26.62" dy="1.2em" class="st18">the Queue</tspan></text> </g>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28 Z" class="st19"/>
+ <path d="M0 557.01 L-9.15 520.1" class="st20"/>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28" class="st20"/>
+ <text x="5.31" y="572.54" class="st21" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>take out all Ts from <tspan
+ x="26.62" dy="1.2em" class="st18">the Queue</tspan></text> </g>
+ <g id="shape191-432" v:mID="191" v:groupContext="shape" transform="translate(96.378,-29.7638)">
+ <title>Sheet.191</title>
+ <v:userDefs>
+ <v:ud v:nameU="FoldSize" v:prompt="" v:val="VT0(0.11811023622047):24"/>
+ </v:userDefs>
+ <g id="shadow191-433" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <path d="M0 595.28 L8.5 595.28 L8.5 596.13 L8.5 595.28 L0 586.77 L-0.85 586.77 L0 586.77 L0 595.28 Z"
+ class="st22"/>
+ </g>
+ <path d="M0 595.28 L8.5 595.28 L8.5 596.13 L8.5 595.28 L0 586.77 L-0.85 586.77 L0 586.77 L0 595.28 Z" class="st23"/>
+ </g>
+ </g>
+ <g id="group243-437" transform="translate(632.126,-257.244)" v:mID="243" v:groupContext="group">
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="msvStructureType" v:prompt="" v:val="VT4(Callout)"/>
+ <v:ud v:nameU="msvSDTargetIntersection" v:prompt=""/>
+ <v:ud v:nameU="msvSDCalloutNoHighlight" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="msvShapeCategories" v:prompt="" v:val="VT0(0):26"/>
+ <v:ud v:nameU="Side" v:prompt="" v:val="VT0(4):26"/>
+ <v:ud v:nameU="LeaderEnd" v:prompt="" v:val="VT7(PNT(6.25MM,-0.28346456692913)):40"/>
+ <v:ud v:nameU="WHBoxIntersection" v:prompt="" v:val="VT7(PNT(10.096153846154MM,0)):40"/>
+ <v:ud v:nameU="FoldSize" v:prompt="" v:val="VT0(0.11811023622047):24"/>
+ <v:ud v:nameU="msvSDTargetIntersection" v:prompt="" v:val="VT7(PNT(-0.41214936502337,-0.61122298311842)):40"/>
+ <v:ud v:nameU="Side" v:prompt="" v:val="VT0(3):26"/>
+ <v:ud v:nameU="LeaderEnd" v:prompt="" v:val="VT7(PNT(-0.41214936502337,-0.61122298311842)):40"/>
+ <v:ud v:nameU="WHBoxIntersection" v:prompt="" v:val="VT7(PNT(0,0)):40"/>
+ </v:userDefs>
+ <title>Note.243</title>
+ <desc>smart pointer for list of elements</desc>
+ <g id="shape243-438" v:mID="243" v:groupContext="groupContent">
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="52.4409" cy="576.142" width="104.89" height="36.8038"/>
+ <g id="shadow243-439" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28 Z" class="st15"/>
+ <path d="M0 595.28 L-29.67 639.28" class="st16"/>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28" class="st16"/>
+ <text x="10.59" y="572.54" class="st17" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>smart pointer for <tspan
+ x="14.99" dy="1.2em" class="st18">list of elements</tspan></text> </g>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28 Z" class="st19"/>
+ <path d="M0 595.28 L-29.67 639.28" class="st20"/>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28" class="st20"/>
+ <text x="10.59" y="572.54" class="st21" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>smart pointer for <tspan
+ x="14.99" dy="1.2em" class="st18">list of elements</tspan></text> </g>
+ <g id="shape244-453" v:mID="244" v:groupContext="shape" transform="translate(96.378,-29.7638)">
+ <title>Sheet.244</title>
+ <v:userDefs>
+ <v:ud v:nameU="FoldSize" v:prompt="" v:val="VT0(0.11811023622047):24"/>
+ </v:userDefs>
+ <g id="shadow244-454" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <path d="M0 595.28 L8.5 595.28 L8.5 596.13 L8.5 595.28 L0 586.77 L-0.85 586.77 L0 586.77 L0 595.28 Z"
+ class="st22"/>
+ </g>
+ <path d="M0 595.28 L8.5 595.28 L8.5 596.13 L8.5 595.28 L0 586.77 L-0.85 586.77 L0 586.77 L0 595.28 Z" class="st23"/>
+ </g>
+ </g>
+ <g id="group247-458" transform="translate(58.1102,-257.953)" v:mID="247" v:groupContext="group">
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="msvStructureType" v:prompt="" v:val="VT4(Callout)"/>
+ <v:ud v:nameU="msvSDTargetIntersection" v:prompt=""/>
+ <v:ud v:nameU="msvSDCalloutNoHighlight" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="msvShapeCategories" v:prompt="" v:val="VT0(0):26"/>
+ <v:ud v:nameU="Side" v:prompt="" v:val="VT0(4):26"/>
+ <v:ud v:nameU="LeaderEnd" v:prompt="" v:val="VT7(PNT(6.25MM,-0.28346456692913)):40"/>
+ <v:ud v:nameU="WHBoxIntersection" v:prompt="" v:val="VT7(PNT(10.096153846154MM,0)):40"/>
+ <v:ud v:nameU="FoldSize" v:prompt="" v:val="VT0(0.11811023622047):24"/>
+ <v:ud v:nameU="msvSDTargetIntersection" v:prompt="" v:val="VT7(PNT(1.789031742126,-0.68881655337357)):40"/>
+ <v:ud v:nameU="Side" v:prompt="" v:val="VT0(1):26"/>
+ <v:ud v:nameU="LeaderEnd" v:prompt="" v:val="VT7(PNT(1.789031742126,-0.68881655337357)):40"/>
+ <v:ud v:nameU="WHBoxIntersection" v:prompt="" v:val="VT7(PNT(1.4566929133858,0)):40"/>
+ </v:userDefs>
+ <title>Note.247</title>
+ <desc>smart pointer for allocated element</desc>
+ <g id="shape247-459" v:mID="247" v:groupContext="groupContent">
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="52.4409" cy="576.142" width="104.89" height="36.8038"/>
+ <g id="shadow247-460" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28 Z" class="st15"/>
+ <path d="M104.88 595.28 L128.81 644.87" class="st16"/>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28" class="st16"/>
+ <text x="10.59" y="572.54" class="st17" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>smart pointer for <tspan
+ x="8.45" dy="1.2em" class="st18">allocated element</tspan></text> </g>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28 Z" class="st19"/>
+ <path d="M104.88 595.28 L128.81 644.87" class="st20"/>
+ <path d="M0 595.28 L104.88 595.28 L104.88 565.51 L96.38 557.01 L0 557.01 L0 595.28" class="st20"/>
+ <text x="10.59" y="572.54" class="st21" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>smart pointer for <tspan
+ x="8.45" dy="1.2em" class="st18">allocated element</tspan></text> </g>
+ <g id="shape248-474" v:mID="248" v:groupContext="shape" transform="translate(96.378,-29.7638)">
+ <title>Sheet.248</title>
+ <v:userDefs>
+ <v:ud v:nameU="FoldSize" v:prompt="" v:val="VT0(0.11811023622047):24"/>
+ </v:userDefs>
+ <g id="shadow248-475" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279"
+ v:shadowType="1" transform="matrix(1,0,0,1,0.345598,1.97279)" class="st4">
+ <path d="M0 595.28 L8.5 595.28 L8.5 596.13 L8.5 595.28 L0 586.77 L-0.85 586.77 L0 586.77 L0 595.28 Z"
+ class="st22"/>
+ </g>
+ <path d="M0 595.28 L8.5 595.28 L8.5 596.13 L8.5 595.28 L0 586.77 L-0.85 586.77 L0 586.77 L0 595.28 Z" class="st23"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/docs/pictures/epam-logo.png b/docs/pictures/epam-logo.png
new file mode 100755
index 0000000..83e5628
--- /dev/null
+++ b/docs/pictures/epam-logo.png
Binary files differ
diff --git a/docs/pictures/epam-logo.svg b/docs/pictures/epam-logo.svg
new file mode 100755
index 0000000..7c2fc6f
--- /dev/null
+++ b/docs/pictures/epam-logo.svg
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 333.73334 117.42667"
+ height="117.42667"
+ width="333.73334"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6"><clipPath
+ id="clipPath20"
+ clipPathUnits="userSpaceOnUse"><path
+ id="path18"
+ d="M 0,0 H 2503 V 880.746 H 0 Z" /></clipPath></defs><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,117.42667)"
+ id="g10"><g
+ transform="scale(0.1)"
+ id="g12"><g
+ id="g14"><g
+ clip-path="url(#clipPath20)"
+ id="g16"><path
+ id="path22"
+ style="fill:#3d3a3b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 472.504,581.254 h 138.41 V 728.23 c 0,41.012 -20.496,61.52 -61.512,61.52 h -15.379 c -41.011,0 -61.519,-20.508 -61.519,-61.52 z m -0.313,-93.793 0.313,-161.66 c 0,-41.012 20.508,-61.52 61.519,-61.52 h 17.942 c 41.012,0 61.515,20.508 61.515,61.52 v 79.461 h 94.84 v -75.617 c 0,-103.813 -52.543,-156.36 -156.355,-156.36 h -20.508 c -103.812,0 -156.355,52.547 -156.355,144.203 V 712.23 c 0,115.965 52.543,168.516 156.355,168.516 h 20.508 c 103.812,0 156.355,-52.551 156.355,-156.363 L 708.008,487.461 H 472.191" /><path
+ id="path24"
+ style="fill:#3d3a3b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 869.008,301.445 c 26.914,-23.062 57.676,-35.879 89.715,-35.879 35.886,0 56.397,16.657 56.397,56.387 v 410.121 c 0,39.735 -20.511,56.391 -56.397,56.391 -32.039,0 -62.801,-12.817 -89.715,-35.887 z m -97.406,571.61 h 97.406 v -44.86 c 23.07,24.356 62.801,52.551 119.195,52.551 83.307,0 124.317,-55.109 124.317,-137.133 V 310.422 c 0,-82.027 -41.01,-137.137 -124.317,-137.137 -56.394,0 -96.125,26.914 -119.195,49.985 V 0 h -97.406 v 873.055" /><path
+ id="path26"
+ style="fill:#3d3a3b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 1404.57,297.605 v 228.282 l -88.43,-33.477 c -35.89,-14.101 -47.42,-32.039 -47.42,-71.769 V 315.547 c 0,-33.324 16.66,-49.981 47.42,-49.981 29.47,0 56.39,10.25 88.43,32.039 z m -233.26,124.321 c 0,85.863 28.2,120.469 102.53,146.097 l 130.73,44.864 V 728.23 c 0,41.012 -20.51,62.801 -61.52,62.801 h -15.87 c -41.01,0 -61.52,-21.789 -61.52,-62.801 v -98.027 h -94.84 v 94.18 c 0,103.812 52.55,156.363 156.36,156.363 h 18.43 c 103.81,0 156.36,-52.551 156.36,-156.363 V 180.977 h -97.4 v 43.578 c -26.91,-25.637 -62.8,-51.27 -119.19,-51.27 -78.18,0 -114.07,44.86 -114.07,121.754 v 126.887" /><path
+ id="path28"
+ style="fill:#3d3a3b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 1895.92,180.977 h -97.41 V 738.48 c 0,34.606 -16.65,49.985 -46.13,49.985 -26.92,0 -55.11,-10.25 -89.72,-34.602 V 180.977 h -97.4 v 692.078 h 97.4 v -44.86 c 28.2,26.914 65.37,52.551 119.2,52.551 49.98,0 83.3,-20.508 101.24,-56.394 34.61,29.48 75.62,56.394 132.01,56.394 75.62,0 114.07,-46.144 114.07,-121.758 V 180.977 h -97.41 V 738.48 c 0,34.606 -16.66,49.985 -46.14,49.985 -26.91,0 -55.11,-10.25 -89.71,-34.602 V 180.977" /><path
+ id="path30"
+ style="fill:#29b9d2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 250.262,809.312 V 682.047 L 86.3398,525.848 250.262,372.438 V 242.391 L 0,477.641 v 93.629 l 250.262,238.042" /><path
+ id="path32"
+ style="fill:#29b9d2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 2503.02,571.27 v -93.629 l -250.26,-235.25 v 130.047 l 163.92,153.41 -163.92,156.199 V 809.312 L 2503.02,571.27" /></g></g></g></g></svg> \ No newline at end of file
diff --git a/docs/pictures/general-structure.png b/docs/pictures/general-structure.png
new file mode 100755
index 0000000..b88628e
--- /dev/null
+++ b/docs/pictures/general-structure.png
Binary files differ
diff --git a/docs/pictures/general-structure.svg b/docs/pictures/general-structure.svg
new file mode 100755
index 0000000..46cfbf4
--- /dev/null
+++ b/docs/pictures/general-structure.svg
@@ -0,0 +1,876 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export general-structure.svg General structure -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+ width="11.6929in" height="8.26772in" viewBox="0 0 841.889 595.276" xml:space="preserve" color-interpolation-filters="sRGB"
+ class="st37">
+ <title>General structure of nfstrace</title>
+
+ <style type="text/css">
+ <![CDATA[
+ .st1 {fill:#ffffff;stroke:#000000;stroke-width:0.25}
+ .st2 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+ .st3 {font-size:1em}
+ .st4 {font-size:0.899997em}
+ .st5 {marker-start:url(#mrkr7-35);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.499999}
+ .st6 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.16556271699054}
+ .st7 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2}
+ .st8 {fill:#000000;font-family:Calibri;font-size:0.666664em}
+ .st9 {marker-end:url(#mrkr7-43);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.499999}
+ .st10 {marker-end:url(#mrkr4-65);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.999999}
+ .st11 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.28409061919554}
+ .st12 {fill:#ffffff;stroke:none;stroke-width:0.25}
+ .st13 {fill:none}
+ .st14 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.999999}
+ .st15 {marker-end:url(#mrkr22-112);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.499999}
+ .st16 {fill:none;stroke:none;stroke-width:0.25}
+ .st17 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+ .st18 {marker-end:url(#mrkr4-129);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.499999}
+ .st19 {marker-end:url(#mrkr16-135);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.499999}
+ .st20 {fill:none;stroke:#000000;stroke-dasharray:0.01,1.25;stroke-width:0.25}
+ .st21 {fill:#000000;font-family:Calibri;font-size:0.833336em;font-weight:bold}
+ .st22 {fill:#000000;font-family:Calibri;font-size:0.666664em;font-weight:bold}
+ .st23 {font-size:1em;font-weight:normal}
+ .st24 {fill:none;stroke:#000000;stroke-width:0.25}
+ .st25 {fill:none;stroke:none;stroke-width:5.99999}
+ .st26 {stroke:#fec000;stroke-opacity:0.5;stroke-width:5.99999}
+ .st27 {stroke:#f59d56;stroke-opacity:0.5;stroke-width:5.99999}
+ .st28 {stroke:#70ad47;stroke-opacity:0.5;stroke-width:5.99999}
+ .st29 {stroke:#9cc3e5;stroke-opacity:0.5;stroke-width:5.99999}
+ .st30 {fill:none;stroke:none;stroke-width:0.999999}
+ .st31 {stroke:#c7c8c8;stroke-width:0.25}
+ .st32 {fill:none;stroke:#c7c8c8;stroke-width:0.25}
+ .st33 {fill:none;stroke:#c7c8c8;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.25}
+ .st34 {stroke:#c8c8c8;stroke-width:0.25}
+ .st35 {fill:none;stroke:#c8c8c8;stroke-width:0.25}
+ .st36 {fill:none;stroke:#c8c8c8;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.25}
+ .st37 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs id="Markers">
+ <g id="lend7">
+ <path
+ d="M 1.84309 -0.959455 C 1.43792 -0.3808 0.784502 -0.0260248 0.0785258 -0.00137083 L 0.0785228 0.00137063 C 0.784499 0.0260235 1.43791 0.380798 1.84309 0.959452 "
+ style="stroke-linecap:round;stroke-linejoin:round;fill:none"/>
+ </g>
+ <marker id="mrkr7-35" class="st6" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend7" transform="scale(6.0400071838466) "/>
+ </marker>
+ <marker id="mrkr7-43" class="st6" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend7" transform="scale(-6.0400071838466,-6.0400071838466) "/>
+ </marker>
+ <g id="lend4">
+ <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
+ </g>
+ <marker id="mrkr4-65" class="st11" refX="-0" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-3.5200035919233,-3.5200035919233) "/>
+ </marker>
+ <g id="lend22">
+ <path d="M 0 0 L 2.25 -1.125 L 4.5 0 L 2.25 1.125 L 0 0 " style="stroke-linecap:round;stroke-linejoin:round;fill:none"/>
+ </g>
+ <marker id="mrkr22-112" class="st6" refX="-0" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend22" transform="scale(-6.0400071838466,-6.0400071838466) "/>
+ </marker>
+ <marker id="mrkr4-129" class="st6" refX="-0" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-6.0400071838466,-6.0400071838466) "/>
+ </marker>
+ <g id="lend16">
+ <path d="M 0 0 L 2 -1 L 2 1 L 0 0 " style="stroke-linecap:round;stroke-linejoin:round;fill:none"/>
+ </g>
+ <marker id="mrkr16-135" class="st6" refX="-0" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend16" transform="scale(-6.0400071838466,-6.0400071838466) "/>
+ </marker>
+ </defs>
+ <g>
+ <title>General structure</title>
+ <g id="shape32-1" transform="translate(442.204,-53.7171)">
+ <title>Sheet.32</title>
+ <path d="M-0 589.61 A5.66941 5.66941 -180 0 0 5.67 595.28 L240.94 595.28 A5.66941 5.66941 -180 0 0 246.61 589.61 L246.61
+ 538.3 A5.66941 5.66941 -180 0 0 240.94 532.63 L5.67 532.63 A5.66941 5.66941 -180 0 0 -0 538.3 L0 589.61
+ Z" class="st1"/>
+ </g>
+ <g id="shape29-3" transform="translate(613.7,-62.5133)">
+ <title>Rectangle.153</title>
+ <desc>Operation Breakdown Analyzer</desc>
+ <rect x="0" y="550.222" width="66.3269" height="45.0535" class="st1"/>
+ <text x="12.51" y="563.22" class="st2">Operation <tspan x="10.08" dy="1.2em" class="st3">Breakdown </tspan><tspan
+ x="15.63" dy="1.2em" class="st3">Analyzer</tspan></text> </g>
+ <g id="shape1-8" transform="translate(440.788,-124.725)">
+ <title>Rectangle.5</title>
+ <desc>AnalysisManager</desc>
+ <rect x="0" y="321.546" width="246.614" height="273.73" class="st1"/>
+ <text x="4" y="334.55" class="st2">AnalysisManager</text> </g>
+ <g id="shape2-11" transform="translate(99.2125,-124.725)">
+ <title>Rectangle.4</title>
+ <desc>FiltrationManager</desc>
+ <rect x="0" y="321.546" width="246.614" height="273.73" class="st1"/>
+ <text x="4" y="334.55" class="st2">FiltrationManager</text> </g>
+ <g id="shape3-14" transform="translate(99.2126,-420.019)">
+ <title>Rectangle.2</title>
+ <desc>Controller : main() thread</desc>
+ <rect x="0" y="521.051" width="586.771" height="74.2251" class="st1"/>
+ <text x="4" y="534.05" class="st2">Controller : main() thread</text> </g>
+ <g id="shape4-17" transform="translate(361.137,-433.414)">
+ <title>Rectangle.7</title>
+ <desc>RunningStatus</desc>
+ <rect x="0" y="547.844" width="68.5909" height="47.4322" class="st1"/>
+ <text x="4.95" y="574.56" class="st2">RunningStatus</text> </g>
+ <g id="shape5-20" transform="translate(487.558,-204.094)">
+ <title>Rectangle.42</title>
+ <desc>Analysers storage for Analyzers manager of plugin instances</desc>
+ <rect x="0" y="496.063" width="102.047" height="99.2125" class="st1"/>
+ <text x="4" y="509.06" class="st2">Analysers<tspan x="4" dy="2.4em" class="st3">s</tspan><tspan class="st4">torage for Analyzers </tspan><tspan
+ x="4" dy="1.233em" class="st4">manager of plugin </tspan><tspan x="4" dy="1.2em" class="st4">instances</tspan></text> </g>
+ <g id="shape6-27" transform="translate(471.117,-330.155)">
+ <title>Rectangle.72</title>
+ <desc>NFSParserThread : std::thread</desc>
+ <rect x="0" y="557.008" width="204.945" height="38.2676" class="st1"/>
+ <text x="4" y="570.01" class="st2">NFSParserThread : std::thread</text> </g>
+ <g id="shape7-30" transform="translate(883.146,-196.142) rotate(52.9285)">
+ <title>Sheet.7</title>
+ <desc>Exception</desc>
+ <path d="M0 595.28 L104.39 595.28" class="st5"/>
+ <rect x="36.2592" y="590.472" width="31.8744" height="9.59985" class="st7"/>
+ <text x="36.26" y="597.67" class="st8">Exception</text> </g>
+ <g id="shape8-38" transform="translate(-198.71,-0.661027) rotate(-64.3256)">
+ <title>Sheet.8</title>
+ <desc>Exception</desc>
+ <path d="M0 595.28 L104.91 595.28" class="st9"/>
+ <rect x="36.5169" y="590.472" width="31.8744" height="9.59985" class="st7"/>
+ <text x="36.52" y="597.67" class="st8">Exception</text> </g>
+ <g id="shape9-46" transform="translate(106.778,-130.394)">
+ <title>Rectangle.98</title>
+ <desc>FiltrationImpl&#60;Reader, Writer&#62; : ProcessingThread</desc>
+ <rect x="0" y="408.189" width="230.544" height="187.087" class="st1"/>
+ <text x="4" y="421.19" class="st2">FiltrationImpl&#60;Reader, Writer&#62; : ProcessingThread</text> </g>
+ <g id="shape10-49" transform="translate(-128.261,391.181) rotate(-90)">
+ <title>Rectangle.8</title>
+ <desc>Queue</desc>
+ <rect x="0" y="577.552" width="99.2125" height="17.724" class="st1"/>
+ <text x="36.01" y="588.91" class="st2">Queue</text> </g>
+ <g id="shape11-52" transform="translate(114.803,-138.339)">
+ <title>Rectangle.74</title>
+ <desc>FiltrationProcessor&#60;Reader, Writer&#62; parsing a packet matching...</desc>
+ <rect x="0" y="441.646" width="215.433" height="153.63" class="st1"/>
+ <text x="4" y="454.65" class="st2">FiltrationProcessor&#60;Reader, Writer&#62;<tspan x="4" dy="2.4em" class="st3">parsing a packet</tspan><tspan
+ x="4" dy="1.2em" class="st3">matching to session</tspan><tspan x="4" dy="1.2em" class="st3">reassembling TCP flows</tspan><tspan
+ x="4" dy="1.2em" class="st3">detecting RPC</tspan>/NFS/CIFS headers <tspan x="4" dy="1.2em" class="st3">copying headers to Writer</tspan>::Collection of session</text> </g>
+ <g id="shape12-60" transform="translate(277.169,-100.879)">
+ <title>Dynamic connector.83</title>
+ <path d="M0 552.72 L0 588.24 L0 595.28" class="st10"/>
+ </g>
+ <g id="shape13-66" transform="translate(232.441,-88.122)">
+ <title>Sheet.13</title>
+ <desc>out.pcap | ::stdout</desc>
+ <rect x="0" y="582.52" width="85.0393" height="12.7559" class="st12"/>
+ <text x="4.12" y="591.9" class="st2">out.pcap | ::stdout</text> </g>
+ <g id="shape14-69" transform="translate(231.717,-143.443)">
+ <title>Rectangle.18</title>
+ <desc>Dumping</desc>
+ <rect x="0" y="563.586" width="90.8975" height="31.6899" class="st1"/>
+ <text x="27" y="581.93" class="st2">Dumping</text> </g>
+ <g id="shape15-72" transform="translate(322.614,-188.977)">
+ <title>Dynamic connector.99</title>
+ <path d="M0 595.28 L37.11 595.28 L0 595.28 Z" class="st13"/>
+ <path d="M0 595.28 L37.11 595.28" class="st14"/>
+ </g>
+ <g id="shape16-75" transform="translate(458.148,-303.303)">
+ <title>Dynamic connector.100</title>
+ <path d="M0 595.28 L0 549.29 L5.93 549.29 L12.97 549.29" class="st10"/>
+ </g>
+ <g id="shape17-80" transform="translate(231.717,-174.096)">
+ <title>Rectangle.75</title>
+ <desc>Queuing</desc>
+ <rect x="0" y="565.512" width="90.8975" height="29.7638" class="st1"/>
+ <text x="28.21" y="582.89" class="st2">Queuing</text> </g>
+ <g id="shape18-83" transform="translate(428.562,-468.278) rotate(-0.112214)">
+ <title>Sheet.18</title>
+ <desc>Exception</desc>
+ <path d="M0 595.28 L72.37 595.28" class="st5"/>
+ <rect x="20.2466" y="590.472" width="31.8744" height="9.59985" class="st7"/>
+ <text x="20.25" y="597.67" class="st8">Exception</text> </g>
+ <g id="shape19-90" transform="translate(613.7,-147.403)">
+ <title>Rectangle.106</title>
+ <desc>IAnalyzer</desc>
+ <rect x="0" y="579.685" width="66.3269" height="15.5906" class="st1"/>
+ <text x="14.37" y="591.18" class="st2">IAnalyzer</text> </g>
+ <g id="shape20-93" transform="translate(359.719,-184.018)">
+ <title>Rectangle.114</title>
+ <desc>FiltrationData</desc>
+ <rect x="0" y="585.355" width="68.5909" height="9.92125" class="st1"/>
+ <text x="6.26" y="593.32" class="st2">FiltrationData</text> </g>
+ <g id="shape21-96" transform="translate(428.31,-188.973)">
+ <title>Dynamic connector.117</title>
+ <path d="M0 595.28 L29.84 595.28 L29.84 587.2 L29.84 580.16" class="st10"/>
+ </g>
+ <g id="shape22-101" transform="translate(613.7,-212.598)">
+ <title>Rectangle.118</title>
+ <desc>PrintAnalyzer</desc>
+ <rect x="0" y="579.685" width="66.3269" height="15.5906" class="st1"/>
+ <text x="5.86" y="591.18" class="st2">PrintAnalyzer</text> </g>
+ <g id="shape23-104" transform="translate(107.247,-362.835)">
+ <title>Rectangle.121</title>
+ <desc>std::vector&#60;std::unique_ptr&#60;ProcessingThread&#62;&#62;</desc>
+ <rect x="0" y="579.685" width="230.544" height="15.5906" class="st1"/>
+ <text x="15.93" y="591.18" class="st2">std::vector&#60;std::unique_ptr&#60;ProcessingThread&#62;&#62;</text> </g>
+ <g id="shape24-107" transform="translate(222.523,-345.823)">
+ <title>Dynamic connector.131</title>
+ <path d="M0 595.28 L0 591.86 L0 578.27" class="st15"/>
+ </g>
+ <g id="shape25-113" transform="translate(680.027,-220.393)">
+ <title>Dynamic connector.136</title>
+ <path d="M0 595.28 L14.51 595.28 L21.55 595.28" class="st10"/>
+ </g>
+ <g id="shape26-118" transform="translate(502.095,-459.921)">
+ <title>Rectangle.6</title>
+ <desc>SignalHandler : std::thread</desc>
+ <rect x="0" y="578.268" width="121.526" height="17.0079" class="st1"/>
+ <text x="6.57" y="589.27" class="st2">SignalHandler : std::thread</text> </g>
+ <g id="shape27-121" transform="translate(434.834,-510.236)">
+ <title>Sheet.27</title>
+ <desc>SIGINT</desc>
+ <rect x="0" y="584.043" width="41.3857" height="11.2326" class="st16"/>
+ <text x="4.33" y="593.26" class="st17">SIGINT</text> </g>
+ <g id="shape28-124" transform="translate(735.85,-441.599) rotate(27.785)">
+ <title>Sheet.28</title>
+ <path d="M0 595.28 L65.41 595.28 L71.45 595.28" class="st18"/>
+ </g>
+ <g id="shape30-130" transform="translate(646.867,-107.562)">
+ <title>Dynamic connector.154</title>
+ <path d="M0 595.28 L0 561.48 L0 555.44" class="st19"/>
+ </g>
+ <g id="shape31-136" transform="translate(481.609,-147.403)">
+ <title>Rectangle.155</title>
+ <desc>PluginInstance</desc>
+ <rect x="0" y="579.685" width="68.5909" height="15.5906" class="st1"/>
+ <text x="4.67" y="591.18" class="st2">PluginInstance</text> </g>
+ <g id="shape33-139" transform="translate(447.874,-60.6614)">
+ <title>Sheet.33</title>
+ <desc>const char* usage(); IAnalyzer* create(const char* params); d...</desc>
+ <path d="M0 595.28 L161.57 595.28 L161.57 556.72 L0 556.72 L0 595.28 Z" class="st20"/>
+ <text x="92.25" y="564" class="st8">const char* usage();<tspan x="30.48" dy="1.2em" class="st3">IAnalyzer</tspan>* create(const char* params);<tspan
+ x="91.91" dy="1.2em" class="st3">destroy</tspan>(IAnalyzer*); <tspan x="7.44" dy="1.2em" class="st3">const AnalyzerRequirements</tspan>* requirements();</text> </g>
+ <g id="shape34-145" transform="translate(449.827,-101.339)">
+ <title>Sheet.34</title>
+ <desc>libbreakdown.so</desc>
+ <rect x="0" y="585.355" width="78.2991" height="9.92125" class="st16"/>
+ <text x="4.37" y="593.32" class="st21">libbreakdown.so</text> </g>
+ <g id="shape35-148" transform="translate(495.782,-116.358)">
+ <title>Dynamic connector.160</title>
+ <path d="M0 595.28 L20.12 595.28 L20.12 577.83 L20.12 564.24" class="st15"/>
+ </g>
+ <g id="shape36-153" transform="translate(646.867,-162.994)">
+ <title>Dynamic connector.161</title>
+ <path d="M0 545.68 L0 589.24 L0 595.28" class="st19"/>
+ </g>
+ <g id="shape37-158" transform="translate(515.901,-162.988)">
+ <title>Dynamic connector.162</title>
+ <path d="M0 595.28 L0 567.76 L0 554.17" class="st15"/>
+ </g>
+ <g id="shape38-163" transform="translate(140.315,-70.4013)">
+ <title>Sheet.38</title>
+ <desc>Optional CHILD Process with external tool for compression, li...</desc>
+ <path d="M0 595.28 L93.54 595.28 L93.54 552.29 L0 552.29 L0 595.28 Z" class="st20"/>
+ <text x="7.99" y="566.58" class="st22">Optional CHILD Process<tspan x="12.26" dy="1.2em" class="st23">with external tool for </tspan><tspan
+ x="8.69" dy="1.2em" class="st23">compression</tspan><tspan class="st23">, </tspan><tspan class="st23">like </tspan>bzip2</text> </g>
+ <g id="shape39-170" transform="translate(608.03,-340.157)">
+ <title>Rectangle.169</title>
+ <desc>RPCSessions</desc>
+ <rect x="0" y="575.433" width="59.5275" height="19.8425" class="st1"/>
+ <text x="4.74" y="588.43" class="st2">RPCSessions</text> </g>
+ <g id="shape40-173" transform="translate(701.785,-62.5133)">
+ <title>Rectangle.186</title>
+ <desc>Plugin output (gnuplot)</desc>
+ <rect x="0" y="550.222" width="49.6062" height="45.0535" class="st1"/>
+ <text x="12.32" y="563.22" class="st2">Plugin <tspan x="10.94" dy="1.2em" class="st3">output</tspan><tspan x="6.08"
+ dy="1.2em" class="st3">(</tspan>gnuplot)</text> </g>
+ <g id="shape41-178" transform="translate(680.027,-85.039)">
+ <title>Dynamic connector.187</title>
+ <path d="M0 595.28 L14.72 595.28 L21.76 595.28" class="st10"/>
+ </g>
+ <g id="group42-183" transform="translate(253.701,-472.492)">
+ <title>Sheet.42</title>
+ <g id="shape43-184" transform="translate(-7.99361E-015,-36.7016)">
+ <title>Sheet.43</title>
+ <desc>argc</desc>
+ <rect x="0" y="584.544" width="28.3465" height="10.7323" class="st16"/>
+ <text x="5.57" y="592.91" class="st2">argc</text> </g>
+ <g id="shape44-187" transform="translate(609.445,560.576) rotate(90)">
+ <title>Sheet.44</title>
+ <path d="M0 595.28 L28.66 595.28 L34.7 595.28" class="st18"/>
+ </g>
+ </g>
+ <g id="group45-192" transform="translate(274.362,-472.793)">
+ <title>Sheet.45</title>
+ <g id="shape46-193" transform="translate(-5.9952E-015,-36.4008)">
+ <title>Sheet.46</title>
+ <desc>argv[]</desc>
+ <rect x="0" y="584.544" width="34.6142" height="10.7323" class="st16"/>
+ <text x="5.49" y="592.91" class="st2">argv[]</text> </g>
+ <g id="shape47-196" transform="translate(612.831,560.576) rotate(90)">
+ <title>Sheet.47</title>
+ <path d="M0 595.28 L28.66 595.28 L34.7 595.28" class="st18"/>
+ </g>
+ </g>
+ <g id="shape48-201" transform="translate(226.772,-432.657)">
+ <title>Rectangle.194</title>
+ <desc>Parameters</desc>
+ <rect x="0" y="545.234" width="109.134" height="50.0417" class="st24"/>
+ <text x="31.11" y="588.28" class="st2">Parameters</text> </g>
+ <g id="shape49-204" transform="translate(235.087,-452.65)">
+ <title>Rectangle.43</title>
+ <desc>CmdlineParser&#60;CLI&#62;</desc>
+ <rect x="0" y="575.433" width="90.8975" height="19.8425" class="st1"/>
+ <text x="4.84" y="588.35" class="st2">CmdlineParser&#60;CLI&#62;</text> </g>
+ <g id="shape50-207" transform="translate(476.219,-510.236)">
+ <title>Sheet.50</title>
+ <desc>SIGCHLD</desc>
+ <rect x="0" y="584.043" width="53.8582" height="11.2326" class="st16"/>
+ <text x="5.72" y="593.26" class="st17">SIGCHLD</text> </g>
+ <g id="shape51-210" transform="translate(14.1732,-189.921)">
+ <title>Sheet.51</title>
+ <desc>Offline Analysis</desc>
+ <rect x="0" y="575.276" width="85.0393" height="20" class="st25"/>
+ <text x="4.98" y="588.88" class="st17">Offline Analysis</text> </g>
+ <g id="shape52-213" transform="translate(14.1732,-158.583)">
+ <title>Sheet.52</title>
+ <desc>Online Analysis</desc>
+ <rect x="0" y="575.276" width="85.0393" height="20" class="st25"/>
+ <text x="5.49" y="588.88" class="st17">Online Analysis</text> </g>
+ <g id="shape53-216" transform="translate(15.5433,-140.236)">
+ <title>Sheet.53</title>
+ <desc>Online Dumping</desc>
+ <rect x="0" y="575.276" width="87.9684" height="20" class="st25"/>
+ <text x="4.47" y="588.88" class="st17">Online Dumping</text> </g>
+ <g id="shape54-219" transform="translate(926.702,-340.288) rotate(44.3969)">
+ <title>Sheet.54</title>
+ <path d="M0 595.28 L41.57 595.28 L47.61 595.28" class="st18"/>
+ </g>
+ <g id="shape55-224" transform="translate(638.613,-459.921)">
+ <title>Rectangle.180</title>
+ <desc>Log</desc>
+ <rect x="0" y="578.268" width="34.6142" height="17.0079" class="st1"/>
+ <text x="10.21" y="589.77" class="st2">Log</text> </g>
+ <g id="shape56-227" transform="translate(673.227,-468.425)">
+ <title>Dynamic connector.184</title>
+ <path d="M0 595.28 L21.31 595.28 L28.35 595.28" class="st10"/>
+ </g>
+ <g id="shape57-232" transform="translate(638.613,-435.472)">
+ <title>Rectangle.231</title>
+ <desc>Out</desc>
+ <rect x="0" y="578.268" width="34.6142" height="17.0079" class="st1"/>
+ <text x="9.69" y="589.77" class="st2">Out</text> </g>
+ <g id="shape58-235" transform="translate(673.227,-443.976)">
+ <title>Dynamic connector.233</title>
+ <path d="M0 595.28 L21.31 595.28 L28.35 595.28" class="st10"/>
+ </g>
+ <g id="shape59-240" transform="translate(222.515,-398.451)">
+ <title>Dynamic connector.239</title>
+ <path d="M0 595.28 L0.06 587.3 L0.16 573.71" class="st15"/>
+ </g>
+ <g id="shape60-245" transform="translate(557.005,-398.451)">
+ <title>Dynamic connector.240</title>
+ <path d="M8.51 595.28 L0 595.28 L0 587.3 L0 573.71" class="st15"/>
+ </g>
+ <g id="shape61-250" transform="translate(107.247,-330.236)">
+ <title>Rectangle.242</title>
+ <desc>ProcessingThread : std::thread</desc>
+ <rect x="0" y="579.685" width="230.544" height="15.5906" class="st1"/>
+ <text x="53.26" y="591.18" class="st2">ProcessingThread : std::thread</text> </g>
+ <g id="shape62-253" transform="translate(219.685,-317.478)">
+ <title>Dynamic connector.245</title>
+ <path d="M0 595.28 L0 589.96 L0 588.56 L0 582.52" class="st19"/>
+ </g>
+ <g id="shape63-258" transform="translate(18,-182.835)">
+ <title>Sheet.63</title>
+ <desc>in.pcap | ::stdin</desc>
+ <rect x="0" y="582.52" width="72.5668" height="12.7559" class="st16"/>
+ <text x="4.21" y="591.4" class="st2">in.pcap | ::stdin</text> </g>
+ <g id="shape64-261" transform="translate(49.6062,-152.362)">
+ <title>Sheet.64</title>
+ <desc>eth0</desc>
+ <rect x="0" y="582.52" width="26.6614" height="12.7559" class="st16"/>
+ <text x="4.01" y="591.4" class="st2">eth0</text> </g>
+ <g id="shape65-264" transform="translate(137.96,-174.331)">
+ <title>Rectangle.11</title>
+ <desc>FileReader</desc>
+ <rect x="0" y="564.245" width="70.3861" height="31.0307" class="st1"/>
+ <text x="13.66" y="582.76" class="st2">FileReader</text> </g>
+ <g id="shape66-267" transform="translate(137.96,-142.716)">
+ <title>Rectangle.10</title>
+ <desc>CaptureReader</desc>
+ <rect x="0" y="563.586" width="70.3861" height="31.6899" class="st1"/>
+ <text x="4.52" y="582.43" class="st2">CaptureReader</text> </g>
+ <g id="shape67-270" transform="translate(715.512,389.914) rotate(90)">
+ <title>Rectangle.21</title>
+ <desc>libpcap</desc>
+ <rect x="0" y="577.552" width="62.6456" height="17.724" class="st1"/>
+ <text x="16.64" y="589.41" class="st2">libpcap</text> </g>
+ <g id="shape68-273" transform="translate(76.2676,-158.563)">
+ <title>Dynamic connector.16</title>
+ <path d="M0 595.1 L48.93 595.1 L48.93 595.28 L54.65 595.28 L61.69 595.28" class="st10"/>
+ </g>
+ <g id="shape69-278" transform="translate(90.5668,-189.921)">
+ <title>Dynamic connector.17</title>
+ <path d="M0 595.28 L40.35 595.28 L47.39 595.28" class="st10"/>
+ </g>
+ <g id="shape70-283" transform="translate(538.585,-303.311)">
+ <title>Dynamic connector.260</title>
+ <desc>NFS Procedure (Call+Reply)</desc>
+ <path d="M0 568.44 L0 581.86 L0 588.24 L0 595.28" class="st10"/>
+ <rect x="-10.6519" y="573.113" width="88.4018" height="9.59985" class="st7"/>
+ <text x="-10.65" y="580.31" class="st8">NFS Procedure (Call+Reply)</text> </g>
+ <g id="shape71-290" transform="translate(701.574,-438.36)">
+ <title>Sheet.71</title>
+ <desc>::stdout</desc>
+ <rect x="0" y="584.043" width="41.3857" height="11.2326" class="st12"/>
+ <text x="4.82" y="592.66" class="st2">::stdout</text> </g>
+ <g id="shape72-293" transform="translate(701.574,-462.809)">
+ <title>Sheet.72</title>
+ <desc>application.log</desc>
+ <rect x="0" y="584.043" width="68.0314" height="11.2326" class="st12"/>
+ <text x="4.08" y="592.66" class="st2">application.log</text> </g>
+ <g id="shape73-296" transform="translate(701.574,-214.777)">
+ <title>Sheet.73</title>
+ <desc>::stdout</desc>
+ <rect x="0" y="584.043" width="41.3857" height="11.2326" class="st12"/>
+ <text x="4.82" y="592.66" class="st2">::stdout</text> </g>
+ <g id="shape74-299" transform="translate(22.6772,-92.4952)">
+ <title>Sheet.74</title>
+ <path d="M0 537.17 L76.54 538.3 C97.56 540 184.96 539.06 235.7 538.66 C241.39 538.62 246.61 538.58 246.61 595.28 L0 537.17
+ Z" class="st13"/>
+ <path d="M0 537.17 L76.54 538.3 C97.56 540 184.96 539.06 235.7 538.66 C241.39 538.62 246.61 538.58 246.61 595.28"
+ class="st26"/>
+ </g>
+ <g id="shape75-302" transform="translate(21.2598,-93.1195)">
+ <title>Sheet.75</title>
+ <path d="M0 489.97 C165.83 489.97 297.51 490.54 380.25 491.08 C395.11 491.18 408.39 491.27 419.53 484.3 C429.79 476.23
+ 430.77 452.47 431.47 415.76 C431.92 392.23 432.26 363.37 441.77 346.48 C458.64 316.52 504.38 324.17 513.99
+ 355.05 C516.8 364.08 516.52 375.11 516.26 395.4 C515.93 421.13 515.64 461.76 516.36 499.21 C516.89 526.45
+ 517.95 552 523.64 568.03 C533.13 594.74 555.48 594.96 576.84 595.09 C627.23 595.41 672.09 595.22 742.96
+ 595.22" class="st27"/>
+ </g>
+ <g id="shape76-305" transform="translate(22.6772,-77.5079)">
+ <title>Sheet.76</title>
+ <path d="M0 504.2 L2.83 504.2 C82.39 502.71 183.59 507.39 196.58 500.36 C199.05 499.02 198.33 497.26 201.5 496.08 C212.42
+ 492.01 269.52 494.8 339.97 494.12 C371.02 493.81 404.66 492.83 422.01 490.46 C432.11 489.07 436.69 487.21
+ 439.04 479.27 C443.9 462.88 439.29 420.6 439.98 391.02 C440.44 371.23 443.27 357.13 447.91 347.19 C460.66
+ 319.9 487.05 324.09 497.95 339.22 C500.82 343.21 502.62 347.96 503.54 358.27 C506.95 396.25 498.58 509.66
+ 509.55 557.61 C515.89 585.33 528.7 591.17 565.82 593.38 C573.89 593.86 583.11 594.17 593.44 594.4 C633.98
+ 595.28 691.65 594.83 742.68 594.83 L0 504.2 Z" class="st13"/>
+ <path d="M0 504.2 L2.83 504.2 C82.39 502.71 183.59 507.39 196.58 500.36 C199.05 499.02 198.33 497.26 201.5 496.08 C212.42
+ 492.01 269.52 494.8 339.97 494.12 C371.02 493.81 404.66 492.83 422.01 490.46 C432.11 489.07 436.69 487.21
+ 439.04 479.27 C443.9 462.88 439.29 420.6 439.98 391.02 C440.44 371.23 443.27 357.13 447.91 347.19 C460.66
+ 319.9 487.05 324.09 497.95 339.22 C500.82 343.21 502.62 347.96 503.54 358.27 C506.95 396.25 498.58 509.66
+ 509.55 557.61 C515.89 585.33 528.7 591.17 565.82 593.38 C573.89 593.86 583.11 594.17 593.44 594.4 C633.98
+ 595.28 691.65 594.83 742.68 594.83" class="st28"/>
+ </g>
+ <g id="shape77-308" transform="translate(589.61,-220.396)">
+ <title>Dynamic connector.285</title>
+ <path d="M24.09 595.28 L13.59 595.28 L0 595.28" class="st15"/>
+ </g>
+ <g id="shape78-313" transform="translate(14.1732,-170.079)">
+ <title>Sheet.78</title>
+ <desc>Offline Dumping</desc>
+ <rect x="0" y="575.276" width="90.8975" height="20" class="st25"/>
+ <text x="5.42" y="588.88" class="st17">Offline Dumping</text> </g>
+ <g id="shape79-316" transform="translate(22.6772,-92.1222)">
+ <title>Sheet.79</title>
+ <path d="M0 507.12 C144.57 510.52 186.41 506.25 199.87 510.7 C212.43 514.86 200.24 526.62 239.68 525.4 C248.84 525.11
+ 260.79 524.13 260.79 595.28 L0 507.12 Z" class="st13"/>
+ <path d="M0 507.12 C144.57 510.52 186.41 506.25 199.87 510.7 C212.43 514.86 200.24 526.62 239.68 525.4 C248.84 525.11
+ 260.79 524.13 260.79 595.28" class="st29"/>
+ </g>
+ <g id="shape80-319" transform="translate(535.747,-510.489)">
+ <title>Sheet.80</title>
+ <desc>SIGHUP</desc>
+ <rect x="0" y="584.043" width="46.8222" height="11.2326" class="st16"/>
+ <text x="4.67" y="593.26" class="st17">SIGHUP</text> </g>
+ <g id="shape81-322" transform="translate(1156.54,86.7404) rotate(90)">
+ <title>Sheet.81</title>
+ <path d="M0 595.28 L25.57 595.28 L31.61 595.28" class="st18"/>
+ </g>
+ <g id="shape82-327" transform="translate(586.771,-510.342)">
+ <title>Sheet.82</title>
+ <desc>SIGTERM</desc>
+ <rect x="0" y="584.043" width="53.8582" height="11.2326" class="st16"/>
+ <text x="4.63" y="593.26" class="st17">SIGTERM</text> </g>
+ <g id="shape83-330" transform="translate(1036.95,500.628) rotate(134.293)">
+ <title>Sheet.83</title>
+ <path d="M0 595.28 L40.64 595.28 L46.68 595.28" class="st18"/>
+ </g>
+ <g id="shape84-335" transform="translate(647.574,-510.236)">
+ <title>Sheet.84</title>
+ <desc>SIGWINCH</desc>
+ <rect x="0" y="584.043" width="60.9448" height="11.2326" class="st16"/>
+ <text x="4.76" y="593.26" class="st17">SIGWINCH</text> </g>
+ <g id="shape85-338" transform="translate(967.675,597.783) rotate(149.566)">
+ <title>Sheet.85</title>
+ <path d="M0 595.28 L59.71 595.28 L65.75 595.28" class="st18"/>
+ </g>
+ <g id="group86-343" transform="translate(351.495,-191.968)">
+ <title>Note</title>
+ <desc>Session + timestamp + raw RPC/NFS/CIFS message</desc>
+ <g id="group87-344">
+ <title>shape126-347</title>
+ <desc>Session + timestamp + raw RPC/NFS/CIFS message</desc>
+ <g id="shape92-345" transform="translate(1.59872E-013,-27.7128)">
+ <title>Sheet.92</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 561.26 L76.54 552.76 L0 552.76 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape93-347" transform="translate(42.5199,-1.97279)">
+ <title>Sheet.93</title>
+ <path d="M0 569.54 L0 595.28 L0 569.54 Z" class="st13"/>
+ <path d="M0 569.54 L0 595.28" class="st31"/>
+ </g>
+ <g id="shape94-350" transform="translate(1.59872E-013,-27.7128)">
+ <title>Sheet.94</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 561.26 L76.54 552.76 L0 552.76 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape87-352">
+ <text x="6.18" y="539.1" class="st8">Session + timestamp +<tspan x="12.91" dy="1.2em" class="st3">raw RPC</tspan>/NFS/CIFS <tspan
+ x="28.42" dy="1.2em" class="st3">message</tspan></text> </g>
+ </g>
+ <g id="shape95-356" transform="translate(75.6853,-60.8784)">
+ <title>Sheet.95</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group96-358" transform="translate(589.604,-263.39)">
+ <title>Note.133</title>
+ <desc>Pass NFS operations to each Analyzer</desc>
+ <g id="group97-359">
+ <title>shape133-370</title>
+ <desc>Pass NFS operations to each Analyzer</desc>
+ <g id="shape102-360" transform="translate(111.97,-24.3228)">
+ <title>Sheet.102</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 574.02 L93.54 565.51 L0 565.51 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape103-362" transform="translate(-4.8761E-013,-1.97279)">
+ <title>Sheet.103</title>
+ <path d="M111.97 572.93 L0 595.28 L111.97 572.93 Z" class="st13"/>
+ <path d="M111.97 572.93 L0 595.28" class="st31"/>
+ </g>
+ <g id="shape104-365" transform="translate(111.97,-24.3228)">
+ <title>Sheet.104</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 574.02 L93.54 565.51 L0 565.51 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape97-367">
+ <text x="115.97" y="554.07" class="st8">Pass NFS operations to each <tspan x="115.97" dy="1em" class="st3">Analyzer</tspan></text> </g>
+ </g>
+ <g id="shape105-370" transform="translate(204.663,-44.7325)">
+ <title>Sheet.105</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="shape112-372" transform="translate(312.823,-554.219)">
+ <title>Sheet.112</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 574.02 L76.54 565.51 L0 565.51 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape113-374" transform="translate(397.862,-521.471)">
+ <title>Sheet.113</title>
+ <path d="M0 582.56 L40.73 595.28 L0 582.56 Z" class="st13"/>
+ <path d="M0 582.56 L40.73 595.28" class="st31"/>
+ </g>
+ <g id="shape107-377" transform="translate(317.136,-522.142)">
+ <title>shape145-393</title>
+ <desc>Exit via (Ctrl-C)</desc>
+ <text x="4.28" y="574.86" class="st2">Exit via (Ctrl-C)</text> </g>
+ <g id="group116-379" transform="translate(669.664,-226.215)">
+ <title>Note.163</title>
+ <desc>Builtin Analyzer for trace-out NFSv3/NFSv4/NFSv41/CIFSv2 Proc...</desc>
+ <g id="group117-380">
+ <title>shape163-414</title>
+ <desc>Builtin Analyzer for trace-out NFSv3/NFSv4/NFSv41/CIFSv2 Proc...</desc>
+ <g id="shape122-381" transform="translate(31.91,-11.1828)">
+ <title>Sheet.122</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 565.51 L93.54 557.01 L0 557.01 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape123-383" transform="translate(-4.19664E-014,-1.97279)">
+ <title>Sheet.123</title>
+ <path d="M31.91 586.07 L0 595.28 L31.91 586.07 Z" class="st13"/>
+ <path d="M31.91 586.07 L0 595.28" class="st31"/>
+ </g>
+ <g id="shape124-386" transform="translate(31.91,-11.1828)">
+ <title>Sheet.124</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 565.51 L93.54 557.01 L0 557.01 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape117-388">
+ <text x="35.91" y="557.75" class="st8">Builtin Analyzer for trace-<tspan x="35.91" dy="1.2em" class="st3">out NFSv</tspan>3/NFSv4/NFSv41/<tspan
+ x="35.91" dy="1.2em" class="st3">CIFSv</tspan>2 Procedures to stdout</text> </g>
+ </g>
+ <g id="shape125-392" transform="translate(124.603,-40.0965)">
+ <title>Sheet.125</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group126-394" transform="translate(667.554,-336.054)">
+ <title>Note.170</title>
+ <desc>Storage for RPC calls related to a session</desc>
+ <g id="group127-395">
+ <title>shape170-437</title>
+ <desc>Storage for RPC calls related to a session</desc>
+ <g id="shape132-396" transform="translate(34.02,-1.97279)">
+ <title>Sheet.132</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 578.27 L93.54 569.76 L0 569.76 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape133-398" transform="translate(3.89688E-013,-14.2128)">
+ <title>Sheet.133</title>
+ <path d="M34.02 595.07 L0 595.28 L34.02 595.07 Z" class="st13"/>
+ <path d="M34.02 595.07 L0 595.28" class="st31"/>
+ </g>
+ <g id="shape134-401" transform="translate(34.02,-1.97279)">
+ <title>Sheet.134</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 578.27 L93.54 569.76 L0 569.76 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape127-403">
+ <text x="38.02" y="578.54" class="st8">Storage for RPC calls related <tspan x="38.02" dy="1em" class="st3">to a session</tspan></text> </g>
+ </g>
+ <g id="shape135-406" transform="translate(126.713,-18.1307)">
+ <title>Sheet.135</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group136-408" transform="translate(347.531,-59.3936)">
+ <title>Note.177</title>
+ <desc>Analysis module API</desc>
+ <g id="group137-409">
+ <title>shape177-458</title>
+ <desc>Analysis module API</desc>
+ <g id="shape142-410" transform="translate(4.55636E-013,-1.97279)">
+ <title>Sheet.142</title>
+ <path d="M0 595.28 L66.33 595.28 L66.33 569.76 L57.82 561.26 L0 561.26 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape143-412" transform="translate(66.3299,-18.1417)">
+ <title>Sheet.143</title>
+ <path d="M0 595.28 L28.06 595.28" class="st31"/>
+ </g>
+ <g id="shape144-415" transform="translate(4.55636E-013,-1.97279)">
+ <title>Sheet.144</title>
+ <path d="M0 595.28 L66.33 595.28 L66.33 569.76 L57.82 561.26 L0 561.26 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape137-417">
+ <text x="6.74" y="573.89" class="st8">Analysis module <tspan x="27.77" dy="1.2em" class="st3">API</tspan></text> </g>
+ </g>
+ <g id="shape145-420" transform="translate(56.9729,-26.6346)">
+ <title>Sheet.145</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group146-422" transform="translate(673.224,-471.397)">
+ <title>Note.181</title>
+ <desc>Global logger for traces</desc>
+ <g id="group147-423">
+ <title>shape181-479</title>
+ <desc>Global logger for traces</desc>
+ <g id="shape152-424" transform="translate(28.35,-13.3228)">
+ <title>Sheet.152</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 581.1 L93.54 572.6 L0 572.6 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape153-426" transform="translate(7.19425E-014,-1.97279)">
+ <title>Sheet.153</title>
+ <path d="M28.35 583.93 L0 595.28 L28.35 583.93 Z" class="st13"/>
+ <path d="M28.35 583.93 L0 595.28" class="st31"/>
+ </g>
+ <g id="shape154-429" transform="translate(28.35,-13.3228)">
+ <title>Sheet.154</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 581.1 L93.54 572.6 L0 572.6 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape147-431">
+ <text x="32.35" y="572.61" class="st8">Global logger for traces</text> </g>
+ </g>
+ <g id="shape155-433" transform="translate(121.043,-26.646)">
+ <title>Sheet.155</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group156-435" transform="translate(135.874,-480.726)">
+ <title>Note.196</title>
+ <desc>Wrapper over CLI with validation</desc>
+ <g id="group157-436">
+ <title>shape196-498</title>
+ <desc>Wrapper over CLI with validation</desc>
+ <g id="shape162-437" transform="translate(-2.23821E-013,-25.9628)">
+ <title>Sheet.162</title>
+ <path d="M0 595.28 L90.9 595.28 L90.9 574.02 L82.39 565.51 L0 565.51 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape163-439" transform="translate(90.8999,-1.97279)">
+ <title>Sheet.163</title>
+ <path d="M0 571.29 L15.4 595.28 L0 571.29 Z" class="st13"/>
+ <path d="M0 571.29 L15.4 595.28" class="st31"/>
+ </g>
+ <g id="shape164-442" transform="translate(-2.23821E-013,-25.9628)">
+ <title>Sheet.164</title>
+ <path d="M0 595.28 L90.9 595.28 L90.9 574.02 L82.39 565.51 L0 565.51 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape157-444">
+ <text x="9.96" y="551.93" class="st2">Wrapper over CLI <tspan x="15.24" dy="1em" class="st3">with validation</tspan></text> </g>
+ </g>
+ <g id="shape165-447" transform="translate(81.5436,-46.3725)">
+ <title>Sheet.165</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group166-449" transform="translate(407.479,-519.498)">
+ <title>Note.212</title>
+ <desc>Compression Process complete</desc>
+ <g id="group167-450">
+ <title>shape212-519</title>
+ <desc>Compression Process complete</desc>
+ <g id="shape172-451" transform="translate(3.83693E-013,-14.6928)">
+ <title>Sheet.172</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 578.27 L76.54 569.76 L0 569.76 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape173-453" transform="translate(85.0399,-1.97279)">
+ <title>Sheet.173</title>
+ <path d="M0 582.56 L1.03 595.28 L0 582.56 Z" class="st13"/>
+ <path d="M0 582.56 L1.03 595.28" class="st34"/>
+ </g>
+ <g id="shape174-456" transform="translate(3.83693E-013,-14.6928)">
+ <title>Sheet.174</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 578.27 L76.54 569.76 L0 569.76 L0 595.28 Z" class="st35"/>
+ </g>
+ <g id="shape167-458">
+ <text x="8.05" y="565.82" class="st8">Compression Process <tspan x="27.18" dy="1em" class="st3">complete</tspan></text> </g>
+ </g>
+ <g id="shape175-461" transform="translate(75.6853,-30.8506)">
+ <title>Sheet.175</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st36"/>
+ </g>
+ </g>
+ <g id="group176-463" transform="translate(673.224,-396.999)">
+ <title>Note.234</title>
+ <desc>User messages regarding to verbose level</desc>
+ <g id="group177-464">
+ <title>shape234-540</title>
+ <desc>User messages regarding to verbose level</desc>
+ <g id="shape182-465" transform="translate(28.35,-1.97279)">
+ <title>Sheet.182</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 578.27 L93.54 569.76 L0 569.76 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape183-467" transform="translate(7.19425E-014,-27.4928)">
+ <title>Sheet.183</title>
+ <path d="M28.35 595.28 L0 581.57 L28.35 595.28 Z" class="st13"/>
+ <path d="M28.35 595.28 L0 581.57" class="st31"/>
+ </g>
+ <g id="shape184-470" transform="translate(28.35,-1.97279)">
+ <title>Sheet.184</title>
+ <path d="M0 595.28 L102.05 595.28 L102.05 578.27 L93.54 569.76 L0 569.76 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape177-472">
+ <text x="32.35" y="578.54" class="st8">User messages regarding to <tspan x="32.35" dy="1em" class="st3">verbose level</tspan></text> </g>
+ </g>
+ <g id="shape185-475" transform="translate(121.043,-18.1307)">
+ <title>Sheet.185</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group186-477" transform="translate(503.149,-519.748)">
+ <title>Note.305</title>
+ <desc>Terminal is closed</desc>
+ <g id="group187-478">
+ <title>shape305-561</title>
+ <desc>Terminal is closed</desc>
+ <g id="shape192-479" transform="translate(1.43885E-013,-14.4428)">
+ <title>Sheet.192</title>
+ <path d="M0 595.28 L75.12 595.28 L75.12 581.1 L66.61 572.6 L0 572.6 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape193-481" transform="translate(44.6699,-1.97279)">
+ <title>Sheet.193</title>
+ <path d="M0 582.81 L7.82 595.28 L0 582.81 Z" class="st13"/>
+ <path d="M0 582.81 L7.82 595.28" class="st31"/>
+ </g>
+ <g id="shape194-484" transform="translate(1.43885E-013,-14.4428)">
+ <title>Sheet.194</title>
+ <path d="M0 595.28 L75.12 595.28 L75.12 581.1 L66.61 572.6 L0 572.6 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape187-486">
+ <text x="8.51" y="571.49" class="st8">Terminal is closed</text> </g>
+ </g>
+ <g id="shape195-488" transform="translate(65.7641,-27.766)">
+ <title>Sheet.195</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group196-490" transform="translate(590.426,-521.588)">
+ <title>Note.308</title>
+ <desc>Termination request</desc>
+ <g id="group197-491">
+ <title>shape308-580</title>
+ <desc>Termination request</desc>
+ <g id="shape202-492" transform="translate(1.59872E-013,-12.6028)">
+ <title>Sheet.202</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 581.1 L76.54 572.6 L0 572.6 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape203-494" transform="translate(30.36,-1.97279)">
+ <title>Sheet.203</title>
+ <path d="M5.89 584.65 L0 595.28 L5.89 584.65 Z" class="st13"/>
+ <path d="M5.89 584.65 L0 595.28" class="st31"/>
+ </g>
+ <g id="shape204-497" transform="translate(1.59872E-013,-12.6028)">
+ <title>Sheet.204</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 581.1 L76.54 572.6 L0 572.6 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape197-499">
+ <text x="9.2" y="573.33" class="st8">Termination request</text> </g>
+ </g>
+ <g id="shape205-501" transform="translate(75.6853,-25.926)">
+ <title>Sheet.205</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="group206-503" transform="translate(688.629,-519.498)">
+ <title>Note.312</title>
+ <desc>Terminal changes size</desc>
+ <g id="group207-504">
+ <title>shape312-599</title>
+ <desc>Terminal changes size</desc>
+ <g id="shape212-505" transform="translate(-1.19904E-013,-14.6928)">
+ <title>Sheet.212</title>
+ <path d="M0 595.28 L90.9 595.28 L90.9 581.1 L82.39 572.6 L0 572.6 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape213-507" transform="translate(1.15142E-016,-1.97279)">
+ <title>Sheet.213</title>
+ <path d="M0 582.56 L0.02 595.28 L0 582.56 Z" class="st13"/>
+ <path d="M0 582.56 L0.02 595.28" class="st31"/>
+ </g>
+ <g id="shape214-510" transform="translate(-1.19904E-013,-14.6928)">
+ <title>Sheet.214</title>
+ <path d="M0 595.28 L90.9 595.28 L90.9 581.1 L82.39 572.6 L0 572.6 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape207-512">
+ <text x="9.96" y="571.24" class="st8">Terminal changes size</text> </g>
+ </g>
+ <g id="shape215-514" transform="translate(81.5436,-28.016)">
+ <title>Sheet.215</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+ <g id="shape220-516" transform="translate(313.228,-551.336)">
+ <title>Sheet.220</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 581.1 L76.54 572.6 L0 572.6 L0 595.28 Z" class="st30"/>
+ </g>
+ <g id="shape222-518" transform="translate(312.661,-534.195)">
+ <title>Sheet.222</title>
+ <path d="M0 595.28 L85.04 595.28 L85.04 581.1 L76.54 572.6 L0 572.6 L0 595.28 Z" class="st32"/>
+ </g>
+ <g id="shape223-520" transform="translate(388.346,-547.648)">
+ <title>Sheet.223</title>
+ <path d="M0.85 594.43 L9.35 594.43 L9.35 595.28 L9.35 594.43 L0.85 585.92 L0 585.92 L0.85 585.92 L0.85 594.43 Z"
+ class="st33"/>
+ </g>
+ </g>
+</svg>
diff --git a/docs/logo.png b/docs/pictures/logo.png
index 649e644..649e644 100644..100755
--- a/docs/logo.png
+++ b/docs/pictures/logo.png
Binary files differ
diff --git a/docs/logo64.png b/docs/pictures/logo64.png
index d2431ba..d2431ba 100644..100755
--- a/docs/logo64.png
+++ b/docs/pictures/logo64.png
Binary files differ
diff --git a/docs/pictures/metrics.svg b/docs/pictures/metrics.svg
new file mode 100755
index 0000000..58c3a01
--- /dev/null
+++ b/docs/pictures/metrics.svg
@@ -0,0 +1,297 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export metrics.svg Metrics -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+ xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="11.6929in" height="8.26772in"
+ viewBox="0 0 841.89 595.276" xml:space="preserve" color-interpolation-filters="sRGB" class="st13">
+ <v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
+ <v:userDefs>
+ <v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
+ <v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
+ </v:userDefs>
+ </v:documentProperties>
+
+ <style type="text/css">
+ <![CDATA[
+ .st1 {visibility:visible}
+ .st2 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+ .st3 {fill:none;stroke:#000000;stroke-width:0.25}
+ .st4 {fill:none;stroke:none;stroke-width:0.25}
+ .st5 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+ .st6 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-weight:bold}
+ .st7 {font-size:1em;font-weight:normal}
+ .st8 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+ .st9 {fill:url(#grad0-62);stroke:#c7c8c8;stroke-width:0.25}
+ .st10 {fill:#000000;font-family:Arial;font-size:1.00001em;font-weight:bold}
+ .st11 {font-size:1em}
+ .st12 {font-size:1em;font-weight:bold}
+ .st13 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs id="Patterns_And_Gradients">
+ <linearGradient id="grad0-62" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(90 0.5 0.5)">
+ <stop offset="0" stop-color="#f6fafc" stop-opacity="1"/>
+ <stop offset="0.74" stop-color="#b5d2ec" stop-opacity="1"/>
+ <stop offset="0.83" stop-color="#b5d2ec" stop-opacity="1"/>
+ <stop offset="1" stop-color="#cde1f2" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <defs id="Filters">
+ <filter id="filter_2">
+ <feGaussianBlur stdDeviation="2"/>
+ </filter>
+ </defs>
+ <g v:mID="7" v:index="3" v:groupContext="foregroundPage">
+ <v:userDefs>
+ <v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
+ </v:userDefs>
+ <title>Metrics</title>
+ <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+ v:shadowOffsetY="-8.50394"/>
+ <g id="group26-1" transform="translate(301.039,-102.985)" v:mID="26" v:groupContext="group">
+ <title>Sheet.26</title>
+ <g id="shape7-2" v:mID="7" v:groupContext="shape" transform="translate(13.8898,-24.0936)">
+ <title>Sheet.7</title>
+ <g id="shadow7-3" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st2"/>
+ </g>
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st3"/>
+ </g>
+ <g id="shape8-7" v:mID="8" v:groupContext="shape" transform="translate(92.5215,-24.0936)">
+ <title>Sheet.8</title>
+ <g id="shadow8-8" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st2"/>
+ </g>
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st3"/>
+ </g>
+ <g id="shape9-12" v:mID="9" v:groupContext="shape" transform="translate(171.047,-24.0936)">
+ <title>Sheet.9</title>
+ <g id="shadow9-13" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st2"/>
+ </g>
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st3"/>
+ </g>
+ <g id="shape10-17" v:mID="10" v:groupContext="shape" transform="translate(249.626,-24.0936)">
+ <title>Sheet.10</title>
+ <g id="shadow10-18" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st2"/>
+ </g>
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st3"/>
+ </g>
+ <g id="shape11-22" v:mID="11" v:groupContext="shape" transform="translate(328.193,-24.0936)">
+ <title>Sheet.11</title>
+ <g id="shadow11-23" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st2"/>
+ </g>
+ <rect x="0" y="270.042" width="78.5791" height="325.234" class="st3"/>
+ </g>
+ <g id="shape16-27" v:mID="16" v:groupContext="shape" transform="translate(78.6054,0)">
+ <title>Sheet.16</title>
+ <desc>25</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="13.8898" cy="583.229" width="27.78" height="24.0936"/>
+ <rect x="0" y="571.182" width="27.7795" height="24.0936" class="st4"/>
+ <text x="7.81" y="586.83" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>25</text> </g>
+ <g id="shape21-30" v:mID="21" v:groupContext="shape">
+ <title>Sheet.21</title>
+ <desc>0</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="13.8898" cy="583.229" width="27.78" height="24.0936"/>
+ <rect x="0" y="571.182" width="27.7795" height="24.0936" class="st4"/>
+ <text x="10.85" y="586.83" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>0</text> </g>
+ <g id="shape22-33" v:mID="22" v:groupContext="shape" transform="translate(157.184,0)">
+ <title>Sheet.22</title>
+ <desc>50</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="13.8898" cy="583.229" width="27.78" height="24.0936"/>
+ <rect x="0" y="571.182" width="27.7795" height="24.0936" class="st4"/>
+ <text x="7.81" y="586.83" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>50</text> </g>
+ <g id="shape23-36" v:mID="23" v:groupContext="shape" transform="translate(235.763,0)">
+ <title>Sheet.23</title>
+ <desc>75</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="13.8898" cy="583.229" width="27.78" height="24.0936"/>
+ <rect x="0" y="571.182" width="27.7795" height="24.0936" class="st4"/>
+ <text x="7.81" y="586.83" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>75</text> </g>
+ <g id="shape24-39" v:mID="24" v:groupContext="shape" transform="translate(314.342,0)">
+ <title>Sheet.24</title>
+ <desc>100</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="13.8898" cy="583.229" width="27.78" height="24.0936"/>
+ <rect x="0" y="571.182" width="27.7795" height="24.0936" class="st4"/>
+ <text x="4.77" y="586.83" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>100</text> </g>
+ <g id="shape25-42" v:mID="25" v:groupContext="shape" transform="translate(392.92,0)">
+ <title>Sheet.25</title>
+ <desc>125</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="13.8898" cy="583.229" width="27.78" height="24.0936"/>
+ <rect x="0" y="571.182" width="27.7795" height="24.0936" class="st4"/>
+ <text x="4.77" y="586.83" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>125</text> </g>
+ </g>
+ <g id="shape27-45" v:mID="27" v:groupContext="shape" transform="translate(313.37,-472.192)">
+ <title>Sheet.27</title>
+ <desc>Gigabit Network Performance 1.0 Gb file transfer over 1G netw...</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="162.992" cy="574.016" width="325.99" height="42.5197"/>
+ <rect x="0" y="552.756" width="325.984" height="42.5197" class="st4"/>
+ <text x="88.44" y="570.42" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Gigabit Network Performance<v:lf/><tspan
+ x="46.58" dy="1.2em" class="st7">1</tspan><tspan class="st7">.</tspan><tspan class="st7">0 </tspan><tspan
+ class="st7">Gb </tspan><tspan class="st7">file transfer over </tspan><tspan class="st7">1</tspan><tspan
+ class="st7">G network connection</tspan></text> </g>
+ <g id="group33-55" transform="translate(595.559,-89.5151)" v:mID="33" v:groupContext="group">
+ <title>Sheet.33</title>
+ <g id="shape31-56" v:mID="31" v:groupContext="shape">
+ <title>Sheet.31</title>
+ <g id="shadow31-57" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="588.446" width="5.66929" height="6.82968" class="st8"/>
+ </g>
+ <rect x="0" y="588.446" width="5.66929" height="6.82968" class="st9"/>
+ </g>
+ <g id="shape32-63" v:mID="32" v:groupContext="shape" transform="translate(5.66929,0)">
+ <title>Sheet.32</title>
+ <desc>Megabytes Per Second</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="60.9449" cy="591.861" width="121.89" height="6.82968"/>
+ <rect x="0" y="588.446" width="121.89" height="6.82968" class="st4"/>
+ <text x="5.28" y="595.46" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Megabytes Per Second</text> </g>
+ </g>
+ <g id="group38-66" transform="translate(85.3228,-396.448)" v:mID="38" v:groupContext="group">
+ <title>Sheet.38</title>
+ <g id="shape30-67" v:mID="30" v:groupContext="shape" transform="translate(229.606,1.13687E-013)">
+ <title>Sheet.30</title>
+ <g id="shadow30-68" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="552.756" width="392.882" height="42.5197" class="st8"/>
+ </g>
+ <rect x="0" y="552.756" width="392.882" height="42.5197" class="st9"/>
+ </g>
+ <g id="shape34-73" v:mID="34" v:groupContext="shape">
+ <title>Sheet.34</title>
+ <desc>Gigabit Network Theoretical Limit</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="109.843" cy="574.016" width="219.69" height="42.5197"/>
+ <rect x="0" y="552.756" width="219.685" height="42.5197" class="st4"/>
+ <text x="27.68" y="577.62" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Gigabit Network Theoretical Limit</text> </g>
+ <g id="shape36-76" v:mID="36" v:groupContext="shape" transform="translate(578.268,-11.3386)">
+ <title>Sheet.36</title>
+ <desc>125.0</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="22.1102" cy="585.354" width="44.23" height="19.8425"/>
+ <rect x="0" y="575.433" width="44.2205" height="19.8425" class="st4"/>
+ <text x="7.1" y="588.95" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>125.0</text> </g>
+ </g>
+ <g id="group39-79" transform="translate(85.3228,-332.668)" v:mID="39" v:groupContext="group">
+ <title>Sheet.39</title>
+ <g id="shape40-80" v:mID="40" v:groupContext="shape" transform="translate(229.606,1.13687E-013)">
+ <title>Sheet.40</title>
+ <g id="shadow40-81" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="552.756" width="250.866" height="42.5197" class="st8"/>
+ </g>
+ <rect x="0" y="552.756" width="250.866" height="42.5197" class="st9"/>
+ </g>
+ <g id="shape41-86" v:mID="41" v:groupContext="shape">
+ <title>Sheet.41</title>
+ <desc>Average HDD 7200 RPM R/W performance</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="114.803" cy="574.016" width="229.61" height="42.5197"/>
+ <rect x="0" y="552.756" width="229.606" height="42.5197" class="st4"/>
+ <text x="10.73" y="577.62" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Average HDD 7200 RPM R/W performance</text> </g>
+ <g id="shape42-89" v:mID="42" v:groupContext="shape" transform="translate(435.118,-11.3386)">
+ <title>Sheet.42</title>
+ <desc>~80.0</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="22.6772" cy="585.354" width="45.36" height="19.8425"/>
+ <rect x="0" y="575.433" width="45.3543" height="19.8425" class="st4"/>
+ <text x="7.5" y="588.95" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>~80.0</text> </g>
+ </g>
+ <g id="group43-92" transform="translate(85.3228,-268.889)" v:mID="43" v:groupContext="group">
+ <title>Sheet.43</title>
+ <g id="shape44-93" v:mID="44" v:groupContext="shape" transform="translate(229.606,1.13687E-013)">
+ <title>Sheet.44</title>
+ <g id="shadow44-94" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="552.756" width="250.866" height="42.5197" class="st8"/>
+ </g>
+ <rect x="0" y="552.756" width="250.866" height="42.5197" class="st9"/>
+ </g>
+ <g id="shape45-99" v:mID="45" v:groupContext="shape">
+ <title>Sheet.45</title>
+ <desc>Gigabit Network NFS file transfer performance</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="114.803" cy="574.016" width="229.61" height="42.5197"/>
+ <rect x="0" y="552.756" width="229.606" height="42.5197" class="st4"/>
+ <text x="34.5" y="570.42" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Gigabit Network NFS file transfer <tspan
+ x="83.14" dy="1.2em" class="st11">performance</tspan></text> </g>
+ <g id="shape46-103" v:mID="46" v:groupContext="shape" transform="translate(431.154,-11.3386)">
+ <title>Sheet.46</title>
+ <desc>~80.0</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="24.6593" cy="585.354" width="49.32" height="19.8425"/>
+ <rect x="0" y="575.433" width="49.3187" height="19.8425" class="st4"/>
+ <text x="9.48" y="588.95" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>~80.0</text> </g>
+ </g>
+ <g id="group47-106" transform="translate(85.0394,-205.109)" v:mID="47" v:groupContext="group">
+ <title>Sheet.47</title>
+ <g id="shape48-107" v:mID="48" v:groupContext="shape" transform="translate(229.89,1.13687E-013)">
+ <title>Sheet.48</title>
+ <g id="shadow48-108" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="552.756" width="352.913" height="42.5197" class="st8"/>
+ </g>
+ <rect x="0" y="552.756" width="352.913" height="42.5197" class="st9"/>
+ </g>
+ <g id="shape49-113" v:mID="49" v:groupContext="shape">
+ <title>Sheet.49</title>
+ <desc>RAM Drive to RAM Drive NFS file transfer</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="114.945" cy="574.016" width="229.89" height="42.5197"/>
+ <rect x="0" y="552.756" width="229.89" height="42.5197" class="st4"/>
+ <text x="14.51" y="577.62" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>RAM Drive to RAM Drive NFS file transfer </text> </g>
+ <g id="shape50-116" v:mID="50" v:groupContext="shape" transform="translate(537.449,-11.3386)">
+ <title>Sheet.50</title>
+ <desc>111.0</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="22.6772" cy="585.354" width="45.36" height="19.8425"/>
+ <rect x="0" y="575.433" width="45.3543" height="19.8425" class="st4"/>
+ <text x="7.66" y="588.95" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>111.0</text> </g>
+ </g>
+ <g id="group53-119" transform="translate(85.0394,-148.416)" v:mID="53" v:groupContext="group">
+ <title>Sheet.53</title>
+ <g id="shape54-120" v:mID="54" v:groupContext="shape" transform="translate(229.89,1.13687E-013)">
+ <title>Sheet.54</title>
+ <g id="shadow54-121" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="552.756" width="352.913" height="42.5197" class="st8"/>
+ </g>
+ <rect x="0" y="552.756" width="352.913" height="42.5197" class="st9"/>
+ </g>
+ <g id="shape55-126" v:mID="55" v:groupContext="shape">
+ <title>Sheet.55</title>
+ <desc>RAM Drive to RAM Drive NFS file transfer over TCP with NST li...</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="114.945" cy="574.016" width="229.89" height="42.5197"/>
+ <rect x="0" y="552.756" width="229.89" height="42.5197" class="st4"/>
+ <text x="14.51" y="556.02" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>RAM Drive to RAM Drive NFS file transfer <v:lf/><tspan
+ x="22.56" dy="1.2em" class="st11">over TCP with </tspan><tspan class="st12">NST live traffic analysis<v:lf/></tspan><tspan
+ x="28.93" dy="1.2em" class="st12"> </tspan><tspan class="st12">detects </tspan><tspan class="st12">100</tspan><tspan
+ class="st12">.</tspan><tspan class="st12">0</tspan><tspan class="st12">% </tspan><tspan class="st12">of NFS procedures <v:lf/></tspan><tspan
+ x="38.56" dy="1.2em" class="st11">(</tspan><tspan class="st12">32000</tspan><tspan class="st12">/</tspan><tspan
+ class="st12">32000 </tspan>NFS procedures)</text> </g>
+ <g id="shape56-142" v:mID="56" v:groupContext="shape" transform="translate(537.449,-11.3386)">
+ <title>Sheet.56</title>
+ <desc>111.0</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="22.6772" cy="585.354" width="45.36" height="19.8425"/>
+ <rect x="0" y="575.433" width="45.3543" height="19.8425" class="st4"/>
+ <text x="7.66" y="588.95" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>111.0</text> </g>
+ </g>
+ </g>
+</svg>
diff --git a/docs/pictures/session-visualization.png b/docs/pictures/session-visualization.png
new file mode 100755
index 0000000..f7ff536
--- /dev/null
+++ b/docs/pictures/session-visualization.png
Binary files differ