From 6fa88f4e4acdcfe122624bbb244dd9654ac8d4f0 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 14 Sep 2023 00:21:23 +0200 Subject: [PATCH] Updated manual --- docs/Reticulum Manual.epub | Bin 2487006 -> 2487172 bytes docs/Reticulum Manual.pdf | Bin 2390922 -> 2391061 bytes docs/manual/_sources/interfaces.rst.txt | 17 ++++++++++++++++- docs/manual/interfaces.html | 16 +++++++++++++++- docs/manual/searchindex.js | 2 +- 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index ff0759f2429e11504d2c13ccd728ec31e2123863..27d97aa764502e161fe6adee47b252f8a3a7d93b 100644 GIT binary patch delta 12581 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 diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 382946aaa44a2a664fea807bc2ac61f9919122fa..1b9a48dcccf534c63b4f1d0cdffb7d2fdd4b7cf0 100644 GIT binary patch delta 28137 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%0AUiLbaSif*!KP?M0zHLgL zL!+C%zu@1$@1v1I9E2_Z(k+L?!%Y6?PGKCQ7Y4&~@Bz`Q%dr4sVX!kMDM3HO9$`u+ zNzGYT0Gg$}r8qdEY8b2vV0(J{tLQYDrjrQWUrERHu$a#7?o1?w-QyxFH}lS~$O}4t z9YXUQL=;mMz7>UFS<#^rhd`%J?2?&3V!_W)R#<-TwG7sc%XR&-Vkq)oq~cSIAGF7s_zl?#N|x zk|DUdG4OG`70tpA02;)~A>yeQgKca+QEo(I3$KX?|B8O6qdE~KdPzKG`7Y=3vjp)u zFHB+_tf+BarlLEWO4N+{r4=@dL^aDns|;mV&}iU{5WKokdY8s42lXcm5n}2yUgOK= z$XwwnFy=-4%AL!4wl+M&NNEh7VWf7er%h{yMV@+iEgzNwU?$XS^qXCDJt8!0zxfRN z!Xka41>L*04k8(jPCc1V=ip0C<t*T z%F_*Y1mt*`nFFabul}*+L##WD@u$OpavGquzT&Owz&Aw6JgCJ`NR=; zeqQ;ePqgUjZ`in;#ShikJPI6Bi|lG+G38qsc&8ts-|EiH2OGx;364k04-H?P|bULh1J5XS<8?7&RDM~wXf|^ z1L;n+;lZ-WX*^2r=2Tz3b8Yn5pT(lczjoBvvttdq3Nw9wP)=B2pEy89GUB8apE`Ki zP?X@|?|3dP&dwc!R(7%mjs(p)V-mi&#i}_M@>!+Nkly}{&MOfkalnF=e8dotG2?$h z9308`h9l}05BzTgrOpcyV1lx9rlNEZ{3m~;oi^Bzf$wSz3&Q2;(2&3K28EHPow7M)d@QG-}ett=zqgH!(JnU7Q|EJU5m{K87oYS(sOdsgRkR zGM0{CksRU;H#C7Thnw9}9ddL4+kW_Jg3AY0 z8q#z)ml8*L+N);sf;AJu$82|YkUjP$iT+h>VqAN)fai{@jjqlqsTta@qKDG(qK^4W z_p#!WpEB0&87mzdHKN4Lx;ijWKZAVfC2eT#E0Y(k?BaN9Cnc6ufeb;(fKzN}dqrWt z!LEd5-yt#-aP7e0E5qbg;jcu$07#S$EWaRgcY?gWs2~QUC7M!|bZQX`WpH zf0tHI|1wmdZ6_%5?73sO5PC$lE-~&G5<F!VKC*^(~its3LD=P64bAvBadI-ywC_#E;ix3;ERC&0oRS`a@ zByY?l?c^&Y8J@mI3A)7tPwgU4nU;=$Z@L%e8+5FUmOQDBQ5DK4;FQ|0GIf#TqoBPO zT<#jQiA^4s|v zbJJHv?9}}UkS>u@0K;eyO;omnRl3Y$3wb;ihm(XmOMhkW>qYN8cA|mA zW5pZ;WwyXJVxu3!FnYTm%5UKDZZOI;G4rnAFwzGIk$pm6SRXz^c21_J6 zPrCS2fAlN@El5kIfI;IZ#v!1UznjvxIHyq$=(?lWQm z9Oy^Pvnx{WWH0D;FJ=Prp9c)v$;pQ{jey~)m|oDpHvGU&CJHIG|F)8NI7uxx3g&6u zuxal?cfWU=l?Kw5g}9;(g?P=68DS`d)m6g5MdwOj{XsItgF;H++q*sz$yd^la7a>_ zbp-XF5BdS7pfn-aIpX@2MMR>>5_G!Y1M5(gWcme-*iW*Ikp|%pw}rdX@q*Zvz7f}$ z5U&AXA@adC#U37=TXc>3(d%YF^itY!joN8Dw^Mh=UFOBcmD!VHW-HQ2mKEA@98C8{ zd*vMnlBcGe9`nu_+9oPVqtd0vKmzNEA0-iWix+?ZDt%>X+w6kww*m#)d{zK9!S$Bc z%r>z5JS3Qy+$SyU-6L_GqhbTe8IPVCNHZyT@acbUP_m&#lT+tZXlZy+o~c33YY_P3qC%D60unUWsv6VdeOtkec3DhoOS80%GYK>0up~L6U^#nV5(t)Y3^db zC2W;Ea8;0MA_}X}9siqoRA^89`OC=uIagL6dny$cKBOpB$XB3A5}GmeC`l- z-lMulLueVgQCCiIxw_t+D;Z-@N>!hxH~Wh+^oFrVy4+S8zGvPKZ-2NyKZkZ+Z#lMb zx`%Rvu_KkrpjxBmczz(;65LJIZn!yO*@P0~PSmeo29j)kf&KziX8v-U+-3u8l3%#< zUp&pJ8lQcWKVB1TY>z2M=o$_^6VngvDb(g4U-){xyk7mALQ0)s!p=uJ8QE7GuwLG zuV(`=bBUv2;@{S+GnpN^ zHm{o-3@#*xc29z5_ys>GKYUw}egm{(mlSBR?*>{p4K_Tmdg+=kM8Xj?lmIuvz69L) zEq%i!L$ofU&ZsNMowM7%s&HWi=p%~r`WecspD`Ac6`Bf2M+}}~WL^Nf*4P34cl&r= znJMro-g!(TdM9g~pVHg2tRghFF%y_mWgZ2HGuU{1{R5G}XrYMjRT8`vXTlW}^VY>AUri8YzSRZkjuZOF|3#qKH^ih(kng%ToeQxP}Pz?R-W) z*5%*Cx%-sR9Pk5|NT|5O^I;&%U3{kY9PS2jKi{?^8d9lC;d{4;ClJ>6F6q)Fph!Vc z_$*9TLoIfOcrwlho%UMISkGoz_g|UPz_#Vcb>kI(;C|u|sT2b0u~LI{5!u~S#B|ft zFHeV6LV^j*QVe>FFxJzLOI6{%Y2TAg)DMQB*ls^VbS{MX?-JqwMiXTj9~j4O9CYIi zYr%6*3Y3C&FFFC8b(*%#?}}OUUiJ0opmUn^TD$c=^|ALrR73EfVrtN?*QY)>W zMi&; zqEe@0F77Z(pjL>=<~}up0ko!dt;O;N@8u7OHaiW`(54K zqCczzqK#3$@#Hkpry2YJdV{Jz>6pC$n;nQc?{$Zc%=`ow#W**Wfm%T# zSHBuW5o>Y>Gca;VVmf-mgQ07x18g`>3e%Av1m~zKP#@s>SwE$Hl*UR@)G5ofj0aAj zwQ~K+7AthhnZZ83axewA%05MwQk>l{>mS`4t(T)rVupTSQrs+rcbSKUn2D?^otue{ z{;VSfJg6QVWcaJ>Z3%V6XbPh1*g@(0i@;%JPacm#?YJOJ4P&S^5WoY;uKvinT^#Ne zI8{CSo<=JCIGGgPkTRHE*DzpLSfm$(rT>#?7e$fbz`;KFHKd8`7eb^bjN!NXhM`Y; zwxQpStk-`~|ErE0)}2_tOJs}KL}N3MbtlGHF|5iD^kC2dL!% zr=Yx*WYriynNA}45W3??owfm@YVNaCEq9T>-5x>;&e03X+w5KnO@j#l7{>qE zYIHSY;M>08wMhCzb-=b2ft-Vhkuq%9D{{WV@t3tqdsYF3IdgQt^3ee=hfy30rcFe) zqK@RP%mZAT?FWO7b}b5=xv>FH%tX$dN_G2$Itj`dB$6(U8t)S*+TZ8t4-5)kCoe3} zOIy^%tgRPcZC1S!hmd5N@$+jy;0^9t4@?lhX=UHnJ#>B(dw-&8_uMf2gK=FH6xD5U z*`JJ8XwXpop^ih-JL>TQ_>-SUlG-|)Xd=vRaNzmRbObv3phkN-3yRKyMC7ri8b1gU zQH8vOCGgje#1MRpB5j3Q)S+&mpkkP-eL;S5mg=J(aew3uJ?7_;zrZa6sy&6*6fj)K za{jPrs3?obbabPFEQD7BmmP69c?$cC1?_a%oYV*+v+}HVsprJw+_Tm$2(=X22c=79 zjd-OYF!x5-dZxX3k$j5NM&-i`Wzh=u;(+3IqaGbTr6YO5 zBWgJqGJT)I(*jX%VpwugLtfTaodu^6`LoxK9W^25R(s1CLIiD#6%OQhY6jII*xxTA zCS5=kg*CC#(etG-6$;#Un0&z{`g7llCN716yy4TJS>?pG9!Gq@;ri=CS&7Z~QI#_r zPo7J^8<$qiWpsSE;7U_`#iO5FT0eJ(>TmI1k_7T!B5<%IDIu(6O@2~^>Tep)6=rJL z$P_4=0@riMrpeS{)?dMMkEjF^n{gU53ws)L9G)M6gBG$)zF=}Elb>!ewulyZWX$?ksA z1Ojn%hC`5icj(d0^%mb*F(@K6`|Tko8r7Y&e8>lsn}HZA!Ru9J;)VKD7H{co1(u29 zf}*}CRQx3oG8=3@{{02Ad9=!RfnxwLC-4Y>$laJ}+IR{;)-s+OmxVeLAEY=0ws_CC z^ffM7xN}QnS6}Ttr)0zF>x|@AbZo1v^uSM}NzW7_Y5I3j(nC1yF7J$~7Jb@W>TNve zLS2Kap_S*^h_?i}8x?a}ODe9dAC|$dir2~P_e+mO=tKt^`G5ocW%IfyB;RrFNVOeQ_?9csoV=({?6KtbMVskmgBDGjn8g|SZ}zx= z6Vv|eE4b)+ebILs%Jr74VCCi6EVFtw5`%p^P&Kef0U|1f_T2MUXDBrFBCb$<-T zA|BltWFc-F;WXPRm=_40fK;4!vt0gQ1Azrdgs94}U`_PfY@bi~VR?<9(`a-+HK?xzqlf?vXAL_LFGx z9m)25^dUE-etsG*G?TO8&c~23HF5R?54AC7h*lL2A3%s~PY|}a)1~PUK5F?NpTXJu zI6MVxzLyj*<<=g>MnRMJekxLFQKx32XbETzr(-n+3S*RuQFALZOncMof=hRUn^t}5 zL(F>d;H>@Srvap3InamceO7iY>0#gX8bvV~C{$?Ue%Nel2Yu~kzDjB**cw6Ly&Amx zT5Cl_JG*^NULU`a9)5#q7C6fN{~=Ez>wamn2fs4$LD>1H3`BH9VfQHs&-NkV{-C5srT8z!uo0jyY7QKB5MN zQ=_Z4duE5k59I0c$`z|5rfA^M>c&%(?1FO@?HXUuiNhQ_E7tVU=D$bKLfT_k-uGyX zzTbQ^a}Tmw`e+FU^t){M3?ucxXVPk=LcP9geDN5*GuL{oIeEi?VP4!^>rUklTl@OF zp6=GtBlYl#2xzxOsJ0jVMz~|p!=Fa_1wc^4X!>q~4J=x%-cqi;rTuQV+W*P|S~?&L z1fOFMo?4&WYKsG=K_{R4(HmRjK0+yyAoq|AW<`&U5n5{T5V%auewSW5(NXd>mG@lC z^~;@JMIQ700c>QnrC8wnh@97(F_ELB`V5UFzzw&otAx{GeOW z?4%;Y;--{AQvdghYk^IL?o0wCp9YHeh|KfLry?SNJVTV_WiVU9kRuJ}4}>XMdOGQS zxxrG2#mJF<*opaSu@(KHsts3D>w5=CO%hn`fwQ$NW!GXgD%i&Y3nMS(0+)Pb#Cqm9 zbFiI0>097gV8Det2KM}2o&>b@*I%~Y!3P(SIm%=S^_q5?Z>i!$x!9VyP=aKW&*ya@WYVevqBLo42iM09<8E|OPLA(&nng@(j3y!MQ)R)V1G9~lWi}^=iyt5bhpOA}jqu7^zktFr>c)kZ!akb?^TN1m;Y!ZAcrtMuI3WRX>6XwZZ;(h3 zf^Wni(N}G+q^IHAH%Uw9Ca?k}dAlLYlamU7If+KpJ3TIhqC$)xp_vU-7Fa7k8-gai zH`VQJ14y}>$%5WNjA8J7!>3ufH=#_qmqQ2UfVW{95{sCVMvGO-*mnZNod<(dzr!qs zmfNE4>1<(P+xYs0qH7+ zZ&s~-hZ_(B8$$VxVUO7o3h0Fg?t5Rr*s3{JQ2Oo~HS&|H@8b;{WdOw=n&+C92TEh2 zE4^|`hdmO`gLq=-utU>&_FrTn0*zN7iQ<~_KGHXOPv2^5w0kHS%0l#pzeVb-u{M6( zkg>R!sK8`7+SUY?pl+{MavPxD^0A-XX9O=;;o5waHt;EC`UV^>pd*MPqLO<6=&1&x zT_I7WJxFO__a1aFC0u$)V=T0Ih$j+=llp3>m{uqSz7aoi1au|N5|xSgyyNhCLt?(k zHqS@re0Git@7VBx5;GKD>()U?7||#)ln^9`83$YfiC_-efgOklHih9gb+8vKQ`bA_ zK}%y-T%}>Kg4{&B0itF-cnMf!546cs5_1^ncRprUxNV;bJZxqK6u>Yp)th8Q z^fQ{7Xqv*-Q%GSJ4>wy0f`g>Y=3p{q_kkni>(3B(*(P6nh_Bz~?;kP{ z(X&?UlrEw*iN~@I8DQ4MeYV=3Mug}lF9ywXc^3qsxz*6n$ZEv3W0Fmq>B8h$(&_Pg z&VXARuSw9(7FwgvdzvZ&exm_#fUnIzIk4ApKD0;pPb$I;e+ZF&-0*w2kMH>vhm^_% z;tybZe#F-ai>ZQZnC`@I{fx#g(#ZT=3Sbw$CZa$J*tXEj9!|#GaI_-yQ?Eifj-z%hT!QcYQ_t(FqO0hoYn{gz>i^y@NM1Q zqr4a~aCWbB4^B7SGm^>#l1Qfh;Y^CAg#brswB!cn7_+!>pF}T!&rb#@r}~8EJ)fF- zqc!@;bW$QQO?*8ULs+=CAX3^-uF|k{^It)bXAg#y+&KdNa!;t(;^YLHUP8OifM4zh*pabZl}VQBct7-28SE^ZD<>y;D?lELu`k7jrU zJ1-8jbuWe$|FtdLub*;hn`{#nX3BV3oDYgd3p``FEFxO8%QAHR(_n+?+<#Y22lkto z@nzHnQEb8rR&cW3Jlc>u=#gKZo|<`zw^q736x~lIm~+JeD$LhvPpuA=FvP<^@vmJ3 za3am9zB2q?k9wh>8}Cy_zu}B7<&P~%%^Y>{`7^PhNhx1$%9w$Iv&24LN7y@tpZZO- zArYoU+99Lu100EBpR+H1`<}y3;7P zQkq`b!xqT^Dp*9tE`6Xr8 zm+^_<)FMz)%+AdpQ!b7txxn1W&e9sNHqVsF9{%z4R6H}j&AtQfhriIW3;Kph6EOY) z1k-IfJAbc4r;2}hFLD*N^9g3bl=sq$rlTqP!(9{uQo=Ynw&|j2{H#hK*26rxHykI$ zOEtx%r{V(=ITjH!kb~gl3#7DyhTXg%rc6DaN;1B;_)?z@S}J=cL{P|zWxo^biMJ}Z zFM${25Xtvz7VpbF<=4!aU6jVGa7=8@R8=lzx?c-#7bNK5WWnU4;FiXznboC`t$~SD1@8|U7 zxD3H!{~Qra8mvLcJH=g?=(EFLP%UUQ^c9A(dIG!zAUy626kL4N(@VPeE3`9T2Nh;B7_ zWvt?p5T$&YC?mL_bttL+Cub<>Yxu9Q`{F@r83>(*`7bu4(g`_;O^D1hnU@keqB)=6 zRA~o(VjVXK`-Guss><$IgUG-j!33}_@Kd^hcW2xE`+|;~I)+u8r0>3hePMFaN^{9@ zOzkg^D!c8Djrpb&uE(-@wlbQ|R;=_Yi)|kd2M=7d5(yAsfqRD^bX$D!5W5|6jbh4_ zoladp=>vZr^MwBY=J_v%1Q=jUjEw)Q--k4$|1;1B&eYB-ApCKnRG2Aj9EE%$5;P?* zZ8k7p%(5_jG>=?tI^HfFr8-;62xe#4k(S;otWbYkiku2e^@I9ud*9gK43(2aPpX>S zqjC2}yyF;63?MCrCXnk(y%8jspDpvW9)7Zqx+nf1=W#y?sSOPa{k*{-=gS-bFd|g0 zfB81^KXZH$;%Zog|H>+^>RllhAGqZFxO-XH-2Qd#+Zic9M<7BW-tU+L<>K{xh((a4 z|5574tbp0KRBahZLcOyFo_qb}GjjT8AyL$xWP0zxLyq9@h*}MU?o;Z=FGhep2DAx?pDIEZshHO?A1r4Z@=!O#(j0ggO)C^e7@e7tz869TODv2*S=``O3pa zVkjr{$2Aj)P)G?OWizrEKo@?{zjec^EY>if5JvG4tGXGvfT(vql+eja!yy1d-QwB| z4uAmC&tI&v@4-yC@49VX&&p_^C%+r(LCVk3sl>7AS#w>EWj0dGJi+K0tFa#0#5$ul ziX>Tya8aAUP>5;NjuQ6@gwjuo-S9l(cl*DhI9MEktCzPltRCzFAoSykc5g9}Ilh%G z4*yM0I0>Nya*L96_m8bffl2(d8mc0?Uw!ecnCK!MOfOwIDmL}5!!v!r3C#+%XUDrP z1*^e^ew7LQ5%Q6OTG{4cuCPP*Ip2N9AHe4mXa;*%vk)Q(nFVg6 zU`nM_GgZ6#O-oP>2yrMp2OoMt+BO@@7YK=q+K~fomX;naXBHu9(QOb z9(NTnDCz+dXYlAXZq@pl+y}ie!POZv>;w_CqVghL2OSl#i{!b!pEK|Hy4hc3NgvIR zTQP2FDv`{6x* z-M8uRMR@A{39T=mnGhY>2mJxQ+*Nk_u`AjxTsGaV!(y?%tEyAcDEZ5>`;JOy)z*(X zL>j!cH%E_qvGs{`O4E1d6@>RMNZ^L!CRPycBOIG{`*TI1ICfs< z=kr?sS}}V*T!06O7HmEts6m8RzMHb>myK{3kj|`t;QU3s25Ipr;}s{8pK3o>|Au3V z54oSLA1ZhInaX42L8W^2;VTRq?SV7p(py3VaP4A0z-+n5xg-}J3B|h%1n?5BF zL!XkUrX?!1NF$3TFakL=NT@<7G5Kw^GF?2qX${b1#lSui35+D5he7dQ)}*)N;8!za z_&nkp1}SCZSXsm~j0<|j1p7dcE(lOcQ@c1jJ0}{(BualH9Vu4*Ioj#Uevd%?Ff)4s zkVp_o_mSuP_Lo^jG@BSWs2nh64<)kYaODr`j7xGYAh3SPBNVbTB$fhDvWS5)7kH1BhIFXmmT3YQRGzvX4jQrI~`6=&mZl1V&BS9d8RTqELGI{S zP|2QrCAc=PFxSsPCLmA?n-7>AEh;(ZIR8jh|-mTkciuw0!PG}iu zQ-sX3mbFHw`Lf4Ixqk!VRM7)y%}k=5wGNqY8`4*7uHDc+D)I6jmyHb+L2Y!$;L9+9 z93k?lA8EB~(Qod={JGA1zi~Jm++3w;wTDBMS<)e)ku|OBmefPtVYqIgR0KgCq`n0` z%}e7~5ctu4#nb|zD1wP>=oAu`$P2H{{cNRQt% zjv$VlqRD=*%0v>8yyMmvAAEy(!B$cHx6Ei=HY4B^NsY?{p#lv3`}Kt@jtab2dtd}U zG*Icu&P%P$AAr5&f2jd`Q)IhRU-&K}y@+M8!Hi8I%)~IJ+4W z6-T-o3`C=t1ChDOUEMP}J9!dzF$kUJ)A>o7~)*%&tr(mpUeWDc8h@5b@riKGgHLe(2OsWP8 zxfaEL@BFKr>W$QK1e!wlx2vom2&O zb^{udh8*hhb~J!^j<$|iZz=$Y4sM270B(&efdZi+px&#UYRbV7QG9@5qK;%EQ1=2> zlgC>ja#LHatbAb&iW^9H3k4ycUJqug;eAFE

M_Z%sBwkWxPg+lEY|9n2UcO3k3p zFH7>Xj|MQkq*3>K{R}CHfFS_u29Gfg{1#lgvLs}_pjp}WVF*Bzc+--xf1BbUjlD6oq@jVct6-Fv zuBlv?T*dzt@|Hn$JWm@a?i}1Tgy8P(8X&j_cY?d`!4uq_V8H?e2paSR4|;HScXzw| z{%_U2AMc0m>gjoUW_oLTWNUiK6?*>8kaLZUj#}?*R(r>Co$lmiW!}5C+h=RH%BB%+ zT|H*{t~$)Nj(FBpeKVwbo?2qr5wGklLytxt|9A4@hJ-^_DVr1_x_UTmkEu@7z_X^v zis{y#6ZraERK>hH9581DG+e(>MNhMHUv~SsPdXeB-b_3#xABS_H~YQ+Xw-BN!n&XF z0l(@~8Jn_>(sllZhX+nT_4Iru7gfsr;=`svCjUX};n-zsv}+ek7bY)BZTM%2jG>aREYe*PowNFuR^fQTR{!4iB*~*CcJ*1$B2U zE{jDyp3H_*OF4Dr`pMm#sobBgNjq`;1C8a(nQvRurKvFk)bKqeDd;YQ@~2RK&hHMb zZk9yE`UZOG@N-mG1B<`I2f+N=@wn9Jz1T@ycjnFi0E|p~jq_E1NA2A-_+yy} zSC*sWPuqAaNzaTpWhei#Z4hWspXaUn;1~F1<(SWVXr~I$)#lB%o*!-+nPJ&=taI$I zP{vqZ3LQPtU-XF@RYAwR{%NOD$8}k8{fjqRyH&sQU`K}p$S~ZdcK$eSrL`iGOp!}V zn#q)**=6=?s&@CozY9}$iqZ(MJLK!kezM#pRT${uL#cREkHqU#C|P_zE2x(>sMQ=R zstm-HfkHzO+aRAG-{-*oCpxq4J-RzZEqxB$fNU%dqhF~$n!7m#XMf)s?{wEw{j*cH zfs)76Nj~f>kPP97^djyTx_TwL{Y8I55r0!ql-yF@zbBV*!KrxY_gTujcMgfC@J6ho z4fRN8vA0y)y@=>boqm-w>E!{mR+@YInK4snp?2k3pb^83g;2c8b_LW^-pwHYyAnNV zgTX>#C_(e~TfW$;5ml1CNSWyT#=TX(*e9Y+Z$PvQ$V=iE(EB0?nQ1%6lK-xFVI4SI z>69qcWc}oEd(DAw0fl8_(h<)2VbOJ#vqY7@A_j>lY0RT(h>Y>f{Xs<$UQl|9BrMj@ z4P7Bz>JjkF&n!F$pM%HDg~7xMkDv$3ks9rHmvhsost=Tv3WsrZB!r9XA4L?fmOhLs z;fbdJ+&NgTEhj)|-Lld0m~$9v+;?Rcp8DX#T!F#Xl|unvG~EkLT@7NY3mIwG!tx49 zo1;L8od{1cauyFZsh4WOKj{L&7s?Ycn}h(yWa?jv!v>muk`g10`MD^xP#Mk7Ozms!%K{3X~FoZ$FmcCCO1F8&$JxH}F;~ z|Je-uKoOmI-!@mkSQGG__Sjr#KN)%)a5)6Lw9YloRTzCfO=~rDZ}@Do9?6;&b$^(C zf4uyAJ}Zx~qW3tU{4_{Zo~o zbTG!oq)^4&b4(`l9-(5BN5`Au)xq^l*2>$2Jft5J3$n@YCb;17zcn>7v5xYMsNRVB zjo!TxO;cjs`>nWir~xfgQ=Swp8!VuIXHE^~#)NQ!wsH!jlo=#2`#4etu>|CMGT`zB z`0v1SV8O!vm~eDBqkmB6&kD5YFNAW40K9jw35VC7m*sn6g=91ob8-f)FlNvM_7}=d z%pUBoDSvbCU<#3><0oJ-Ply$EDL4B$Q@SDI9Qb9)7+5gD*u!hsp1AKMcmSrKOA_w1 z8fR4`Ox4unp48)mc;O*oIM~+2R$U<|1jCY=snTd?4v>o!L)|{$pGgm;hGnSP3UVN#^R=|v-~xAi(eV0y`P)@gB$)93QuT!7N(NcC4g;^$!W(&&vF3j9-8Q6;T}BFL7tfG{iJ z7L|uUwo2!+a%ow}oz_E4{%tTacDK{^w(I)HOAC!X)thatY zM0oLYmFIg3-N|JC6-ql-EdGBjbiG`mM zy$4qozQ@PXvq1UaRa-yBPAL13c?Yoyy@%Ychj9R6(*2&W5wv%tl3{OSF@x%bt$^GlVjOXpqT382uvoE?uHI(W2-gbW0Vpg ze3til_<1iS$|4lcoajp#Vvh!X((5)a%6eG8kM1sgB#GwlJ!;%j(aJzORSb9M$eHch zs-F-BY92fY-v8CoE&OOwE*o(xJ&v#;O1l?{%}JD+!a|qceUHi7VG~N*>?*GzFFwdK5^yI4cUt%VAW2Vj_9?tF#vdL&97HxthK$5lQQhq z2mx;;x$zs1R*1d+&S8rhx^$%;qEFydY{)PwfeQk9g>TD(x%7VSU2M9ANko0 z=+Gc;tOxM5-F;>W!I}`*=%5tG7BETcb`>=rRPdE}e}a-|VCx|#gA#glp^|gVcd%GG zHumE4urVG2h?}qom2`j}G3)6^T#r96u|`ejR#c2`_jyf)XMGV}U23p${3Uq1;f_$L z^D7i{lR+T_r2c z)k#w+JG&BfS7Mf6v`ht|o>Cg*AV&Axv4 ztNn0jD<*`zeG)+=Ycl1)Gw&DZcXo4sNX+YBy18z7UcGi^LM-n8LXV&}~U;InXEL_Crp!NAvr^<${@2q3q zYT5h=Rc?FW{l$32`0>445LbI3zb5yinZqg9rZ!z!#hTJ>cgt0q)X?JY zwBqQf#QbRC#@QZbBYCiQ@DuFthhb-{XiJ+fk5Z;vWi0F~%J-c!nK=<6vRy%uL@q0_ zM7pNH17N2!ee@nxS1q%~Q3f&W3044Yo7$;d})T0Tc5&Po=tz8T*gl7`?9t zrmsQyM1Nsj6>rKjiLe8QE@cIJqZ7R1BQN1jdA!oU=;ObVME#Y=lCQgm3r%HENGdYh z-g@41bLH*_R37e*viBEJ0hl0tY*rzz2GyeL!1aiaUPd1nnVHrV%aiPW_B5%Lca$zd z2b}X09~nun9R_}VvAJ*YYTj*`h(kA49~-!H0oC16?efMpL2p-b2P0;FP@LsWTzdR^dyeZsx{ zd_5~pG5@Tcp`0^oP17@T4^(cok#5HEq+W|Bc1q<2Uy;6YS|_>9^GO{kv)@-QJtpE-!tDEA_^hMOav%?AB zEE3B%MJOCaqCD7+KvI@dOaFSbirrJg4t|8K4C9*M;Tj6Mo>Sljta4ClN(f|!^|!~f zhWFI>>Jm+IKJ;DMCdLnuETPRAe@$1n$TPhVqEKo1&T>&(?#M{nB@y7E?PI}(rA+!m z4;(yijBSI8M+{i@adD>!VQK}*l^e;FJH(6@DqH7t!6Dse>IG3UFn##Q$P|ue!?wBe zTRCq;X}rsqc0~hURkF`41(^veiBm+IhB(7W#%fH$St0a@Pa}dk+iU zF1{Yo6zJ&wCKMW)@*+~F3lAS)!{sxny^k6)5NL=lJEB>yI}rQ(L313ly6{Kvs$|NR zV#qLC(!4BJtHMrL!o(2`Q>#LW!D#VFD0$8VeFgraY|3C?895cxkQSYO@o(jAespwo zykgDSO0=H0S_wVw5DC z>z{SS?=lLh?^Tuzn**B|a&0i|?4bQfAuh5ump|wL6>J?(zf`sg6hn)9zdywBbOXGV zSqcU|n^}xc%``b5f&*lQ3}VoqTtBt7V|81~+vyq5QH@1auis)%%WBaOF}v-2*}A`1 zi0$09)!^3EI5a-^u~4xgoYk}FQ=UY0x?X&7#e88u8*OD=KI3sQ!E5~cpOUZUMN)g4 zPq^+3;1)ZJ=D7U;)$!%0J-0v4ar?DZ?C<-JlzpX7DYeb7wn_V_F6~R($0JAf8=YC7 z1~X@+|HQ_KcE|3Ow7G2KBNa^l#fWysTK@LAY|@)XOn*&tXTRE6-Xj&Vo01-5Z_~W8 zMd-|jg_h2g0Ryy)gJ0(5HcTdM1|4VpuwMWvrKU38CQC;35_@jF)Ht=4^p+iz zs_{b@!!xx9dvz9-!8L9%6~gIe?-yenM`N5~-R9$MZ6&PnG)k*d?KUDuV`jOwDq^)% zN8MWEBYjN&m59LkuxTdfg6}udYQ7`)JUQda$n;@<$3$I2ytF^6r`^!{%a2oqu?Fc= zh5UIF&YErt+P8U1q84I`M(lDJ;V(qAAHOL5-{-_kHCjbfWF8I^b z1Jq26JvE|6R2TO_mfO>b+9s+|f8Yu)nynCJ$}M#zQU<*cWm3n(;1-9j`&P=CE8q*) z42sYaLJUU)oz(so%gF+=f44vRn*Uw?|27qM~o!Aq-0R2sjZ+V{md z^~(OGdlHK(Z}s&-zx}a*Pjr4jJ-#ti*Joh@Y8SwM_yI95O$-*Qb6BVTX} z=`}#UIZCWZ+$Zv~249&6Nd6LM`#uu`_lFZcmXFV2O$r}SwaER<=Y&}hjiT>;zV~?;DbxQBVfhn;vnFs?Z3p1^*{04HY zZP&4@|HU)8ZL+zIKfZGpC|H)>agiE|99|D=#Olqo-Y?tY(ga6<96?oOaQw$`M7h*l zsWdHsq~*z5@{M{{6PnSxk4W?xikCVCozix>e934_ZRnqQA_j7zZ9(c;w+NUtT#s-#KJ-k}M+>by}-*6v+xw|a^!5=H4KejyQ<>x75mvvG9()W$+{UPt(wpgJH(9xM6H2AtDrv_CahWdks@D3 z3>Pu5nWj*%JbG zI4$%)jGIwcP|l+(6Qdpz6F2x1+hFskO74};j4^UsRJ0kU$asDqT3Z*3W@V;c*_zVd zXL=$oFn2x2Ij;uMWu&L4-G#BW$)PVP;6Qd+90R3TKUCI)ifXXdrPrX^C#zH2+pJA- z^$RL}@Km0*NR>-GaNp!bcNwcV)RG2@tl5LPKU*I7>)K)O|KRItEhVf|sPK<0Poy)? z9P#1{aMPaTk??!K4UoY_Pqd*ZG-tY~(Ax3iPM5J~smjI);be^RQ1lNiDsj%A{fcVI zVVy`CBl`odFKju(zLtq#u{31Qvv29Qq}UW(MmxgyMOdEewhFzACyyOnMmH58r#NZ5 zbjUpQW0JSE(Z6#ik|NBwtd3wdZ?g7(k_0IS?LQ`xi-o!_QTz4;vn9C(r*Veim8kED&64(RWxrs(p-E_gw_IWq!*$%vhyG%(Zrpw zm^&aJ9l1C?Am2fb%lxtVKh{E?Bz;rgGEo&b>SVEoSrO=LW7?A1lgXa?F*pG^z9l{= zLbH#(ucwaN2=wio%?R|5uy2{L#F&5V)W|?!I3bBMT&Y+w;@7z)C)5Z;K(fJHW>67$ z3c98m6QA+6pRqGD2Bix|mOsy}YHR*DFWQ(DfS!W>-AU&0*BT_yJtbUHo$lbzJc_{M}=|Afv5%1Q1gV=ynr zY&7PlqX)iR6^wc{jV-iXWxqb(c!<0_FZX+kcfRgVZ+6-nCn{FmJ|3J`h>N{EJ$=Db z$7={3TMpv1tA4tCj#rI;y+4~OmA>n3J5lc`ZPvF{^nyuw0fZ~y+^ovk=qS_^evE?#aP8BPIS9!_pv9%&g4 zIYAj2ehwKqL4FzPlefxHeR+P@O z5*a8rMlX_NG^S+F@fj1DlY|()70P@oWY8drnp06{i7{r2L3&QASD5Jf6^d`?*Q_x4 zgQV0hQ2>wUWE+36X9Qm%M&N|1f!pfKEm*xYF1y)P(;L8gy*FFg&Cbouz4f)}yv;rr z8S|eNss1-wV>%lUO+d~^sDkOLp*y>ffNY$bn zk&pSzCd5Xeq`B4qQ@m|=Du^ce1<48~^>=W23 z+fdtC)Y}lgdJEf%u;YCAV}S+Uu1_^sjtIw0W<&!8BS3x?b_8|27uqqJ8ULPSYfPi^ z9Qp$^ZJZ77CiK~McAO1|5(atPsmO?y946E@+g2$|dJTIaupT|EdyQiOzWy>y9x|?c z|KM-CixMBaX*+nT--Y7>r*i*hfM{VGYl|MXX$n_`>iFFSSGnL=R#@5xSGnj|ni+c( ztZ6$4+>@`{aYWC=@+p-C!x@NYd5uf%j^7mJ(oCVU7BY4UwFM0e))(1MhP7Z5LFL9h z>|4GPjrT!IP*TA|wwksN`X5&a>L+dS!ahD}*X#2b;bvMBI8r*ss715}dx2EaHLcsf zc~KrC6vPCfALC|e6wv&M^&&VHC_r;SKSs&|CdxM2q8lT;QqCxwgh z8(kCY*{pGp_I|g7TC$0xs2wSOSRh<@Clw{i_*h(+A=wR}_I{r#oG!w|)i_clRN+T# z%T_!3$Hqf-O#QC+J5M2^?VVV`T(Wijvh5=(<4uqJBxZP)BEyX(f0pv3yh1H~m2C?n zpyvG6OnpJF#NoRibIBl{%wPkRHw@K+V!g;)Gh0xtxhY?ot#Qi;@&XVvl#YAP;^9K9 zUba3kOz8aCmT3Gc^Kn7T^Ep6O*WxmQ-!& zi0w$2mc^SeSgfJ+fgay~A#O(DZRl^1><$OX|Ad9m#^?ldRfd~-B9*klx&N9`5m)*j zMkt0(SmWr;zk?E!|I_>=16L~l&zwwx_su;u;HW$xpDX`Avs5gmx5pG_uA1teiv3n~ zw69-}@gL@BA2(|-{=Y7?R@UML3;qMM0*2R(2kHMQJqV7){txEJ6TY2$Y_V;=`s%+e zt<9#x?LssnfmDTa3^GG3lR1=Mq^X3PwzaU$4&%)yJjPvc>;i-mWEZ6tsVkAUQ?%2( zik4{{U}9|}p);u265I=(_1R&p5c$^NMmb{evhCYd8I)VF4$t%6VVJ)p*@98Mc9$14 z*o*3z)Qp}X-EumB@c+V!LelUZh9srRu3LBwS&FDW0oekV8T+1eg>0*g z4-C1Ca5&(V=mLXLXe4JyLk<@Sy;@|$28DLpK2YqU#>0T97}EbQs(kC~!rreT7*H+H ztTRwI{33J=b|F^=D_&*+O%8dcg)uYnDdXxF!~%B4b0t-bVvR)g!D96!9FE2>^z}n_ z9Oyd|usN`o5+>#DyDhqT<(Fj6 zZ9RQ`%Jh3}f?G(S8e5KX@VrX_S{cu$RABsa0>kpIog#m-EmM~lLf)(fpK(uk0CTx4 zC2E>xXbUs!h^_)AaV$XOh=2QW?EDuqEYnegIrNNj!UfpNNhx|$9fLi%VOjKdrbvLn z9@4NddOLXDx`2wKpM@M|m<1gkd~a!n!V%4a0lyO${(g-?04Xl?ZBmH|;p6~)3Q<(E zTUk%{^+@)K55Z!pNhuX~HRBZn_C^2*1`ygdx(fV4DS_pv&k{ zcftLCs>Dm%nWHAE$#WMOnVa{&sou)HN8GwRKLJIi5B~!W_{xkH@z#xXmOt~&sdnme z19lf=%bbrFhNSH_neia|na{91?A8<6BN@-jowoUCQ=vk2&ee(*pd2f%>}9K)4f-Fv zV3_)hV#kSqj+}4SURb6rS<8+$3y(YtgAAHIEbcRvH(&VuH|=7*xCXblnZvBbpQtby zb{}4?KIVwR_>HVQ`^R$ej(~zg)5`rdfCU(0BxR<$e#pC_yGv40I5~)bfK%q^GwE8q zm0_MJDjmyY(eyV`gpybTR&L+5}_QO!+5v>Gf zc1!IS(|ImKX;Qs)o(x`_Y56LHo%Tl_7m6iVvb6i~T$Zw`7Gz3rYuY_zRNI0S(5C$- zJI0j<)g>HhSiTPu>Z7e}@MKU4=8KP%zMjW9r)Fw%M-j1^^1wTBtituxM3k}EIZN@3c? zbTRfZyFM!q$Y*skCU1(0dqmqOisC`(C8_Xj)?Of~0AvZ&EK5vimwQ8|pN6Xy4Qn1w zpDJu(#ci)D%lA8f+_8`6kMlUUiMcBoM13CmJpO7(ak@6hFXkYTfF|Nl*0}u_|05f1R6%U zPsD7C-D*-2MVfz942V+FI6-D)Q~biB8>p1GmX_EEmK$mi`GCn^yo9E)>PFE*%Gea+ z!M?_p&}i`MmIQMx2|pe9k@4=hekuP%!Hx(5XSd?k&sXf}uCvA8i^I5`bYtjrQAfH> zmuw!b)rz6-iZJf|oMXkNa z@AxN@GL5hMk7=D&I~6}ziz08~kKmB#h1qd`EKNJYsNqTaN!#>7CsdiDROBm08x?>~!AzSD0rOUOmG!|Bv1YTKj!)`=Ue7 z>oN6@^&&`2V4FWSUKP`WdUr3S_1f@EthcHC_&Ts}$FMa26aR?=nA{0-yt1aHS@Ggv zq|t3+!z-!ik+es^+8CbI6bpsrHWx^i`%{ zDF|bDK#K@Zf~2#8woy4iax6yyy6{Cge^CrIO}o0jQvr6SxWnLNLeSCY<+q9SlfI9K z-h!PA(y+e3i=rK34ayFy2rsQ8Yz{mTL?3;3bpql$DpBf1!lK_iRTvy?ipXNPY9dFy!Ww)=v!X>P(;z zQ3Hc};50ZqzCBFmf~B*$fHmu0WBwbJpXNJ4RCi*>sJ(>_Z{_3Lz535GDV!zJ4I8kGPDx9{!8qlbl z)#7%fw_vmGUj4Bmh_XZDLD>ct3p$Nd-*B;8?FbU|CPYz=-MhPD87pYt9+> z9e>ygfy-xbL-sv9m>~Ne7LqmmL`?kqY58^1Ci1Vk3kEsz+t!2_5zmw`#_*+J_o`Nr z1MyRc9S8iU;7OL5y)ZOW)M5RX#Qv*!Zc|DYu&fJV4*c$4#9!rc0jR)dq@gu5J=iA6 zdG`31RFEIRXZQ+J%q4`wH9`nZt=9^iH^j&VYsp3nb-DiO@vxqX?HhMK+*&NLb5F** zJ`C5H3zKJ6ueg6f${Q9rc*#vZ>Dzfv`Er3^Eb{>D%}`>ho;zx~bIxz^iUBc^=0|uI z!FMRsp|0uMz;0PwBne$zkMmib#(ml+=Yv`pXYpC+G$@aN-I;V%d`(|tgu!5KOITOxG3 zoPzQHd;{W?4}F?x>6~j@;?UDxyL3IbqG70d^r-vbI0?W0^93q%OxZtll%qPnc+^B&KO54+_kPYC`SP zB~YkZLrFFT?}P?hm!FSXqd>v~Z?IsBmCp&%3&vQ0Wp;x-c5%T@aYkFUpO(}|Ms1M* z)zIK_w4&+(%@}?#hbw=BTwuuI;nQ9tbv?k690+=?poqU_5DnLSL_NO(38l&>6$F+_ zq_>ltG900DXtF6O$1|oLGDz#F&J=_XA>qIxgwU*sQ&TU)UM7KYvC<&2kfZdi9A7Ph zd)A5MZz$%yEmso*XA#|GAZG_= zZsHy@>_|y+r1_i5>a!dnv$~T7`G(Zmla=&(ZL{T4D%*;Q7U$>4#-Ejs>~!_oj?3ac z3WmHhns-@^_Eq#jQih&0!tOeT`iIYxK(6YP;c1gtX_e8;4PJ$;p$xSc5=>>CCOwSQDfE&g>9>kTqv9Z+;yfMW;^j=!L_s>^m4vpc zn(t~CJC$isGVCf${J&>32)uS4eVN#);a!{Q`fP|$0-}ict#AGTKg>$gneX2&U^n>Z zDx8nU$z|ozn>aSNRv+pSU$rI^DcbQO|wANjLSUrAFfvDXq+wr$%^I<}1!+qSKaZQEXP(s9zU@%4V6lRZXVf1nQPp0jFJ z>PsSM)N>+ey)ZHAv^oQuHEXS*FVK#@7u2jmPoznexCk*Fbd8XviHMO062Sk<1#&+i zIr<2BD^L6=~hDz0kxh&qQ;87K5MVZ(@Eg1P!-k)IW>2`K3((H ziin8wXI)5Xyw!Q*pU&Q|KmlNg3xow_{QaD2qnI;|_x16d7g5EYqpI&YL3lpyKi>E~ z(rYF4_@@K1%=_;df9aOqix>WNoz%)a@1nUhrV#7d^#EC%*E@SIr+4+z!r!~3W(x0kNVh6NN#qg63P&toF zDZ=Efr4lN#CDV=hjcahTyiAOvJtXn4>sOkC zF8S8_SxyVpI-xWFE;G{}h?hZu(M=+wU3VYqg|iG3;T(tns7?{!)>Cu3qN-LC;Gy$N!x>fZuhGQ?1QA+*mf!YdD4gc z3K~PJ)bWPU*F3x*_d`mrY?o>R(&9uEan6-C4ZWGiTQ6jnDE<>)8OK$PMzPzGts%#e ztF)yBc*-K~1!YyILO$Q!xB(I6GAM)g=PZ(#`NuDJ@~HY2&1 zPIl;GH_7)v11zs$q#_LpCw~5V_06Xd;#NB|2^(N2FN+gE(gvO$i^7Oi981d^``h6| zPlt$}SXB&SL;SYNI3h~v+?$FYA3Xp%E^J1Wu>DkOE24L4&zuL{z6_Gka#$WHED%Vw zAp?HGns8Slu5e;?ELP^TVx(bm{M&;xI7fP%xNK6~p?pAOx&-H%AMVGd^#Sa}| z{o?A3z}x6km+E9Ns_&{@65yxItE(oG`OJ9KXWORM5rsP zs`AxQce$#ul$#UIbo6HT3;g-|jsv!rsgh%%ZVN59i*EkRYn^?3l<>}Yu8b($OPfex z8?*+XN~&5241W$vrJhmqQ%%9`HB&}h&#ljPwUB(Ir7Eq5F7h~uEC*MCbwN_<<;}kb z3Np^#C};W(z;}|rYc%ooUP(60BPA49{WbjN0y)>%0l#h4KTNfG+TYG||Cw=abn8RK zd8;Tj5#Hbcs=H~Ib)!ziI<8uEHzpj>vX}>eWoCMaaJ-VV`HJ_7Ypc0DL_aNmv8|=a zXCA=qc-)<@M*@ilXu{^fcJ4Jur8Q`gYTC(2BvX`&LhVt2g-N9X7U<*=cg6R5-l5kq z^s*t;A2lL=PZsqW;JD|X4yWNBK##E)54g86$?7<1I5k1a#$b2@#T|xINY5Nn%pn0r z#wjvJ^Pr}-8VbKRlEwSSD9!YmW9X>Y91{tNcx`zWJFx|l(&Fh!h6n_bdTe=;=(FM} z!9~I(%@TsN!9LWENaB;A1v2d%Z50%q5*e2+I!y%yt1=*z8$Li6X8z)+EPK;0hWz2v zFJt~=RcOazW+K;JiiLiwDOZlVwZ zk7VVVYGi)1_s%^i+$}|){N0hiMR|O1TK4w!6~yrQwbvot!%WL9@8WW5*d#vD$_sBl zYrE3mYg?>qzQZ=}rhL+U-WQ(14*)dY3mAzW{*EDv6^@0R!2|A~^%~81d1wPHc-V8c zvsi&is~Zcp(q4k1WLD&JSgEWBd9# zWa7HbRwmGY_n<=Q7FrYZt*ViDzy9vRhcC(g}@F=p9hD?E+8)|oHjEd=wrxp`mj#R44p zkcDHMsW9)k#yu!ch`f|QKF0!BGbsjYuUg>LQu;mca`Hah2XlW7rT>_ZZemK}qCph~ zN01zThE|0cDTxwkhE$j{DN~a(kI=F;1AM$m2i?aW`?^_Yu>g}m{VRCt1FUL<8Jo7` z$~-?cD2iA12cT9dR|<90-C#tK;EG>p=4j|(*lNfhYN;bsewP|-@5SdLZ0c~*{{Yv2 zVn;O+);U*7iJj=8S8!>Ivt(9pZ|uS39=uEvH3aHm<9n(eE2ID$yUNmRo&5bX0J{og zn%i!xuMN7CCTphZU30jqUIUhvtF88%HB;C+C^O^`8M4V80?o&bk_@s*?cSw^CRPWR#TGFoJ&1u8S9s0V>?U+@JE zQQ3-4=N#3?T|$dEG2}}+x_6k?S)n3(4QftDxDYwCIB_s6<6|>CW=^mG_Ya|12vwe_ zC2&QQ(7Hq8MR0oP*6_{MId9@y6h(n7_VBC_P+x2jB764fZ)R@;s6NPgK&DD8A&lTI z5^u;B!>53&Pk>f|@ac3}1{j8@4d;~(RF@anhMnbVWm9{#WR5tl-gh7#m0;Enn^_sO zcde=RhE=9#_KCHe-^EJ%y*nk@RAzepSn>L{GuGfJA$h@T;W8z}zXr?d{VzYZppg+2 zAiyH5m>hjSPVqsAGq8*(Vnu@;0PzU82J zeoAwXw;d(P?!JUqHb&Ej(5URwQufAQ|K6oAIfSj#g7^VN891BeZy%yGq!p{@Dn>_% zKEPSEq~}- z&m5A>K&O+IGv{ogqV2F1QVDM{*+Io6n9Jr7f)by~g2045W7>iJ36Kuxbg(vJWGdW2 zA-4&)Z}sQHY1vJ|EF5J1LwY;JW(tN_2}eX9v|mR>d(N}K27t%uN83gFoMGlg8L}>A zwRhX4Z&2L}39Ga13EZ-D<5;(?9|}$01r=tql}86TDi!5w-{w@2M5cdqT|0?w5J0^h zl|S3l&gaHPBn2D04+!_+INyqN` zLdDYN#~xyAB?OsF_y2yiz3cUXfw{BIBST`-&*R5d0oWann_q}7`Yj0%T)Z@-84ip7 zeToq29>H6>ZURmg&)B&?M@^dj89*&aFY*g`B$yJUYqO9|eoSASA~^|lrT%k!(9@B! zxXlPm>Pj9hfxf_DrwYJ+#l;oaj~~EuwhgWAOcw*}uI;;$pfUA>tmKEcvXhA=z<@Orjc{sgP#O2L zMpGjj)!jvYX%J)6vf^0KS8F~aPyoE0T*pK!+_}9eSUWOm0QF!g+T1baE$uDEn3Wc; zcR{8A!u-cs_|noC_{{e~C+ZVSscw>z*RhZeM6Pkh;N1bw!*a9{COldDkCazL(8bF$ z0F1ZAvZLrt7=GN@bp=WfNUK5{*TN+)vKw#(l9=%4QZh37tiNziuT5@^S*pW3SX)Au z7Mi6xIWu#z^ue!*7^$*R>YXe3N0%OL87-r0uM(3Zf}9`e3x&bntJW_mEp`L~-ArHf zb#J+{ZY!K+89&E+0Q5D{ERw%{J+p0M0RU7{z~PHof0e#x7-{{f{ZUOuC@5A$(=q9J zFJ*n#Z{7Rhb{0@3u>H5*_5pquB#=nOJ=6jacJkpEG;GJyAKk&Ypp?4eY({Y4`1R}p zF~`GPZA}h_A@Bf%F+y7v{=i?om={*;S;f^{IDxdjtqoZ*k3t)yNHqbwa^Za#06~J* zwV%GIG-lG+2shMIg0Inc&qw<8QspmJO6m`sg)}L*MDbN$e)^q%FOs+vkce4h255~I z@ypv|G|tAi=|5)KJYo%ZkU z0x*MP2>LJoTa36o}`q| zYSzwHv@pPy{|X3GKz}hmUzFDNTR^)v2k;!CCGLG=efX5_Q?eu%rFjeepiI0rsA65t zI~zIc3N}LqL!!gAA-hbARK$R!ix>MNK9+xv?z^TFk8zg)FtEDT|HJdGqks5FFj zb$=|WAa#(?IgWR4f+_~$ME#>%iS-5P4;ytf1-(uO$RJlPT{X*Ej~jV8VZL6u89)~= zqFp2+#ICNWQ&d(jzG)q&Z6(!ZZFxfXXu}y_jLgw*?2y@M2&BWkm#3a%wAxsW5f34G z>$ZhhB;RosgDV(?GVh|uRtr1hNBYb3vp2}Dv^VJ}wQ+s=lXveMC!V}0#^{mYP?xI! z5AkJ2@m7NuP+I8%>T4_>Ghb4K7%;|a%QP5(pm;klBR3WfX(@0CQ_-f!ml9r1H7&8t zhv*o`cPr$8E2O~ToC(QX$k1G&%XdVDZ$?0Jq3wT!f?0seGDxb4Hx_S{TX5yFajMXi z)Tuf}gOPb{80F4fEoM?C)-a!os-a1W*O70j#pR;kt|dSWD(9MM&=NpF4}e3^iIzEP zOjMVL(h6YwJ+^k*?M**0yW%~FT>GiI3{NaI(;@QcZF}BJzUeU&`bd%;TQ|io1Kq_N z1SUT(!gj!7caBv|y(u4;h$O{sXP++_1Bz)zg3{{-Dc|9*9JeiLvp>!e06Ir`>!*>J z4ws4dr>10_k@b~$g)PhI8PJ`h$K~fWk&~CnooF7yj2C9Z=hF?n**pXiz52 zhz)EdrP7WpN}v#Lm(E`4RnvCG-9G&2l$Ed#cLponMQ)`OrkkRpb>N`fP4URCzy9#& z%l`}aep=?RNY|v9fO8zbn^8Jd+g!Uri<7&qIoOVw8RPnRcnSmldoRYkXHq4-MZ zp*}ls`Po>b@Ebn+x7+>x(!&1xGi#?LpJ)q{C)gVsIt?nkC}3chwz9Vz>bj@)9Z`ap z(ovq3&Qi^+m6O}vb+k3WYr}k%NTY}DcdLLT+bXBt-~$CNEN+UFLj-t~UR z4TkhaZ!>5gRbZ$7@2RQ{iHM@Vwm5$rs6#HL=m?Wl_oef%NZw!2b)#%)GhIR1nFx#| z4xu^va6r|IzyJ)JX2TYN;mxypRWy*SqtXz0+RFF|PJ2=_$?ovV^Uv!??vqqp&6RVMg7P>NeK60$sp?c?GjOmq2r0KVA^dR>KppGLoM2N5VW{q@&hB z7$|GmA)07xyL3lEeWf48Fy&w?t0qX^&WXxcB@XQ-4)+@wZm`KGCBUy%g=isyc({KZ z7yn)3JO-Ici%O808wv-T1@9Qaz}zEUixTL!SpwjrOY7p;ljS`igjA=eaCNVi|L(WB zLbbFKtF$>JAXmGsvp$+YmoU6R@*^Eo+E~d8qyZ&n52wcT*cmG{NJvlJ_?cQ(+Q?+_ zykd~Ajg&|Ory7uYR>NwHf=5{_g`=CnZCI@h_%21?%S+u=VuZ3wEU1ctx3Pe2PH-zi zk_9kc4F$DdMy?G9^Yi10?Md)I512XJ`!1^QyKMmDx|J{vd;&6*2*t9&`r=F92x4af!&c^^1a^vUz&`RJPV1aUEvlQheS&1nFT|@ z#Bp2HZIgEbUnk?)QW~sZZ+vdoAVDXa%VtVi-TLvW#V6#t;TD9FJiM@N$*D8NB}AiA zg+)|1ZM$T#v`qqSOkZ!kYf?*byK3CQITr(pRlND(IKE9?6fFm!WQ6Gc$;GK!)g&i+ zcxgYSev~%_j3jqVrl-=XEk*OHbnd6KDSa_wUqbHuFSXMRg$Oaz4~mIt0VCSlEV*E zZcivwJp8M-+)YJI-DP+*z?=_-H1qT%)jvn)tz$B!CiTjQOv%*n#2kUu;=}9dePU{3 zVhs&!a6bS-l^$ABl@B55%l}?*_XsOKeSf^(YMSMv!t|B zp5<(p8^ktttc-lBrH*6gqTng(#`;1L=UcWPPmG8_h%+SN82~b>nHXlJHZr=AW;fH> zQYLC^l&9BGMu%p*IX(TN6$>D_Vjdm{L9Q>T@9tEeMjvhg5Plgi1B(K@2PB7%+vo}7 zUY-cNzK&zRSWH#d&JLXD`f;bhXCj(3^BXfGpwa%eZS+$S^R3fS0G~Xy$Gwi}5;0?| z(pYY{OYIycS9|rQ262AZer6n}^ItA9zZAg(C5yvnVCLMj-M2k=9cVCpd} zHCoOa+7&(kS(rP4ZJL$Sm+zf5_}){ExWoM-ezIsS&`IVEl0naVk%~~pg(KU+uUD_~ zF86CAtmms-36y`w>G&T`8ujI9HY$Y8sf}G*+Th@4_Qe7Y`s5gaRq6AqjY%C~ZNC=? zk89Ut2pC(Ce^TwtGKvObHYVOTSH@GQHtXihcl6Z&7LSjK&w8lfT39(-)uzrAC6s7=U*-_o>lRRx^2B8LscDwoF`oUd)Qk{QEvp-YIP6`R);N=; zI#%Zkd(TXELy2wr=EzJ zZvW>upms88h4{>@^jqNl=ICRnkc-n!eZ0yxdPE>~nsUK-GgrR`B~7VVnbP5)1#P<)bb;zVu7CMXOglO1KzUJzU#^~fY@Ls~ z@loBtm$&wTU+#774v!dq!uaLu?XzpdZ&`W{2reDfVMjQEv7kKLcy@La3>L7xIFMzH z$O$rzKJp~-+r5Uovnl?(hyeRUcX;(FopyJl&FgGhC$hl8s@ppCE^;WUVi66$%hXO+ z@`cMux8taAq&VBIa=bIj%O2Y3_0Xg5JWQ3V^M%T5n<}k(y48tY#|mE;ZcUZV+=kTz zfYk^uD80kO^*|#;jAC&8fRT&|U(RKk@tX{RLw^M>BPR~TIXMXEsKt;#|LG8@JB?mu z<=T%e1u%h#;)6k&R zs>KE0PrGQLasbb(NP-DdObSK9lp=gwf} z@Ghhi#;UiU0a`C|NyJDPd}#{UL+hwSa4r(Dkqs?Z-YS0k5fXpHM)K z<6-=eT;WY40Sjf`*z=dvlf%ZeoP0?n6~*d)fBZ{=2w8*AS`oMT!#dsr>a6JgZnjJF z?2mQQhM=T(+@!l%Of8vFj|*`6r`<|xmT@Oq31_YKhE3`FqfX$z{Ra%N)?4Zf?(!w{K^VXa9K zhlXyP@F$OwypnTu3s#p-j%ba>iZu@Umv)_2@gmUF%-*&;8g5ef^9_#UA;ZidQ53*U z{xq=9-1vur@n0cMAdEf=dg1w18&ZHJDIb31nbPJrh|SuS(|;M+B1wn|%AT%NM)a?( z#kGk)Y`uN|f(1}pgWKfhr7Sy~m12;_R~(9M^9o zs6JFvOy3reYr67zxoxX@x59b>wtfTTzy;&G{2J-wUcOnsy2`(h8q-FI&xW2+8HGE_eFSVS4 zyPt=%C#Y)=+F8BXo&a4G}H}L@^kokn6`lYOAJ-TE@T`kt7}#DHMZg_Q^S}oefSSq zlUN955Jxho_20Adc5a>yZSjD?6f3O3-jx7shbQ5me2F3RFndBj_N$nuo9q_Yu9iXA zUZz=Mk(#sIOGbqk9hhUUNFU|^sf^|TkaS_=(%1lj859G*_d z^_lZVlHIWwLEe~Y&) zaj^k3>gh0Y!>*`)!KLPgPN@=qOk1LabBG@>a`fA*2zPAEVCDKTH1b4a27_l=l6n52 z{J){O34TNurF*0OL~rVNATR%mH0f$dn`0SwGujqUnh1CIfJ*_h z*w_>oTb6tki;opM<1aPWY$Uu9}h4=pkYOmil3>t+_RTH_;EmoCi%PaCwUK ziHvBd-;hq{yG{<9t8ha=fD6GsArOImv?F(PEN!AM2r`c>D#py7S52E|o_K7)5j3uL zZemEm-K5W4MZZmIh*Ay6?lanJ875l_Z-j2wmkwc4^_a%AurCgwCGJuY?w=F~9@?88 zKH7T^C73szX%GM)GBdy>_de??BFw=v&5N*Dd}26<&dbL^>~SDadSdR6{IslulK^v2 zPQM~)-W;vq_IT!Xffw?2yQoriN@@T4;>zYxb6Z3NNJjCV_54K4nqDpY8sCY za-{~*^hCHriCwE-CSvi$@Is|WqK$!eDY}l~d8wHn6bg_pxywS9mZDeoJ&vZUKD!%B zj;O;9yWYZ5sFfrBISUwzvs!{=M$vMLi9FWEbmZhVBmsG#*s6I<#;Q&-Q*Qa(}ch)O9 z^CLDR=V#<0xchGd2}^Gz5ejbnt~d8y0!ew|Wa z*oz1@aqnLmW%9i7TJ+IUF_6_Z4CK?xKWCGW)y>e+La~)6#2ZvEZ3G%=4u952k+T8S z?56#V9rI#_1(tdsRikcyBI$3)(&3NgF2wC7w5e~V4{z@+6 z1*(ZFB-G6Sbm)GGKMT^HNYP6ge^Kqv}H+`hm%uW&G3_mF6GpyH0yMOvyRd>QDFkHWEkgJ&v zK6}BY65+1QER#pzt*{TZz;ESJ|EGawY{(gC08&U1$JcCBq@k#$9s}7-1V6QSfcO%l z9L7hMIHJJO8rX%&x@}h-0S(|6CK8xE${iBsH{>!3(^ufUMedLK1ny{YE4z6f4ql-Y z+<)T|@40EJ_|6WxXfeTdXFhp7CqG?nj*?q%M=dMsC1{&;N*7d&`hE%b{@i=K|JCwi zb+Yt^9^5#IwyNi45{Y{_-7YA;(rv+UsS)Z%{mhWCr_o%XlM+3IN0)YNNg>vj3pG7Bs`0H_+CRYeD7l_DfR?D7ISCF*wtKPj+j@uB}HNu%H=wVvC=O0 zS@Q~|NA(8jVgV>DVhdPT;PE@_^iEX45g&5P;p;1c$!5rW0KjUBq6La*6xayTDkML$O!D9OV%K9@xWKNG!PNI z-voiI&dy&L#^}iNQ zO%=f~p?fJcCKibUu}iCM^Sys*G^#6IK{8D|_s<-%cfxS+!|S>EzXa|;Kr~>DB!m}H zON%f{lQL0frZ)k|QR?UIqz!szj??`Pst*?94owRPl^JGQ0h+?6aGdwV<|KQ`5KV3> zaFHhHR&@@uq>S?LUd!?o!C{G%$36%~>?g$_I+^Y-e{^+BUDcb8%X~kx%QDFCKQ3rh zQ%dOenJ|TGY2D@}4Q4NS&XaSi$L@PuuQ{zZ{}R9MwEqNr2Ug^0*f^+VJy9R|I5jS7 z)g{8PD1o5{ojDg|n=>H78Y(NQ&l1~$ZPL=xo`w$eN4xo!Le2Whu{XD_i*!8&Qe5D9 z?5p0&TB?hhrah-2H!}zUxijb2Dqv9I;Ahv9s}WOv6~wad)yFJaHx)TG{x#=rtD96$ zwFMn)sjmTq6=w}$sb3UCxd7WnkCk85LQAEqDr4l)c|P0>=Bfh&LwsK`DI|L5o|Wj$ z=;GM;A5o3BcspPvjw^mYuW-=xyjVYoal={ zlQL!vmDUMLOp%eRs{Vk$^L#C{mGm&F&Cd-fbc~zV6R)X8`YKTTFOCKWzjRWh(6-TR;sU~Dw7!y)lQ#&WTmR==(HOZSvpm4 z;mW46^q+1> z652dJS1`n<9JuLv-Ab6Vsmn320ef{(&QH^fx%xOR%Vb0#L8*}uMR-r!yv-y3(aq#v z>x%u@?X`rkBa}!t=?5Q>&f#)}Zq)loCBA}f;*Ent4XY%{h{fr_#%Bm4fwEF(e4GS` zVXF7GsMxVD;}IGPZLTBH4v%YHkm8bp^yaY;VpM`1Jg4fCryeajNInfOYM^JH|NYyi z2tuwopPu>*xtMANiU~E$n_8>|(k+oiI36=gs=nm_OIX>P_F#095hG4D`sOQ5^(-mi zHhFy+C0DsmLMDMjtWyOgl09BmK*>$6$k=-ryTOE0OX#kft>Hp)UK*Zzsd`t4ch_aC z5DUUKCmH@i@utnshk@tuD=QL-I;j8LKgR)(*BN(K9LBBMF}W1Re*6t3OmOM_Uw3z| zN{9u@`oF2F^n^4*2*6=GivM53{q7B+?CN*VEqRs!x}cGgwqU+#I;dtb;Nba<%$@7; zZn+dDb<(dc{&j?)?scAtUj&AJ>T31ec0n_{g#MoXFW360_A)Bw%B@}k_6HTj;y8A9 zCB)J=4tWoem#K3#q7#4+Ue3b~nBMc^wPy6A=7(LJo2qpx8Rniwijt?yc+$kMD!X#;yBq z{~@J^nT>U;)+XHu_63}oL;CiFaWuZ})3VgVhNEXy8Ep5$P9UEB!?Q~yT*0>PzfE3W zQqAYJAx^9(2$*W}O89QJ3)jyX)OX^Uw&0i?@~_x175rFSuK6?Mn|eZ;9p;V&4P^9% zpd<%%bba2Y+*&2A96MjP3SI~-0Rfj!PWTRhehf|0Vwa`-8gjKR zrtQ2+Tq7=LoL(Pj4Z~@4NF3>4bTTy5+|y};Q_a@`v$=LMW8~_SRhxW52krAxE8W^3 z)Q5#;-hcEs->IafG0|J2vg%CSz*RDzYO^a*cSx>y>)>nbHe48$90Hk0;+qK7*dHe6 zpi0@10b2`rC?tn(JeEvM=-?c&BwLMguph!Bg-QV#3E%aCUanaZWb(}lyR^ZIaeOvr z#U%2~jY+0Il}5B)3Z5b|gCh(Kf%X1*d|-b-Bm4Os6JF&~DGf`{ZP6I&Hf8a6dezCu zCX*c8=&!e(*NX!p7u)~@kJx$fG8^|rocl^n02p^^0)Wm1>WMRYS;|O*nJ*-&0Hjqt z>fJ)ppt7`9P*|{B?IV-kdsdu4DG0-uQ=^7V>7Jyva8N{^TYKItv8LraLxiz8NkmHq zgm7eCbmuF2XyDpmx-uOKNw8Vz)6UmwXK_l&l(i+KC$nEKyb;3OVpED(Wf)nVY3c46 zfG)n>=BdRZkB!u+#HZe z8-|gOQ_dyn7!e&8b+H$Eu5$IXDp+Xf(v6U(zY7+%DzG5jslZL#OsxqQYpJippC9l^ zbIilUTRX!H&IAq6&E_16U+xs=Zky)`f;TBkDrupi#z4-pPIK>x3{*S4Yecca1PlSW!;=( zrNiFQg<%Q#wZC8)S<9m0P<{qra0w-(_EjQlc5k4K6IeE+TZ1tx2WHZ#9`VIZ;ZmIi z!SOBG4E{T0B^Dr0t)Pp4!(?Rxj!gaE4pp|A1YKcKO|w`*>)iETpPTT7YEnmp4;Q^4#aa4FaR6xr|M4_0weM8Wz32=FbuGXWoW z-3noX4@AEY92dLM`rg5FF{J=z%OkTq<0HQ)Q{7$<4YPFp7bdc#yUNuCK{m*QGikpe z9wU+lBnt`_VTMYjjA*w7JH_~7rR!+BriVrQIvs*@D2+f81t6WAJL6;$UA^gNQqKqm zvIcP7>b(OdOg4Zjzdd~bQ*rmS3rei7*DbjXY;iIw5QG8|13!DDxgYoz{X3}$LuR+{ zgSs@B?VTv9KCF8U^mg_ij4gq^op&v8h%}(8EJOH2^m#X81^mWIH2LAA zXZO;r;;Z8=8_nx30qIop zI?qEpf=MTwM7oJx#6LaWcL)!8dg5n;1J)=;6KvOelll*&)6zI&0OZg9-e~x%DW+P> zlK8?S?un@bj|Y6f)-0Uj^UUqV_A~@7*BQGc1XALVPr1PN&{G^1j>)Y z@mNrtH=YM)m~7SEn;MXLUYkj9#pMrc_$^Jg+M;n1mtDLldhFil7&lov9E{E%-(T@c6eGi4iqUnmPZ*Ig*X{H(=O5SadA zw7_`XY@&auEJ;sckZ*1D|-Y>9)tVU>gylau)3q$dj+WW?0EkJ<~oAu@I?ns zgdIlD61YxIA5Izfk@z(~Q~nV4uZt~{Urih1?!1QD5|j1aoNqN?fy91b9H?cmGC#e( zbCrm(7}KKwb22E#at5GP`o<{k2{tn;lY0ec3~HA?{jy-Z&Z!PA+R=)hzsG#m9g-~4 zo!X6ll;Kiv7bIHy4*4jF(y_vJlcLP02Mlxf!%0WkvV!f^G6>XmUO3?1~rbK<=4??7yFaxl{T2-YGu`7p>BWDZyZy*xU>ZFsf zqA`=YRfMVJUa-;57ArdUdrf^3N2r&zc5>OV%LgcVwpW9xk+=%&)16SD(M5oE+Cp^R zT1>g7dR!&O4qS%>c8Sx2SAvve>H@Q8mA_E|Ds=i{cA5fv78%dO<_@9)DDVEA>vzqM z((OVO{FheC@5Zwg#CG=GM?eM;A%y#B!5c`KGWRD?H*5*ANLe6hXlkR_Z7AJv6cS=c z>|S4530Pd10mf)1a=(lXP4rzO)%LZatZBmXqj@qz7MHurndXcEnkq?pLd`rzw~#V` z#)I0aU0c~h>d>hGHYky(De6`N34eK~2Zkn}Wp|y3OzALAG=R6LrGcHh!j$e=_SN7| z#eKV{PGflJueupj4C)DRyENbtpD=o}^Esf0*V9Anh)fIn9n34pwjDU6^vt%6!Ryu> z{KLGQMrfQxhGE=I)KKwaCuzWeLG22liw|K1A=_x6>=+?6W+(X&<9dY?pU2VL!v6dH zdiHpM^ASv#y=fs%Q#`sP^(u9n*vbh#nQ9p}zKQsTTMPb77}#jiZ1}wC%2YFCk2D=1 zB+};SilMq=pr%D<+4P2g6sJGAv-z$%F!5BRy3Bsxogs&_yXR^DzI%GstMdUs@GEUY z`I&5FlO0^1>6cH~2R5*>najX)an;@Qs6FpwE)i>V>3(L=zMuMC?5rQgXy@mJuyqYw z(rNHLQD!yRdzu~z`Pw8%8I{AXzu@_c#oVdU#6}#ryHwtQ!be9(WNNu+;S-K|HwUsOfqsW|O?wjNKgJgu)5WwLZX+ zfT+urPa6F4nr2ydFo;}hokR**G$iQ%Imy?a6=&1iv!#q1_iT&ZA*GGZ+24|go0{^c# zUos@b0B2_ANDquBqz1%l$j1L0QTX>2?ofmKCW!V=SDm zsQ_wQpec)2ncC`U2^7AD3NQxEfIVw_CI3LB2h24<*MEJwYz8l@9G$xKFY-u-!eVbkH`hO zZR;8Vf$S|svn%L$Cce}uQ}%Cl%Tjn=Sm{G!!GdAN=s#RnF-n=U$50>-TI$p&OZV_c zOYTl60Fm}X{$8S?8YK48WQ4Pu03e!ZA0{CIJ*Yg}&y8n8JUCcE`ZI`*?AGGlY)>~Z zO{@5u5HGd3tf2#r$>BtDy>>=eGVon%%Hh=J<=NW9b8#B{?-SsLLPAqsgGBR4p_a3( z^l}U)jE~@J=PcBP$;W4X#|liMN(0B_r~bI|mL@Yn(HkTTC(N#bD5eyiI%~4&@$O21 z2yxI%vcurQgtcy}`#+vbM1^xR$&Xnx%-ej=r5ajenm2>1#)0iw*oQw{ymhXp8_1K zgj5ABm8oAf>ULi4n=>C^O6qU?-@^C-z-|AZnA~%d-=Co`H#VGeo>}JT!qj{M0rTaU z0&EHR|1!2iM+9`L+k6hr1ELb`x#a8DT(~hAE!nI5(KpyuE@Z*~j;S_lOG0ijP>%n; zW{qgeJK#y8_S|beF!w%qsCzJmfW-Ao;;w^)U4dl7@F*?zQ-~zOa&NhP`5Ca&>x#zK zEI4)xBrLIBR@Qkxo)>46TbQX&)Z`#lp_lWS>D9uHRPO~v3D-%BkKX5?Yrpc-J~_wI zC=aBnHJE9@9%)6muIfmUb)OSJC8*1&02qX@{f9K+#U+%vVPmvIgk|nv?l;s?kkiH| zVA{BkwQoGBPu?gDs0`9v<~LOQG*Ud&VIH1}d|_A$sN(4)#7nrt66@lM?&w(PF(0V! z=|W0;pVXm@hwo_QZpbxBAhoy}1|+F+gJSCC;1Lb)q?x#rU?I#zhQr4v$v|XA05eQ7 zG$oxpn26eCC}c;UY(k0ENk5g0Mqvc%K{$|e_JS%f=_D$@q#Tt}!-#$!&w%m5S2ZIu z)38K&2I~8zVYs3v7i%(8(hVgjS1I2}(~(Jxz(~6IrDAX=wfyR@Kwn30`e|rNxJn|- z?x?I*2_{G7tPf&Z*hwV}75$qY8z4*_)vFce+yZ)Sth+YGa``I@k_!cY9AqfaQeFRN zOp;Wv4t`bk25np<1pmkpjVHDmoRoz4Y6w!M_7N+sf~_$q^oVwaxvZBDtbh(UKk{BVPoY*NY9)|5Kg;`QC!+@MC&uF1MB zVlgPgpOw`i>&m;W!?u;(@uJu;t9s<4{87@){5Bxao94?G3I(q_ni%2TYfiJ8T`YHH zIe?O#ef-h)=`h|St?u6Z7;tr6RQvpGQ1g|MnZKG{ZLXSLe{yVioa*Itd>%{Xwo&ze zg?(jE99y(5Ft`)k-8HzoOK^7|B)Hq4!7aGEySpYxaF+oB1cJLm0=zlrRNZ&~-5-0^ zx0iMAuKsFub+7K`YF2m0gEz=aGG;JfT?a@noe|vT*Q8)u|75zoec3X|$~cLf#JJ6A zUq8B2mWWhXlK-THF6p$$7+nziDVUD6SC)p4-O*RX&4Ewa6D{q0+3#6Z`= zy8~N$Y`gCR6fXJd1Z^y)_(3a}y3LQ=L-LEb>m1ulg~NT&e9)Tl(d2!bZ{NlyOOEcF zr}naAwl&u_uVG7W$8?>!4+$;}Ni<&S}l4u#m^uoV@2Yt%jV?$|GzAIbLq2 z{G&)u;!L-Y$mocb`nEMjq$s~xtnWr%Pv{{f+2OBym6q-=84c43LgU}*jy%~E|Q2k`I(Q;u$sje0MmLc;AIAB_xMK9UNWmO18EarBn-n( zgiPWY!mPeHALt&b<6V?Z1q&)U4XKW6V4+k6KNjsynyI_2MUUNd^~0Wp1O^mdZy0Yr z1YvEN_O8Cl2+if>MPJ#>WRH_)srQ`k;Cm-LQfxh%q3-=4+uOS$vAp+@Qc5hcD=gZ- zAkL1wp}?qIyuOkivX=$CdaRWvxSXuxV2Yr%_h5Z`)4Y`5^}?*!It9_P9_}hjOoj;f zKEVk&926?~IW`=Y3*E}pRDRYW$@6j}Fb$nSf4o_n*PRXU6=W68))o(5l3P=u#D#%p zGDH1HG{kQdKcPX?EkPv;6pBq3+aN1AVxjqR?6a*vQxX>JKS7dq-4zzOg4qsm8yljb zs`-7i8%>aaP*D-;!ViMUZNjzcg%c?YNn}71Zsop8T5#b|_>gV2gQWVk`}__dhgCAK zA~H7jBVLa0*?Hbv*oTN~1X}rIy{f!OXxZ@+cV1eKtnSBql7h^VJceJglsd&TsM*OX z@kRB>um5>(_MNSrb;TY(qv!Vp*ob8n|H(YI*y8QkH7Kyfv0d{ZW5nK7#PlR*09{pl zVJ^_;tpL$@^Fan{JUiU#bnId@ent4D5w%@Jxo#Cjl^vwgA8)WpnwcY$e`-LZKd8%fK=Y(zZA?Jv{E!I z(4Z`+O#%RPt{qf@Yc#$ZB^^#7yd{C+Z-iWG3uS1vT;c$6>Oqou%h6%Dkb0{lJ~o=K za3GYD(1DPiL3RQm520o()KUdF*pKKqOvAVcc2PWu+wc~M(i1zM0-)5xisX)i;k{8y z-4n0(2qw&T$O({_6uuw?izC{&Lhsufn($l%u_CZCw^Cp@hE^NF9IpoUHD*$5e;K^QI!(n?x(U&A;NtsH12-@l?o-B zTsP8+7Qhd@@)kM=ZQ_QLeWH)0ANgy++ij?98|Lz6?}OrsvKvn3CaP`4Na)`%blaBWj-2DW+s;mdzg#D- z{4j0_Rny}?b{@CMtybTTBW+dlgN-Xd?ko0dWLo7SiD@~JGet_1gHz`$nvZ(C--H}& zvf`%%h5TIuh^Fkl@%LBB;3+{`EKzE+pip(Nqf_d}_sUg-%fx(gF+a^*k=KvR`M52| z0hiYv0qYmMXxf3Q7QX3gw1te?jyUc1mi)%+426j+j#lfECigj`DGT2NUoy$&=#T?*sxR5|5N#V*1O+?%4e#RgZ~Z()&v;j|pFM(2uVk>NBS!QYAB(&%-0p!!rqY<1RU`?n788G4>%DwK2j50jNco&^6fb z$4G>+#O-AXe#ZKYz1>;>Gz&9~t)IqTfLa$aOm%wbZfj`pDWa+=k7;G3%%LkS=d6^P z3Um^=gPx<7rkF6u^~pob^13{83$HI4S#wvU$_4$)twCn4jvoj?r=Z?~Ci6s5>zKK1 z{3?hcTf8?C_7#)rp!n<8k$pG*fufPe*y}4iY>%*|O>X)P7`GC1m!}7__rw++`c3R) zcxuikXngu^4GxEEy=d8$-%xZ+=yQ)+6JnQDY2^0HZv3X=KWD_kyk|1@T$>P=-BHI6 zi2MXd!_u~bzKMYWFo%TdSZ@46HD0{ZE@8MAP`WU}KQG{$9KnnR7?M|G$2)|PXBMJ?ZfBZFlQI*N%%%(DZOA}< zuUCh=ABmRq|B_^f<@_>Bu@uU*w6(=B2; zqgvhpYAAnWP#(LS)ORwKR2P%Y1Z+cneM6kY-bHpW-HIQVv#2` zHpWe2#UIHHNbQ|CSPTPp9%o@<4K0%7Bjy}h>K^rzi8E@$&lLZ> z?8f{VH~qbBMzObkiR{;BYZ3pna!G62+%G&QEN2l~=|xYbq-Wb0cU1foY(GSKZefa@ zeftqBe6SWSu3b!a@SB z0znV5qZG@?l|R_E_OoxQ{iv^@v6i6~X4K|XNqfR$T7L8(CVEEWb`z5+$wyoFJZCXo zMSnEX1-lM0pAZs~&zR%A@AZ~nkv zes$2g*noCq*c_+PYASB5w3rHtAAUSb2l03~?Gy3k2|BzxcwB7P>g%pw`)k$Xshoe3~QPp78<&;UqemPjFnNBm^X1Al*)Y9}sfO|)BsXr&+#<5R@*;KA! z(5f>rc!!M;#4kZxe%YWOdw))?evO+mH2uiKZQrhHipFWmn$u2Oe0LyN$LdGq3YzuT zzTt_}i&Z=TsUup~)s7p)t=qU|BK@%cH4)H^~O~o z%n*75<(kv}3|rZxqC{aeMMjjjjWt4=AS$sQ*;)A@1oAWnzcnjN*t}`Q9>y{Lr{> z3>aEuG?qTq(i|K;Q4{$gKa=3sxs0r{2(9Y9p_5KwDfsj~Q>?)(i#Ay+=TuB|$o&R6 z+K>7+Udi$inDF)p>QtWadZ39aVR_DoB;OTBtmEN}X_b4gW9_bVu0l5<_D1N{$!^lOLhT=-j-bQKc%KNT$1B-Rw6^ z#fvsIAi8S`p)i_X7Y0=+V25kxnUqa34X^0+o3M?RAi1H{(0#@G*=d6;R*z__Kw+Ak zfVT$&%EflR{Km1aPL!VhW31(u!;^@#Csx|{NKEcCk#CTw#@?ks_R>_^Qg?=6)kF1D z0^K#QN%j7SzfYC$YfLZr-Xcr4nkTQ0@kKC0(OG;cfMdZogosZB7sE?XJ-~ z$(q1#NN4}+3L4CwTVS=HX4O|rtpcO!lu@T%l+_DJb_htOC8+i0>6SXJmWG>vMX#*D zb~DvWLz8~+SIzl^!d-Nl>F6n*k#*rTptf~prTvJ@61=wXq|Zo{ieiXclQjpCI(^c| z2t$8-uCsNeb9AMTah?2qmlvd3%jDMWa4%(YR%5W7HJD|sH?(W<{dK;+eH>riw;d;J3Hi4I}CE_uS+(7RW4$ zP?~XIvN3Si`#4DN_p*7KL@HA{XOxC_B5HAQHeB(N2z6LxDdx8akHGQ6Kgnsjayo$` zj0eb36MN~nm}Os$q1Bl-a51%Iv5_6wSBd>A>TA)XLLK6n#F3qN4m%~_GKg?NxNsRl zzoX&2Az~H-f!+SzO{_N`e=YxXLmlf8Rh=Yk|9L=rq2?JwRV*MN=>638{vr~5XGJX+ z2#zP-uT-BswbyGs>4LxFh?!_FzzZ`vi8T>Iw~#e=3XvU8Nv0n^zaex>A>rY89iBnn z#D6jAA9rOu@w}yg-}>nYH~_Wq>FoWQ`B@LR5&m4ufU$@|%pVVUogb!+vEZL9 zG%n%Scp7|X){E5P+5RXNuRPHB5zyhuSsBm+BGkP)N4I%E?+BvX)98HWTK60z>uSS& zGtVC2g2~nVXfP;X*t(M&uT;c1=xBr-4{g&@0d&B0j@v;H0a?Nl!GWf1nCDn_fR$+H zCk~Y|i@_z7fOx>CFQ}~m{^vH_P{_u(0J*jf@cgr*v-9dZj(>YSahpF92U2h@8h)d2 zc1wj?WOu9;ZwPTbaeVz^A@3*>X(4>F;>|%8@e_dWK)TiR^#*w= z%7wf?ipmXMYYahA2MNb}x~+HegyYGUM%ulNB6{4do$+V;ITAPqieTdc&##rkxuq9+ z-A+A5Rh%^P_q`LA1WR3QDtQ$4a@7n9xM!Lc{R-^L2in9~1Fq6m5W;oI_Px=U1S{-p zT6k1b%&}<>*K3?e=hmwXu$N#(7YxRUpC-JA>&+yYP<_87f|LnvP|2e?GS_4!QRrHe zXG5bMOIt8kZ6(#pG}g2gk0@26? z5Nj%y~0wpRv)kZKE_9*^%Cm${6b+70)@$ohuF zO3oRH4Hm_*%`PkXI;jjzB-kp@T8zBeielsuI<6IS1cFcQ!YHAZw)@HC5y3#1YeqM1 z81aT)<_T72a=B%5nJ1ufXDb$f*s-~z#z_p0{v-+H&HbU&Oe=nu@-=R^#_jaQ@9cU# zYlT{<7?@9fR8Oc!#pG27BN@Bu-Y z2kb-sA3aWZwTsl8=f>-EveF)aHaZI>A$j|@E4aW0#7Ck2z&}}LCME{Iu)D8_SY4=P zpbA=A?~&S48;8*!vriZs+~qJiSG z`(S5WlB+I_%Opxuz=)Um22)gZ7o_E~*-_TK8|zm;v{e?Nj*peDuoPIN^F5T~M zvQDRsK2$ZeI>{oAmNG2Ro}(pX_lKBJ(DDZ}H=HG0U`UoCoBZu9#lH7OTyq@H5MkcC5!bj+fv51-_dEb&<6} zk#@*GO#Q|`lLL=rViB!eapa*YP`}JVsK8;L`jB%2=6&zab*FgWf@+T);B9eWpeg?g zto{3r4bg{6kG{eqs(zATo)VBF8m!KrpEKf4-c;nQWKO!&H+K0ZpkYk+>w*6X6aFS%gC!#Nep9lvCuxDpH1ZYNkAi|Kq+c48_OL)NB zZkIz!aTJFwjgGK;G-X8GTR_Vys-e)n?x9a;2_*ckw_T-Q5#b98lz*jsjCAwwypO$} zl}MSH-G0AXZ4m4K^Sbw&{>u1AT}0eFZMTRE=;+0G_41}5Xeg+xIIPc@=So$s17Vw7 z5LFd)qkq2EazPXjc_w7FP5I|j)+NL6Gd($C!nUL*S`jrmsq0ac6g`^)*Eu-Ng55Um3c#pO-ab4R23Rx3>){(ke^nqTYW-O8ahRAH_sP-VVQM7NGCqU-pAu zIG?}e@FkkQT~9_j&%RvU?;SdC`w9Pjd-#0z^^z%ltRcw%<=$C5aI?P@JL(;Q`TFtO ze|;cWb~Kji{4&x~vI2avvb(a)es3qzGHAyy{Vc>&^BRe3 zSpB&NsGWZ6|94jPR&+a8!2KZbr@;1~X`lSVzR&rqzkUmY8YZ|JPSz)M*y?}ydaC3A z;oX33Kn%nhaUKIwFuXZhrHq4gkE$MmSJAmdkDMOH4bXpn1&LUk+5jI+WR4A#WiG7y z&>pPQih0gvPJA{0GOvROXe2&I1d|Snn6ZPQz@LW$&BVZnU`}(PBXOY+uh>Rx5^-8_0BE>guHcQ(jPRLTcESMF3+NVPJA3QWm;UK}=4 zL@Jv@w}doZ!Z;w<8#G1Rx(7@N@5a=f`&4qgluZlG;lQJe(Uv zOnb@!9?p9xSY=y73NKeU=O$^Z60kd$^VGO?5?Fy~eaF*!3RH}U*(U?5v|@)dHKMf& zfq;r7G49x(;m-MY@qD7Z@Kx|C`G=L5NAgV{2=uIX7>Gvl59X}cgi|%n?0CTNU`)!9 ze4W1<+7m^)1F06O-bFlxXqXTinF=3VZw>@dXD6zaX<5c%_U<* z?&m$EiflAuM7HAT7Vkc2oE@8RZ-H|jpKA50#hIsZR;JS07v4!zwx(nV>{jMyfq-t`GrI4fJjRiH?ULgUduOQ@ zvv-F(*c!MH4dZ|!25y?hnLe`tGv#uo##xqI)sn^!h^4KB2V3I|0*=es4b}bu_r*Mr z#r&(GP*VR7B+-|yX~u{wsz`YK3xs0YW0Nc(M?;w}P(SM*;D}R~4$*)hDp57Ue-r&c zSPsYWS8TGK=u(XO$LEa7AmQJrGp6i`#DBwo?j#D7{gb*T!0^2NB;(&ygy)oyBc*Y+ zF2Ws=mUmvI*hC&w?pAs7Yyi(YkGemXJx_+I6Jp;g1tbpVDa1QR1qTibHlmyhf<-{X zeo1m0;)e8&P-&@DMPb80!k3kE^*(VmvD2j5?=&B48ti{mQIS%2v* zCz_g@h1qUvnA!)W)EIM(lGk0D;48VynFo$)7Et$}`bY~Gd#gU9aUig*K-=_>_zebh ztU+b|#>;_n->^V2lQnb%Oj*W4n>`q80y10h9-(cjN4y6Awyq&%rs4HKxzAf5W`aWS zdZ2G-EHKR4^@U+GE%E+9aZUch8VqRWN6eJLi-dL``}NUdvTcnkYa|c9QHq}8-(M)U<*~+;p~K|4|UiP)PsuMf!BlK8)9ulbqW(QgWH6w zF(XyZ^nS6IW%;bHzW zz40PuM?j;4t#Q3yf@JqHfqA4;$SWlh{i$TN*Yq{yVUc}-!6vE)H0^)ZLNv(!u{~;8 z!z?!Q`xuSrDC%`mmcP2tUIt{ENtqAjLrr&mZP!AN&`RDO)g&GVXTgGL8A5>aU5{cE z<|E$!S7qjo9Zu&58I66z`naC>BS?8>kG5sjXtnZN+YR%5ahx(!T(;8=170nw@3JL%ah%UnC`IeD zLDkT|jot^8qi+KX$Ii|h>{6@jf-vt4>p^b{c5;IpW*S-K&{FBQw%mTGxv(WW;lBm_ zxd+K7+eQ8H;`Hmi4~0gDa5AA&(urfZ3*oO|DmT@}s!OL~Jb}0A%>69qRBC))%Wg_S zNNV58ozC#|S~q0};M4ihY^Hth)hE;aYmEUNLx4u7uI#459QM8|$W)P@wQPz7N&@T+mr^|RE|_l@1X(jg%UF5nDAi8qt-C3alf++8~}jHkFE^^iYqCCHbAOuV4hfu!TnLw%nx|dI48b zv#IK0P!g|`=Ri{xtD6Z?TXg~g@-e<5H)0uM&7U%Ha4k=ODXyADxhd6FS@Ck;Ba$6{ z?e0c{&&uCL_*nykH$$-XZESVj00B*lLG0 zKmDZsZp-$4CqIs+>@O~(udZU_E($uf5n$ZFP(#@j`0Tp5hmUrhjC(ps&pJnQ%j2Ea zR)3(pLmV4${X`p}jlS-FMFnwL<>?U2kusjbYy~UZCgaMcKGhVvc*y zkabm%eQ2R%o(ho44nk-vAnh3bEn&AtC4{y_mft));fhunwy%>EZ@9ZVTUuqPwZUf> zVfr_{m2pPgwDe~pv3Plc>iK3I?$461Q=RHot3%eze`mV6J-zK0@oGU=f4ZTqVuOur zlysiLyyZ1l%O6e?aNnM2?U=>S@t>!4>aLbDxC`H*SPH6!z>ULPpi1a6ViYSwou~bl z1+s-3f=ZZt-2N+i`!+Ycph8VU&q6S=X@I6Vnp#EcBr^Nom{vdW3hr$fqS`Bq(h#~C z>u^@TqGuiEfLBW*AOPeqZWaOgy#i6)yl~)bzzE*9zcyHO4hdX$HKAHI4?m4R2+iEv zE@yxrH7J2;usg;MEX?8JA6hY=vy9-=<(WfC2o`1TeKoOrHA6(z)7xPFj7b9chQ}MI z2v#o)BkOQ^v|PAjRt-^iSs0$#UKzBT*`YDSHk%p_yIdUP&ji8PvYu^sb*DfoMEliR z%fd{EK8NKlP{IIfDog;SLX`R(rW3Y4I2LavjoT%QYp#klxCYPUxe>lTgtig5JFTkN z1D!skf}(3!x&_0$(;ksCzSMI5b?)84|gIsx^GNP)FN5ME%r4`|Y#A)2SR! zql^;syGZlZE2v{`B3}l-zl1gW*=;0RwbzgmkJWO_Ej~iEpDzAqe;ny#56j<5dNiT* z9PzM-*#H9rYFn2ttez*+ctIz=Xgh1of}Ur3PAymN1*_svOJ6SAuAb5C)|w!J=XgQK zdkafxmSZ>2D5h&)zmQIDQM6vkthd)@q5fpB?7NXb0S&z6!uvs8u#%|UmJDBF5TbV3PD5$_Wak2d$^ z(%pfZaG9<=c0rUYQ{Rc=m$5Pxz+YWaXZ2GlJ1(gAG+S11hx^DOpr5adw(UkJ<&H2x+mW&6 z%NlxD$~rWO4_2RZFfP9dD4T6B?90 zD57>fxo7J+m$QSX2hY62rU&N$B}W7H1qegsn4t(;X(9DFC;t&Sk5u|fQVHWjJw%LT zBhMlAwd1G&l$D3wT#)nxdq}g-YS(&1U9L{P69!98^F%R(fFvp}A0YV)`$NG_5$qot zJqiK%akB;M`Ne|8YYwSU!Vki!I|Cr;Q$M2z=^EcBig_Y3QTbLkIkpt&*teJB1Wv?O ztw@XytaH2nE2GON$rDJ3r^=<0|4UyIuv1EgE2BawEA?UKE;x-^BtYnN6Nb4D%ph!Nl$s$10>EA{+~N*P zCaf|Duo42m{o~64h%v*P3PCX=yCTO-x(N1F5RXRC9pV}M8Zb!Y)`;i?<@alcj^YP& zEG4wkIrQl|bnI~mXCLwkl>1Jw_F-_A++cPP=nAT_n5+>Bukno}$!=`Kb@Po>sW`zy zXyIJGgL*5$NU-crxXiZcGJWG9FXKl2U%vkP%Y}bUWsY()q{m(a-_^6@3JJ@mG7lKtVd|1xPaLIaXi~gfckI=(Pk|B(rAKe zHcddSrAl$EB%&^QgRJ^@1MgMPb;-vcEKwp^N!nf3hRq=$mrRy{+~?aaS|ne48X@X0 zj;L=G=wXijD~7om^o}dWkJz7o*Y+Hyw^!HtzaW6C+b`O@?Q2H6->-c?FB?3nn#}9u zk+RI#J7kb56SZkOi=>#&>-_Y4a{?V=qpjS=2Yu!-m^DNL+c*Do5^(HU_xqDzS2N-l zDc8De-)Ec6OfO(kY1Uj3>JI6Cx+VPDtfJAbFu|*^PRF?6zT&@E;+G|fp>+?N_Q?8o z0(#{w6nYyf@y9FEAV9l-zEbqk@Tu2q_Y&rw0>dZh;#Pdw8K&2H_ckT1i diff --git a/docs/manual/_sources/interfaces.rst.txt b/docs/manual/_sources/interfaces.rst.txt index 3c2d12a..e359eff 100644 --- a/docs/manual/_sources/interfaces.rst.txt +++ b/docs/manual/_sources/interfaces.rst.txt @@ -365,6 +365,7 @@ can be used, and offers full control over LoRa parameters. # out identification on the channel with # a set interval by configuring the # following two parameters. + # id_callsign = MYCALL-0 # id_interval = 600 @@ -372,7 +373,21 @@ can be used, and offers full control over LoRa parameters. # with low amounts of RAM, using packet # flow control can be useful. By default # it is disabled. - flow_control = False + + # flow_control = False + + # It is possible to limit the airtime + # utilisation of an RNode by using the + # following two configuration options. + # The short-term limit is applied in a + # window of approximately 15 seconds, + # and the long-term limit is enforced + # over a rolling 60 minute window. Both + # options are specified in percent. + + # airtime_limit_long = 1.5 + # airtime_limit_short = 33 + .. _interfaces-serial: diff --git a/docs/manual/interfaces.html b/docs/manual/interfaces.html index 18d4bb5..034f4bf 100644 --- a/docs/manual/interfaces.html +++ b/docs/manual/interfaces.html @@ -527,6 +527,7 @@ can be used, and offers full control over LoRa parameters.

# out identification on the channel with # a set interval by configuring the # following two parameters. + # id_callsign = MYCALL-0 # id_interval = 600 @@ -534,7 +535,20 @@ can be used, and offers full control over LoRa parameters.

# with low amounts of RAM, using packet # flow control can be useful. By default # it is disabled. - flow_control = False + + # flow_control = False + + # It is possible to limit the airtime + # utilisation of an RNode by using the + # following two configuration options. + # The short-term limit is applied in a + # window of approximately 15 seconds, + # and the long-term limit is enforced + # over a rolling 60 minute window. Both + # options are specified in percent. + + # airtime_limit_long = 1.5 + # airtime_limit_short = 33 diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 762ab78..0d6a550 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 11], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9], "your": [0, 2, 3, 4, 5, 6, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": 0, "minimum": [0, 5, 6, 9], "setup": [0, 2, 4, 5], "requir": [0, 2, 5, 6, 9, 10, 11], "connect": [0, 3, 4, 5, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 3, 5, 6, 9, 10, 11], "have": [0, 2, 3, 5, 6, 7, 9, 10], "stack": [0, 2, 6, 7, 9, 10, 11], "initialis": [0, 7, 10], "readi": [0, 2, 3, 5, 6, 7, 11], "pass": [0, 3, 5, 6, 7, 9, 10], "traffic": [0, 2, 5, 6, 7, 9, 10], "thi": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "rn": [0, 2, 3, 7, 9, 10], "start": [0, 3, 4, 5, 7, 9, 10], "up": [0, 2, 3, 5, 6, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 5, 6, 7, 9, 10], "destin": [0, 2, 4, 5, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 7, 8, 9], "argpars": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": [0, 10], "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "exist": [0, 2, 3, 5, 9, 10, 11], "which": [0, 2, 5, 6, 7, 9, 10], "know": [0, 2, 3, 6, 7, 9, 11], "thei": [0, 2, 5, 6, 7, 9, 10], "reachabl": [0, 2, 5, 6, 7, 9, 10], "autoomat": 0, "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 5, 6, 7, 9, 11], "automat": [0, 2, 3, 5, 6, 7, 9, 10, 11], "prove": [0, 9], "packet": [0, 2, 3, 4, 5, 6, 7, 10, 11], "adress": [0, 7, 9], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 6, 7, 9, 10], "tri": 0, "whether": [0, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": 0, "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 7, 10], "client": [0, 2, 3, 4, 7], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 10], "get": [0, 3, 4, 5, 7, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 6, 10], "action": 0, "store": [0, 3, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 3, 6, 8, 9, 10, 11], "altern": [0, 5, 10], "directori": [0, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5, 7], "keyboardinterrupt": 0, "print": [0, 5, 10], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 5, 6, 7, 9, 10, 11], "arriv": [0, 9], "random": [0, 7, 9], "two": [0, 2, 3, 5, 6, 7, 9], "list": [0, 2, 3, 5, 7, 9, 11], "string": [0, 7], "app_data": [0, 7], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 2], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 2, 3, 6, 9, 11], "destination_1": 0, "destination_2": 0, "handler": [0, 7], "onli": [0, 2, 3, 5, 6, 7, 9, 10, 11], "ask": [0, 2, 3, 7], "chang": [0, 2, 5, 7, 9, 10, 11], "filter": [0, 6, 9], "see": [0, 2, 5, 6, 7, 9, 10, 11], "what": [0, 2, 4, 7, 9], "happen": [0, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "0": [0, 2, 5, 7, 9, 10, 11], "len": 0, "1": [0, 2, 5, 7, 9, 10], "data": [0, 2, 4, 5, 6, 7, 9, 11], "encod": [0, 7], "utf": 0, "8": [0, 5, 10], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "class": [0, 6, 7, 11], "method": [0, 2, 5, 7, 9], "take": [0, 2, 5, 9, 10, 11], "option": [0, 2, 3, 4, 6, 7, 9, 10], "argument": [0, 7, 10], "instanc": [0, 4, 5, 7, 9, 10], "some": [0, 2, 3, 5, 6, 7, 9, 10], "want": [0, 2, 3, 5, 6, 9, 10, 11], "aspect": [0, 3, 5, 7, 9], "__init__": [0, 7], "self": [0, 6, 11], "call": [0, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10, 11], "cannot": [0, 2, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 7, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 5, 9, 10], "sy": 0, "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": 0, "channelarg": 0, "between": [0, 5, 6, 7, 9], "interfac": [0, 3, 4, 6, 7, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 9, 11], "server_ident": 0, "queri": [0, 2, 7], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 7, 9], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 11], "wai": [0, 2, 5, 6, 7, 9], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 7, 9, 10], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9, 10], "go": [0, 2, 5, 9], "handl": [0, 3, 5, 6, 7, 9, 10, 11], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 5, 10], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 7, 9], "represent": [0, 7], "command": [0, 2, 5, 10], "dest_len": 0, "truncated_hashlength": [0, 7], "2": [0, 5, 7, 9, 10], "rais": [0, 7], "valueerror": [0, 7], "length": [0, 5, 7, 9], "invalid": [0, 7], "hex": 0, "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7], "kei": [0, 4, 6, 7, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7], "modul": [0, 2, 3, 9, 10, 11], "known": [0, 7, 9, 10], "return": [0, 7, 10], "outgo": [0, 5, 7, 9, 10], "got": 0, "correct": [0, 9], "convent": 0, "request_destin": 0, "add": [0, 2, 5, 6, 7, 10], "echo_request": 0, "get_random_hash": [0, 7], "successfulli": [0, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 2, 5, 9, 11], "retri": [0, 7, 9], "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 2, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 4, 7, 10], "forth": 0, "o": [0, 2, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": [0, 7], "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 2, 5, 10], "_exit": 0, "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "sendig": 0, "perform": [0, 2, 5, 6, 9], "random_text_gener": 0, "request_id": [0, 7], "link_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "structur": [0, 7, 9, 11], "datetim": 0, "vendor": [0, 3], "umsgpack": 0, "share": [0, 2, 6, 7, 9, 10], "object": [0, 7], "subclass": [0, 7], "messagebas": [0, 4, 7], "ensur": [0, 5, 7, 9, 11], "serial": [0, 2, 3, 4, 9, 11], "deseri": 0, "multiplex": 0, "other": [0, 2, 3, 5, 6, 7, 9, 10], "both": [0, 2, 3, 5, 6, 7, 9, 10, 11], "same": [0, 2, 3, 5, 6, 7, 9, 10], "definit": [0, 9], "note": [0, 3, 4, 5, 7, 9, 10], "wish": [0, 9, 10], "make": [0, 2, 3, 5, 8, 9, 10], "stringmessag": 0, "convei": 0, "timestamp": 0, "msgtype": [0, 7], "variabl": [0, 7], "assign": [0, 9, 10], "integ": 0, "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 7, 9, 11], "across": [0, 3, 6], "0xf000": [0, 7], "reserv": [0, 7, 9], "0x0101": 0, "callabl": [0, 7], "paramet": [0, 3, 5, 6, 7, 9, 10], "empti": 0, "version": [0, 2, 9, 10], "unpack": [0, 7], "final": [0, 7, 9], "implement": [0, 5, 6, 7, 8, 9, 11], "pack": [0, 7], "raw": [0, 3, 7], "payload": [0, 7, 9], "packag": [0, 2, 5, 9], "bundl": 0, "could": [0, 2, 5, 6, 7, 9, 11], "struct": 0, "python": [0, 4, 7, 9, 10, 11], "more": [0, 2, 3, 5, 6, 7, 9, 10, 11], "fit": 0, "entir": [0, 6, 7, 9, 10], "avail": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "properti": [0, 6, 7], "slightli": [0, 2], "less": [0, 5, 7, 9, 11], "due": [0, 6], "header": [0, 7, 9], "content": [0, 2, 6, 10], "stream": [0, 7, 9], "packb": 0, "unpackb": 0, "channelexampl": 0, "get_channel": [0, 7], "register_message_typ": [0, 7], "add_message_handl": [0, 7], "server_message_receiv": 0, "param": 0, "deserializ": 0, "unless": [0, 2, 5, 7, 9], "preced": 0, "indic": 0, "isinst": 0, "reply_messag": 0, "order": [0, 7, 10], "were": [0, 6], "consid": [0, 7, 9, 11], "subsequ": [0, 9], "skip": 0, "packed_s": 0, "is_ready_to_send": [0, 7], "pleas": [0, 2, 5, 7, 10, 11], "pend": 0, "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "client_message_receiv": 0, "reader": [0, 7], "writer": [0, 7], "__future__": 0, "annot": 0, "latest_buff": 0, "bufferexampl": 0, "old": [0, 3, 8, 9], "stream_id": [0, 7], "bit": [0, 2, 5, 7, 9, 10, 11], "like": [0, 2, 3, 5, 6, 7, 9, 10, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "descriptor": 0, "actual": [0, 2, 5, 9], "separ": [0, 2, 5, 6, 9, 10], "unidirect": 0, "flow": [0, 5, 6], "opposit": [0, 5], "create_bidirectional_buff": [0, 7], "server_buffer_readi": 0, "ready_byt": [0, 7], "int": [0, 7], "otherwis": [0, 7], "forc": [0, 10], "server_client_connect": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "client_buffer_readi": 0, "termin": [0, 2, 7], "download": [0, 5, 10], "resourc": [0, 2, 4, 7, 8], "effici": [0, 2, 5, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 9], "compress": [0, 7, 9], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 7, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "prepar": [0, 6], "instead": [0, 2, 5, 9, 10], "slice": 0, "chunk": 0, "suitabl": [0, 2, 5, 6, 9, 11], "thread": 0, "app_timeout": 0, "45": [0, 9], "serve_path": 0, "here": [0, 2, 3, 5, 9, 10], "conveni": 0, "list_fil": 0, "entri": [0, 2, 9], "listdir": 0, "isfil": 0, "join": [0, 2, 6, 8, 9], "host": [0, 2, 5, 9, 10], "still": [0, 2, 6, 9], "isdir": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 6], "mani": [0, 2, 3, 5, 6, 7, 9, 10, 11], "split": 0, "filelist": 0, "multipl": [0, 5, 6, 9, 10], "hint": 0, "alreadi": [0, 2, 3, 6, 7, 9, 10], "support": [0, 2, 4, 6, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 2, 6, 9, 10], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 5], "don": [0, 2, 6, 7, 10], "unknown": [0, 5, 7, 9], "conclud": [0, 7], "hasattr": 0, "server_fil": 0, "current": [0, 2, 4, 5, 7, 9], "current_download": 0, "current_filenam": 0, "statist": [0, 5, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 5, 7, 9, 10], "normal": [0, 5, 7, 10], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 7, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "extend": [0, 2, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 9, 11], "job": 0, "potenti": [0, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 7, 11], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 7, 8, 9], "readabl": [0, 7, 9], "num": 0, "unit": [0, 2, 7, 10], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 9], "pi": [0, 4, 6, 9, 10, 11], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 2, 9, 10], "g": 0, "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "best": [2, 9, 11], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "pip": [2, 3, 10], "manag": [2, 6, 7, 9, 10, 11], "sudo": [2, 10], "apt": 2, "python3": [2, 3], "pamac": 2, "similar": [2, 3, 5, 6, 7, 10, 11], "dowload": 2, "releas": [2, 5, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "offlin": 2, "py3": 2, "whl": 2, "mai": [2, 5, 7, 9, 10], "case": [2, 3, 5, 6, 9, 10], "usual": 2, "essenti": [2, 5, 9], "deriv": [2, 7, 9, 11], "arch": 2, "manjaro": 2, "devel": 2, "fedora": 2, "dnf": 2, "groupinstal": 2, "tool": [2, 3, 9, 10, 11], "librari": 2, "compil": 2, "miss": 2, "even": [2, 5, 6, 9, 10, 11], "pre": [2, 7, 9], "built": [2, 5, 9, 11], "few": [2, 3, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 7, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 3, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "without": [2, 3, 6, 9, 11], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "devic": [2, 3, 4, 5, 6, 7, 9, 10], "enough": [2, 3, 9], "physic": [2, 3, 5, 9, 10], "rnsh": 2, "fulli": [2, 3, 9, 10, 11], "session": [2, 9], "pipe": [2, 4, 11], "ssh": 2, "suit": [2, 3, 9, 10], "featur": [2, 8, 9, 11], "delai": [2, 5, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 10, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": 2, "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "might": [2, 5, 6, 9, 10], "reboot": 2, "again": [2, 5, 9, 10], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 9], "maco": 2, "peopl": [2, 9], "compat": [2, 3, 5, 7, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "come": [2, 9], "easier": [2, 5, 6, 10], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "locat": [2, 3, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "thing": 2, "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "utilis": [2, 6, 7, 10, 11], "extern": [2, 5, 7, 11], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "gatewai": [2, 5, 6, 9], "enabl": [2, 3, 5, 6, 7, 9, 10, 11], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": 2, "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "lower": [2, 5, 10], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "record": [2, 9], "metadata": 2, "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": 2, "most": [2, 3, 5, 6, 9, 10], "anymor": 2, "through": [2, 3, 5, 6, 7, 9, 10, 11], "invis": [2, 5], "daemon": [2, 5, 7, 10], "parallel": 2, "For": [2, 3, 5, 6, 7, 9, 10, 11], "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "experiment": [2, 11], "made": [2, 7, 9], "amsterdam": 2, "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "betweenthebord": 2, "4242": [2, 5], "g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9], "failur": [2, 5], "guarante": [2, 9], "hardwar": [2, 4, 5, 6, 7, 9, 10, 11], "wide": [2, 3, 5, 9, 11], "section": [2, 3, 5, 6, 9, 10], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "custom": [2, 5, 7, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": [2, 4], "addit": [2, 3, 5, 7, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "pip3": [2, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "step": [2, 3], "pyseri": 2, "api": [2, 4, 9, 11], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "folder": 2, "symlink": [2, 10], "cd": 2, "ln": [2, 10], "echo": [2, 4, 10], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "process": [2, 3, 5, 7, 9], "h": [2, 10], "ping": [2, 10], "replac": [2, 9, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "place": [2, 6, 9, 10], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 9], "termux": 2, "f": 2, "droid": 2, "emul": 2, "environ": [2, 6, 9], "abil": [2, 3], "pkg": 2, "sure": [2, 3, 10], "upgrad": [2, 9], "Then": 2, "reason": [2, 5, 9], "attempt": [2, 3, 7], "openssl": [2, 9], "libffi": 2, "rust": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "apk": 2, "tutori": 2, "code": [2, 3, 4, 5, 10], "startig": 2, "architectur": 2, "precompil": 2, "dev": [2, 5, 10], "64": [2, 9, 10], "32": [2, 9], "rasperri": 2, "os": [2, 5], "april": 2, "2023": 2, "onto": [2, 9], "unfortun": 2, "pipx": 2, "isol": [2, 5, 10], "neg": 2, "affect": [2, 5], "ensurepath": 2, "rare": [2, 5], "obscur": 2, "unusu": 2, "rnspure": 2, "No": [2, 5, 9, 10, 11], "matter": [2, 5], "perfectli": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 11], "primit": [2, 4], "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "conceiv": 3, "kind": [3, 5, 6, 9], "medium": [3, 5, 6, 7, 9, 11], "flexibl": [3, 5, 11], "cover": [3, 9, 11], "wireless": [3, 6], "decad": 3, "radio": [3, 4, 5, 6, 7, 9, 10, 11], "modem": [3, 5, 6, 7, 9, 11], "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "oper": [3, 5, 6, 7, 9, 10, 11], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "broad": 3, "abund": 3, "sometim": 3, "especi": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "emploi": [3, 9], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": 3, "either": [3, 5, 6, 7, 9, 10], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "particular": 3, "plaform": 3, "depend": [3, 4, 6, 7, 9, 10], "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "limit": [3, 6, 9], "common": [3, 4, 6, 9, 10, 11], "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "overhead": [3, 5, 9], "high": [3, 5, 9, 11], "level": [3, 5, 9, 10], "directli": [3, 5, 7, 9, 10, 11], "replic": [3, 9], "togeth": [3, 9, 10], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 7, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1276": 3, "platform": [3, 4, 9], "esp32": 3, "manufactur": 3, "io": 3, "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "question": [3, 5], "port": [3, 4, 5, 6, 9, 11], "air": [3, 11], "id": [3, 5, 7, 9, 10], "itself": [3, 4, 9], "touch": [3, 11], "produc": 3, "short": [3, 9, 10], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "capac": [3, 5, 7, 9], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 9, 11], "cheap": [3, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "pattern": [3, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": 3, "area": [3, 5, 6, 9, 11], "aim": [4, 9], "particip": [4, 6, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "instal": [4, 5, 6, 9, 10, 11], "resolv": [4, 5], "issu": [4, 6, 8], "base": [4, 5, 6, 7, 9, 10, 11], "shell": [4, 10], "nomad": 4, "sideband": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "android": 4, "arm64": 4, "raspberri": [4, 6, 9, 10, 11], "debian": [4, 9, 10], "bookworm": 4, "ubuntu": [4, 10], "lunar": 4, "pure": [4, 9], "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "rule": [4, 5], "udp": [4, 6, 9, 10, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 7, 9], "buffer": [4, 5, 7], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9], "endless": 5, "describ": [5, 7, 9], "give": [5, 9, 10], "respect": [5, 11], "discover": 5, "autoconfigur": [5, 11], "ipv6": [5, 10], "router": [5, 10], "sort": [5, 9], "switch": [5, 9, 10], "interface_en": [5, 10], "lan": 5, "group": [5, 7, 9], "group_id": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "multicast": 5, "autodiscov": 5, "discoveri": [5, 9, 10], "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "frequent": 5, "block": 5, "inbound": [5, 7], "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "event": 5, "simplest": [5, 9], "tunnel": [5, 9, 11], "interchang": 5, "degre": 5, "retain": 5, "eas": [5, 9], "simpler": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "restor": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "tnc": [5, 7, 10, 11], "8001": 5, "caution": 5, "frame": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "intern": [5, 7, 9], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": 5, "udpinterfac": 5, "forward_ip": 5, "255": 5, "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "segment": [5, 6, 7, 9, 11], "cours": [5, 9], "15": 5, "16": [5, 9, 10], "ttyusb0": [5, 10], "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "7": [5, 9, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "12": [5, 10], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "amount": [5, 6, 7, 9, 11], "ram": 5, "flow_control": 5, "pair": [5, 7, 9, 10], "laser": 5, "serialinterfac": 5, "baud": 5, "speed": [5, 9, 10], "115200": [5, 10], "databit": [5, 10], "pariti": [5, 10], "stopbit": [5, 10], "stdin": [5, 10], "virtual": [5, 6, 9, 10, 11], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 7, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "period": [5, 7, 9], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "amateur": [5, 11], "spectrum": [5, 9], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 10], "squelch": 5, "rx": 5, "turnaround": 5, "kept": [5, 6, 7, 9], "wast": 5, "airtim": 5, "behaviour": [5, 10], "bring": 5, "brought": [5, 10], "access_point": 5, "shorthand": [5, 10], "ap": 5, "shorter": 5, "expiri": 5, "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10], "512": [5, 7, 9], "announce_cap": [5, 7], "maximum": [5, 7, 9], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "bitrat": 5, "report": [5, 8], "guess": 5, "per": [5, 7, 9, 11], "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "addition": [5, 9], "behalf": 5, "resid": 5, "requestor": 5, "chain": 5, "along": [5, 6, 7, 9], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "mobil": [5, 9], "seen": [5, 9], "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": 5, "impact": [5, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "enforc": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "decis": [5, 9], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "evolv": 6, "futur": [6, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9], "higher": [6, 11], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9, 11], "hellman": [6, 9, 11], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 7, 9], "keystor": 6, "degrad": 6, "term": [6, 9], "stationari": [6, 10], "candid": 6, "optim": 6, "intend": [6, 9], "trustless": [6, 9, 11], "leav": [6, 9], "free": [6, 8, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": 6, "legaci": 6, "unifi": 6, "underli": [6, 11], "carrier": [6, 11], "involv": 6, "hardlin": 6, "decid": [6, 7, 9], "illustr": [6, 9], "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "sight": 6, "becaus": [6, 9], "four": 6, "At": [6, 9], "usb": [6, 9, 10], "cabl": 6, "adapt": 6, "suppli": [6, 7, 9], "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "previous": [6, 7, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": 6, "newli": [6, 7, 9], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": 6, "find": [6, 9], "poorli": 6, "outlier": 6, "signatur": [7, 9, 11], "configdir": 7, "logdest": 7, "verbos": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "mtu": [7, 9, 11], "500": [7, 9, 11], "adher": 7, "507": 7, "break": [7, 9, 11], "prerequisit": 7, "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "drop": [7, 9, 10], "appli": [7, 9], "individu": [7, 9, 11], "static": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "create_kei": 7, "decrypt": [7, 9], "verif": [7, 9], "sign": [7, 9], "dh": 7, "keysiz": 7, "x25519": [7, 9, 11], "concaten": 7, "256": [7, 9], "128": [7, 9, 11], "constant": 7, "truncat": [7, 9], "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "feed": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9], "keyerror": 7, "hold": [7, 9], "ciphertext_token": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "path_respons": 7, "attached_interfac": 7, "tag": 7, "flag": [7, 9], "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "secreci": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "6": [7, 10], "keepalive_timeout_factor": 7, "4": [7, 9, 10], "calcul": [7, 9], "stale_grac": 7, "grace": 7, "keepal": [7, 9], "360": 7, "aliv": [7, 9], "stale_tim": 7, "720": 7, "mark": [7, 9], "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "get_establishment_r": 7, "ocur": 7, "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "whenev": [7, 9], "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "bi": [7, 9], "neither": [7, 9], "constrain": 7, "message_class": 7, "recept": 7, "messagecallbacktyp": 7, "bool": 7, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 7, "adjust": 7, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "document": [7, 9], "create_writ": 7, "receive_stream_id": 7, "send_stream_id": 7, "rawiobas": 7, "add_ready_callback": 7, "cb": [7, 9], "remove_ready_callback": 7, "pathfinder_m": 7, "attribut": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "briefli": 9, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "problem": 9, "seek": 9, "solv": 9, "solut": 9, "primari": 9, "lack": 9, "my": 9, "belief": 9, "highli": 9, "machin": 9, "censorship": [9, 11], "barrier": 9, "todai": 9, "centralis": 9, "trust": 9, "approv": 9, "gatekeep": 9, "inevit": 9, "lead": 9, "govern": 9, "alter": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "off": [9, 10, 11], "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "thousand": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "usabl": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "modifi": [9, 10], "interest": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "written": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "multi": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "capabl": 9, "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": 9, "recap": 9, "indirectli": 9, "ledger": 9, "therefor": [9, 11], "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "accord": 9, "around": 9, "topic": 9, "necessarili": 9, "person": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "asymmetr": [9, 11], "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "retransmit": 9, "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newer": 9, "newest": 9, "discard": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "travers": 9, "rememb": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "intermediari": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "rotat": 9, "memori": 9, "thereaft": 9, "297": [9, 11], "practic": [9, 11], "neglig": 9, "1200": 9, "96": 9, "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "throughput": [9, 11], "x": [9, 10], "runtim": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "recent": 9, "mac": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "ifac": [9, 10], "compos": 9, "field": 9, "context": 9, "465": 9, "vari": [9, 10], "00": [9, 10], "01": 9, "11": 9, "_______": 9, "________________": 9, "________": 9, "______": 9, "__": 9, "_": 9, "01010000": 9, "00000100": 9, "hash1": 9, "hash2": 9, "header_2": 9, "00000000": 9, "00000111": 9, "header_1": 9, "10000000": 9, "exclud": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "hkdf": 9, "fernet": [9, 11], "cbc": [9, 11], "hmac": [9, 11], "hashlib": 9, "pkcs7": [9, 11], "pad": [9, 11], "trivial": [9, 11], "consequ": 9, "backend": 9, "loss": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "pose": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "boot": 10, "edit": 10, "ie": 10, "breviti": 10, "socket": 10, "turn": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "panic": 10, "unrecover": 10, "occur": [10, 11], "panic_on_interface_error": 10, "warn": 10, "debug": 10, "unus": 10, "teach": 10, "task": 10, "v": 10, "show": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "17": 10, "tcpinterfac": 10, "dublin": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "30": 10, "kbp": 10, "e702c42ba8": 10, "49": 10, "9": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "w": 10, "posit": 10, "probe": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "decreas": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "max": 10, "fw": 10, "nocheck": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "flash": 10, "attach": 10, "older": 10, "onlin": 10, "extract": 10, "cach": 10, "bluetooth": 10, "consol": 10, "unlock": 10, "perman": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "bin": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "readili": 11, "advers": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "subject": 11, "outsid": 11, "planetari": 11, "hierarch": 11, "beaureucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "sha256": 11, "iv": 11, "urandom": 11, "intuit": 11, "friendli": 11, "44": 11, "gigabyt": 11, "scalabl": 11, "hoc": 11, "optic": 11, "transform": 11, "fact": 11, "strength": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11}, "objects": {"RNS": [[7, 0, 1, "", "Buffer"], [7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "MessageBase"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RawChannelReader"], [7, 0, 1, "", "RawChannelWriter"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Buffer": [[7, 1, 1, "", "create_bidirectional_buffer"], [7, 1, 1, "", "create_reader"], [7, 1, 1, "", "create_writer"]], "RNS.Channel": [[7, 0, 1, "", "Channel"]], "RNS.Channel.Channel": [[7, 2, 1, "", "MDU"], [7, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 1, 1, "", "register_message_type"], [7, 1, 1, "", "remove_message_handler"], [7, 1, 1, "", "send"]], "RNS.Destination": [[7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "KEYSIZE"], [7, 3, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 3, 1, "", "KEEPALIVE"], [7, 3, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 3, 1, "", "STALE_GRACE"], [7, 3, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_channel"], [7, 1, 1, "", "get_establishment_rate"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"]], "RNS.MessageBase": [[7, 3, 1, "", "MSGTYPE"], [7, 1, 1, "", "pack"], [7, 1, 1, "", "unpack"]], "RNS.Packet": [[7, 3, 1, "", "ENCRYPTED_MDU"], [7, 3, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RawChannelReader": [[7, 1, 1, "", "__init__"], [7, 1, 1, "", "add_ready_callback"], [7, 1, 1, "", "remove_ready_callback"]], "RNS.RawChannelWriter": [[7, 1, 1, "", "__init__"]], "RNS.RequestReceipt": [[7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_request_id"], [7, 1, 1, "", "get_response"], [7, 1, 1, "", "get_response_time"], [7, 1, 1, "", "get_status"]], "RNS.Resource": [[7, 1, 1, "", "advertise"], [7, 1, 1, "", "cancel"], [7, 1, 1, "", "get_data_size"], [7, 1, 1, "", "get_hash"], [7, 1, 1, "", "get_parts"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_segments"], [7, 1, 1, "", "get_transfer_size"], [7, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[7, 3, 1, "", "ANNOUNCE_CAP"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 3, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": 0, "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "an": 1, "explan": 1, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "human": 1, "Beings": 1, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "instal": [2, 3], "resolv": 2, "depend": 2, "issu": 2, "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "remot": 2, "shell": 2, "nomad": 2, "network": [2, 4, 6], "sideband": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": 2, "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": 2, "interfac": [2, 5, 9, 11], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "raspberri": 2, "pi": 2, "debian": 2, "bookworm": 2, "ubuntu": 2, "lunar": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "rnode": [3, 5], "support": [3, 5, 8], "board": 3, "lilygo": 3, "lora32": 3, "v2": 3, "1": 3, "0": 3, "t": 3, "beam": 3, "heltec": 3, "unsign": 3, "x": 3, "v1": 3, "usag": 3, "supplier": 3, "wifi": 3, "combin": 3, "type": [3, 9, 11], "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "auto": 5, "i2p": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "lora": [5, 6], "serial": [5, 10], "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "destin": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "packet": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "configur": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "devic": 11, "caveat": 11, "emptor": 11}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Channel": [[0, "channel"]], "Buffer": [[0, "buffer"]], "Filetransfer": [[0, "filetransfer"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Resolving Dependency & Installation Issues": [[2, "resolving-dependency-installation-issues"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Remote Shell": [[2, "remote-shell"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Platform-Specific Install Notes": [[2, "platform-specific-install-notes"]], "Android": [[2, "android"]], "ARM64": [[2, "arm64"]], "Raspberry Pi": [[2, "raspberry-pi"]], "Debian Bookworm": [[2, "debian-bookworm"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "Communications Hardware": [[3, "communications-hardware"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards": [[3, "supported-boards"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[3, "unsigned-rnode-v1-x"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "Suppliers": [[3, "suppliers"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Supported Interfaces": [[5, "supported-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "I2P Interface": [[5, "i2p-interface"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The rnpath Utility": [[10, "the-rnpath-utility"]], "The rnprobe Utility": [[10, "the-rnprobe-utility"]], "The rncp Utility": [[10, "the-rncp-utility"]], "The rnx Utility": [[10, "the-rnx-utility"]], "The rnodeconf Utility": [[10, "the-rnodeconf-utility"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]], "What is Reticulum?": [[11, "what-is-reticulum"]], "Current Status": [[11, "current-status"]], "What does Reticulum Offer?": [[11, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[11, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[11, "interface-types-and-devices"]], "Caveat Emptor": [[11, "caveat-emptor"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[7, "RNS.Reticulum.ANNOUNCE_CAP"]], "buffer (class in rns)": [[7, "RNS.Buffer"]], "curve (rns.identity attribute)": [[7, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[7, "RNS.Link.CURVE"]], "channel (class in rns.channel)": [[7, "RNS.Channel.Channel"]], "destination (class in rns)": [[7, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[7, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[7, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[7, "RNS.Identity"]], "keepalive (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[7, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[7, "RNS.Link"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.MDU"]], "msgtype (rns.messagebase attribute)": [[7, "RNS.MessageBase.MSGTYPE"]], "mtu (rns.reticulum attribute)": [[7, "RNS.Reticulum.MTU"]], "messagebase (class in rns)": [[7, "RNS.MessageBase"]], "pathfinder_m (rns.transport attribute)": [[7, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[7, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[7, "RNS.Packet"]], "packetreceipt (class in rns)": [[7, "RNS.PacketReceipt"]], "rawchannelreader (class in rns)": [[7, "RNS.RawChannelReader"]], "rawchannelwriter (class in rns)": [[7, "RNS.RawChannelWriter"]], "requestreceipt (class in rns)": [[7, "RNS.RequestReceipt"]], "resource (class in rns)": [[7, "RNS.Resource"]], "reticulum (class in rns)": [[7, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[7, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[7, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[7, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[7, "RNS.Transport"]], "__init__() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.__init__"]], "__init__() (rns.rawchannelwriter method)": [[7, "RNS.RawChannelWriter.__init__"]], "accepts_links() (rns.destination method)": [[7, "RNS.Destination.accepts_links"]], "add_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.add_message_handler"]], "add_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.add_ready_callback"]], "advertise() (rns.resource method)": [[7, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[7, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[7, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[7, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[7, "RNS.Destination.clear_default_app_data"]], "create_bidirectional_buffer() (rns.buffer static method)": [[7, "RNS.Buffer.create_bidirectional_buffer"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "create_reader() (rns.buffer static method)": [[7, "RNS.Buffer.create_reader"]], "create_writer() (rns.buffer static method)": [[7, "RNS.Buffer.create_writer"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_channel() (rns.link method)": [[7, "RNS.Link.get_channel"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_establishment_rate() (rns.link method)": [[7, "RNS.Link.get_establishment_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "is_ready_to_send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.is_ready_to_send"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_inbound_for() (rns.link method)": [[7, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[7, "RNS.Link.no_outbound_for"]], "pack() (rns.messagebase method)": [[7, "RNS.MessageBase.pack"]], "recall() (rns.identity static method)": [[7, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[7, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.register_announce_handler"]], "register_message_type() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.register_message_type"]], "register_request_handler() (rns.destination method)": [[7, "RNS.Destination.register_request_handler"]], "remove_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.remove_message_handler"]], "remove_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.remove_ready_callback"]], "request() (rns.link method)": [[7, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[7, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[7, "RNS.Packet.resend"]], "send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.send"]], "send() (rns.packet method)": [[7, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[7, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[7, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[7, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[7, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[7, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[7, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[7, "RNS.Destination.set_proof_strategy"]], "set_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "unpack() (rns.messagebase method)": [[7, "RNS.MessageBase.unpack"]], "validate() (rns.identity method)": [[7, "RNS.Identity.validate"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 11], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9], "your": [0, 2, 3, 4, 5, 6, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": 0, "minimum": [0, 5, 6, 9], "setup": [0, 2, 4, 5], "requir": [0, 2, 5, 6, 9, 10, 11], "connect": [0, 3, 4, 5, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 3, 5, 6, 9, 10, 11], "have": [0, 2, 3, 5, 6, 7, 9, 10], "stack": [0, 2, 6, 7, 9, 10, 11], "initialis": [0, 7, 10], "readi": [0, 2, 3, 5, 6, 7, 11], "pass": [0, 3, 5, 6, 7, 9, 10], "traffic": [0, 2, 5, 6, 7, 9, 10], "thi": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "rn": [0, 2, 3, 7, 9, 10], "start": [0, 3, 4, 5, 7, 9, 10], "up": [0, 2, 3, 5, 6, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 5, 6, 7, 9, 10], "destin": [0, 2, 4, 5, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 7, 8, 9], "argpars": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": [0, 10], "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "exist": [0, 2, 3, 5, 9, 10, 11], "which": [0, 2, 5, 6, 7, 9, 10], "know": [0, 2, 3, 6, 7, 9, 11], "thei": [0, 2, 5, 6, 7, 9, 10], "reachabl": [0, 2, 5, 6, 7, 9, 10], "autoomat": 0, "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 5, 6, 7, 9, 11], "automat": [0, 2, 3, 5, 6, 7, 9, 10, 11], "prove": [0, 9], "packet": [0, 2, 3, 4, 5, 6, 7, 10, 11], "adress": [0, 7, 9], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 6, 7, 9, 10], "tri": 0, "whether": [0, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": 0, "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 7, 10], "client": [0, 2, 3, 4, 7], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 10], "get": [0, 3, 4, 5, 7, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 6, 10], "action": 0, "store": [0, 3, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 3, 6, 8, 9, 10, 11], "altern": [0, 5, 10], "directori": [0, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5, 7], "keyboardinterrupt": 0, "print": [0, 5, 10], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 5, 6, 7, 9, 10, 11], "arriv": [0, 9], "random": [0, 7, 9], "two": [0, 2, 3, 5, 6, 7, 9], "list": [0, 2, 3, 5, 7, 9, 11], "string": [0, 7], "app_data": [0, 7], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 2], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 2, 3, 6, 9, 11], "destination_1": 0, "destination_2": 0, "handler": [0, 7], "onli": [0, 2, 3, 5, 6, 7, 9, 10, 11], "ask": [0, 2, 3, 7], "chang": [0, 2, 5, 7, 9, 10, 11], "filter": [0, 6, 9], "see": [0, 2, 5, 6, 7, 9, 10, 11], "what": [0, 2, 4, 7, 9], "happen": [0, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "0": [0, 2, 5, 7, 9, 10, 11], "len": 0, "1": [0, 2, 5, 7, 9, 10], "data": [0, 2, 4, 5, 6, 7, 9, 11], "encod": [0, 7], "utf": 0, "8": [0, 5, 10], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "class": [0, 6, 7, 11], "method": [0, 2, 5, 7, 9], "take": [0, 2, 5, 9, 10, 11], "option": [0, 2, 3, 4, 6, 7, 9, 10], "argument": [0, 7, 10], "instanc": [0, 4, 5, 7, 9, 10], "some": [0, 2, 3, 5, 6, 7, 9, 10], "want": [0, 2, 3, 5, 6, 9, 10, 11], "aspect": [0, 3, 5, 7, 9], "__init__": [0, 7], "self": [0, 6, 11], "call": [0, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10, 11], "cannot": [0, 2, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 7, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 5, 9, 10], "sy": 0, "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": 0, "channelarg": 0, "between": [0, 5, 6, 7, 9], "interfac": [0, 3, 4, 6, 7, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 9, 11], "server_ident": 0, "queri": [0, 2, 7], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 7, 9], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 11], "wai": [0, 2, 5, 6, 7, 9], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 7, 9, 10], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9, 10], "go": [0, 2, 5, 9], "handl": [0, 3, 5, 6, 7, 9, 10, 11], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 5, 10], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 7, 9], "represent": [0, 7], "command": [0, 2, 5, 10], "dest_len": 0, "truncated_hashlength": [0, 7], "2": [0, 5, 7, 9, 10], "rais": [0, 7], "valueerror": [0, 7], "length": [0, 5, 7, 9], "invalid": [0, 7], "hex": 0, "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7], "kei": [0, 4, 6, 7, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7], "modul": [0, 2, 3, 9, 10, 11], "known": [0, 7, 9, 10], "return": [0, 7, 10], "outgo": [0, 5, 7, 9, 10], "got": 0, "correct": [0, 9], "convent": 0, "request_destin": 0, "add": [0, 2, 5, 6, 7, 10], "echo_request": 0, "get_random_hash": [0, 7], "successfulli": [0, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 2, 5, 9, 11], "retri": [0, 7, 9], "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 2, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 4, 7, 10], "forth": 0, "o": [0, 2, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": [0, 7], "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 2, 5, 10], "_exit": 0, "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "sendig": 0, "perform": [0, 2, 5, 6, 9], "random_text_gener": 0, "request_id": [0, 7], "link_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "structur": [0, 7, 9, 11], "datetim": 0, "vendor": [0, 3], "umsgpack": 0, "share": [0, 2, 6, 7, 9, 10], "object": [0, 7], "subclass": [0, 7], "messagebas": [0, 4, 7], "ensur": [0, 5, 7, 9, 11], "serial": [0, 2, 3, 4, 9, 11], "deseri": 0, "multiplex": 0, "other": [0, 2, 3, 5, 6, 7, 9, 10], "both": [0, 2, 3, 5, 6, 7, 9, 10, 11], "same": [0, 2, 3, 5, 6, 7, 9, 10], "definit": [0, 9], "note": [0, 3, 4, 5, 7, 9, 10], "wish": [0, 9, 10], "make": [0, 2, 3, 5, 8, 9, 10], "stringmessag": 0, "convei": 0, "timestamp": 0, "msgtype": [0, 7], "variabl": [0, 7], "assign": [0, 9, 10], "integ": 0, "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 7, 9, 11], "across": [0, 3, 6], "0xf000": [0, 7], "reserv": [0, 7, 9], "0x0101": 0, "callabl": [0, 7], "paramet": [0, 3, 5, 6, 7, 9, 10], "empti": 0, "version": [0, 2, 9, 10], "unpack": [0, 7], "final": [0, 7, 9], "implement": [0, 5, 6, 7, 8, 9, 11], "pack": [0, 7], "raw": [0, 3, 7], "payload": [0, 7, 9], "packag": [0, 2, 5, 9], "bundl": 0, "could": [0, 2, 5, 6, 7, 9, 11], "struct": 0, "python": [0, 4, 7, 9, 10, 11], "more": [0, 2, 3, 5, 6, 7, 9, 10, 11], "fit": 0, "entir": [0, 6, 7, 9, 10], "avail": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "properti": [0, 6, 7], "slightli": [0, 2], "less": [0, 5, 7, 9, 11], "due": [0, 6], "header": [0, 7, 9], "content": [0, 2, 6, 10], "stream": [0, 7, 9], "packb": 0, "unpackb": 0, "channelexampl": 0, "get_channel": [0, 7], "register_message_typ": [0, 7], "add_message_handl": [0, 7], "server_message_receiv": 0, "param": 0, "deserializ": 0, "unless": [0, 2, 5, 7, 9], "preced": 0, "indic": 0, "isinst": 0, "reply_messag": 0, "order": [0, 7, 10], "were": [0, 6], "consid": [0, 7, 9, 11], "subsequ": [0, 9], "skip": 0, "packed_s": 0, "is_ready_to_send": [0, 7], "pleas": [0, 2, 5, 7, 10, 11], "pend": 0, "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "client_message_receiv": 0, "reader": [0, 7], "writer": [0, 7], "__future__": 0, "annot": 0, "latest_buff": 0, "bufferexampl": 0, "old": [0, 3, 8, 9], "stream_id": [0, 7], "bit": [0, 2, 5, 7, 9, 10, 11], "like": [0, 2, 3, 5, 6, 7, 9, 10, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "descriptor": 0, "actual": [0, 2, 5, 9], "separ": [0, 2, 5, 6, 9, 10], "unidirect": 0, "flow": [0, 5, 6], "opposit": [0, 5], "create_bidirectional_buff": [0, 7], "server_buffer_readi": 0, "ready_byt": [0, 7], "int": [0, 7], "otherwis": [0, 7], "forc": [0, 10], "server_client_connect": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "client_buffer_readi": 0, "termin": [0, 2, 7], "download": [0, 5, 10], "resourc": [0, 2, 4, 7, 8], "effici": [0, 2, 5, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 9], "compress": [0, 7, 9], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 7, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "prepar": [0, 6], "instead": [0, 2, 5, 9, 10], "slice": 0, "chunk": 0, "suitabl": [0, 2, 5, 6, 9, 11], "thread": 0, "app_timeout": 0, "45": [0, 9], "serve_path": 0, "here": [0, 2, 3, 5, 9, 10], "conveni": 0, "list_fil": 0, "entri": [0, 2, 9], "listdir": 0, "isfil": 0, "join": [0, 2, 6, 8, 9], "host": [0, 2, 5, 9, 10], "still": [0, 2, 6, 9], "isdir": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 6], "mani": [0, 2, 3, 5, 6, 7, 9, 10, 11], "split": 0, "filelist": 0, "multipl": [0, 5, 6, 9, 10], "hint": 0, "alreadi": [0, 2, 3, 6, 7, 9, 10], "support": [0, 2, 4, 6, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 2, 6, 9, 10], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 5], "don": [0, 2, 6, 7, 10], "unknown": [0, 5, 7, 9], "conclud": [0, 7], "hasattr": 0, "server_fil": 0, "current": [0, 2, 4, 5, 7, 9], "current_download": 0, "current_filenam": 0, "statist": [0, 5, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 5, 7, 9, 10], "normal": [0, 5, 7, 10], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "clear_screen": 0, "print_filelist": 0, "percent": [0, 5], "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": [0, 5], "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 7, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "extend": [0, 2, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 9, 11], "job": 0, "potenti": [0, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 7, 11], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 7, 8, 9], "readabl": [0, 7, 9], "num": 0, "unit": [0, 2, 7, 10], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 9], "pi": [0, 4, 6, 9, 10, 11], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 2, 9, 10], "g": 0, "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "best": [2, 9, 11], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "pip": [2, 3, 10], "manag": [2, 6, 7, 9, 10, 11], "sudo": [2, 10], "apt": 2, "python3": [2, 3], "pamac": 2, "similar": [2, 3, 5, 6, 7, 10, 11], "dowload": 2, "releas": [2, 5, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "offlin": 2, "py3": 2, "whl": 2, "mai": [2, 5, 7, 9, 10], "case": [2, 3, 5, 6, 9, 10], "usual": 2, "essenti": [2, 5, 9], "deriv": [2, 7, 9, 11], "arch": 2, "manjaro": 2, "devel": 2, "fedora": 2, "dnf": 2, "groupinstal": 2, "tool": [2, 3, 9, 10, 11], "librari": 2, "compil": 2, "miss": 2, "even": [2, 5, 6, 9, 10, 11], "pre": [2, 7, 9], "built": [2, 5, 9, 11], "few": [2, 3, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 7, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 3, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "without": [2, 3, 6, 9, 11], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "devic": [2, 3, 4, 5, 6, 7, 9, 10], "enough": [2, 3, 9], "physic": [2, 3, 5, 9, 10], "rnsh": 2, "fulli": [2, 3, 9, 10, 11], "session": [2, 9], "pipe": [2, 4, 11], "ssh": 2, "suit": [2, 3, 9, 10], "featur": [2, 8, 9, 11], "delai": [2, 5, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 10, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": 2, "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "might": [2, 5, 6, 9, 10], "reboot": 2, "again": [2, 5, 9, 10], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 9], "maco": 2, "peopl": [2, 9], "compat": [2, 3, 5, 7, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "come": [2, 9], "easier": [2, 5, 6, 10], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "locat": [2, 3, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "thing": 2, "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "utilis": [2, 5, 6, 7, 10, 11], "extern": [2, 5, 7, 11], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "gatewai": [2, 5, 6, 9], "enabl": [2, 3, 5, 6, 7, 9, 10, 11], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": 2, "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "lower": [2, 5, 10], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "record": [2, 9], "metadata": 2, "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": 2, "most": [2, 3, 5, 6, 9, 10], "anymor": 2, "through": [2, 3, 5, 6, 7, 9, 10, 11], "invis": [2, 5], "daemon": [2, 5, 7, 10], "parallel": 2, "For": [2, 3, 5, 6, 7, 9, 10, 11], "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "experiment": [2, 11], "made": [2, 7, 9], "amsterdam": 2, "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "betweenthebord": 2, "4242": [2, 5], "g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9], "failur": [2, 5], "guarante": [2, 9], "hardwar": [2, 4, 5, 6, 7, 9, 10, 11], "wide": [2, 3, 5, 9, 11], "section": [2, 3, 5, 6, 9, 10], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "custom": [2, 5, 7, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": [2, 4], "addit": [2, 3, 5, 7, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "pip3": [2, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "step": [2, 3], "pyseri": 2, "api": [2, 4, 9, 11], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "folder": 2, "symlink": [2, 10], "cd": 2, "ln": [2, 10], "echo": [2, 4, 10], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "process": [2, 3, 5, 7, 9], "h": [2, 10], "ping": [2, 10], "replac": [2, 9, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "place": [2, 6, 9, 10], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 9], "termux": 2, "f": 2, "droid": 2, "emul": 2, "environ": [2, 6, 9], "abil": [2, 3], "pkg": 2, "sure": [2, 3, 10], "upgrad": [2, 9], "Then": 2, "reason": [2, 5, 9], "attempt": [2, 3, 7], "openssl": [2, 9], "libffi": 2, "rust": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "apk": 2, "tutori": 2, "code": [2, 3, 4, 5, 10], "startig": 2, "architectur": 2, "precompil": 2, "dev": [2, 5, 10], "64": [2, 9, 10], "32": [2, 9], "rasperri": 2, "os": [2, 5], "april": 2, "2023": 2, "onto": [2, 9], "unfortun": 2, "pipx": 2, "isol": [2, 5, 10], "neg": 2, "affect": [2, 5], "ensurepath": 2, "rare": [2, 5], "obscur": 2, "unusu": 2, "rnspure": 2, "No": [2, 5, 9, 10, 11], "matter": [2, 5], "perfectli": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 11], "primit": [2, 4], "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "conceiv": 3, "kind": [3, 5, 6, 9], "medium": [3, 5, 6, 7, 9, 11], "flexibl": [3, 5, 11], "cover": [3, 9, 11], "wireless": [3, 6], "decad": 3, "radio": [3, 4, 5, 6, 7, 9, 10, 11], "modem": [3, 5, 6, 7, 9, 11], "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "oper": [3, 5, 6, 7, 9, 10, 11], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "broad": 3, "abund": 3, "sometim": 3, "especi": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "emploi": [3, 9], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": 3, "either": [3, 5, 6, 7, 9, 10], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "particular": 3, "plaform": 3, "depend": [3, 4, 6, 7, 9, 10], "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "limit": [3, 5, 6, 9], "common": [3, 4, 6, 9, 10, 11], "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "overhead": [3, 5, 9], "high": [3, 5, 9, 11], "level": [3, 5, 9, 10], "directli": [3, 5, 7, 9, 10, 11], "replic": [3, 9], "togeth": [3, 9, 10], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 7, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1276": 3, "platform": [3, 4, 9], "esp32": 3, "manufactur": 3, "io": 3, "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "question": [3, 5], "port": [3, 4, 5, 6, 9, 11], "air": [3, 11], "id": [3, 5, 7, 9, 10], "itself": [3, 4, 9], "touch": [3, 11], "produc": 3, "short": [3, 5, 9, 10], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "capac": [3, 5, 7, 9], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 9, 11], "cheap": [3, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "pattern": [3, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": 3, "area": [3, 5, 6, 9, 11], "aim": [4, 9], "particip": [4, 6, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "instal": [4, 5, 6, 9, 10, 11], "resolv": [4, 5], "issu": [4, 6, 8], "base": [4, 5, 6, 7, 9, 10, 11], "shell": [4, 10], "nomad": 4, "sideband": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "android": 4, "arm64": 4, "raspberri": [4, 6, 9, 10, 11], "debian": [4, 9, 10], "bookworm": 4, "ubuntu": [4, 10], "lunar": 4, "pure": [4, 9], "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "rule": [4, 5], "udp": [4, 6, 9, 10, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 7, 9], "buffer": [4, 5, 7], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9], "endless": 5, "describ": [5, 7, 9], "give": [5, 9, 10], "respect": [5, 11], "discover": 5, "autoconfigur": [5, 11], "ipv6": [5, 10], "router": [5, 10], "sort": [5, 9], "switch": [5, 9, 10], "interface_en": [5, 10], "lan": 5, "group": [5, 7, 9], "group_id": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "multicast": 5, "autodiscov": 5, "discoveri": [5, 9, 10], "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "frequent": 5, "block": 5, "inbound": [5, 7], "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "event": 5, "simplest": [5, 9], "tunnel": [5, 9, 11], "interchang": 5, "degre": 5, "retain": 5, "eas": [5, 9], "simpler": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "restor": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "tnc": [5, 7, 10, 11], "8001": 5, "caution": 5, "frame": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "intern": [5, 7, 9], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": 5, "udpinterfac": 5, "forward_ip": 5, "255": 5, "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "segment": [5, 6, 7, 9, 11], "cours": [5, 9], "15": 5, "16": [5, 9, 10], "ttyusb0": [5, 10], "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "7": [5, 9, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "12": [5, 10], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "amount": [5, 6, 7, 9, 11], "ram": 5, "flow_control": 5, "airtim": 5, "term": [5, 6, 9], "appli": [5, 7, 9], "window": 5, "approxim": 5, "enforc": 5, "roll": 5, "airtime_limit_long": 5, "airtime_limit_short": 5, "33": 5, "pair": [5, 7, 9, 10], "laser": 5, "serialinterfac": 5, "baud": 5, "speed": [5, 9, 10], "115200": [5, 10], "databit": [5, 10], "pariti": [5, 10], "stopbit": [5, 10], "stdin": [5, 10], "virtual": [5, 6, 9, 10, 11], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 7, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "period": [5, 7, 9], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "amateur": [5, 11], "spectrum": [5, 9], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 10], "squelch": 5, "rx": 5, "turnaround": 5, "kept": [5, 6, 7, 9], "wast": 5, "behaviour": [5, 10], "bring": 5, "brought": [5, 10], "access_point": 5, "shorthand": [5, 10], "ap": 5, "shorter": 5, "expiri": 5, "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10], "512": [5, 7, 9], "announce_cap": [5, 7], "maximum": [5, 7, 9], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "bitrat": 5, "report": [5, 8], "guess": 5, "per": [5, 7, 9, 11], "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "addition": [5, 9], "behalf": 5, "resid": 5, "requestor": 5, "chain": 5, "along": [5, 6, 7, 9], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "mobil": [5, 9], "seen": [5, 9], "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": 5, "impact": [5, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "decis": [5, 9], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "evolv": 6, "futur": [6, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9], "higher": [6, 11], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9, 11], "hellman": [6, 9, 11], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 7, 9], "keystor": 6, "degrad": 6, "stationari": [6, 10], "candid": 6, "optim": 6, "intend": [6, 9], "trustless": [6, 9, 11], "leav": [6, 9], "free": [6, 8, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": 6, "legaci": 6, "unifi": 6, "underli": [6, 11], "carrier": [6, 11], "involv": 6, "hardlin": 6, "decid": [6, 7, 9], "illustr": [6, 9], "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "sight": 6, "becaus": [6, 9], "four": 6, "At": [6, 9], "usb": [6, 9, 10], "cabl": 6, "adapt": 6, "suppli": [6, 7, 9], "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "previous": [6, 7, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": 6, "newli": [6, 7, 9], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": 6, "find": [6, 9], "poorli": 6, "outlier": 6, "signatur": [7, 9, 11], "configdir": 7, "logdest": 7, "verbos": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "mtu": [7, 9, 11], "500": [7, 9, 11], "adher": 7, "507": 7, "break": [7, 9, 11], "prerequisit": 7, "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "drop": [7, 9, 10], "individu": [7, 9, 11], "static": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "create_kei": 7, "decrypt": [7, 9], "verif": [7, 9], "sign": [7, 9], "dh": 7, "keysiz": 7, "x25519": [7, 9, 11], "concaten": 7, "256": [7, 9], "128": [7, 9, 11], "constant": 7, "truncat": [7, 9], "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "feed": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9], "keyerror": 7, "hold": [7, 9], "ciphertext_token": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "path_respons": 7, "attached_interfac": 7, "tag": 7, "flag": [7, 9], "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "secreci": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "6": [7, 10], "keepalive_timeout_factor": 7, "4": [7, 9, 10], "calcul": [7, 9], "stale_grac": 7, "grace": 7, "keepal": [7, 9], "360": 7, "aliv": [7, 9], "stale_tim": 7, "720": 7, "mark": [7, 9], "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "get_establishment_r": 7, "ocur": 7, "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "whenev": [7, 9], "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "bi": [7, 9], "neither": [7, 9], "constrain": 7, "message_class": 7, "recept": 7, "messagecallbacktyp": 7, "bool": 7, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 7, "adjust": 7, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "document": [7, 9], "create_writ": 7, "receive_stream_id": 7, "send_stream_id": 7, "rawiobas": 7, "add_ready_callback": 7, "cb": [7, 9], "remove_ready_callback": 7, "pathfinder_m": 7, "attribut": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "briefli": 9, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "problem": 9, "seek": 9, "solv": 9, "solut": 9, "primari": 9, "lack": 9, "my": 9, "belief": 9, "highli": 9, "machin": 9, "censorship": [9, 11], "barrier": 9, "todai": 9, "centralis": 9, "trust": 9, "approv": 9, "gatekeep": 9, "inevit": 9, "lead": 9, "govern": 9, "alter": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "off": [9, 10, 11], "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "thousand": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "usabl": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "modifi": [9, 10], "interest": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "written": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "multi": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "capabl": 9, "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": 9, "recap": 9, "indirectli": 9, "ledger": 9, "therefor": [9, 11], "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "accord": 9, "around": 9, "topic": 9, "necessarili": 9, "person": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "asymmetr": [9, 11], "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "retransmit": 9, "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newer": 9, "newest": 9, "discard": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "travers": 9, "rememb": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "intermediari": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "rotat": 9, "memori": 9, "thereaft": 9, "297": [9, 11], "practic": [9, 11], "neglig": 9, "1200": 9, "96": 9, "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "throughput": [9, 11], "x": [9, 10], "runtim": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "recent": 9, "mac": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "ifac": [9, 10], "compos": 9, "field": 9, "context": 9, "465": 9, "vari": [9, 10], "00": [9, 10], "01": 9, "11": 9, "_______": 9, "________________": 9, "________": 9, "______": 9, "__": 9, "_": 9, "01010000": 9, "00000100": 9, "hash1": 9, "hash2": 9, "header_2": 9, "00000000": 9, "00000111": 9, "header_1": 9, "10000000": 9, "exclud": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "hkdf": 9, "fernet": [9, 11], "cbc": [9, 11], "hmac": [9, 11], "hashlib": 9, "pkcs7": [9, 11], "pad": [9, 11], "trivial": [9, 11], "consequ": 9, "backend": 9, "loss": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "pose": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "boot": 10, "edit": 10, "ie": 10, "breviti": 10, "socket": 10, "turn": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "panic": 10, "unrecover": 10, "occur": [10, 11], "panic_on_interface_error": 10, "warn": 10, "debug": 10, "unus": 10, "teach": 10, "task": 10, "v": 10, "show": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "17": 10, "tcpinterfac": 10, "dublin": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "30": 10, "kbp": 10, "e702c42ba8": 10, "49": 10, "9": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "w": 10, "posit": 10, "probe": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "decreas": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "max": 10, "fw": 10, "nocheck": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "flash": 10, "attach": 10, "older": 10, "onlin": 10, "extract": 10, "cach": 10, "bluetooth": 10, "consol": 10, "unlock": 10, "perman": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "bin": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "readili": 11, "advers": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "subject": 11, "outsid": 11, "planetari": 11, "hierarch": 11, "beaureucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "sha256": 11, "iv": 11, "urandom": 11, "intuit": 11, "friendli": 11, "44": 11, "gigabyt": 11, "scalabl": 11, "hoc": 11, "optic": 11, "transform": 11, "fact": 11, "strength": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11}, "objects": {"RNS": [[7, 0, 1, "", "Buffer"], [7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "MessageBase"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RawChannelReader"], [7, 0, 1, "", "RawChannelWriter"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Buffer": [[7, 1, 1, "", "create_bidirectional_buffer"], [7, 1, 1, "", "create_reader"], [7, 1, 1, "", "create_writer"]], "RNS.Channel": [[7, 0, 1, "", "Channel"]], "RNS.Channel.Channel": [[7, 2, 1, "", "MDU"], [7, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 1, 1, "", "register_message_type"], [7, 1, 1, "", "remove_message_handler"], [7, 1, 1, "", "send"]], "RNS.Destination": [[7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "KEYSIZE"], [7, 3, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 3, 1, "", "KEEPALIVE"], [7, 3, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 3, 1, "", "STALE_GRACE"], [7, 3, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_channel"], [7, 1, 1, "", "get_establishment_rate"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"]], "RNS.MessageBase": [[7, 3, 1, "", "MSGTYPE"], [7, 1, 1, "", "pack"], [7, 1, 1, "", "unpack"]], "RNS.Packet": [[7, 3, 1, "", "ENCRYPTED_MDU"], [7, 3, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RawChannelReader": [[7, 1, 1, "", "__init__"], [7, 1, 1, "", "add_ready_callback"], [7, 1, 1, "", "remove_ready_callback"]], "RNS.RawChannelWriter": [[7, 1, 1, "", "__init__"]], "RNS.RequestReceipt": [[7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_request_id"], [7, 1, 1, "", "get_response"], [7, 1, 1, "", "get_response_time"], [7, 1, 1, "", "get_status"]], "RNS.Resource": [[7, 1, 1, "", "advertise"], [7, 1, 1, "", "cancel"], [7, 1, 1, "", "get_data_size"], [7, 1, 1, "", "get_hash"], [7, 1, 1, "", "get_parts"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_segments"], [7, 1, 1, "", "get_transfer_size"], [7, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[7, 3, 1, "", "ANNOUNCE_CAP"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 3, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": 0, "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "an": 1, "explan": 1, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "human": 1, "Beings": 1, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "instal": [2, 3], "resolv": 2, "depend": 2, "issu": 2, "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "remot": 2, "shell": 2, "nomad": 2, "network": [2, 4, 6], "sideband": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": 2, "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": 2, "interfac": [2, 5, 9, 11], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "raspberri": 2, "pi": 2, "debian": 2, "bookworm": 2, "ubuntu": 2, "lunar": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "rnode": [3, 5], "support": [3, 5, 8], "board": 3, "lilygo": 3, "lora32": 3, "v2": 3, "1": 3, "0": 3, "t": 3, "beam": 3, "heltec": 3, "unsign": 3, "x": 3, "v1": 3, "usag": 3, "supplier": 3, "wifi": 3, "combin": 3, "type": [3, 9, 11], "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "auto": 5, "i2p": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "lora": [5, 6], "serial": [5, 10], "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "destin": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "packet": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "configur": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "devic": 11, "caveat": 11, "emptor": 11}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Channel": [[0, "channel"]], "Buffer": [[0, "buffer"]], "Filetransfer": [[0, "filetransfer"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Resolving Dependency & Installation Issues": [[2, "resolving-dependency-installation-issues"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Remote Shell": [[2, "remote-shell"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Platform-Specific Install Notes": [[2, "platform-specific-install-notes"]], "Android": [[2, "android"]], "ARM64": [[2, "arm64"]], "Raspberry Pi": [[2, "raspberry-pi"]], "Debian Bookworm": [[2, "debian-bookworm"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "Communications Hardware": [[3, "communications-hardware"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards": [[3, "supported-boards"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[3, "unsigned-rnode-v1-x"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "Suppliers": [[3, "suppliers"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Supported Interfaces": [[5, "supported-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "I2P Interface": [[5, "i2p-interface"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The rnpath Utility": [[10, "the-rnpath-utility"]], "The rnprobe Utility": [[10, "the-rnprobe-utility"]], "The rncp Utility": [[10, "the-rncp-utility"]], "The rnx Utility": [[10, "the-rnx-utility"]], "The rnodeconf Utility": [[10, "the-rnodeconf-utility"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]], "What is Reticulum?": [[11, "what-is-reticulum"]], "Current Status": [[11, "current-status"]], "What does Reticulum Offer?": [[11, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[11, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[11, "interface-types-and-devices"]], "Caveat Emptor": [[11, "caveat-emptor"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[7, "RNS.Reticulum.ANNOUNCE_CAP"]], "buffer (class in rns)": [[7, "RNS.Buffer"]], "curve (rns.identity attribute)": [[7, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[7, "RNS.Link.CURVE"]], "channel (class in rns.channel)": [[7, "RNS.Channel.Channel"]], "destination (class in rns)": [[7, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[7, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[7, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[7, "RNS.Identity"]], "keepalive (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[7, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[7, "RNS.Link"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.MDU"]], "msgtype (rns.messagebase attribute)": [[7, "RNS.MessageBase.MSGTYPE"]], "mtu (rns.reticulum attribute)": [[7, "RNS.Reticulum.MTU"]], "messagebase (class in rns)": [[7, "RNS.MessageBase"]], "pathfinder_m (rns.transport attribute)": [[7, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[7, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[7, "RNS.Packet"]], "packetreceipt (class in rns)": [[7, "RNS.PacketReceipt"]], "rawchannelreader (class in rns)": [[7, "RNS.RawChannelReader"]], "rawchannelwriter (class in rns)": [[7, "RNS.RawChannelWriter"]], "requestreceipt (class in rns)": [[7, "RNS.RequestReceipt"]], "resource (class in rns)": [[7, "RNS.Resource"]], "reticulum (class in rns)": [[7, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[7, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[7, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[7, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[7, "RNS.Transport"]], "__init__() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.__init__"]], "__init__() (rns.rawchannelwriter method)": [[7, "RNS.RawChannelWriter.__init__"]], "accepts_links() (rns.destination method)": [[7, "RNS.Destination.accepts_links"]], "add_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.add_message_handler"]], "add_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.add_ready_callback"]], "advertise() (rns.resource method)": [[7, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[7, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[7, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[7, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[7, "RNS.Destination.clear_default_app_data"]], "create_bidirectional_buffer() (rns.buffer static method)": [[7, "RNS.Buffer.create_bidirectional_buffer"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "create_reader() (rns.buffer static method)": [[7, "RNS.Buffer.create_reader"]], "create_writer() (rns.buffer static method)": [[7, "RNS.Buffer.create_writer"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_channel() (rns.link method)": [[7, "RNS.Link.get_channel"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_establishment_rate() (rns.link method)": [[7, "RNS.Link.get_establishment_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "is_ready_to_send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.is_ready_to_send"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_inbound_for() (rns.link method)": [[7, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[7, "RNS.Link.no_outbound_for"]], "pack() (rns.messagebase method)": [[7, "RNS.MessageBase.pack"]], "recall() (rns.identity static method)": [[7, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[7, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.register_announce_handler"]], "register_message_type() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.register_message_type"]], "register_request_handler() (rns.destination method)": [[7, "RNS.Destination.register_request_handler"]], "remove_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.remove_message_handler"]], "remove_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.remove_ready_callback"]], "request() (rns.link method)": [[7, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[7, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[7, "RNS.Packet.resend"]], "send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.send"]], "send() (rns.packet method)": [[7, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[7, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[7, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[7, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[7, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[7, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[7, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[7, "RNS.Destination.set_proof_strategy"]], "set_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "unpack() (rns.messagebase method)": [[7, "RNS.MessageBase.unpack"]], "validate() (rns.identity method)": [[7, "RNS.Identity.validate"]]}}) \ No newline at end of file