From c49c93ae3ca82680a7d0ecb6c6d9f417ae3cb8a2 Mon Sep 17 00:00:00 2001 From: zicla Date: Tue, 2 Jan 2018 14:33:09 +0800 Subject: [PATCH] Update the readme file and the interface document. --- README.md | 6 +- build/doc/alien_zh.md | 137 +++++++++++++++++++++++++++ build/doc/img/download-time-line.png | Bin 0 -> 38337 bytes build/doc/img/upload-time-line.png | Bin 0 -> 50404 bytes 4 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 build/doc/alien_zh.md create mode 100644 build/doc/img/download-time-line.png create mode 100644 build/doc/img/upload-time-line.png diff --git a/README.md b/README.md index 825fad3..c9fc4fd 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ 蓝眼云盘是 [蓝眼系列开源软件](https://github.com/eyebluecn) 中的第一个 - 主要用于快速搭建私人云盘,可以简单理解为部署在自己服务器上的[百度云盘](https://pan.baidu.com/)。 -- 蓝眼云盘提供了编程接口,可以使用接口上传文件,作为其他网站、系统、app的资源存储器,可以当作单机版的[七牛云](https://www.qiniu.com)或[阿里云OSS](https://www.aliyun.com/product/oss)使用。在即将发布的[《蓝眼博客》](https://github.com/eyebluecn/blog)软件中将会有详细的使用。 +- 蓝眼云盘提供了[编程接口](https://github.com/eyebluecn/tank/blob/master/build/doc/alien_zh.md),可以使用接口上传文件,作为其他网站、系统、app的资源存储器,可以当作单机版的[七牛云](https://www.qiniu.com)或[阿里云OSS](https://www.aliyun.com/product/oss)使用。在即将发布的[《蓝眼博客》](https://github.com/eyebluecn/blog)软件中将会有详细的使用。 - 蓝眼云盘还提供了账号管理系统,超级管理员可以管理用户,查看用户文件,普通用户只能查看自己的文件,修改自己的资料。上面提供的体验账号就是一个普通用户的账号。 蓝眼云盘可以作为团队内部或个人私有的云盘使用,亦可当作专门处理图片,音频,视频等二进制文件的第三方编程辅助工具。 @@ -143,6 +143,10 @@ cd tank/build/pack/ 利用得到的安装包即可参考上文的`使用安装包安装`。 +### 文档 + +[编程接口](https://github.com/eyebluecn/tank/blob/master/build/doc/alien_zh.md) + ### Contribution 感谢所有蓝眼云盘的贡献者 [@zicla](https://github.com/zicla),[@seaheart](https://github.com/seaheart),@heying,[@hxsherry](https://github.com/hxsherry) diff --git a/build/doc/alien_zh.md b/build/doc/alien_zh.md new file mode 100644 index 0000000..0a23a7c --- /dev/null +++ b/build/doc/alien_zh.md @@ -0,0 +1,137 @@ +# 蓝眼云盘编程接口 + +蓝眼云盘提供了编程接口,可以使用接口上传文件,作为其他网站、系统、app的资源存储器,可以当作单机版的[七牛云](https://www.qiniu.com)或[阿里云OSS](https://www.aliyun.com/product/oss)使用。在即将发布的[《蓝眼博客》](https://github.com/eyebluecn/blog)软件中将会有详细的使用。 + +所有的编程接口均定义在`alien_controller`中,主要包括以下四个接口: + +`/api/alien/fetch/upload/token` 获取上传token + +`/api/alien/fetch/download/token` 获取下载token + +`/api/alien/confirm` 来蓝眼云盘确认文件 + +`/api/alien/upload` 使用form表单上传文件 + +`/api/alien/download/{uuid}/{filename}` 下载文件 + +### 上传时序图 + +![上传时序图](https://raw.githubusercontent.com/eyebluecn/tank/master/build/doc/img/upload-time-line.png) + +### 下载时序图 + +![下载时序图](https://raw.githubusercontent.com/eyebluecn/tank/master/build/doc/img/download-time-line.png) + +### 接口详情 + +#### /api/alien/fetch/upload/token +功能:一个蓝眼云盘受信任的用户请求一个`UploadToken`,用于给另一个用户向蓝眼云盘上传文件。 + +一般的使用场景是`应用服务器`向`蓝眼云盘`请求`UploadToken`,然后将此`UploadToken`交由`浏览器`去向`蓝眼云盘`上传文件。 + +参数 | 类型 | 描述 +--------- | ---- | ----------- +email | `string` | 【必填】邮箱,用于确定请求者身份 +password | `string` | 【必填】密码,用于确定请求者身份 +filename | `string` | 【必填】即将上传的文件名,不能包含以下特殊符号:`< > \| * ? / \` +expire | `int` | 【选填】UploadToken过期时间,单位:s。默认 86400s 即24h +privacy | `bool` | 【必填】文件的共有性。`true`表示文件私有,下载时必须要DownloadToken. `false`表示文件公有,任何人可以通过下载链接直接下载 +size | `int` | 【必填】文件的大小。单位:byte +dir | `string` | 【必填】文件存放的路径。不能为空,必须以`/`开头,不能出现连续的`//`,不能包含以下特殊符号:`< > \| * ? \`。举例:`/app/blog/20180101121212001` + +#### /api/alien/upload + +功能:浏览器拿着`UploadToken`通过FormData向蓝眼云盘上传文件。 + +一般的使用场景是`应用服务器`向`蓝眼云盘`请求`UploadToken`,然后将此`UploadToken`交由`浏览器`去向`蓝眼云盘`上传文件。由于在请求`UploadToken`的时候已经传入了文件元信息,因此这里的文件信息必须要和`/api/alien/fetch/upload/token`传入的参数信息一致。 + +参数 | 类型 | 描述 +--------- | ---- | ----------- +uploadTokenUuid | `string` | 【必填】uploadToken标识,`/api/alien/fetch/upload/token`请求返回对象中的`uuid` +file | `file` | 【必填】文件,在浏览器中是通过``来选择的 + +#### /api/alien/confirm + +功能:`应用服务器`向蓝眼云盘确认某个文件是否确实已经上传好了。 + +参数 | 类型 | 描述 +--------- | ---- | ----------- +email | `string` | 【必填】邮箱,用于确定请求者身份 +password | `string` | 【必填】密码,用于确定请求者身份 +matterUuid | `string` | 【必填】浏览器上传完毕后,蓝眼云盘返回给浏览器的`uuid` + +#### /api/alien/fetch/download/token + +功能:一个蓝眼云盘受信任的用户请求一个`DownloadToken`,用于给另一个用户下载蓝眼云盘上的私有文件。 + +一般的使用场景是`应用服务器`向`蓝眼云盘`请求`DownloadToken`,然后将此`DownloadToken`交由`浏览器`去向`蓝眼云盘`下载文件。 + +参数 | 类型 | 描述 +--------- | ---- | ----------- +email | `string` | 【必填】邮箱,用于确定请求者身份 +password | `string` | 【必填】密码,用于确定请求者身份 +matterUuid | `string` | 【必填】文件uuid,要想下载的文件`uuid` +expire | `int` | 【选填】UploadToken过期时间,单位:s。默认 86400s 即24h + + +#### /api/alien/fetch/download/token + +功能:一个蓝眼云盘受信任的用户请求一个`DownloadToken`,用于给另一个用户下载蓝眼云盘上的私有文件。 + +一般的使用场景是`应用服务器`向`蓝眼云盘`请求`DownloadToken`,然后将此`DownloadToken`交由`浏览器`去向`蓝眼云盘`下载文件。 + +参数 | 类型 | 描述 +--------- | ---- | ----------- +email | `string` | 【必填】邮箱,用于确定请求者身份 +password | `string` | 【必填】密码,用于确定请求者身份 +matterUuid | `string` | 【必填】文件uuid,要想下载的文件`uuid` +expire | `int` | 【选填】UploadToken过期时间,单位:s。默认 86400s 即24h + +#### /api/alien/download/{uuid}/{filename} + +功能:在浏览器中下载文件 + +这个接口既可以下载公有文件,又可以下载私有文件。同时对于图片文件还可以做裁剪缩放等操作。 + +参数 | 类型 | 描述 +--------- | ---- | ----------- +uuid | `string` | 【必填】文件的uuid,该参数放在url的路径中 +filename | `string` | 【必填】文件的名称,该参数放在url的路径中 +downloadTokenUuid | `string` | 【选填】download的uuid,如果是私有文件该参数必须,公有文件无需填写。 + +该接口同时还可以对图片进行缩放预处理 +> 图片缩放支持的格式有:".jpg", ".jpeg", ".png", ".tif", ".tiff", ".bmp", ".gif" + +##### 额外参数 + +| 参数 | 类型 | 描述 | 取值范围 | +| ------------ | ---- | ------------ | ------------ | +| imageProcess | `string` | 指定图片处理的方式,对于图片缩放固定为`resize` | 固定为`resize` | +| imageResizeM | `string` | 指定图片缩放的策略,有三种策略,`fit` 表示固定一边,另一边按比例缩放;`fill`表示先将图片延伸出指定W与H的矩形框外,然后进行居中裁剪;`fixed`表示直接按照指定的W和H缩放图片,这种方式可能导致图片变形 | [`fit`,`fill`,`fixed`] 不填默认`fit` | +| imageResizeW | `int` | 指定的宽度,对于`fit`可以不指定 | 1 ~ 4096 | +| imageResizeH | `int` | 指定的高度,对于`fit`可以不指定 | 1 ~ 4096 | + +##### 示例 + +原图: +![将宽度指定为200,高度等比例缩放](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg) + +1. 将宽度指定为200,高度等比例缩放 + +![将宽度指定为200,高度等比例缩放](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fit&imageResizeW=200) +[http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fit&imageResizeW=200](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fit&imageResizeW=200) + +2. 将高度指定为200,宽度等比例缩放 + +![将高度指定为200,宽度等比例缩放](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fit&imageResizeH=200) +[http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fit&imageResizeH=200](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fit&imageResizeH=200) + + +3. 图片自动填充在200*200的大小中 (这种情况用得最多) +![图片自动填充在200*200的大小中](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fill&imageResizeW=200&imageResizeH=200) +[http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fill&imageResizeW=200&imageResizeH=200](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fill&imageResizeW=200&imageResizeH=200) + +4. 图片固定大小200*200 (一般会导致变形) + +![图片自动填充在200*200的大小中](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fixed&imageResizeW=200&imageResizeH=200) +[http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fixed&imageResizeW=200&imageResizeH=200](http://tank.eyeblue.cn/api/alien/download/3f4b3090-e688-4d63-7705-93a120690505/horse.jpg?imageProcess=resize&imageResizeM=fixed&imageResizeW=200&imageResizeH=200) diff --git a/build/doc/img/download-time-line.png b/build/doc/img/download-time-line.png new file mode 100644 index 0000000000000000000000000000000000000000..65687a273784b703696c5068a3f4da2276e78ecf GIT binary patch literal 38337 zcmeEvdt8!d|9{V(wL@+lm8_h$%yK0;XN|0s)jX`ZGS^APq%_k)BBk;G$X5B}*;z{~ zO-k2n^FST|O%6{bn4vPWBvGL-#Udp{KtS+!fo82~+wXbp`F@}0_uC(P?UmlbeP8!= zeXh^v{eFMmSJIZvUhhwvKW)mCDerIm!u{(hQ~sVjWy%|S-gyiB8OlF$R>b@5*7Q z#Qy8l47J$q(TG7bqEkk<$8HmiD2N6gUxfBTrZcSwF50NU?p|(lc7fyA4-j~$`P;wx z$%{+EQpgG7DHHsW@sbERWsB9t=O6RpkBpz23uQu*|NhE1J-?)a&EF9D&4f3jjiL?( z*iZlE#qB-+Bjf!xK}2(%nv0>!`CID$ zQP%PN_0=`{{4Y&E^+c2GKW@hVdnZZ9Z>QLwvdG4x%ggh-3G(lKmaEgIEL|D?0e472t~d3)FsdBEO|B9T?UoB zwVVx+368Acf$lmR;;_<(rPcJ&MDf~d zi$x9;HD1*g<|vAlT*yWel=oVA7>2U7g<{I!mors{A-7%a zVOff|8A_ygX~Os%Y`YUJbvdoM==4DIfnw2;Ytd`9d(vPt<(?n9mNP~SIv>m@VkQ3O z9p+DoFe^EytHlRS(8Bv;i5XSG^a~*lk`I)kwbh0o{5qP)MYU=81HJ3^YI1*u z`#xpYIW*!|MXx=E$#ZsbT*;4%H*T3bhlUlr8qD;8#yfM7c==$DttgP4ldjt2E6m0m zK33(J#}?%LU>dF=m!3p^m&Epy{GwDPkq{?17YPPgxFB0o@!!frhW}#r@ zW-i8lpwWXKnMjtuWy@3v6H^m)ipHH8s>XW3f(r#7Cx83%XUI=<*MssMB|?HMb4Eo> zvQ;LuzQa6rS=5(!mP5Q4Wxg>IIL9#!}<|#5++z2K&LvGE8h2vQwLZHdgr>c zgsugxD%WY%D!c99GWV*EGu+1}E4F?EbYMfz#jHsKO$5iioH&`Sf3~LC3 zDOuG{qVFp8+1RNJ*!n*DxsVXLgSnT>s=9z6#OyAK)MrFNzz2Alb|)AW7T zO{?7_Kg-6H#$i$e@-eBi^l`O*k*h=Ks}s3z9&-0|+Vb-HFHwNW5{{mpY;`&zFepR( z5pzZyX3C;4kIl&tQCQiT1i$a9muthU8+0M*LH*LkRR^jKXC0XtWg&S(Zk#k2ygKXR zk)U!_Kt>g;btWl`6R0WfU$1>73S{g(M;6fAPpLx>rdoAykIOe5(isr5eu6SUa-MzES1mB6FEVW=Z4SNjcM=rfAGD{k>OR`40S>DF+YOyBpmP1T-io1vOba8dW;$oSQ_*E6K&vOl5iE%k@& zSl`alyA5nJ#G$TQIX|{YV4xVW1C3koq!6zZ*pf(}jNUow9>0w`&axz2RIWA`tNyM-Id-UsULBNa{FUZI9hG?DA|Fot!oH2<2NE@aK5quMvh;k7B!?WS4wO z;MUX~nL*jlhSSTo1YUAYjJ+>@;Eu39+r2)G8TrqFk;*}#C0id01@R*}3-gs2g(JAg zd~Yd#GrL019X};h3Uf~4KmX-atb^9eI>PLxT_o=lIK`#%a`p`Dg>z~#N|hmvgc>YA z!>6?_hjcLyC6T=ak*DeK9Fl$fX_WT-XtDyr<sfwCIzqz6eaGt>eId(hKTP>N2lMg3ZZ;3>rmiO<4-L#r zkPdvuQAa{a?18+eHkAsFa$TZ}Vb(^;t3irV>9RP=6LO3(a<-0#ZZ=025a~|-JwI1D zmUcMQP9OT?SvM(=%9O>GV@rD!Oj#HvjKCxjA*-;Uao(b*8)K?#K z_%dWuB(kXjzk{}r|9RWeBL(y?=LO3jPFpSt@a#B_tNBt0Lqb;KTA2bqSTAEkaJ6Nx`fcVA=6o>p=|kn z_OD|yS+j-8`R7YpfU86hbcx!UMY3Mv`-{gcevn!IH(Vq<4I-j-LCxwHnz6$B7})`( z=!{469UuOo6u2kg(s)9oxcVjMGe@_)_C>$o_+e;mQ**<~s0@4+Z6EV|%?H={fyZ@rZBokt~bzA6>*CpD~0u>~E8_9L*0X(DjJtkrlpW1vx)Nm3${BQ<~ zS$@G*vxMVpguX(;GZ!j0jAh`zLAf^HI}bHyZz$tUTnleUH7&ZnZ!EnS2j0f()1Lw= zh}IpDwBgu8rhV{lw7?3YXJqOqmiDtw8)i-$ExmJXwM?}TH^h+4RvW8{1o1bB(zXpR zE)B3h_!1&$b^Tw4+}F=#Hm7j@}YvoZDiPaaJ_`{`BPV4Bs94szi&@b-_s z07sf;y@L4u3J7~W{`%*o0E)?arplwg!R>lIoWD|-R+GJh}W|}8M4nsX+g|!(SoGO>JWF8 zF6^aA2LjVtZIlsV1i{F3d!VR3PhlVL-9(_;nDG?OL(2i9m2*2$U8_!GkafH@= z>v;b+aQ^tS{UN0B&v@D6-}q;bro7?hm;LhdjD?@l$Irvh_}1_ekz@RWKZbX{@<+xn zVd7+_Tu`gyW$L{6w}-R(0JwLZUx2y!nZ)>e>`~Fr_^P=gs3mWlL^{_AHjOD4XlhOm zq|e2&*Yt~~{&sFCE!yy zymS@dJFMDhTG`D*M3)Mk>C&EWYb^MwVHdH+b?H)r+3wbnB7>xcnFiWR)fgBf{q%;u zyP+S@FyA!c9$!UwpO?RP*!1f#b;<3MICtw0sESn_p0ydFVvvr%F&7Vfl#vLVS7lAzVDKei+qo{U318hiTF6rL>_<{ zwv4u<-!bf{aR)dod~&nqAKx~aCdkwOs4HWMMNufRA!?r*>;<1mO5EtEi53lb!c4+n zSN^G^q<%g{L~~!}Ydj?k{=>e;BfK8NfRVdttpvLwn2E-%G1f@ppajs?z%vL;a|cqG z{y@4k`R~1S^%^?w(hXW&gRcE^;}$y)Uo`MA2v6I+ZZxKqW40gM)PZbzY9!)&>Gw`X zzyJ3O#&F!!M)>Q>zeb7c@?wTK2Iu=D)+Gv+2rBLap)fEzAVHRQ-YBlf;H$o$p>9o; z7_}BOFWnBw4s~=tmCXmF{V%byBQd1U6EGR))U=bv64ZHg+8(?f(__jR_KJS)IA6ue zZ6g4Q$uF@*Gi3AMT4R!jROn0-{I4rPX7$%78D|Kx*1dunGm{~uMS#%8s9r&tCUP~E z2G-=hk8Ju&#>)Q;RY_AxzpMkDLM9oLKB4rP+sSDnYiAi|hOuJb_w29i?61u9U(3p0 zDpC56#Ne>I4p=a82aNJE*P!;TZXF2cJd@hYx({&y(J88KhadqC^_g+|CcLIb`74q7 z*VD~huM+}a!| z=LKEK?UE!N_j$ppeO9{XBG#JHlVuV}04;@jpoq-WYHyP@Kva@+R-JC%z zKn~|ddI-visq>^8#gYgNORs{pib{1AJU5)CX|0SN=h`|~UB}OA#`>v5VChwdic&8j zoaSSU#R2>^+1S>y9{WT2za$+CbBFAZuTsa~&Hq?BOHpg-dq^*y%ZkyurBG(cwc+%I zt;0Y{q36uc|3&xU_>3TB+7TK%IFOeg_1Fd}B97<_WeCrN;9;u}NsO@`L5oUIeoZ-% zQOiBMTn}Ub*dYEj8?r=*YTB?|5OB%TU0z9FYIe)cH!(EzyHA%{I$9({(ek;qY6jE) zes@QtPo=#>yR*{yd_kt2>o z4Yx4=YF&6*WXT6hTg~&hNS9p*%nXG^VPAW{M`dD7w1}YY=EbWj$g-g&+}H|HiDjDl zitDu>$ryJa{TVcZ0AnTEg!#7x6iMr=pt$?4TxQ-L?7*aY_Wq}Psv7mWRvJ_J zL>IwQtYs+%d`1R+kcLM~;g3~lohbRJ!5bP}x{G_|LM)N?DFJn!NxyIprsycSCC^fH z=2x@mfKYig&3e19W{3R}|3nWi!-hh=m>TbNv>`Jg7_U`4E+n}TY%u4$@~A@xl5RKz znD2E`mB*yqh;SiRp6x2gaEnuhyYam&(Eck|nAKs3x^^FrF41tKh<@!Tn9fk%gRIy_qh`qXM)!)K zF6oE%uX`0%*jDV4e4!*ExPPP^no_hFPT?+E9v=k3y9zcqC215b*B$O=NfS{(IK$pL zGPKQ!e}=sehe@@8PP;GkBR+eZ_-tUt$g>$FW(L#gpo~dn;~7$_j^;2k8?3S~pUfZ* z-OMKH`9%E_0hna8b;l7stDXzcP7`R4R^PZRf3@}kt6gHA%s6%^mI1w;KQo2YrF58H z@gNnDQijk=tAjNk?U|{^O?^BdJX^5Ki|52iM74#*`p~VJ-0D`-qHcht$R!TQJ(-d)wNWZZ?pjlTCC08M#Jz`DNDtY}C<@U`kT zI3ggM<&-`f@SBCD9+CGTfzU{T_a#d#XHEXHyi|UoK0nd8dm-oTc|L*|C2rHJq0Y4QWuLkY zKf76|>drC>dSR#O1l^o=TUC7Pm63qEC!ZiF54-*}siuqrg6E+3imv^+@yW&`4M8u1b4*xVE=IWdBT%Uko*`c$Olg;qxuKiV0EYJVH9!ajx2U zgGK^LHc=!^PjXy(cTBKN85cmWZd3l*IB5xuDNhRYHs9y(NA=iqCw|S@gkZ!Ljub_* zUtxB~lIY@fDug1v<|Nf0+zn3kKIW&7mR99;O_fW3Y<|OxEm7Yyk_yGld$LuX z6To-rOxBX*V*4wCMa6d0ieVzW;-~w!HTwCoRC^ZkJe!EHnFSX-~Tj#T!m1*D{wjOSCk+QH7(_$$!95fWYJmse9yhU5VeCW zMJkuf%qCJJOSVL$&|*r|k9R{3_fbM?4*R4^k^62MH5OnP&K;j@`T-!b;Lrm7x!SCu zM<4emZCD=QZNA(0J1E)flI7HZo?G_6ly7;jyo$T1%r5zM(0bUlJn4ay7E9+I+Lpaz zgMkt*P>pR-YLBm0qEg;&u8HR!CEslS6*m=N9@HG?US>hey9zBXU+66eKBU2Xtcrhs zrBVA6ER11%;8-1c=|1FAq|czt736>8b)r7#^`Xc&CUiOqVZJSU8oMe_{Z=dylE>KK zq}%IzE@5BgkXto%ODaV1OC)ZLc1wSnQ$0B8e6C4zxRw7P0J3Kz9m3kI3d2X+fQ*p=5n8DA2Y2 z7y!l?KfXEpG{Kn#lBM6&3omj>(#WvHhmT7LrZy`MKW~z%XP)Cv79>pM(w>F|tbqAs z3OhI+uBEg*@a5ee&vF_fC)<7`Mw;~Fo-`yhjUSgF?&WVj4$|K7bkLO7O?0ceQT{$P zmZ+*AxiVUH$`(qP=B2z7(?dl}vQwL4(OHG5q>6J*W;i#xB<_&gl5}l{c z1=5PM3L`QQ8^?f}cL@dzRM#i|yIMdM@EjMwK71`M@Pd9hDjZg}glEV1t&DlO4EWxR z#GN>c8+~PKF$V4aN^jQD`Rkte&l}Zvq(5DIJAv0dakgN3T~{x_MpP}~a=o3kvN*kp zwMhNISB`(A82dZJM9J!?k|Y-v-~IitVE?l#VMl897S(TOBul*VL=qKm)lLBHjZDf< zX9L-B?kVKj_ea0+gfZXj4kHm%pv9?&>&U`uRP7iz!45z4@T4OgzsCA+d1D79!>+7zOF;n6dAJ)I-8<{LX^1A?xDj&l%ej%0RTh*-~f)x872?)pu z649V(A+#0p#Y_MnK9S~$7MrmxWnEy)O#}Jjck=#C#n5SjpiI1(;FyM?7V6$tN5~si zM9L@!yM4o+WlF&Qd{h+Pd=}LdZ(JC!88M)}vD!~8xH!~Xkij%O?%sN7Hrm~Mx$iBC zd*mIRyAvlJR$ooa4uGUO8OlFy5NDcu(|UyLoe29S53PB-i)0M`wKL9nA_wz!;_an~ z+>>z4X?Uy#MpVF%>Y-KDJ#@7(v6y`1f#@c|wjXn6`JK2yHzlgQ{A@%LzjfNh=K1+N z!O}eSjSX^5u6&r95FFoUk;c*k6@Oa36F-+M0x?D-njn`Qr=kzl>fdioKJD;c*PP7I zS+m(22c;H=BB9AOM;k&vta=JxW{xGu<4#F$XOY?Skwm?6C#vyCC86td%aBV@ig=k> zvt=Rl3x%>3w-R%Q$#gh~g=(~K+u*PMv?UeQ1`E)=`z)#?7E_9GiLU7%awF9bD2LmQ zR#T=1%P2w3LkN}<;iLP&BP6KCBAcUNy@H>N#Y5q88^Hm@cM0ps??fbtyDvlwW0yr_ zbvYo`wwCwSYs9E{8{!Tpv&&Vj%gv8F>^(Mg&7oH;sbc0jw+?`&F1HeR5X$W5r`aK) zB8PtpaK|aJ$EzHP7ih2@I1E#mKG%Uys^u}l+7Z$LVRwfHi$NZv68nq#qH4AQ{cFkw zd4{1kBgmjcjwp*zubV8m?#~fult1JHZ?V$8GXGHGBHMm+O3v=X47+KW_CMr*k%SBB z$ckY^yWZLm>Hlc49IHyx-LaE2P!c{ztXxrdpe~7@?a?iudkc;X_NPRK3|p>E0v&-z z^XQN+N~IoK@^HRKP&*tnk~B%?IUr>vdzRzscOt4jg{$M0mHPA0c;#Tm$WR6;`R3CF zkEE}=*HKZKRV4AW{TczXEh6d0C8&A9?%MUNeI%K!8{#w=_d3q?G)X?Vd^bmaY0s3sf+l)A&R*NJ#miw#Q{ z`F2S+9=ee1_kBB?U*UIKY}=o5<45Qgv64=^4CR!I$`g}F6_}1WD zGx86x&4|QM(PCK!sEr#kE8Sday*WV}>DFqB;t}QO(~F%Ifv9ws0I!Ug&JA*{qGnj) z1fV#g?jF&)E63^xk;FA=cPFIMAAX@*z{)>6^=rsm{tkoj=^LE1wS0T`D3Kt`!^hlG zt|-5nM9OA+1#;sV$Ci|Kld`=9ZtL-Br1r9qK6%)jF5yCL9narys{9Nj`MQ9vX^3Lt zp>@el0v}(6@+f^_oxfY*P&HvXLlafvvQsK-`hX6aBFUU&or5_U&hoXtBfe_K&y|?! zZBrN-Z~YgQcS@hBdam7FhF9M;x&Ywl)I!iUaP$X#WAH)}k-WtZlJ0xA7Jkh}L}PE7 z30IfWYGY7rFLQ_Lya=a#4XnMfj?m%&9<}Pre4t>#5zs=1TjIENMfMzlvX0T_2wuQi z4u<4kihVq%QeP1Ip``==JZhupD7sl7=TBn?J#7$_y0YLS8eR>5KbKK$;Sz)?4LAG& zHN(S1op<7*0=?Pp{KQ-0AE7~leETF_et0rJo0L~ikBN6_iyqxxe|P32cl@2_xYR^l z{a&0U-*SC69A(mIy#8bV+w^DSB+P_5xnG`pQ%E4F(g{er@yzR2dd-RGz5nDZUk5e_ zUJ}Bp!bMLyo*0@ssYBW%@su?(#&j9>%CkNvg+XP+N5bCvwJP^dlTP+NuMw~*rtIid zmS-G4HnObaW&A{x>|a-oanb)_qojMT#b<@qnAC?qZ6E6Y$!MaZjzRlq4q+N&@{FE3 zxJt~CgGY#xg9u~i1yG0wom9JQ8&aK(CE|=lr1SAt#nb<7i*Z!MKB@`$RnRaNG`0=A zTtsp8>!iKkl~$|20<_2M|8C96*Shj2)N* zIVO_^B(9HANJ!L``}9i#Qgq_@wxvB`P0-d{iFh&`&_wL4km%b08J;G-iuN8Ym3%wc z&Q=!3jfM|g-~^$2tfbmEP#siaUDe3ff4eWt##VND8Z{3rW=-C+v{h_D|N1IWv*12g zhs%q*&LPD?s8w+6!LptX^=k`iOND3TP=Afg;2Al)4*~FpB3U-5DnCFI+ZTmyv!}W@ z4*=anF=R2{JQ=;`EZ0d>o)nxAuC>`0In)RE z;d`jI{M8X=wGrMONKc4mc06NcTY$aF?b`;QdVwx3A$T_XZu!NZ|GA-gn4W+rj{TmO zH+dy2J2L}Evf8)j{_^Q)9%>`R&UbIbN9H(EzbALYW$2Xbgiw$$(ae)0Wl}QB@N>*< z99HPC?)c#(r{h)DLg9x-5w}7O__|q(8X+ECak7uQRzD%n{-^8yK`E0#Uth-I(gQfeHFaW(0K? zdiU*cs7pb*rol#a5owy%WR6|GYz=x(riWLcbkVPG-x?mY$u~kz?8=of27-WKDs`9)5hUk)W!h*;!>q5teQDw zI1UKm_g3A13QA!bi@E$#CqkoSXj6QllB9nn8#p;P3C z?OAf?phr3_(7RZ(6t1b~jtr6vEnMKKHll&`1VK_6OfIUjksHF z`uZGXR~wDwIn^o1+(y0%40g3opT3X4IA)iGt2nejr69|1CuEnCXNSUA$Lvap_s^wD zWofJ8E;KAqSLQW~DTh<|h~T`ZIkf?}1o1$?%&t)1`%Rrqr$GgCKqf6IAqeI0h`jb2 zCD9iuy_Ad}JA)g~wH);5KjJteu-*DhNEnaD-O)WN7mvMvkiDvF`-`|;5iJTj7@%S- zAu54_As3dnYgl0^()ULrm6r&#Lz_glwODg|t|Yr;=X)LxXC|~30xIa|Z{86%qT699 zX)&&xByt<9E|u(GNl}MhKjjhN-7p85=(2)Po}I9{BZswQ0hvv@$*n#fLwMYt-olLE zFRWrZP_do1G(5wO^VlMpu^}G3Avde`8-%{Bjd3bP1_`PnBu02(s1E#CXv92X6HxpwHASG$ute<~_E)YBUgwySPVG&BkUg9-r{1-TqId8qSyR7)IB@wm>KCLev~c> zd;2HL%#V93IC@P$$6Sy7h<7;ZKB;d^%Lb>!BcUVVPRQ~=lrTpPBoRjnx30}f5G$(K z=dl@+g0l@wMn~mS+$O`5F@2WEmZO+2e>WHcMPG705DCgeUwoymAc~O_uJT zYolf7WD&^qNZ03bwsAuI4}TAG97vw5r{%ZLGv5e<_Pa0^mwUo0W)! zs|abYQydzzi~rrH(Y~e+%eeyM2!rZ^PP5`tIk>ylyIT0;u>Er#|Kuv|{-Vr|@6{dC zK9Ts2b@Baf@gjS5I{wQq>0fv((6HyFnk-fQ?|wBhcvvR^A!8~WwDF`sD?O22kzztOa~&k34h#%46Q>j z>&c5-4M6hhs_8iXtTD_Qncd$ecq6>ll`m-LQtu~|xr8)amo`c!mRP2&R&vnq@)K#@ ziex!_=)v)w1m~kzpoWoTpnQ9~u_=M(v-kK2Qt-$AcJt!}`~GWTK< zf@g+E3~!fl{Gtt3SSl-i9+{$BkjKRV_p_h{WvV#0!lQZK(EgEbpdH?3uJVhs<0)SZ zkfOuLOT4O;1pRTwSJ-LqkcCOc)#ivC?uvDIXDeWU<{pSKW2-2@6sk5y>YWe_nTi$- zx$z<@@lbjY;3Nvk>l}C8kUV)>50YQ>H8z8r|4~p1PJk-= zF&D<{QQPK^7*)uXKMECJ#3}0Z+^_|;xtjN~bf-~Il!WvQqZ=4_3{WC!CMgm7+hD># z8f!xpz9qMoAm8Vja$EJje4r5<$b${a1I*|4on^pUn&G-yRC6K0Ij@$`24hmCX=FJz z5GZ0j)6YqH8y5999$TjC_G^QsoKOjOqlF9mQ-YWIrCUh%n_V5650^;mqxAKctJ^6n zBu_dQ!0QMuNF1^Fqf$0%y^w@TlgbH!Gx9}Owxp7sc5wX36fDJkB)qJt%2DETBg|z- z<)I|PEjY?jk4+z1=@j3j?6E{&>Y!G^?mwCHA|Aw+8X@~vwYCM0h2( zAJ+z@!0HQNk~RUX)i-dk-=F$)PKdg7X02ANw1VkI36OH&=K~~O9-A=5M{{Ec{@Y3$ zYkt_}Rm!?da7~H~rXRKbB)W7}V8NCHvb5MNRD<#nzE5xi#z}VS(pft8jEGYl^ZNVx z_D~1wS9zt#+ELyav-+I5N2py>HScA!4|L1{pnqTn|Flu>T=V0Qo9n4S9mK|HGzr=_ z5ydXp_KB4M+f->VULQGvTDw3Tb2<<69Z{ZwTu0aygb^Kb6s5i`k7LSx#P7$dlK8=N zs?T>G8#?AptsCo8yGAN-*t$))_A-ZTsKqxk}UJsrH`?dQDnyA}0HTBWgE zI??a}l$qg@9l}}HcfOoWU}%E#&N_~)LqZaryuNeOU^_^-3tj9X`6_MCHBWT4aB-<) zmtE_;t{%f6CmmI-?jx(IC@!SSE9H$ESgXzObsPHdP5AK5LK#i_$KF=k(u81UTRQ9} z`rE6EgAfMiziWP^+i~g_*#&VIUA(+=CM99hRfmP3UjpS6ADAKw89vISlaKVL%^@St z!-6u%B}naHkXbOaIUrbAMY|xm)8Q?tqS4Z;FdH$=csDrakPrT*i5xU+-GarLBu>=-? zx550-jzm6XybDO!$RGjiK2+X=(=1^{Lpk+MVoKoWv-!c$vL6?hQl@@}-v#;F>ELi% zZLXu1Mr{2gkzBduz1E(_u(OJ8luK(lW-v*@hb&m1-g52D?A$I%AgVHEUkR>;wBB4E z$$%jPk;~0P8eNXgRFf@|UA%^R)(9vWeoYmgYdBU;Dhc4E2Un4ZHJo9C(V+5xlUGgF zP<*xH%bP=2u9uPN{H<~~7pFpt{Jc;iO9@KDiT1azRra1H+J<&4Ae@S^{Qy(jj#^Lu z5XqEh#A5Sep#0NNQLm%Fum*qH8cvhmhN(-!h5%p!xXmsm{zu={?oO?x@SdjlNZ0t1 zid{b6NdvWSqOgvDnyHt!Qz!(Sg3Tz{;M9-0aIA_5gn;`=*Y6NE(wV8*S>1|TN7xp62%p!w|G+&{oM?BokiGQ%|BL)&eoyi%0jsQ zF$RbZW@7FZP&~MoVZ8%><(4V>3?ES(D-XCV0&7WfUyxVI4TmIIR{-RYcm7B(#jg4v zL(V7A*R4>=l)Cu?0jcx&0$jGV0fLGteJR+6=_khHtnck~FRe40!~#7dAT{F2kAGWE zWjtBFh#xZQmurOFS$rV3`K_VEe@?wIIki_q_Keyp#4f*;>$QJem0g4_(yfhd7f;-~ z&iMbWjQTIh(2XtKf4!QQ;HHU-r{B?c?I`OpB5jShgC3Zsa1&Az)B==WK>k&---MMg zJg~&rwZ|rIXjTD3opBK9-&Bf$7hN&L3HW60t^BS%3ecWDIRV)4NN4QB z+3q%<0z`@;y|y2j$;Yt6K|9uHd%$a$ldvTs8z4yZsqQrq1oZELK9P+aX7i&*jLl}L z#=Xg;(dQZ~!$}NF_6?*d-B&!ZNN$TaC`d$tntV%23pUF2jKS8F0|VQP2~B65bBuyF zghP*7E-1%O5+)7=ty-KY*6(5pow+Crp$*x0f=JlNucWE!+mANbN{ z$JPbNkiJNyF0RvORCQV)bHwRK~P@!f;zGalXeatFr zEIZfL6BXMBK!fA zRb27tuRoh8!>Qf5AjlYvwZhRn9WKM3!q9_MtFj6qn{4at8BSxtC${cTZVeK=a4Yiu^=XRG(6 zIFUei+a*HR&du#WlbJ=piVm{JpiniFSjfZiH~?E@YE6Abh#_Olz|fuA16I1dtz%nF$SYAhN{XV3Y zQTAi^>PXl64P~HlH<&IlwY|gCec(>oft4BF_J%3peAS%HTIlW36(I5k%P3T2|4sRj zS^4fK7HD)?_S8M*o6rxb4nqSHa0_Rb!!L8+C}F@kX^TE~n;O{E0y*k}yc)O_pN2bq z_$%7t)@!-&QV+y{UPdHhb+i$c=qTCf=s4@|fD!Ct!?4XGTI7gS+F6tCyV?19b1c|R zGJY$mUh)t!vW{a^xbGx{i>yH#TpO5+)R<{;{A1Ls2U2K5F7Re4s9rgQ$dM?P!ayf` zt=$PawJhC7y6-pVV;W|W9H>Nyb16j)YSipD_e=K|EFU%u^G1g6shwouO%cB9l%?&e z&UkGL$&G!B@+ii8tiUs&iUol~fv?aUt~Z>MIYhamfn5Pw=c2L*1-p}v71|lQh(Wuw z?-q|eXA*Yd8yOj`>2pPOQgr6IS}PYHA>X#t(TqKd5gSF|%Cps+odZe1@f+q1_V3?i zs2drw$!RB!$VM1ABV(s8Vrh%|kK9p-f$Ot@HKHELQ}qW7taBIxsZ5*i1jAK2i^)53 zl<2}``aY{1nMp8Ttx58)RPnb|T)j=q`8eQdG{TbO>bts|LV4qAcNSPxIc1iFkf(vX-twHAG~B@j5M8VPiZ0y*&POPHsMHZy5?P_qk`=^KRye?6eeDR(ZeAah7B~chnkh27b<$yqX348NNr8z_|cm z{mUumFYllK8SkIJoN^|sNt*g!avlXG$Sax1Uv`V8{OHdZrQeb6w5OPaiJ0xrkHG@+ znC;a{NTYu27%brHO1`PHT876p&_^@XbJzbfwVJQ$N=yR3zm&Ho;$&hYC{qSw^tbpQ z8>Rm@^t8Z$+SGSotlN@eN$qfcps|Dfxe@Y9+NQvkosXpWV>1{q-|3m^>t|Z+?A=&_NS0HL#_Ve}NXbIO&KGOhBL~|_(+n6d6&K=ag zea6jupiONR(AsLvd*CvDo4)o`O#&pXy60*1WU{8x$7`2~jcyu77b)L$?vY1+8cKmJ z_Km4z`^^qZS~!_f)q&Yxc5nwOAkNQ~a=mCXCxYlg+2TgW?0{g!6(U zOF@;M$o%2zwQQe^7-;|F*u{}PYxnhMCoD3}Toj>V%dpWQ>TZ_ik&oe#PmrMz7#;Cl z<2RMM$QTpyGaz{K2X{sNbhX#wFgmjA2eqKYjGg62L=3a(#!|ibLo71YhIGf{`r!4q zZRpqXO7uT~dSocJWVdyR#@emKY`_1lFi}Sab#(+wlq@m9WSbk>A;}ub&XoogW<&)` z<^*Dy@sp2F`)tsc^Krp3X!7?luFRliUqz*Qv$wT-g2QAeH=a~`d~JTBjA`xE6Xhz$ zuHEdG(oIGO1;`lqV@ETx98#JVs+aC6`1on#EGVaM7p*Nq7lHovKCT3Odn-oY+Tx#) z??g6=|1|N(P3Km;bRQ+rl;mX23J%PHh$} z4J_*qZEnqhC*p$X4TQc9c|fXBWO-P(f~Z^>lyQVT+!j6f-f`Ser2{{^Qg^DBGMM4k zS6Cm3u4dwcKFvXo^nDGy=)sw6aBTrRP6Ldd_~g<_ZVFUsn?#F~PuYK#mEbVV*v`0-U9i`KT+9_LZr@BL#t2vc&Ca=VTrhG-AsKxu^(51S&y-L@$z){ zT2v_N(7hJ8p$i_rYZ5p6R9%xLE@f<~|KJ-(O24I%HR@6u56~bT1#X%DbxpCjxo!(zus&L4S zA0x9fjx9FJun*7wr9R)j*J5=+uw9}Qy~m<9u&;1`GfOg;5K=m{ctt;ke_uGas}8wu zj)xznc<6)-l=wU(!A6nZ)9~psy6hnU@ap+p21|@PXjTjwco%cKVPwp)o5JK0t!cW%yf81v9-v4MZT!q@+&b#we{MI{r4%K)-e>Tb&=s}fIs>2OPO|S`(YPuA6PUu!yZO>r zkG02j7^20H@xJh};}BkL!C0GvnK^a6tc472;nuC-J=@GZ`YkP>jQnRpV=?anO}Q{^ zeicd|&?{WYS z=2OJWre#rX{A|}>FJ9Tohx{NXG@Rj!^M=Bf32^P=GISZ!W@M<2%;XW**dj3`54V%e z=VcF1iyYN^HrC+I&eqL#_{?8z1Y4+CpNS$q9HE=!o;;g&So41VGb>&N}ua zQy-Z+g;vUpTxA;W29yusizRkttTLg|gJeNzvts}b+P}XusIHpo!a{80q&|gYojkj@k66uZt^+5_67;?-3L5QYQ=NA;mJhWYZnQ7 zM~wVK4f}p#70fIPXP)f){iC5Wru`RL>?fCj1S{j19m$(or7{|y`bZlMXjZt(4tmx> z9<*2xJK)c@Vo=!g1H_U*Z?_`Qdyh)3c-mqsb|KZ3KR_i(jR#1>@{~~-!OZS!1q47| zl3OiG<$95!PZZyYT8o3TT&?d#za>g7_`Q2=w-x;|A{iMbv6urz!4JoX+ZM<=R6;OL zWY?OvJ(aY%4d?(VY!t9f1Bah_K0J-`4kmU9z_E$(+}P}d?WHb~jZsZ@eTs0>_L`oB zS{j_D7gJ26rxrVn&C=Dda07|)DBWyq&@%JWRZDxCkw>RAo|i5iA?`D z(^N1{de&4?xnH`hV7CtFT;mHCHZa#C2HEuLChC>+EK&yt73*qgvA4`d9yVqFrL$d? zBunxv1#n{!+p0^ zde~i77YmNr_SEM)F{xNk*H-26cHfO^bUIpG9nHG}2u*Xv*6V&-Wx{aHIx$nYG+7=1 z!OOAIJGOb->3OJ(c!nzqIGG50KTp)$4WorAAVl7U#8BIrWy?M zJb*KebGnhqW(-YmM#XO#m}hA)rSF@{pbW^=n!AAt)X3eCG)?bzEil>HzL)|x4~x$?UT42Kw&C6 zxibg>yoCa0ujpId$J1ojJaSI)VF`Q`H!iC`+C4MjYy8jPkni3FsCpl5fIvdU?)ZnX~f5aCUSpOaYxbsRV}T|Xn688qKcGU* zLx>^tZs$aP0fjGEGRc4NLzv9qBq<7kJ&vvN^lV6 z@Ecy%UA`qXvi$z7{1T}BDPhF{Nj=jks1%w~223Mot814c&`#O4$|3i%3rlb1FAadK zkq2D!NLjSZ%{L;2Qni%OE?qxZAH1^PA9Byh$I$H*i{4mTq%Ic6xn)~}-q)~|s#Av> zly9TtR@ktP1aDv*+4H`b@1xL_Jk<}YVz!Cq;a@YI$4SbExSx8%Q}V(!`#Z~r9$R>G z#kP-Ki;jNa8}rDo&uTq+ODeOB+Di-c`p#pQ;kXU~_kAz8@$vUW-TuLipo_eYOwsJSRKZ$P8u^ko819+cX?)DgIo2KqEv9DHc02Iu{yQxX^?k#)wC zwZ}1>mfs5to8mAkM+%S{7}~d9zq|a)8!-6B+YtCt6#FZgKbz6KG(cBW;Iwb;W=OIL zft3HW%X_$^bh#`EI8j}Ju56FR>g53)rxU=w)>W(Y1@aoGS;N8+I5wZKvw)Qf@&XNGR1p&Qokou$XE zyQ8i)S`npyrUlSI_d6%yflrddaGsIbMCpF>*gjFmyb)or%&}#jahZ-(r_9P2B&_i2 z6iM;7MIGkX=Mdd<&8F^@9c=*#V+^|+ig6{+N(ga|D?4cG#1sb00$Cq2Og9o`x z#v-Sf@5xE2KppMlFEBU&J};hGLWFeY5g;X2}QUAF0`*+wy%NPn-T z%3wTzz=u$DWIYefcvS&@e3+LKbRb!?TPOKTMK5`nT z@S8s5!8u4Tl064|5T1}KbJTl$dj0=waqaxW6Tg4Ad~q6h1qRA(ky!d;k8>LTh1Y)# zUq3H=%b(LZivs=t4@TbiF>2fYPx1dwuYUjeyur5h`q96|AE@+yGM!imT&J@sf8K0D zjmO=`BANg01fI+_|DJ82!?yWm+iY%qx0I=@pWjSedX;(sEVk!+_w3)3mc39S{_{@v z``-JTer4Q$Uhw2^Egx`42y6u;-pkf{Hv>~@`NuPh4rK3-PyV@m9$TQ#GyAz0e^0&q z;Gyz_YsK;Y@>=d#Wzp$P!tjT+AY literal 0 HcmV?d00001 diff --git a/build/doc/img/upload-time-line.png b/build/doc/img/upload-time-line.png new file mode 100644 index 0000000000000000000000000000000000000000..4327efdd053d07df71bd3a72342f38b016e15e07 GIT binary patch literal 50404 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 X_Y2lc!WjPt__Nv7!-ceAZ|r{q*(~9> literal 0 HcmV?d00001