Browse Source

Add initial glossary and submission guide.

scossu 2 weeks ago
parent
commit
fc75be477b

+ 25 - 29
README.md

@@ -82,6 +82,9 @@ repo yet, so the rocks must be installed manually for the time being.
 Installing locally or in a dedicated container is strongly recommended at this
 Installing locally or in a dedicated container is strongly recommended at this
 stage.
 stage.
 
 
+When Pocket Archive will get into beta status and be published on Luarocks,
+the commands below will be replaced by a one-line command. Until then...
+
 ```
 ```
 # Note: tested on Archlinux. Other distros (especially Alpine) may need tweaks.
 # Note: tested on Archlinux. Other distros (especially Alpine) may need tweaks.
 eval $(luarocks path)
 eval $(luarocks path)
@@ -114,11 +117,11 @@ Initialize the archive first:
 pkar init
 pkar init
 ```
 ```
 
 
-This will create the required folders and database file in the archive root
-(a temporary folder by default). Then:
+This, after user confirmation, will create the required folders and database
+file in the archive root (a temporary folder by default). Then:
 
 
 ```
 ```
-pkar submission test/sample_submission/demo01/pkar_submission.csv
+pkar submission test/sample_submission/pkar_submission.csv
 ```
 ```
 
 
 ### Generate static site from archive
 ### Generate static site from archive
@@ -238,20 +241,18 @@ the downside of static website: they are static.
 
 
 ### CLI
 ### CLI
 
 
-#### Management interface
-
 Pocket Archive can be managed via a command line interface (CLI) when
 Pocket Archive can be managed via a command line interface (CLI) when
 installed locally (e.g. via Luarocks).
 installed locally (e.g. via Luarocks).
 
 
 The `pkar` script contains several useful commands, e.g.
 The `pkar` script contains several useful commands, e.g.
 
 
 ```
 ```
-pkar init [--wipe]
+pkar init
 ```
 ```
 
 
 Initialize the Pocket Archive store and database at the location indicated by
 Initialize the Pocket Archive store and database at the location indicated by
-the `$PKAR_DRES` and `$PKAR_ORES` environment variables. The `--wipe` option
-deletes all preexisting data found in those directories.
+the `$PKAR_DRES` and `$PKAR_ORES` environment variables. This operation deletes
+all preexisting data found in those directories.
 
 
 ```
 ```
 pkar deposit <path>
 pkar deposit <path>
@@ -262,18 +263,18 @@ laundry list named `pkar_submission.csv` with file paths relative to that
 folder.
 folder.
 
 
 ```
 ```
-pkar gen_site
+pkar gen-site
 ```
 ```
 
 
-Generate static site at `out/html`. This includes all HTML pages, derivative
-media, thumbnails, ancillary assets, and RDF representations of all resources.
-The `html` folder can be pointed to by a static HTTP server for local testing,
-or copied to a remote HTTP server. For local testing, I have been using
-`darkhttpd` which does the job in only 55Kb. *TODO serverless deployment
-option*
+Generate static site at `$PKAR_ROOT/out/html`. This includes all HTML pages,
+derivative media, thumbnails, ancillary assets, and RDF representations of all
+resources.  The `html` folder can be pointed to by a static HTTP server for
+local testing, or copied to a remote HTTP server. For local testing, I have
+been using `darkhttpd` which does the job in only 55Kb. *TODO serverless
+deployment option*
 
 
 ```
 ```
-pkar gen_rdf <id> [-f, --format <format>]
+pkar gen-rdf <id> [-f, --format <format>]
 ```
 ```
 
 
 Generate the RDF representation of one resource. Useful for debugging and
 Generate the RDF representation of one resource. Useful for debugging and
@@ -281,7 +282,7 @@ inspecting.
 
 
 More detailed information can be obtain with `pkar --help`.
 More detailed information can be obtain with `pkar --help`.
 
 
-#### Submission watchdog
+### Remote submissions
 
 
 Obviously, the CLI only works if one has command line access (e.g. via SSH) to
 Obviously, the CLI only works if one has command line access (e.g. via SSH) to
 the machine hosting Pocket Archive. It is often the case that a contributor has
 the machine hosting Pocket Archive. It is often the case that a contributor has
@@ -289,18 +290,7 @@ neither shell access nor expertise to run the Pocket Archive CLI. Remote
 submissions provide a more user-friendly way to submit contents to any Pocket
 submissions provide a more user-friendly way to submit contents to any Pocket
 Archive instance on the WWW.
 Archive instance on the WWW.
 
 
-Instead of a web application, Pocket Archive uses a "hot folder" method to
-support remote submissions. The `pkar_watch` utility is run on the machine that
-hosts Pocket Archive to watch a particular system folder for laundry lists.
-Any time a file named `pkar_submission*.csv` is added to that folder, it is
-processed for submission.
-
-In order for this approach to work, the laundry list **must** be uploaded after
-all the other submission files have been successfully uploaded.
-
-The watched folder is local to the Pocket Archive operating system. However, it
-is possible to run an FTP server on the same folder, thus providing remote
-access and permission management.
+Read the [remote submission guide](doc/remote_submission.md) for more details.
 
 
 ### Environment variables
 ### Environment variables
 
 
@@ -317,6 +307,12 @@ behavior:
   `app.lua` with general application configuration. It defaults to the `config`
   `app.lua` with general application configuration. It defaults to the `config`
   directory installed by Luarocks.
   directory installed by Luarocks.
 
 
+## Other documentation
+
+See the [doc](doc) folder for complete documentation (currently under
+construction) in different sections aimed at archivists, system administrators,
+and/or developers.
+
 ## Compatibility
 ## Compatibility
 
 
 Linux only. The submission watchdog relies on `inotify` which is not portable.
 Linux only. The submission watchdog relies on `inotify` which is not portable.

+ 11 - 2
doc/content_model.md

@@ -1,7 +1,8 @@
 # Content model configuration
 # Content model configuration
 
 
-**Note:** The scope of this functional area is currently under review. Things
-may change.
+*Audience: system administrators, developers*
+
+**WORK IN PROGRESS**
 
 
 Pocket Archive ships with some predefined content types. For some very simple
 Pocket Archive ships with some predefined content types. For some very simple
 archives, this may be enough to get started with little or no customization.
 archives, this may be enough to get started with little or no customization.
@@ -29,6 +30,8 @@ can put it under Anything. Of course, if one starts dealing with many
 unclassifiable resources that look similar, it's probably best to define a
 unclassifiable resources that look similar, it's probably best to define a
 model for them; but that is not mandatory.
 model for them; but that is not mandatory.
 
 
+**Insert root types info here**
+
 Each metadata field can be specified by constraints. These constraints can be
 Each metadata field can be specified by constraints. These constraints can be
 on:
 on:
 
 
@@ -48,3 +51,9 @@ to decide how specific or how free-form their archive should be.
 Note that fields that are not defined at least by a label, may be hard to
 Note that fields that are not defined at least by a label, may be hard to
 understand by users browsing the discovery interface.
 understand by users browsing the discovery interface.
 
 
+There are subtle
+  but important differences between the two, and keeping a separation between
+  an artifact and its related file(s) is key to a sustainable long-term
+  archival strategy. A file (also called **opaque resource** in Pocket Archive)
+  is simply stored and cataloged by Pocket Archive, which knows nothing about
+  its contents. 

+ 154 - 0
doc/glossary.md

