diff --git a/src/components/Diagrams/index.js b/src/components/Diagrams/index.js index 2973251..226a939 100644 --- a/src/components/Diagrams/index.js +++ b/src/components/Diagrams/index.js @@ -98,26 +98,26 @@ export const OptimisticUI = () => { export const NewClientConnection = () => { return ( -
+
-
+
A new client connects, receives a copy of the document from the server
) } export const WhiteboardConflict = () => { return ( -
+
-
+
Concurrent edits can lead to conflicting state
) } @@ -202,26 +202,26 @@ export const OT = () => { export const SyncingModel1 = () => { return ( -
+
-
+
All local changes are saved in a pending queue
) } export const SyncingModel3 = () => { return ( -
+
-
+
Local changes are sent to the server, and removed from the pending queue when confirmed
) } @@ -234,7 +234,7 @@ export const SyncingModel4 = () => { data="/img/diagrams/diag-syncingModel-4.svg" className="w-full" > -
+
Authoritative updates are sent to all connected clients
) } @@ -260,33 +260,33 @@ export const CloudflareArchitecture = () => { data="/img/diagrams/diag-cloudflare-architecture.svg" className="w-8/12" > -
+
New Durable Objects are created on demand, allowing near limitless scaling
) } export const StateUpdates = () => { return ( -
+
-
+
With each sever update, the entire dataset is sent to the client
) } export const DeltaUpdate = () => { return ( -
+
-
+
With delta updates, only the changes are sent to the client
) } @@ -299,7 +299,7 @@ export const SnapshotID = () => { data="/img/diagrams/diag-snapshotId.svg" className="w-8/12" > -
+
The client checks the `snapshotID` for every update it receives
) } @@ -312,20 +312,20 @@ export const ON2Messaging = () => { data="/img/diagrams/diag-ON2-messaging.svg" className="w-10/12" > -
+
Each client message received results in a full broadcast to all clients
) } export const TimeDrivenMessages = () => { return ( -
+
-
+
The server collates all updates received within a specified time interval, and broadcasts them all in a single update
) } @@ -338,20 +338,20 @@ export const ONMessaging = () => { data="/img/diagrams/diag-ON-messaging.svg" className="w-10/12" > -
+
Client messages are collated based on a time interval, greatly reducing how many messages are sent by the server
) } export const Subscriptions = () => { return ( -
+
-
+
Subscriptions create a link between specific React components and their respective data on the server
) } @@ -364,7 +364,7 @@ export const DashboardArchitecture = () => { data="/img/diagrams/diag-Dashboard-Architecture.svg" className="w-8/12" > -
+
Both client app and express backend run locally
) } diff --git a/src/pages/case-study.mdx b/src/pages/case-study.mdx index 44a60c5..396c2dc 100644 --- a/src/pages/case-study.mdx +++ b/src/pages/case-study.mdx @@ -211,7 +211,7 @@ Since the advent of Google Docs, the ability for multiple clients to simultaneou -If these changes occur simultaneously, a conflict clearly occurs and to maintain a consistent, synchronized view across clients (i.e. state convergence), there must be some kind of conflict-resolution strategy in place +If these changes occur simultaneously, a conflict clearly occurs and to maintain a consistent, synchronized view across clients (i.e. state convergence), there must be some kind of conflict-resolution strategy in place. #### Conflict Resolution Strategies @@ -237,7 +237,7 @@ However, if a change is meant to be [deterministic](https://en.wikipedia.org/wik The process of transactional conflict resolution is somewhat simple to reason about. -If two clients make a concurrent change to the same object but modify a different property, no conflicts occur. Because clients only send the intent of a change, these can both be processed in the order of arrival by the server +If two clients make a concurrent change to the same object but modify a different property, no conflicts occur. Because clients only send the intent of a change, these can both be processed in the order of arrival by the server. @@ -245,9 +245,9 @@ When concurrent changes occur to the same property, a conflict occurs. By defaul -However, depending on the application, it is possible to build in any custom conflict resolution that would override the default Last Write Wins Behavior +However, depending on the application, it is possible to build in any custom conflict resolution that would override the default Last Write Wins Behavior. -While this strategy may not be best suited for use cases where LLW is not the desired default resolution strategy or for decentralized architectures, it is highly flexible and easy to reason about +While this strategy may not be best suited for use cases where LLW is not the desired default resolution strategy or for decentralized architectures, it is highly flexible and easy to reason about. ##### Conflict-Free Replicated Data Types (CRDTs) @@ -365,8 +365,8 @@ Next one can choose to add Syncosaurus to an existing React project using `npx s - + style={{ transform: 'scale(.82)', borderRadius: '0.5rem' }} +> #### Create and Launch @@ -562,7 +562,12 @@ The dashboard includes hourly time-series metrics related to errors and usage fo src="/img/screenshots/dashboard_screenshot.png" alt="dashboard screenshot" width="85%" - style={{ transform: 'scale(.82)', borderRadius: '0.5rem', boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)' }} + style={{ + transform: 'scale(.82)', + borderRadius: '0.5rem', + boxShadow: + '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', + }} />
diff --git a/static/img/diagrams/diag-CRDT.svg b/static/img/diagrams/diag-CRDT.svg index e49a2bc..65c6c65 100644 --- a/static/img/diagrams/diag-CRDT.svg +++ b/static/img/diagrams/diag-CRDT.svg @@ -1,279 +1,277 @@ - +<svg cache-id="e1373ef1aa0e457ab5503228fa3aa4d0" id="eVAIOMX2b5j1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 600" shape-rendering="geometricPrecision" text-rendering="geometricPrecision"><defs><filter id="eVAIOMX2b5j4-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j4-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j4-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j4-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j4-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j4-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j4-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j4-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j5-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j5-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j5-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j5-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j5-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eVAIOMX2b5j5-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j5-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j5-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j5-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j5-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j5-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j5-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j5-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j5-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j5-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j5-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j5-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eVAIOMX2b5j5-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eVAIOMX2b5j6-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j6-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j6-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j6-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j6-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j8-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j8-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j8-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j8-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j8-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j8-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j8-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j8-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j9-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j9-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j9-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j9-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j9-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eVAIOMX2b5j9-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j9-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j9-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j9-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j9-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j9-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eVAIOMX2b5j9-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j9-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j9-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j9-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j9-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j9-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eVAIOMX2b5j9-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eVAIOMX2b5j10-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j10-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j10-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j10-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j10-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j132-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j132-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j132-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j132-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j132-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j132-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j132-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j132-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j133-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j133-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j133-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j133-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j133-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eVAIOMX2b5j133-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j133-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j133-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j133-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j133-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j133-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j133-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j133-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j133-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j133-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j133-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j133-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eVAIOMX2b5j133-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eVAIOMX2b5j134-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j134-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j134-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j134-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j134-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j136-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j136-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j136-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j136-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j136-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j136-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j136-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j136-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j137-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j137-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j137-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j137-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j137-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eVAIOMX2b5j137-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j137-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j137-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j137-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j137-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j137-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eVAIOMX2b5j137-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j137-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j137-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j137-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j137-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j137-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eVAIOMX2b5j137-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eVAIOMX2b5j138-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j138-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j138-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j138-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j138-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j256-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j256-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j256-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j256-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j256-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j256-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j256-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j256-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j257-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j257-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j257-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j257-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j257-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eVAIOMX2b5j257-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j257-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j257-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j257-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j257-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j257-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j257-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j257-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j257-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j257-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j257-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j257-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eVAIOMX2b5j257-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eVAIOMX2b5j258-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j258-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j258-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j258-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j258-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j260-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j260-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j260-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j260-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j260-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j260-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j260-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j260-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j261-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j261-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j261-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j261-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j261-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eVAIOMX2b5j261-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j261-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j261-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j261-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j261-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j261-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eVAIOMX2b5j261-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j261-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j261-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j261-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j261-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j261-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eVAIOMX2b5j261-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eVAIOMX2b5j262-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j262-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j262-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j262-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j262-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j380-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j380-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j380-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j380-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j380-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j380-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j380-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j380-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j381-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j381-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j381-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j381-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j381-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eVAIOMX2b5j381-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j381-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j381-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j381-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j381-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j381-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j381-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j381-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j381-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j381-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j381-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j381-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eVAIOMX2b5j381-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eVAIOMX2b5j382-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j382-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j382-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j382-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j382-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j384-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j384-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j384-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j384-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j384-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j384-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j384-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j384-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j385-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j385-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j385-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j385-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j385-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eVAIOMX2b5j385-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j385-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j385-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j385-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j385-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j385-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eVAIOMX2b5j385-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j385-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j385-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j385-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j385-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j385-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eVAIOMX2b5j385-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eVAIOMX2b5j386-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j386-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j386-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j386-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j386-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j504-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j504-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j504-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j504-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j504-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j504-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j504-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j504-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j505-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j505-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j505-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j505-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j505-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eVAIOMX2b5j505-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j505-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j505-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j505-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j505-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j505-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j505-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j505-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j505-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j505-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j505-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j505-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eVAIOMX2b5j505-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eVAIOMX2b5j506-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j506-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j506-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j506-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j506-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eVAIOMX2b5j508-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j508-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eVAIOMX2b5j508-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eVAIOMX2b5j508-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eVAIOMX2b5j508-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j508-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j508-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j508-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eVAIOMX2b5j509-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eVAIOMX2b5j509-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eVAIOMX2b5j509-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eVAIOMX2b5j509-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eVAIOMX2b5j509-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eVAIOMX2b5j509-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j509-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eVAIOMX2b5j509-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eVAIOMX2b5j509-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eVAIOMX2b5j509-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eVAIOMX2b5j509-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eVAIOMX2b5j509-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eVAIOMX2b5j509-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eVAIOMX2b5j509-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eVAIOMX2b5j509-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eVAIOMX2b5j509-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j509-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eVAIOMX2b5j509-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eVAIOMX2b5j510-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eVAIOMX2b5j510-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eVAIOMX2b5j510-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eVAIOMX2b5j510-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eVAIOMX2b5j510-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient></defs><g transform="translate(606.968343 284.154681)"><g transform="matrix(.974062 0 0 0.974063-73.263534-546.733866)"><path d="M346.64,1030.4h117.33c3.6094,0,6.6562-2.5312,7.3594-6.0469l19.453-99.844h218.48l19.453,99.844c.70312,3.5625,3.75,6.0469,7.3594,6.0469h117.33c29.953,0,25.969,31.828,25.969,51.938h-558.71c0-20.109-3.9844-51.938,25.969-51.938h.0072Zm764.58-912.74c28.219,0,51.281,23.109,51.281,51.281v679.26c0,28.219-23.109,51.281-51.281,51.281h-1022.4c-28.172,0-51.281-23.062-51.281-51.281v-679.26c0-28.219,23.109-51.281,51.281-51.281h1022.4Zm-17.719,69.703h-987v642.42h987v-642.42Z" transform="matrix(.206263 0 0 0.206262 107.089442 591.077516)" filter="url(#eVAIOMX2b5j132-filter)" fill="#ffb703" fill-rule="evenodd"/><path d="M28.631374,420.431528l203.581581.000001v132.506833h-203.581581v-132.506834Z" transform="translate(100.427249 209.059543)" filter="url(#eVAIOMX2b5j133-filter)" fill="url(#eVAIOMX2b5j133-fill)" stroke-width="4"/><path d="M28.631374,420.431528l203.581581.000001v132.506833h-203.581581v-132.506834Z" transform="translate(100.427249 209.059543)" opacity="0.5" fill="url(#eVAIOMX2b5j134-fill)" stroke-width="4"/></g><g transform="matrix(.969638 0 0 0.96964-69.456464-543.132152)"><path d="M346.64,1030.4h117.33c3.6094,0,6.6562-2.5312,7.3594-6.0469l19.453-99.844h218.48l19.453,99.844c.70312,3.5625,3.75,6.0469,7.3594,6.0469h117.33c29.953,0,25.969,31.828,25.969,51.938h-558.71c0-20.109-3.9844-51.938,25.969-51.938h.0072Zm764.58-912.74c28.219,0,51.281,23.109,51.281,51.281v679.26c0,28.219-23.109,51.281-51.281,51.281h-1022.4c-28.172,0-51.281-23.062-51.281-51.281v-679.26c0-28.219,23.109-51.281,51.281-51.281h1022.4Zm-17.719,69.703h-987v642.42h987v-642.42Z" transform="matrix(.206263 0 0 0.206262 410.868435 591.077516)" filter="url(#eVAIOMX2b5j136-filter)" fill="#219ebc" fill-rule="evenodd"/><path d="M28.631374,420.431528l203.581581.000001v132.506833h-203.581581v-132.506834Z" transform="translate(404.21015 208.860326)" filter="url(#eVAIOMX2b5j137-filter)" fill="url(#eVAIOMX2b5j137-fill)" stroke-width="4"/><path d="M28.631374,420.431528l203.581581.000001v132.506833h-203.581581v-132.506834Z" transform="translate(404.208195 209.059543)" opacity="0.5" fill="url(#eVAIOMX2b5j138-fill)" stroke-width="4"/></g><g transform="translate(.000001 0)"><g transform="translate(.000001 0)"><g transform="translate(-31.762539 0.000004)"><g transform="translate(22.498128 2.690788)"><g><rect width="43.20571" height="62.977814" rx="0" ry="0" transform="matrix(.735147 0 0 0.79044 65.576787 105.355906)" fill="none" stroke="#000" stroke-width="2"/><path d="M65.576787,141.398273h31.762548" fill="none" stroke="#000" stroke-width="1.2"/></g><text dx="0" dy="0" font-family="&quot;eVAIOMX2b5j1:::Raleway&quot;" font-size="22.5" font-weight="700" transform="matrix(1.132295 0 0 1.132278 71.966245 132.310662)" stroke-width="0"><tspan y="0" font-weight="700" stroke-width="0"><![CDATA[ H - + 0a - + e - + 1a - + l - + 2a - + o - + 3a - + l - + 4a - + ! - + 4b - + insert ' - + l - + ' with ID - + 4a - + after - + 2a - + H - + 0a - + e - + 1a - + l - + 2a - + o - + 3a - + ! - + 4b - + l - + 4a - + insert ' - + ! - + ' with ID - + 4b - + after - + 3a - + H - + 0a - + e - + 1a - + l - + 2a - + o - + 3a - + l - + 4a - + ! - + 4b - + insert ' - + l - + ' with ID - + 4a - + after - + 2a - + H - + 0a - + e - + 1a - + l - + 2a - + o - + 3a - + ! - + 4b - + l - + 4a - + insert ' - + ! - + ' with ID - + 4b - + after - + 3a - + H - + 0a - + e - + 1a - + l - + 2a - + o - + 3a - + l - + 4a - + ! - + 4b - + insert ' - + l - + ' with ID - + 4a - + after - + 2a - + H - + 0a - + e - + 1a - + l - + 2a - + o - + 3a - + ! - + 4b - + l - + 4a - + insert ' - + ! - + ' with ID - + 4b - + after - + 3a - + H - + 0a - + e - + 1a - + l - + 2a - + o - + 3a - + l - + 4a - + ! - + 4b - + H - + 0a - + e - + 1a - + l - + 2a - + o - + 3a - + ! - + 4b - + l - + 4a - -2. - - Each client makes a transformation - + +2.  Each client makes a transformation + 4. Both strings converge to the same state - + 3. Transformations are exchanged / applied - + 1. Both clients start with the same data diff --git a/static/img/diagrams/diag-Dashboard-Architecture.svg b/static/img/diagrams/diag-Dashboard-Architecture.svg index 81aab5b..f9d5fa7 100644 --- a/static/img/diagrams/diag-Dashboard-Architecture.svg +++ b/static/img/diagrams/diag-Dashboard-Architecture.svg @@ -1,21 +1,17 @@ - +<svg id="eLjr7SDZElK1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 850 340" shape-rendering="geometricPrecision" text-rendering="geometricPrecision"><defs><linearGradient id="eLjr7SDZElK2-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eLjr7SDZElK2-stroke-0" offset="0%" stop-color="#ffeab4"/><stop id="eLjr7SDZElK2-stroke-1" offset="100%" stop-color="#ffb703"/></linearGradient><linearGradient id="eLjr7SDZElK3-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eLjr7SDZElK3-stroke-0" offset="0%" stop-color="#f7b985"/><stop id="eLjr7SDZElK3-stroke-1" offset="100%" stop-color="#f38020"/></linearGradient><linearGradient id="eLjr7SDZElK4-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eLjr7SDZElK4-stroke-0" offset="0%" stop-color="#97afbb"/><stop id="eLjr7SDZElK4-stroke-1" offset="100%" stop-color="#023047"/></linearGradient><linearGradient id="eLjr7SDZElK5-fill" x1="0.049081" y1="-0.042056" x2="0.584532" y2="1.284969" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eLjr7SDZElK5-fill-0" offset="0%" stop-color="#fff1ce"/><stop id="eLjr7SDZElK5-fill-1" offset="100%" stop-color="#ffe199"/></linearGradient></defs><rect width="240" height="240" rx="25" ry="25" transform="translate(310.162696 70.370013)" fill="#fff7e1" stroke="url(#eLjr7SDZElK2-stroke)" stroke-width="6"/><rect width="147.329" height="240" rx="25" ry="25" transform="translate(656.566307 69.042337)" fill="#ffe5cf" stroke="url(#eLjr7SDZElK3-stroke)" stroke-width="6"/><rect width="240" height="240" rx="25" ry="25" transform="translate(41.778261 71.177639)" fill="#cfe4ee" stroke="url(#eLjr7SDZElK4-stroke)" stroke-width="6"/><rect width="178.643038" height="128.316299" rx="28" ry="28" transform="translate(339.010989 157.514276)" fill="url(#eLjr7SDZElK5-fill)" stroke="#a48949" stroke-width="2" stroke-dasharray="10"/><text dx="0" dy="0" font-family="&quot;eLjr7SDZElK1:::Ubuntu&quot;" font-size="27.5" font-weight="700" transform="matrix(.862486 0 0 0.862486 668.045116 98.597383)" stroke-width="0"><tspan y="0" font-weight="700" stroke-width="0"><![CDATA[ Cloudflare - + Express Backend - + Dashboard Client - + REST API - + GraphQL - + Apollo Server - -Both client app and express backend run locally - - - +]]> diff --git a/static/img/diagrams/diag-OT.svg b/static/img/diagrams/diag-OT.svg index 1c4f6fc..95fcd6b 100644 --- a/static/img/diagrams/diag-OT.svg +++ b/static/img/diagrams/diag-OT.svg @@ -1,225 +1,225 @@ - +<svg id="eC7fxT2nBrR1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 1000" shape-rendering="geometricPrecision" text-rendering="geometricPrecision"><defs><filter id="eC7fxT2nBrR4-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR4-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR4-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR4-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR4-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR4-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR4-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR4-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR5-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR5-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR5-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR5-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR5-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eC7fxT2nBrR5-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR5-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR5-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR5-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR5-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR5-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR5-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR5-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR5-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR5-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR5-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR5-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eC7fxT2nBrR5-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eC7fxT2nBrR6-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR6-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR6-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR6-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR6-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eC7fxT2nBrR8-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR8-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR8-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR8-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR8-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR8-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR8-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR8-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR9-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR9-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR9-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR9-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR9-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eC7fxT2nBrR9-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR9-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR9-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR9-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR9-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR9-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eC7fxT2nBrR9-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR9-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR9-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR9-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR9-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR9-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eC7fxT2nBrR9-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eC7fxT2nBrR10-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR10-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR10-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR10-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR10-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eC7fxT2nBrR50-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR50-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR50-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR50-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR50-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR50-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR50-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR50-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR51-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR51-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR51-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR51-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR51-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eC7fxT2nBrR51-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR51-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR51-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR51-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR51-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR51-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR51-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR51-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR51-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR51-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR51-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR51-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eC7fxT2nBrR51-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eC7fxT2nBrR52-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR52-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR52-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR52-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR52-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eC7fxT2nBrR54-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR54-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR54-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR54-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR54-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR54-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR54-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR54-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR55-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR55-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR55-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR55-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR55-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eC7fxT2nBrR55-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR55-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR55-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR55-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR55-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR55-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eC7fxT2nBrR55-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR55-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR55-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR55-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR55-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR55-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eC7fxT2nBrR55-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eC7fxT2nBrR56-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR56-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR56-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR56-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR56-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><linearGradient id="eC7fxT2nBrR98-fill" x1="0.261063" y1="0.383926" x2="0.261063" y2="1.003975" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR98-fill-0" offset="0%" stop-color="#fff"/><stop id="eC7fxT2nBrR98-fill-1" offset="69%" stop-color="#fff"/><stop id="eC7fxT2nBrR98-fill-2" offset="100%" stop-color="#000"/></linearGradient><filter id="eC7fxT2nBrR103-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR103-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR103-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR103-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR103-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR103-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR103-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR103-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR104-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR104-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR104-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR104-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR104-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eC7fxT2nBrR104-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR104-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR104-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR104-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR104-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR104-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR104-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR104-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR104-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR104-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR104-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR104-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eC7fxT2nBrR104-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eC7fxT2nBrR105-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR105-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR105-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR105-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR105-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eC7fxT2nBrR107-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR107-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR107-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR107-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR107-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR107-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR107-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR107-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR108-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR108-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR108-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR108-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR108-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eC7fxT2nBrR108-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR108-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR108-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR108-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR108-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR108-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eC7fxT2nBrR108-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR108-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR108-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR108-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR108-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR108-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eC7fxT2nBrR108-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eC7fxT2nBrR109-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR109-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR109-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR109-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR109-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><linearGradient id="eC7fxT2nBrR151-fill" x1="0.261063" y1="0.383926" x2="0.261063" y2="1.003975" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR151-fill-0" offset="0%" stop-color="#fff"/><stop id="eC7fxT2nBrR151-fill-1" offset="69%" stop-color="#fff"/><stop id="eC7fxT2nBrR151-fill-2" offset="100%" stop-color="#000"/></linearGradient><filter id="eC7fxT2nBrR160-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR160-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR160-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR160-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR160-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR160-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR160-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR160-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR161-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR161-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR161-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR161-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR161-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eC7fxT2nBrR161-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR161-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR161-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR161-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR161-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR161-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR161-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR161-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR161-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR161-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR161-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR161-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eC7fxT2nBrR161-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eC7fxT2nBrR162-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR162-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR162-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR162-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR162-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eC7fxT2nBrR164-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR164-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR164-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR164-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR164-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR164-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR164-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR164-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR165-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR165-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR165-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR165-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR165-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eC7fxT2nBrR165-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR165-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR165-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR165-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR165-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR165-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eC7fxT2nBrR165-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR165-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR165-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR165-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR165-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR165-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eC7fxT2nBrR165-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eC7fxT2nBrR166-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR166-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR166-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR166-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR166-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><linearGradient id="eC7fxT2nBrR208-fill" x1="0.261063" y1="0.383926" x2="0.261063" y2="1.003975" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR208-fill-0" offset="0%" stop-color="#fff"/><stop id="eC7fxT2nBrR208-fill-1" offset="69%" stop-color="#fff"/><stop id="eC7fxT2nBrR208-fill-2" offset="100%" stop-color="#000"/></linearGradient><filter id="eC7fxT2nBrR213-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR213-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR213-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR213-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR213-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR213-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR213-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR213-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR214-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR214-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR214-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR214-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR214-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eC7fxT2nBrR214-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR214-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR214-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR214-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR214-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR214-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR214-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR214-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR214-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR214-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR214-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR214-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eC7fxT2nBrR214-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eC7fxT2nBrR215-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR215-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR215-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR215-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR215-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eC7fxT2nBrR217-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR217-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR217-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR217-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR217-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR217-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR217-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR217-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR218-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR218-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR218-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR218-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR218-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eC7fxT2nBrR218-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR218-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR218-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR218-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR218-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR218-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eC7fxT2nBrR218-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR218-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR218-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR218-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR218-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR218-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eC7fxT2nBrR218-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eC7fxT2nBrR219-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR219-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR219-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR219-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR219-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><linearGradient id="eC7fxT2nBrR261-fill" x1="0.261063" y1="0.383926" x2="0.261063" y2="1.003975" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR261-fill-0" offset="0%" stop-color="#fff"/><stop id="eC7fxT2nBrR261-fill-1" offset="69%" stop-color="#fff"/><stop id="eC7fxT2nBrR261-fill-2" offset="100%" stop-color="#000"/></linearGradient><filter id="eC7fxT2nBrR266-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR266-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR266-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR266-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR266-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR266-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR266-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR266-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR267-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR267-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR267-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR267-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR267-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.24 0"/><feMerge id="eC7fxT2nBrR267-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR267-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR267-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR267-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR267-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR267-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR267-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR267-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR267-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR267-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR267-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR267-fill-0" offset="0%" stop-color="#fff6df"/><stop id="eC7fxT2nBrR267-fill-1" offset="100%" stop-color="#ffe194"/></linearGradient><linearGradient id="eC7fxT2nBrR268-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR268-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR268-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR268-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR268-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient><filter id="eC7fxT2nBrR270-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR270-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="8,8"/><feOffset id="eC7fxT2nBrR270-filter-drop-shadow-0-offset" dx="5" dy="5" result="tmp"/><feFlood id="eC7fxT2nBrR270-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="eC7fxT2nBrR270-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR270-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR270-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR270-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="eC7fxT2nBrR271-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="eC7fxT2nBrR271-filter-inner-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="eC7fxT2nBrR271-filter-inner-shadow-0-offset" dx="2" dy="2" result="tmp"/><feComposite id="eC7fxT2nBrR271-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="eC7fxT2nBrR271-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/><feMerge id="eC7fxT2nBrR271-filter-inner-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR271-filter-inner-shadow-0-merge-node-1" in="SourceGraphic"/><feMergeNode id="eC7fxT2nBrR271-filter-inner-shadow-0-merge-node-2"/></feMerge><feGaussianBlur id="eC7fxT2nBrR271-filter-drop-shadow-0-blur" in="result" stdDeviation="1,1"/><feOffset id="eC7fxT2nBrR271-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="eC7fxT2nBrR271-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="eC7fxT2nBrR271-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="eC7fxT2nBrR271-filter-drop-shadow-0-merge" result="result"><feMergeNode id="eC7fxT2nBrR271-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="eC7fxT2nBrR271-filter-drop-shadow-0-merge-node-2" in="result"/></feMerge></filter><linearGradient id="eC7fxT2nBrR271-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR271-fill-0" offset="0%" stop-color="#e8f9fd"/><stop id="eC7fxT2nBrR271-fill-1" offset="100%" stop-color="#c3ebf4"/></linearGradient><linearGradient id="eC7fxT2nBrR272-fill" x1="0" y1="0" x2="0.98913" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="eC7fxT2nBrR272-fill-0" offset="17.8259%" stop-color="rgba(255,255,255,0)"/><stop id="eC7fxT2nBrR272-fill-1" offset="20.901%" stop-color="#fff"/><stop id="eC7fxT2nBrR272-fill-2" offset="49.0384%" stop-color="#fff"/><stop id="eC7fxT2nBrR272-fill-3" offset="52.4724%" stop-color="rgba(255,255,255,0)"/></linearGradient></defs><g><g transform="matrix(.970191 0 0 0.970191-72.58402-562.975494)"><path d="M346.64,1030.4h117.33c3.6094,0,6.6562-2.5312,7.3594-6.0469l19.453-99.844h218.48l19.453,99.844c.70312,3.5625,3.75,6.0469,7.3594,6.0469h117.33c29.953,0,25.969,31.828,25.969,51.938h-558.71c0-20.109-3.9844-51.938,25.969-51.938h.0072Zm764.58-912.74c28.219,0,51.281,23.109,51.281,51.281v679.26c0,28.219-23.109,51.281-51.281,51.281h-1022.4c-28.172,0-51.281-23.062-51.281-51.281v-679.26c0-28.219,23.109-51.281,51.281-51.281h1022.4Zm-17.719,69.703h-987v642.42h987v-642.42Z" transform="matrix(.206263 0 0 0.206262 107.089442 591.077516)" filter="url(#eC7fxT2nBrR4-filter)" fill="#ffb703" fill-rule="evenodd"/><path d="M28.631374,420.431528l203.581581.000001v132.506833h-203.581581v-132.506834Z" transform="translate(100.427249 209.059543)" filter="url(#eC7fxT2nBrR5-filter)" fill="url(#eC7fxT2nBrR5-fill)" stroke-width="4"/><path d="M28.631374,420.431528l203.581581.000001v132.506833h-203.581581v-132.506834Z" transform="translate(100.427249 209.059543)" opacity="0.5" fill="url(#eC7fxT2nBrR6-fill)" stroke-width="4"/></g><g transform="matrix(.970191 0 0 0.970191-70.079419-562.975458)"><path d="M346.64,1030.4h117.33c3.6094,0,6.6562-2.5312,7.3594-6.0469l19.453-99.844h218.48l19.453,99.844c.70312,3.5625,3.75,6.0469,7.3594,6.0469h117.33c29.953,0,25.969,31.828,25.969,51.938h-558.71c0-20.109-3.9844-51.938,25.969-51.938h.0072Zm764.58-912.74c28.219,0,51.281,23.109,51.281,51.281v679.26c0,28.219-23.109,51.281-51.281,51.281h-1022.4c-28.172,0-51.281-23.062-51.281-51.281v-679.26c0-28.219,23.109-51.281,51.281-51.281h1022.4Zm-17.719,69.703h-987v642.42h987v-642.42Z" transform="matrix(.206263 0 0 0.206262 410.868435 591.077516)" filter="url(#eC7fxT2nBrR8-filter)" fill="#219ebc" fill-rule="evenodd"/><path d="M28.631374,420.431528l203.581581.000001v132.506833h-203.581581v-132.506834Z" transform="translate(404.21015 208.860326)" filter="url(#eC7fxT2nBrR9-filter)" fill="url(#eC7fxT2nBrR9-fill)" stroke-width="4"/><path d="M28.631374,420.431528l203.581581.000001v132.506833h-203.581581v-132.506834Z" transform="translate(404.208195 209.059543)" opacity="0.5" fill="url(#eC7fxT2nBrR10-fill)" stroke-width="4"/></g><g transform="translate(-.21413-18.847816)"><g transform="translate(297.228223 0)"><g transform="translate(-.140625 0)"><text dx="0" dy="0" font-family="&quot;eC7fxT2nBrR1:::Roboto&quot;" font-size="22.5" font-weight="400" transform="matrix(2 0 0 2 114.959387 139)" stroke-width="0"><tspan y="0" font-weight="400" stroke-width="0"><![CDATA[ ab - + c - + x - + 0    1   - + 2 - + delete - + char - + at position - + 2 - + ab - + c - + x - + 0    1    2 - + 3 - + insert ' - + x - + ' at position - + 0 - + 1. Each client creates an operation - + ab - + c - + x - + 0    1   - + 2 - + delete - + char - + at position - + 2 - + ab - + c - + x - + 0    1    2 - + 3 - + insert ' - + x - + ' at position - + 0 - + 3 - + 2. Operations include a character and position - + ab - + c - + x - + 0    1   - + 2 - + delete - + char - + at position - + 2 - + ab - + c - + x - + 0    1    2 - + 3 - + insert ' - + x - + ' at position - + 0 - + 3 - + 3. Clients swap operations - + ab - + c - + x - + 0    1   - + 2 - + delete - + char - + at position - + 2 - + ab - + c - + x - + 0    1    2 - + 3 - + insert ' - + x - + ' at position - + 0 - + 3 - + 4. 'Yellow' must transform the operation - + ab - + c - + x - + 0    1   - + 2 - + delete - + char - + at position - + 2 - + ab - + c - + x - + 0    1    2 - + 3 - + insert ' - + x - + ' at position - + 0 - + 3 - + 5. 'Blue' can perform the operation as-is - + ab - + c - + x - + 0    1   - + 2 - + ab - + c - + x - + 0    1    2 - + 3 - + 6. Both clients converge to the same state diff --git a/static/img/diagrams/diag-Subscriptions.svg b/static/img/diagrams/diag-Subscriptions.svg index 25d096e..8011cd5 100644 --- a/static/img/diagrams/diag-Subscriptions.svg +++ b/static/img/diagrams/diag-Subscriptions.svg @@ -1,63 +1,63 @@ - +<svg cache-id="67f7979a4c494fd494fb8e9d08b7de7b" id="enjsJAEqwMz1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 800 400" shape-rendering="geometricPrecision" text-rendering="geometricPrecision"><defs><linearGradient id="enjsJAEqwMz3-fill" x1="0.34801" y1="-0.04926" x2="0.569288" y2="1.187079" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="enjsJAEqwMz3-fill-0" offset="0%" stop-color="#ededed"/><stop id="enjsJAEqwMz3-fill-1" offset="100%" stop-color="#c7c7c7"/></linearGradient><linearGradient id="enjsJAEqwMz3-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="enjsJAEqwMz3-stroke-0" offset="0%" stop-color="#d8d8d8"/><stop id="enjsJAEqwMz3-stroke-1" offset="100%" stop-color="#7a7a7a"/></linearGradient><filter id="enjsJAEqwMz5-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz5-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="4,4"/><feOffset id="enjsJAEqwMz5-filter-drop-shadow-0-offset" dx="2" dy="2" result="tmp"/><feFlood id="enjsJAEqwMz5-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.35)"/><feComposite id="enjsJAEqwMz5-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz5-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz5-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz5-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz11-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz11-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="4,4"/><feOffset id="enjsJAEqwMz11-filter-drop-shadow-0-offset" dx="2" dy="2" result="tmp"/><feFlood id="enjsJAEqwMz11-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.35)"/><feComposite id="enjsJAEqwMz11-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz11-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz11-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz11-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz17-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz17-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="4,4"/><feOffset id="enjsJAEqwMz17-filter-drop-shadow-0-offset" dx="2" dy="2" result="tmp"/><feFlood id="enjsJAEqwMz17-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.35)"/><feComposite id="enjsJAEqwMz17-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz17-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz17-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz17-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz23-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz23-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="4,4"/><feOffset id="enjsJAEqwMz23-filter-drop-shadow-0-offset" dx="2" dy="2" result="tmp"/><feFlood id="enjsJAEqwMz23-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.35)"/><feComposite id="enjsJAEqwMz23-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz23-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz23-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz23-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><linearGradient id="enjsJAEqwMz29-fill" x1="0.108164" y1="-0.034508" x2="0.561784" y2="1.208339" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="enjsJAEqwMz29-fill-0" offset="0%" stop-color="#fff"/><stop id="enjsJAEqwMz29-fill-1" offset="100%" stop-color="#e0e0e0"/></linearGradient><linearGradient id="enjsJAEqwMz29-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="enjsJAEqwMz29-stroke-0" offset="0%" stop-color="#d8d8d8"/><stop id="enjsJAEqwMz29-stroke-1" offset="100%" stop-color="#7a7a7a"/></linearGradient><filter id="enjsJAEqwMz35-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz35-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="1,1"/><feOffset id="enjsJAEqwMz35-filter-drop-shadow-0-offset" dx="1" dy="1" result="tmp"/><feFlood id="enjsJAEqwMz35-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="enjsJAEqwMz35-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz35-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz35-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz35-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz36-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz36-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="1,1"/><feOffset id="enjsJAEqwMz36-filter-drop-shadow-0-offset" dx="1" dy="1" result="tmp"/><feFlood id="enjsJAEqwMz36-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="enjsJAEqwMz36-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz36-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz36-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz36-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz37-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz37-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="1,1"/><feOffset id="enjsJAEqwMz37-filter-drop-shadow-0-offset" dx="1" dy="1" result="tmp"/><feFlood id="enjsJAEqwMz37-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="enjsJAEqwMz37-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz37-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz37-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz37-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><linearGradient id="enjsJAEqwMz58-fill" x1="0.276369" y1="-0.143921" x2="0.482639" y2="1.235259" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="enjsJAEqwMz58-fill-0" offset="0%" stop-color="#7dd249"/><stop id="enjsJAEqwMz58-fill-1" offset="100%" stop-color="#1d3370"/></linearGradient><filter id="enjsJAEqwMz60-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz60-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="3,3"/><feOffset id="enjsJAEqwMz60-filter-drop-shadow-0-offset" dx="2" dy="2" result="tmp"/><feFlood id="enjsJAEqwMz60-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0)"/><feComposite id="enjsJAEqwMz60-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz60-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz60-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz60-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge><feGaussianBlur id="enjsJAEqwMz60-filter-inner-shadow-0-blur" in="result" stdDeviation="5,5"/><feOffset id="enjsJAEqwMz60-filter-inner-shadow-0-offset" dx="5" dy="5" result="tmp"/><feComposite id="enjsJAEqwMz60-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="enjsJAEqwMz60-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0"/><feMerge id="enjsJAEqwMz60-filter-inner-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz60-filter-inner-shadow-0-merge-node-1" in="result"/><feMergeNode id="enjsJAEqwMz60-filter-inner-shadow-0-merge-node-2"/></feMerge></filter><linearGradient id="enjsJAEqwMz60-fill" x1="0.157418" y1="0.031248" x2="0.453178" y2="0.968477" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="enjsJAEqwMz60-fill-0" offset="0%" stop-color="rgba(126,175,187,0.81)"/><stop id="enjsJAEqwMz60-fill-1" offset="100%" stop-color="rgba(33,158,188,0.42)"/></linearGradient><filter id="enjsJAEqwMz61-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz61-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="3,3"/><feOffset id="enjsJAEqwMz61-filter-drop-shadow-0-offset" dx="2" dy="2" result="tmp"/><feFlood id="enjsJAEqwMz61-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0)"/><feComposite id="enjsJAEqwMz61-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz61-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz61-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz61-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge><feGaussianBlur id="enjsJAEqwMz61-filter-inner-shadow-0-blur" in="result" stdDeviation="2,2"/><feOffset id="enjsJAEqwMz61-filter-inner-shadow-0-offset" dx="10" dy="10" result="tmp"/><feComposite id="enjsJAEqwMz61-filter-inner-shadow-0-composite" operator="arithmetic" k2="-1" k3="1" in2="SourceGraphic"/><feColorMatrix id="enjsJAEqwMz61-filter-inner-shadow-0-color-matrix" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/><feMerge id="enjsJAEqwMz61-filter-inner-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz61-filter-inner-shadow-0-merge-node-1" in="result"/><feMergeNode id="enjsJAEqwMz61-filter-inner-shadow-0-merge-node-2"/></feMerge></filter><filter id="enjsJAEqwMz68-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz68-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="enjsJAEqwMz68-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="enjsJAEqwMz68-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="enjsJAEqwMz68-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz68-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz68-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz68-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz70-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz70-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="enjsJAEqwMz70-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="enjsJAEqwMz70-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="enjsJAEqwMz70-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz70-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz70-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz70-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz72-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz72-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="2,2"/><feOffset id="enjsJAEqwMz72-filter-drop-shadow-0-offset" dx="0" dy="0" result="tmp"/><feFlood id="enjsJAEqwMz72-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.3)"/><feComposite id="enjsJAEqwMz72-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz72-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz72-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz72-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz74-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz74-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="30,30"/><feOffset id="enjsJAEqwMz74-filter-drop-shadow-0-offset" dx="20" dy="20" result="tmp"/><feFlood id="enjsJAEqwMz74-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="enjsJAEqwMz74-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz74-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz74-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz74-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz75-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz75-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="20,20"/><feOffset id="enjsJAEqwMz75-filter-drop-shadow-0-offset" dx="30" dy="30" result="tmp"/><feFlood id="enjsJAEqwMz75-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="enjsJAEqwMz75-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz75-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz75-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz75-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter><filter id="enjsJAEqwMz76-filter" x="-150%" width="400%" y="-150%" height="400%"><feGaussianBlur id="enjsJAEqwMz76-filter-drop-shadow-0-blur" in="SourceAlpha" stdDeviation="20,20"/><feOffset id="enjsJAEqwMz76-filter-drop-shadow-0-offset" dx="30" dy="30" result="tmp"/><feFlood id="enjsJAEqwMz76-filter-drop-shadow-0-flood" flood-color="rgba(0,0,0,0.4)"/><feComposite id="enjsJAEqwMz76-filter-drop-shadow-0-composite" operator="in" in2="tmp"/><feMerge id="enjsJAEqwMz76-filter-drop-shadow-0-merge" result="result"><feMergeNode id="enjsJAEqwMz76-filter-drop-shadow-0-merge-node-1"/><feMergeNode id="enjsJAEqwMz76-filter-drop-shadow-0-merge-node-2" in="SourceGraphic"/></feMerge></filter></defs><g transform="translate(-5 0.000001)"><rect width="175" height="250" rx="15" ry="15" transform="translate(346.259932 103.230303)" fill="url(#enjsJAEqwMz3-fill)" stroke="url(#enjsJAEqwMz3-stroke)" stroke-width="3" stroke-linecap="round" stroke-dashoffset="6" stroke-dasharray="10"/><g transform="translate(.000003 147.137824)"><rect width="158.332177" height="38.306172" rx="8" ry="8" transform="translate(355.199652 136.680293)" filter="url(#enjsJAEqwMz5-filter)" fill="#c1121f"/><text dx="0" dy="0" font-family="&quot;enjsJAEqwMz1:::Fira Code&quot;" font-size="30" font-weight="400" transform="matrix(.479604 0 0 0.479604 369.013392 160.510886)" fill="#fff" stroke-width="0"><tspan y="0" font-weight="400" stroke-width="0"><![CDATA[ tx.get( "todo3" ) - + tx.get( "todo2" ) - + tx.get( "todo1" ) - + tx.scan( "todo" ) - + All Todos - + Nav - + Header - + Todo 3 - + Todo 2 - + Todo 1 - + Syncosaurus - -React Application - + +React Client + Subscriptions - + } - + { - + "todo1": - + "todo2": - + "todo3": - +]]> diff --git a/static/img/diagrams/diag-cloudflare-architecture.svg b/static/img/diagrams/diag-cloudflare-architecture.svg index a80ab34..2fd31d8 100644 --- a/static/img/diagrams/diag-cloudflare-architecture.svg +++ b/static/img/diagrams/diag-cloudflare-architecture.svg @@ -1,41 +1,51 @@ - +<svg id="ebOHxaz3Y1T1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 900 450" shape-rendering="geometricPrecision" text-rendering="geometricPrecision"><defs><linearGradient id="ebOHxaz3Y1T4-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T4-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T4-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient><linearGradient id="ebOHxaz3Y1T12-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T12-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T12-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient><linearGradient id="ebOHxaz3Y1T23-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T23-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T23-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient><linearGradient id="ebOHxaz3Y1T39-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T39-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T39-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient><linearGradient id="ebOHxaz3Y1T46-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T46-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T46-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient><linearGradient id="ebOHxaz3Y1T57-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T57-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T57-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient><linearGradient id="ebOHxaz3Y1T73-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T73-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T73-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient><linearGradient id="ebOHxaz3Y1T80-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T80-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T80-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient><linearGradient id="ebOHxaz3Y1T91-stroke" x1="0.5" y1="0" x2="0.5" y2="1" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ebOHxaz3Y1T91-stroke-0" offset="0%" stop-color="#6cb650"/><stop id="ebOHxaz3Y1T91-stroke-1" offset="100%" stop-color="#2c4c6a"/></linearGradient></defs><g transform="translate(-40.957465 0)"><g transform="translate(26.294229 47.782427)"><rect width="160" height="160" rx="12" ry="12" transform="translate(36.498057 93.262495)" fill="#cfe4ee" stroke="url(#ebOHxaz3Y1T4-stroke)" stroke-width="6"/><path d="M32.2142,6.00078C32.1469,6.00026,32.0796,6,32.0122,6c-5.1423,0-10.1691,1.52487-14.4448,4.3818s-7.60817,6.9176-9.57605,11.6684C6.67838,25.22,6.01223,28.6021,6.01221,32c-.00001,1.6949.16572,3.3939.49959,5.0723c1.00322,5.0436,3.47948,9.6763,7.1156,13.3125s8.269,6.1124,13.3125,7.1156c1.7453.3472,3.5126.5126,5.2747.4988.0414.0005.083.0008.1246.0008.1771,0,.3526-.0047.5265-.014c3.1096-.1022,6.1921-.7622,9.0963-1.9651c4.7509-1.9679,8.8115-5.3004,11.6684-9.5761s4.3818-9.3025,4.3818-14.4448c0-6.8956-2.7393-13.5088-7.6152-18.3848-4.6745-4.67452-10.9458-7.38526-17.5319-7.60122C32.6914,6.0047,32.5161,6,32.3392,6c-.0417,0-.0834.00026-.125.00078ZM22.7106,12.0631c-1.0099.4711-1.9866,1.0203-2.9209,1.6446-3.6179,2.4174-6.4377,5.8533-8.1028,9.8733-.8528,2.0588-1.3832,4.2236-1.5836,6.419h7.8051c.0446-1.1918.129-2.3639.252-3.5101l3.9975.2394c-.1183,1.0598-.2013,2.1518-.2465,3.2707h8.0888v-19.4812c-1.7834.8099-3.474,2.5817-4.8983,5.4101-.0934.1854-.1851.3745-.275.567l-3.8726-1.1445c.184-.4184.3757-.8258.575-1.2216.3623-.7195.7563-1.4113,1.1813-2.0667ZM30.0002,34h-8.0888c.2258,5.5836,1.3919,10.4994,3.1905,14.0711c1.4243,2.8284,3.1149,4.6002,4.8983,5.4101v-19.4812ZM22.7106,51.9369c-.425-.6554-.819-1.3472-1.1813-2.0667C19.3975,45.6369,18.1355,40.0745,17.9084,34h-7.8051c.07.7668.1804,1.5319.3316,2.292.8489,4.2676,2.9442,8.1876,6.021,11.2643c1.8232,1.8232,3.9424,3.3018,6.2547,4.3806Zm19.5547-.4722c3.2314-1.7021,5.9983-4.1877,8.0392-7.2422C52.3499,41.1614,53.5884,37.6453,53.9211,34h-7.1501c-.0456,1.219-.1328,2.4174-.2605,3.5886l-3.9979-.2394c.1231-1.0843.2091-2.2027.2555-3.3492h-8.7679v19.7417c2.0314-.6408,3.9729-2.4859,5.5769-5.6707.0854-.1695.1693-.342.2517-.5174l3.8739,1.1449c-.1773.4009-.3617.7917-.5531,1.1718-.2765.5488-.5713,1.0816-.8843,1.5944ZM42.7681,30h-8.7679v-19.7417c2.0314.6408,3.9729,2.4859,5.5769,5.6707c1.7988,3.5716,2.9651,8.4875,3.191,14.071Zm4.0029,0c-.2272-6.0746-1.4894-11.637-3.6214-15.8703-.2765-.5489-.5713-1.0816-.8843-1.5944c1.9365,1.02,3.7272,2.3322,5.3033,3.9084c3.6517,3.6517,5.8871,8.455,6.3526,13.5563h-7.1502Z" transform="matrix(.472375 0 0 0.472378 40.28447 98.405709)" clip-rule="evenodd" fill="#f6821f" fill-rule="evenodd"/><text dx="0" dy="0" font-family="&quot;ebOHxaz3Y1T1:::Ubuntu&quot;" font-size="30" font-weight="500" transform="matrix(.503329 0 0 0.503325 70.861362 118.650047)" stroke-width="0"><tspan y="0" font-weight="500" stroke-width="0"><![CDATA[ Durable Object 1 - + Transactional Storage   - + Worker - + Durable Object 2 - + Transactional Storage   - + Worker - + +Durable Object N + +Transactional + +Storage   + +Worker + + + Per Durable Object persistent storage - + Durable Objects maintain all Websockets - + Workers for routing - +]]>