From b1208c9f636122aa9e71be2f013f282aa009d2b8 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Mon, 1 Sep 2014 07:16:31 +0000 Subject: [PATCH] merged changes from RC_1_0 --- Makefile.am | 25 + docs/features.html | 4 +- docs/features.rst | 11 +- docs/gen_todo.py | 4 + docs/hacking.diagram | 26 + docs/hacking.rst | 37 +- docs/makefile | 16 +- docs/read_disk_buffers.diagram | 16 + docs/read_disk_buffers.dot | 20 - docs/read_disk_buffers.png | Bin 14183 -> 16068 bytes docs/storage.diagram | 31 + docs/storage.graffle | 1726 ------------------------------- docs/storage.png | Bin 30224 -> 21786 bytes docs/style.css | 3 + docs/todo.html | 509 ++++++--- docs/utp_stack.diagram | 9 + docs/write_disk_buffers.diagram | 15 + docs/write_disk_buffers.dot | 20 - docs/write_disk_buffers.png | Bin 14209 -> 15520 bytes include/libtorrent/torrent.hpp | 4 +- 20 files changed, 494 insertions(+), 1982 deletions(-) create mode 100644 docs/hacking.diagram create mode 100644 docs/read_disk_buffers.diagram delete mode 100644 docs/read_disk_buffers.dot create mode 100644 docs/storage.diagram delete mode 100644 docs/storage.graffle create mode 100644 docs/utp_stack.diagram create mode 100644 docs/write_disk_buffers.diagram delete mode 100644 docs/write_disk_buffers.dot diff --git a/Makefile.am b/Makefile.am index 0036399a1..655b8e177 100644 --- a/Makefile.am +++ b/Makefile.am @@ -21,10 +21,12 @@ DOCS_IMAGES = \ docs/our_delay_base.png \ docs/our_delay_base_thumb.png \ docs/read_disk_buffers.png \ + docs/read_disk_buffers.diagram \ docs/session_stats_peers.png \ docs/storage.png \ docs/todo.html \ docs/write_disk_buffers.png \ + docs/write_disk_buffers.diagram \ docs/ziptorrent_thumb.gif \ docs/disk_access_elevator.png \ docs/disk_access_no_elevator.png\ @@ -32,8 +34,13 @@ DOCS_IMAGES = \ docs/ip_id_v6.png \ docs/hash_distribution.png \ docs/complete_bit_prefixes.png \ + docs/troubleshooting.dot \ docs/troubleshooting.png \ docs/troubleshooting_thumb.png \ + docs/hacking.diagram \ + docs/hacking.png \ + docs/utp_stack.diagram \ + docs/utp_stack.png \ docs/style.css \ docs/base.css \ docs/rst.css \ @@ -66,6 +73,24 @@ DOCS_PAGES = \ docs/troubleshooting.html \ docs/udp_tracker_protocol.html \ docs/utp.html \ + docs/building.rst \ + docs/client_test.rst \ + docs/contributing.rst \ + docs/dht_extensions.rst \ + docs/dht_rss.rst \ + docs/dht_sec.rst \ + docs/dht_store.rst \ + docs/examples.rst \ + docs/extension_protocol.rst \ + docs/features.rst \ + docs/index.rst \ + docs/manual-ref.rst \ + docs/projects.rst \ + docs/python_binding.rst \ + docs/tuning.rst \ + docs/troubleshooting.rst \ + docs/udp_tracker_protocol.rst \ + docs/utp.rst \ docs/reference-Alerts.html \ docs/reference-Bencoding.html \ docs/reference-Core.html \ diff --git a/docs/features.html b/docs/features.html index 7cb780d94..b9b33c41c 100644 --- a/docs/features.html +++ b/docs/features.html @@ -276,6 +276,7 @@ to provide additional bandwidth to an entire feed.

merkle hash tree torrents

+merkle_tree.png