@@ -0,0 +1,154 @@
+# Pocket Archive glossary
+
+*Audience: all users*
+
+**WORK IN PROGRESS**
+
+This document is a glossary of terms specific to Pocket Archive and to
+mainstream archival, cataloging, and IT practices. The former are prefixed by
+an asterisk: \*. Terms used in descriptions that also have a definition in this
+document are written in **bold**.
+
+## Archival master file
+A file fit for conservation purposes. This is usually the version of a digital
+capture that contains the most information, and which can be used to generate
+other **derivatives**, most notably, a **production master file**.
+
+This is a [standard
+definition](https://www.digitizationguidelines.gov/term.php?term=archivalmasterfile)
+of the US Federal Agency Digital Guidelines Inititative (FADGI).
+
+## \*Artifact
+
+## Atomic, atomicity
+An atomic operation is an operation on data that either succeeds or fails
+completely. Complex data structures can be handled via atomic operations, if
+the system handles them, to ensure that at each step of a transfer process, all
+parts of the data structure are intact.
+
+## Checksum
+
+## \*Brick
+
+## \*Collection
+In Pocket Archive, a Collection is a group of artifacts that are logically
+related in a way or another. There is no well-defined rule to how collections
+should be arranged, and that is a curatorial decision based on the materials
+at hand and the target audience.
+
+Collections can contain other collections, other structural **Bricks**, or
+artifacts. They are presented in a special way, in that they can have a long
+description stored in a separate file, that can provide a rich presentation for
+the collection's landing page.
+
+Any resource can belong to multiple collections. Laundry lists have means to
+indicate implicit memberships (e.g. a file inside a folder), which are added
+automatically by the submission process, and explicit ones, which are defined
+via the `has_member` **property**.
+
+## \*Content model
+
+## \*Content type
+
+## CSV
+
+Stands for Comma-Separated Values. It is a file format for tabular data, which
+can be read and edited by several software packages, such as LibreOffice or
+Google Sheets. Opened in these applications, a CSV looks like a spreadsheet,
+and can be edited as such. Text formatting, column or row sizes, borders, and
+similar style features are not supported. CSV is pure data, which is all we are
+interested in.
+
+Pocket Archive's **laundry lists** are formatted in CSV. Spreadsheet
+applications can be used to compile laundry lists, with the caveat that the
+file must be exported as a `.csv` file rather than the native spreadsheet
+application file (usually employed by the "Save" command).
+
+## \*Descriptive resource
+
+## \*Drop box
+
+## \*Field
+
+## Fixity
+
+## \*Laundry list
+
+## Linked Data, Linked Open Data
+
+## Markdown
+
+## Metadata
+
+## \*Opaque resource
+
+## \*Presentation file
+
+## \*Property
+
+## \*Production master
+
+A file fit for generating **presentation files**. This is usually a file
+generated from the **archival master file** and manually adjusted for
+presentation, with elements that are imortant for preservation but not for
+public display, removed (e.g. color bars or working layers in a still image).
+Because it is manually adjusted, it should be preserved along with the archival
+version.
+
+In cases of necessity, the same file may serve both archival and production
+master roles, however this is not a recommended practice and only acceptable
+when a proper archival master is not (or no longer) available.
+
+Derivatives of this file are usually lower-quality copies that are
+automatically generated and not preservation-worthy.
+
+This is a [standard
+definition](https://www.digitizationguidelines.gov/term.php?term=productionmasterfile)
+of the US Federal Agency Digital Guidelines Inititative (FADGI).
+
+## \*Relationship
+
+A relationship, in Pocket Archive, is a special type of hyperlink that points
+to a **resource** managed by Pocket Archive itself. Unlike hyperlinks in the
+WWW, which do not always own the resource pointed to and do not guarantee its
+existence, Pocket Archive guarantees the consistency of relationship links.
+
+## \*Resource
+
+## RDF
+
+## SIP
+
+Submission Information Package: a package of files, folders, and **metadata**
+that constitute a complete **submission** package. A SIP is normally prepared
+by archivists, either by hand or with the aid of automated tools, and is the
+first step of the actual archival process.
+
+This is a term of the
+[OAIS](https://ccsds.org/Pubs/650x0m3.pdf) standard that defines guidelines for
+digital archival practices.
+
+## Static site
+
+A web site that is made up entirely of static files. This means that all
+contents of the website are pre-generated and consist of actual files living
+on a filesystem, in contrast with most modern *dynamic* sites whose contents
+are mostly generated on demand by a continuously running process.
+
+While much less flexible than dynamic sites, static sites are still widely used
+today. Dynamic sites rely on complex, often resource-intensive applications and
+infrastructure that can be subject to exploits and attacks of all sorts, and on
+more applications and infrastructure to prevent those attacks. Sites of small
+to medium size with predefined content can take advantage of a simple and
+economical static site, that needs only a simple web server to run.
+
+Pocket Archive generates static sites for presentation. It also has the option
+[*WORK IN PROGRESS*] to generate contents that can be viewed directly on the
+user's local computer with a web browser, without any web server or even any
+Internet connection.
+
+## Submission
+
+## UID
+
+## UUID

+ 1275 - 0
doc/pkar_res_lifecycle.graphml

@@ -0,0 +1,1275 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.25.1-->
+  <key attr.name="Description" attr.type="string" for="graph" id="d0"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key for="graphml" id="d7" yfiles.type="resources"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d0"/>
+    <node id="n0" yfiles.foldertype="group">
+      <data key="d5"/>
+      <data key="d6">
+        <y:TableNode configuration="YED_TABLE_NODE">
+          <y:Geometry height="416.41138648986816" width="1159.1519927978516" x="152.0" y="169.83861351013184"/>
+          <y:Fill color="#ECF5FF" color2="#0042F440" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="232.9165496826172" x="463.1177215576172" y="4.0">Pocket Archive resource lifecycle</y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="130.70892333984375" x="147.64553833007812" y="33.0">Archivist's workstation<y:LabelModel>
+              <y:ColumnNodeLabelModel offset="3.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:ColumnNodeLabelModelParameter id="column_0" inside="true" verticalPosition="0.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="45.76029968261719" x="735.1198501586914" y="33.0">Archive<y:LabelModel>
+              <y:ColumnNodeLabelModel offset="3.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:ColumnNodeLabelModelParameter id="column_1" inside="true" verticalPosition="0.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="76.08451843261719" x="985.5337371826172" y="33.0">Presentation<y:LabelModel>
+              <y:ColumnNodeLabelModel offset="3.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:ColumnNodeLabelModelParameter id="column_2" inside="true" verticalPosition="0.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.46437072753906" x="498.76781463623047" y="33.0">Drop box<y:LabelModel>
+              <y:ColumnNodeLabelModel offset="3.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:ColumnNodeLabelModelParameter id="column_3" inside="true" verticalPosition="0.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:StyleProperties>
+            <y:Property class="java.awt.Color" name="yed.table.section.color" value="#7192b2"/>
+            <y:Property class="java.lang.Double" name="yed.table.header.height" value="24.0"/>
+            <y:Property class="java.awt.Color" name="yed.table.lane.color.main" value="#c4d7ed"/>
+            <y:Property class="java.awt.Color" name="yed.table.lane.color.alternating" value="#abc8e2"/>
+            <y:Property class="java.awt.Color" name="yed.table.header.color.alternating" value="#abc8e2"/>
+            <y:Property class="java.lang.String" name="yed.table.lane.style" value="lane.style.columns"/>
+            <y:Property class="java.awt.Color" name="yed.table.header.color.main" value="#c4d7ed"/>
+          </y:StyleProperties>
+          <y:State autoResize="true" closed="false" closedHeight="80.0" closedWidth="100.0"/>
+          <y:Insets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+          <y:BorderInsets bottom="13" bottomF="12.64246416091919" left="20" leftF="20.0" right="58" rightF="58.15199279785156" top="11" topF="11.446314811706543"/>
+          <y:Table autoResizeTable="true" defaultColumnWidth="120.0" defaultMinimumColumnWidth="80.0" defaultMinimumRowHeight="50.0" defaultRowHeight="80.0">
+            <y:DefaultColumnInsets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+            <y:DefaultRowInsets bottom="0.0" left="0.0" right="0.0" top="0.0"/>
+            <y:Insets bottom="0.0" left="0.0" right="0.0" top="30.0"/>
+            <y:Columns>
+              <y:Column id="column_0" minimumWidth="80.0" width="426.0">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+              </y:Column>
+              <y:Column id="column_3" minimumWidth="80.0" width="202.0">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+              </y:Column>
+              <y:Column id="column_1" minimumWidth="80.0" width="260.0">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+              </y:Column>
+              <y:Column id="column_2" minimumWidth="80.0" width="271.15199279785156">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+              </y:Column>
+            </y:Columns>
+            <y:Rows>
+              <y:Row height="362.41138648986816" id="row_0" minimumHeight="50.0">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="0.0"/>
+              </y:Row>
+            </y:Rows>
+          </y:Table>
+        </y:TableNode>
+      </data>
+      <graph edgedefault="directed" id="n0:">
+        <node id="n0::n0">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="437.0" y="283.0"/>
+              <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+              <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="21.916122436523438" x="34.04193878173828" y="14.327942848205566">SIP<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n0::n1" yfiles.foldertype="group">
+          <data key="d4"/>
+          <data key="d6">
+            <y:ProxyAutoBoundsNode>
+              <y:Realizers active="0">
+                <y:GroupNode>
+                  <y:Geometry height="144.43014335632324" width="164.0" x="172.0" y="235.28492832183838"/>
+                  <y:Fill color="#FFFF9944" transparent="false"/>
+                  <y:BorderStyle hasColor="false" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FFFF9988" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="164.0" x="0.0" y="0.0">Resources in local HD</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="3" leftF="3.0" right="11" rightF="11.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+                <y:GroupNode>
+                  <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+                  <y:Fill color="#F5F5F5" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.09037780761719" x="-5.545188903808594" y="0.0">Folder 2</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+              </y:Realizers>
+            </y:ProxyAutoBoundsNode>
+          </data>
+          <graph edgedefault="directed" id="n0::n1:">
+            <node id="n0::n1::n0">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="280.0" y="274.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="star5"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n1">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="190.0" y="316.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="trapezoid2"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n2">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="271.0" y="321.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="octagon"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n3">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="198.0" y="274.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="star8"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n4">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="220.0" y="334.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="triangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n5">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="24.0" width="25.0" x="241.0" y="298.2150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="10.5" y="10.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="rectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+          </graph>
+        </node>
+        <node id="n0::n2">
+          <data key="d5"/>
+          <data key="d6">
+            <y:GenericNode configuration="com.yworks.flowchart.document">
+              <y:Geometry height="40.0" width="102.0" x="425.0" y="439.0"/>
+              <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+              <y:BorderStyle color="#3F5400" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="69.70045471191406" x="16.14977264404297" y="9.827942848205566">Laundry list<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+            </y:GenericNode>
+          </data>
+        </node>
+        <node id="n0::n3">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="628.0" y="283.0"/>
+              <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+              <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="21.916122436523438" x="34.04193878173828" y="14.327942848205566">SIP<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n0::n4" yfiles.foldertype="group">
+          <data key="d4"/>
+          <data key="d6">
+            <y:ProxyAutoBoundsNode>
+              <y:Realizers active="0">
+                <y:GroupNode>
+                  <y:Geometry height="186.46248626708984" width="120.0" x="850.5" y="245.76875686645508"/>
+                  <y:Fill color="#FFFF9944" transparent="false"/>
+                  <y:BorderStyle hasColor="false" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FFFF9988" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="120.0" x="0.0" y="0.0">AIP</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+                <y:GroupNode>
+                  <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+                  <y:Fill color="#F5F5F5" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.09037780761719" x="-5.545188903808594" y="0.0">Folder 3</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+              </y:Realizers>
+            </y:ProxyAutoBoundsNode>
+          </data>
+          <graph edgedefault="directed" id="n0::n4:">
+            <node id="n0::n4::n0">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="49.0" width="90.0" x="865.5" y="287.2150716781616"/>
+                  <y:Fill color="#FFBFE1" color2="#F263B1" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="53.0323429107666" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.22447204589844" x="10.887763977050781" y="-2.016171455383301">Opaque
+resources
+(filesystem)<y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n4::n1">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="49.0" width="90.0" x="865.5" y="366.2150716781616"/>
+                  <y:Fill color="#FFBFE1" color2="#F263B1" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="53.0323429107666" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="66.76045227050781" x="11.619773864746094" y="-2.016171455383301">Descriptive
+resources
+(database)<y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+          </graph>
+        </node>
+        <node id="n0::n5">
+          <data key="d5"/>
+          <data key="d6">
+            <y:GenericNode configuration="com.yworks.flowchart.document">
+              <y:Geometry height="49.0" width="90.0" x="628.0" y="366.0"/>
+              <y:Fill color="#7BEDF2" color2="#00C5CC" transparent="false"/>
+              <y:BorderStyle color="#005154" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.96846008300781" x="10.515769958496094" y="6.155885696411133">Submission
+report<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+            </y:GenericNode>
+          </data>
+        </node>
+        <node id="n0::n6" yfiles.foldertype="group">
+          <data key="d4"/>
+          <data key="d6">
+            <y:ProxyAutoBoundsNode>
+              <y:Realizers active="0">
+                <y:GroupNode>
+                  <y:Geometry height="144.43014335632324" width="150.0" x="1103.0" y="245.76875686645508"/>
+                  <y:Fill color="#FFFF9944" transparent="false"/>
+                  <y:BorderStyle hasColor="false" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FFFF9988" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="150.0" x="0.0" y="0.0">Web site</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+                <y:GroupNode>
+                  <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+                  <y:Fill color="#F5F5F5" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.09037780761719" x="-5.545188903808594" y="0.0">Folder 2</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+              </y:Realizers>
+            </y:ProxyAutoBoundsNode>
+          </data>
+          <graph edgedefault="directed" id="n0::n6:">
+            <node id="n0::n6::n0">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1208.0" y="285.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="star5"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n1">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1118.0" y="327.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="trapezoid2"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n2">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1199.0" y="332.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="octagon"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n3">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1126.0" y="285.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="star8"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n4">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1148.0" y="345.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="triangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n5">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="24.0" width="25.0" x="1169.0" y="308.6989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="10.5" y="10.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="rectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+          </graph>
+        </node>
+        <node id="n0::n7">
+          <data key="d5"/>
+          <data key="d6">
+            <y:GenericNode configuration="com.yworks.flowchart.document">
+              <y:Geometry height="49.0" width="90.0" x="628.0" y="445.0"/>
+              <y:Fill color="#7BEDF2" color2="#00C5CC" transparent="false"/>
+              <y:BorderStyle color="#005154" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="69.70045471191406" x="10.149772644042969" y="6.155885696411133">Generated
+Laundry list<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+            </y:GenericNode>
+          </data>
+        </node>
+        <node id="n0::n8">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="628.0" y="524.6075358390808"/>
+              <y:Fill color="#7BEDF2" color2="#00C5CC" transparent="false"/>
+              <y:BorderStyle color="#005154" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="84.892578125" x="2.5537109375" y="14.327942848205566">Generated SIP<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n1">
+      <data key="d5"/>
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="58.38100051879883" width="58.50005340576172" x="1152.2499732971191" y="617.5245714187622"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="47.96833801269531" x="5.265857696533203" y="62.38100051879883">Viewers<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="false"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="1"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d5"/>
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="49.32486703413781" width="82.50105285644531" x="265.4989471435547" y="622.0526381610928"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="57.91639709472656" x="12.292327880859375" y="53.3248670341377">Archivists<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="false"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="2"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n3" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="103.43014335632324" width="526.0" x="152.0" y="713.1801433563234"/>
+              <y:Fill color="#FFFF9944" transparent="false"/>
+              <y:BorderStyle hasColor="false" raised="false" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="526.0" x="0.0" y="0.0">Legend</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.09037780761719" x="-5.545188903808594" y="0.0">Folder 5</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n3:">
+        <node id="n3::n0">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="167.0" y="752.6102867126466"/>
+              <y:Fill color="#7BEDF2" color2="#00C5CC" transparent="false"/>
+              <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.90040588378906" x="14.049797058105469" y="6.155885696411133">Optionally
+kept<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n3::n1">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="370.0" y="752.6102867126466"/>
+              <y:Fill color="#FFBFE1" color2="#F263B1" transparent="false"/>
+              <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="48.8203125" x="20.58984375" y="14.327942848205566">Archival<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n3::n2">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="573.0" y="752.6102867126466"/>
+              <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+              <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.96844482421875" x="12.015777587890625" y="14.327942848205566">Disposable<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <edge id="n0::e0" source="n0::n1" target="n0::n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="57.22039794921875" x="21.868804931640625" y="-10.172057151794434">Compose<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e1" source="n0::n2" target="n0::n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="51.3763427734375" x="43.89035849996128" y="-71.85247611999512">Transfer
+#2<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e2" source="n0::n0" target="n0::n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="51.3763427734375" x="24.81304931640625" y="-18.344114303588867">Transfer
+#1<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e3" source="n0::n3" target="n0::n4">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.512451171875" x="33.46966552734375" y="-9.560469798037843">Pick-up &amp;
+processing<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e4" source="n0::n4" target="n0::n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.47637939453125" x="-94.50436401367188" y="4.1972395947104815">Generate<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e5" source="n0::n4" target="n0::n6">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.47637939453125" x="38.026763916015625" y="-15.378166390356569">Generate<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n3::e0" source="n3::n0" target="n3::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="59.20039367675781" x="26.948387145996094" y="-18.34411811828602">Manual
+operation<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n3::e1" source="n3::n1" target="n3::n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.81640625" x="25.640380859375" y="-18.34411811828602">Automatic
+operation<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e6" source="n0::n4" target="n0::n7">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.47637939453125" x="-94.50436401367188" y="26.239461788378264">Generate<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e0" source="n1" target="n0::n6">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="34.564208984375" x="-18.492516412387204" y="-123.85213041305542">Enjoy<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n2" target="n0::n7">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.57243347167969" x="107.19852447509766" y="-77.90551349220061">Request LL<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e7" source="n0::n4" target="n0::n8">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.47637939453125" x="-102.56245879777248" y="55.57989565535593">Generate<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n2" target="n0::n8">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="70.9124755859375" x="104.52850341796875" y="-47.47865627366582">Request SIP<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n2" target="n0::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="53.0323429107666" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.15632629394531" x="-44.924283881291274" y="-147.7095870435686">Select,
+arrange,
+review<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n2" target="n0::n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.40434265136719" x="39.273679218577" y="-81.6819319189043">Compile<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d7">
+    <y:Resources>
+      <y:Resource id="1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="59px" height="59px" viewBox="0 0 59 59" enable-background="new 0 0 59 59" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="neck_x5F_white_1_" gradientUnits="userSpaceOnUse" x1="13.6323" y1="-1502.7422" x2="14.3617" y2="-1520.2559" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="neck_x5F_white_19_" fill="url(#neck_x5F_white_1_)" stroke="#FFAB4F" stroke-width="0.5" stroke-miterlimit="10" d="
+		M9.639,18.899h9.093v10.115c-0.656,0.186-8.586,0.218-9.093,0.086V18.899z"/&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="13.1294" y1="-1499.207" x2="13.75" y2="-1514.1072" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="M24.766,25.612
+		c-2.199-2.197-5.477-2.941-6.033-3.055v-3.658H9.639c0,0,0.019,3.452,0,3.435c0,0-3.437,0.499-6.154,3.216
+		c-2.796,2.796-3.235,5.835-3.235,5.835c0,0.971,0.788,1.746,1.762,1.746h24.255c0.974,0,1.761-0.777,1.761-1.746
+		C28.027,31.384,27.105,27.953,24.766,25.612z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="13.7515" cy="-1500.0908" r="11.7123" fx="11.4666" fy="-1501.3357" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_19_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="
+		M21.838,11.679c0.043,5.1-3.369,9.26-7.623,9.293C9.964,21.006,6.483,16.899,6.44,11.8c-0.042-5.1,3.37-9.261,7.622-9.294
+		C18.314,2.473,21.795,6.579,21.838,11.679z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="4300.0391" y1="8522.0703" x2="4311.8545" y2="8568.7988" gradientTransform="matrix(0.275 0 0 0.2733 -1169.7629 -2324.9595)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_19_" fill="url(#face_highlight_1_)" d="M13.979,3.166c-3.018,0.023-5.374,2.247-6.394,5.193
+		c-0.332,0.96-0.147,2.021,0.49,2.814c1.365,1.699,2.865,3.142,4.73,4.044c1.569,0.759,3.767,1.192,5.946,0.624
+		c1.139-0.297,1.994-1.229,2.188-2.383c0.092-0.548,0.146-1.145,0.143-1.777C21.041,6.977,18.137,3.134,13.979,3.166z"/&gt;
+	
+		&lt;path id="Hair_Female_1_Black_9_" fill="#4B4B4B" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M14.187,0.25c-5.418,0-10.052,3.624-9.61,12.813c0.282,3.281,2.931,6.021,4.683,6.766C7.795,14.344,9.107,7.317,8.967,7.064
+		c-0.14-0.252,1.769,3.364,1.769,3.364l1.591-4.155c2.771,2.14,0.197,5.654,0.524,5.528c2.129-0.815,2.67-4.614,2.67-4.614
+		s1.364,1.829,1.35,2.752c-0.025,1.781,1.098-3.033,1.098-3.033l0.514,1.016c3.363,4.911,1.842,8.104,0.826,11.391
+		c7.834-0.352,6.146-5.24,4.83-9.203C21.795,3.046,19.604,0.25,14.187,0.25z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="53.4854" y1="2393.7295" x2="21.2897" y2="2393.7295" gradientTransform="matrix(0.9852 0 0 0.9852 -22.6981 -2330.2188)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_63_" fill="url(#body_1_)" stroke="#008D33" stroke-width="0.5" d="M0.25,31.384c0,0.97,0.788,1.747,1.762,1.747
+		h24.255c0.974,0,1.761-0.779,1.761-1.747c0,0-0.922-3.431-3.262-5.771c-2.408-2.406-4.123-2.572-4.123-2.572
+		c-0.723,3.491-4.277,4.393-6.503,4.393c-2.227,0-5.75-0.994-6.06-4.393c0,0-1.877-0.207-4.594,2.51
+		C0.689,28.345,0.25,31.384,0.25,31.384z"/&gt;
+	
+		&lt;linearGradient id="neck_x5F_white_3_" gradientUnits="userSpaceOnUse" x1="43.8525" y1="-1502.7417" x2="44.5819" y2="-1520.2552" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="neck_x5F_white_17_" fill="url(#neck_x5F_white_3_)" stroke="#FFAB4F" stroke-width="0.5" stroke-miterlimit="10" d="
+		M39.859,18.899h9.094v10.115c-0.656,0.186-8.586,0.218-9.094,0.086V18.899z"/&gt;
+	
+		&lt;linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="43.3506" y1="-1499.2075" x2="43.9712" y2="-1514.1077" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="M54.986,25.612
+		c-2.199-2.197-5.478-2.941-6.033-3.055v-3.658h-9.094c0,0,0.02,3.452,0,3.435c0,0-3.438,0.499-6.153,3.216
+		c-2.796,2.796-3.235,5.835-3.235,5.835c0,0.971,0.787,1.746,1.762,1.746h24.256c0.974,0,1.761-0.777,1.761-1.746
+		C58.248,31.384,57.326,27.953,54.986,25.612z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_3_" cx="43.9727" cy="-1500.0908" r="11.7111" fx="41.6881" fy="-1501.3356" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_17_" fill="url(#face_x5F_white_3_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="
+		M52.059,11.679c0.043,5.1-3.369,9.26-7.623,9.293c-4.25,0.034-7.731-4.073-7.774-9.172c-0.042-5.1,3.368-9.261,7.622-9.294
+		C48.536,2.473,52.016,6.579,52.059,11.679z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_3_" gradientUnits="userSpaceOnUse" x1="4409.9326" y1="8522.0703" x2="4421.7476" y2="8568.7969" gradientTransform="matrix(0.275 0 0 0.2733 -1169.7629 -2324.9595)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_17_" fill="url(#face_highlight_3_)" d="M44.2,3.166c-3.019,0.023-5.374,2.247-6.394,5.193
+		c-0.332,0.96-0.147,2.021,0.489,2.814c1.364,1.699,2.864,3.142,4.729,4.044c1.568,0.759,3.768,1.192,5.945,0.624
+		c1.139-0.297,1.994-1.229,2.188-2.383c0.092-0.548,0.146-1.145,0.143-1.777C51.262,6.977,48.357,3.134,44.2,3.166z"/&gt;
+	
+		&lt;path id="hair_x5F_gray_17_" fill="#ECECEC" stroke="#9B9B9B" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M40.359,6.625c0,0,2.66,3.625,7.5,1.875c1.365-0.281,4.529,0.518,4.529,0.518s-1.828-8.085-8.523-7.646
+		c-8.943,0.69-7.615,11.467-7.615,11.467s1.384-0.342,2.518-2.401C39.255,9.553,40.359,6.625,40.359,6.625z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_body_2_" cx="37.6602" cy="-1515.813" r="16.2003" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B0E8FF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_body_8_" fill="url(#collar_x5F_body_2_)" stroke="#5491CF" stroke-width="0.5" d="M30.471,31.384
+		c0,0.97,0.787,1.747,1.762,1.747h24.256c0.974,0,1.761-0.779,1.761-1.747c0,0-0.922-3.431-3.263-5.771
+		c-2.407-2.406-5.623-3.072-5.623-3.072c-0.885,0.827-2.805,1.4-5.03,1.4s-4.146-0.573-5.031-1.4c0,0-2.878,0.293-5.595,3.01
+		C30.91,28.345,30.471,31.384,30.471,31.384z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_r_2_" cx="45.8311" cy="-1510.8745" r="4.6401" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_r_8_" fill="url(#collar_x5F_r_2_)" stroke="#5491CF" stroke-width="0.5" d="M49.301,20.69
+		c0,0-0.287,1.185-1.506,2.221c-1.055,0.897-2.893,1.036-2.893,1.036l1.986,3.108c0,0,1.479-0.818,2.504-1.924
+		c0.961-1.036,0.686-2.74,0.686-2.74L49.301,20.69z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_l_2_" cx="39.6494" cy="-1510.896" r="4.6426" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_l_8_" fill="url(#collar_x5F_l_2_)" stroke="#5491CF" stroke-width="0.5" d="M39.536,20.711
+		c0,0,0.288,1.185,1.506,2.221c1.056,0.896,2.894,1.036,2.894,1.036l-1.987,3.108c0,0-1.479-0.818-2.505-1.925
+		c-0.961-1.036-0.685-2.74-0.685-2.74L39.536,20.711z"/&gt;
+	
+		&lt;radialGradient id="Knob2_2_" cx="44.0645" cy="-742.6421" r="0.4846" gradientTransform="matrix(1 0 0 -1 0.1201 -714.5371)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob2_8_" fill="url(#Knob2_2_)" stroke="#5491CF" stroke-width="0.5" cx="44.35" cy="28.127" r="0.292"/&gt;
+	
+		&lt;radialGradient id="Knob1_2_" cx="44.083" cy="-745.7642" r="0.4847" gradientTransform="matrix(1 0 0 -1 0.1201 -714.5371)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob1_8_" fill="url(#Knob1_2_)" stroke="#5491CF" stroke-width="0.5" cx="44.369" cy="31.25" r="0.292"/&gt;
+	
+		&lt;radialGradient id="jacket_x5F_body_1_" cx="36.7842" cy="-1515.3755" r="20.459" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#D0D0D0"/&gt;
+		&lt;stop  offset="1" style="stop-color:#9B9B9B"/&gt;
+	&lt;/radialGradient&gt;
+	
+		&lt;path id="jacket_x5F_body_8_" fill="url(#jacket_x5F_body_1_)" stroke="#4B4B4B" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M54.986,25.612c-2.217-2.217-5.111-2.955-5.557-3.059l-2.695,10.572h-4.43L39.686,22.84c-0.145-0.096-0.271-0.196-0.385-0.301
+		c0,0-2.877,0.293-5.595,3.01c-2.796,2.796-3.233,5.835-3.233,5.835c0,0.97,0.786,1.747,1.76,1.747h24.256
+		c0.975,0,1.761-0.779,1.761-1.747C58.248,31.384,57.326,27.953,54.986,25.612z"/&gt;
+	
+		&lt;polygon id="jacket_x5F_r_8_" fill="#9B9B9B" stroke="#4B4B4B" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" points="
+		49.688,21.038 51.305,23.187 50.615,27.835 48.914,28.25 49.547,29.563 47.509,33.126 46.734,33.126 	"/&gt;
+	
+		&lt;polygon id="jacket_x5F_l_8_" fill="#B2B2B2" stroke="#4B4B4B" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" points="
+		39.354,21.038 37.734,23.187 38.426,27.835 40.127,28.25 39.493,29.563 41.531,33.126 42.307,33.126 	"/&gt;
+	&lt;path id="path5135_8_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M43.936,27.61c0,0-0.926,1.028-1.041,3.271
+		c-0.115,2.244,0,2.244,0,2.244h3.273c0,0,0.115,0.031-0.077-2.182c-0.2-2.302-1.194-3.334-1.194-3.334L43.936,27.61L43.936,27.61z"
+		/&gt;
+	&lt;path id="path5131_8_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M44.377,24.34h0.063l1.275,2.001
+		c0.258,0.477-0.604,0.898-0.729,1.274l-1.139-0.008c-0.121-0.38-1.129-0.683-0.738-1.292L44.377,24.34z"/&gt;
+	
+		&lt;linearGradient id="neck_x5F_white_4_" gradientUnits="userSpaceOnUse" x1="43.6328" y1="-1527.7417" x2="44.3621" y2="-1545.2545" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="neck_x5F_white_11_" fill="url(#neck_x5F_white_4_)" stroke="#FFAB4F" stroke-width="0.5" stroke-miterlimit="10" d="
+		M39.639,43.898h9.094v10.115c-0.655,0.187-8.586,0.219-9.094,0.086V43.898z"/&gt;
+	
+		&lt;linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="43.1309" y1="-1524.2065" x2="43.7515" y2="-1539.1072" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_3_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="M54.766,50.611
+		c-2.199-2.196-5.477-2.94-6.033-3.055v-3.658h-9.094c0,0,0.021,3.453,0,3.436c0,0-3.437,0.499-6.152,3.216
+		c-2.797,2.796-3.235,5.835-3.235,5.835c0,0.971,0.787,1.746,1.763,1.746h24.254c0.975,0,1.762-0.777,1.762-1.746
+		C58.027,56.384,57.105,52.953,54.766,50.611z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_4_" cx="43.752" cy="-1525.0908" r="11.7114" fx="41.4673" fy="-1526.3356" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_11_" fill="url(#face_x5F_white_4_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="
+		M51.838,36.68c0.043,5.1-3.369,9.26-7.623,9.293c-4.251,0.033-7.732-4.074-7.775-9.173c-0.041-5.1,3.369-9.261,7.623-9.294
+		C48.314,27.473,51.795,31.579,51.838,36.68z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_4_" gradientUnits="userSpaceOnUse" x1="4409.1299" y1="8613.5469" x2="4420.9448" y2="8660.2725" gradientTransform="matrix(0.275 0 0 0.2733 -1169.7629 -2324.9595)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_11_" fill="url(#face_highlight_4_)" d="M43.979,28.166c-3.018,0.023-5.373,2.247-6.394,5.193
+		c-0.332,0.959-0.147,2.021,0.49,2.813c1.364,1.699,2.864,3.142,4.729,4.044c1.568,0.76,3.768,1.192,5.945,0.624
+		c1.139-0.297,1.994-1.229,2.188-2.383c0.092-0.548,0.146-1.146,0.144-1.776C51.041,31.977,48.137,28.134,43.979,28.166z"/&gt;
+	&lt;path fill="#CC9869" stroke="#99724F" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="M46.107,29.969
+		c0,0,2.845,1.375,3.845,4.062c1.052,2.826,2.062,4.117,2.095,4c0.938-3.395,0.531-10.718-5.086-10.792
+		c-10.229-3.832-12.79,5.98-11.947,9.824c0.539,2.457,1.117,3.344,1.971,4.041C36.982,41.104,37.514,33.781,46.107,29.969z"/&gt;
+	
+		&lt;linearGradient id="body_2_" gradientUnits="userSpaceOnUse" x1="83.9365" y1="2419.1064" x2="51.7404" y2="2419.1064" gradientTransform="matrix(0.9852 0 0 0.9852 -22.6981 -2330.2188)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_35_" fill="url(#body_2_)" stroke="#008D33" stroke-width="0.5" d="M30.25,56.384c0,0.97,0.787,1.747,1.762,1.747
+		h24.256c0.974,0,1.76-0.779,1.76-1.747c0,0-0.922-3.431-3.262-5.771c-2.408-2.406-4.123-2.572-4.123-2.572
+		c-0.723,3.49-4.276,4.393-6.504,4.393c-2.227,0-5.75-0.994-6.059-4.393c0,0-1.878-0.207-4.596,2.51
+		C30.689,53.346,30.25,56.384,30.25,56.384z"/&gt;
+	
+		&lt;radialGradient id="neck_x5F_white_5_" cx="14.0952" cy="-1534.9302" r="5.7236" fx="12.9786" fy="-1535.5386" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="neck_x5F_white_2_" fill="url(#neck_x5F_white_5_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="
+		M9.859,43.898h9.094v6.615c-0.656,0.187-8.586,0.219-9.094,0.086V43.898z"/&gt;
+	
+		&lt;radialGradient id="SVGID_4_" cx="13.8213" cy="-1539.1084" r="15.5272" fx="10.7923" fy="-1540.7589" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_4_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="M24.986,50.611
+		c-2.199-2.196-5.477-2.94-6.033-3.055v-3.658H9.859c0,0,0.02,3.453,0,3.436c0,0-3.437,0.499-6.153,3.216
+		c-2.796,2.796-3.235,5.835-3.235,5.835c0,0.971,0.787,1.746,1.762,1.746h24.255c0.974,0,1.761-0.777,1.761-1.746
+		C28.248,56.384,27.326,52.953,24.986,50.611z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_5_" cx="13.9722" cy="-1525.0908" r="11.7123" fx="11.6873" fy="-1526.3357" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_2_" fill="url(#face_x5F_white_5_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="
+		M22.059,36.68c0.043,5.1-3.369,9.26-7.623,9.293c-4.251,0.033-7.732-4.074-7.775-9.173c-0.042-5.1,3.369-9.261,7.622-9.294
+		C18.536,27.473,22.016,31.579,22.059,36.68z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_5_" gradientUnits="userSpaceOnUse" x1="4300.8428" y1="8613.5449" x2="4312.6582" y2="8660.2734" gradientTransform="matrix(0.275 0 0 0.2733 -1169.7629 -2324.9595)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.42"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.12"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_2_" fill="url(#face_highlight_5_)" d="M14.2,28.166c-3.018,0.023-5.374,2.247-6.394,5.193
+		c-0.332,0.959-0.147,2.021,0.49,2.813c1.364,1.699,2.864,3.142,4.73,4.044c1.568,0.76,3.767,1.192,5.945,0.624
+		c1.139-0.297,1.994-1.229,2.188-2.383c0.092-0.548,0.146-1.146,0.143-1.776C21.262,31.977,18.357,28.134,14.2,28.166z"/&gt;
+	
+		&lt;path id="Hair_Young_Black_1_" fill="#4B4B4B" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M10.359,31.625c1.709,2.166,4.667,3.459,4.667,3.459l-0.708-1.75c0,0,3.547,2.346,4.041,2.166c0.484-0.1-0.541-1.902-0.541-1.902
+		s1.568,0.896,2.428,1.983c0.9,1.14,2.143,1.752,2.143,1.752s1.346-10.974-8.523-10.961C4.359,26.354,6.25,38.839,6.25,38.839
+		L7.568,33.5c0,0,0.457,2.879,0.699,2.438C9.151,32.605,9.651,30.75,10.359,31.625z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_body_3_" cx="7.6602" cy="-1540.813" r="16.2003" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B0E8FF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_body_1_" fill="url(#collar_x5F_body_3_)" stroke="#5491CF" stroke-width="0.5" d="M0.471,56.384
+		c0,0.97,0.787,1.747,1.762,1.747h24.255c0.974,0,1.761-0.779,1.761-1.747c0,0-0.922-3.431-3.262-5.771
+		c-2.408-2.406-5.623-3.072-5.623-3.072c-0.885,0.827-2.805,1.4-5.031,1.4s-4.146-0.573-5.031-1.4c0,0-2.878,0.293-5.595,3.01
+		C0.91,53.346,0.471,56.384,0.471,56.384z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_r_3_" cx="15.8306" cy="-1535.874" r="4.6412" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_r_1_" fill="url(#collar_x5F_r_3_)" stroke="#5491CF" stroke-width="0.5" d="M19.301,45.689
+		c0,0-0.287,1.186-1.506,2.222c-1.055,0.897-2.893,1.036-2.893,1.036l1.986,3.107c0,0,1.479-0.818,2.504-1.924
+		c0.961-1.035,0.686-2.74,0.686-2.74L19.301,45.689z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_l_3_" cx="9.6494" cy="-1535.896" r="4.6422" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_l_1_" fill="url(#collar_x5F_l_3_)" stroke="#5491CF" stroke-width="0.5" d="M9.536,45.711
+		c0,0,0.288,1.186,1.506,2.221c1.055,0.896,2.893,1.037,2.893,1.037l-1.987,3.107c0,0-1.479-0.818-2.504-1.926
+		c-0.961-1.035-0.685-2.739-0.685-2.739L9.536,45.711z"/&gt;
+	
+		&lt;radialGradient id="Knob2_3_" cx="14.0645" cy="-767.6421" r="0.4842" gradientTransform="matrix(1 0 0 -1 0.1201 -714.5371)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob2_1_" fill="url(#Knob2_3_)" stroke="#5491CF" stroke-width="0.5" cx="14.35" cy="53.127" r="0.292"/&gt;
+	
+		&lt;radialGradient id="Knob1_3_" cx="14.0835" cy="-770.7642" r="0.4844" gradientTransform="matrix(1 0 0 -1 0.1201 -714.5371)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob1_1_" fill="url(#Knob1_3_)" stroke="#5491CF" stroke-width="0.5" cx="14.369" cy="56.25" r="0.292"/&gt;
+	&lt;path id="path5135_1_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M13.935,52.609c0,0-0.925,1.029-1.04,3.271
+		c-0.115,2.244,0,2.244,0,2.244h3.273c0,0,0.115,0.031-0.077-2.182c-0.2-2.303-1.194-3.334-1.194-3.334H13.935L13.935,52.609z"/&gt;
+	&lt;path id="path5131_1_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M14.377,49.34h0.062l1.276,2.001
+		c0.258,0.478-0.604,0.897-0.728,1.274l-1.14-0.008c-0.121-0.381-1.128-0.684-0.738-1.293L14.377,49.34z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+      <y:Resource id="2">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="59px" height="34px" viewBox="0 0 59 34" enable-background="new 0 0 59 34" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;radialGradient id="SVGID_1_" cx="13.5605" cy="2379.334" r="15.5262" fx="10.5317" fy="2377.6836" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="M24.766,25.613
+		c-2.199-2.197-5.477-2.941-6.033-3.055V18.9H9.64c0,0,0.019,3.451,0,3.436c0,0-3.437,0.498-6.154,3.217
+		c-2.797,2.795-3.236,5.834-3.236,5.834c0,0.969,0.788,1.744,1.762,1.744h24.255c0.974,0,1.761-0.777,1.761-1.744
+		C28.027,31.384,27.105,27.955,24.766,25.613z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="13.7114" cy="2365.3154" r="11.7124" fx="11.4265" fy="2364.0706" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_6_" fill="url(#face_x5F_white_1_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="
+		M21.838,11.679c0.043,5.1-3.369,9.26-7.623,9.293C9.964,21.005,6.483,16.899,6.44,11.8c-0.042-5.1,3.37-9.26,7.622-9.294
+		C18.314,2.473,21.795,6.58,21.838,11.679z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="5005.1221" y1="-9568.3623" x2="5016.9365" y2="-9615.0859" gradientTransform="matrix(0.275 0 0 -0.2733 -1363.6604 -2610.9094)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.42"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.12"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_6_" fill="url(#face_highlight_1_)" d="M13.979,3.167C10.961,3.19,8.605,5.414,7.585,8.36
+		c-0.332,0.96-0.147,2.021,0.49,2.814c1.365,1.699,2.865,3.142,4.73,4.044c1.569,0.759,3.767,1.192,5.946,0.624
+		c1.139-0.296,1.994-1.229,2.188-2.383c0.092-0.547,0.146-1.145,0.143-1.777C21.041,6.977,18.137,3.134,13.979,3.167z"/&gt;
+	&lt;path fill="#4B4B4B" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="M16.107,4.969
+		c0,0,2.845,1.375,3.845,4.063c1.052,2.826,2.062,4.116,2.095,4c0.938-3.396,0.531-10.719-5.086-10.793
+		C6.733-1.593,4.171,8.219,5.014,12.064c0.539,2.456,1.117,3.343,1.969,4.04C6.983,16.103,7.514,8.782,16.107,4.969z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="57.4639" y1="-2355.2373" x2="25.2671" y2="-2355.2373" gradientTransform="matrix(0.9852 0 0 -0.9852 -26.617 -2292.2966)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_21_" fill="url(#body_1_)" stroke="#008D33" stroke-width="0.5" d="M0.25,31.384c0,0.97,0.788,1.746,1.762,1.746
+		h24.255c0.974,0,1.761-0.778,1.761-1.746c0,0-0.922-3.432-3.262-5.771c-2.408-2.406-4.123-2.572-4.123-2.572
+		c-0.723,3.492-4.277,4.395-6.503,4.395c-2.227,0-5.75-0.994-6.06-4.395c0,0-1.877-0.207-4.594,2.512
+		C0.689,28.346,0.25,31.384,0.25,31.384z"/&gt;
+	
+		&lt;linearGradient id="neck_x5F_white_1_" gradientUnits="userSpaceOnUse" x1="43.8125" y1="2367.9678" x2="44.5419" y2="2385.4814" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="neck_x5F_white_5_" fill="url(#neck_x5F_white_1_)" stroke="#FFAB4F" stroke-width="0.5" stroke-miterlimit="10" d="
+		M39.859,18.9h9.094v10.115c-0.656,0.186-8.586,0.217-9.094,0.086V18.9z"/&gt;
+	
+		&lt;linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="43.3115" y1="2364.4336" x2="43.9321" y2="2379.3347" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="M54.986,25.613
+		c-2.199-2.197-5.479-2.941-6.033-3.055V18.9h-9.094c0,0,0.02,3.451,0,3.436c0,0-3.438,0.498-6.153,3.217
+		c-2.796,2.795-3.235,5.834-3.235,5.834c0,0.971,0.787,1.746,1.762,1.746h24.256c0.975,0,1.762-0.777,1.762-1.746
+		C58.248,31.384,57.326,27.955,54.986,25.613z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_2_" cx="43.9326" cy="2365.3154" r="11.7104" fx="41.6481" fy="2364.0708" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_5_" fill="url(#face_x5F_white_2_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="
+		M52.059,11.679c0.043,5.1-3.369,9.26-7.623,9.293c-4.25,0.032-7.73-4.074-7.773-9.173c-0.042-5.1,3.367-9.26,7.622-9.294
+		C48.535,2.473,52.016,6.58,52.059,11.679z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_2_" gradientUnits="userSpaceOnUse" x1="5115.0127" y1="-9568.3613" x2="5126.8276" y2="-9615.085" gradientTransform="matrix(0.275 0 0 -0.2733 -1363.6604 -2610.9094)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_5_" fill="url(#face_highlight_2_)" d="M44.2,3.167c-3.019,0.023-5.374,2.247-6.394,5.193
+		c-0.332,0.96-0.147,2.021,0.488,2.814c1.364,1.699,2.864,3.142,4.729,4.044c1.568,0.759,3.769,1.192,5.945,0.624
+		c1.139-0.296,1.994-1.229,2.188-2.383c0.092-0.547,0.146-1.145,0.143-1.777C51.262,6.977,48.357,3.134,44.2,3.167z"/&gt;
+	
+		&lt;path id="Hair_Young_Brown_2_" fill="#CC9869" stroke="#99724F" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M40.359,6.625c1.709,2.167,4.666,3.458,4.666,3.458l-0.707-1.75c0,0,3.547,2.345,4.041,2.167c0.482-0.1-0.541-1.903-0.541-1.903
+		s1.568,0.897,2.428,1.984c0.9,1.14,2.143,1.752,2.143,1.752s1.346-10.974-8.521-10.961c-9.508-0.017-7.616,12.467-7.616,12.467
+		L37.568,8.5c0,0,0.457,2.878,0.699,2.438C39.15,7.606,39.65,5.75,40.359,6.625z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_body_1_" cx="37.6201" cy="2381.0371" r="16.2003" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B0E8FF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_body_2_" fill="url(#collar_x5F_body_1_)" stroke="#5491CF" stroke-width="0.5" d="M30.471,31.384
+		c0,0.97,0.787,1.746,1.762,1.746h24.256c0.975,0,1.762-0.778,1.762-1.746c0,0-0.922-3.432-3.264-5.771
+		c-2.406-2.406-5.623-3.072-5.623-3.072c-0.885,0.828-2.805,1.4-5.029,1.4s-4.146-0.572-5.031-1.4c0,0-2.878,0.293-5.595,3.012
+		C30.91,28.346,30.471,31.384,30.471,31.384z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_r_1_" cx="45.791" cy="2376.1016" r="4.6398" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_r_2_" fill="url(#collar_x5F_r_1_)" stroke="#5491CF" stroke-width="0.5" d="M49.301,20.691
+		c0,0-0.287,1.186-1.506,2.221c-1.055,0.896-2.893,1.037-2.893,1.037l1.986,3.107c0,0,1.479-0.818,2.504-1.925
+		c0.961-1.036,0.686-2.739,0.686-2.739L49.301,20.691z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_l_1_" cx="39.6084" cy="2376.1211" r="4.6429" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_l_2_" fill="url(#collar_x5F_l_1_)" stroke="#5491CF" stroke-width="0.5" d="M39.536,20.71
+		c0,0,0.288,1.187,1.506,2.222c1.056,0.896,2.894,1.037,2.894,1.037l-1.986,3.106c0,0-1.479-0.818-2.506-1.925
+		c-0.961-1.037-0.685-2.739-0.685-2.739L39.536,20.71z"/&gt;
+	
+		&lt;radialGradient id="Knob2_1_" cx="44.0244" cy="1607.8691" r="0.485" gradientTransform="matrix(1 0 0 1 0.1602 -1579.7617)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob2_2_" fill="url(#Knob2_1_)" stroke="#5491CF" stroke-width="0.5" cx="44.35" cy="28.127" r="0.292"/&gt;
+	
+		&lt;radialGradient id="Knob1_1_" cx="44.043" cy="1610.9922" r="0.4847" gradientTransform="matrix(1 0 0 1 0.1602 -1579.7617)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob1_2_" fill="url(#Knob1_1_)" stroke="#5491CF" stroke-width="0.5" cx="44.369" cy="31.25" r="0.292"/&gt;
+	&lt;path id="path5135_2_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M43.936,27.611c0,0-0.926,1.027-1.041,3.271
+		c-0.115,2.244,0,2.244,0,2.244h3.273c0,0,0.115,0.03-0.077-2.183c-0.2-2.303-1.194-3.334-1.194-3.334L43.936,27.611L43.936,27.611z
+		"/&gt;
+	&lt;path id="path5131_2_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M44.377,24.339h0.063l1.275,2.002
+		c0.258,0.478-0.604,0.897-0.729,1.272l-1.139-0.008c-0.121-0.379-1.13-0.684-0.738-1.291L44.377,24.339z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+    </y:Resources>
+  </data>
+</graphml>

BIN
doc/pkar_res_lifecycle.png


+ 76 - 0
doc/remote_submission.md

@@ -0,0 +1,76 @@
+# Pocket Archive remote submission guide
+
+*Audience: system administrators, developers*
+
+Pocket archive supports submissions of local contents via its command-line
+interface, and of remote contents uploaded to a local folder.
+
+Pocket Archive does not have an administrative user interface. Instead, it
+relies on a "hot folder" method to support remote submissions. The `pkar_watch`
+utility is run on the machine that hosts Pocket Archive to watch a particular
+system folder for laundry lists.  Any time a file named `pkar_submission*.csv`
+is added to that folder, it is processed for submission.
+
+In order for this approach to work, the laundry list **must** be uploaded after
+all the other submission files have been successfully uploaded.
+
+The watched folder is local to the Pocket Archive operating system. However, it
+is possible to run an FTP server on the same folder, thus providing remote
+access and permission management.
+
+Note: currently, `pkar_watch` relies on `inotify`, a Linux utility. Until a
+POSIX compatible solution is implemented, the program can only be run on Linux.
+
+## Transfer protocols
+
+Pocket Archive itself does not provide a network service that allows remote
+users to upload their contents. However, setting up a SFTP, FTPS, WebDav, or
+other transfer service mapping directly to a local file system is a quite
+standard and straightforward way to expose a deposit endpoint and manage
+its permissions.
+
+The other way around is also possible, i.e., mounting the watched folder on the
+machine running Pocket Archive using a network protocol (SMB, NFS). This
+obviously works well only for a single-depositor scenario, in which the mounted
+folder is always accessible to the watchdog process. Note that if the depositor
+has to mount the foler remotely as well, two network transfers are necessary to
+process the SIP.
+
+### Note on S3
+
+S3 is not a good choice for this setup because it complicates things
+significantly, at least in the MinIO implementation of S3 that was tested.
+MinIO remaps the file and folder structure on disk in a way that it doesn't
+match what is seen on the S3 end, and what was uploaded by the depositor. As a
+consequence, the files uploaded from S3 cannot be easily utilized straight from
+the underlying storage (and they probably shouldn't, either). A separate
+process to monior S3 events and a second S3 transfer would be required to fetch
+the SIP, which is not in line with the minimalistic and low-bandwidth
+philosophy of Pocket Archive.
+
+## Watchdog process
+
+Remote submissions are enabled by running the `pkar_watch` service in the
+background:
+
+```
+pkar_watch [options] path
+```
+
+`path` points the folder to watch. It must be a local folder or a locally
+mounted network folder (*TODO the latter is not yet tested*).
+
+Other options include: 
+
+```
+    -l, --loglevel <number> (default: 3)
+        Log level: 1 = error, 2 = warning, 3 = info [default], 4 = debug.
+
+    -g, --gen-site
+        (Re-)generate the website after each submission.
+
+    -c, --cleanup
+        Remove laundry list and SIP after successful submission.
+```
+
+See `pkar_watch --help` for up to date information.

+ 9 - 7
doc/roadmap.md

@@ -69,21 +69,23 @@ usage and opportunities for expanding adoption in relevant areas.
   - ❏ Markdown support for individual fields
   - ❏ Markdown support for individual fields
 - ⚒ Generator
 - ⚒ Generator
   - ⎊ Generate site for one collection only
   - ⎊ Generate site for one collection only
-  - ❏ htmlgen option for local file or webserver URL generation
   - ✓ Generate LL for submission
   - ✓ Generate LL for submission
+  - ❏ htmlgen option for local file or webserver URL generation
   - ✖︎ Generate RDF (multi) [addressed by dump archive RDF]
   - ✖︎ Generate RDF (multi) [addressed by dump archive RDF]
 - ❏ Front end
 - ❏ Front end
+  - ✓ Mobile-friendly layout
+  - ❏ Enhanced styling and access
   - ❏ Category browsing
   - ❏ Category browsing
   - ❏ Improve search indexing
   - ❏ Improve search indexing
-  - ❏ Enhanced styling and access
 - ❏ Testing
 - ❏ Testing
     - ❏ Unit tests
     - ❏ Unit tests
-    -  Roundtrip submission, download LL, update, resubmission
-    -  >100 resource data set
--  Documentation
-  -  Break main sections off README
-  -  Submission guide
+    -  Roundtrip submission, download LL, update, resubmission
+    -  >100 resource data set
+-  Documentation
+  -  Break main sections off README
+  -  Submission guide
   - ❏ Site generation guide
   - ❏ Site generation guide
+  - ❏ Watchdog process guide
   - ❏ Content modeling guide (including proxy concepts)
   - ❏ Content modeling guide (including proxy concepts)
 
 
 ## Post-release
 ## Post-release

+ 416 - 59
doc/submission.md

@@ -1,62 +1,398 @@
-# Submission process
-
-The following are basic guidelines to build a submission package:
-
-- Resources are arranged in files and folders on a local filesystem that Pocket
-  Archive can access.
-- File and folder arrangement is important. A folder represents a descriptive
-  resource, and can have metadata attached to it. A file of folder under a
-  parent folder is automatically added as a *child* of the parent resource.
-  This relationship is intended to present the parent as a container of other
-  sub-resources (descriptive and/or opaque). With this method, hierarchies of
-  any complexity can be built.
-- File and folder order in the submission folder is *not* important. No need to
-  rename files and folders to force a specific ordering. This is specified via
-  laundry list instead. See below.
-- The laundry list file is placed under the submission package folder and must
-  be named `pkar_submission.csv`.
-
-A laundry list is thus formatted:
-
-- The first row is reserved for the headers, which indicate the field names.
-- Each subsequent row represents a resource (except in a multi-value case,
-  described below). The `pas:sourcePath` and `pas:contentType` fields are
-  mandatory for each resource. All other fields are optional for the
-  submission, however, some type definitions may have constraints in this
-  regard.
-- All field names, except for `id`, have a namespace prefix among the ones
-  defined in the configuration. See dedicated section for details about
-  namespaces.
-- Fields with a special meaning:
-    - `id`: optional and single-valued. If provided, it becomes the primary
-      identifier for the resource, which is used anywhere information about the
-      resource is retrieved. The depositor is responmsible for ensuring that
-      the provided ID is unique across the system. If left blank, the system
-      generates an identifier that is guaranteed to be unique.
-    - `pas:sourcePath`: mandatory and single-valued. It refers to the file or
-      folder path relative to the package.
-    - `pas:contentType`: mandatory and single-valued. It defines the content
-      type assigned to the resource. For files, it should be `pas:File` or a
-      sub-type thereof. For folders it must not be a `pas:File` or sub-type.
-- To provide multiple values for one or more fields, additional values are
-  added to rows below the previous. For these additional rows, the `sourcePath`
-  field **must not** be filled, and additional values for single-valued fields
-  are ignored.
-- The ordering of the rows determines the ordering of the resources in their
-  container. The system automatically assigns an order to the resources, using
-  their source path and their position in the laundry list. Resources at the
-  top are not assigned an order, as they are considered self-standing. If an
-  order is needed for those, the `pas:next` field can be set to the desired
-  resource (see point below about relationships), or they can be put in an
-  enclosing folder that acts as a collection.
-- Relationships can be established between resources. These are stored as
-  persistent links and appear as hyperlinks in the discovery interface. A
-  relationship can only be set for a field that is configured as "resource"
-  type. To set a relationship with a resource in the
-  same laundry list that doesn't have an explicit ID set, insert the source
-  path of the resource. For a resource that has already an ID, either by being
-  assigned one manually or by being already deposited, insert the full ID
-  including the `par:` namespace (e.g. for ID `12345`, insert `par:12345`).
+# Pocket Archive submission guide
+
+*Audience: archivists, system administrators, developers*
+
+**WORK IN PROGRESS**
+
+Terms appearing in **bold** are referenced in the [glossary](./glossary.md).
+
+## Archival process overview
+
+Pocket Archive receives new contents, and updates to existing contents, via
+**submissions**. A submission is an individual contribution to the archive that
+can add, update, or delete **resources** (a combination of any of these). A
+submission may include multiple resources, which can be related but do not
+necessarily have to.
+
+![The full cycle of operations for a given resource in Pocket
+Archive.](./pkar_res_lifecycle.png)
+
+1. Archivist selects and lays out resources to be archived in his or her own
+   workstation.
+2. Archivist creates a **laundry list** that includes an inventory of the
+   resources and their metadata. This, together with the files and folders
+   previously prepares, constitutes the **SIP**.
+3. Archivist transfers the SIP to the **Drop box**: first the files and
+   folders, then the laundry list.
+4. Upon receipt of the laundry list, Pocket Archive processes the incoming
+   materials and archives them.
+5. Pocket Archive generates a report after the process is complete (regardless
+   of whether it was successful or failed).
+6. Depending on setup, Pocket Archive may delete the SIP from the Drop box if
+   the submission succeeded.
+7. Depending on setup, Pocket Archive may (re-)generate the static site.
+8. If the archivist wants to update the archived resources, they can either
+   request a full copy of the SIP, or to only update metadata, only the laundry
+   list, and re-submit it.
+
+Processing of the SIP (point 4 above) either succeeds or fails as a unit. This
+means that a submission will never perform only a part of the task that it is
+meant to do. This is called an **atomic** operation and it is designed to
+ensure consistency of the data.
+
+Individual steps are described in detail in the following chapters.
+
+## Submission Information Package structure
+
+A submission is performed by preparing a Submission Information Package, or
+**SIP**, which consists of data, i.e. files optionally arranged in a
+curator-defined folder hierarchy, and metadata, the latter gathered in a single
+file called a laundry list; and sending them both to Pocket Archive for
+processing.
+
+A [working SIP example](../test/sample_submission) including files and a
+laundry list, used for testing, is available as a quick reference. Other
+examples are illustrated further down in this document.
+
+As the above life cycle chart shows, the SIP is a disposable artifact. Once it
+is successfully archived, it can be deleted. The full SIP can be regenerated by
+the archive and retrieved at a later time.
+
+The original files in the archivist's workstation can be optionally kept and/or
+copied to local storage. This is stongly recommended, at least until Pocket
+Archive reaches a stable status and can be exclusively relied on for long-term
+preservation. More copies means more chances to recover data from corruption or
+loss, but it also means higher storage costs.
+
+### Source file & folder layout
+
+Preparation of the SIP begins with selecting the materials to submit.
+Generally, it is good practice to select a group of **artifacts** more or less
+related to one another, e.g. a small coherent **collection**, or a day's work
+within a large collection that may take long to complete. It is not critical
+to get this part perfectly right, as more can be added to the archive at a
+later time. It is more important to keep submissions not too large, as a single
+malformed element can cause the whole submission to fail, and not too small, to
+avoid too many iterations that can become confusing. Submissions of tens to
+hundreds of files are in a quite safe range.
+
+The arrangement of files and folders is important, the ordering of elements
+in a folder is less so. A file or sub-folder inside a parent folder creates a
+membership relationship between the two, so that, e.g. one can create the
+following structure:
+
+```
+my_collection
+  |
+  `- artifact1
+  |   |
+  |   `- file01.tiff
+  |   |
+  |   `- file02.pdf
+  |
+  `- artifact2
+      |
+      `- file3.mpg
+```
+
+This creates a collection, `my_collection`, with two members, `artifact1` and
+`artifact2`, the former containing `file1.tiff` and `file2.pdf`, and the latter
+containing `file3.mpg`.
+
+Ordering of the files or folder in a SIP is defined in the laundry list, as we
+will see further down, so using file namings to force a certain order is not
+necessary (however it can provide a good starting point for large lists of
+files or folders under a parent).
+
+Some file and folder structure will be also used in future versions of Pocket
+Archive to create more metadata, but at the moment this is not implemented.
+
+Empty folders can be created and submitted: they can be used as placeholders
+for resources that have no files directly related. But the same effect can be
+obtained by other means with the laundry list.
+
+### Laundry list
+
+Once the files to be included in the SIP is completed, a laundry list is
+compiled. This is basically, as the name suggests, an inventory of all the
+resources that go into the submission; but it provides much more information
+than that, by defining metadata and relationships between resources.
+
+The laundry list is a **CSV** file.
+
+Laundry lists may be edited in any application that supports CSV reading and
+writing. Care must be taken to export the file to CSV. In LibreOffice, for
+example, "Save" writes the file as `.odt` format, which is not usable as a
+laundry list. The spreadsheet must be instead exported as a `.csv` format.
+
+#### Multi-sheet documents
+
+Many spreadsheet applications allow grouping multiple tables or sheets in one
+file. CSV supports only one table per file. While some may find it convenient
+to keep multiple laundry lists in one spreadsheet file, one must take care of
+exporting each sheet individually as a CSV.
+
+#### Laundry list format
+
+The first row of a laundry list is reserved for the header, which indicates the
+field names.  These can be in any order, but following a specific order is
+recommended. The order used in this document and in all laundry lists
+automatically generated by Pocket Archive is: `content_type`, `id`,
+`source_path`, and then all ordinary fields in alphabetical order.
+
+Each subsequent row represents a resource (except in a multi-value case,
+described below). The `content_type` field is mandatory for each resource.
+
+The `source_path` field is only mandatory for files. All other fields are
+optional for the submission, however, some type definitions may have
+constraints in this regard and may be at least strongly recommended. This
+depends on the content model used.
+
+#### Fields with a special meaning
+
+- `content_type`: mandatory, single-valued. It defines the content type
+  assigned to the resource. For files, it must be `file` or a sub-type thereof,
+  except for inferred resources (see below). For folders it must not be a
+  `file` or sub-type. Consult the content model of your archive for a list of
+  defined type names.
+- `id`: optional, single-valued. If provided, it becomes the primary
+  identifier for the resource, which is used anywhere information about the
+  resource is retrieved. The IDs generated by default by Pocket Archive are
+  16-character random strings containing only uppercase and lowercase letters
+  and digits. The depositor is responsible for ensuring that the provided ID
+  is unique across the system. If left blank, the system generates an
+  identifier that is guaranteed to be unique. However, re-submitting the
+  laundry list a second time with the same blank field will create a duplicate
+  resource.
+- `source_path`: mandatory for files, single-valued. It refers to the
+  file or folder path relative to the package, using forward slash `/`
+  characters to separate folders and subfolders or files.
+
+Example of a table representing an artifact with two files:
+
+<table>
+  <thead>
+    <tr>
+      <th>content\_type</th>
+      <th>id</th>
+      <th>source\_path</th>
+      <th>creation\_date</th>
+      <th>label</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>still\_image</td>
+      <td>Sg9hYIISjRjlkP62</td>
+      <td>my\_collection/artifact1</td>
+      <td>My first deposited artifact</td>
+      <td>2002</td>
+    </tr>
+    <tr>
+      <td>still\_image\_file</td>
+      <td>7hic19YTXA8Fudxo</td>
+      <td>my\_collection/artifact1/file1.tiff</td>
+      <td>2025</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>still\_image\_file</td>
+      <td>Z509TdNhpTjPYDS4</td>
+      <td>my\_collection/artifact1/file2.pdf</td>
+      <td>2025</td>
+      <td></td>
+    </tr>
+  </tbody>
+</table>
+
+Note the difference between the `still_imge` and the `still_image_file`
+resources. We will get back to it further down.
+
+#### Multi-valued fields
+
+Some fields may allow multiple values. To provide multiple values for one or
+more fields, additional values are added to rows below the previous. For these
+additional rows, the special fields `content_type`, `id`, and `source_path`
+**must not** be filled.
+
+Example of a table with a single resource with multi-valued fields:
+
+<table>
+  <thead>
+    <tr>
+      <th>content\_type</th>
+      <th>id</th>
+      <th>source\_path</th>
+      <th>alt\_label</th>
+      <th>description</th>
+      <th>label</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>still\_image</td>
+      <td>Sg9hYIISjRjlkP62</td>
+      <td>my\_collection/artifact1</td>
+      <td>An alternative label</td>
+      <td>A description of the artifact goes here.</td>
+      <td>This is the title and must have only one value.</td>
+    </tr>
+    <tr>
+      <td></td>
+      <td></td>
+      <td></td>
+      <td>You can have as many as you like of these</td>
+      <td>Another description goes here.</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td></td>
+      <td></td>
+      <td></td>
+      <td>FREE alt labels! (as long as supplies last)</td>
+      <td></td>
+      <td></td>
+    </tr>
+  </tbody>
+</table>
+
+The submission process checks if the `content_type` field is filled in a cell
+to determine whether a row in the table is a continuation from the previous
+one, adding multiple values. Having a row without `content` type and with `id`
+and/or `source_path` is considered an error.
+
+#### Ordering (sorting)
+
+The ordering of rows in a laundry list determines the ordering of the resources
+in their container. The system automatically assigns an order to the resources,
+using their source path and their position in the laundry list.  Resources at
+the top are not assigned an order, as they are considered self-standing. If an
+order is needed for those, the `pas:next` **property** can be set to the
+desired resource (see point below about relationships), or they can be put in
+an enclosing folder that acts as a collection.
+
+**Relationships** can be established between resources. These are stored as
+persistent links and appear as hyperlinks in the discovery interface. A
+relationship can only be set for a field that is configured as "resource" type.
+Consult your **content model** to find which properties are relationships.
+
+To set a relationship with a resource in the same laundry list that doesn't
+have an explicit ID set, insert the source path of the resource. For a resource
+that has already an ID, either by being assigned one manually or by being
+already deposited, insert the ID string.
+
+Example table with implicit and explicit relationships, some path-based and
+some ID-based:
+
+<table>
+  <thead>
+    <tr>
+      <th>content\_type</th>
+      <th>id</th>
+      <th>source\_path</th>
+      <th>has\_member</th>
+      <th>label</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>collection</td>
+      <td>p9tXQGBb9iC7xEqm</td>
+      <td>my\_collection-1</td>
+      <td></td>
+      <td>This collection has implicit members from the folder hierarchy.</td>
+    </tr>
+    <tr>
+      <td>still\_image</td>
+      <td>KHwYidw4R7xUAEMN</td>
+      <td>my\_collection-2/image001</td>
+      <td></td>
+      <td>Resource with an explicit ID. The ID can be used in a reference.</td>
+    </tr>
+    <tr>
+      <td>text</td>
+      <td></td>
+      <td>my\_collection-2/text0001</td>
+      <td></td>
+      <td>Resource without explicit ID. It can be referenced by source\_path.</td>
+    </tr>
+    <tr>
+      <td>collection</td>
+      <td>EUXRg9igmU9ouzVH</td>
+      <td>my\_collection-2</td>
+      <td>p9tXQGBb9iC7xEqm</td>
+      <td>This collection has explicit member relationships.</td>
+    </tr>
+    <tr>
+      <td></td>
+      <td></td>
+      <td></td>
+      <td>my\_collection-2/text0001</td>
+      <td></td>
+    </tr>
+  </tbody>
+</table>
+
+When the laundry list is processed for submission, the path-based references
+are replaced with IDs, which are automatically generated where not provided.
+Therefore, a laundry list generated from archived resources may look different
+from the original one. The generated laundry list should be used for
+re-submission.
+
+#### Resource types and sub-types
+
+This chapter is a very concise introduction to content modeling in Pocket
+Archive, which is treated in detail in the [Content modeling guide
+(WIP)](./content_model.md). It is strongly recommended to read that guide
+before archiving resources in earnest.
+
+The three main resource types found in a submission are:
+
+- **Artifact**: the digital surrogate of a physical and/or intellectual object,
+  such as a photograph, a video, a letter, a painting, etc. This resource
+  contains data related to the subject, content, author, taxonomy, etc. of the
+  intellectual work.
+- File: a digital capture or document related to an artifact. The file is
+  accompanied by a **metadata** resource, which is automatically generated fom
+  the metadata that the archivist enters in the laundry list. These metadata
+  should be exclusively about the file itself, e.g. time of creation, file
+  size, file type, etc, as well as how the file relates to the artifact (e.g.
+  detail shot, documentation, transcript, 3/4 view, etc) or other files. Some
+  of these metadata are generated automatically by analyzing the file during
+  the submission process. Information about the artifact itself go exclusively
+  on the artifact resource.
+- **Brick**: a structural element used to build logical, hierarchical
+  structures with multiple resources. Bricks can represent many things: the
+  ordering of chapters and pages in a book, front and back sides of a postcard
+  or a vinyl record, the ordering of artifacts and collections in a collection,
+  etc. They have no intellectual content themselves, but they can reference an
+  artifact or file. They are mostly automatically generated by the submission
+  process, and are mostly hidden in the **presentation**, but they can be
+  explicitly created in a laundry list to create specific structures.
+
+These three key content types are seldom used as-is. They usually have
+sub-types, which are defined in the content model. See the content modeling
+guide for more information about sub-types.
+
+Also see the [sample laundry
+list](../test/sample_submission/pkar_submisson-demo.csv) for examples of
+artifacts, files, and bricks making up a two-sided postcard.
+
+### Submission ID and submission name
+
+Each submission gets a randomly generated ID when it starts. This ID is
+attached to all the resources in the submission. This makes it easier to It
+also makes it possible to generate a laundry list that contains exactly the
+same resources that were originally submitted (possibly with added
+auto-generated implicit resources).
+
+The ID is automatically generated and system-controlled. It cannot be changed.
+A submission can also have a name, which is optional and user-defined. The
+submission name is determined by the file name used for the laundry list. E.g.
+`pkar_submission-my_new_collection.csv` will use `my_new_collection`, i.e. the
+text between `pkar_submission-` and `.csv`, as the submission name. Submisson
+names are not required to be unique, but they can contain for example a date to
+facilitate their search.
 
 
 ### Update
 ### Update
 
 
@@ -68,3 +404,24 @@ To facilitate this task while avoiding the need to hold on to all of the
 archive's laundry lists, Pocket Archive can generate a laundry list for one or
 archive's laundry lists, Pocket Archive can generate a laundry list for one or
 more selected resources. This list, which represents the current state of the
 more selected resources. This list, which represents the current state of the
 resources requested, can be edited and submitted for an update. 
 resources requested, can be edited and submitted for an update. 
+
+### Shortcuts
+
+Some shortcuts are available to facilitate the management of larger
+submissions.
+
+#### Implicit resources
+
+Some implicit resources are created 
+
+#### ID generation
+
+As mentioned before, explicitly adding IDs in a laundry list simplifies later
+editing and management. However, this is one of the most tedious parts of a
+laundry list creation.
+
+Fortuntately, such repetitive and error-prone tasks can be easily automated
+with tools provided by most spreadsheet applications. A macro (a mini-program
+that runs in an application) for LibreOffice Calc is [provided
+here](../src/util/libreoffice_idgen.bas) to automatically generate 16-character
+IDs for all the cells selected in a table.

+ 45 - 0
src/util/libreoffice_idgen.bas

@@ -0,0 +1,45 @@
+REM  ***** BASIC  *****
+Sub generate_id()
+    REM Generate a 16-character long random ID for Pocket Archive.
+    REM Use this macro in Libreoffice Calc on a single or multiple cells for
+    REM quickly filling in any range of cells with fresh IDs.
+    REM The CurrentSelection will even contain the stacked ranges
+    REM of additional sheets IF MORE THAN ONE SHEET IS SELECTED.
+
+    Const CHARS As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+    Const STRING_LENGTH As Integer = 16
+    Dim oSelection As Object
+    Dim oCell As Object
+    Dim sRandomString As String
+    Dim i As Integer
+    Dim iCharIndex As Integer
+    Dim iCharsLength As Integer
+
+    ' Get the current selection.
+    iCharsLength = Len(CHARS)
+
+    sel =ThisComponent.CurrentSelection
+    If sel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
+        rgs = sel
+    Else
+        If NOT sel.supportsService("com.sun.star.sheet.SheetCellRange") Then Exit Sub
+        rgs = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
+        rgs.addRangeAddress(sel.RangeAddress, False)
+    End If
+    For Each rg In rgs
+        uR = rg.Rows.Count - 1
+        uC = rg.Columns.Count - 1
+        Randomize
+        For r = 0 To uR
+            For c = 0 To uC
+                rcCell = rg.getCellByPosition(c, r)
+                sRandomString = ""
+                For i = 1 To STRING_LENGTH
+                    iCharIndex = Int((iCharsLength * Rnd) + 1)
+                    sRandomString = sRandomString & Mid(CHARS, iCharIndex, 1)
+                Next i
+                rcCell.setString(sRandomString)
+            Next c
+        Next r
+    Next rg
+End Sub

+ 0 - 0
test/sample_submission/demo01/coll2/.keep → test/sample_submission/coll2/.keep


+ 0 - 0
test/sample_submission/demo01/demo_collection/demo_postcard/back/567890.jpg → test/sample_submission/demo_collection/demo_postcard/back/567890.jpg


+ 0 - 0
test/sample_submission/demo01/demo_collection/demo_postcard/front/54321.jpg → test/sample_submission/demo_collection/demo_postcard/front/54321.jpg


+ 0 - 0
test/sample_submission/demo01/demo_collection/description.md → test/sample_submission/demo_collection/description.md


+ 0 - 0
test/sample_submission/demo01/demo_collection/single_image/0685_04.jpg → test/sample_submission/demo_collection/single_image/0685_04.jpg


+ 0 - 0
test/sample_submission/demo01/pkar_submission-demo.csv → test/sample_submission/pkar_submission-demo.csv