Merkle hash tree torrents is an extension that lets a torrent file only contain the root hash of the hash tree forming the piece hashes. The main benefit of this feature is that regardless of how many pieces there is in a torrent, the .torrent file will @@ -299,13 +300,12 @@ piece size. With merkle torrents, the piece size can be the minimum block size ( which lets peers verify every block of data received from peers, immediately. This gives a minimum turnaround time and completely removes the problem of identifying malicious peers.

-merkle_tree.png

The root hash is built by hashing all the piece hashes pair-wise, until they all collapse down to the root.

-storage.png

customizable file storage

+storage.png

libtorrent's storage implementation is customizable. That means a special purpose bittorrent client can replace the default way to store files on disk.

When implementing a bittorrent cache, it doesn't matter how the data is stored on disk, as diff --git a/docs/features.rst b/docs/features.rst index 2aaf6a3f6..452fb8fff 100644 --- a/docs/features.rst +++ b/docs/features.rst @@ -277,6 +277,9 @@ to provide additional bandwidth to an entire feed. merkle hash tree torrents ------------------------- +.. image:: merkle_tree.png + :align: right + Merkle hash tree torrents is an extension that lets a torrent file only contain the root hash of the hash tree forming the piece hashes. The main benefit of this feature is that regardless of how many pieces there is in a torrent, the .torrent file will @@ -305,17 +308,15 @@ which lets peers verify every block of data received from peers, immediately. Th gives a minimum turnaround time and completely removes the problem of identifying malicious peers. -.. image:: merkle_tree.png - The root hash is built by hashing all the piece hashes pair-wise, until they all collapse down to the root. -.. image:: storage.png - :align: right - customizable file storage ------------------------- +.. image:: storage.png + :align: right + libtorrent's storage implementation is customizable. That means a special purpose bittorrent client can replace the default way to store files on disk. diff --git a/docs/gen_todo.py b/docs/gen_todo.py index fb457418a..418be2db4 100644 --- a/docs/gen_todo.py +++ b/docs/gen_todo.py @@ -45,6 +45,10 @@ for f in files: items[-1]['priority'] = 0 if line[0] in '0123456789': items[-1]['priority'] = int(line[0]) + if int(line[0]) > 5: + print 'priority too high: ' + line + sys.exit(1) + line = line[1:].strip() items[-1]['todo'] = line prio = items[-1]['priority'] diff --git a/docs/hacking.diagram b/docs/hacking.diagram new file mode 100644 index 000000000..f6c7cb075 --- /dev/null +++ b/docs/hacking.diagram @@ -0,0 +1,26 @@ ++--------------+ pimpl +--------------+ +| cGRE session +----------->| session_impl | ++--------------+ +------+-----+-+ + m_torrents[] | | ++---------------------+ | | +| cGRE torrent_handle +-------+ | | ++---------------------+ weak | | | + | | | m_connections[] + | | +---+-------+ + | | | | + m_picker v v | v peers we are connected to + +--------------+ +--------++ +-----------------+ + | piece_picker |<---+-+ torrent ++ +--+ peer_connection ++ + +--------------+ | ++--------+| | ++----------------+| + m_torrent_file | +---------+ | +-----------------+ + +-------------------+ | | + | cGRE torrent_info |<---+ | m_socket + +-------------------+ | | +--------------------------+ + | +------+->| socket_type (variant) | + +--------+ m_policy | | | (TCP/uTP/SSL/socks5/...) | + | policy |<---------+ | +--------------------------+ + +------+-+ v + list of all | m_peers[] +--------------+ + peers we +-------------->| policy::peer ++ contains contact information + know of ++-------------+| for peers we're not necessarily + +--------------+ connected to diff --git a/docs/hacking.rst b/docs/hacking.rst index 91477f86e..244cd3ce8 100644 --- a/docs/hacking.rst +++ b/docs/hacking.rst @@ -62,43 +62,8 @@ structure This is the high level structure of libtorrent. Bold types are part of the public interface: -.. parsed-literal:: - +=========+ pimpl +-------------------+ - | **session** | ---------> | aux::session_impl | - +=========+ +-------------------+ - m_torrents[] | | - +================+ | | - | **torrent_handle** | ------+ | | - +================+ | | | - | | | m_connections[] - | | | - | | +---------------------+ - m_picker v v | - +--------------+ +---------+---------+-- . . | - | piece_picker | <--+-| torrent | torrent | to | - +--------------+ | +---------+---------+-- . . | - m_torrent_file | | m_connections[] | - +==============+ | | | - | **torrent_info** | <--+ v v - +==============+ | +-----------------+-----------------+-- . . - m_policy | | peer_connection | peer_connection | pe - +--------+ | +-----------------+-----------------+-- . . - | policy | <--------+ | | m_socket - +--------+ | | - | m_peers[] | v - | | +-----------------------+ - | | | socket_type (variant) | - v | +-----------------------+ - +--------------+ | - | policy::peer | | - +--------------+ | - | policy::peer | | - +--------------+ m_peer_info| - | policy::peer | <----------+ - +--------------+ - . . - + - - - - - - -+ +.. image:: hacking.png session_impl ------------ diff --git a/docs/makefile b/docs/makefile index 535ef4206..7293b14dd 100644 --- a/docs/makefile +++ b/docs/makefile @@ -42,7 +42,13 @@ TARGETS = index \ streaming \ $(REFERENCE_TARGETS) -FIGURES = read_disk_buffers write_disk_buffers troubleshooting +FIGURES = \ + read_disk_buffers \ + write_disk_buffers \ + troubleshooting \ + hacking \ + utp_stack \ + storage html: $(TARGETS:=.html) $(FIGURES:=.png) todo.html @@ -65,10 +71,6 @@ troubleshooting_thumb.png: troubleshooting.png convert troubleshooting.png -resize 800x800 troubleshooting_thumb.png cp $@ $(WEB_PATH)/$@ -troubleshooting.png: troubleshooting.dot - dot troubleshooting.dot -Tpng >troubleshooting.png - cp $@ $(WEB_PATH)/$@ - todo.html:gen_todo.py ../src/*.cpp ../include/libtorrent/*.hpp python gen_todo.py cp $@ $(WEB_PATH)/$@ @@ -94,6 +96,10 @@ $(REFERENCE_TARGETS:=.rst):gen_reference_doc.py ../include/libtorrent/*.hpp ../i dot -Teps $? >$@ cp $@ $(WEB_PATH)/$@ +%.png:%.diagram + java -jar /opt/local/share/java/ditaa0_9.jar -E $? $@ + cp $@ $(WEB_PATH)/$@ + clean: rm -f $(TARGETS:=.html) $(TARGETS:=.pdf) settings.rst todo.html reference*.html reference*.rst diff --git a/docs/read_disk_buffers.diagram b/docs/read_disk_buffers.diagram new file mode 100644 index 000000000..6ffa96479 --- /dev/null +++ b/docs/read_disk_buffers.diagram @@ -0,0 +1,16 @@ + + copy into peer's encrypt in place ++----------------+ send buffer +-------------+ (no copy) +-------------+ +| receive buffer +----------------->| send buffer +--=--------------->| encrypted | +| | | | | send buffer | ++----------------+ +-------------+ +------+------+ + ^ | + | read() from file write() to socket | + | (copy) (copy) | +---=----|---------------------------------=---------------------------------|--=---- + | kernel space | + | v ++-------+-----------+ +---------------+ +| kernel page cache | | socket kernel | +| | | buffer | ++-------------------+ +---------------+ diff --git a/docs/read_disk_buffers.dot b/docs/read_disk_buffers.dot deleted file mode 100644 index f110c3af3..000000000 --- a/docs/read_disk_buffers.dot +++ /dev/null @@ -1,20 +0,0 @@ -digraph uploading { - - node [shape=box]; - - subgraph user_space { - rank=same; - "disk cache" -> "send buffer" [label="copy into peer's send buffer (copy)"] - "send buffer" -> "encrypted send buffer" [label="encrypt in-place (no copy)" style=dashed]; - } - - subgraph kernel { - rank=same; - "kernel page cache"; - "socket kernel buffer" - } - - "encrypted send buffer" -> "socket kernel buffer" [label="write() to socket (copy)"]; - "kernel page cache" -> "disk cache" [label="read() from file (copy)"] -} - diff --git a/docs/read_disk_buffers.png b/docs/read_disk_buffers.png index 4b146b0ef1eb97f2a46bb655e5e0c789b5731290..72e07defa3eaca4455b9b8e51bcbb59e2cf2e433 100644 GIT binary patch literal 16068 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 UH#XJfr+f9{sW|e7fSU9F0S}>aPXGV_ diff --git a/docs/storage.diagram b/docs/storage.diagram new file mode 100644 index 000000000..8f0618d7d --- /dev/null +++ b/docs/storage.diagram @@ -0,0 +1,31 @@ ++--------------------------+ +| disk_io_thread | +| (manages piece cache) | ++--------------------------+ + ^ + | + v ++--------------------------+ +| piece_manager | +| (maps pieces to slots) | ++--------------------------+ + ^ + | + v customization point +/--------------------------\ +------------------+ +| storage |<---->| file_pool | +| cGRE | | open file cache | +| (maps slots to file and | +------------------+ +| offset. reads and writes | +| to disk) | +------------------+ +| |<-----+ file_storage | +\--------------------------/ | standard slot to | + ^ | file mapping | + | +------------------+ + v ++--------------------------+ +| file | +| (file class reads and | +| writes files) | ++--------------------------+ + diff --git a/docs/storage.graffle b/docs/storage.graffle deleted file mode 100644 index 7ba02ef8f..000000000 --- a/docs/storage.graffle +++ /dev/null @@ -1,1726 +0,0 @@ - - - - - ActiveLayerIndex - 0 - ApplicationVersion - - com.omnigroup.OmniGraffle - 137.11.0.108132 - - AutoAdjust - - BackgroundGraphic - - Bounds - {{0, 0}, {576, 733}} - Class - SolidGraphic - ID - 2 - Style - - fill - - GradientColor - - w - 0.666667 - - - shadow - - Draws - NO - - stroke - - Draws - NO - - - - CanvasOrigin - {0, 0} - CanvasSize - {576, 733} - ColumnAlign - 1 - ColumnSpacing - 36 - CreationDate - 2009-05-24 18:38:49 -0700 - Creator - Arvid Norberg - DisplayScale - 1.000 cm = 1.000 cm - FileType - flat - GraphDocumentVersion - 6 - GraphicsList - - - Bounds - {{113, 177.5}, {103, 28}} - Class - ShapedGraphic - FitText - YES - Flow - Resize - FontInfo - - Font - Helvetica - Size - 36 - - ID - 45 - Shape - Rectangle - Style - - fill - - Draws - NO - - shadow - - Draws - NO - - stroke - - Draws - NO - - - Text - - Pad - 0 - Text - {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural - -\f0\fs24 \cf0 storage_interface\ -customization point} - VerticalPad - 0 - - Wrap - NO - - - Class - LineGraphic - ID - 43 - Points - - {6.4195, 204.5} - {179.999, 204.5} - - Style - - stroke - - HeadArrow - 0 - Pattern - 1 - TailArrow - 0 - - - - - Bounds - {{63.5, 67.5}, {53, 40}} - Class - ShapedGraphic - Head - - ID - 1 - - ID - 32 - Rotation - 90 - Shape - AdjustableArrow - ShapeData - - ratio - 0.50000017881393433 - width - 20.000001907348633 - - Style - - fill - - Color - - b - 0.497307 - g - 0.504555 - r - 1 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.304265 - g - 0.307897 - r - 0.788251 - - MiddleFraction - 0.4523809552192688 - - shadow - - Color - - a - 0.4 - b - 0 - g - 0 - r - 0 - - ShadowVector - {0, 2} - - stroke - - Color - - b - 0 - g - 0.0271458 - r - 0.689052 - - - - Tail - - ID - 31 - - TextRelativeArea - {{0.125, 0.25}, {0.75, 0.5}} - isConnectedShape - - - - Bounds - {{6.4195, 6.5}, {167.161, 54}} - Class - ShapedGraphic - ID - 31 - Shape - Rectangle - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural - -\f0\fs36 \cf0 disk_io_thread -\fs24 \ -manages piece cache} - - - - Bounds - {{58.75, 180.25}, {62.5, 40}} - Class - ShapedGraphic - Head - - ID - 3 - - ID - 30 - Rotation - 90 - Shape - AdjustableArrow - ShapeData - - ratio - 0.50000017881393433 - width - 20.000001907348633 - - Style - - fill - - Color - - b - 0.497307 - g - 0.504555 - r - 1 - - FillType - 2 - GradientAngle - 90 - GradientColor - - b - 0.304265 - g - 0.307897 - r - 0.788251 - - MiddleFraction - 0.4523809552192688 - - shadow - - Color - - a - 0.4 - b - 0 - g - 0 - r - 0 - - ShadowVector - {0, 2} - - stroke - - Color - - b - 0 - g - 0.0271458 - r - 0.689052 - - - - Tail - - ID - 1 - - TextRelativeArea - {{0.125, 0.25}, {0.75, 0.5}} - isConnectedShape - - - - Bounds - {{6.4195, 232}, {167.161, 72}} - Class - ShapedGraphic - ID - 3 - Shape - Rectangle - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural - -\f0\fs36 \cf0 storage -\fs24 \ -maps slots to file and offset\ -reads and writes to and from disk} - - - - Bounds - {{6.4195, 114.5}, {167.161, 54}} - Class - ShapedGraphic - ID - 1 - Shape - Rectangle - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural - -\f0\fs36 \cf0 piece_manager -\fs24 \ -maps pieces to slots} - - - - GridInfo - - SnapsToGrid - YES - - GuidesLocked - NO - GuidesVisible - YES - HPages - 1 - ImageCounter - 3 - KeepToScale - - Layers - - - Lock - NO - Name - Layer 1 - Print - YES - View - YES - - - LayoutInfo - - Animate - NO - AutoLayout - 2 - LineLength - 0.4643835723400116 - circoMinDist - 18 - circoSeparation - 0.0 - layoutEngine - dot - neatoSeparation - 0.0 - twopiSeparation - 0.0 - - LinksVisible - NO - MagnetsVisible - NO - MasterSheets - - ModificationDate - 2009-05-24 19:23:30 -0700 - Modifier - Arvid Norberg - NotesVisible - NO - Orientation - 2 - OriginVisible - NO - OutlineStyle - Basic - PageBreaks - NO - PrintInfo - - NSBottomMargin - - float - 41 - - NSLeftMargin - - float - 18 - - NSPaperSize - - size - {612, 792} - - NSRightMargin - - float - 18 - - NSTopMargin - - float - 18 - - - PrintOnePage - - QuickLookPreview - - JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmls - dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGlVk2P2zYQvetXzDE5mOZQJCVeu2mB - 5NTUBnoIgoWglWMllrWRlBbIj81v6QxJfdnebRax1vAsRT5q3rx51Fd4D19B0mUyC1ma - QlfB33AGKaz0H6hhe9cjlD2gv/oSNlKYeHeOIkBCAAfY/ll1ZfU4fCtO0NW0BTreRALt - stHC5FK7HIx2wkDZwPZtg/Cm9Q8zznR6MVOjTsI8Nc6zygPmBowDnecRJx3vjzirHa3J - hIlIepwZkTKPZKWNSCbc3/5VnYqh/qe6a09tVzfV0NUlJ2WFRmekAmMpI0CbCbRISQUK - EN4RX58De3c7/7ASdndMhv9nwz9MOSU2YSFeY+2IF6qB4hpIIP4lFWWBQtQah4HJ3/aA - eYTPYWOVkPSUjkb2TbL9A4Wk3fcHePVYV2V13xTn4lPVvYb9Z/h9H/iPq+ESNvC9QQUb - o0VqMq0ATbKn8i1wm+KxBw/ew9BCf2qHfoZ/TlbJRIJWbqIzUyzJwzLfa9ZUSo8S+fcL - kp/gTFuvvQvGUikkSYfEh5o4C7klgbN+aDuia05nXYQF4IKrTAnjMmuZ9zWcp8oTxEz9 - eBFsJogkS6rHywKcKijOD9AeXoRnUqGMybNrvENfDS+C2mRWyDRDvKGOrioeev98/3b1 - UHmJ8NMeuraB53dJuFALXpG0ZJ1TQGIZiY3afqj7LzMYO1xOLWI1NIDSR8kpRIrbhmKk - 0Riz7GUYzubRzAnHn2naMWImjfdLy05G60Aj2JTi6KNXRihJWPwnfX+lSpDtsLPtjpj0 - R+rAJwx5tJOrDmJrETZ30igyWCFVhpr8NXnSa4gLtC5ywVHgQuHMxRgTFyqlYaKLuBhH - Jy7GAc9FwIx9tz4vpsa23AxTp45OGU6G/3NGu1rJ/K56PLnpiyQQWkb8XnS5yYVJnTHe - F1f+xdq5r9v74chafZ3cNsYV7kKUhEvKl2Rf5lKUwWqjN0JZlMdqRo8aJX5iXTgKdbGp - rxApNERUE4s8RBUJI1RQCqhGvg4Bg89wr0mLlCqr0uif06TVJh6Ru6OCX5ZkMkuSyH6i - yJwBjpljTJxeAEJn+sDJhM7GkLYfoDX+NyTNq1kPH0DT9ZG2eqAvXze25BeASZNK8olL - zhBkbSAMnNbyunHsoj/2jeb+iApbKEFbkVqVwia9FEI8Re7r81B1h6K8fZ48j26Q0GVK - vTSfKtH8ym+0QVN/p3eW9gyPLW0zeWHy/j+HvTh4CmVuZHN0cmVhbQplbmRvYmoKNSAw - IG9iago5MjEKZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAzIDAg - UiAvUmVzb3VyY2VzIDYgMCBSIC9Db250ZW50cyA0IDAgUiAvTWVkaWFCb3ggWzAgMCA1 - NzYgNzMzXQo+PgplbmRvYmoKNiAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgL1RleHQg - L0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSAvQ29sb3JTcGFjZSA8PCAvQ3MyIDE4IDAg - UgovQ3MxIDcgMCBSID4+IC9Gb250IDw8IC9GMS4wIDE5IDAgUiA+PiAvWE9iamVjdCA8 - PCAvSW0yIDEwIDAgUiAvSW00IDE0IDAgUgovSW01IDE2IDAgUiAvSW0xIDggMCBSIC9J - bTMgMTIgMCBSID4+IC9TaGFkaW5nIDw8IC9TaDEgMjAgMCBSIC9TaDIgMjEgMCBSCj4+ - ID4+CmVuZG9iagoyMCAwIG9iago8PCAvQ29sb3JTcGFjZSA3IDAgUiAvU2hhZGluZ1R5 - cGUgMiAvQ29vcmRzIFsgMzEuNzUgLTIwLjUgMzEuNzUgMjAuNTAwMDEgXQovRG9tYWlu - IFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDIyIDAgUiA+ - PgplbmRvYmoKMjEgMCBvYmoKPDwgL0NvbG9yU3BhY2UgNyAwIFIgL1NoYWRpbmdUeXBl - IDIgL0Nvb3JkcyBbIDI3IC0yMC41IDI3IDIwLjUwMDAxIF0gL0RvbWFpbgpbIDAgMSBd - IC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAyMyAwIFIgPj4KZW5kb2Jq - CjEwIDAgb2JqCjw8IC9MZW5ndGggMTEgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBl - IC9JbWFnZSAvV2lkdGggMzgwIC9IZWlnaHQgMTg4IC9Db2xvclNwYWNlCjI0IDAgUiAv - U01hc2sgMjUgMCBSIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNv - ZGUgPj4Kc3RyZWFtCngB7dABDQAAAMKg909tDjeIQGHAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBv4GBkVd - AAEKZW5kc3RyZWFtCmVuZG9iagoxMSAwIG9iago5NTgKZW5kb2JqCjE0IDAgb2JqCjw8 - IC9MZW5ndGggMTUgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lk - dGggMzgwIC9IZWlnaHQgMTUyIC9Db2xvclNwYWNlCjI3IDAgUiAvU01hc2sgMjggMCBS - IC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFt - CngB7dAxAQAAAMKg9U9tDQ+IQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED - BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA - gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY - MGDAgAEDBgy8Dwyk/gABCmVuZHN0cmVhbQplbmRvYmoKMTUgMCBvYmoKNzc5CmVuZG9i - agoxNiAwIG9iago8PCAvTGVuZ3RoIDE3IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlw - ZSAvSW1hZ2UgL1dpZHRoIDEyNCAvSGVpZ2h0IDE1MCAvQ29sb3JTcGFjZQozMCAwIFIg - L1NNYXNrIDMxIDAgUiAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVj - b2RlID4+CnN0cmVhbQp4Ae3QMQEAAADCoPVPbQlPiEBhwIABAwYMGDBgwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM - GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB - AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM - GDBgwIABAwYMGDBgwIABAwYMGPgMDNn4AAEKZW5kc3RyZWFtCmVuZG9iagoxNyAwIG9i - agoyNjcKZW5kb2JqCjggMCBvYmoKPDwgL0xlbmd0aCA5IDAgUiAvVHlwZSAvWE9iamVj - dCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDM4MCAvSGVpZ2h0IDE1MiAvQ29sb3JTcGFj - ZQoyNyAwIFIgL1NNYXNrIDMzIDAgUiAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIg - L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QMQEAAADCoPVPbQ0PiEBhwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM - GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB - AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM - GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB - AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM - GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB - AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM - GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB - AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM - GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB - AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMvA8MpP4AAQplbmRzdHJlYW0KZW5k - b2JqCjkgMCBvYmoKNzc5CmVuZG9iagoxMiAwIG9iago8PCAvTGVuZ3RoIDEzIDAgUiAv - VHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDEyNCAvSGVpZ2h0IDE3 - MCAvQ29sb3JTcGFjZQozNSAwIFIgL1NNYXNrIDM2IDAgUiAvQml0c1BlckNvbXBvbmVu - dCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QgQAAAADDoPlT3+AE - hVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB - AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM - GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB - AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg - wIABAwYMGDBgwIABAwYMGDBgwIABA29g9wgAAQplbmRzdHJlYW0KZW5kb2JqCjEzIDAg - b2JqCjI5OQplbmRvYmoKMzEgMCBvYmoKPDwgL0xlbmd0aCAzMiAwIFIgL1R5cGUgL1hP - YmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAxMjQgL0hlaWdodCAxNTAgL0NvbG9y - U3BhY2UKL0RldmljZUdyYXkgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0 - ZURlY29kZSA+PgpzdHJlYW0KeAHtm9dWYt0ShTuYExJEyTkLiAQREBGRZMQc29B2v/8j - nFm1NpuNgiLQZ/wXrIseijQfFVbYNWt9+zYaIw+MPPDf8MD3Hsewv62E/cHjZ8ch/ia9 - cXh8+kB8NCPHxBhvG9KL/Aa8kd4/HLog43PHxgg4QWPyzeAX6a9jY3jj0OhsswAzc2pq - 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 - fEj7xzDQn8HprI4GOoy7WzqTS1vXcNCfwvF8dHOLIbcLDs3qT9yOXa1xxg2TaJM8axwf - 0Jl4SA7/INtxiMJzSu3giBpFMdAeegR0kc4KVOrg4xkXmHpdSAXs7b+dEk6c4PbQpnqE - Blm0xR7hKYS7YuPRIaI7xpyOj/SYVKlxYzDagWsV6omlE9LwrO4Sc8D5qXivUqVu6Gpl - Tzx0DhvdyXI6TKQ20RSNPvByea+0ixZoPOnTI+ewYt2M/fuY+0IRuQ9d7juP/AN0B8up - GhGLo/8+l9vayqHjPRVHSYvqaTggDSHDm1Z3iDnXI1bR/Z/cSGNsJNHpvyrqC0NHv7Pc - 3Lz1QNctcMFCuuFAx8IhW/3Gcjq9mqwOl9ePWyZ0xwQ3S/xel8Nq4hMpP3b1djZTuvaj - nxUJx6Vli03ccgkGxY0WW6uYNNhq1ulLyHCc21EIgul8u8fjETd5TAaUc/Dk87WzWSdQ - p9eacHpiUev0dKvJZrM7HHYbbDau6KmKhXLx8K2mL9MG1+r0y3SbCwM3t5b1OlE5/Edo - GY7HJbrGJm6xrayIG2uiTo1HzeGmWSsAkuXS9T2+vafT8U096aLev0O3LKdri81bi+KG - onxBsWsdqWVCnz+R5T/HJTkFtzUXMOhmphBEBr6d+PG3YjiV9+maqrikCnBLCOpWPfv4 - U3v8K+B4RmblblLczaWruEJ9I+Gxx4/p721cmSAdC66H+eACjPQe/CpqD9+H4Ig6jOdb - 0aQ3ynpnD/99sLcALuHxDcToTeYdDCv9b6aTTi0N8ftQPrqXDxG41r+9/J/hvofYw/3E - 0aeNPDDywMgDg3vgf1KX+AYKZW5kc3RyZWFtCmVuZG9iagozMiAwIG9iagozMzY1CmVu - ZG9iagoyOCAwIG9iago8PCAvTGVuZ3RoIDI5IDAgUiAvVHlwZSAvWE9iamVjdCAvU3Vi - dHlwZSAvSW1hZ2UgL1dpZHRoIDM4MCAvSGVpZ2h0IDE1MiAvQ29sb3JTcGFjZQovRGV2 - aWNlR3JheSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+ - CnN0cmVhbQp4Ae3d21dT97YHcCWBkAu5QEhCLiQkEFgECIFg5CZBMHKLYIQSRRCM0oJB - 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 - YmoKMjkgMCBvYmoKMzQ5NgplbmRvYmoKMjUgMCBvYmoKPDwgL0xlbmd0aCAyNiAwIFIg - L1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAzODAgL0hlaWdodCAx - ODggL0NvbG9yU3BhY2UKL0RldmljZUdyYXkgL0JpdHNQZXJDb21wb25lbnQgOCAvRmls - dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt2P07m+m2B/CWEJGIhEjIi0RCeCRE - iKbeKkrVa6kytEppWjM0qrUnZVerVNtMtapMbdQU7Xi5aA0uu0xP6zr/2lkPPdc+u9LO - LHP/dPb6/tDLD8tKr8+zrPvOc+QIhQRIgARIgARIgAT+0wSOUhgIIKcGPjHgXwmkHE7g - X4QA+qcewb47fJpAEET5ywICgSAwkH8Kf+y/J7/PHiwUhuxHREELfKYTCoOD4fkJPvN/ - Y/o/ywcFBQO7KDRULBZLJJIwyiEEAA74xKGikBAh8O9N/zdWD08fCJsG4IFdEiaVhstk - csohBWSycKlUGibh/YF/b/a/tvf36GHmefkwabhcHhGpUERFKZUqCl5AqYxSKCIj5HIZ - zw/6+5vnK/j81PNDz8vLwF2pio5RqzVarY6CFtBqNWp1TLQKnkCEPFwqDg0J2R99v/h7 - 9LDoxRKQB3hQ1+kNhjijiXIIAaMxzqCP1WnU0SpFpFwaBqMP+HDf8XfeHuV3vVAEQy+P - VEarwd1oSjAnJnFccrKFghJITuY4LslsjjfF6XWaGJVCHr6PD/cdP/gw9kAfIg4LlytU - ap3BGG/mkq0pNpvdbk+nIAUALc2WarVwiQkmg04THRUhk/KTDweuX/tAOGZD9+g1emNC - kiXFZs/IPObMyobkUBACvFjWcWemIz0t1cqZTQZtzD6+kN86B5fOURj7kFCJVK6I1uhN - iZZUu8OZlZOX7yooLCwsoqAEgOyky5WXm+3MTLdZuQSDDvBh7cDK9zP4sO1h7MVAr9IY - 4rkUu+N4Tn5BUXFJaXlF5RkKUqCyoqKstPjUSVde9rF0W7I5jseXSkTCr9nDxpEBvT6e - s2U4c12Fp8sqq2rO1X3XQEEL1NfV1lSfKS85VZCX5QB8gzZaIZfC4AsOLnxYOfzYRyjV - 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 - ZLNBG63gx97PuoedExjED74c8A3xXIrdcTwnv6CouKS0vKLyDAUpUFlRUVZafOqkKy/7 - WDrQx+lioiKk+2P/5fWeX/gCGHwJ4Edr9KZES6rd4czKyct3FRQWFhZRUAJAdtLlysvN - dmam26xcgoGnDw+DsYeV48+eH/zQsHB+8vXGhCRLis2ekXnMmZUNyaEgBHixrOPOTEd6 - WqqVM5sMWqCXScWw7QUBB45afu5h8IUh4j18tc5gjDdzydYUm81ut6dTkAKAlmZLtVq4 - xASTQaeJ3qeHbe9v7Hn8QMAXicOk8khltFqnNxhNCebEJI5LTrZQUALJyRzHJZnN8aY4 - vU4To1LIYeGI9jaOn5WzN/iwdWDyJVJZhEKpUmu04G+IM5oohxAwGuMM+lidRh2tUkTK - pfv0sHEObnv+qxZsncAgWDuhMPqyiEjgj45RwxPQ6ihoAa1Wo1bHRKuUUYoIebhUHBoC - Uw8b52v2+/jBIXv64XI5+CuiopRKFQUvoAR1RWSEXC6Thklg3wiDvkEPg8/jC/jRB32x - JEwqDZfJ5JRDCshk4VIpDx8K8vtD/5Wp39s6gL+nD2s/RBQKD0AskUjCKIcQADjg4915 - eJh5ft/4X/af363xow/6MPxw7MID2IuIghb4TCcUBgP83rb5I3r+xOX1AwID9x8A/B7l - rwgIBHsTz8N/c+g/zz7w7/nzzwACj4FyGIF9Pv7fP+n+v/57fwHwO5S/KPB/QOlHEiAB - EiABEiABEviPEfgfA0+JGQplbmRzdHJlYW0KZW5kb2JqCjI2IDAgb2JqCjM4NjUKZW5k - b2JqCjM2IDAgb2JqCjw8IC9MZW5ndGggMzcgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0 - eXBlIC9JbWFnZSAvV2lkdGggMTI0IC9IZWlnaHQgMTcwIC9Db2xvclNwYWNlCi9EZXZp - Y2VHcmF5IC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K - c3RyZWFtCngB7ZxnUyLdFoUnmBMSRCXnKCASREBERJIRcxjHMOH//4S79j5N0ygoAlN1 - 36o+H6YUGR52OHGv01++qE31gOqB/w8PfO2zjfrbSthv3L53beJv0htHx6cPxEczcky0 - 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 - cExpL6NF9wWnbGcp9nN75hQZPrjDO7P9nYTDohF0kLFSEpP2aND9WI41zCP074+PvEgT - GxIM4sNaTbZ/0NUub24l2T8E/7difUjzxyjQH8FprY5LB2j3d7Qml6au0aA/hGN/dHuH - Jl+xGJnVH7gds1rznC+Z4GrJefPkkNbEI3L4O9mORRT2KfXDY7pcg4YrNcdAl2itQEcd - vDzjA6Z+B1IBe/1vt4QTK7h9XO05xqUiXCU6xi6EbxIlYiNEd405LR9pm1St82UqXKGq - V+keEa2QRmd1j5gDzrvi/WqNbpDVqvti0zlqdDfLaTGR3sJFMtydq1T2y3u4NoadPm05 - RxXrVuzfxtwfjsp39+S7etF/gO5iOZ1GxBO4s5jPb2/ncUswncCRFp2nYYE0ggxvWd0l - 5nwesYYbk6nNDNpmCrcj18T5wsjRbyy3tG6K0hVVXEqVboXSsnDEVr+ynFavZpvT7Qvg - Zi7dy8Vt3IDP7bSZeUXK267+1mZK1773syLh+GjZahc3g0MhcQvY3j5MGm406/YlZDjW - 7TgIgul8I9rrFbefzas4zsHO53Nrs26gbq+14LRj0RqMdBPcbnc4nQ47bDatGOkUC8fF - o7eavkwHXG8wLtMNeDTcdl82GsTJ4T9Cy3Bsl+jqv7j5v7IibvmLc2psNUebZu0ASJZL - jzzgJx4YDPx0A+nhBv8O3bacHvXQetKDeKqD/FCHnudIbRMG/Iks/87VK5RT8ISLBTR6 - moUoiAz9RIf3vxXD6XifHu0hHuwBcLsQ1Ov07P1P7fOvgGOPzJW7SfE8E3p8iai+UeGx - z48Z7G18MkF1LLge5oMLMNJ7+Md39PF9CI6ow3h+kgzVG+V6Zx//fbi3AC7h8Q1E66/M - OxxW+t9Mpzq11MTvI/nofj5E4Nr/9vN/RvseYo/2E9VPUz2gekD1wH/bA/8DnbcyYgpl - bmRzdHJlYW0KZW5kb2JqCjM3IDAgb2JqCjM0MDgKZW5kb2JqCjMzIDAgb2JqCjw8IC9M - ZW5ndGggMzQgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGgg - MzgwIC9IZWlnaHQgMTUyIC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9CaXRzUGVyQ29t - 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 - 8lcEhMLoxPPwXxz6T7MP/FF//hlA4DFQdiKwycf/+yfd/+Uf/QuAn6H8RYH/AKX/kgAJ - kAAJkAAJkMB/jcD/A4a3SRwKZW5kc3RyZWFtCmVuZG9iagozNCAwIG9iagozNDk2CmVu - ZG9iagozOCAwIG9iago8PCAvTGVuZ3RoIDM5IDAgUiAvTiAzIC9BbHRlcm5hdGUgL0Rl - dmljZVJHQiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtWHk4VV3bX2d0 - zMeQMRzKkHnKPI8ZM2co8xiO4xhCSFGUucyEJIl6lIgGUqbMokSJMkVmIjK9+9DT833X - 973X+8+7rmvt9Vv3+t2/tfa+z9r3WRsA7EMnAsEHDgDwxQcSzXQ1cNY2tjiyIYACtAAL - RAHMySWAoG5iYghR/k1ZHwAw0lC/CEkrxyp1IeyFaeVXk6LyQcGy+X/j9LeZhghNCABM - GDIwehxgNRJ2PsAWJHwukBAIcTxJ2MXTyRXC4RAWJlqYaUK4FMI0Hge4loSdD/AbEg52 - 8SD5DgKApse7euEBIJuDsIqrW4ALNEya19U1wMUXwikQr8/X1w/Sx0IVCLgQiJAvNgHC - R0nPBWqhYgvpSpVDOsn/2IIhreo4APj8/7HxQhymaQDu8P5jWzXbf1Ywpp4AdynJfTkY - lQYAqJG9vVU+SPM6ADupe3tbRXt7O7cBQAwD0ODjEkQM3udCC4R1AfCf+gf3/NsDAQUH - CjDMDr6KDEEtknlhxincKMeoT9H0Y83o2hm0GV8yKTBXswqxFR5m5UjhwuAiuBePuBx9 - x6fDX3kMJ5gotC7iKNosLiyRJLkobXz8nixczk7+oSJSyVK5WGVJTVE9WqNVi0rbWCdR - t0MPra9uEGr40GjyJKuJoWmYWZn5oCXSSvyUnfUlm3u2vXbrZ9jtlR2cHC863XJucBlx - 3XJn8ZDyNPbyPHvBO8Pnge9r/Ae/WcIOkTaAK1AsSCXY4Jx1iGsoPizkfFR4XERyZNqF - 7Ki8i/mXCqNvxdy6XHglPzY3Lutq2rXk+KsJ0YnhSQHJ3inOqdbXjW9opsmlC2fgMhmz - yLI2s7/nDOd25dXffJB/syC+MOyWR5HlbY1i0TtsJeiS5bufSpvvVZRllUfd93xg8pds - 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 - Yi8xRBdeFrtSH2d8dSSekAhPSk8RSH1xwzRtKuN8Fja7JFcp722+R8HOreu3+YtflJjc - nbgXXI65n/3XsYraRzqVfVWnqydqvGsXn/k/X67D1083OLzqb9RqetTC3nrxzVi7WkdO - 52K3ek9S70Afe7/du6z33R/ggxJDZz5Gf7o73Pp5fGT7C91XnjGJcaUJ7UmDKaNvxtMG - M7rf1Wbl5kTmcQv0i7DF5aXPy20rj1dv/ohZ8143+Xl8g2MTuTn9q3OrYjtlx2/XeI+P - FP+D89L+mYJC08/Hj4gz1NTa7/73Lr4+QdA5ar/QQlcqvLPxSailh2pTQLC5NtRCeQsM - uHvp6P3GU65OWgYQPgzV9TBPTWOopYL+7dK7E3XMIMwEYc6zTvomEKaBsLQb3tIcwpAm - TIMQqEHisEDYwi1A+2+7T5inxanf/EhvPwMSh6SZ4Oqm9XsNsCy8j7EhZCfpl3oF6u2f - UyFcD3Sg9yIReAA3IAIMob2iBVkm9i1/9632+15/xg9YIsB93zMY8gwA3mAK8vF18LpE - hPbcAePgigMuwA8EAR+IFwSI4uXiM+Lbfzia0JgPVP9/r4MRL+AKMf6n2r6dNJdvpXtw - ll+ogpVn91zN3B/Vg3ty/rNig79nh9aA/2P9P4rAC/qusH+ehp4UQEOxy7MnoQa+QlLz - v0qgWwh01gZA048QSvTy8AzEqUNfE9yEcXp4F1FhnKS4uDz4FwLFZdwKZW5kc3RyZWFt - CmVuZG9iagozOSAwIG9iagozODI3CmVuZG9iagoyNCAwIG9iagpbIC9JQ0NCYXNlZCAz - OCAwIFIgXQplbmRvYmoKNDAgMCBvYmoKPDwgL0xlbmd0aCA0MSAwIFIgL04gMyAvQWx0 - ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB - rVh5OFVd219ndMzHkDEcypB5yjyPGTNnKPMYjuMYQkhRlLnMhCSJepSIBlKmzKJEiTJF - ZiIyvfvQ0/N91/e91/vPu65r7fVb9/rdv7X2vs/a91kbAOxDJwLBBw4A8MUHEs10NXDW - NrY4siGAArQAC0QBzMklgKBuYmIIUf5NWR8AMNJQvwhJK8cqdSHshWnlV5Oi8kHBsvl/ - 4/S3mYYITQgATBgyMHocYDUSdj7AFiR8LpAQCHE8SdjF08kVwuEQFiZamGlCuBTCNB4H - uJaEnQ/wGxIOdvEg+Q4CgKbHu3rhASCbg7CKq1uACzRMmtfVNcDFF8IpEK/P19cP0sdC - FQi4EIiQLzYBwkdJzwVqoWIL6UqVQzrJ/9iCIa3qOAD4/P+x8UIcpmkA7vD+Y1s1239W - MKaeAHcpyX05GJUGAKiRvb1VPkjzOgA7qXt7W0V7ezu3AUAMA9Dg4xJEDN7nQguEdQHw - n/oH9/zbAwEFBwowzA6+igxBLZJ5YcYp3CjHqE/R9GPN6NoZtBlfMikwV7MKsRUeZuVI - 4cLgIrgXj7gcfcenw195DCeYKLQu4ijaLC4skSS5KG18/J4sXM5O/qEiUslSuVhlSU1R - PVqjVYtK21gnUbdDD62vbhBq+NBo8iSriaFpmFmZ+aAl0kr8lJ31JZt7tr1262fY7ZUd - nBwvOt1ybnAZcd1yZ/GQ8jT28jx7wTvD54Hva/wHv1nCDpE2gCtQLEgl2OCcdYhrKD4s - 5HxUeFxEcmTaheyovIv5lwqjb8Xculx4JT82Ny7ratq15PirCdGJ4UkByd4pzqnW141v - aKbJpQtn4DIZs8iyNrO/5wznduXV33yQf7MgvjDslkeR5W2NYtE7bCXokuW7n0qb71WU - ZZVH3fd8YPKXbAXHQ8TD6UddlZWPM6pCq08/Ua3hroXXTjxtelb8POaFS516PVf9zsuh - hievUl97N2o3cTX9bO5pKWkNf2PWxtf2q72rI78T36XSTdX9saek1/+tYh+yr6v/xjvr - 9xzvvwwUfXAe5Bn8OpT/0fYT06fe4auf1T9vjlSMun5h/dL1NWpMcmxiPH1Ce2J98s6U - xTfkt8fTzjN0Mw3fCbO42d65i/OS8xMLWYuGS7ClmmX8Cv/K19W8HzZrzGsD65k/bTc4 - NsY2S38RtuS24dsdOxm7Tntie3u/42+HGiSzwvRRnKCsp5amKcdy02Uw0DPGHNpixrNM - sFmwt3AocN7HHea+xvPrqDtvL7+iQJEgRshXuEdUUixVfEFSR6pAel1GTzZXbkZBRjFS - qUWFQtVILUm9U5NcS1P7vM5D3Uk9Fn09gxDDEqN+4x0TflNTsxDzmxavLb+dorAWsTlp - i7dLOv3gTIf9tCPKidtZ0cXKFe8W657vUe3Z4TV6dtWHzJcVL+inSND3tya6BwQEXgi6 - Fpx2Li+kOLQ87NH5mvDnES8jX114HdV4sfFSY/SrmJeX6648ja2Kq7hadu1OfH5CZmJK - UlzyhZTgVJ/rLjds0ozTNTPkMkWyeLKZcshzdnKX8sZuvstvKagtLLuVW5RwO7zY987p - EsO7iqWC99jKMGXr5RP3+x68/Ot+Rc7DK48CKh0eG1TJVvM8oX6yWTNe2/209lnR84QX - QXX29bovxRqYG3ZfTb3uanzclN0c2eLSqvtGqI2mbbm9v6OqM70rsNu8R7IX2zv39k3f - 7f5IKPriA5iBLx+eDMYPOXyU+oT+NDh873PoiN4o8+jkl8qvkWN644zjIxN3JwlTslO7 - 35qm42YMv2O/v529Pmc2TzffvXBtUXtxd6l6+ewK50rvatQP0R8f16LXBdd7fvpv0G9U - bOpvTvwK28JuFW1LbzfumO6M7p7dXdsL248/Ai6MUEVaojzRkWQZmHvkdRQDlLPUcBpG - Wn6sEp0pvTNDEGPsoWymcuZnLO2sQ2zf2Nc54JwUXEw4Lm5eHqEjokfFeSX4JPhFBQSP - 8QlyCDEIY4R/icyKfhJrFa+UyJO8LOUjbXZcRoZZZkN2UK5WPl2BqGisJKiMUh5RqVVN - VfNS19Bg01jRbNcq0g7TMdMVPAE/8VHvkf41AxdDRSNGo3njlpOFJqGm5mYi5mjzLxZP - LdOs8KdOWPNYb9sM2D60u3ba7YyyPbP9skO7422ncGcrF1FXMtdRtxr3JA93T2UvRq/Z - s6+9s3zwvlp4VvyCXxMhy9+XqBbAGDAd+DwoMdjxnGQIMmQgtDQs9Lx+OHv4XMSLyMQL - Z6JEo3Yv9lwqiCbEqF+mvzx+pSo2Ns76quDVnWtv44sTQhINk7iT1pM7U4pSQ6+b3BBI - A2lD6ZUZCZnuWerZh7M3ct7nPspLvumbb1AgWEhR+P1WZ9GD28nFxDtWJQp3uUpRpbP3 - +suelxffT3oQ+pdbhdlDtUdilVyP6aqQVRvVC08maz7Xfnja/6z3ee+LvrqB+uGXkw3L - r/YasU28zcotNq0hb/LamtpXO3m77Lvzer68FeqL6H//Xm6gcJBuKP4T9XDmiPBo21e/ - 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 - IWQn6Zd6Bertn1MhXA90oPciEXgANyACDKG9ogVZJvYtf/et9vtef8YPWCLAfd8zGPIM - AN5gCvLxdfC6RIT23AHj4IoDLsAPBAEfiBcEiOLl4jPi2384mtCYD1T/f6+DES/gCjH+ - p9q+nTSXb6V7cJZfqIKVZ/dczdwf1YN7cv6zYoO/Z4fWgP9j/T+KwAv6rrB/noaeFEBD - scuzJ6EGvkJS879KoFsIdNYGQNOPEEr08vAMxKlDXxPchHF6eBdRYZykuLg8+BcCxWXc - CmVuZHN0cmVhbQplbmRvYmoKNDEgMCBvYmoKMzgyNwplbmRvYmoKMzAgMCBvYmoKWyAv - SUNDQmFzZWQgNDAgMCBSIF0KZW5kb2JqCjQyIDAgb2JqCjw8IC9MZW5ndGggNDMgMCBS - IC9OIDMgL0FsdGVybmF0ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+ - CnN0cmVhbQp4Aa1YeThVXdtfZ3TMx5AxHMqQeco8jxkzZyjzGI7jGEJIUZS5zIQkiXqU - iAZSpsyiRIkyRWYiMr370NPzfdf3vdf7z7uua+31W/f63b+19r7P2vdZGwDsQycCwQcO - APDFBxLNdDVw1ja2OLIhgAK0AAtEAczJJYCgbmJiCFH+TVkfADDSUL8ISSvHKnUh7IVp - 5VeTovJBwbL5f+P0t5mGCE0IAEwYMjB6HGA1EnY+wBYkfC6QEAhxPEnYxdPJFcLhEBYm - WphpQrgUwjQeB7iWhJ0P8BsSDnbxIPkOAoCmx7t64QEgm4OwiqtbgAs0TJrX1TXAxRfC - KRCvz9fXD9LHQhUIuBCIkC82AcJHSc8FaqFiC+lKlUM6yf/YgiGt6jgA+Pz/sfFCHKZp - AO7w/mNbNdt/VjCmngB3Kcl9ORiVBgCokb29VT5I8zoAO6l7e1tFe3s7twFADAPQ4OMS - RAze50ILhHUB8J/6B/f82wMBBQcKMMwOvooMQS2SeWHGKdwox6hP0fRjzejaGbQZXzIp - MFezCrEVHmblSOHC4CK4F4+4HH3Hp8NfeQwnmCi0LuIo2iwuLJEkuShtfPyeLFzOTv6h - IlLJUrlYZUlNUT1ao1WLSttYJ1G3Qw+tr24QavjQaPIkq4mhaZhZmfmgJdJK/JSd9SWb - e7a9dutn2O2VHZwcLzrdcm5wGXHdcmfxkPI09vI8e8E7w+eB72v8B79Zwg6RNoArUCxI - JdjgnHWIayg+LOR8VHhcRHJk2oXsqLyL+ZcKo2/F3LpceCU/Njcu62rateT4qwnRieFJ - AcneKc6p1teNb2imyaULZ+AyGbPIsjazv+cM53bl1d98kH+zIL4w7JZHkeVtjWLRO2wl - 6JLlu59Km+9VlGWVR933fGDyl2wFx0PEw+lHXZWVjzOqQqtPP1Gt4a6F1048bXpW/Dzm - hUudej1X/c7LoYYnr1JfezdqN3E1/WzuaSlpDX9j1sbX9qu9qyO/E9+l0k3V/bGnpNf/ - rWIfsq+r/8Y76/cc778MFH1wHuQZ/DqU/9H2E9On3uGrn9U/b45UjLp+Yf3S9TVqTHJs - Yjx9QntiffLOlMU35LfH084zdDMN3wmzuNneuYvzkvMTC1mLhkuwpZpl/Ar/ytfVvB82 - a8xrA+uZP203ODbGNkt/EbbktuHbHTsZu057Ynt7v+Nvhxoks8L0UZygrKeWpinHctNl - MNAzxhzaYsazTLBZsLdwKHDexx3mvsbz66g7by+/okCRIEbIV7hHVFIsVXxBUkeqQHpd - Rk82V25GQUYxUqlFhULVSC1JvVOTXEtT+7zOQ91JPRZ9PYMQwxKjfuMdE35TU7MQ85sW - ry2/naKwFrE5aYu3Szr94EyH/bQjyonbWdHFyhXvFuue71Ht2eE1enbVh8yXFS/op0jQ - 97cmugcEBF4Iuhacdi4vpDi0POzR+Zrw5xEvI19deB3VeLHxUmP0q5iXl+uuPI2tiqu4 - WnbtTnx+QmZiSlJc8oWU4FSf6y43bNKM0zUz5DJFsniymXLIc3Zyl/LGbr7LbymoLSy7 - lVuUcDu82PfO6RLDu4qlgvfYyjBl6+UT9/sevPzrfkXOwyuPAiodHhtUyVbzPKF+slkz - Xtv9tPZZ0fOEF0F19vW6L8UamBt2X0297mp83JTdHNni0qr7RqiNpm25vb+jqjO9K7Db - vEeyF9s79/ZN3+3+SCj64gOYgS8fngzGDzl8lPqE/jQ4fO9z6IjeKPPo5JfKr5FjeuOM - 4yMTdycJU7JTu9+apuNmDL9jv7+dvT5nNk83371wbVF7cXepevnsCudK72rUD9EfH9ei - 1wXXe376b9BvVGzqb078CtvCbhVtS2837pjujO6e3V3bC9uPPwIujFBFWqI80ZFkGZh7 - 5HUUA5Sz1HAaRlp+rBKdKb0zQxBj7KFspnLmZyztrENs39jXOeCcFFxMOC5uXh6hI6JH - xXkl+CT4RQUEj/EJcggxCGOEf4nMin4SaxWvlMiTvCzlI212XEaGWWZDdlCuVj5dgaho - rCSojFIeUalVTVXzUtfQYNNY0WzXKtIO0zHTFTwBP/FR75H+NQMXQ0UjRqN545aThSah - puZmIuZo8y8WTy3TrPCnTljzWG/bDNg+tLt22u2Msj2z/bJDu+Ntp3BnKxdRVzLXUbca - 9yQPd09lL0av2bOvvbN88L5aeFb8gl8TIcvfl6gWwBgwHfg8KDHY8ZxkCDJkILQ0LPS8 - fjh7+FzEi8jEC2eiRKN2L/ZcKogmxKhfpr88fqUqNjbO+qrg1Z1rb+OLE0ISDZO4k9aT - O1OKUkOvm9wQSANpQ+mVGQmZ7lnq2YezN3Le5z7KS77pm29QIFhIUfj9VmfRg9vJxcQ7 - ViUKd7lKUaWz9/rLnpcX3096EPqXW4XZQ7VHYpVcj+mqkFUb1QtPJms+13542v+s93nv - i766gfrhl5MNy6/2GrFNvM3KLTatIW/y2praVzt5u+y783q+vBXqi+h//15uoHCQbij+ - E/Vw5ojwaNtXv3GuiQ9TOdOu32Xn6OZXFz8vd602rzX+rNts2GrfGSbF/yD3kXICWgaA - TCwAp44CYF4EQGwOlOosoVxVCoAJNQAW8gBukw3g9rUA5u4OfucPKIegACWgB+yAD0gC - NXASOAB/EAOyQQVoASNgA8YAE4MZwbxh8bD7sG7YCpwZrgx3hSfAn8C/IKgQ8ghPRCbi - DeIXUgTpjMxC9qDIUOqocFQtah19HB2ErkH/IlMlu0zWhWHCOGEeYLbI9clzyRcoNCiy - KJYo9SiLqWBUjlQN1DzUV6jnaMxp6mgFaNOxSGwg9hudHd1ben36JgZVhjpGZcb6Q+qH - WpmMmT4wOzMvsESw0rAWsh1n62B3Zd89nMshzzHEGc6F42rB+XGzcbfwBB3hOzJ0NIlX - h3eP7zl/qIC8wPaxV4JxQmbCnMLzIvWiqWIe4qoSbBIbkoNSz6QLjsfK+MvayxnJqypI - KQoqHVHmUuFU5VTjURfQENdU1Dqhba1zVjfyRLpehX6HwYwRhbHoSQuTCNNSswELtKW8 - ld+pu9Zjtjg7x9O3z8w4SDpGOHW4HHYluLV64DzDvYa9VXxu4yn9ggnjRIuAN0GqwU9D - ZENrziuGv440ujB8ER+NjMm/ohQ7cjUmXixhNOlGitF1yhs96VmZHtlKuUx5P/NHCjuL - Goqfl7wobS57d3+2AvNI5LF19bWaxmeIF3r1aQ2TjUrNma1r7dadL3qOvL3WvzJgO9jw - 6ejnK6NTYxoTuVPLM5qz1+dHl46tEH48Wd/cVN2K3mkm/X5+x58BHAb8QAqoAxPgBAJA - LMgDlaAdjIMdGCvsOMwcFgC7AauGDcK24TxwPbg/PAfeBF9CcCAMEOcR5YjPSDqkNvI8 - shI5i+JFOaJuoj6h2dB26Jvor2T8ZHiyJxiAMcRkY6bJ5cnjyb9QHKdIpPhGqUFZQLlL - 5UD1ipqPOoF6jcaBpoNWnvYelh2bTIekC6dbp/enX2DwZVhkJDKuH4pgQjOlMB9mLmdR - ZOlidWL9yZbELsDeeNiJA3AUcWpzznJdxynivnGn82jxrB8pO+rIy8Lbz5fCf1IAK9B/ - LFvQSUhYaFP4jUiOKF5MS5xDfFPig2SNVI70heMeMqayynLC8pwK9IoYJaC0pbypsqH6 - S21XA6VJo8Wqzacjo3vixGk9IvRWu2P42ujrSQSUA43MgswLLDott06JWDvaZNh2nyY/ - o20f49DiRO580iXTdcxd1CPCs/ssj/c5nx4o+10hTBJ1AsqCsMEh58ZDTcIawqUiSi9w - RWVfYo7OuMx6pSBO4GpVvGbC+yTvFGTqrRvqaZMZiVny2TO5eTctCrCFvUXpxfYlQnd3 - 7r0rr3iQXBHw6Mxjg2qVmuNPJZ9L1Sm81Hl1qhHfHN9a0TbUSdGt2RvT1/3+6IeYoaXh - syOrXxMn5KbWZ9rnHi8+Xmlb+7kpuX1pP/4IQA4YAA6IA01gDQggHpSCVjADo4ZJw87A - 4qCYT0I73gB+Cf4MvoaQQhARVYgNpAoyFtmPwqEIqEY0C5qA7iATIIsjm8WYYp6S85Kn - UaApwil+UBIol6gCqDapo2mwNLdoZWi7sV50GLpyelP6XwwljFaHyA+9ZAphlmZeYali - DWFTZcewvzt8myOQU5eLg2sN18t9nyfhiO9RU145Pm5+Kv5Nge/HhgXfCrUJN4q8FIXS - tHizRKfkgNSY9LIMQpZFTlxeX8FDMVapTLlHZUPtiLqZRrRmjdaCzjFd9xMlet8NxA3D - jFpOHjLxMK0zZ7Tws+yC4pZs88Pu9OlmewmHAida5yiXH25e7qOe1l5vvQ192vC6fi3+ - OsTWQP2g7nPmIUNhjuenI/wjt6JiLzFEF14Wu1IfZ3x1JJ6QCE9KTxFIfXHDNG0q43wW - NrskVynvbb5Hwc6t67f5i1+UmNyduBdcjrmf/dexitpHOpV9VaerJ2q8axef+T9frsPX - Tzc4vOpv1Gp61MLeevHNWLtaR07nYrd6T1LvQB97v927rPfdH+CDEkNnPkZ/ujvc+nl8 - ZPsL3VeeMYlxpQntSYMpo2/G0wYzut/VZuXmROZxC/SLsMXlpc/LbSuPV2/+iFnzXjf5 - eXyDYxO5Of2rc6tiO2XHb9d4j48U/4Pz0v6ZgkLTz8ePiDPU1Nrv/vcuvj5B0Dlqv9BC - Vyq8s/FJqKWHalNAsLk21EJ5Cwy4e+no/cZTrk5aBhA+DNX1ME9NY6ilgv7t0rsTdcwg - zARhzrNO+iYQpoGwtBve0hzCkCZMgxCoQeKwQNjCLUD7b7tPmKfFqd/8SG8/AxKHpJng - 6qb1ew2wLLyPsSFkJ+mXegXq7Z9TIVwPdKD3IhF4ADcgAgyhvaIFWSb2LX/3rfb7Xn/G - D1giwH3fMxjyDADeYAry8XXwukSE9twB4+CKAy7ADwQBH4gXBIji5eIz4tt/OJrQmA9U - /3+vgxEv4Aox/qfavp00l2+le3CWX6iClWf3XM3cH9WDe3L+s2KDv2eH1oD/Y/0/isAL - +q6wf56GnhRAQ7HLsyehBr5CUvO/SqBbCHTWBkDTjxBK9PLwDMSpQ18T3IRxengXUWGc - pLi4PPgXAsVl3AplbmRzdHJlYW0KZW5kb2JqCjQzIDAgb2JqCjM4MjcKZW5kb2JqCjM1 - IDAgb2JqClsgL0lDQ0Jhc2VkIDQyIDAgUiBdCmVuZG9iago0NCAwIG9iago8PCAvTGVu - Z3RoIDQ1IDAgUiAvTiAxIC9BbHRlcm5hdGUgL0RldmljZUdyYXkgL0ZpbHRlciAvRmxh - dGVEZWNvZGUgPj4Kc3RyZWFtCngBhVJPSBRRHP7NNhKEiEGFeIh3CgmVKaysoNp2dVmV - bVuV0qIYZ9+6o7Mz05vZNcWTBF2iPHUPomN07NChm5eiwKxL1yCpIAg8dej7zezqKIRv - eTvf+/39ft97RG2dpu87KUFUc0OVK6Wnbk5Ni4MfKUUd1E5YphX46WJxjLHruZK/u9fW - Z9LYst7HtXb79j21lWVgIeottrcQ+iGRZgAfmZ8oZYCzwB2Wr9g+ATxYDqwa8COiAw+a - uTDT0Zx0pbItkVPmoigqr2I7Sa77+bnGvou1iYP+XI9m1o69s+qq0UzUtPdEobwPrkQZ - z19U9mw1FKcN45xIQxop8q7V3ytMxxGRKxBKBlI1ZLmfak6ddeB1GLtdupPj+PYQpT7J - YKiJtemymR2FfQB2KsvsEPAF6PGyYg/ngXth/1tRw5PAJ2E/ZId51q0f9heuU+B7hD01 - 4M4UrsXx2oofXi0BQ/dUI2iMc03E09c5c6SI7zHUGZj3RjmmCzF3lqoTN4A7YR9ZqmYK - sV37ruol7nsCd9PjO9GbOQtcoBxJcrEV2RTQPAlYFH2LsEkOPD7OHlXgd6iYwBy5idzN - KPce1REbZ6NSgVZ6jVfGT+O58cX4ZWwYz4B+rHbXe3z/6eMVdde2Pjz5jXrcOa69nRtV - YVZxZQvd/8cyhI/ZJzmmwdOhWVhr2HbkD5rMTLAMKMR/BT6X+pITVdzV7u24RRLMUD4s - bCW6S1RuKdTqPYNKrBwr2AB2cJLELFocuFNrujl4d9giem35TVey64b++vZ6+9ryHm3K - qCkoE82zRGaUsVuj5N142/1mkRGfODq+572KWsn+SUUQP4U5WiryFFX0VlDWxG9nDn4b - tn5cP6Xn9UH9PAk9rZ/Rr+ijEb4MdEnPwnNRH6NJ8LBpIeISoIqDM9ROVGONA+Ip8fK0 - W2SR/Q9AGf1mCmVuZHN0cmVhbQplbmRvYmoKNDUgMCBvYmoKNzA0CmVuZG9iagoxOCAw - IG9iagpbIC9JQ0NCYXNlZCA0NCAwIFIgXQplbmRvYmoKNDYgMCBvYmoKPDwgL0xlbmd0 - aCA0NyAwIFIgL04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVE - ZWNvZGUgPj4Kc3RyZWFtCngBrVh5OFVd219ndMzHkDEcypB5yjyPGTNnKPMYjuMYQkhR - lLnMhCSJepSIBlKmzKJEiTJFZiIyvfvQ0/N91/e91/vPu65r7fVb9/rdv7X2vs/a91kb - AOxDJwLBBw4A8MUHEs10NXDWNrY4siGAArQAC0QBzMklgKBuYmIIUf5NWR8AMNJQvwhJ - K8cqdSHshWnlV5Oi8kHBsvl/4/S3mYYITQgATBgyMHocYDUSdj7AFiR8LpAQCHE8SdjF - 08kVwuEQFiZamGlCuBTCNB4HuJaEnQ/wGxIOdvEg+Q4CgKbHu3rhASCbg7CKq1uACzRM - mtfVNcDFF8IpEK/P19cP0sdCFQi4EIiQLzYBwkdJzwVqoWIL6UqVQzrJ/9iCIa3qOAD4 - /P+x8UIcpmkA7vD+Y1s1239WMKaeAHcpyX05GJUGAKiRvb1VPkjzOgA7qXt7W0V7ezu3 - AUAMA9Dg4xJEDN7nQguEdQHwn/oH9/zbAwEFBwowzA6+igxBLZJ5YcYp3CjHqE/R9GPN - 6NoZtBlfMikwV7MKsRUeZuVI4cLgIrgXj7gcfcenw195DCeYKLQu4ijaLC4skSS5KG18 - /J4sXM5O/qEiUslSuVhlSU1RPVqjVYtK21gnUbdDD62vbhBq+NBo8iSriaFpmFmZ+aAl - 0kr8lJ31JZt7tr1262fY7ZUdnBwvOt1ybnAZcd1yZ/GQ8jT28jx7wTvD54Hva/wHv1nC - DpE2gCtQLEgl2OCcdYhrKD4s5HxUeFxEcmTaheyovIv5lwqjb8Xculx4JT82Ny7ratq1 - 5PirCdGJ4UkByd4pzqnW141vaKbJpQtn4DIZs8iyNrO/5wznduXV33yQf7MgvjDslkeR - 5W2NYtE7bCXokuW7n0qb71WUZZVH3fd8YPKXbAXHQ8TD6UddlZWPM6pCq08/Ua3hroXX - Tjxtelb8POaFS516PVf9zsuhhievUl97N2o3cTX9bO5pKWkNf2PWxtf2q72rI78T36XS - TdX9saek1/+tYh+yr6v/xjvr9xzvvwwUfXAe5Bn8OpT/0fYT06fe4auf1T9vjlSMun5h - /dL1NWpMcmxiPH1Ce2J98s6UxTfkt8fTzjN0Mw3fCbO42d65i/OS8xMLWYuGS7ClmmX8 - Cv/K19W8HzZrzGsD65k/bTc4NsY2S38RtuS24dsdOxm7Tntie3u/42+HGiSzwvRRnKCs - p5amKcdy02Uw0DPGHNpixrNMsFmwt3AocN7HHea+xvPrqDtvL7+iQJEgRshXuEdUUixV - fEFSR6pAel1GTzZXbkZBRjFSqUWFQtVILUm9U5NcS1P7vM5D3Uk9Fn09gxDDEqN+4x0T - flNTsxDzmxavLb+dorAWsTlpi7dLOv3gTIf9tCPKidtZ0cXKFe8W657vUe3Z4TV6dtWH - zJcVL+inSND3tya6BwQEXgi6Fpx2Li+kOLQ87NH5mvDnES8jX114HdV4sfFSY/SrmJeX - 6648ja2Kq7hadu1OfH5CZmJKUlzyhZTgVJ/rLjds0ozTNTPkMkWyeLKZcshzdnKX8sZu - vstvKagtLLuVW5RwO7zY987pEsO7iqWC99jKMGXr5RP3+x68/Ot+Rc7DK48CKh0eG1TJ - VvM8oX6yWTNe2/209lnR84QXQXX29bovxRqYG3ZfTb3uanzclN0c2eLSqvtGqI2mbbm9 - v6OqM70rsNu8R7IX2zv39k3f7f5IKPriA5iBLx+eDMYPOXyU+oT+NDh873PoiN4o8+jk - l8qvkWN644zjIxN3JwlTslO735qm42YMv2O/v529Pmc2TzffvXBtUXtxd6l6+ewK50rv - atQP0R8f16LXBdd7fvpv0G9UbOpvTvwK28JuFW1LbzfumO6M7p7dXdsL248/Ai6MUEVa - ojzRkWQZmHvkdRQDlLPUcBpGWn6sEp0pvTNDEGPsoWymcuZnLO2sQ2zf2Nc54JwUXEw4 - Lm5eHqEjokfFeSX4JPhFBQSP8QlyCDEIY4R/icyKfhJrFa+UyJO8LOUjbXZcRoZZZkN2 - UK5WPl2BqGisJKiMUh5RqVVNVfNS19Bg01jRbNcq0g7TMdMVPAE/8VHvkf41AxdDRSNG - o3njlpOFJqGm5mYi5mjzLxZPLdOs8KdOWPNYb9sM2D60u3ba7YyyPbP9skO7422ncGcr - F1FXMtdRtxr3JA93T2UvRq/Zs6+9s3zwvlp4VvyCXxMhy9+XqBbAGDAd+DwoMdjxnGQI - MmQgtDQs9Lx+OHv4XMSLyMQLZ6JEo3Yv9lwqiCbEqF+mvzx+pSo2Ns76quDVnWtv44sT - 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 - b/6IWfNeN/l5fINjE7k5/atzq2I7Zcdv13iPjxT/g/PS/pmCQtPPx4+IM9TU2u/+9y6+ - PkHQOWq/0EJXKryz8UmopYdqU0CwuTbUQnkLDLh76ej9xlOuTloGED4M1fUwT01jqKWC - /u3SuxN1zCDMBGHOs076JhCmgbC0G97SHMKQJkyDEKhB4rBA2MItQPtvu0+Yp8Wp3/xI - bz8DEoekmeDqpvV7DbAsvI+xIWQn6Zd6Bertn1MhXA90oPciEXgANyACDKG9ogVZJvYt - f/et9vtef8YPWCLAfd8zGPIMAN5gCvLxdfC6RIT23AHj4IoDLsAPBAEfiBcEiOLl4jPi - 2384mtCYD1T/f6+DES/gCjH+p9q+nTSXb6V7cJZfqIKVZ/dczdwf1YN7cv6zYoO/Z4fW - gP9j/T+KwAv6rrB/noaeFEBDscuzJ6EGvkJS879KoFsIdNYGQNOPEEr08vAMxKlDXxPc - hHF6eBdRYZykuLg8+BcCxWXcCmVuZHN0cmVhbQplbmRvYmoKNDcgMCBvYmoKMzgyNwpl - bmRvYmoKMjcgMCBvYmoKWyAvSUNDQmFzZWQgNDYgMCBSIF0KZW5kb2JqCjQ4IDAgb2Jq - Cjw8IC9MZW5ndGggNDkgMCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2aWNlUkdCIC9GaWx0 - ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AYWUTUgUYRjH/7ONBLEG0ZcIxdDBJFQm - C1IC0/UrU7Zl1UwJYp19d50cZ6eZ3S1FIoTomHWMLlZEh4hO4aFDpzpEBJl1iaCjRRAF - XiK2/zuTu2NUvjAzv3me//t8vcMAVY9SjmNFNGDKzrvJ3ph2enRM2/waVahGFFwpw3M6 - EokBn6mVz/Vr9S0UaVlqlLHW+zZ8q3aZEFA0KndkAz4seTzg45Iv5J08NWckGxOpNNkh - N7hDyU7yLfLWbIjHQ5wWngFUtVOTMxyXcSI7yC1FIytjPiDrdtq0ye+lPe0ZU9Sw38g3 - OQvauPL9QNseYNOLim3MAx7cA3bXVWz1NcDOEWDxUMX2PenPR9n1ysscavbDKdEYa/pQ - Kn2vAzbfAH5eL5V+3C6Vft5hDtbx1DIKbtHXsjDlJRDUG+xm/OQa/YuDnnxVC7DAOY5s - AfqvADc/AvsfAtsfA4lqYKgVkctsN7jy4iLnAnTmnGnXzE7ktWZdP6J18GiF1mcbTQ1a - yrI03+VprvCEWxTpJkxZBc7ZX9t4jwp7eJBP9he5JLzu36zMpVNdnCWa2NantOjqJjeQ - 72fMnj5yPa/3GbdnOGDlgJnvGwo4csq24jwXqYnU2OPxk2TGV1QnH5PzkDznFQdlTN9+ - LnUiQa6lPTmZ65eaXdzbPjMxxDOSrFgzE53x3/zGLSRl3n3U3HUs/5tnbZFnGIUFARM2 - 7zY0JNGLGBrhwEUOGXpMKkxapV/QasLD5F+VFhLlXRYVvVjhnhV/z3kUuFvGP4VYHHMN - 5Qia/k7/oi/rC/pd/fN8baG+4plzz5rGq2tfGVdmltXIuEGNMr6sKYhvsNoOei1kaZ3i - FfTklfWN4eoy9nxt2aPJHOJqfDXUpQhlasQ448muZfdFssU34edby/av6VH7fPZJTSXX - srp4Zin6fDZcDWv/s6tg0rKr8OSNkC48a6HuVQ+qfWqL2gpNPaa2q21qF9+OqgPlHcOc - lYkLrNtl9Sn2YGOa3spJV2aL4N/CL4b/pV5hC9c0NPkPTbi5jGkJ3xHcNnCHlP/DX7MD - Dd4KZW5kc3RyZWFtCmVuZG9iago0OSAwIG9iago3OTIKZW5kb2JqCjcgMCBvYmoKWyAv - SUNDQmFzZWQgNDggMCBSIF0KZW5kb2JqCjIyIDAgb2JqCjw8IC9MZW5ndGggNTAgMCBS - IC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBsZSA4IC9TaXplIFsgMTM2NSBdIC9E - b21haW4KWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9GaWx0ZXIgL0ZsYXRl - RGVjb2RlID4+CnN0cmVhbQp4AbXCB3vhYAAA4H9Ye4Qkduy9iXE/7zqvNtXWbI0WrdnF - PfJwhCQ+iXufd/Ersfg3mVhsxhfJ1XkyfvREfL4ZmydiP6zHYz/r33Gc/Rj+HcO/SKNf - MTY/8ejeyCd+3A88shzdH/6Igp5Fw6uR8IxiaBY5fBoJkYZDU4rBaZjpJBzcHQpOqAcm - IerjUIB6MDCm7h8HSUdB/4EB/4i6bxRYHQZ8h/t9Q9reod/7Dt7nfaf55vMc0et5ozrw - eojugRe4xz0g73vcW119D3C3q7/ec7v2OntusC5nz+V8Zep4dQF9cToA2l+cTLtOe9cB - 2NZ1UO84bKt2WweotWPf3bZbSW3WNlBL27bZsll2Wy0t0OaWdfmZrsX8DPbJYmJqNj0B - bJpNRGPTTN9kbDJumIxbsYaJvhFrMK4bMZqGupExZqjTrGEGxvoaxtigr+2tGvRgdVUD - fb2uul7R646srehp6rQV4qNOy6rmUUdTq3ngWv2gJb3Xqpc13KvuNatljWpTrSpzjZbV - 6N1OFXrHbUmFEpGSihxFSmwXUWQrXETJEbh4/AIC71UWEHJYWQCeh5WMFXl4q1KRB5hT - KgBCOeW6AsodmlVAwOVZxTokz9LMQHJWZRmIKJdl9qblMg6laTlRJk1vTcmknEtSMqJU - kpJKbk9cfCsR//kPbySiG/EpX4tF68Jr0WleiYS7hYIrbi+FAuoC/iWrFwI+Uz7/gs87 - 9jmfdziPd758Bvg37wzwX0ZZ9gAKZW5kc3RyZWFtCmVuZG9iago1MCAwIG9iago1NjQK - ZW5kb2JqCjIzIDAgb2JqCjw8IC9MZW5ndGggNTEgMCBSIC9GdW5jdGlvblR5cGUgMCAv - Qml0c1BlclNhbXBsZSA4IC9TaXplIFsgMTM2NSBdIC9Eb21haW4KWyAwIDEgXSAvUmFu - Z2UgWyAwIDEgMCAxIDAgMSBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4 - AbXCB3vhYAAA4H9Ye4Qkduy9iXE/7zqvNtXWbI0WrdnFPfJwhCQ+iXufd/Ersfg3mVhs - xhfJ1XkyfvREfL4ZmydiP6zHYz/r33Gc/Rj+HcO/SKNfMTY/8ejeyCd+3A88shzdH/6I - gp5Fw6uR8IxiaBY5fBoJkYZDU4rBaZjpJBzcHQpOqAcmIerjUIB6MDCm7h8HSUdB/4EB - /4i6bxRYHQZ8h/t9Q9reod/7Dt7nfaf55vMc0et5ozrweojugRe4xz0g73vcW119D3C3 - q7/ec7v2OntusC5nz+V8Zep4dQF9cToA2l+cTLtOe9cB2NZ1UO84bKt2WweotWPf3bZb - SW3WNlBL27bZsll2Wy0t0OaWdfmZrsX8DPbJYmJqNj0BbJpNRGPTTN9kbDJumIxbsYaJ - vhFrMK4bMZqGupExZqjTrGEGxvoaxtigr+2tGvRgdVUDfb2uul7R646srehp6rQV4qNO - y6rmUUdTq3ngWv2gJb3Xqpc13KvuNatljWpTrSpzjZbV6N1OFXrHbUmFEpGSihxFSmwX - UWQrXETJEbh4/AIC71UWEHJYWQCeh5WMFXl4q1KRB5hTKgBCOeW6AsodmlVAwOVZxTok - z9LMQHJWZRmIKJdl9qblMg6laTlRJk1vTcmknEtSMqJUkpJKbk9cfCsR//kPbySiG/Ep - X4tF68Jr0WleiYS7hYIrbi+FAuoC/iWrFwI+Uz7/gs879jmfdziPd758Bvg37wzwX0ZZ - 9gAKZW5kc3RyZWFtCmVuZG9iago1MSAwIG9iago1NjQKZW5kb2JqCjMgMCBvYmoKPDwg - L1R5cGUgL1BhZ2VzIC9NZWRpYUJveCBbMCAwIDU3NiA3MzNdIC9Db3VudCAxIC9LaWRz - IFsgMiAwIFIgXSA+PgplbmRvYmoKNTIgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1Bh - Z2VzIDMgMCBSIC9WZXJzaW9uIC8xLjQgPj4KZW5kb2JqCjUzIDAgb2JqCjw8IC9MZW5n - dGggNTQgMCBSIC9MZW5ndGgxIDEwMjg4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0 - cmVhbQp4Ab1aeXxU1fU/9+2zZDIzmcnsmZlMZiaTfSEJQ0IyhqwsMSQCCRJMAoGAUBFj - NCo0KhSJiguCCP3Z4sIqMoQIExB/aFHEWvfiUtvaitb203xsfz9trSQzv3PfhAhd/PGH - H+fN3e+775zvPefcc+97QABADf3AQmjRyo5VzY0VtVjzKgDRL+rtcd37x/JHMf8RALti - yaqlK3Uf/ewVAH4mgFK9dEXfkp0FqocAElsAkvq7uzoW//X0U3MAUt/DMYq7sUKZKuYB - eLRYTute2XPzwnNiMZYnYbl9xXWLOsrSS3AsD44BBSs7bl4l3ab8B5ZfxrLrBx0ruxqX - 3bYey59hOXXVdTf0sPPYMziUGstNq1Z3rXr2zh/kY7kd6Xsd6whe9IftRJBz3xrFO39r - l29rZBA1jhdESaEElTpBk6gFnT7JAEaA5G+77ztqM13GOPxJ0PInIJ3vByuXC06A2PsY - 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 - PsXtsyx6E+uxzrNxv/GJa3mzQ2vT3vUgqspw8Q6GfY5lDq4e20b1ojL2LnuEm4Frby7J - Cd03WbGN36p/xLDNuC1DSE/z+ovdNe7atFr/3LR5/iVpS3196r6EPk2vpyetx9vj25Wy - JyuJRVeIz+ZyksBqtJnsZmO2ISc9UbVM8nmLvYw3NUHJZSaZX7I7kkTOkbM9U5UrKjRa - RoRcd67VaU42+03l6T7Rn27N1zj92nLw51jy8gcn/Dc0IfH1O6jFHGU3mIsxqhydY7qT - oiblelmSZ5Jsxmf0Wn1ujdMNCp/oJmwW7sX4DMw59FhnM5jdxJWY6gZ3qiZB8ivdxOdV - KEk25wYhgFGKzu4mlmSMZDdO3gDIkSwiFwQft1pJ8jIvi0sudd1wC0VXRtETd+Oo+DgJ - 9fYMKDg+P/lc8lbtWbxtqv+G+zZe0fOr4f+5dhqzj/eVP7JkWXV6w00vVC57/zefnxbJ - UdI4P2/evKur09DzTc2ov33bs5vmd08tqG0I1WRYkhy5WdUP3ffG+z9l/oGyZIp9zij4 - +Wgdmp5JyFGe1JAIqQh5ueSgiRU0Sp0VzTW+OQuAUWNMZJ0sw44mWyxW9O3Gd09jl/p2 - uXHnbkQ7dk5ePKhHR/Xgwn7RV0Tduz1H9u/3GfMTUgzOaf618x94gJ8f/eXmserJSSrC - bFJIty9lXtyM6w0D/bGP2d+gPpuQwoWhKRHDywZGkSQZLEkWQ7pwE/suLrbAa5QgJCh5 - tF1m0WzGLVmOMqBWWa0kQIl964I3MIsaLyr+OP1xP66ijAoEFX3SRuKEooNFNzElsl+N - s6LzksnWvDufrfIO7WM8k5Zu/qQ5mxzkcseCTZPa98z/L0Zz/s1Hp2Zc9UjTRuY9K9VP - Pb7n38nlgpq4QmtruX0KZInUiPWqDeyAtF75CnOKfUk8I72kPKNSLRGXS13KZapesU/q - Vfap1osDKiXty9SyN8HNPDsvPTkdd1tcKSnl7iP3cYKCI6yKQedCzYMgKVWsqNTgJIm8 - sENiuVNKRnFKBWSH2pJA3W90Kr4wzxoLBif+Fnk9RUcDF1RTGUp+24zZfSE1H9AjxxDQ - q9UqfoM2E/8zmvqGFPjuTRkhd4eS9LjdFQWOpx0FUYGv7iVar9FzuAlWI9vyrYR6LBu0 - a06ZeeqyoO/yopzZsEZ7aqKGui/XX389ejA2ptBGColHhT7Mu6+9+cpbvxqKnjn+wdvH - oz/nckeH2Jmjw2zt+TfZqaM/Q0BRHvD7B3YI5UEBSlgRqiwR6mAetJB5wlLoJkuFm3gF - 4QUhgFNAlEoi4GaMMEH0vkAUgkiyUuTLRauanQ4WlXpwYlGTTT5ugCtwNxeUI2oR0U5s - QGbWvEjpLSFuPBQibqObTGJuHRtiy8c2MgOj/eT1TSzs3DyGM16P6y3uk9ib5X2SDfck - HaFi2ycW+Ga/5MANk1OndOOE2VICZue/bJtc7rfcS8d35hOqdRbJGveC0DmkziLdPFWM - kP+8f/IWFRpFFON/2UcxSUP4+9fdlPPVV0+fPyv7eBjhRyUDr9Vek1j2JegkufxSxaEn - aSaeRksFL3IJOA94jib/MBUC0QB+QkK+6hodUT0w0TLeAcy8HiqZIHrDN8ihiQMoxfxk - DHVYb8d0KoZ15DSsw7Z+TDcK+zCPdRho315mH2zENjqOCcv9+B2GHsuTMCD2KB+ToA7f - qj+E781fYZPZ5zgNV8Y9xb3GT+d3CSnC/cJZ8YgkSO0KjWKh4iTeQek34/t6Fq7F00MG - tHi1AYifKdX4nQZtpRod51LANpjeMqOypSazrmtFb1fPskUd2IPBgD88S8QDw3/zM2Md - i+eaVVAjfwtRD9PlLx4a4Er5m4wm/M5iDsylogzz8eknAT8Qoeee9RgqMBRhyMy8woyY - 7IL7MfwUAwvLyN3Qh2EjhkcwcBO5vVgaJncPclLoGOkDK5keUnHOqwwWp1mpcr6F7ujQ - o873zR8fJxZIgN8Ry2ACKK5Qkp+Sn8BicJIn8eTlFvxqI51sPxxY4WzHpr2wCkM/BlaO - Cdk7mFLgfI5kgZcjeI8PUjhyxPmH/GznJ/kRhgw6X/BHOEyeT8FSKNF50vGo878dS53P - Ydgfb9oXwB5HnHsdK5ybUyJk+6DzQbopGHQ+EE9udOCtR5wrA1udi/Pl9plbI8z+QWcQ - 2+eGVM7iyW5nkeOcM9cfkQiWsx0znRn5v3Cm4Y3YzYWDekM6p92x2TkFm1Ic1f4pGI6T - fWQHZJAdg97pzmOYRXYP1wcmb42QWw/Xped7I+SWUHFd+tZAnd8bmOn0Bmr8fszPfVlc - J14tXiEWiJn44QQ6CKJNNEh6SStpJLWklHDrFyFPDVY4heNkP1QgLPsPo7zxEfI0VnLH - yQG58sBRiZMYCSRDJPbREJUx3BLtH0LxIoCZI4KcEyLkAJ5V06oDISeKOAFObtCixBFZ - 7FAwGSIxKFBhcm9EgPXJvRXmCn25LlhT9Z+idrnlQiy7JP8+MhNHeCu+Iw3vc7Ti62jM - xBytF7ri2c7/8+u5ETt0VWbSleRw76rlS+TX657qrnZ8yx6+uxc/d+jvdLkOLV81/u2A - r71zUTd9v9vRFV7l6aoKL/dUuQ71yvfR6oual9DmXk/VIVhSfVXLoSWhrqrB3lBvNf3M - 4HBn5eq2S561ceJZqyv/zbMq6WCr6bM65fv+6VlttLmTPquNPquNPqsz1Ck/i0JQvay5 - 8oYelE58BY+vwNObw/Wz57fglyatVRGyi76XvxH+DxXtA6oKZW5kc3RyZWFtCmVuZG9i - ago1NCAwIG9iago2NzYyCmVuZG9iago1NSAwIG9iago8PCAvVHlwZSAvRm9udERlc2Ny - aXB0b3IgL0FzY2VudCA3NzAgL0NhcEhlaWdodCA3MjcgL0Rlc2NlbnQgLTIzMCAvRmxh - Z3MgMzIKL0ZvbnRCQm94IFstOTUxIC00ODEgMTQ0NSAxMTIyXSAvRm9udE5hbWUgL0pY - S0JYRitIZWx2ZXRpY2EgL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDk4IC9NYXhXaWR0aCAx - NTAwIC9TdGVtSCA4NSAvWEhlaWdodCA1MzEgL0ZvbnRGaWxlMiA1MyAwIFIgPj4KZW5k - b2JqCjU2IDAgb2JqClsgMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg - MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAw - IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgMCA1NTYg - MCA1MDAgNTU2CjU1NiAyNzggNTU2IDU1NiAyMjIgMCA1MDAgMjIyIDgzMyA1NTYgNTU2 - IDU1NiAwIDMzMyA1MDAgMjc4IDU1NiAwIDcyMiAwIDAKNTAwIDAgMCAwIDAgMCAwIDAg - MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw - IDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg - MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw - IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUwMCBdCmVuZG9iagoxOSAwIG9i - ago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9KWEtC - WEYrSGVsdmV0aWNhIC9Gb250RGVzY3JpcHRvcgo1NSAwIFIgL1dpZHRocyA1NiAwIFIg - L0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIgMjIyIC9FbmNvZGluZyAvTWFjUm9tYW5FbmNv - ZGluZwo+PgplbmRvYmoKMSAwIG9iago8PCAvVGl0bGUgKFVudGl0bGVkKSAvQXV0aG9y - IChBcnZpZCBOb3JiZXJnKSAvQ3JlYXRvciAoT21uaUdyYWZmbGUpIC9Qcm9kdWNlcgoo - TWFjIE9TIFggMTAuNS43IFF1YXJ0eiBQREZDb250ZXh0KSAvQ3JlYXRpb25EYXRlIChE - OjIwMDkwNTI1MDIyMzMzWjAwJzAwJykKL01vZERhdGUgKEQ6MjAwOTA1MjUwMjIzMzNa - MDAnMDAnKSA+PgplbmRvYmoKeHJlZgowIDU3CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAw - MDA1MTUyNSAwMDAwMCBuIAowMDAwMDAxMDM2IDAwMDAwIG4gCjAwMDAwNDM2NDUgMDAw - MDAgbiAKMDAwMDAwMDAyMiAwMDAwMCBuIAowMDAwMDAxMDE3IDAwMDAwIG4gCjAwMDAw - MDExNDAgMDAwMDAgbiAKMDAwMDA0MjExNSAwMDAwMCBuIAowMDAwMDA0Mjk3IDAwMDAw - IG4gCjAwMDAwMDUyNTcgMDAwMDAgbiAKMDAwMDAwMTY4NCAwMDAwMCBuIAowMDAwMDAy - ODI1IDAwMDAwIG4gCjAwMDAwMDUyNzYgMDAwMDAgbiAKMDAwMDAwNTc1OCAwMDAwMCBu - IAowMDAwMDAyODQ1IDAwMDAwIG4gCjAwMDAwMDM4MDcgMDAwMDAgbiAKMDAwMDAwMzgy - NyAwMDAwMCBuIAowMDAwMDA0Mjc3IDAwMDAwIG4gCjAwMDAwMzcxNzUgMDAwMDAgbiAK - MDAwMDA1MTM1MCAwMDAwMCBuIAowMDAwMDAxMzg4IDAwMDAwIG4gCjAwMDAwMDE1Mzkg - MDAwMDAgbiAKMDAwMDA0MjE1MSAwMDAwMCBuIAowMDAwMDQyODk4IDAwMDAwIG4gCjAw - MDAwMjgzMzQgMDAwMDAgbiAKMDAwMDAxMzAyOSAwMDAwMCBuIAowMDAwMDE3MDY4IDAw - MDAwIG4gCjAwMDAwNDExNjMgMDAwMDAgbiAKMDAwMDAwOTMzOCAwMDAwMCBuIAowMDAw - MDEzMDA4IDAwMDAwIG4gCjAwMDAwMzIzMjIgMDAwMDAgbiAKMDAwMDAwNTc3OCAwMDAw - MCBuIAowMDAwMDA5MzE3IDAwMDAwIG4gCjAwMDAwMjA2OTIgMDAwMDAgbiAKMDAwMDAy - NDM2MiAwMDAwMCBuIAowMDAwMDM2MzEwIDAwMDAwIG4gCjAwMDAwMTcwODkgMDAwMDAg - biAKMDAwMDAyMDY3MSAwMDAwMCBuIAowMDAwMDI0MzgzIDAwMDAwIG4gCjAwMDAwMjgz - MTMgMDAwMDAgbiAKMDAwMDAyODM3MSAwMDAwMCBuIAowMDAwMDMyMzAxIDAwMDAwIG4g - CjAwMDAwMzIzNTkgMDAwMDAgbiAKMDAwMDAzNjI4OSAwMDAwMCBuIAowMDAwMDM2MzQ3 - IDAwMDAwIG4gCjAwMDAwMzcxNTUgMDAwMDAgbiAKMDAwMDAzNzIxMiAwMDAwMCBuIAow - MDAwMDQxMTQyIDAwMDAwIG4gCjAwMDAwNDEyMDAgMDAwMDAgbiAKMDAwMDA0MjA5NSAw - MDAwMCBuIAowMDAwMDQyODc4IDAwMDAwIG4gCjAwMDAwNDM2MjUgMDAwMDAgbiAKMDAw - MDA0MzcyOCAwMDAwMCBuIAowMDAwMDQzNzkyIDAwMDAwIG4gCjAwMDAwNTA2NDUgMDAw - MDAgbiAKMDAwMDA1MDY2NiAwMDAwMCBuIAowMDAwMDUwOTAyIDAwMDAwIG4gCnRyYWls - ZXIKPDwgL1NpemUgNTcgL1Jvb3QgNTIgMCBSIC9JbmZvIDEgMCBSIC9JRCBbIDwzODUz - YzMzYzE5YWFhMzMxNDMzNDNmYmUyZDRkYzQ1Mz4KPDM4NTNjMzNjMTlhYWEzMzE0MzM0 - M2ZiZTJkNGRjNDUzPiBdID4+CnN0YXJ0eHJlZgo1MTczMgolJUVPRgoxIDAgb2JqCjw8 - L0F1dGhvciAoQXJ2aWQgTm9yYmVyZykvQ3JlYXRpb25EYXRlIChEOjIwMDkwNTI1MDEz - ODAwWikvQ3JlYXRvciAoT21uaUdyYWZmbGUgNS4xLjEpL01vZERhdGUgKEQ6MjAwOTA1 - MjUwMjIzMDBaKS9Qcm9kdWNlciAoTWFjIE9TIFggMTAuNS43IFF1YXJ0eiBQREZDb250 - ZXh0KS9UaXRsZSAoc3RvcmFnZS5ncmFmZmxlKT4+CmVuZG9iagp4cmVmCjEgMQowMDAw - MDUzMDMwIDAwMDAwIG4gCnRyYWlsZXIKPDwvSUQgWzwzODUzYzMzYzE5YWFhMzMxNDMz - NDNmYmUyZDRkYzQ1Mz4gPDM4NTNjMzNjMTlhYWEzMzE0MzM0M2ZiZTJkNGRjNDUzPl0g - L0luZm8gMSAwIFIgL1ByZXYgNTE3MzIgL1Jvb3QgNTIgMCBSIC9TaXplIDU3Pj4Kc3Rh - cnR4cmVmCjUzMjMxCiUlRU9GCg== - - QuickLookThumbnail - - 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 - UgABAAAAARbPc2YzMgAAAAAAAQxCAAAF3v//8yYAAAeSAAD9kf//+6L///2jAAAD3AAA - wGxjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAGN1cnYAAAAAAAAAAQHNAAB2 - Y2d0AAAAAAAAAAAAAwEAAAIAAAFbAvMEeAXvB2kI4wplC+INVw7TEFIRyhNFFL8WOhe1 - GSsaoBwZHZAfCCB9Ie8jYyTUJkYnsikgKo0r9i1gLsUwLDGOMu80TjWpNwI4WzmwOwQ8 - VT2kPvBAO0GDQsdEDEVORo1Hy0kGSkFLeUywTeVPGVBMUXpSqlPYVQRWMFdbWIJZqVrQ - W/ZdG149X2FggWGhYsBj3mT7ZhhnM2hOaWhqf2uWbK1twm7Xb+tw/XIPcx90L3U+dkt3 - WHhkeW56eHuAfIh9j36Uf5mAnIGegqCDoYShhaCGnoebiJiJlIqPi4mMg418jnOPa5Bi - kViSTpNDlDiVLJYglxSYB5j5meqa3JvNnL6drZ6dn4ugeqFnolWjQqQupRqmBqbxp9uo - xamvqpirgKxorVCuN68dsAOw6LHNsrKzlrR5tVy2P7chuAK45LnEuqS7hLxjvUG+H779 - v9nAtsGRwmvDRcQfxPfFz8amx3zIUskmyfrKzcuezG7NPs4MztrPptBx0TvSBNLN05PU - WNUd1eDWotdi2CLY4dme2lrbFtvQ3IndQd353q/fZOAZ4M3hgOIy4uTjleRF5PblpeZU - 5wTns+hi6RHpwOpw6yDr0OyB7TLt5O6Y70zwAfC38W7yJ/Lh85z0WfUX9db2l/da+B34 - 4vmo+nD7OPwC/Mv9lv5h/y///wAAAVsC8wRbBdgHVgjSCkgLvg00DqsQIRGWExIUhBX7 - F24Y5BpUG8YdOh6sIBwhiiL6JGYl0Cc7KKIqCCttLM8uMi+RMO4yRjOfNPY2STebOOk6 - Njt+PMY+Cj9NQI5BzEMJRENFe0awR+VJGEpJS3hMpk3TTv1QJ1FRUnhTnVTCVedXClgt - WU9abluOXK1dy17oYAVhIWI7Y1ZkbmWHZp5ntWjLad9q82wHbRluKm87cEpxWHJmc3N0 - f3WKdpR3nHikeat6sXu3fLt9v37Bf8KAw4HDgsODwYS/hb2GuYe0iK+Jqoqli56Ml42Q - joiPf5B2kWySY5NZlE6VQ5Y4ly2YIpkWmgma/ZvwnOKd1J7Gn7igqqGbooyjfKRtpVym - TKc7qCqpGqoIqvar5KzSrb+urK+asIaxc7Jfs0u0N7Uitg22+bfjuM65uLqiu4y8db1e - vke/L8AXwP7B5sLNw7PEmcV+xmPHR8gryQ7J8crTy7TMlc10zlPPMtAQ0OzRyNKj037U - WNUw1gjW4Ne22IvZX9oz2wbb2Nyp3XneSd8X3+XgsuF+4knjFOPe5KflcOY35v7nxOiI - 6UzqEOrR65LsUu0R7c7uiu9F7/7wtfFq8h7y0POA9C702vWD9ir2z/dx+BL4r/lK+eT6 - evsQ+6L8NPzD/VH93/5q/vX/ev//AAABAwIsAz8EVQVoBn4HlgipCb0K1gvrDQIOFA8n - EDwRURJiE3UUhxWZFqsXuhjKGdka5xv2HQIeCh8WIB8hJSIrIy4kMCUxJjEnLigqKSYq - HSsTLAgs+i3rLtsvxzCyMZwyhTNsNFI1NjYXNvg32Di4OZU6cjtOPCo9BT3ePrg/kUBp - QUJCGkLyQ8pEokV6RlJHKkgCSNpJsUqKS2NMO00UTe1Oxk+gUHlRU1ItUwZT4FS5VZRW - bldIWCJY/FnWWrBbilxlXT1eF17xX8pgo2F8YlZjLmQHZN9lt2aOZ2ZoPWkUaetqwmuY - bG5tRG4Zbu5vxHCYcW1yQHMUc+h0u3WNdmB3MngEeNZ5qHp5e0p8G3zsfbx+jX9dgC6A - /oHPgp+DcIRBhRKF44a0h4eIWIkqif2K0YukjHiNTI4hjvaPzJCikXmSUJMolACU2ZWy - loyXZphBmRyZ+JrVm7Gcj51tnkufKqAKoOqhzKKto4+kcqVWpjqnH6gFqOup06q7q6Ss - jq15rmWvUrBAsS+yH7MRtAS0+LXutuW33bjXudO60LvQvNK91r7cv+XA8cH/wxDEJcU9 - xlnHeMicycTK88wlzV7OnM/g0SvSfdPV1TjWoNgR2YvbDdyX3izfyeFv4x/k1+aa6GTq - N+wR7fPv3fHN88X1w/e9+cD7yv3c//8AAG5kaW4AAAAAAAAGNgAAlxAAAFckAABTogAA - h5oAAChVAAAWqAAAUA0AAFQ5AAJZmQACXrgAAWZmAAMBAAACAAAAAgAFAAsAEgAbACYA - MgBAAE8AXwBxAIQAmQCvAMYA3gD4ARMBLwFNAWsBiwGsAc4B8gIXAj0CZAKMArYC4AMM - AzkDaAOXA8gD+gQtBGIEmATPBQcFQQV8BbgF9gY1BnUGtwb6Bz8HhQfNCBYIYQitCPsJ - SgmbCe4KQgqYCvALSQukDAEMYAzADSINhg3sDlMOvQ8oD5UQBBB0EOcRWxHREkoSxBM/ - E70UPRS+FUEVxxZOFtcXYhfuGH0ZDhmgGjUayxtkG/4cmx05HdkefB8gH8YgbyEaIcYi - dSMmI9kkjiVGJf8muyd5KDko/CnBKogrUiweLO0tvi6RL2cwPzEaMfgy2DO6NJ81hzZx - N144TTk/OjM7KjwjPR8+Hj8eQCJBKEIwQztESEVYRmpHfkiVSa9Ky0vpTQpOLk9UUH1R - qFLWVAZVOVZvV6dY4logW2Bco13pXzJgfWHLYxxkcGXHZyBofGncaz5so24Lb3Zw43JU - c8h1P3a5eDd5t3s7fMJ+TX/cgW6DBISehjyH3omEiy+M346TkE2SC5PPlZiXZ5k8mxac - 957eoMyiwKS7pryoxarUrOuvCLEts1i1irfDugO8Sb6UwOXDPMWXx/XKWMy8zyPRitPy - 1lrYwNsk3Ybf5uJC5Jvm8elD65Lt3/Ap8nD0tvb5+T/7g/3F//8AAAACAAUACwATABwA - JwAzAEEAUABhAHMAhwCcALIAygDjAP0BGQE1AVMBcwGTAbUB2AH8AiICSQJxApoCxALw - Ax0DSwN7A6sD3QQRBEUEewSyBOsFJQVgBZ0F2wYaBlsGnQbhBycHbge2CAAITAiZCOgJ - OQmLCeAKNQqNCucLQgufC/4MXwzBDSYNjA31Dl8Oyw85D6kQGxCPEQQRfBH2EnES7hNt - E+8UchT2FX0WBhaQFxwXqxg7GM0ZYRn3Go4bKBvDHGEdAB2iHkUe6x+SIDsg5yGVIkQi - 9iOqJGAlGCXTJpAnTygQKNMpmSphKywr+SzILZoubi9EMB0w+THXMrczmjR/NWc2UTc9 - OCw5HjoSOwg8ADz7Pfk++D/6QP5CBUMORBlFJkY2R0hIXElySopLpUzCTeFPA1AnUU1S - dVOfVMxV+1ctWGBZllrOXAldRV6EX8ZhCWJPY5dk4mYuZ31ozmoia3dsz24qb4Zw5XJG - c6p1EHZ4d+N5UHrAfDN9qH8fgJmCF4OWhRmGn4goibSLQ4zVjmuQBJGhk0GU5ZaNmDmZ - 6ZucnVSfEKDQopWkXqYrp/2p1KuvrY+vc7Fds0u1Prc1uTK7M706v0bBV8NuxYvHr8nZ - zArOQ9CE0s7VJNeE2fDcat7z4Y3kOOb26crss++z8sn19/ky/IL//wAAAAMACQATACAA - MABDAFgAcACLAKgAxwDpAQ0BNAFdAYgBtQHlAhcCSwKCAroC9QMzA3IDtAP4BD4EhwTT - BSAFcAXDBhgGcAbLBygHiAfrCFEIuQklCZQKBgp8CvQLcAvwDHMM+Q2DDhAOoQ82D84Q - aREIEasSURL6E6YUVhUJFb8WeBc0F/IYtBl4Gj8bCBvUHKMddB5HHx0f9SDQIawijCNt - JFElOCYhJwwn+SjqKdwq0SvJLMMtvy6/L8AwxTHMMtYz4jTxNgM3GDgwOUo6ZzuHPKo9 - zz74QCNBUkKDQ7dE7kYpR2ZIpknqSzBMek3GTxVQZ1G9UxRUb1XNVy1Yj1n0W1xcxV4x - X59hD2KAY/RlaWbfaFhp0WtMbMluR2/GcUZyx3RKdc53U3jZemB76H1xfvuAh4ITg6CF - L4a+iE6J3otwjQKOlZAokbyTUZTmlnuYEJmmmzyc0Z5nn/2hkqMnpLymUKfkqXarCKyZ - rimvuLFGstK0XLXkt2u477pxu/G9br7owF/B08NExLHGG8eByOLKQMuazO/OQc+O0NbS - G9Nb1JjVztcC2DHZXdqD26fcx93j3vzgEeEi4jHjPORF5UvmTedO6EvpR+pA6zjsLe0g - 7hLvAe/x8N3xyfKz8530hPVr9lD3Nfgd+QT56PrM+6/8kP1v/k7/Jv//AABkZXNjAAAA - AAAAAApDb2xvciBMQ0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAA - AAAPAAAADG5iTk8AAAASAAAAxHN2U0UAAAAQAAAA1mZpRkkAAAAQAAAA5mRhREsAAAAc - AAAA9npoQ04AAAAMAAABEmZyRlIAAAAWAAABHmphSlAAAAAOAAABNGVuVVMAAAASAAAB - QnB0QlIAAAAYAAABVGVzRVMAAAASAAABbHpoVFcAAAAOAAABfmtvS1IAAAAMAAABjGRl - REUAAAAQAAABmG5sTkwAAAAWAAABqGl0SVQAAAAUAAABvgBGAGEAcgBnAGUALQBMAEMA - RABGAOQAcgBnAC0ATABDAEQAVgDkAHIAaQAtAEwAQwBEAEwAQwBEAC0AZgBhAHIAdgBl - AHMAawDmAHIAbV9pgnIAIABMAEMARABMAEMARAAgAGMAbwB1AGwAZQB1AHIwqzDpMPwA - IABMAEMARABDAG8AbABvAHIAIABMAEMARABMAEMARAAgAGMAbwBsAG8AcgBpAGQAbwBM - AEMARAAgAGMAbwBsAG8Acl9pgnJtsmZ2mG95OlZozuy37AAgAEwAQwBEAEYAYQByAGIA - LQBMAEMARABLAGwAZQB1AHIAZQBuAC0ATABDAEQATABDAEQAIABjAG8AbABvAHIAaQAA - bW1vZAAAAAAAAAYQAACcXgAAAADAJqAAAAAAAAAAAAAAAAAAAAAAAHRleHQAAAAAQ29w - eXJpZ2h0IEFwcGxlLCBJbmMuLCAyMDA5AA== - - ReadOnly - NO - RowAlign - 1 - RowSpacing - 36 - SheetTitle - Canvas 1 - SmartAlignmentGuidesActive - YES - SmartDistanceGuidesActive - YES - UniqueID - 1 - UseEntirePage - - VPages - 1 - WindowInfo - - CurrentSheet - 0 - ExpandedCanvases - - FitInWindow - - Frame - {{66, 0}, {716, 778}} - ListView - - OutlineWidth - 142 - RightSidebar - - Sidebar - - SidebarWidth - 138 - VisibleRegion - {{-102.812, 1.09403}, {783.325, 731.906}} - Zoom - 0.91405183076858521 - ZoomValues - - - Canvas 1 - 0.0 - 1 - - - - saveQuickLookFiles - YES - - diff --git a/docs/storage.png b/docs/storage.png index 64bf13035ed24b6e013e61caef47cdb1a58aca19..f02d2852aeb33b5aa4abde0a50bf573bf2799f7f 100644 GIT binary patch literal 21786 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�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

libtorrent todo-list

-2 urgent +3 urgent 15 important -19 relevant +20 relevant 9 feasible -86 notes +88 notes
relevance 4../src/session_impl.cpp:480in order to support SSL over uTP, the utp_socket manager either needs to be able to receive packets on multiple ports, or we need to peek into the first few bytes the payload stream of a socket to determine whether or not it's an SSL connection. (The former is simpler but won't do as well with NATs)
relevance 4../src/torrent.cpp:9550this logic doesn't work for seeding torrents that are not ticked
relevance 4../src/kademlia/refresh.cpp:93when bootstrapping against our own IP completes, continue to issue another bootstrap against the deepest, non-full bucket. when it completes, issue a bootstrap against one bucket above it, and so on until the bootstrap lookup against the top level bucket (bucket 0) completes. That's when the bootstrap is done
relevance 3../src/disk_io_thread.cpp:242it would be nice to have the number of threads be set dynamically
relevance 3../src/disk_io_thread.cpp:242it would be nice to have the number of threads be set dynamically
relevance 3../src/peer_connection.cpp:1719we should probably use ses.m_allowed_upload_slots here instead to work with auto-unchoke logic
relevance 3../src/peer_connection.cpp:1729we should probably use ses.m_allowed_upload_slots here instead to work with auto-unchoke logic
relevance 3../src/peer_connection.cpp:3049since we throw away the queue entry once we issue the disk job, this may happen. Instead, we should keep the queue entry around, mark it as having been requested from disk and once the disk job comes back, discard it if it has been cancelled. Maybe even be able to cancel disk jobs?
relevance 3../src/peer_connection.cpp:3059since we throw away the queue entry once we issue the disk job, this may happen. Instead, we should keep the queue entry around, mark it as having been requested from disk and once the disk job comes back, discard it if it has been cancelled. Maybe even be able to cancel disk jobs?
relevance 3../src/peer_connection.cpp:4746instead of using settings_pack::request_timeout, use m_rtt.mean() + m_rtt.avg_deviation() * 2 or something like that. the configuration option could hopefully be removed
relevance 3../src/peer_connection.cpp:4756instead of using settings_pack::request_timeout, use m_rtt.mean() + m_rtt.avg_deviation() * 2 or something like that. the configuration option could hopefully be removed
relevance 3../src/piece_picker.cpp:3166it would be nice if this could be folded into lock_piece() the main distinction is that this also maintains the m_num_passed counter and the passed_hash_check member
relevance 3../src/piece_picker.cpp:3166it would be nice if this could be folded into lock_piece() the main distinction is that this also maintains the m_num_passed counter and the passed_hash_check member
relevance 3../src/resolver.cpp:39the first places to use this resolver is the http_connection/http_tracker_connection and udp_tracker_connection. make sure to prefer cache on shutdown
relevance 3../src/resolver.cpp:39the first places to use this resolver is the http_connection/http_tracker_connection and udp_tracker_connection. make sure to prefer cache on shutdown
relevance 3../src/session_impl.cpp:5697it would be really nice to update these counters as they are incremented. This depends on the session being ticked, which has a fairly coarse grained resolution
relevance 3../src/session_impl.cpp:5697it would be really nice to update these counters as they are incremented. This depends on the session being ticked, which has a fairly coarse grained resolution
relevance 3../src/session_impl.cpp:7156If socket jobs could be higher level, to include RC4 encryption and decryption, we would offload the main thread even more
relevance 3../src/session_impl.cpp:7156If socket jobs could be higher level, to include RC4 encryption and decryption, we would offload the main thread even more
relevance 3../src/torrent.cpp:1081if any other peer has a busy request to this block, we need to cancel it too
relevance 3../src/torrent.cpp:1083if any other peer has a busy request to this block, we need to cancel it too
relevance 3../src/torrent.cpp:7600if peer is a really good peer, maybe we shouldn't disconnect it
relevance 3../src/torrent.cpp:7594if peer is a really good peer, maybe we shouldn't disconnect it
relevance 3../src/web_peer_connection.cpp:586just make this peer not have the pieces associated with the file we just requested. Only when it doesn't have any of the file do the following
relevance 3../src/web_peer_connection.cpp:586just make this peer not have the pieces associated with the file we just requested. Only when it doesn't have any of the file do the following
relevance 3../include/libtorrent/block_cache.hpp:212could this be a scoped_array instead? does cached_piece_entry really need to be copyable? cached_piece_entry does need to be copyable since it's part of a container, but it's possible it could be a raw pointer or boost::unique_ptr perhaps
relevance 3../include/libtorrent/block_cache.hpp:212could this be a scoped_array instead? does cached_piece_entry really need to be copyable? cached_piece_entry does need to be copyable since it's part of a container, but it's possible it could be a raw pointer or boost::unique_ptr perhaps
relevance 3../include/libtorrent/disk_io_thread.hpp:537turn these counters and gauges into session_stats counters (which also would need to be thread safe)
relevance 3../include/libtorrent/disk_io_thread.hpp:537turn these counters and gauges into session_stats counters (which also would need to be thread safe)
relevance 3../include/libtorrent/policy.hpp:104this class should be renamed peer_list
relevance 3../include/libtorrent/policy.hpp:104this class should be renamed peer_list
relevance 3../include/libtorrent/session.hpp:210could the fingerprint be a setting as well? And should the settings_pack be optional?
relevance 3../include/libtorrent/session.hpp:210could the fingerprint be a setting as well? And should the settings_pack be optional?
relevance 2../src/disk_io_thread.cpp:844should this be allocated on the stack?
relevance 2../src/disk_io_thread.cpp:844should this be allocated on the stack?
relevance 2../src/disk_io_thread.cpp:885we're not flushing the read cache at all?
relevance 2../src/disk_io_thread.cpp:885we're not flushing the read cache at all?
relevance 2../src/file.cpp:1491use vm_copy here, if available, and if buffers are aligned
relevance 2../src/file.cpp:1491use vm_copy here, if available, and if buffers are aligned
relevance 2../src/file.cpp:1502use vm_copy here, if available, and if buffers are aligned
relevance 2../src/file.cpp:1502use vm_copy here, if available, and if buffers are aligned
relevance 2../src/session_impl.cpp:2568use bind_to_device in udp_socket
relevance 2../src/session_impl.cpp:2568use bind_to_device in udp_socket
relevance 2../src/session_impl.cpp:4596make a list for torrents that want to be announced on the DHT so we don't have to loop over all torrents, just to find the ones that want to announce
relevance 2../src/session_impl.cpp:4596make a list for torrents that want to be announced on the DHT so we don't have to loop over all torrents, just to find the ones that want to announce
relevance 2../src/torrent.cpp:699post alert
relevance 2../src/torrent.cpp:701post alert
relevance 2../src/torrent.cpp:4646abort lookups this torrent has made via the session host resolver interface
relevance 2../src/torrent.cpp:4648abort lookups this torrent has made via the session host resolver interface
relevance 2../src/udp_tracker_connection.cpp:64it would be nice to not have a dependency on session_impl here
relevance 2../src/web_peer_connection.cpp:645create a mapping of file-index to redirection URLs. Use that to form URLs instead. Support to reconnect to a new server without destructing this peer_connection
relevance 2../src/web_peer_connection.cpp:645create a mapping of file-index to redirection URLs. Use that to form URLs instead. Support to reconnect to a new server without destructing this peer_connection
relevance 2../src/kademlia/dos_blocker.cpp:68make these limits configurable
relevance 2../src/kademlia/node.cpp:67make this configurable in dht_settings
relevance 2../src/kademlia/node_id.cpp:133this could be optimized if SSE 4.2 is available. It could also be optimized given that we have a fixed length
relevance 2../src/kademlia/node_id.cpp:133this could be optimized if SSE 4.2 is available. It could also be optimized given that we have a fixed length
relevance 2../include/libtorrent/enum_net.hpp:137this could be done more efficiently by just looking up the interface with the given name, maybe even with if_nametoindex()
relevance 2../include/libtorrent/enum_net.hpp:137this could be done more efficiently by just looking up the interface with the given name, maybe even with if_nametoindex()
relevance 2../include/libtorrent/intrusive_ptr_base.hpp:44remove this class and transition over to using shared_ptr and make_shared instead
relevance 2../include/libtorrent/intrusive_ptr_base.hpp:44remove this class and transition over to using shared_ptr and make_shared instead
relevance 2../include/libtorrent/settings_pack.hpp:70add an API to query a settings_pack as well
relevance 2../include/libtorrent/settings_pack.hpp:71maybe convert all bool types into int-types as well
relevance 2../include/libtorrent/settings_pack.hpp:70add an API to query a settings_pack as well
relevance 2../include/libtorrent/settings_pack.hpp:71maybe convert all bool types into int-types as well
relevance 2../include/libtorrent/torrent.hpp:1184replace all usage of this with m_ses.get_resolver()
relevance 2../include/libtorrent/torrent.hpp:1188replace all usage of this with m_ses.get_resolver()
relevance 2../include/libtorrent/torrent_info.hpp:303there may be some opportunities to optimize the size if torrent_info. specifically to turn some std::string and std::vector into pointers
relevance 2../include/libtorrent/torrent_info.hpp:303there may be some opportunities to optimize the size if torrent_info. specifically to turn some std::string and std::vector into pointers
relevance 2../include/libtorrent/aux_/session_interface.hpp:108the IP voting mechanism should be factored out to its own class, not part of the session
relevance 2../include/libtorrent/aux_/session_interface.hpp:108the IP voting mechanism should be factored out to its own class, not part of the session
relevance 1../src/http_seed_connection.cpp:111in chunked encoding mode, this assert won't hold. the chunk headers should be subtracted from the receive_buffer_size
relevance 1../src/http_seed_connection.cpp:111in chunked encoding mode, this assert won't hold. the chunk headers should be subtracted from the receive_buffer_size
relevance 1../src/session_impl.cpp:6508report the proper address of the router as the source IP of this understanding of our external address, instead of the empty address
relevance 1../src/session_impl.cpp:6508report the proper address of the router as the source IP of this understanding of our external address, instead of the empty address
relevance 1../src/session_impl.cpp:7668we only need to do this if our global IPv4 address has changed since the DHT (currently) only supports IPv4. Since restarting the DHT is kind of expensive, it would be nice to not do it unnecessarily
relevance 1../src/session_impl.cpp:7668we only need to do this if our global IPv4 address has changed since the DHT (currently) only supports IPv4. Since restarting the DHT is kind of expensive, it would be nice to not do it unnecessarily
relevance 1../src/torrent.cpp:1140make this depend on the error and on the filesystem the files are being downloaded to. If the error is no_space_left_on_device and the filesystem doesn't support sparse files, only zero the priorities of the pieces that are at the tails of all files, leaving everything up to the highest written piece in each file
relevance 1../src/torrent.cpp:1142make this depend on the error and on the filesystem the files are being downloaded to. If the error is no_space_left_on_device and the filesystem doesn't support sparse files, only zero the priorities of the pieces that are at the tails of all files, leaving everything up to the highest written piece in each file
relevance 1../src/torrent.cpp:6780save the send_stats state instead of throwing them away it may pose an issue when downgrading though
relevance 1../src/torrent.cpp:6774save the send_stats state instead of throwing them away it may pose an issue when downgrading though
relevance 1../src/torrent.cpp:7846should disconnect all peers that have the pieces we have not just seeds. It would be pretty expensive to check all pieces for all peers though
relevance 1../src/torrent.cpp:7842should disconnect all peers that have the pieces we have not just seeds. It would be pretty expensive to check all pieces for all peers though
relevance 1../src/kademlia/node.cpp:827find_node should write directly to the response entry
relevance 1../include/libtorrent/ip_voter.hpp:122instead, have one instance per possible subnet, global IPv4, global IPv6, loopback, 192.168.x.x, 10.x.x.x, etc.
relevance 1../include/libtorrent/web_peer_connection.hpp:121if we make this be a disk_buffer_holder instead we would save a copy sometimes use allocate_disk_receive_buffer and release_disk_receive_buffer
relevance 0../src/block_cache.cpp:884it's somewhat expensive to iterate over this linked list. Presumably because of the random access of memory. It would be nice if pieces with no evictable blocks weren't in this list
relevance 0../src/block_cache.cpp:884it's somewhat expensive to iterate over this linked list. Presumably because of the random access of memory. It would be nice if pieces with no evictable blocks weren't in this list
relevance 0../src/block_cache.cpp:948this should probably only be done every n:th time
relevance 0../src/block_cache.cpp:1714create a holder for refcounts that automatically decrement
relevance 0../src/bt_peer_connection.cpp:646this could be optimized using knuth morris pratt
relevance 0../src/bt_peer_connection.cpp:646this could be optimized using knuth morris pratt
relevance 0../src/bt_peer_connection.cpp:2213if we're finished, send upload_only message
relevance 0../src/bt_peer_connection.cpp:2213if we're finished, send upload_only message
relevance 0../src/disk_io_thread.cpp:921instead of doing a lookup each time through the loop, save cached_piece_entry pointers with piece_refcount incremented to pin them
relevance 0../src/disk_io_thread.cpp:921instead of doing a lookup each time through the loop, save cached_piece_entry pointers with piece_refcount incremented to pin them
relevance 0../src/disk_io_thread.cpp:1132instead of doing this. pass in the settings to each storage_interface call. Each disk thread could hold its most recent understanding of the settings in a shared_ptr, and update it every time it wakes up from a job. That way each access to the settings won't require a mutex to be held.
relevance 0../src/disk_io_thread.cpp:1132instead of doing this. pass in the settings to each storage_interface call. Each disk thread could hold its most recent understanding of the settings in a shared_ptr, and update it every time it wakes up from a job. That way each access to the settings won't require a mutex to be held.
relevance 0../src/disk_io_thread.cpp:1157a potentially more efficient solution would be to have a special queue for retry jobs, that's only ever run when a job completes, in any thread. It would only work if m_outstanding_jobs > 0
relevance 0../src/disk_io_thread.cpp:1157a potentially more efficient solution would be to have a special queue for retry jobs, that's only ever run when a job completes, in any thread. It would only work if m_outstanding_jobs > 0
relevance 0../src/disk_io_thread.cpp:1171it should clear the hash state even when there's an error, right?
relevance 0../src/disk_io_thread.cpp:1171it should clear the hash state even when there's an error, right?
relevance 0../src/disk_io_thread.cpp:1866maybe the tailqueue_iterator should contain a pointer-pointer instead and have an unlink function
relevance 0../src/disk_io_thread.cpp:1866maybe the tailqueue_iterator should contain a pointer-pointer instead and have an unlink function
relevance 0../src/disk_io_thread.cpp:2121this is potentially very expensive. One way to solve it would be to have a fence for just this one piece.
relevance 0../src/disk_io_thread.cpp:2121this is potentially very expensive. One way to solve it would be to have a fence for just this one piece.
relevance 0../src/disk_io_thread.cpp:2382we should probably just hang the job on the piece and make sure the hasher gets kicked
relevance 0../src/disk_io_thread.cpp:2382we should probably just hang the job on the piece and make sure the hasher gets kicked
relevance 0../src/disk_io_thread.cpp:2452introduce a holder class that automatically increments and decrements the piece_refcount
relevance 0../src/disk_io_thread.cpp:2452introduce a holder class that automatically increments and decrements the piece_refcount
relevance 0../src/disk_io_thread.cpp:2692it would be nice to not have to lock the mutex every turn through this loop
relevance 0../src/disk_io_thread.cpp:2692it would be nice to not have to lock the mutex every turn through this loop
relevance 0../src/http_tracker_connection.cpp:96support authentication (i.e. user name and password) in the URL
relevance 0../src/metadata_transfer.cpp:359this is not safe. The torrent could be unloaded while we're still sending the metadata
relevance 0../src/metadata_transfer.cpp:359this is not safe. The torrent could be unloaded while we're still sending the metadata
relevance 0../src/packet_buffer.cpp:176use compare_less_wrap for this comparison as well
relevance 0../src/packet_buffer.cpp:176use compare_less_wrap for this comparison as well
relevance 0../src/part_file.cpp:252what do we do if someone is currently reading from the disk from this piece? does it matter? Since we won't actively erase the data from disk, but it may be overwritten soon, it's probably not that big of a deal
relevance 0../src/part_file.cpp:252what do we do if someone is currently reading from the disk from this piece? does it matter? Since we won't actively erase the data from disk, but it may be overwritten soon, it's probably not that big of a deal
relevance 0../src/part_file.cpp:344instead of rebuilding the whole file header and flushing it, update the slot entries as we go
relevance 0../src/peer_connection.cpp:1115this should be the global download rate
relevance 0../src/peer_connection.cpp:1115this should be the global download rate
relevance 0../src/peer_connection.cpp:3284sort the allowed fast set in priority order
relevance 0../src/peer_connection.cpp:3294sort the allowed fast set in priority order
relevance 0../src/piece_picker.cpp:2407when expanding pieces for cache stripe reasons, the !downloading condition doesn't make much sense
relevance 0../src/piece_picker.cpp:2407when expanding pieces for cache stripe reasons, the !downloading condition doesn't make much sense
relevance 0../src/session_impl.cpp:678there's no rule here to make uTP connections not have the global or local rate limits apply to it. This used to be the default.
relevance 0../src/session_impl.cpp:678there's no rule here to make uTP connections not have the global or local rate limits apply to it. This used to be the default.
relevance 0../src/session_impl.cpp:2384instead of having a special case for this, just make the default listen interfaces be "0.0.0.0:6881,[::1]:6881" and use the generic path. That would even allow for not listening at all.
relevance 0../src/session_impl.cpp:2384instead of having a special case for this, just make the default listen interfaces be "0.0.0.0:6881,[::1]:6881" and use the generic path. That would even allow for not listening at all.
relevance 0../src/session_impl.cpp:3225should this function take a shared_ptr instead?
relevance 0../src/session_impl.cpp:3225should this function take a shared_ptr instead?
relevance 0../src/session_impl.cpp:3600have a separate list for these connections, instead of having to loop through all of them
relevance 0../src/session_impl.cpp:3600have a separate list for these connections, instead of having to loop through all of them
relevance 0../src/session_impl.cpp:3641this should apply to all bandwidth channels
relevance 0../src/session_impl.cpp:3641this should apply to all bandwidth channels
relevance 0../src/session_impl.cpp:4704these vectors could be copied from m_torrent_lists, if we would maintain them. That way the first pass over all torrents could be avoided. It would be especially efficient if most torrents are not auto-managed whenever we receive a scrape response (or anything that may change the rank of a torrent) that one torrent could re-sort itself in a list that's kept sorted at all times. That way, this pass over all torrents could be avoided alltogether.
relevance 0../src/session_impl.cpp:4704these vectors could be copied from m_torrent_lists, if we would maintain them. That way the first pass over all torrents could be avoided. It would be especially efficient if most torrents are not auto-managed whenever we receive a scrape response (or anything that may change the rank of a torrent) that one torrent could re-sort itself in a list that's kept sorted at all times. That way, this pass over all torrents could be avoided alltogether.
relevance 0../src/session_impl.cpp:4779allow extensions to sort torrents for queuing
relevance 0../src/session_impl.cpp:4957use a lower limit than m_settings.connections_limit to allocate the to 10% or so of connection slots for incoming connections
relevance 0../src/session_impl.cpp:5119post a message to have this happen immediately instead of waiting for the next tick
relevance 0../src/session_impl.cpp:5153make configurable
relevance 0../src/session_impl.cpp:5153make configurable
relevance 0../src/session_impl.cpp:5167make configurable
relevance 0../src/session_impl.cpp:5167make configurable
relevance 0../src/session_impl.cpp:5246this should be called for all peers!
relevance 0../src/session_impl.cpp:5246this should be called for all peers!
relevance 0../src/session_impl.cpp:5663it might be a nice feature here to limit the number of torrents to send in a single update. By just posting the first n torrents, they would nicely be round-robined because the torrent lists are always pushed back
relevance 0../src/session_impl.cpp:5663it might be a nice feature here to limit the number of torrents to send in a single update. By just posting the first n torrents, they would nicely be round-robined because the torrent lists are always pushed back
relevance 0../src/storage.cpp:710make this more generic to not just work if files have been renamed, but also if they have been merged into a single file for instance maybe use the same format as .torrent files and reuse some code from torrent_info
relevance 0../src/storage.cpp:1006if everything moves OK, except for the partfile we currently won't update the save path, which breaks things. it would probably make more sense to give up on the partfile
relevance 0../src/storage.cpp:1006if everything moves OK, except for the partfile we currently won't update the save path, which breaks things. it would probably make more sense to give up on the partfile
relevance 0../src/torrent.cpp:489if the existing torrent doesn't have metadata, insert the metadata we just downloaded into it.
relevance 0../src/torrent.cpp:491if the existing torrent doesn't have metadata, insert the metadata we just downloaded into it.
relevance 0../src/torrent.cpp:639if the existing torrent doesn't have metadata, insert the metadata we just downloaded into it.
relevance 0../src/torrent.cpp:641if the existing torrent doesn't have metadata, insert the metadata we just downloaded into it.
relevance 0../src/torrent.cpp:1444is verify_peer_cert called once per certificate in the chain, and this function just tells us which depth we're at right now? If so, the comment makes sense. any certificate that isn't the leaf (i.e. the one presented by the peer) should be accepted automatically, given preverified is true. The leaf certificate need to be verified to make sure its DN matches the info-hash
relevance 0../src/torrent.cpp:1446is verify_peer_cert called once per certificate in the chain, and this function just tells us which depth we're at right now? If so, the comment makes sense. any certificate that isn't the leaf (i.e. the one presented by the peer) should be accepted automatically, given preverified is true. The leaf certificate need to be verified to make sure its DN matches the info-hash
relevance 0../src/torrent.cpp:1836instead of creating the picker up front here, maybe this whole section should move to need_picker()
relevance 0../src/torrent.cpp:1838instead of creating the picker up front here, maybe this whole section should move to need_picker()
relevance 0../src/torrent.cpp:2032there may be peer extensions relying on the torrent extension still being alive. Only do this if there are no peers. And when the last peer is disconnected, if the torrent is unloaded, clear the extensions m_extensions.clear();
relevance 0../src/torrent.cpp:2034there may be peer extensions relying on the torrent extension still being alive. Only do this if there are no peers. And when the last peer is disconnected, if the torrent is unloaded, clear the extensions m_extensions.clear();
relevance 0../src/torrent.cpp:2707this pattern is repeated in a few places. Factor this into a function and generalize the concept of a torrent having a dedicated listen port
relevance 0../src/torrent.cpp:3236instead, borrow host resolvers from a pool in session_impl. That would make the torrent object smaller
relevance 0../src/torrent.cpp:3238instead, borrow host resolvers from a pool in session_impl. That would make the torrent object smaller
relevance 0../src/torrent.cpp:4427update suggest_piece?
relevance 0../src/torrent.cpp:4429update suggest_piece?
relevance 0../src/torrent.cpp:4570really, we should just keep the picker around in this case to maintain the availability counters
relevance 0../src/torrent.cpp:4572really, we should just keep the picker around in this case to maintain the availability counters
relevance 0../src/torrent.cpp:6480make this more generic to not just work if files have been renamed, but also if they have been merged into a single file for instance maybe use the same format as .torrent files and reuse some code from torrent_info The mapped_files needs to be read both in the network thread and in the disk thread, since they both have their own mapped files structures which are kept in sync
relevance 0../src/torrent.cpp:6478make this more generic to not just work if files have been renamed, but also if they have been merged into a single file for instance maybe use the same format as .torrent files and reuse some code from torrent_info The mapped_files needs to be read both in the network thread and in the disk thread, since they both have their own mapped files structures which are kept in sync
relevance 0../src/torrent.cpp:6641if this is a merkle torrent and we can't restore the tree, we need to wipe all the bits in the have array, but not necessarily we might want to do a full check to see if we have all the pieces. This is low priority since almost no one uses merkle torrents
relevance 0../src/torrent.cpp:6837make this more generic to not just work if files have been renamed, but also if they have been merged into a single file for instance. using file_base
relevance 0../src/torrent.cpp:6831make this more generic to not just work if files have been renamed, but also if they have been merged into a single file for instance. using file_base
relevance 0../src/torrent.cpp:8790add a flag to ignore stats, and only care about resume data for content. For unchanged files, don't trigger a load of the metadata just to save an empty resume data file
relevance 0../src/torrent.cpp:9708go through the pieces we have and count the total number of downloaders we have. Only count peers that are interested in us since some peers might not send have messages for pieces we have it num_interested == 0, we need to pick a new piece
relevance 0../src/torrent.cpp:9758go through the pieces we have and count the total number of downloaders we have. Only count peers that are interested in us since some peers might not send have messages for pieces we have it num_interested == 0, we need to pick a new piece
relevance 0../src/torrent.cpp:10354instead of resorting the whole list, insert the peers directly into the right place
relevance 0../src/torrent.cpp:10404instead of resorting the whole list, insert the peers directly into the right place
relevance 0../src/torrent_peer.cpp:179how do we deal with our external address changing?
relevance 0../src/udp_socket.cpp:290it would be nice to detect this on posix systems also
relevance 0../src/udp_tracker_connection.cpp:554it would be more efficient to not use a string here. however, the problem is that some trackers will respond with actual strings. For example i2p trackers
relevance 0../src/udp_tracker_connection.cpp:554it would be more efficient to not use a string here. however, the problem is that some trackers will respond with actual strings. For example i2p trackers
relevance 0../src/upnp.cpp:72listen_interface is not used. It's meant to bind the broadcast socket
relevance 0../src/upnp.cpp:72listen_interface is not used. It's meant to bind the broadcast socket
relevance 0../src/ut_metadata.cpp:320we really need to increment the refcounter on the torrent while this buffer is still in the peer's send buffer
relevance 0../src/ut_metadata.cpp:320we really need to increment the refcounter on the torrent while this buffer is still in the peer's send buffer
relevance 0../src/utp_stream.cpp:1627this loop may not be very efficient
relevance 0../src/utp_stream.cpp:1627this loop may not be very efficient
relevance 0../src/web_connection_base.cpp:71introduce a web-seed default class which has a low download priority
relevance 0../src/web_connection_base.cpp:71introduce a web-seed default class which has a low download priority
relevance 0../src/kademlia/dht_tracker.cpp:428ideally this function would be called when the put completes
relevance 0../src/kademlia/dht_tracker.cpp:428ideally this function would be called when the put completes
relevance 0../src/kademlia/routing_table.cpp:308instad of refreshing a bucket by using find_nodes, ping each node periodically
relevance 0../include/libtorrent/bitfield.hpp:158rename to data() ?
relevance 0../include/libtorrent/bitfield.hpp:158rename to data() ?
relevance 0../include/libtorrent/block_cache.hpp:220make this 32 bits and to count seconds since the block cache was created
relevance 0../include/libtorrent/block_cache.hpp:220make this 32 bits and to count seconds since the block cache was created
relevance 0../include/libtorrent/config.hpp:339Make this count Unicode characters instead of bytes on windows
relevance 0../include/libtorrent/config.hpp:339Make this count Unicode characters instead of bytes on windows
relevance 0../include/libtorrent/debug.hpp:212rewrite this class to use FILE* instead and have a printf-like interface
relevance 0../include/libtorrent/debug.hpp:212rewrite this class to use FILE* instead and have a printf-like interface
relevance 0../include/libtorrent/disk_buffer_pool.hpp:133try to remove the observers, only using the async_allocate handlers
relevance 0../include/libtorrent/disk_buffer_pool.hpp:133try to remove the observers, only using the async_allocate handlers
relevance 0../include/libtorrent/peer_connection.hpp:217make this a raw pointer (to save size in the first cache line) and make the constructor take a raw pointer. torrent objects should always outlive their peers
relevance 0../include/libtorrent/peer_connection.hpp:217make this a raw pointer (to save size in the first cache line) and make the constructor take a raw pointer. torrent objects should always outlive their peers
relevance 0../include/libtorrent/peer_connection.hpp:1141factor this out into its own class with a virtual interface torrent and session should implement this interface
relevance 0../include/libtorrent/peer_connection.hpp:1141factor this out into its own class with a virtual interface torrent and session should implement this interface
relevance 0../include/libtorrent/peer_connection_interface.hpp:45make this interface smaller!
relevance 0../include/libtorrent/peer_connection_interface.hpp:45make this interface smaller!
relevance 0../include/libtorrent/performance_counters.hpp:132should keepalives be in here too? how about dont-have, share-mode, upload-only
relevance 0../include/libtorrent/performance_counters.hpp:132should keepalives be in here too? how about dont-have, share-mode, upload-only
relevance 0../include/libtorrent/performance_counters.hpp:404some space could be saved here by making gauges 32 bits
relevance 0../include/libtorrent/performance_counters.hpp:404some space could be saved here by making gauges 32 bits
relevance 0../include/libtorrent/piece_picker.hpp:669should this be allocated lazily?
relevance 0../include/libtorrent/piece_picker.hpp:669should this be allocated lazily?
relevance 0../include/libtorrent/proxy_base.hpp:166it would be nice to remember the bind port and bind once we know where the proxy is m_sock.bind(endpoint, ec);
relevance 0../include/libtorrent/proxy_base.hpp:166it would be nice to remember the bind port and bind once we know where the proxy is m_sock.bind(endpoint, ec);
relevance 0../include/libtorrent/session.hpp:856add get_peer_class_type_filter() as well
relevance 0../include/libtorrent/session.hpp:856add get_peer_class_type_filter() as well
relevance 0../include/libtorrent/settings_pack.hpp:1074deprecate this ``max_rejects`` is the number of piece requests we will reject in a row while a peer is choked before the peer is considered abusive and is disconnected.
relevance 0../include/libtorrent/settings_pack.hpp:1074deprecate this ``max_rejects`` is the number of piece requests we will reject in a row while a peer is choked before the peer is considered abusive and is disconnected.
relevance 0../include/libtorrent/size_type.hpp:48remove these and just use boost's types directly
relevance 0../include/libtorrent/size_type.hpp:48remove these and just use boost's types directly
relevance 0../include/libtorrent/torrent.hpp:1190this wastes 5 bits per file
relevance 0../include/libtorrent/torrent.hpp:1194this wastes 5 bits per file
relevance 0../include/libtorrent/torrent.hpp:1249These two bitfields should probably be coalesced into one
relevance 0../include/libtorrent/torrent.hpp:1253These two bitfields should probably be coalesced into one
relevance 0../include/libtorrent/torrent.hpp:1591there's space for 1 bits here
relevance 0../include/libtorrent/torrent.hpp:1571There are 8 bits free here
relevance 0../include/libtorrent/torrent.hpp:1587There are 8 bits here
relevance 0../include/libtorrent/torrent.hpp:1608there's space for 1 bits here
relevance 0../include/libtorrent/torrent_info.hpp:124include the number of peers received from this tracker, at last announce
relevance 0../include/libtorrent/torrent_info.hpp:124include the number of peers received from this tracker, at last announce
relevance 0../include/libtorrent/upnp.hpp:113support using the windows API for UPnP operations as well
relevance 0../include/libtorrent/upnp.hpp:113support using the windows API for UPnP operations as well
relevance 0../include/libtorrent/utp_stream.hpp:391implement blocking write. Low priority since it's not used (yet)
relevance 0../include/libtorrent/utp_stream.hpp:391implement blocking write. Low priority since it's not used (yet)
relevance 0../include/libtorrent/kademlia/item.hpp:61since this is a public function, it should probably be moved out of this header and into one with other public functions.
relevance 0../include/libtorrent/kademlia/item.hpp:61since this is a public function, it should probably be moved out of this header and into one with other public functions.
relevance 0../include/libtorrent/aux_/session_impl.hpp:412move the login info into the tracker_request object
relevance 0../include/libtorrent/aux_/session_impl.hpp:412move the login info into the tracker_request object
relevance 0../include/libtorrent/aux_/session_impl.hpp:900should this be renamed m_outgoing_interfaces?
relevance 0../include/libtorrent/aux_/session_impl.hpp:900should this be renamed m_outgoing_interfaces?
relevance 0../include/libtorrent/aux_/session_interface.hpp:200it would be nice to not have this be part of session_interface
relevance 0../include/libtorrent/aux_/session_interface.hpp:200it would be nice to not have this be part of session_interface