From 3d2c0e2f723f31b96cafc6efe334244c7d8f55df Mon Sep 17 00:00:00 2001 From: gineshidalgo99 Date: Fri, 16 Jun 2017 19:35:37 -0400 Subject: [PATCH] CPU rendering added --- .github/issue_template.md | 15 + README.md | 1 + doc/GUI_help/GUI_help.odt | Bin 16830 -> 15721 bytes doc/GUI_help/GUI_help.png | Bin 101615 -> 83674 bytes doc/UML/1_0_0rc3/UML.mdj | 6950 ++++++++++++----- doc/UML/1_0_0rc3/UML.pdf | Bin 38991 -> 39764 bytes doc/demo_overview.md | 20 +- doc/media/keypoints_hand.odt | Bin 0 -> 137093 bytes doc/media/keypoints_hand.png | Bin 0 -> 185529 bytes doc/release_notes.md | 22 +- examples/openpose/openpose.cpp | 191 +- .../tutorial_pose/1_extract_from_image.cpp | 25 +- .../2_extract_pose_or_heatmat_from_image.cpp | 33 +- .../1_openpose_read_and_display.cpp | 33 +- .../2_user_processing_function.cpp | 33 +- .../3_user_input_processing_and_output.cpp | 8 +- ...user_input_processing_output_and_datum.cpp | 11 +- .../tutorial_wrapper/1_user_asynchronous.cpp | 170 +- .../tutorial_wrapper/2_user_synchronous.cpp | 170 +- include/openpose/core/array.hpp | 14 +- include/openpose/core/datum.hpp | 2 +- include/openpose/core/enumClasses.hpp | 7 + include/openpose/core/headers.hpp | 1 - include/openpose/core/renderer.hpp | 10 +- include/openpose/core/scaleKeypoints.hpp | 15 - include/openpose/core/wKeypointScaler.hpp | 1 - .../experimental/hand/handParameters.hpp | 28 +- .../experimental/hand/handRenderGpu.hpp | 12 - .../experimental/hand/handRenderer.hpp | 14 +- .../openpose/experimental/hand/headers.hpp | 2 +- .../openpose/experimental/hand/renderHand.hpp | 16 + .../experimental/hand/wHandRenderer.hpp | 2 +- .../producer/wPeoplePoseLoader.hpp | 2 +- include/openpose/face/faceParameters.hpp | 4 +- include/openpose/face/faceRenderGpu.hpp | 12 - include/openpose/face/faceRenderer.hpp | 11 +- include/openpose/face/headers.hpp | 2 +- include/openpose/face/renderFace.hpp | 16 + include/openpose/pose/headers.hpp | 2 +- include/openpose/pose/poseParameters.hpp | 62 +- include/openpose/pose/poseRenderGpu.hpp | 22 - include/openpose/pose/poseRenderer.hpp | 15 +- include/openpose/pose/renderPose.hpp | 36 + include/openpose/thread/workerConsumer.hpp | 2 +- include/openpose/utilities/cuda.hpp | 2 +- include/openpose/utilities/headers.hpp | 1 + include/openpose/utilities/keypoint.hpp | 28 + include/openpose/wrapper/wrapper.hpp | 179 +- .../openpose/wrapper/wrapperStructFace.hpp | 9 +- .../openpose/wrapper/wrapperStructPose.hpp | 7 +- models/pose/coco/pose_deploy_linevec.prototxt | 4 +- models/pose/mpi/pose_deploy_linevec.prototxt | 4 +- ...se_deploy_linevec_faster_4_stages.prototxt | 4 +- src/openpose/core/array.cpp | 24 +- src/openpose/core/keypointScaler.cpp | 2 +- src/openpose/core/renderer.cpp | 58 +- src/openpose/core/scaleKeypoints.cpp | 81 - .../experimental/hand/handRenderer.cpp | 97 +- src/openpose/experimental/hand/renderHand.cpp | 31 + .../hand/{handRenderGpu.cu => renderHand.cu} | 41 +- src/openpose/face/faceDetector.cpp | 16 +- src/openpose/face/faceExtractor.cpp | 40 +- src/openpose/face/faceRenderer.cpp | 93 +- src/openpose/face/renderFace.cpp | 31 + .../face/{faceRenderGpu.cu => renderFace.cu} | 18 +- src/openpose/pose/poseExtractor.cpp | 72 - src/openpose/pose/poseParameters.cpp | 50 +- src/openpose/pose/poseRenderer.cpp | 193 +- src/openpose/pose/renderPose.cpp | 40 + .../pose/{poseRenderGpu.cu => renderPose.cu} | 118 +- src/openpose/producer/defineTemplates.cpp | 2 +- src/openpose/producer/videoReader.cpp | 2 +- src/openpose/utilities/keypoint.cpp | 265 + src/openpose/wrapper/wrapperStructFace.cpp | 6 +- src/openpose/wrapper/wrapperStructPose.cpp | 4 +- 75 files changed, 6854 insertions(+), 2660 deletions(-) create mode 100644 doc/media/keypoints_hand.odt create mode 100644 doc/media/keypoints_hand.png delete mode 100644 include/openpose/core/scaleKeypoints.hpp delete mode 100644 include/openpose/experimental/hand/handRenderGpu.hpp create mode 100644 include/openpose/experimental/hand/renderHand.hpp delete mode 100644 include/openpose/face/faceRenderGpu.hpp create mode 100644 include/openpose/face/renderFace.hpp delete mode 100644 include/openpose/pose/poseRenderGpu.hpp create mode 100644 include/openpose/pose/renderPose.hpp create mode 100644 include/openpose/utilities/keypoint.hpp delete mode 100644 src/openpose/core/scaleKeypoints.cpp create mode 100644 src/openpose/experimental/hand/renderHand.cpp rename src/openpose/experimental/hand/{handRenderGpu.cu => renderHand.cu} (63%) create mode 100644 src/openpose/face/renderFace.cpp rename src/openpose/face/{faceRenderGpu.cu => renderFace.cu} (79%) create mode 100644 src/openpose/pose/renderPose.cpp rename src/openpose/pose/{poseRenderGpu.cu => renderPose.cu} (79%) create mode 100644 src/openpose/utilities/keypoint.cpp diff --git a/.github/issue_template.md b/.github/issue_template.md index 1155cd3e..79b9614f 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -1,12 +1,25 @@ +### Posting rules +1. **No duplicated** posts. +2. **No** posts about **questions already answered in** the **documentation** (e.g. **no more low-speed nor out-of-memory questions**). +3. **Add** the **system configuration (all of it!), command and output** if you have some kind of error or performance question. +4. Set a **proper issue title**: add the Ubuntu/Windows word and be specific (e.g. do not simple call it: `Compile error`). +5. Only English comments. +Issues/comments that do not follow this will be **ignored or removed** with no further clarification. + + + ### Issue summary + ### Executed command (if any) + ### OpenPose output (if any) + ### Type of issue You might select multiple topics, delete the rest: - Compilation/installation error @@ -16,6 +29,8 @@ You might select multiple topics, delete the rest: - Enhancement / offering possible extensions / pull request / etc - Other (type your own type) + + ### Your system configuration **Operating system** (`lsb_release -a` on Ubuntu): **CUDA version** (`cat /usr/local/cuda/version.txt` in most cases): diff --git a/README.md b/README.md index 2b36976b..5baa2bb8 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ OpenPose - May 2017: Windows version released! - Jun 2017: Face released! - Check all the [release notes](doc/release_notes.md). +- Interested in an internship on CMU as OpenPose programmer? See [this link](https://docs.google.com/document/d/14SygG39NjIRZfx08clewTdFMGwVdtRu2acyCi3TYcHs/edit?usp=sharing) for details. diff --git a/doc/GUI_help/GUI_help.odt b/doc/GUI_help/GUI_help.odt index 9e2a190b52246d2a41f530afca29e84c23648799..4fa66828a0947b99ab3cdc03f69c784ad7a28bf4 100644 GIT binary patch delta 13842 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 XP+(x#|Fu*oFDOZz7G{s{uk`-`oSAO} delta 15009 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
`n>ZpSSNRiB6@KbfU`d;AG4y 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 X4*KuQ2L^`zcXNaS1LG0=$NT>Pri5FG diff --git a/doc/GUI_help/GUI_help.png b/doc/GUI_help/GUI_help.png index b4fbbcc0dbbf35e32e6bda0173d764d0ec66adb8..fa818e9c8c2d03b883fe7f6939136636189baaa6 100644 GIT binary patch literal 83674 zcmeFYWl&^GxFvd8fW{kdym5E;rg3+N!rk4W@y6ZV-Q61scXx-vy>K1qbMKvrH#6~K zeoe%S_ph=d_uiRbW`45P%3xV(5qKCZn1BBH2VP86Q2w8PKGOa3&nL_;kZ=DC{F?dk z&j;abF+qMsm!;!X2u;)j{Qe6>TwlTl)n7TP#*GVZb_<#NR+Z)=_^yB+4 zQ5U42UkLo8&I#WdUkEmZ-Wp$#0e>6BZSRf$?Bb8{-uMDd_ul_MyZqb#XLsoP!~Xwv z`Tt+}{~cTQ&`|_N&KFEAIDHdgF=slNP=3(x)^SgjXI?y4)rlXDd?t$1w{ z#iK2eS~jkte#61PDI@H`}MTrjAU%42O?0Wq4ZdHNeETn_YvCI)8rg!$(bF}?4m8|oP z<60jvUT!=qqGKVxzQjEDeo;Cr>iGRM`<1-X!E;l2lfbwsiAmi9vHj_8c4VQ$!Hy7$ zhdJ9YdZp2F7n3IVW>4Q^eNrqDSK??Zu3R%*-4T0gf|O1;r9@}qYih@%3tqGhFIL{@ zyf3J5Zi+dSl))NdqFIk>ZpBqV@%YXG^`JHgSk5XBbV6WTC!q+8z;xV8*K=nB8_d~i zio$y~1to8XbFZ&Xj!o24Gy}8m081k~9iLPg?Jy)XSH87*vQ^YG{pVC~G>h6Qv4$i#|jcb3Bq+4qu zrgiUitYn|1jJ-UML-xF6D+yYZcg~1Sb#tWgispRYBJ^0~&4acy(jpbSXV#DBZEC5@ zGK7}x&6y-KPS2GZSiZkOHCPElXWW`(w9?DWUYyu>ZZ zP+lc4WSM`YlkuNYyZ(FN9x_6+qK3GT)n}Pq-&_*V?n7^T(~9`hSRGlZ(NHgZCs*it zD3>i`0oU7@h=yKTkA7+>%^o(zqbn~8+kedmK||ARVSEi= zPvCD_`|X`l3hTXK_cVv; zEmG@V`TY);?r9OPp?OSwtLYem>B5QjIOxpVTn7B+T3u=ZO%>byK8fylISPTU^#fL0 zT74`KzYJy(z`}%oQCY(Uolnf?W!mJ<0BzVwlT6mp(%04tD^k5TkZOb92C^5WI)lJ-9HuET=Gxg5wy?RT7lrK!7{E>lt<2T=Hvl|9N43q zR{1`9mg|RN5f(fe%b&egt--Hf36n#afER!{KeKXY`^y(>Lz=Kbg5-6$)YvszEL${ z?O}Mtq1cS2G_M%24Q)>qOwJ=E-9zGwqZP+B7=dmAftROU%sIl>{5dFOt!IV9-!DLV zh2L3>Nc@IfvdE5X#`w&$<<23yY#Wc1W%GZdk-(fa;;yN%~$%)1C>rr*@{4xHe&etU4X9Z zs7P4FS{TT_#pcfA9{^d9yy*RuNvBj@^}$#MTm;TlswD-IHuCLH;i#z^YwM9xJ!L?)w6Q#=Z&G=SX6~)Sw zyT+2h@KzT<5o9T#KjTz?qe9AIFn0-r`p2~2$Vz>#Z~2;>$$PgkFV6FMpt(`|Ql7$G zl35|5HAVgPT#af}Qqff9L%F?iyd_4LqchndCB7-_T)tN0+SP$(&_~l)8I{IFDI@(O zaa4-rAfl4<%UP$`CCl$DM@rbCyrm0C4Wzw6J?TSI>uwnHMhU=$?^+f%_co4%v%?WP zF?Okwl&t?mqCJyaZ;TFAgeTk5gw0Y(SDm{#acWDd!V+2Ro*EsCnG3H-JO!56c!MtC zVl)6|4H|DL<`b6?1o&zA1?Llrp8;LZEHnM)@a8Q|hjmT|XI8;@G&Ilb3$KDBBqy3- z$Fw5|aQZnGeJyV~ZfoDW?bng$><7SL8;e%yUVfA#QyH$zR5zK5`iB#Z%f^f9H-#FuDkYQ zR$61Q3jNbk!grCDpX`pK!K!0u=khH<)nFp%nr#SUyOtK7|cWH|o%<pPiC%%s!TA998^m(<#Z;Gtd(@*nBT1vjRiEkH8M zR|6cwn4-GwhU0X6U;Mh8k>J-owvtntr%3et>RKnF5M>r#qn_PPYf&eL7WJp z)U!h-VwTVR**U4YYt+2>OPHUS(QF09=}`_+c64>Gyh>O-n`1Hc;!*G`eVT$9XMZ$5Z^vGlWWB7yM~qgwd(NN+T1ShPG^TT56b@Bi_ zGj2WO^D!(dsvy}NWqU$|a*P*BZ)xrFg8P}kR7Hf-?j>`D#`l}mr*-M^m@&Lt@@88s z+Uece12b9QS}``&sRDH2-FaK8%%2C$;RB{tANxO|Sh9t@t;tkWi&sqAfXK4yDdsD& zGZB{Rp(g?X=CN{Br*E~LJM>Gj)NT2{)?cc(5VukQy+ zGjuRj3P8(viU5);9FM(79S5gie5P8r&4<0ZfBK~Ea^0(0XuTEu(+^q+SI4WHzhhx$ zx~w=APl|>ojLC@19r6=09s~piKvkd}_e~z)AyOuGe-cHG7`S^lCi4 z7y(WY0Nc-Uc=nEz`@S$XRT}%2af|KQ;L$AuZs>KJF3;`kmG-7l75V162$8PId6RrO z;baH!)CMnJm!n;&$NWU5l4iu|WzLcjUfx%=(*@1iN~d>ICgsxW75MnOcc_Ec?dUA; zag2>(y%s)CY}PHjk1ZJ##Me0%DkH+gq5i5lx`0A4;0&dZ2#3Ja2#Y-CbPj8lr2u z$v%{a0P3KOK~$o8{xtdHL;phIINj=Qc@8RMinf#MqWLYbUR>%b;@H6A2@|?Bf;Q|d zhRiCcsMv3F&(Df^bMr6}0|m3>n5boF{$FLc7b1AmYNTfZ*7G&U^fYT3QO@^YfS!4oOv%c$5v zE#J=8``l-_mZ+f45uVfKwY6Hl4n2QLyt_NV4KM$s)N#Q@A!nV@*A7%^j~!0Vl;kY2 zX4oN$JrtBY2FL|THq%ty1+6{r8;oE-&JHcmjRkh@P1}-RZU^0^;}}#8pgtlfA|d|? zI+jXytHMNis;ut!9sBQw3k zAdsLOzPngrZ0PG0nkQdRMChH$!F=8wcj9H7`}QMLl1r`P!ETZUqXq6ap~yNW>WeVF zgn}uD55sV$y(_6A-b9AQGJ21fKI!h0{7t)wz#h)J?cLOH0Apn}^Y_#9myJ5aY$C~ z%uns*yjeP1uq6JIsxss(ws`%zWcj4Ad?I4#B1R?h;jJ9eP6iB|KcZ?3m*=lQ&yR2h zK9*?5v^NGR&_PAf_49$(M5yeAjxW37AFB(~&Q;O{rx5$k`U+#0A>&G|!w;h_oV2;j z(wsqCGsyeKH2f%g@u<_CKKaw|a8mFLcd3VH9=1GtKt_g%eG!BZ-8-E7I_W97N(sy` z1?-d@!n><QIhhGM*3~d%IU9vE90{+r-t-{-$pB1jj|ORm1W4 z^aoVGhw{RQhlU-olaKW^3XRV2SDbjkJbQN*o3aVc>r!VQwYMa$hTFq1-I1mP74A-q zHM4Oyhl3U9ep9EiUGz6IoVmJCoobr+wB*yzKAAWAD4xmHb)XV6zAU9Ioa+H1`_O^5 zo<$y)E=+ihB64MdF&yUmI_Iuh{$KA{FM|>>TH8JJTjOhK-(Y~wWGjH1C70-r?T0Wf zw2_8{+5Ia!T3||Ia4XLrAwo#+ooH2EBgP2i4-`&Q;1pb{e5T`xGZK!YZ^f+orHc+qNQy9c?v;XnQDd?*`5qCsO)uvs zbf~mV!X{88C+>_YmZv#OZ5z>wKQasC}ye zpOREo zuhoBUwU&RBY<)d|MJHoQ)aTPfSYrytH2*kQm>NteMag6$N5?vsGA`g@Q!JO7#n&Rs z5=jt!2H3;^Bq8un$~LtyN~J637k@#3!|r3`aj$9T9@*SmZ*8L-TDuNEQNDS3-xH}u zfs|o9yAohr*yK((3=uNsJe&2Xg(D(nc*fX97Xcj2<*kWYBq7Nd_fF)|QCF=Z-W9%^ zMjd9UvZ6^_`dBijf~L(xtN7Yg(u!nB!v%kmQ^H0gVo*~poC zAZ^!KqDy2wFuR+CwCzAF)G(8dVJAj_#chXo^p80_ImexcFKo!BUL*Iu(=@OR$Xn5> zq5zgcqG4py?CaIK|HkbE?T!=DmoYatrX!W!;b)6G?~`+3U33j*>F(%ZRIZ~N^1q#| zJ`=4)drjZeC}ha7TUtneY&^=3I4p=kE9P4d&HCJRWLHT@9_f9EHWFU!^x4^%HA}ji z6-x`3Yg_;LG%<8Z-Fzp9~I?so-oL1g%iBI1iy@T zn(6&DY8hB8YeJW}^7zr*6+Ba8-&gpE-v+AY(`iQosLfudc zd^pBaUpagpy(h`jU;9{CBCv0xiLvbEIC!Jdi90tcReP^eH0KB#ie71aTV4J%X@Dfn zU~5bW&$!dGQo>3j9#^25f4DF=n(VTAu#+=;xQuGK)0gLZ#9{M-S2#BgiYxI1$7M%M zyKx6DDX^a;GJV7!zsdJlh$AbC<|=&vmE)=4+5UKNYcf$gcw z5@_R>e;hspi>F*xSU7ox1LMk9-0XkJwYL|~*l~lf%wx)TacH$E{EqxxEx0`r0tCjY zzVg(d7xRbu%reZ(f7#5bCZr{u{e$xG9UHD} z-Jom^gg3P!uNV0VwnEXpi8330dP}{gF6;dI%OCMM#(c@W;31L2F*k$8^*=MaOLcsbgj$F&%aZy=&Z0rM)Achfn6{xpum z(`bn0%R8sCb>_O9wxJ@S|2slnH1@akO>&e-P?EhK3dr5GwxbmmpA$E)FusC0{Odas zR~pIx!NN2takr2c{)?fp7D^54^5BWoHA8&qroVd1e!fiTdLDwJdSb*n=ZN9@PRKV2 zZ=`n~$NQOq97W0*Vpv3Ii|asMXF!NBP*maz!GAD4|DDF^=~VwVuXUub9SN*IaDnHCgK9D;rBC`jKTaGZ*0Yb-=ClJ zN+0!`0o{+_At_8o*Y8S9FO6sPxycvKeUa4TZAN7IXRvPw!f)@)q$unWEBSyIs5Ko; zPaHgFNO`JAf)s|$wyP!JmYnA|o>J0uuY>cLp%%zYL&fkC$tL7rx%f$oOFT*3P-YX# zpRP`8=|1JVHg`guuO2SJByG4bheAM1s1lZ=yKdFcAx^8!c!0pmYV^^oIe2y z&mz-9r|djp8vY_7Yg1GOra8B;?qhL93gk}FM8YYnIs23MW#|Z&x_b4!P)9P^U%MFg zgJDNhZTN1+>l%296Aq3_1+QS(t8EjceN#m#zjW06)1QH|xQQaHSi}mUF0Hrv)L>F> zB~*{6p>G|R*lMalU17DmkV_9537s$;1fVbN$y)Uc%2ZaD@Pt2F?=;xOl(mm-&4O9I z9h{8(^w{U=t~O2dl zD90Ct#RS^#_82_c+GF^6glosBK3fX0_mM0ycwHzip-=P~+s3p2KQOc>ng z^D|vGIu5?FeR8a}*y_u0OrKQ0Z=b#*?gWslh>)tBQFE)MrLYDK7;|CHI(`QuaQ^_d z(Q^=;ks{C{$t-NGB+I#LXBU6zVIwE9Y{)bQe8CxO=aS<3$uup=cKn4 zBXef7UHuHbsdKb}7pMqgx(|2~NscCL^$i}x=XWM%<-EY7vV+MmDe1}2kNNrQ#UgMt zdBekwEQ6D~-)dXo^5xPU6(9R%n>WYDwyz0J&sNNiN_;BBjCfxQPW!>^^9McM#=Gp= zoTii0Se9HuCf3nP6q6kI7FP zSkeh{D;dg(a$RyY(f?XWV#eKjt@qV3X)S6-^Wft2>0`rZiq`=^$~q%v^c-jHU85yEIgsv1;?Cc~*m5T@#cFE?v)n{_% zVtsh91&_x=&GMjVL-BR-F$+5~9is|$dJB0tb^YntNL?3vaIu6wQYvJ+g3;AC%}Vo> z@|t$uE!3kc^-)?PseD`lshe+(oGnQayT%TAF+Xn{JC~cOm6#C z^qKiUzM_#~-2!|bWUhLg?*1hzNP@`L{!_Vi9;q@maE<~TS2`< zBYyW%7on4k%+DU%T~*GyMW-Lp++`!(x^4)xFk9X5GkmHGwFgw3Kbx~X^9!Ge_?JMo zCrMl%n@>i#;Jcsr0}Q?$t`(Y_^=oS&~ic${3*&w5?wZl`dt0+}tvl>nOcxG@ifr7N(=xagg5%#Suvf5xjn+!>Y^coWLck zbUy%CO(rq#i=`^JAba=DTNpWsrHuJ;P=!Hf8yBwlKOd9(+oR{lq=_0&c4V~ueRJF5 zMP5pp%CUtGnB};qe!r%ON4((NX7CsLXLkB)J>L9ONXfVz%)H=OOXTEHzEJOEEyX*| zAI!Ddsc72*`#hyOj%o#O2@kb+{UY1LNA`s*!xunW>sRML4MqITBkJe- z?nh?8s8iR4ts7Ofc@7*8wR9sj-CvL8z>UjNZk9Vj=C#DK=!Mh0yvW|;qkaoKvfq7Mca#6AWxSSeJw14TbqVQ_6K|#W&!2>yDcwz)*2hei z{X9BkLz+H0v}7!K zR}1BmEt;5nv0SF>F2s=Lf%@jUMQPT=J}PXC#$bIti!Hri-Rg?EvF13njz*466!G{0 zpi40=>fmBZMej?6^~O_}8`ZpBHf!Ag4{RfuN^<)?vSlB}Uj6H%;3f$4K_zgVcAx=I zISIW)usY1_F@5dpMkaI+zFpFY2$R-yGH&=ha>i7W{L0Shm-88SIO&`8}&1GXW)Z7$F z?R(4U6iDVSLdxe^7)u+*jpOd-HxLUv*ud#+gN7fdC>NU(W=hhmr0_mg^DDoGH&Y(P ze7ruVE zAU@U zI)G>Hk|2npvT~Jh{uoSMiRHKVQ^ZY@Ls)Pv$KZ<#|Jov%s)_!Up>Vberg|G^f2-Ec z%#YHz@eM&<&_uL}h1;x6YAY{p5=P5&~H!?%I+($^>WzBK4_;NQuGT&A9 ztkbKUt-SHS#Ol1Y`J>0lL z-n1f)TiW)YK_mxN{XuCujF1DWa}9;i99$LINgm(R*fpk`HRi+A&*#h6ZITEf|G@iI z?%I-4VsP}00aqw_HupY~FPIV`KA`6p0kFzamlRwk;E#GPdZH-O`#+pV8u>@D#+nOkAh$<-4SPH7j zjbA#QNB&S$X4rOtWF`p;rC22UadxbJ6YZApW3_xcG|kahj%bT)L5XWeYQEl1$n206 z3p+jD?u*6wyl>E@=y)iKsmf?Hx9#`pp2O$ZG7hfF7XQtrv4UPB7>&7|IPZdOD&P?I zP?N_d5xONr3^Pl8#S}I8gWp9l%t7d{$gd+35;N7(ApS5n6>KaQSM~$Y|D48Tr#tl& zZ=pShzs%;k5U=4lppfEako@+_fj74+&}U(!8F_Hz?FJ#K$n!x9zzbm4xJQ5t*6J+V`8HtX`PaAJQo9r9;8)fXD zgQtER`^{nNOhsx@f#_Hv1Wt;n=<8w8A2hucW6IUB_Jz~4QY}A)sP1pw){$1&d-dn2Iyy-Q z=Zx1W?+nMLzQHcVY<76LC1mVe$QNHD2ld$}%W1=5N!xVTU^;V8%Q$aSenWxxm#=@U zsN}~(y=EQFGh{wTl$sYZ*%b2v*;4e7)e}?d@;noNmZh%ywXw0<4cvZ;ytUdeS)^4Q z*UV@^-?lM3_;tI%a8(*jVrwj$pue3b=R%pW>6*)4o7mVbNfjm{f(YJ!W{Pmb$#J{o zRE=})Z4dvH>&7m}KJ9+GLi@+z_9m%)xxZt3kK$ySauCHm^%QCw2^1Ie_X#6@^P;OaY=0+g{UculvnW~VyQufgso{8*rLYiWGPY^HD1d{v zW}CxDu$JHx$;y)(7m^X`!8s@HakC2U)0WvEq(hAvo6<-3tdEJQ1u{}bi=*{X%?$$H z-t+eHmx_XM%?{}B5O`g6NlSHdKMAZ^x{=+I2+#JmEA7+-$kADdzhdDxs7lW3F?qq3 zD~L7Y&v+R{XheBot!qpxb`ZeO&(pg;VGd-1MY1!Z|K?!zCp1MIE43VQ0+Hz zYy-V>Cq6EYUG%=n;Wc#?K5vG6{>X%w5i3$7I%C#e^j+qo3a__aawLOor`qFY9TU%O z{PsC0TUAJ_XR-w%c6nZ3y4c^IK2H{0u!D{MgDMfk%oM)!5>^wpUxU*Mjz}6-M}Ko# zn?gNPGyD<)k<|B$l$qRwjLgWho(L!b7*Z(W4fc5kFtw93GboJ#HwM4?gf6XKVY$^y zUqW_z?0)UrB;DJ1T2Le)oobd8!7;G<^__t$75{hhGzRm}w_yS` zm!mi~_xM8Il2x=^IQEpKAsZ4J^7lL_^bRkiQ4;`)kV&>$z<63al5rSNulW|J&|q_@ zM3rJRDG73rYisd{i0r)1i^?v0SA4%2Y+UHv<`xgHC>%+SnaFaaZ(|alkIpm zUjWJ)Ecq4zUTnWjj)oQ%hNMfE6)_zGjbU%{4?=*2URQzdRV`iEjo%5irh9Cp^|e~P z2_kxXK~0{eMBsv=f$5~j&Y-p*VC*K3r!kpmd<|@JMj8=+{6lHA$;9WLwHun7Wp8j;;nJZPvr^PZ^L zlKw>gW~1~R+o{3$>2lZ8yL(f~UzhmpZFP985q$@SG;iYe_x%a4hbs7n#s0fny&OYy zxEoJ*H(Q}B)SJTfq{9czzmL94wBPKfWLl8x66tt%9aZqIVE^C9*$0FBywB*>uT;mT z>o5nW^%0>S)k)pYa=eAVMIzD~36dEPkb`UQ&@ZXCe<^Nc|v_9xvHEwylTwr)s3g<6^2-SzJ{!M!EW6x!GJv0 z#vXqj&`w9tPN{bM@e)PYWA=B{zU}EX@{zC!G3_L?OF!p-hd(UzP~&-tQ&H>%cRC39 z;5?yw+&!ttDrPgEGf@gh14!RqrL{BDd7}AHXFqMGcxo{B(@H&36j&Whv+u-5buYDU zds~4ZWjvar@Ab)$(6t|g$%DBapPoaCxLAEjj1F#FC{TB&2$ygHADDRGAUNxY{o+7h z0R{3KCyZMNM+owK4^b&pu6=lt@PIGe!cmLLQL|>$yOTiY;rkK(XI1iWA!F7s(#Bo9 zL6J>urgoJ5dP!39#lnBZT{zg({2-PsY}o#h@g|Mn-hTh9%``Ubyk*!6P2eMTTG8qz zJxkCMlE)6*Vxd*uO@)tkqLzSG`r(DGqqCU<$B(Xrcv-A3ijY;klf$emJi5ndn|^?(^I2yc(w z#>0Q9rZtdMp^%h@oP7iDMuBJF485-zFt^Z3C7^nLIp9ed@P2k=MW+2@PH-ra51|QN zoGzL97qte;@wq-tVNeE7rhBfy9|-OKa{rsSvYl>ZFx2AVKdqybb7seMH_=hC#bE5w zT@Zdxf*?wt429mT&qw1x3+c=cH7r+!1#UVP-?cy?Aherkv!wKkAb^Lu1AYqIR!-5) zWH>>SO;7a7%AnxZUaImq%O>zJi!A~b)W~opYcNs3-;tZ`egEbYe6hkYh|GF%LF(|M z3y~aGcJXA|Jswt{h2`YtBTLs>;*R5}ZnnvVV76mMzG{Ju;Os30c02EDW0?&#o1gL^ z+~=tc%-)L76t{rn5~L6ld5p}Ncpl_4l))Ja)t1=5-&hy9NEj|%xuBSafAlq#w@nYA z<*=mGJ@oSF*Od~j#Fv^F9rmD}fiV}Dm@55=*a|_7$pg1OvMG48(*3kVS`D5Zih64D zH^#3?pbp%Oqe*j{4JlBQ_a><kGqwfOJ6h5@|$HZNLmq+m$8WC1jy% zBb0!`mRy;$>8WJ6S(JaMP_{FCz2N-o0WZBt)1Xq>Y(%d2!0jUdz5X}=h(XHbILzgD z{|-aizH(w8L^*OMM6gHKq@($Q2VLC89=2*5e`3SvaCC7S)u|=Uw^?9tck-J3p3{ed z)<&|#hQr+K(qk^K45G;R$c1F;F8xMWE>=!Ca`t9hggma=|8(^gaH#_^4JVj-3eovO z;Ak>$csGv5!r#%tIZQbCr^iOAd*)Agt=k=)WG7~dU0qJh&s2+5rADqb>xg}PZz6AH z(3a*?TV%Y2PwxrcFsE|Or`eH?8P3CA)(2;HaWM&+3^z1`^Q$d`8rnaB{8|SJ^~|uB zAd*NSU9(#}$cx<3k z_HpN3%=cGdn!B1$idx?A8-nq6mbu(^PHOPHK}2eQQ%*}pGUOVCc3{*(|D_-iqr7Jw z)a-BKe_D>>4GKre9FKt5YiF!nx6z9q>@iC1HhZi>(a351M zJ_}RVS0=1d8h1t@_K2+XYd)lO>qpy|2&#V>MG~ynPoYh5_IQh1^9cnBzVzwbaU&J+ z-RxSXod4#KeEk2rEE6wfFd|mz?M3equuxgP!A){WQ|5UfuJ8SF*#EuDU!9+YHoP9@ zEdFp;ii*ys=#S6I&x$U+C9iK`IU0+>n&U#m{Gs^_ILzmj6j)%_^wEzxpm-&ZEVu6_ zORpfak!oV(j%!;a!5B~*JN5E6TmF5Pr~4CaeiesYHM;C%oC*rnuwWbwhiOgMHZ+8t zdLP(@@}k+!ov{VUXWu+^_3ty8qSH-ZETLxg_dDR*THBK#<^!vnd^g93Y2SH065$l} zzeBpHHNiCg=}0lewYKp{`uR*K-E_s9s1f+xyt3Bix@{CcJ$*6j&d;7|imCI~WX?4p ztNcrUlOR_gU55Db$G~a=lFLPDVMpA7woix?^mLMA1FhP=p<66LP%~XteQ4c-KMECO zRMXs{a48#gS5ZKBdiJg!#ca*-?zu&Y{Yj_HVF8bAUuIbNwXqzA|xZvHdo@TeYQnG63e2byI z_^!nVYw-~vGn*0-M#DtdfPnXk=Z@|-LHF4=tK3`U5;yfaGOf@OS{K*Xdo($@-Xu3; zjC#fg`g}97wD$N<*YDia4=l6G)DCPJ&-t33=>WaHcb+MwgxHf4UHE!a;SMqGaJ%g3rGcO$tcNQ}T47-4w_eA7w>NRX2sD3muL}q=yVjmQRhc=tw zx%Q=U!8G9SL3vf5Kgi^R|3sKO!BF2*5K4qXc3n^f*it!ARnAXK#=}ybUabB+wm0s} z&k4sIPs9>NuS618_2ZQLSyXk2>aK*8ao~*_D#xc*VfJBblQl%CLGM~2KMm0yy)ra4 z$G{f*a_NPN(Eu39ce|-K5owEj9uTKvl;lv>T7;c4Hse{TG0%5+o`UYUL&Nm zi4IhP^mw($k=^Agej?p+@4le`rD=tPq>iA0$;|CFCi3|GWw|rM_d8W@r)z6VEJbt9 zU<>X;w)L0b2w0d(zLJ-5Q6J5~{e%C3S)rq!ljq88+Ry$@ss3C+EfH3hZr};@p!rx?kJ%mmyaoMBL7ADIzg8 zZ$X#v^AW~Y-^mDAjx8MlI0Un9hk}>*29v+8hV3xQy}aJQ?;)-bH??ul0RoBLf^F5v zTGTCc9)O?NBbOv!CLITguQODv;Rh^DLu{MZ7L1o7-2X@mOD;wRC_qR8wYTu2<3G9@ z@Ib%M@&X^J?}UTrfal2W34A1JY1-dxh9H?a@wIl`{nr<~3ap+1V0EG5Z*Gn>gfY31 z)QMlmrb8Qc6X{j7L`l}Me))pY4dVF9bSZ+1%q1#`dMg?EZAXmA&WV?K_LF21Yge}T z6cClUxdP@DWhGrUiG69fRpE~npn>XZXRO`e*QEVE4^1aFT`wY#o%C^6)9V*>+Sx zhO@<9@?JEV7X1XnR{H)f1u_tVv+6wTGTTWVehT%lI|e)?0wXc7QH6#d)B~I&b`4jK zXbD>@^B}Ip$tBcMbx^;*Gt;y)#Q0At;lB`tcckF|B?7#vhv?9b+Z+5jG)~$Pmx)`a z;eLi?1o=Z*+M7J<1%!8>4d`j6r6(OJL_0~@qnsXvYX_1xjoIep6c?1q{9Az@5uT3Z zNOkJZwC|6GEwlpL4Xu~aS6~&$U*{e`%C-$y=_cA)l4Pqe%aA|1O=??4M8^vIDA~4bs`D3ij}b)&g6*@*U0~wFHn7f*MO`y8dxK* zG3D7+dg-!IKN4if{mfPl+dee0HOsMfLRbi?p8Z%3W0I_wzWzJQo$d>4=V(p@ii?41 zaNnpOcTv;lNFP_1sv5+Gh!<)%uU}X`t;sXhJf*{Un>TgHCVb0b3YDWhJLAFw?Z$CQ z4GFvn{KvSbe`5Zzr*0aC_Zy?mTnxjR0=|Xnw;AtYq8-!h#|I{<2Zjy=DS0oDI6x{S&wud@e-$(kuT=*espGaPEDs=%4kL^wW#}hh&TJ)aH6B+&o8m zg%Ml9{lquPqni&im-}s3JsKjRh=u6~&6PMobcnr_hlCMxG)XHRc=kgB<=+1;@ZN#O z^y`E|$*F4JRJ^%b=Mk#JqY|iKmj@wE=I$qa7)@w&xF0v~<1fVQ6qhs1@qICv5yrbq z&HIp~fiF4GK=()9r^y`QSox$Pc`-wkl`kOqSM#FNc6WCtGES`aF2Y0-Q{KRs{ZEwt zVm3Q$A-J~Y1k$Uw$avo(lEDN{j`f0EE7;>wuxdF2VHd;ZZQ*qUoTMPy*m^x0xS;v` zts^{kc5hrKmz2cuLJLCIsw$S}wmy6NSel2#jM}G-#=Y2rFsj7NI-RqW zfH!c?UrM2pK|~GeKk6GJ_yeMUYkB!@yfVYfYR#E+b%fb`vKGwI!R#j@=L5}sGB-nJ zpLyEzpP2kZtdycNUO;j@_Q*41WW^r96bF5aU z&E3lnv)f}s#Q846Af?m0xPw5?F6KO5ENlh}<~^m#NuNHtuuApRa~R z;&I72=Ugr6e`-cec9??*88C`nyYLkr^}b0jb{DIZo1_SJbP>O2s>5_b^JO?jBAoJ* zeIJL*ApIZtNb>rAHo(#NW;lCfG;#VQG{m~vTrlLfmg`9sel)nn6HPA{SePy+NcWZ* zhMI*vbFI4OXL6fM8y%yNyGou5@o=?^9j~Fk79P`&JK<*K^v)VjTOYJL|HwYYSNj4b&CIR*bO+h`JwWHeODw}UCE{jSL#)q^|(YWA6=#$ zhS9~%wq_@DD5intf2y0(0^hmbO%T4Zti?C3N_Yh>TILt;^qSm-rb;|hln83hsAoDz zFV_z0O;H|7__g1A80;8(HEh2Uh-xe60 zT-zCD-grT9!poOBlqTcdpfw!bAhu^9y!}?WP_GKSV~~m7g>RQh@Vnll!ut}Ws6KIQ zd3`_C5L7W{a#exun`Mg?euqQfu&tcB8a=i>^bn3I)VDw0m2Yp){1;+rtmG`~~41;i|0+B=8Jfnls+WvvaPRZy3g8yK8jeo&v*7 z__d)hJG-Il7wkK~d)M1Z9Y%`g@{rZ`R-VA%Df&M(1-QMEbI;*u6Mu?+@Elv#Fh0gy ziT}k9z1*0LODBVGKx8$lopj*UZSNeuUHH9uw~NS^h}1yR*WJwM>6r)TMD2fVq`a>b zh+a8%VTHlLLVrNFN{ZH=nD?#=as9zZb$6ga^w-_?$l(*RGYRX!GbG_(d|V`6HeM+73OnH1+GXAo;P;# zt&om(?c2vOT~|v{se`9d%{&(JTOjzMelWcBjPwGl0-M6Cj&`5BQI5+CoIl`-gfZ8F z=U?N6WkB2j`xQ#!FgXX?h__DdUTio+eYW5mPto+f%I*Fia1%;=D31P~u2p=-x%~&! z*2V9xPCkE=%gqZ*|F`-<(MBppE{EA9=TcCtL?Prtr(C)rY|D(%E6vY;F&+P^ zV%zax8CBEGMJOTS<-rV{z>7@i$I$QNGn4}REpd@$jEc+M->knqSzxH6=1Jq-heqYJ>Hte?s7CTXKkY{y|-76XF6jnd4$od#A(GpmrKFLH{ zp4iFj7t?}8oPSJkpD>U9v&8hSH1hHCZGJ6!yS3Km`J6A=XQASFDZU03Q$Wx;Sp$~| zJFNYiM!Vu|gU+*{Lij@yTfK z{DOf$=~{&p1T4|gpQxjiAw6Phsn0y|y7_sVe{2sI7eCN#E+W7T1$EAxpAmva#8a_AC%_&Qhoam8y44k>Isz-#%HRL@c_N3~ra>Ag+9?wb&#>YEd#3^1VyJwPGpv z2h<#|ygJmT%~IpQ&_%+iYtCLFo!Fy~`^iexV&ufYHY16m(T19qAekbL%AE7l`fQh( z*Qna8VbyvlMw^B`g^yfl-S2)CFDkDl<)z0Kc3HL;Se-YHQ*TQD*$gb=5j;Uxh!zx3 zhrt}F(;VvZR~^Ki-ctU3oKnt)nyx!K5%);6MRSCL+j6y)S1dwJ<-^I&juC0Af3H%s zi0Y9(;=k4t%*FF-Qo$h5?E?+whukbaeju=+aJ=Dr&}<~Pb_;C0*rI%o$c(kil0a#v z!`7YuS|)spTmepa?rg6R^TfbzLfS?yFMwK$-TV0>Kxq508ks?NJoZ4lDVahg*vUZ)KZClG`C5%encoLu4vq@{hUC>uNa%TrWB@1BIa9=C?OyiYJ)qr(`EL zyTkJa;wjwD8}>nq+uMJg%|g9&f7GsYVYQknPUDU>aqB*Ue8u3OZ8dqew{WF&KfvDE zWYjHSj8#fwXu~mHB`ee1rfY@XPPwv$!Y=SBL|r$sd6X)%`S(ijqk{d^$Un;8&y1tL zXCgg#o-mNMSA2kjS1SW)ui1|q7w(VR$F_mSaThR7Ricp!8?x%eIUdCk3O%M^C&w7qLiJk94gq1iz zGj1lE;i0;YA0RQsc>ggTP+fyv9($%D!!-p9p z%x#`K-C+O2INk}eQ(s$PWSn5OH>(+hwQx2Mt&TWKxee+!XD+JTi*3J|Y>XTa1p%@ZarTQ`@>q1s* z7m4Nz!>FeojYeZBVD_{aky{x({S57qy))($&h#)BSKbA5>)z%@-(;u14U=+kmR28J zRzYUzRqvbnnkHOzf6<#QwU9k~y#qY}=encqZF=|3QwHwVzT%EsPICs%-%l(E}#)wGVW@scU|=eU`>#{-V?zUL^%kFE>NXq zca2Sv=w1fjt-0bp?jf>YrtiJe2KQ^sM)?G9(@t2?p$m@wn-57o*HQ(DjM4Odxio`k z6M0+Mz=lw$C>T`Cir=;pl`$>pF0>n2n}ALx&p+v6z>97`8m2ZSMqH-D(&#I=70-IT zM8c+FFOjCa!5af)iR;CoI#ty`F0V8#NJ8m3$GI*m5*v@AFZ3>+oi&RXkeYskWm!F! z`Q3Iack-EWy^9VXk@vBoo7<_`blxf1;Ja8XhUsa_fxAmGGWn1M-g#FSCY*@ZCz< zWv7)fKUTCDs%xy*q*YZAPb%H&ZOs_h!d5=f-={vEwyr3yy=K9J1kX&b$QIio#{T!3 z=I?eT{CiDfyDSG0LJ9g!Kfe@^zUY+HPjBxIe`kmr;VRBd6*QZuzNt#1T>KIwpGig2 zjM8Yr+&@m?n;nb4Jm0tcNqU;c>4k{{;6H^c|}l zb=sQ-?##5O^KTdzRVKj zHa^%wG28gCO?+4>&ae-9H+vEWfO*())NUs7 zw=SrWtql~9dUTj7ocju7xerkCZ#o`3aggaFV3}Bcls^z_MK*2&lJc1{YN2+~>hN3? zc{bxoB6C#k-k)o7Lo%k`u{3i;r}RHX}{g|Gy#3U zt7FBB?Tyxhb2|x>MO)cSU?du3J06aSm|F?P$!Cej+dJ=uZ#l1^AlsvxTVj& zS6kSjtqa`$G!oSwyvwsAD&{U0`Jl^;gy9+4S1E!2fvj^I<`U%q_@I|#>7IE)eSIQy zx%@T%7}mPveHQyIFv%;U{a1owc{8cSMAXWn{)sO){c-IGt?7#@n`atn#@CJ(+=~JR z8&`8AS1>^>NiDuDDT2|qmR9BTdP+Y;#>c7g zo~lJIed;?`i%}HgEs8T|*bCXVGxd>YjBJbN<}n4QCl{j0+?fNg!W07p9I_7Dd(5n? z(RA1@Gxwo*gDEDbe*6mTD-n-^gv`s zbnhB56jb1v?bcjaU$l#HT(sW~x)@KW%8+@0%H$u0lein}2i;4zd6f>9QU_&0Uw&=8 zS@#e?=QWOTm9xS()S8SkrrOWF@k_PLEZgtx$HQv;{solBoq8YREp~c$t<*U*+aY}M zcq}`KK(q8!8@og0_{=6*3oJm$%bKe|JW8oFX7q}L*A^>jqnkKIn0gvyZe3!N;0tJH2tfHgA6>soxE}2X`ewMZ)^mudQg3@;YMaBcb&k? z*M{Cp*8X8R?ml{RfieNC!ld!Q{6WvWYc;0oy5dj*f-F<+I+nw*CQLNs;NA zQ=b^Lk*LuA(o3XjQG3VtYH8jhx}~f*mUWMdeL?%D<`AaG&qV zG7jcTAn6CtXsNYCWKt`R#=nk?vx)e#;gB>9sqXfkh>G_iUuQR4OuE5lr#7>KPe^ok zdp$eaN|~AKzMnt_q-)(nWLiOkE0~D3)CRWmtzwAPM1XP>1KtLY;Wo-xb#ziEvc_l- zE}Pd$UajVFaF6%`Nq*_=kS=ojU^_s}Nme{`aFlM*&;RKRDcZ51J->PIc3)e!=~#NY zI>ugRiuK(g?9Gk`J&nI~RMtUvgEbYbjZQhR6Fwp)m`ymzOrgmHJkG}R4IRENiwiB< zabO+v9^M(iuQ zB{#@<`}<`+KW)YRoEPOR?s!XE4ON?e`*+dFbE!Hz4L-8=fmR9lwRz;~C?e-NcvIh? zK1SX8R!dN*{1ATOUbFnTIUK3Jbpe^xcf5cv zg3Re4-DdQt##u|AeNyreL?aW*G*rnyDL=wStz1}#X3m#ptT0QcIn!P4={?g!c9-QT zYn(MtT&}SlEG-C; z3GMMIr4}<{RJ5cSKqecM<#FfTMlDfjb%diTI2}H$(WWm!FHcqP=QcG32&Sf2X&-3_ zLeJ|OOt)>~O+prr@l;qDnsM;4jZcLzpRPGKDR_hCfRlv|FTOdsK@M+wPs4LGCuzrPp=KTGn& zd_EiyGrH3gbi6PTmX6%Rz4zr0Z)FCz+cPQml)YxUDK8C6Cup9XF7Wv*uAY zTY;NvAy=?+lPu^!q_F7vePHX&0RmXLJqOyNKWK8X^me{HTWW#xNd;yeE&mDbT4lBS z){>e=80F;lQ815jrezzr|F*EXDl>9ws+!)&pe#pyYEF=#@0}y(zJ?y`;-mZp7uMhg zd4Z>c;Ktc$8>8Fp`~E+SSxorm!=-(Q_g900GS(Q+X)h2T45(>PNJ(+kFmGEUyvzSH zBV3fow>pc~&yoMdgLyQZgUxt*fzf@#o2B4yqX)xIJ5W|y_Qj6Xq2$#GNh4pa?j0u^ z>rN`SNwN(Qn|~kT1}p0zni6|(U${2=i8Z_rB?jCmk|0HHzi+X2Nv@NM!V3&^^VNR<6!wSPsxu$Hoz2;b1*nG~6&k27%`%{R^|O1Mh*oYWxKTxgZm9y^gNw0nKq!oGlpgno4=zFsu9xL$LQ8 z_wgi?g@wqD_Z(LQ-XqJ_;6RgQu#lruxWL6*}P_{Y_d6H-+PF}!^9oi^4g2K#Nd%yB< zrGl^mCJM$7isoLyHGw|cP1jc7F-i-Z|JcE@JXQwRxDr_0+P`glrOKU+rrOyu6QWx^ z(J45WQ$SroO z*wi*qS#mmwZe#J2h={?I}QcI&~8s`;}FolENbM5~$-zJKYTVY(UUDJR2y~i`HzNNPP=4yc6Max^CobZ=DmrN0*?rD(X?G2tdu$PcOZhPU_k_@sv)|l1|Z^ z)lw!unRUx)OI7d+6Dza{{J*H9P}gg9VE6IbsC}JRTklaN|KTlgqFf$bpHy%-=L*EL z=k#%Jd7q-1$sFb`FW9c>eHLk*uF0;wLpyg1m^}I5u*5o;}^&LtEEQ0 zce{s-Yr~diyjd>BS=49{;d%cP%D3dV6o3+jj=0~z3Hk8=#0U!!O+;C~vwIoZML*)i|;x6)(^Qy(a_{7G*IPwT8>* zBhbNiG`bYb1OfV|mnY_z0#(^3eNxu-1vLXTG96bIS}f)QDadub`QOzpNdTajzCnot zRhi>CNM}@}JT@}?w8>iQMZpuu6WE~98~?;Qf}FOD*c9<;JfaqviIrf&BF%e3Q^`8U zLB&y^iO>DYxA7{y!b}nBj=I)>Mt0egwnRhziWuEhBn2~ojZ_ns#FV{6lJOp8;SoM` zy8ktz-p>tHDY5&D%}<77ZHC^Ip5A;@TCm*T=#{1`Lesk4k=F|Un8E>IoMDqk627D> zPWOm>etwBjz18yLJZfr#GW$jwmgzh6fdhF z9jaYJFb;gJ(t?@eh3i1N^>&=D*HQz~+NIa^=Zr_F(DU4n^hv1=exymxKubf@FYnWx`$0&1bqLg1bh;&w(h!*)_EKLojZ_pCZr zw&664IVf>|rg@mM&9l!0laGRXKsL6I$#4X^3q0tR<#jST=e6GRt<>$-#1;Jeo3cI7JQvYeG zO6-MB0jK+@GW!X;MJvxQzGcu$c$DAF%Nt0A`A<={z8$LMvthiH)%Hf{T6bN)_fYoh zP(*&|Bg{ocVK46uG_CO59vhe%UA=Aeihn-nzIajPPqc>&jiVMjXm>N))P4E>5Q_IB zohkV>KB%nO>-z9f8m@g#vWm$mT+V}FY)~=fEqisGx{P|@wd?Ui-*FsG6W=~qt-5G< zGzXToch+>nf! zk$$4{y)On~*YADp^RAF){$$>-MD_^#UR8}$y#TW|Oo1hikT_gDOM^jCrr3v106(%! zQLa)FWVkiBL1Mo>T4EC1+RziwrT)66MCfd$5aQkq4A2+&o~?v8!(bIW6WY_j!_PWf z@EVf3MYS|b)Q&3Wn6dE@9H}Ntu-6}fqJ{5zgRUY&b$2clG!%%U?7e_^&^!7N-M)p* zenaokIxe6y8yUk)<=i2bCBt0K#^R6SW3ghKQ#N35CsQW{75PakU)MA6@Aaq?^ONLX zp3Wyr&?lt<)|~x?0djVF%1dp^bP}-_m*VVd;C_{AUQXu-;}JmRc%dB@S_JY`*9sMV zH8X7Z!>;jo1LZ6+WOt)Ec0RItVAS9N!3ONKJ2#(8lHqa`_Pg#!>gwvnp=L!9u~y6p zIg)gYFJKq{F+!$h$6btjyEgP9&4+_T{e4LI!dUTyF}gtGU~DKNK~v)^f{krVm@)Na z6p>MBLR2aw72eZ9317apa=dh;fQ`><{D<4{v{xpMGCTAf|mkWNEx)TK(iGi|JN^L-84;1LY z(~}*(_kZP(KRvDxtq(a;Xgmx2uO0p^E_Obul-2Jo0{;un6})4S=CoIvl6*J+tnn)1 z#pKLHA6zF1uy$#7kCdd$c3>fE4h${7{H)`tV$wSIXC_g{1E^3os`KLe{cCg2s_mPnDiC}4 znLv=CIhWu~P`1c7IR^&ade)}?5YxTKSL%h0zOZs~Sq6tU--@P7h3;P%bQSSPB=y#% zqL=WWZ|@%9rCX*7UGAqRS)7|jXt;-^3Yhi{#%T`o_RLK~XdyeGFWZQPmwY}U{i;YY#uY~L4Z$%uYE27JPv?mM_GY~~z4(7vR31!w5~mvWMAuSz-o6o}0v0-?T4 zK5=o@wL;Cx;JCY`g7n_9R8^=EdU80(u1X zhp!kBwjVI1%O4&!P@S%N@r83<$-E{LFHSD}1+(~q>La)M&kin$e*b6>Q2Y4;J=y>J zM8wQ}uO!7FW=n2>o8g^0(~y-p;Q)-ljCS0N*L|Br@gF^a7w!8{$C(uLft3mPzD`$G z=#5YO8hASVNiMV8TNTcuO^&H{f7K^?-!?SyDG{;5?_~`FYj6<8SBoiBEOfstE+OyS zLQJ<{<`I?tqnW1aBK?2U{Qj#CnqPeIVxZ#i^5T%2K&ee2g}y#VuIMDaUocr}139PQ zc*85IBg?;){eOz;n=+vfsdI+;)wFe_2#K7P^qHA%mD9?T?n;gQF{$v+g$ftMfkMo; zxBHt?CBM>ET+Lw-)?=)jsD9Kf&N7z>N6mY|ph3XaPB**lmWHsOU$kE>B12gozTl1; zCh2#peK_>hX&_#tk?7XCwTJXP&Yn8WYqCJ$i*xR##O)`e0Cp00^886}HTp~f^G-z- zyhv0`(*uF`Og(bra$o&cvq+`?F$p>$Bl1x1Uv}5-8`^A^EKdM}{ z1|bHUZ25fD(_>7aM2jRUvJfl4tWBPC6KIyO?X@1)uDZ}uK!?l^j6@dv0TP{9tfSNx zWH?_hhtf__OY!@HAp7Kx4>3Q-Jylt5FpT}3Rf3fvVb$m*Ja?#TV7wcJA4j_7*2%M) zN;$Rmk*;|ikx2%%g`R$g766hY>p*@A{MOXXzP?#gcGQ6C)^?^G@uor4LnCRi*)oBW z>GV%@a6T7fXMPd)+$!a468dphea$SDOc9$YYE$pX?6@k+l=Kv?(R=1lwvjNU zyZ1`VQAG;>gyurS6wSB^}fEe`N+ytA|{y^+>Mu(kpvf^-BNqmFN4Q#`&&=?lfn zuFmn`^8eUG;Ad~wh%RofH*7TNMR2_57!3z@jIPbmsjIeew`RHC(!arg>|8wwrcu4> zzN@@QGWNfY;VYWCH5ZQ4J92tI-p@ef{i?!vHM9iq@m>-Dt8|w=c?Z=4OG4aZg;$|c zzLGyATVszUOZRaXyz@^e5uLh@J~Y`os>PsJ^Z=Q;0@^?4w9VoqklL^ z943mq5E&qCnFedh#oVSC^E_7AnPC>5D>S1A;4($uqHkCK}Fx_q+)`Gld+&uxopX&hidGoMgB!U(-<>3Ec5kA^fJ?d<{~!Y;`n)mX;*nFc)$;UfB#92_~F10VLYt* z3^f@rv>N8_Z;4;aI9^q9|0Y9T@62fAZgUoBtIuE>auK4ogrcrE^D>|>go{ewek%w} zDAG=-weCS&>=%9mI5;A^S!?xA^iMu~;|^Gg=;X$hdBV1gTbPp;vhnhk2#G8HoF)fd*D)t((&4u|9YM{8A4b-8XF3-lSV|2fELyP{ z-gbxq!(t?2gDYn6`R)(DiOP?tNgEw*1zAnI!=N-n5IX zA0R{OcDxVJo_y1avgLM4Tzd;u$WLW^#T8>rrYusi^Q1gocFEnK_AIOf35tQlM5o@a zAXNmQsBe`3td1bxdq-Gjs<^{{uyr50Y1%fvh@SXb656F%F(L62%%z1-pi$`v zQrVSXt(K5S4bd<&Uxc1QXu?C?O>IfhY>aU52HlJkEg39Al& zA~e_cSXkX~ct(7O*o{ZWI72uZQ!!>LKHgz>3oq$`wbQ$0^b9Sv+h=+%F!ttO%VB^$g?eO zAg5$q6kH6S`KU&Xn5kra(T?T;t}|&bz)&0r@i@{wNZoBZF=@DWeHiFe3A)}J+7CC0=NaW!ABhSF2G#a(t8&4o* zpm&6MhQ_mnFvo}lFn+ryogE7P7tE6&#?cId+AEyYus1$|Y!l|UUR!ExlKDOv1I!jK zKQDyqS}}p<2oKSv)s#~+VQMQw$s{6n--hC0JRyq}CA%I+y5S;Fwx!8nw0>Xkp7-@| zx#Wr;{mu*pqFF_Bj${9S3jlpv@vr%x<0=L-#~RTIm130aH);hTLYaMy^3=FO?0q+T zD&nG1pAEIR7iMQV_M(Uy>)gIfN4%i|Gz7<)Vb>Q-o2fctvpOi#7(_2sRb&0Qe%Cc{ zNuY^i*X?d-Zexkf`nXjifEq>kmlHiXOoieDHetnKa zt=#3MV!(;o!bfDxj7F_{*irhgY#GobMgGj&jLKhaEf78ZM9CyW%UVT(11#^AGwN<; ze;BGgY|EwVe_9sTXY&%M9%q#khhF1nM<7YjyuQXKy|N%w5ixT`y7eaA9cBrI(Lc}n zrWnvd*7G3(&!s5SmvI5}$V4ROAuvl-CUfw+f-BE5@6ZRpQ8h)n>zRt0S?8~fXB=Sy?Xw-Woj!*Q9-oU(V_KWoWo9CJ zq5MPCzg-U>cEB_;MvpxU1yb8j{luO$N_oypoTr5dL}M^}*)b$+*!v1%iD8eQG$ZLT znxT$;1o+400Qy=j6zSGbyUKknkiyx{R&byx)XPtMe6-{PjI!3Ftt0*|t8$g+0*DO8 zdeEns!guSkwmYkISo}$d$9LaeWs1h(wdOTJ zt;w~g1!WWr9WxvCaU?EdUTq5Q6MxG#l;*}q3DuFfY{wYcEsH4$kD%EC2_J>M84zfBy zl)KS^Wa~-D9kP#-@6_UlI4aAFcjcsTtlvA@@J2iCDQdbKuOIJh%ECmH%QSJaQ1&Zx zB$SwZR3^k_q6;KbEAtdQt@&*kq&E}E$-!#hqMGz6$};P@7Fws>nTON z%S;FBBTgRrp+Aw~r1W>JbZ_EfO5&rZG9eGx{Pr zQoz#$b@*nwydKUeOW=;J`2qtHSU_nJx-rT`%kp;q44f@Hn5ieJ6qOJi3GDu z9A3(;4aT#0_5}8=Z5A%QC~)#0tNL^@>+up!aZXphT;R;s!d_60M!u)z?Z@DPZ@k=} zC@^^JEZ8yjv2QWCnx4@PIQ>#4mY^?4$gpn{Q+DOMlq(Z`l}&rcwh>JtS~@Qe6{>iG=VOIPE^dSxCVTR)Q z?3tlLbnIN&aY1*(nJ$@9YE7lY-LpeEhoHsqXHA>8&GNx59X22*juK8~(r=u~er5Sc zW+c?>4Pporxax*k>S_SpPssgsVvwDB0GFWM;kQR#=@DvY6kAYt{yFLF=P%p;mBB(oRk+!);f9sy}=a@9ztK$T)ae zojnj_J&SEagNd64?v0apUR@Q~%55Cl`O)XDIjs?%*~$W_H%$PKPzwSlwbz$PLjb&F zlC{;_tk+JL^*-7g?H*KL*MWRG*QULd3FC zwbntGmWH}jM6F>>6ZcD^RGE-b>ok_Ah{AA4?vQBeBKzl1OpRIK@wX;G30G9M_QJOH zLIGZI$w8dm(WqA}R}$vd2ll|KQibwcOia7}m>9d=)-BFPmzEy>7G#sz(E^u8k2{Z= zCrkRYg*I8h7qvQ@slJ)ugq6E*e9F~J$Iq9hF0*T{8FuAiq$S6rOCKOIXJ2bpIY_w- zL}e;?(>1Q3Phe#(5JmJ-!H%6Lky#r-lsZ61%aFJ{gS8~?hg6}urpIJ>gaLY;ckWQ~KLxaDFIMl|tlrjcT{ zPaaoIDI#S2Ev>A{?DOfT>GKlvsNS+lY$gE&?xYRWlI3(%LT^nj+jn`VhR(b;B;w_J zJ!75iMuNJWWz1Yk%RB8I;dDd>PM;Tyip}kNiX=ccg&$uzDljjAghm`n?&k7W1BNe0 zQ3dDT!{pdLoo0`}697ARttYj#xMO7LF&TiilbwY|qp;IlgEks<*j&K)Vb(V}8M=ZT za#}%X_wr48vUiH%oWp_R)uqA-(9*z7r<2D$X34TV++iVvI$3pcW>} z$NlCILvVehTy`p;Eh?5l!$2m+maNKpGCVaWeyztJQH6_ltjQlS>S^Ca<11_Ztgr28 z9!H@j=r&;rLIa%Pk?91=X^LlI4DMM&AFR*{9d+eyFzAQwr=cpBeGn-F{#3J(dKL1a zy>7GcR+DoHCf{j&XQ=qkpY-A6uD)eQd2*atEz7;nd8iaxr)H``UZSR!6yw<)e=^8l z267>6}x3ZQ)~ddpD}u)!VVuR!W`Ye-ij+E5q{j3Lkf@=nI9b>oii~OYL$d&QJM@H zn{K>}2CZzGOIq(GG_6*Ys z*INZGe>&V`Ohr`ZQR#Ml#btNPt~4(no#=POr(C}@Z0XZ-0;%IJ?B4O(D73?Vdz(~0 z$7e^ww5qG2jc*afzlaI+uwo={}S(I|{RP668^_l4#@IL(06dztkaY4Y~3b$EdnowgAc?17YX4GVBr4}sxX`Y6o zAFQW=owrC+uW@16d@41VA$2)1nCQ#Eoc*u-dfG<$IFSZ-9R=t8Xa`oG4*9LIrM|)5 z&9zr0)%A+9r`$X-xRJWJ7DBiwj#VIdbJ%i9_3~E+z{Nu0o5S{x%5Wp;q6saN_6zI; zjzv*gk<4N)Z@!bY@B7}qLNb?;bL8xf{4plm1Jt}(X1^Zx#2Ri{TdBURPVk1fE>nd_;WnK&4oM5y4!90FAp&3hRZDbm-{J74~O_oEMTcKysg+U9ZI8QXlUZ|jjyeu=~ z)24@kW(S*lg9+c_G-6%lqqEM=)0Xd+0Q28<=eVA^nH$q{r;8BOX&-vYH)Q?eR^1i~Ta4wj_nj*E{f;>oIY z+$u{DO5E0qL!JyfJ#nY6wY+HhVsRy1AeyeL%WS~xcH5XjTeNR2{JgyyP;65XE!yKF z|Mmw^^^kr${HCl?gU7%J)nuz~y*^_Ldo+yz*8fu9Z&Y{&z7V!(;jX24!AHE?boo~F@rd=lY;TnF2s2-@aS?Gmcaou+3t?> zU2N3v57BuP%`;ZRg91pP_R!(V(0c2#=w<5)f0M=A9=GkN^ljLeE_~O9CyYBi zjXgq3zp{Xlhqr-rI$!h*I>7$r?8^9LCe*cZLS#~S*@sF6HjHpsNafp>G%s_2KgpTr zy_22Q&be%t$i8lBVe7Xla$-3Bh$Ee7(fup;L&{=_{{3$(ph0%k`Jv{!Gy1KG8vAGD zcq7>*YCes%Rb!q#IF~pCquoZ+g)J=p2O4=~Oa9RpV{W!2<1b1mvRG)!}C*0C_ zQ8&f5ysqn`lRJLX`fmL%JAR}%fvG3h@@%i>4^)Jv=qe*;1z!lPV!ye4qHxuYe+?d} z>WL zjbjO!r!ZXSmeo#&^Dxsb6+=O|-V8OqqEL_br+l6+g%)$qfVT$u_7cZrNCvi|)nJeK zXw$*mr0~^{GIb$kFZa>|8m_|^U~{E$&_e@mluKY))9T(BQ?m zR0v@~OVmdc>KT#(m#-$LL!1nJEH`za`gcTjcodm0duFMN?*Fj-@Q#;GB>|dKFACaP zsTDNK>qhq$e;%@PH{|>Mp#S|r|M$@Vc{!8Sgkas~$f4x4co}GI!NUncG04Wb1P@M* z2VGD=pk%*kdH{^bRiExLok4r`vj3BJ$t7!3avO(24M1WEquV!bYtNSIh_0gnYCbXW zGn4OnyUhcaf&& zl%&i61XlkFg7j}2tVXVNEt3or&!KS#UI@(VVwq?Ge{R*)l&(p%BEqY&Tzu&!+Pw5@ zL{^X2*F;v#OND1K$#*sB1n+}&W%h%IqXw9FXiG*`@du%asEu`Ls`|)rh-(wxh zIvw^!oHcQ11F@oK%q{6xoLu@|4>E^_id;8_tWnI z@tK#8nk&!nSL=CujE}mW_rlypc^tfC5{aoS{e8l=VY&^62Sd}nj6BIXG%0ScJ*#Zc zBvAbd^hOSLM6aDVKT`r{XS=HI6S8#F7*(XXpfNXlaRufs)|>b}siIx~VJh1wbZUPD zANc!C{|S>&+oM1>{OnXQhZD3014VBJ1q6WaL-YJERz18xV6?U=_rbtAKQ8Z|hK&XP zdFD2oxLRoF57|OHdMJ zy!#PqI_}fA(xlUnXoZiGIRA-i4{4vu8y1>%bAM}PZ8cbNhw>w+p~?8!!gTsNNfaH% zVrX7jWta`AJ4KU)$zM_o#=;y{BsADbC~uieQbTy7$gehPnqT8d@O-8CMvQXk-1V7# z$bySJJ^5lAp`Rm@O81rN31fh8SVc+CD zGtanc7LdM4C1>ana$RZAdWT!N5J%qjPoG9a@cJx`zcJtDZbK{>Br~3WLqV5LBIeYU zYr$0YHzUYYC>n)+_)JV!C8qhZJLN9ZxF`a!%BTddwi&lebm-j+5vuM;q6GewGA`~i z3HrXLN5M4yQ6pr%^ES8hE>c-hI_PXgRiqePJbA?#RnQWvXokY9iby2FpJtVjh+C}z z2WV8Yhnppz4KB$U5e1Wp>n{?$Ze}eORAJkoH#=emuh|Dz-u_q;@$%kV!A1m-q`^b~ zi7PgCFixh^PNCHy=UyvecE0Lo@;;>RTN@Io3~TzBA5Yr1vXJ?r@UQ+te4)a#ZylUr zz@wj-=y+oD)j(vFJ6~W~-L^N|o!?v5vKRcc_N=>IG_Ep&ttk2^Ae@KMF2H-36nAB} z1G|~}08}P+(Nt}FsNd8yCDxaN0Dmvr@cO;6?hnM!WGu@WhPf>r=oXi$aR!Mer3 zR;x8w@NpGp}EiLXdIxf zueYzjw_kUI9O}hj>sT|Sejd4+B4kX02V$S^rG1)pzAj%Ohl95s5n$9;wYxH_Tlufq zhWO9H1H@;;bmYzY&J79YFxK-bnF0YMgd!Dzc$bu^tUW*>xAkV$z7qVSMEg-QUuR+^ zt2|a3D^YeJbLvH9SBt&fT@=79xe}hmQ$g9zw{_XaiGE2_xYtNbk>HDh?F_PriA_nR zo#Zmk41e?T`8t^X?IX42F#J8Z)V!3wqg5c82N9o}$Uf z0&7RJ*GwUz-cpj`tJXIqXHGi{14HB)x9z0a(noFBu&rC0ulFvNhOFlFDCjyYcb*%% z>tey`B1?VRUyX<9Y~{rirFdnOwh zLr5Q07dUnnk?4)M$j`}9L;Dp<`C+o|gKXk_q{4bLPYc?^$oYCcj(7Aqmgc-S4raE2 zUTq=T(EAmuMbhPSHF(dN80~h=R7OQu!qMo9)$+oWdwONc4D{zvjxmoyd|sbhOtb%3D| zZRGh3p93U+uB zb+lU565xVFD&n*sZaX9Z&5T9%N?;&O*-QX)Sca)u)b& z*Y3w8>+D`&o}#hTqLks~cZp9^aD3d49zfc@?q~Q*d*qdwQ%M_YO-+8jn3^mRHor9OS*Z zVAu4Cp8&<>pr6`Tk6GBbwTc_hTw!)jRPla^dI;2I+$=U4rkn?%;gX1kHk7RYn!<=u z#l3tb)CHrj0&LHUR-|B|$ny?3`5U+c4sPwqLA-jJ%@?qCaGTkuE6n-r$#ZFM5-p!x zlShG6IF`J}A@y0cSzN@Z&3=0*^~)y>zH>X;l7Ne(jcCHBn=)3~^5~!Qh*ju^7K-oV zqAjWp2b;a5k4~^w-QT}?+5O`NeD>pCd-ChU!ygwV=EK7uf3A!DeCGXg=HH%qBHZ%u zOozlomgE1U?yaKY+P1aP6#)VS5+Fcu2=4Cg?(V_e9STT-ySux)dvGhPt>&@T|;**#%uize0wOROi zjun%UKFM6Pd9;!(zZIs!JyMTur)OZ~nq^fzk546vWA38Tytho+BUu5eYK-S} zn=X#|7alE)IoEX8jcC1b5|ie9*A29zg62AfH)8rObkp3}2`7Z}af2L;Nt6!8X9@~$ zuuva;^Iq{3?cmjlKCjy8rvc9r8Uo@|C>w@6NJb36@6<`terfk5fq{Ly87tlgNd@n% zF(3k6kJSeM(zUu>=dd61ssBf$PUf)AQtf%4;9%OOT1O(qF>`$ldB2+z&__3$e4C!v zi*LCkN=|Xa-f~DotyE0_9nT0NEZ#sVV}@W)7M1g9wAsQPyM24LXB6m!udSO17C zg4NGqN@*r{9Du=qdK$et8}@ycI$l{8QSaOmuLk>IVV*1y%VEDw`-<AK^PQ4*M$|)p9eZCQBAwFF!yU$)}$aB@ItnsWd)r1V9Rc!YUy*{#ZqSeAeQI-G7 z7ntxwWiB%BCR4!w$`h_FzEVLQb3uv3X%p(xw=0GNK7()_%n0#5s3o8~J*b_#CNF({ zWbU)zjeW8?|Ij7EYcf;0GHsY*v-EELNLrdv6L!ZXN$XqUOUiM(J%+c^j$+(c5s*wP zq3}{+>bkeM(7=r^kH}uqO&?K0xy^GApX%1)P_@gr$m9LwksJ1|;w}m--X^vZ<#aE}1_Ih=r0IT_PT|ye7JhEyckss-pM#fCuDmUkVu!+IJF6z9_eZOnJa+dK z&~YL#Yxj2oL8c~)m~ojRSQZz`^&Qlz-HoU?dwZ4a1tr1iYfN(yV2#}+ZGB;!fVg=b zd(onCyQrYarOQ~bNd)wuJxIQ@ioy}gqL83m_vLd1eBy0|!xdXj_YjX<&T7AXAWo7V zs?o}qsx6JTdz|Bm9dp|$FO+_GVLeTIRw$#Qu^@bXFPy!JqE0{YirEZ#EKItPNPJ!X zL_QtUO>y&~N9+>w>R4wXJ#ogT@OcDmU~oGziL934Zj3`-0=~4T#E+}E(x})x*Cl10 zT+MUqKg2P(OJ+^o>$~@w7-?wA=UEd@exzb^GNjuYK3{5yzKgaY{}pa=JA^PyDnXe# ztT3~q>+#b(4df!phe`1)Nfg(Ni^nb47j8vK#T!e_(R^BTAN=A|v{q5HjrRGuAhPTz zDs?@^^*PD_$=fsY5vl&&gY(6&gT>OZcuju6Lm}`B^Y#lR{{!G1-TS~X7Cg%md&wnY zc*d6Osi#FYp6*#23kshMOoSwAW3x)^;~jqAMzME2Yy<{Ap$y0ID(^S%$C)MDk0WSf?}Z@uOc8 ztBKK$?*Xuzotw_ZcOEN53nyD>g`boUbd9|Ati~j(MACt^W`Wm0LPzZ@9HVM!_Yw6B zb~+;-gtC)F(QI{WE=B~PAZG+@s#Xa{ElYSH7qFN4@4M-1B%QV2zGcD zox$`amF%ee#M@LD7e=|fi(R?j>r0(kJy=C0!K-h36%sMy`P9`Bwt=c#&kneJb*2_W zAU9UmK1X*^mU>U)RedU==B{>=&|=rGZWW`lONk4or}R4 z=E^z2MF{1%S88gvl}@FEgvs9B!RE?E`bse@-OHwcO|olUZW6Y&H`D?3y@gHp7bI;k z`j()Gc9{lj>o1NF#A)Q_IZ!sqR0}g|S3MANdbSgSscix@9RB*L5#1hTcImfr9 z>#YFDh^#KibEfHKS|TF?B95|JWIz!JeBNOc35OsyOR{ zNrUK7q#%x^ERGBt@hMQuVuS%T>3h_|!Q7ai_~_9z)p>9VYcb>481AcWCfu}vigE-x zcG{v_y`V||kJ2^}>7^}fo!q2K(wA+)yGXDvc% zh7E!FTAswj+J5YXN+07@7lFI`fE&y2v`5bERc7*&iO63^9a}U)_S}nG-QRbH;O?tW zma@T38aK|%7%M4ST-8_ScBKjF$J9Gq1VPmk15M4nke>z(79PN`ND(QO_S!ZS15Cn7 zjz}8{EGFCqblD=0S05Ay`c)x)6wip<&%z+1_T5i_IqVI0=?-j%2ppxk_{~~Vjop6u zDDK%z1D9oy{;HYj^2SdtLaRj@-JaAyFB}JwTd^-JR;qdh?!ulTq_|xDiJD>0Y6x4h zmCQJUM<#N3j*1)kjEBD+NME;&***;)J|TlvS5GWHPPj$mrJZxMw($#mS32fhllR- z_j-?GFlk$F0x|oLu3c@&l9I56V$;5QBsT;iLAa`h;Y@9ah4SVZ5CaYkxzvO~eVdJm zv3G&U?w(h+PBRUG*Lu(O?$?)}+pMG*ecj6eFZvr*{~d4t16BVg-hTd{=zuf3H%^W} z>`yu?vvtNB`*5xD!^nfdXPyu~aib+tSv0$95m{F3cruWc|IOp^pwwD*2dQ&64I{xB zRrsyMlkLhgYiq@<;K%JL4J0U39BtSZcf&cQgzsmg*EN8D=Te*97?}BMabBd&q9n17 za?Hu*#7$Umhr402F4!4rBiRrCcR0V1^4D;lbR*a1)0>l|&e^+OxJm!x8woY1w!UnDf%s(z{)S9*XiF3OdBpgE++b!vJOG+i`VOv-{vx}LF< z_)=pAWMER(zY(&bLGlv~-)zXmHemR+ZA+C8=sHVhUqjQ;?M;nB182M(@SmT!-=Gtr`iFQi7ALHoN*%VsB4GTz3_nBNn9e zNuF9=-5i1zj!G)Iqlg7!$IDiIUa+j(aG7>~Nr%8DEbRv8ej-~2AoIF8<)&^(z62d^ znJ2-P-l&soFydB20+N93r^m2W+0oe_QBi+#FF^bjWoQK`dQ%4d4MvOu#+Uo@a^fQ1 zGZQfM#|@TK{3DoVMGa)h%mR3e4Fvj6-z+eF)LSZHP>s?C^YRFdT$Ym)Rg?&L?pZ`u zQg*TEzp}iFm^25#Ap6KDcDi6$U4;*(@SH=#V;kG9&VTef=@!x`BlxUEt%P^{ec1^{ zVd{)%*En70m@=Q~mH5rQ_qTWgi zdGx?)qrGf`o`+B3g4odZQvKb5zP%N>OMUZG*_Agock;+|jB-*{d#~vF*;RfUl{VOO z45UMQj?v#5P_q_}o8L?u6eyQk`t-!J3o4p#6sG-@BvLC zc1K7*z=NUCU8XLYYIU{c)el<&)n;?rv-p-w?mE@u;pmj$A| zCFJ#}7Wcqo$R67P7m&)r>O=0JUwEEQX=-BJFeW5uB&9(ay8pcAGZJDxrkfQol+-kt za7u7kZm#yjAbPeKEj5kgPx$xkn>=IJr~?NA=8qhOA1TY#Ow~nFdwuX+GKb-}ZtwhY zOo0=UoAiT?UsBX*jX@12_0uRV5KPNAx-yE?VomK||A0a$uG{Bh9&u26d)C_vp$Z81 z7?keF^@8G%(e}>@LM$@bq{pib8;AmbfKTjw@j!eJwg{5YB5P2Nb@h~JN07uUK0k2% zV^`Z`_y`y$XF47gkJ`U+UH=I)(Rtqw@!K2PC2`(#0$TMo^8Q>scSB{$7=$3YiI;Y`d8ypYk3-OOK)elu;a}6(oZyF zX!wO2X^NzcV%6NAIjhc-kwX7gkhS(n+c}uizwT33aRbPuYbTqyIU{v@3<#gW0D9++ zh(c`<@At4PAj`%qp~v^(x5~Vn}|jg!|g>WXO`g9uMl*cI$xK zm9$Qe$XBDLd^?S=GmBb?dG-05EbkBn;6RMnc|XN4*q>w29(!WS}RFI|nc3A!bvtUEdO4-m%=E{7KU70i z3Dad{RS%5Ap0t3c#lAFIZ2SHLOc;-?7~w1fd}2ms#b;4~3;pNH@gs5mK-XGa>tFVl znNLEe>=9NH=n7Jo;xHLXjEw&=aFiamH^=WVDkG47mF3a&ZgZnp$=o>X3gG=szgb^Z zhkUighP!E((G4ddP)QLbjw&ZN`r2g}qv!Q8SUm^V(N6c9-^I(a(f%w8QrZZ|qbGM? zincq2S}ai4;-f0)iM$unjbSREV1+Sa+-bojc93PC*~An4Jr=@LYaLv^>V})^C@9Ju z<9j06S~LN}I6`ZN4VfwXt8uwcEwsRp6pv+xo@}g7jl$-D6f>(bpe}4%1kf>Ax2>zjt^U-n(`IK+l1OR$NsJ z64e8Trl_KGE3&&a&KW!vC12P-(%BIC!HCw|5$!R*d)a{e9FbP8cs*$8))n+B%kd}@ z*a>e()PuXtnzPFQ3fQjp#P*azZN$50UC7uLEW@@}=zZU>y+gjwiGUu^rc{(0R!kJ+ zD~cqPTW6dUEVVWOIQloZTEUu{PSucZvWfZGo`)>MK-yF}cYf$zaWL9hWXksVu?F|*z68_H~*w<$^LMB=+I;2`cXWB#I=T()0#Nu#*nh4 zp?I>x1V^WX`^nQSZIa!QCBDZ)lpS>n8+3-@7iy$io8!AU&7`G6ien`LH+y|>4mxb4Z3LC=JduBT zEl;GI+lO1hfQdClQ@#X+_{Zc0R-1HwE`Bb@g|-;Sj_(yMsG zcj&Lx-fn*`kkLoyhr5F@M!qaPp&fBA$I}dZ_zx3870{&ISP#ymsU$KfgC^W~N!^+TdnWjC~X;r3Ay$40ww5 z0J`Ec1XA1>nh`24Eqw~m{+mSns28kGXE;;}&@MJ%jNWDGlK!m>pMLr&A^)rb>%V{S zTPpsgC!e0hMR{c)_*h~%31oOpsWQxEVII#m3=>_gIchDVJ7jIJIX`Xi`)ueBmGhnK zcwVRftGfK8Xfr(WALzFI&**mW`Yx|E{3g!NAT_a~$}fOZLtd-)(@)h#TEV8&_$*&j zDYYX53bBtJyU2INMNuum?rSwp0pkPE*2_vWwn5M6JxVR6%{!O)mAbBW6Xn<#Z_?Wp zZk5q0?LX*xS`<*D)RY9mx!Xh2IY;WEvZj(_ADeZct>9WC3Hb>WdOd z@96pyE2b-7JcquPsx<(6pH6d-%|mJkK8c-KD*GzXQ#zn%IFYBC)M>h$4h+AMaSuWk zVH^3Rzh)-WsN#0bt@sZe+hRG{E`r#~-L6redZ;+})V6|`A9IyHQyEHWQoj*-HRU_? zPp}LbqgEA9xYcea(se4X-3yZL6~FPW)_qa7cUV<3Yfz=uFaDFYr2unZFA!roGAnKC z1ftGN8;weXd-s8#0&-hN@DHd>sx>@6o~tg(Q7&7mk`^)cu3g0}xzxzm8kxCy7{Vo}i3Y4h5N0;;)C! z_I1G5D)*MsRiOcv=@|YS9fcT_6hTHvKld=t%JhfJ?{}I*|ANWSrCT7{ZW8}ZK(7ut z_%}e#(~_vAIh0m*REyyntFp-%`Oz^Mt{r4r<07@f#b8tUT@U&?EKL3luT<^~=F7er zfy-0GC2bdcW@_2Vvi|9mmLQ})*w^kuRf4nCxwNB|hu4Tw(*Zl^4@pbc9=O!)!+Qyv zRT%bf&R3+PgdY3iJeuEvuzIA1H^{`c=8xNw+L2HmRY1Hre*)wzJx03>#~w+QfWE5T zZgpGHcZ$miLPCY(o)e$2rPgPgvmn#TNgxPr41|D@rNZhQ^uC25!N&MrDg|Z55)Pht z$l+5}H#de7cY%iZ=&HZ}^T3`sN~=0_w_)w^^evpG#nF483q=Z9lM0^u10IB@yTgx0 zrDyf6mC7kaKW3pk3)=8e!#FDRjKVDWK^d7YdlJdA{dlQDjTZAsFf}qnItS>oUa3YOMm@>r6lU$x^ z+aeX@Ny|knba!!bC+c7OKCp|>Nf`A%owKyXkRt2Lre$q3jL1hp96x&_SfZsG-p(G6 zyH!|!_)qB`Q`FDFeq-G+5&jN5;Ub8KYZ1?{D39u=U>1wZcRcm+rrJvN!6ng zW5vwL>4%l>N1-7hlvg9fTpXlhh(V>te^0eM06)h5$p-)&$lhaFjUApziNA;-n{)-7 zeSk%6Eh>Fvsr)fr7%@BYN{DEXBL=Xq5s5b$G-{xUx`NG4bv}~K)jrs$8w;%ziEuVF zvL0jkq&bypxN_xV{?`VZr?;jK`DDJ=NunOGe)grG&v-MXqPl$Kvrz*f%ZtNqt?Sfu(!I?N)(cOCZt`f_P zNc8hBzo8+!QNZg|t{d>fb&n>wd(WV_hvK^X`Vek8`hNexin6geTWPb&|6H2 z1x`yP)gzs2{XEp{wJM#Yq$jptHypJQ#YDT|;^c9M;j3IV@FRFao-ZW%CW&?52pWgw zJlFSY{4OTOMjs-+BZYx7iB@9*nnjrlThX)01x4{qYnmxtP#;`wyoA5L65yvhwnJc>C{$MbV|G z7`UMLJh65DFj)SGX$r@0p(GQ$hITsQ76ensl|LG__#6 zt*-Tdvos7hL?v!Z*s>KvKjHx1_H$s88Q)ard)s(b)^8MO%oOUI`;-K5qs8-B;_MFu zf>$fEHI$1#&g71q*j>;ouX&xwA9c7(*?vdTK(q>xcYwGh{y!vqATR$V;q#)S5yZfm zZo9!pmc~isa3X*WTP4blHRr2hfA}*})G>HPg=fAEm;Ar@85SP*w@q||3u(zlI(FwG zPGHD_L1t=S4hlbHy6y$Zj?dY(PwVZ&8ufXY;>x^Ab#B@O(~?Jvt;doOv?-oR_XKIK zFie$R3+gg6JXwL|XszOnPPy*k_-*dte5Tt(#z;X0O8HtuTnqRAoFr;TS={06@&21b z!^0x1D(HDk<+bD*fN3Q2ep6r2Z9$oWd+*KN5!t7vmOv!l*!6%%WwZbEI1J4=)Ul%R zB1%7-Pg&l}nG5aG7lQji!N?=S-4znn3v&cAbjngAMHUkXc&408!`n7dNQauU_3)wbF)Y zUK(ZQF*8#aD^L)GqrY>md}?QILs0G|*7}LaC+#?(V~3inydM354F>cXa0#_NLJCIc z5;MoSgfzGCK!TSx5=0&`q2j%ItO@L9NSF&~|^2hu|Q*sr!? zME{vg(*091>F->1Xk~M)nd;8_m&ua)knf#wXrEW?kCa9VnPAV@WG4CPv3U8&z#BT# zM(RFefo+qNrTJNtzU>0wz{=6^G~WWL2dMaqy?ueOS5p&6hLIF4)qcoM0Dacl^U0>k z24l-p=xWf8P4&J=jc+*(-ENY7t|42&qpy7A7O*t;XgUUf7LlA{$Z&1Ni790E8776l z^BkgReMt@Tcyd*9HAQQeejE!ra$Pz*SNEbnq%E+TCBxS}tI#!CaO!><>}OPW*^Xhi z@!FXDh1SA~gDCeCmQ2pl#qUkmMu0DrYgQ|-KN*R0cH_<3gW|I9j_QFmS7zLNI)h}Qu%5IB71 zQM`Z{$9><AMnT@yHaAV>@5p>Adtwh_O{&>G{#OprZC{%L=`S;@(?>XjR=0>XRsxhxN7 zstwTnhtWdz(`eZX3fpd2;&ez)S_K^Pws`gCmC4uIReY;#@?PB^oI0+~ zjzK*K*4ybBltfU9OJ-Di0F99uAv?XpDUv{EUBAPi(r`75HsgmMQ;y65xH@_x!0yo1 ziKNNn!_m-{?xjtQ52_U6B`=nXauP&>1o}jfTYR#P)*F5CI?JVI7Y4PG7-JIr+)^sK zGEU5IQ!kb7ee57TCL0>hD}Q>XOSt)h*QGS#yzcl-W9!%QZTs*b)6*~mN?cbQ{Q8iG z7FI7WdU7NEqMhb%t#aUdfJ>vJHe$EWeQX5(AJznL?ry7p$fV)^Ma zJ+;|zr|S*$XDd>xfv|tU122+T)z;{I?)v)3eDO#o%@JN~nrGd*!W@-zMkdFT?#>$Q zjV$-P*?j$ydwV`Jm3hz6->Spqb2blG$B(hC_SJJ!J0{ZR5(kTAIZJ=+u2vUCqNonL z?R1*%D`@(uYBsp&itfjV9MPI2_i75p*@l~W{`SMr;Yp*F>*JN=R7j}7%72i+!GiL; z%7~AGCHH_x49Zm+xBp9$DpYwTIP9MsPu(A#oJEXLT=uQeKCND@U8zrfH1wrcB7q_^ zEyQa1jpeew`sLPpma!}P;m-81uy2j@4J(=xG=IVQdIza2wZL^m<}>~7D<$WVW>9^^ z>`%>1QaekBC zTIKul4SHtLDKi<&P6Z9w*Z{-}_P1^2>;AtGvsgtXfh>Me4HfLW$FTIjbaGCsYkfm> zeID>|YYgAJY`;9^Sp8g1xx>GFCw!`tar!y4gWjX7wJ3*%ps$0u4tsWjtA{zGd8OAv z=8-3I%OK(Y&nC`lxn@kN5jJshs8OuACjecm$IJ|6+Tg14MCM)oJh$Fc3$$?2rydc- z3eI8hQC^9pwj-DMczFh)bxxX@h0-@ntI`S8g~xg=giRI4!jf)qYB`1R*C{RDWQ#lp zmmpLpY!!WvL7Y5+eqj=cntk@9y?v}TmCssm<&ruXzcWCRg-X5DL_vDUMoL@KLh>cy zo)sUUp_jVNQU^t|vi}yMs#Y74pxnnF(&>H_jDAurcU{S^1p|uV#t+6{)#<82OY?8`4hHG?>31wypMoW8mH04HZyde6@U|h z@`SqDadgSwVvOMW2X(r?0&63sVO~x&yL|~HQZ3%noV&j&K=CX$tr}^}h%oyf2ogM~ zk+)8jKV*^6`TeeKM5HduW&?ntp4rPt{YEbpp4&D{K-dCn$Q_rE!3}%lvAPkEPxDh! zO?cvhgS<&-DAc!P{bL(9rIFd5g86CS-05E&qN^P9c^_Dw2eOirD#EZg@efgkXArYD z3hcX6L8+?=$KClT?aOGFA+l;7H_K7_2%e1>mFQm|DNhfrJDpc4sp3-tN}tCL#XaPC zR7u>yo3P(^U+vsW#9E9;PQt3fdZ&w{Nax88$-1G5`j=Z@y#e+MPV%z#3*N#Qq;M+* z=)lk(NHQ4&Ujz1fTnxfh=^O9-REYbL;#4qwqD7c$uCvwgIDz}KeaAP7sqK^kJW0D^ zN=z%|SK7JGP90=+6N2}Z;y?4ok$B`;Qq~jx+vLucY^@(b3~mM66sku<#~ESggmqgCINJVDAUO63vEWJQTOGS^;}1Uu-_a%0(JR z63EV&GWU3vLQ(dWc7c^%$HmqdjweJtn!?At1XV9CA1q^2Cwc#FDtKvR#2m}0drBp4 zEHwDde()az#TaQbIw##PNHXN54IA7^($Ads_7ko!^~GhZTfGP6iw5K2o{&`C7v##B zZHmI+il&}v=+*Z9>8T?mIuAI~)WwMzt{vZH$Lxsvp601B!vZRU+)aY%8eEdr|6lbP z{Fh9Xx+q1>LPZ9AOzLuxIvADJM#&^SgByCtjEjSyqWr5R=#j)5kBL^ovVWo=n)om@ ze|-hy2ik1?k%v71o|=PIJ?S4>#w~dfgW*W<)h?`dAP`<}>h`n#B(8&@4{uxv=?4xL z>c8$(Ko#X*e2Wem3^g|&Sy72sYK#%HoOBN7srp{;iy=KCyTR*5)w0S(uwjRyQojG- z{LfZ$!$YQTSu_?pESnV7cG&YxQHDL-MelI-`YHY{o_|Hu zFaulEBaFt-lB4=YtRDdQ{QZm7^~#8>dkC$heQd{uDSA^8#U-tTmi=7Jx6R3-%;v2T z$)Dl%vkU^r;-|iH+V1R_n#u{4_lUn+5&{z{unX-ZU zGj;m6#)iMf>pwyLUq!I~_V_cz{huEH$1ncR$N$_h@!JM_w#XjYiN+8as+CFO{qh6{ z+p#@bgTNZz_}xIZD>n5BM!o>NZxQqlSk&u=KN&*^--);11r({*!SJ;g%$pF;4q18i zE8#JG!K~MD=FEAUk+4#B))Gk_YoH3XTh4shT0`}S7;hPWvxqkwfP~sP+qDe`lILR3 zX!?Bc+TlF^{S3MB{G>4+#3aou6K|RN95i@B+Vi%oPZieX{hj7?!=kT|KY03;Fz#oc zCd{9Zg7f4ffLA3&c$y(0|MYSx=4Sfv7SE(j@Y2s7~p9{Rgm4o zS4d!E8?_N3Ww63UaX?HZ-~CwKQfCD(FU-?){T@ET$VB;Q1uut^lg*hIN9=XdoI zebsGGW~m~_#2WFEZKzR}D)(PiGO9$A9Mcan!b|!k!g+u~#MH1%3}R9?eybz&8`=N( zw7KU8_vXepfOF@Pa6#GP;`Ril4m>@f6r>wcCjHB9zEH1H2})j3Y)sI5hVhUUMsK|% zLODhkgSq@BU$(jI&0CB6`%Q}WhQr}U#Iz(-XtXH-cGfDEBF>bo6oXO8uMkevz8*J( zknn??%TZP?PM)M$EZK7{Sr}nz=3-9iyyLDmn_(E`;zjSi^wFuJM?=(QPMMw7S|mzb z-|_vvKSCF+UM*LDG!2nV|J~AaGXx2fp9x{4p%y05H6&BYS(&f3p`b)fEjxiZ?P$$;aULN!-&B_RlXCf;R zfb}!}SQSPIYXTc2k>l4?Y>M_%w0-$?Z9ngM_tA`BH@rx6gk5{y=n^xm|hHO&lXvo!RoKkdWOMsF22Sw%g(gMG$1mJ;8KK}vR zSpC>|e$bVL?Q!7yKBd|7*keLf*QbUJvhYqxTD9 zO!g`DJNy?Dr0f`RLVh84O=(VC19JlE z%8!+k%a08rNcN4o_!R70Y9cB89=+Hd{KL+dlsuy8+JoeS>X1Vagb?Bl8*Ic`V-Dhz zSv=|i4ZYEgL!RDe4JmTym(%8={~1_#u82>#(-zG&fO+%eics+S20!osedxfymu$tA z&DqF#6TJhbf*pq5-sYRNId+wqyV4vbn`{{7!w+RQq;otSz0=~5ixi!NovI2R_JZ&C zB_BjjWy=dLw$+V2JEC%(QyL+XHW$60pZmjpW>#;K#lb_KQq zXEg2rP9r33mTSZ7VKJ~;lCAv>2_j9Up7^+IVY8Icrj+J$Gfj4^I#wz`mG0!^Z9R{B z##C?<_Ay)Jl*4Gdhf?gvfoWv}*!d?E+5oAZF;H~$%3f?q@wqjk#D+1p)~&spU<=^v zDQQ=E+O<-T3MHcb4pr$^To&5hu+mb5l;XL850s6!aM6BW>1UAW$lLVU1I@R(<`9iV zM9dX+A|SZfbLEczg?31~lva!XF;*-e5P+Vrebv^e*+G&dec?w_NsfhiB1uUkB!btBM>)3!p|9Vzm|bMCxArWc_7+`w<)jvW z2h{xDs#rswu7liK|vTWh;bYHyT7JLQ!) zSRu>b(QgQr!j-&6?pI@)fgh{uh>`~euk%cu*qa5VpJjXic^kEiu62%SoAEf}y`z-H zzwl?Ro2i+68ePasufCvUdwe-9jWv}i6`w=Y+U^l@W^sf(-=5nDhJDt#?uVm#YF3+g zaAtcIY!=zQ&TsvZZC2gm`pVq26YYvzxshdB`-!oRMC`{)K4kR@m zMQU%!l21*Wyn_K5RTi`mq?tIb2d!|AzGbCy&lx!D|M4{x!71l*T$Ym!HHYBFCS6+a za>ufPM!G@~jw!j`=erECcstuyuYS0NuPa(Y9mf$9M_pEEt=iZ-P+uQB>?noL5<09O z@lMUMhH1sQJzQ=dV~KTQi+1tvI`ZQW_(Ydd-_^*G=;%`{GIT+PeI@y;9?Z!s-zpH! zI~2S-575eOIe<2pXo4-Z($R|7fst(3ZG1h@6GG)#;|9Ziqf#mssJ+>83$mHtdM z^v8)O-$gi0WX_~vSmXIhq7{F9m)cDxjIctTLrDn6f4)q?!4L$if6-F2H;)Fb+BlL* zGnzV1FLM4!fVjkJJb$|kwAO?sR%mK#B@GKW-o9p7T_2}N$}Fp{g+87{q(JS{-^l`Y z6n+)oC8O~b$uh;_6M{)X+Lb@R1|{IVWF)J&_)?I+Ip02*#-RZfhzUjg)*{|dyTbKG z^Q~EtI55FN6ZWVaLqc>1VTp#*cbQjtz2JDqzTy}+-gKl>J|4HXEVNqny90#DQi6Oa zHsnQ{F=9b&^L_SAiOUX1SdflUEK8yneM!cuZ(4d7LyNltb5P2C)MD45el#)S(ol49 zhFmlyPSY&E{G}b#%_9C+L6kejr6=|{hlD8S090+PHO!mnYG+$xUU{3q=#xeR>3SxiIG>#UsB`@wiP!vL_~Rg-6Ok+>WWOYX{P_lz4#1?Aq^{hrfX zv+8*fD%R6f ztGXlb7p%9_S2h_k(n`p1p=3LnK?JEMh_TihII>cgTf*W`T7JN)m(CLJ@^AGr%Tm5+ z28X}!XQ*mT>!%i3R|CUATY#&aj`WN*T}Yp7DHQ65^#QrZLvdIo+4Iju>Nzw=Y%9V{`^eFc-2~kV?MmqZ=>!u=-dTb*%X@+t!nU z*+NFI{o0PCc2}GniaC_irAuv=U2D=}xCfy;v_c(=ajdjfUd@D!-rVBjNImzqTu2TR zEhr%JPS%w$>ddl(@+w4D-b3(h%e2QJhvB%22>9QPsaZ-~nY4~n6ER>j%n zM1ylIF<#}h$wVl$RUHf_E%2VA2wU@5+NG)3h3i!rkwb0jje5{^JX|F5<2~P()|Q{_ zb@py=C-sdjIYN%MY_D2`$BO{({O4ISx0BYD24@(Usr>27A!ChCd%~;>qE#CWZ*h0R z#!m7LEeP4$k5raJ+Id8`6S6eII%`B2Xl+A-3EovcdkE9R);z${cCBiRZMHXJyTOz9GjdJH;b5>XT7QF~t+Txi zN11y=qAd8F5&-D8d~ukg_;@I@4T@H^jySC79+sN+pB7*7ijd%{y=if<60_=a;<5HzH+^oT-CMRA$Hs*f zJ>UCCgXxLK6Vl|Y!O)YwARsqg5Iz638S@afld`f%hIF5Fc4)9d=LSKAY+caR;Fy1wQkgQ; ztlQ_T7UccMoJ8{TyN8Tmx((0E(1AzL#XeI0v zZvU{Ze$*PJAbq#_VA~h-`K7mw7-!l&=V73*GaIla?6Qxv^u`!xr(O#`J93@jM?<3c zW14zhBX3%Rv4Z>ew^y#${JP}lo}_s_tSHa3LKFwbz?aU}-$_xBrW(~hfIcWqP+VP+ zT!!4NF`E%UGb-3v?Wl6-&3R%=8f8G_IX@~@kbG^{$OL=ew?s)p^u*|m;>^RTKGsLG zP4bVD~&>Enut_;Ra&+t_R8Wr%i^+8&Qe>B?@ zMg~`VQ+OMEaj)mPiDrl` z9Jl*m#Vmv5D)%A-^`Yp*6uJfNn80rO)7zT#@43sy?M?`NLXMv`dk_yUg3lT=@v)-W zcrD0_tk36}4Uq%xFei7-NT6SB_tM9ZGEA7$uf3ir$oMo+;*7LIUa~XA!-H~88+@2h zTOgIL%`ICirO&*l5Vz0JVd%AykifMx|AO$2w(w~`q?AL+&nt(?-gI_!e(vV$=^QIP ztt*K%2RKZVSyY#2v?T$(gw+rrGxlpvL_6jO$qDyeqtThPuGl=!!nXd%WaZ)P^mM+Z z6nn=jj`m`y?9%nIPlK1WCdaS11PjgU&h}7icNtxXAF3?6 zSDr%trF7mB_skA}!eOidvXJ>bBou{h!MUqTEG|*B>?EqUT%#=CexvaV4@p?n_~O{$ zLssjJ{H&Wv(ThO`0dSas-h9g$EfAwWo1vX;{{Y-ybhi@Lw+srMV{!m{4B6m41fY%M zA~^Ir)6DX-FYb(}kYT%B)TgT-UM2U!%d}Eou(VwDSCxKgg=xRe+!}i84jLsn>w490 zxA^4=Ur=X+r}Mk)y?%&ZUs~(slh#`X+-jp-LW?em6McxVc__qx0}ew7?>;GKY?T7b zx#?o(ZkXB4c3=C}f>+u^WdmR2qNuZenxE9xl__*EgvHsP2du=oVK8Z#1>kg z%$dn}J8-k|AOpl8*j=0cvTb1F(kR}*w})!k z@-}FDkmw6~Q5j2V`?|4LL5<*fuDApF!qynt4i}poaZAqeblH6N!Sj&TTW=a@in!ex z7J)0sMYU?yrX^xO@bO})s2!^AJ3#;0+5XvB=s%a5#OALn38~VTyKZpt6j!xb<0ek+ zYx2G#x_SCUn9R+X5XnZ8_+=FONmX|V=my9f9e$Q4(NEg z;JBBzlWps#ZKq^=AbO$QPwYB7_hI!{Y9oZtUjd`ESyMrSL}%sxs|>F#_z!nkguLBc zKUc)#5M_0BGNPa*w(C?1>Ckbam>UO>dV?jyaEyPImx^ZS3@v&c{;%|ZHMNL&^Yrl~ z?xy^+pQl^+V=7xy@gm-Lha*!aPKCRwhz<6MS1a(JeXHIknGSOV1+-5+`q8xX`7$Qi zXgVe-W%Z@?x|lUmxHiuE`WI589wiQ^F2bkUsK2rpXW50hCq_2V2~M|%ePhNaW2^Q$ z9qeJl?eKzqInr!bZwwuO;JU{uXGN)stzX!5^`si14OmJH|A#y1RwUDzKtpVki)6jmv{@q_UZ)hkWy zy3A0urv^hiICEu(SfIvw@pi|Xq$OHXNyae)V~~ccwo%v|F7fYZi#IFJ>1s-iT=tWy zUb{C}lB~QZ{M49FpICRUfm}C~BCVGtf%2Ma>?(M*!x1PuI{S?6?k%EcW*1<$)tmR8nM)NE9#w=07It$}5t zS1Aq*C~PUi{~v8{85Z^0wg2y}BGOXQAl=<9(%oIsokOQccXy2B(A_EBgLHSdbi*HG z@7wM6exB#W@9ztb!vkM1GvB$^y3Td3&l&%;^4vXXa!xXYuD7huS_szP{d&Y*jVtV4 zJz-?@$#{cTib8dIQL8w(5W|0WBItHW%j;>ep3~R;Tg@!zK5{xkJeXCJ9wC;rU_!A` zwD6D_rhK9d+kzOBqoxl1hXI281M?h3H{8cdz z+m7^4d!i}F@20%Eu$!20qeEb76VG(3@8Dkj2LZ#fJHHz!IGD*T{twf|=t!faPgHS+|BAM zw$M2|6on}_uD|Q6g(GG>P8MWj^TrdZ(^is#7Sxg**dm@?j2kw!Xsm~pFSCamMwFGfM+9Z=Zwx!LoVb!EikrwUh(Me)=m zRwBO!(!;i&oXt>;y}8Sv1?Nr6^HFwLXY7icaRKT_wnjJb0lfzHDa9|lz*V`~O0X3N z4rAD^q42@yOS%z#SCNKx9#bD0uyQ_Lxv}C%kd$vOTT^tdA-DTsuIPRnW?ea^`&bqU zDXbA8(9W&H)pZ1ax1?)JiJ=m5YM4nIE_CglR;dh*rZwA@=e=onj#jl@@T%ry+-3(o z5wmSml9PrJRp5{t31oMS+`1G{k~n=MnbZN$L#7ZV0>ZhcpUB7v%1a`mx|=1TC4it& zi!8`?okM!oQdWplx86?Ye&;G`19-`Nlnr5W(-nK@^kD%9x;sp4iP}c?-Jw@xTy`WG ziq=fCdlH)w8Ia>T#-eRc=!>m)%LunTi`ud)&&d3!6~usvB*!=cjlutIG`OzqrQo15 z6mh3GK0=nn9}Bm|m4Ue0<+^O5BYf4WVgF(%`Ou_9Sd zSETEXVEnBmuGQgfaFlpX;i&xZ8^Pu9HQKLhuq3z5c4^`~2FvZ){!K4VwF9jjVXAMm z^d20wU!CZ}oov`!iySaJGUc)x|1rbTKV6nd^&EMFaioqoxMnXSp9&xvn|o6QQ@N*|gEueSO@i$MGo~W6RsXe#%S)2!joFu2;uJ>& zkmGCdyYGlUJ`ux;a%_FWJn8{EQSolCUNps~&?_z&Dq4s(8+>$P>|UM1TN2tFCN7Yl zcO|7DM(m4KcO^a(@O2D(bUegXR7jkvma^JGZFTLK(wf>|R*Bsbeb%(jwem9@1{>Ld z_f#=kZDpc6&Wv#9NC&e}iJw)-4J1@Sg6A@dasY|9eqZn%$|ALm&4DGp(v+DJWD;fp z(4IIw97LEYE^RFtr=J}d2hYiRU0PX&RaiOLk$!MKU~g1+@nVPp16YM~@xK6y5h zArmui;KN$kp2vw#K)0kyT`|md_ayQ+^KK2G@cxZj&tMBHvGg1UX&)xyl=_n@zEz%b6%E zSu{P{7X|Hz6eu|Z9wr?xtt}&LfX6pH16+;-Thcq9MBON%q7u5mSLjMd;gFd2k=f(& z^)siR=4D?^od0A0_XTw@QpIuKG$BEW)q$S!7C;yGa@p~-SB@y~x+Cl2O^C(KaJjg8 z5_(4@=0nPRJ$jX?otLO?J`LpzVTbVP{P7a!DRHq!OMgHXC(52ky`J<8U!7hS&uUm3 z1y^>^g?#Pc)(eEkr@WY3;e9z(zZnzAmcq1>t9cewyDkZ6tkD{ezOrN7p=P->k0($N8*TvN^x8uXgH*pVtVP8ti z4xpdfrtFX|wmQ2-TdCf$B98Hfr^8M;&$_?_jB-?7K0cAhQ4gpED@YPO{)5MN zFB<1)XU~7Q9niX{8W7VBCW0Y!%B6X>bH8$DCc86(d2t!`7=QtlSJSh47afe}?S8%p zXbo3x=J2+&U;Q@UCVbyq0e`_<{zogohn9eWXEZmix~zK)$OJENN{M@Ye@u=n0N@rrV%S;9_JI1NX6-GG!gB9q~tIVLhF|d}cLLv0{ z8om{GjVvzS^&!>7o?Q77B(-eD+;q6~7R%KQ4ROphjd!d+8(m!*ivJD3yC@;)S34yA z*Djr^S!TrVtfV2@)>9zbc~Ix-R*Nq=H?>R?R*$Fw)(mFj+CY*`t!2@`9yPK_@}1!X zQCmF1$Lv|+X8Ur!BTMvj8=;W7t?q!NUhH_~u)OCO;f_lO^-uFmoTDtca~8h#P*Sfy zkN(0i%zAo5d{skcd|9~ZtxER*6OUJG>XOhEve*VcK%|~ z(6sqH7W_1x1+(q+WN<1(XfCThHT9<7x;$8h;i=(2IuT+m;J?}=ch@+kv6qtHKF!Aw z)hZd;8g{@{DdQn@PteR5-ja}eowKp5YX>|5&H>_azu|41bZ2!}2^9=)h}pI@zrwdF zUtgHZl$P=r(SrJqpNx$$x&G0qm^eznRmV}~z24m5o!0CWCqurC^c6c`(Osfql47p@ z{F8ZdNOl}I)1%z}9xsKdSGp^c;}Gpw7j7(X>N*qnygQ0q zF()lTL|a?g8r}exTFOX!-kU3Yok=YLZQgI{Sm6lJ(a*r=FGI=kBkp-%70*{F{|#-T z;zAs=An{zUGz~&;QgS6k53W)}B7w<;+&&B_yjx-4zqFlQ(U`{#YnD8^Wf`d~^)F^| z+1AYX-}DT2!C{H-2T;HAI@43viISE#C4ueRm$PPaoZuBSV3)I}Nz6}(3ZT@KB87=W z;2WcQ%_2d2ZbdEbfF;53Gb)puwmWX&x`!PoQh1+{x}O-jNqT16-rBrqBa3w8fx>aZXES@%#%hFd z3df$Bl-w=N5KMFlcRgZU-$X`BEzQ2f>)$Lnsp+Esc#s zFe;uAS&#Z+n7ZgPI@i&!l!IyYY!i0&_i+$Dl|kZk_;@V+7ldDqjbIfE#1^4OxAIR+ za84*eau1Tv&W4(lzZv5wF#W%t;E#I9?YaoDzL+o8_xCY)$xJv(WQ+Eu_JSd5pVCpb zyNObL+Y!7}AXr9ZpUR57N~Q5g_4~}2VN1wC-HaOWmpc0P?1J9W6IZN zeWIRi>2>_uEpL+FyCxeKpFti+kpLV^SkKSznV{=iZ?Cmi2eipc2t5pz(MdPV%$JwL zlu#ZT+-ZKC)$>`_Mir2_oZ2$Q87zHPxQH&@e*i!Es@R)^ALaIYS{zYaS8h$9G!ZX* za?wJ-g{a$q3_IT_nOcN4RP2-J2hH+m#YD+Pull&()LUNnw>aNz3xL{%U3CXDUxf=d!GT zjW^yb_L+q$O?+R=>MpK`x|4|bL zK;q9{4-#?H#}u{r40n~m&xm1;-RN{R=mnNb3sH5)NiPkId+)X6hP8v+2g>`FYA>u` z%?-CJTo5B7QrKx%zJQd6o4%sQKHnCIKrGa0z z)~`C0i-+XdmbTlHocKcmmXf;OP0;M|bxN?`V`xT}D*nCBUz};|W=XZkevmE(>JmB7 zT6NJdnL*eWNX+d|;c_plQ&fd!$|c{!lI8s5H+ zw^!2b#WDj=Ky@BWlVY0(NR&Hlg&pT3Y!WfQ0q2g(NbhZ!mEyaxOIE#JzkdG27T!Q) zwDzGN6Bl8jy}DVb9NrN>)UZi+r>M?uEDUsRrI?r+aegi~=oEge|O)*h64>*vqP^u0to^_BnC1Y*4LNeK9OauVh$f7*_*Uj-7WT1dO0= z?bwdO1U$^~?iD!a!VXI;yS=4yaRANuI9)rHWcyokIKE=aScs^yW83s=mgu=kEeYx7 zKtNGeFjR}Di#vP);(KVYyOd|i}}`}wuC+D4BeGUYv*D^?!~eVL=&{wL9otj zp371j!!7d`@ptvPEyrkCmoFcD8|RZ} zWGp7+U-j>p&^e-R+MbT*&*3MMMT8UNP{ZQmEFvaqQDcl%At2kN{JJMCaYsG0z$KP#acyNgi zR^oY|QK2_jA{k+ueO%XV%NiEX1Ke^!An^Q00AY*<*#wF(GaJ0!NVOP2U}35da&6}2 zqt`5>1ny2!KGxZtaflk7mJ>7YR;P>RfEq!@6wbnTgKJO%v695@Q&Mp?k*rS?tnW~w z$7R57ofSl?o0{dNN3xl6(U@eG3&LCC>V@Jc%*_;A<0al3DXBhO`}`NSLDM##)RVlb zPb8oqM4w|sWmILlo%Ew-g5tr)Ip=h$Assbeb3u*>$Oxh+8MiDrlY3wgF1t*g-h1b- z*&EMrKQWYE_L1kTPx9o@QO?VvCw`K;?NIe<{7k|5?DYpU?um-5MCgkP?0-um8bu5^ zEgqJ?WFxFmsr=OH?ZG#lyihBK%9bu_Y)X}bVoXW`c6c7EIJ7vw?N}u#)R;_$7Rxuj z_;{_tM=Ia zJ~q#(kEs{ z(*>xt>q8qZPHgbUwDMbywZRfYZ^wP(*+NktFaA} z#ud6TQMsghFPU}?S8imtXN3@F9klx`JEDSh-l2Q-Tu0CL4{BcI2@0B4AGay0#qdx4 zcWbjU%`lW<4w0@B6~$=yWm?m-Fle4!6Jx7rZ@F!W=~6rLl%va8ap0S~@XZRBB6*FP z?-FkupUVrf@48!eW1J1XiSuW#U{K~xXQDnS0G9vxw0ho^wPl04nd<6G$^8>m9+>j* z+Cz6g*Yh~UrxTjJk?^<2&!O8txHXgc6xT(s?E;SnYHwpOriC|OU4j)?0-B(aYb?dLktMJX7SzTc4r1LY=1g zaV_vH5c%yAbzyyFx6|0V=VSWNU(l`od9YU$&Dn#3`lz!lSAs%+iwE-tm&mASpN!D9 zA8FjGsm+!Qt=$MQSpfyA+mDO$t#U-i!Mj{nHkxJOQp)Hvv2p$4fy7?%Ue76VD;oM) zchqXqdyk_i7k79I*VK${5wm;@o=(qPR5R^xVqJC8~u*ofL0lRHUq9~Fb7*Y`8QDkFHq}g)qK2B>)f@zx3a%ougyBL9K`#jmF*JPHMH*X_PX!dgF49xtM@^Fm>9EF5k7gTJQI?} z*D~%v6vvvC_4dgP*EORGwG0oe2z0YzkZ z>e9}1|4NV$-{~g@tVuL)&p>-8BKd(+!Yn4tg3tDI+0QX?UhTJbzK%U19NfAsg>Yn* z;5)gpqta;DGo;G^}Vswssb|)u$sHGC0 zCS-Vkj9T>#4|~iY`#Ix007rmhj&Lo0@RAxBWD%;Z`pN@+as=p?o0aw|D%UP6>#w*i z)jNwn|K=Ul$z=<0r|gYwm0n}FBsc3y3u!7K(5!bb!Z0A9f^PO2gYm`Wfk^f4Kh2gr zmn4hXEhI@d{>7q=bkj+s*xHJJgOqyjz-$I_CKodt5s`#Xt?xncCA?!>_VpD32X2 z=<bOnYv6;;-=uw|XP`D}rwLU*G%3jcb0UQgjZ#>XzG2 z9w0F6eetuB3Wr7LrT89P*n+rKBL}=Epw{Ci!fV?9QNusp35_UPE-XabARK?M(EDKNk#V( zKapa{7W+UDx2QuxE_vpd^E2v6pAk@8PD*{Q-iYh#uIfAE>1=9A*cFjb&o&KOR0h1q z*s3Lmu<=9R;ZU4s2381JzW4q~S=PL@f2b$l{7YnON@4gG`4wy!SIL;<=W2y!8GiC{ zw199fcHQ00@dZx3e)(o4)gdG#oAqEwlH-%Qdsplscz?!R5LFAj^GU(Ub&VqGHO$>>{IVNtHO>6sSvZiwx=*HpQ1Z4bx zsYXO;3BSVICgatd{I;6fv|Y`KTeDa6oqPJ^ty(8>LIgtc`VFE}o%X$b-uFC!^R~{z zhs49XBO-U!TVQQ3Dz6{JOuqD_AimvTDpd;u`S(RscYPj2laq>?u7g0MJ%2bDJQ{}+ z=ayjsOOKJu!t~ty(^R_9Vh&)EOy0xe3T$vS)i*Wz#WQUzxn8`4_h0|{b!GHJ3ydg1 zdduGGLcd6L$($h0MX|#8OUti&s9%3tg4!81X1^d2Qt{2Z^zVt#*Lf|?KMhLvyk)vJ z&creNwF7?kaV?-4UL)2a6{B-=Ky#@t+KgM(H_hFU;*47Na5#Kb8FLS=lhiR@ub9%= zIb*Nfw-3r8EXp&yM0rS8Ds<%tYM6Ryi^eUrk*ARE7(!6AN+xI-JanQ~50 zotPoh=UGkomngW3_J2_XH#B59&i;kbFXBCqQzh0Mkf;)=MU@OPmtVbtkTO+YUZ{P= zE!R-7(#ICZ0xt0(vc#KIm0AIDbUwM>0YGZO&Pcy}!Hlf(!-rfz{lZE+A z$s6TfS^yOE&*AqfO6 z+P-Kxi9J%;^jZn(lh{S-I>uRM%9~Enh4|Vs6e)e{*{`HCgS3h$Uhfi7+bQeLd!jHJ zD#!Wabyb~$(#i8czC;u_UwtMZZz(Q5-N- zXCX5MvlB8~_){B;t%3_1Hi4?^ca3OMvOz|BH#W)+^Jl+s>Y)_p@e5VRC=Y*q!}Pxm z)sX5K#WxT7n%(eNQorn1=W4sP&9r;I0gpTJZW3<>^o43e?bjy3!N)E#m;a0`jHy{B zkIC^4mp?cBcN5X9eWv=Yi#RFE{`-aSiXm+pQ4^0_;5PV4tXOOFb8x%!3r*y9`h(Sf zcD(>YTz<|WLKC9+F^Q9*dRGaG`W=^}3HUa{a3;LfUN~-_*e8IdX~c?i7qVM;w+M(%o;1KA!%@5wqX)JwEX< zGJ+uey=fOziaDo_PL|j}rqU&q$xUzW)Bm4(hiAX<9U7s^cYXr}+~XmRxj_8OyW&9` zV!78-#vSqMI)D1f*7Q}8Ir~FOWp_*IEokKw?_F@Z7#GMRsWlwyP$qK#N>{_YC&@Az z*WSn75hZd?vm*e{4r4^bYm{_VG@ai3JCF!e9UJiP~UyLmm;gTe;zF)K-G?{Wa z*%KB?(5!?0k9~pa&wW9&k=eu<0nr4dtLyU0p4^e=ahbv?z{0Z-DjN$<_uhGWGy2ZJ zc&9NSx^4nRE^jQY%&dY3?_&A_r!(JeNA7#|pZKfFeft9awu*oM$-k$3k8NT};xE3A zQ%|*F6kKer(8<>bx=I}{$MUiQntoLG8O}q_WbQ9hS08Lqt7JV+0zPv-zkEj1kuUBV zBCL5IKTewZjn`%#9I2)QRtAX`q)jQL_&iMN*D$4K!5YL^I_a_(zw(DadrPYMp*%?7 z-b0aiIOeMl*ScFkHuFOnczAP++BIp>YXgGu3AwUUeP8n%e%H}~O2*!AY`P3=2iz$T zj;D0v?xF%d(DP{2ZLJFY4j%uD$+d4_fg!S5^>8abF#Es8LH2|Y|6=uk$ksctIp9nS zwzz{*Rq$WZIe#{RD~Xp~^fRDZ^KSIIuivV9d~->m<*p-40xIeBWUSx$5;V9YC@!A8!3%60z-T zT3h^8&3&Za+w^7%RD>1meJqq?ksH{XpeV?5>pBj}K z{t=0#E+;7+YvpMNlDtCDnfO$xPCFpH*al{Oqa^hc*twVdHvu)GyJeRa&HVFxkWfuW zL0{^FRe4*3bP>|%&5FMvoYe`e+_n4rOFUnm@ik^Du6;zFRA;VXSX?Kl(2># zm7LVaFFiIXSIfXpJ5gg3Cx}DVIonJ=KNQd1Nt&_<3-d8Ke!u8H{P}$%Sz&kB+mWjIe3uP7NZKqM+Ko~l*me{zmivs_(N{5_!A76AThAQM%y zzB4nhyy@`DZBr&FqEv?=J*Mg$z=sl}Eem!w0)=@%5e;wazfesi6rdDkph@<3E2^mM31uI%)gQrPK>+W?{I27_>??;jUUOc~YLcfVx|1+KG za)s3RB_2XL2<88m0fT)ZUeFry8 z{1S1mPv3s`J45tA+R8=oug#bx-a3cnzW}9FV!&A8%A zKFO#1(T<*9xp~^gz|?B4tP!k#(oO#)qmqUne{ij|1UPn8wZ2!|6;RL3lgxj|ECc} zD7i^b1=%V95m93leLziHyjaRqcoIUcd9m8tM6)2mx+mF7uYG&FB?)(%GvQkxMc9Ub zBTmm_uEg9qZGu!2V71gf*kC-Ge~N3in+npEg#~)0YtDs?cfqS+7d|UzU9|oz!3Drd z-$vxm%BTl*YIikO?8}{-&@dYBxbQ?>>neQdf7A4Hs7g}K8>iV&lJWiN4(Cxs*Q_+^ zK>ejnd;{hQ;JW`8Xn%41*Eg8H8&7h8DB9ebncxh6aNyx=flxS2CRheai$ zMJUrks2th!(I!0CvS1Ov^I;Y9HCIqUu8g61bh zd)|9I&*2y79|?j80_dM|8tOQrIk5KSfIm$`Ozb6D1~I#Gur}yb;5cMVdFfIPK78=? zDZ6)nINV&d!E?C=@Bjfro9;v0bL}x+i=WN;4Ve;&jFT@NTZ`rNR z50uHJFI-6FiZLaq2f7C*KY4RCNy`9^)#^EXZI^;m#_Ht4-b3)0)wlR1O+%KQi?K4y zi|JlnhxU%|V&kqVq0dnGxTmonec|l=w9-i~S3)3_nX$!W`fOb8%~Yr4B~DMs1(#Kb zk)ff}yxxF{bJXJ$5D7<{Kw8y2^i&B6QP$}SgbvD(5vPSFW}ffybDLMTEgK|0zrB3w z!RRMTeIYHuTZb{kbjTtu28oqX%)L5u(Dcmc3qD|P6fd-FQ1eAHBNp4u+)FLpG;|Bi zh%nq&V<}BQNcOZ+mW)3(us~(IX;_iTQKRn$ZVou<38P)v_xvnb3Ws3grx=p-40J*g z^=!%)xB3P@q77iLg$kYm4jK$ev=g6r=ph#N-)&?lp* zJX47fME#>;OEG0qqb@i{s|rYq`nup~m*?g@dt{1*q595>!&8S~)w@vy=3z+D1Eut>1}dtJHi-BopIt7;fRVZ>?h>?^4aKI3x`G1&+WI|3 zPJ=l$V8p%U`>0|}m?Ib@xqB2}<9To%j%4e|d68l#g z!3EtTUuFQDbEs4$m1eI)#E-lf1hF{u^yDRUl@dN)gm%qk*1B4*KwR>ep)LV zSkM7mjBbR8TOC9810(EZwc)i*2CfAw&?i5IuCGd!mNm(zcrypu3Uc4q9`oLBy%Kl3 z5(X}uZxmZ3u(SV^-{ncJqut&@Gn^zI-Ft;zrW)QU{R!}<6Z2e=E}6>ge6I2FyHLoHcrvKYLA zvVti<4LRIMlloia?rYfGZOQ$K(X9p#w7d|WqT4!om3Np|KCVM>%jD|~2K80$a2G+$ zS(Zb2wSstAD_*-kO;EIlw3FR&5AF9$$3i6Nf`Ts*vmJxJeJXzR0>$PDTI)do=r^m}U&TNSrbtZ|jDaj`sbM6nFuLfFENWF}lr>uG8`x9)O_myaP z>spK9?#J?Qz&Y+U&UPl0Eu7(>O6t(OIWLH$XGl}n?=TiGtJ=sd`x6b)W#gj?-4FO2 zVB{rs>_E5Jo=F>3Vs2=#>l!RBboa88N4&D{$pOhL#z<}J`}792;B!=Uvc)`T)xI!2 zsbG>*d)i({=ZfW&%qM9JMX)!PA{0V-WTPd>btUYdS;E%~Q2k%l8epgwa}!(N$yKA7 zNnfor`yD$<%G?iZAB|Cb8lE}=HdCY$4IZH~9 zXd28e``Hrw1q&WYqnU0$EB<=1h1G2S1`G>sBmbBEqP+(B4?*Xhd1(f0+{t$9ZoqUm zRs7TieF6e#+6NZGsLhj)I``94c4WdcwRk<$Fbo?5?L_fRHo2WK)Ky486)Pk(0+J?- zQ#E9t$z3meO0owpL%W0eRPGYUQC6e7$PLjU%g9*6JAe71^Z8+#qrN}F#*!QTT||pW z4n@ND!Z^E-HYvC-mkq<&R!3xbhL1UiZKsLVnlW&@$0i>v$`UN77it%0uAX{UJju)q2vL&%_M|gH|$b^k#A}_WpX(Rwglznm(QIE4WXY{fO7vbHb3_53Qg_pzun! z4dd0B5S;@~4#UTYaqZHPmrq!S4Bx3+Sq?UKR?m>1J^y-&136uhN~eMi`QhK`-1s!W zryi+K`47osAm5#0n{}Nn7a;ETRuXKjw?o0T(MV)!ar3rmj#@u_#{W>k+`f5Z!!&3r z+Ea$8VATu{K%*=^s&kiBj}>HKSwgO3@*HFY;NstQ~*Vb zh#pb-)_B|$K7RIKx$TW-U%iv8=X*{xk}SjRh~8TVC$#uX!d?`k#9Sjs`h4bKpc_p4 z;a!iSHB}Kud{$c=$&`=Z@|+%21!wIS^JvJ#d=Gz+BOzvCvBYtL<<5Zl^$_piiPL&1 zcrow@NBg0z1miKbH?1+#n{~8E!*v6M*Ph7l-s=K*b>_#zka9lQqcEMEZqLx^QIF76 z8!_C%oT-tQFR8!N>E{U%_dLco=?5%&D5qZlg304qIwn`kW z@u?s=4Q<}_A(sFhMSy*i+UV?JuvqH7lM}s|s$Zb6)$ML~blEmY`#7+^DN2f4dgN^F z71u}?QyWZJ7*6NvLzVV<)qr5lvSdqw?e=*!R@VNMsBhK=vO5`jTi?P6zVO!}7FX=QS zTsS2`VY(V)bE=icE4!cN3k}=sU^w()X#{$YDaj8eX_q?$(^@t(ku9!2E2_3Mvc8vbfX{u?IeecmzRk zx1zP{w8awno?o(#t`K7W)jTPn%RdEyy1lfM(fA@Uy_3LuilvleTnLY3uG3rV%z~|6 z9|8?<{;u_d5Vq-JtY&qwisnLxUw^S(Vv8TW;s}yWE5Z;s*g0u9?4||SX42=e5myoD z9@24dH8b4h$hzStJ~^iK+A&FW^+mC8F%j#(uZ>#-A9B0 zanpQl(wJaGD>!G^9ddtrej_x2Q=T=LKN#Y`>NDHpy7y(fs{;mpt<-g3y26ktfh&=v z7-4#EHspD`_g1Mf6hBs-4sL1Md=6^v%4x#l#%U|S#ITDBLm>9lN*W7sQh8()Ks?Mo za&kLo4;=>NpDx-bKeSI6!J&MIZ4LXtsd}lKjyHdzidF5IeD<`Sfwae$DrH@u++iSf zEFz>UoSkbQ#&5rZKv;ckpDrhaQRZt9Mrab5^RddDG*9`kuKI@I7QUQ&vsXP|?ubRp18 zR+EE|w&UK08d%5tCJ&Nba>DM0uP@S5_1ocA2=3 z3u|AgbLkMxg;+ywwTe|$39+(F{ce`EbFFUN_yufLU>caciS4%I18iPY zWEVMmm}J**!8-~3B66h?l=H_%_4S6Bc#zu|g^tw=+6%o$SnJL>aRGiKHVZ8G^t``e zvw9hpZIr#1QC?~@{=PbD&aKrv>@p2CF=iY|Dt_bKz{rQzRWqdXD|-eOOuidYKj}ty zv||Hyv=AvcLg}=0i7(Tl4}Ih8tF!*jd`;~4;@ahlYJ3+(W zIq)$jr`g`Cbns^bf<^4z=xdh7cZ-cCO+B$y-EKWr7@b9eu|2bfxCR$aa&?m;NkivL zvMy+Hm=GtyjxaN-7;k6Vj`aa_pwmh2ycC`Ta>5UkltLA)HWc06sNH*Eyqkkj(FL+k z%g+!p@`f}pXM6!Vy7bW1K=Hvlt*pE8WEw0Uqupf>{cyGbWpG!BiJ~|C@Y62|5g`zy zMlyX7hi|2*-}y#D<(*7qxOFXDHgRZ9$6Jb?v=L6l)*)p2Z?+QbykccIcV@;(!xJ;- zKAe~zZ3>LnFv~DE}%@Mw8WJ`GVpGZ(HzQsh^6nylrAP^7;j!rXl)DS zs6$Pb<$zUev$_1cYf=5Gp>%*oQe3xE45dysL1P60qq$@pp_qJCD1Hb?XspYQuNfCk z8tKy#6PNA7>Gjq{#n#A!&qA|6)0o>-)X=n1TNiLbHnbg$xL30AMf_k-X^_@^40=_p z;2^g1NvLoTw43J!J~G0UOwQKpxdPR)q8oZYA3Hr&9^^EO(13Xb{Vl*-*xrtrbYgYd z>W+bdgi;uJve;GeoxSj-OB<^Uf=u0h`K{e`bLy&Kp<;WCkxvN(%JK5l8&E;Ze-7+d zy;N@ptv*qrbtG^SM@W)_`S`iAf6vTe;!9o$=6ter=53mm{$cfp&dK^!#ySpQiA3*y z0euq)Bc}^-?%E!563*N5z!???cP@PP!eat+$c^yI^bUnZODg;!WmEtXXmsn>>Q=SS zfa>vXa&TrLNj$dl5?qEqQ%86tT5l&u2Nz2K}> zuia5%Zdb5Dv73Cp_u?r+RtRm#ZVL|4)Rz`))zNp61Bl9;Q?_n|MnJ4K@eiZ`tjIZL z-tFmub&H!z?j2V*A>rkOYfO6Ww}Sru7;TyC@Xo2NpX+L;2iuwi5rjfn!uP*eJydg7 zgOB6vgNrI2$YQqWjrp4oDC?#+kX$`(|7^i%&yBkw%>mAZ7$rF_u8`xH z2h_i^G+w8(+*=U0evZe`trbAm#o~x>4mPLT1A%mSVMd1AKO|LLoV@Nvo)AL$ zFb^QKmAAzV3G|c>B!?%a)M5U}L44?#W2P*v7R!u1e6a%76C$~=or0S;pAtfAyTDs9 z{7h&Ff80fI&3>U-5lv3vQ!ra&%NmSOr_G#VaG*qshl6-#vhQTCj3WPxJyTv*T^z7la?3_>x#PMFV7*4 zU2v-BGOmog$olQ%=TyxeOk1!kHk6YnmN|uth~faE`Y+i#v6ntyX=*s}B(&8rqIWHyqy{{i%i2g;0C_<|AZ~AH$Qpj< z_mtmQOC{6sc$pUw;aTY_9GNbZ-G+;D%!JT{lnsZV~(FK(T zPVfQQ5lXnFw!Ny9i7k8JZKBfCMT~sYl-D-g=tEVF{M7CAR;|Z$43)D?wOnVNn|tz_I^%uH-hAta!a(|E zwmM{>A<9=#9_ef=13v-X(3V>6K6Kkmy>MxBRyls z>w~=r2gp(SboAY2Yny(rox)uIym;YmNBUZPdWmm2D@b zwl?KNdTx3N6dMX!o84d@pqh!yr^(v{^N4glorEg5JK%CeI9ye2rdg|IAaqW@RSDJX zOly!di2z?()b-Uyo3;^D&*%FKU-Mq0G2&I=GGZf9w}ZeZ%LweiM)-Cc3lvm7ff#W4 zqY&aLoXuXPdw=WAggX|h)(u2bGh^bt_6W1zg4jU7?j2$FDm%I3DMr==R~s3(KyxjW zzi&dYZ1-t4cW)v{7Fs(d6K2^|*t^J=DoP=T;wT3u`_9q>t_3h(Io+V4gllJo?)%6a z(u$nNE_+?91XDrP zaH!&aatvl=m@2nzheOgvr%-9>W4@vE@kfz5Qxs{3t9ckg6N+Pl`N~W6iyS#MtO4#O z>ysOZA&$g=Iwd`23y%Iq;E21aVoJ?M_D6NZq!3(j-*%5Z_@G`W;Y-UM4%@RlzOKo1 zB4_&gs;iK@lbqp?*MR5loRRR{F!WuVINZA(R}|n+48n{YbwdVA2M)E$n!;Yf^ph@c z*~_lcSb!>noe7CgJaxR!Bwn4h_-#5;=asGFZ`#)ApWmLBu`;$qlZJ(5iB{2TaG{Gt zhQVAFx8qz-?DyA)*&8b}LrCixa@2glqn-Gu(m}(aR1m8E3Sg;O6mU33k;TH4D;p>~ zaESb-J8zI&uJAR6R!7_i81WW8Pfk3s7Ab3;colj>vIY(%kXEsy)fBVnwph?vYTkpZ z77u`KQ*=ocmnCIrjKNStt0A^u+OpKlo7djdzrtkE0#|dUZ$aH4PiYRVWkVBVu8!1s zglBnRd+4&O1XZf!Vw4Idv_3|EAAnG zs#Bqq*X0Skx5VsR4Q&HG3N~byt6n^?!pHk11DN~e1m@PJZvj;5la99T<15rsQiTQk zP4*tur!#b1PcFwz82&aUYUf)Hqx0V*E56u<3JzS&Uw7ei@dh+y&SdR{mljg#LK`oh z$K4y0@P21It5stW*or&sksAt3u*ota?Qx*(#%-G26dT^|m-hW=0*J3h-dP8@U1!!? z;=;T+%z(Rv`KD9R&PWqrT85HiMYS%5`$WuCGaSc9Mn}{9f2f@;Ji$n0Wa)nOXvREh zE_tWN`-1vSGBTdXBn>nFX#aSzau7asjy3k9ywIba77ZV%w(LtC-JZ3L_@s=4;_mt{ z;xZgF4hoy2s?ilAI}wLx z-GK@}y-Oo4xP!mwyv<_9k2E2V9nIcRbo2Yc6Z~{9_pJAi3uhi)(_Wp0kA3&s>cQk? zwRsP+p1gnZUF(Ss^EPei%WK3NUoo#_^O71*tR&eE!XKR`5b8%Je zAGU7vhw6Gu7T_oD!jWul`?yCJwIop6$)dpxm&t?k6E?+J^4qpcaSc(!q()bWnV>lc z*;+XUE6jHWS-HP>%y^lKH0*a`48(8es)uS&e-0(QRpE$u_%z`yUt?#Wh4&0E*8eXKxdi2IL*Ba(oOt*G#-tD|yg@$LL&5|M+V_YF><2`F7g*unX;nE0vSEgQA|uOn_UA&HCO zlvh`}>TxGjjo-}6o0&$!D;qh$DOtt1!G?xKV{vZr`lYqkq`i#}v7}z%z2@xOWuFj( zzdQ4=HRXJzrT$5+Go;oJ_&u_*Kd?YAqdvJ>a&N``2f--*BB)st0{!SwxHQ6KT2k`SH#S?L&YRDDG$eQwZNnSk;ToBNwa|{AjovcWzb&&?ALiRAVF@X5DXi) z`U1UABoK3iE;&+n71iki;It(d-jYfKrf@5t_-{77>ugS{9NgvnrS2$zhK!g(R-#@; zU5tbk5ri3CB{GX_GEJVXayiZRg8!(2zwC0nDH;X}%XaUqrP>dIL(h|&pChZ&aH2Zi zr%w8xeENACarPot2LH7g0y$;u!i>DWsqVOTGg0j`mvKg4D#)peYo935jG+`_IAN>d zooG+JwWlMa&mOs55JvCR*j3e$lg#|bFlyv?OG@Aqn}Of-PjOuu{nv_9YIb>~hrIN^ zC}Lhul3#NcEDFnbo;haXSO|G|X7q;t(hLwWBKW3>qftT3d6Z90$uaQ@ASC&$>{k47 z^Oau1*LZGLvNz;!?ZD%SZR@om>#{F@eSYB;Kkhu|OD}=uD3k2nNA`z1Sc!*dBjy5P7%1jJf6a zHaM%H73VTp@#>D)J%sFy$Ff|p7gooSyf-$YkWD%Y*a|_J48J643i>V<_v&C_G{ED? z2QbuB8$>f{3}prUlBOU=Rw#89hc%1WK1k1&;%|&G$$H^&muE@hoW*16N8`t0aFpMu z-)yiWl|(rYREH(}p1|pJz17UD(}TD_v`vhGxb$7>WQ1uTBbe8BU^#uiPPDP5_uf7h zxpWt->=8@jiuuxP;L|0y!!kISZK@o;=>#kN{7GGaRpHkSY>R0bL^NCBY%DJYhZ(10 zoR`JD>Kido%BU>$k7IxmSLKwxKJ$u94b?vHxHLnwk=HMfZXU5EXi zqh2YnwapY~Wtr$x_K^Mi$i(q>r&?PQi*47W0`^hzCrTkHS>;O5&C!D7F} zE*m>+prN*ks`$o!@L7mzU~jV$=e<*1Et+4SjX8>L7 zA>p7bE%eJi8IyPbnV0Qy(;jCYvg>u&nxhDcoP^N2m#16AQXUyI;<%X9kzr;mxB#pc zC_U+^ggM`sMgzFhq4pK^%Q>j`YviRenRYY!YpyA1A1BLOUvKAxZ@b+hG{$^Od1-0d z(@iVQUw?AAL*MT|p4zQU0k%NPR~4rP6^bunKF^^eDc0gCej6?2zFXs$j&-XM82usI zu{DuMq3m9(a&MAZI-}#FZ1AulX&Afr4q9&};TzzaL7@?A5M%G@k=^rcdeg1!Ys_!4 zwn2t`yrUa)_8r|Ryx1{;d?Pn%>Z|Y{_^w>ILxH!lV+US*tp^71KAGJR-ZgRcZmN8w z@-x&v^8}*9xXfP`DfR4ZBi#I6&i0w_MFS*O?AZ>ZB{MFk=gZ7cU^V%pV;o5 zvn|ye3)b5Ihw@e*adX8dgrBF74=G<)A9$t(+4}Mp?G2<5QEbVd5 zTP%7o{Ops|jCPUeRM)acvRbB=1l|EMidR;tEFeWg%*@$+L9DP}(R9~lZr7&3bE`c> zrK>Y*`3}iNnT@#%5!eYuCL$U$RCeD722<$Fx*E)QpKc6gj7@u)2~+(?zl=E=P9i%$ zjYj9xer(#C_!4+?`ku8=kZVk3gRSG`X8YV^l zCNASIhyVWH@WJu+Rzu%e%6dP1U*#nS0d9dCqtEQbc#6lY)6f(m;yCON-DHaF%0oBh3JsQaK`;naCEquU7rJyd#;Yb3J&3i^ z_$Lxs=O(h86nQ;$H)|z&x3`zP%r}ZjQ2%kA+Wp)`?JNHEb5<(<#f7qq=`? zaC06L3}W|t5ifC@ei!&;@d=&dnp#eK>5M8THe>wT_zJ7rOy;nZ{zh;=_46dkh7@f@^{$5?NXz$0{kKufmbPtA z^(J6FsD!oR`iVwqW22codq|--iJC0nzcPIV=b9qf!xAXjgp!bvSL+Flv#F&PiVjal zZ$KN4dNXd=Tnmu>P}yFtrCeYfJr4W3TPf1-aiW}bcI%wl%VU@p*}70Pmu^p7$)Q6; zUKhHI(<0|yKBW?BZSJAgvnKNa*$>Pw*IB*+dhk!=&ZU_GVv<91^FZ<6d%l4Z4y4Em z7oL-)w}ksrCrBYX2KSfg9Djt!i7q6zku$`K@=G}@XvfMzf%$B~L%cP#|6rOHU1WA~ zc{7z!qG4rH_7}M(QBHHHJ$GI#mSATs;pNiSZbMp|HSGOsu*K2^;BS!p_V^KGlncI8 zjv5|HB4_HQ?Pomvi(zTo+^(E(?xdc;-~G{G@*|+hqw&nrw!vAVKDo7j`){u~4$G^f zxQ>@>vT&|idV}xOt&)IH1>g z^3|~V&N=@3F}Y&bipl58>$u3JqXLLrf`j~;Rds2(CLM=;KV8Jxh|vLAX_oh^V6$5> z!g5+`JfD>|!FGg=y_rF2u# zvh;6dmL^{$DR6{nlIM&K?_jBmQeFq30OrT(COI+BA+j<2{n_4p=i|6v0g%A2j$PV+ zJ|BR&bj>R$YgtW{o>4})%cqqn=^&K9#wj;6zWs??t_r@NwSOvq?f$dz-*Ct|?!nC| zh4j}hP4&|I^plQ-=iAA==fvqKuiTFICna@NDHSq-gM^U(>>s*Bqt&GJF@*N~GIE##-~8gStd8Od!M@BF)nIfI+-q?1TwR4XX%jfY4#AO zk~YDz%!+<20;_qsT~tV)K~e~6RLhgz5_aZ+@<#n{O%4qEOD>BsUvr=GVy&Cd0gWQOS;|6X#yX=Q%KG)PT~7tr!UgH!U2;jM}!1Zz-PQhw_&dxq_xDvF&>n{pH$ZYn};c^{(d(p0o-11YN`a3BF2*}Qe-EChYiM3 z7PF#>FSOm(CKu{PUuXxfU6>$h#6N@NQP_)W4sa$+%De)h;X+7_8N@D84ezo$V^;s3 z{8V49wYRO19zr5k3Da!us*egL6Kr92xj9;0s?lqH&hznKJzK0YMq}a-%1Dph@m&U?x zZ35zoHTiQz*j84#fnU!XqYXL`$W80qtGve6@W0P%`kCQr;V$YP<0H585b5>Lu6*Y3 zeEZ3}=0?sL(AV9mhFiRm%*fBT2)wuJ6%o!V2gUyGw^hKQ-ohJb zbNk|+O+89DZx3VDF}Zz5!R$B-#3Aw4r41<7sw_<8k-yy0;uKQoqpzq}(h`~IUfaMN z$@AG-Cs4(gSnSLlnO}SRBBhPCLG0ie@m|5#cKv-Xgx#sQ5fZPn7X;mp=L;Ns1UvQA z#@b)yn3bU`p+`(LlLJcoJx!BJ>PN#D%i1)$=7BZ-S6@6XQ1dwY|LhT8@chcFw~MXe zN~QJd)>bc2I8v~Jzh$mUh7k4FMWl_Pdq|#C$5#&Oa=bPbJY*KDk-kMAk zmoK8h8f+i^lo(V2rzr55nxmPVVEQQSEH5(dLVC4iQ)x|4-Ejw>BjtIhJz1K^w1BV? zYMJo^C8usfT$SiMn#Iml)#NU-I(nSs5lVD0PoR8r30IlYjGBm!S-jwLqSgC09KQsS zjC2e;d#5-9aJur+f46H}aaNp)-JmAf?H*4N|LiDM{h|U8R_ec&BqgeF_0J7wVsLM^ zR=nrkv3tg&Z2KHYJGxr>r}rS~J_*x{nlY6F%%nb+qCEg^S057=9z- z9q?sq*>RL^AB`eqZV=TMTaBA<;J8Z=K8cZA`%$Sbkc6jsc3Y1A9{wor@LWeoSuUC; z6t1Xjuc*v+dS4M$7TeitZmEDB$m;6c&2mY#NYgGH)MtdbDpWrvire-!Lfr`Sx7I*d zf@9xqJ7lV+%b`g>dBw1Cb=KUh-_W5c(#S&={`un8yR}FEOD>rDSSEaT7gHUIaPjnf z%#KFLGNs1}_*8$+vooJva?HTq`sNbdmT4@3w(U~%5=tR=62 z6`ML>oOrsnNt#mTCg0i_=a``M+(xU}@Mbo}K3-^lhU^x5brciRw4k-JH3@?iV`~o( zuoDV}UUIk+E7~sKg$U(lLuaLdskyl`l_O%M+ka~0W+-(^XDCDKaxZbe62LR0{5B*e z@r}5B%vNYpgz<99OXhV&*FFtJ`IfW}WvJ{9sZr_e7h|PMJ;Ir3Y8bsAq)iMFd3gGO zt+|NtY`OO{3B|JG5Krk1eB{+KXj34Lgl{gs-to|T^)58+8~8EM)al!=9XM4o{FXZd zn`g}3N>6MmlHAH+L)aUBMjDsxDdE%94>tF;O8@ZoyHcD1`$giS)r`^=FxXSRZEHR$ z=8i?j20}aD-@mrOmNmbJ;EOQpXd)(L6r;CoGYc7+gzp}i;x%BzB5YQVUtqnH*xZ+4 z4;6_&05k{Uhnb~+#vSsK11mg<72uL_M zkIM;Nwayq02v|Rz!L%01j*?t{1=G|Ii1knbR#R;Hg)D(EBMG_2!u2nt+T zx~SdUhhIL}n&xQjzm{$c`GBnbHTo_MWwP-fAcUc)Y-q;U>wCy18~oG*)CP1uQWtkT z?5nRUF`N$`FIzqCP`wjNh?63P+?!v^)KE1uX(A^ZG}tz85qB@ayh@uHc2$gS{^1qZ zz1r5pwFOEJpF3(+ROp+Ho-!hBOHtuaX^Q&0?6?IYM0958Y<>8$54>;v(BD~@lT^tk z1zevVFKK^)nL$<^u2@Ot>KLd;PpCJoB`!|m_sUB;pEiia`P)~{tIH{{fVTJM$9IX2 z-z0+L`@&RK3%6^DQni*)$6;1Gf#wu=x}i^t)ETdI?;~}3aofNtf22**m|ghps7nJ<^NE$mg};7EV8PnK919k zQIggo1OxT7a1(vG98D(s8^qwUWb4sJp66nu^W90_XNE8qsHs#=nXhJZPddd4%k7;5 z*Ef^tXCb*h@MQ+0v)L7+_v``84FeUqq5*vk5_M4hy?p=H)bH85(N=;PIx2OI{>3>W zWtILN^xa;c9?%ziPk&Ao%pBW72W&k2T4foX7c4w#Kd(^l|0YUzl38AYbBpy^cl>oc zX#;^%vRPX%GHJxE+^^7y7u3UD(mWbXz>)1l`#Z)nY5Z=t(r+vox{x;45UJXoxEcW9 zu!~1OAQdo5?@frHaIl!lRB$!XWc3RRdo5_tIJvbzt(Znu~FmN)g??`-Bqa$nW-Gpbw-N&^Q zlb6NH-4deZH>NqeXa>C&s><+6NOHHwpADQYKx(@iHpfv=cr|6BAv#kP^yX7?(Q4c+do-JAJIimDHHz`o=>DFyn2jlPGWGo=yu+M zp8FC{EzMf&a#?>kPzRUcc5vOavht()-)hrm3c< KTKd2`=zjq@OwdpO literal 101615 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 diff --git a/doc/UML/1_0_0rc3/UML.mdj b/doc/UML/1_0_0rc3/UML.mdj index d72d4612..25a0fde2 100755 --- a/doc/UML/1_0_0rc3/UML.mdj +++ b/doc/UML/1_0_0rc3/UML.mdj @@ -5917,7 +5917,7 @@ "_parent": { "$ref": "AAAAAAFbHDZmRV10zeE=" }, - "name": "scaleKeypoints", + "name": "keypoint", "ownedElements": [ { "_type": "UMLDependency", @@ -6098,6 +6098,180 @@ "isFinalSpecialization": false, "isLeaf": false, "isActive": false + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFbHFy4FZeOtro=", + "_parent": { + "$ref": "AAAAAAFbHDZmRV10zeE=" + }, + "name": "resizeAndMergeCaffe", + "ownedElements": [ + { + "_type": "UMLDependency", + "_id": "AAAAAAFbHGnvtqGnGyg=", + "_parent": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "source": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "target": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visibility": "public" + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFbHHIBi7QWc3M=", + "_parent": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFbHHIBi7QXMuA=", + "_parent": { + "$ref": "AAAAAAFbHHIBi7QWc3M=" + }, + "reference": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visibility": "public", + "navigable": true, + "aggregation": "none", + "isReadOnly": false, + "isOrdered": false, + "isUnique": false, + "isDerived": false, + "isID": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFbHHIBi7QYUYc=", + "_parent": { + "$ref": "AAAAAAFbHHIBi7QWc3M=" + }, + "reference": { + "$ref": "AAAAAAFbHFzB0pgy9QE=" + }, + "visibility": "public", + "navigable": true, + "aggregation": "composite", + "isReadOnly": false, + "isOrdered": false, + "isUnique": false, + "isDerived": false, + "isID": false + }, + "visibility": "public", + "isDerived": false + } + ], + "visibility": "public", + "isAbstract": false, + "isFinalSpecialization": false, + "isLeaf": false, + "isActive": false + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFbHFyvbZc1D+I=", + "_parent": { + "$ref": "AAAAAAFbHDZmRV10zeE=" + }, + "name": "resizeAndMergeBase", + "visibility": "public", + "isAbstract": false, + "isFinalSpecialization": false, + "isLeaf": false, + "isActive": false + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFbHFy7rZe3LU0=", + "_parent": { + "$ref": "AAAAAAFbHDZmRV10zeE=" + }, + "name": "nmsBase", + "visibility": "public", + "isAbstract": false, + "isFinalSpecialization": false, + "isLeaf": false, + "isActive": false + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFbHFy95Zfg+a8=", + "_parent": { + "$ref": "AAAAAAFbHDZmRV10zeE=" + }, + "name": "nmsCaffe", + "ownedElements": [ + { + "_type": "UMLDependency", + "_id": "AAAAAAFbHGnq5qGWd3A=", + "_parent": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "source": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "target": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visibility": "public" + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFbHHH8ArOmRco=", + "_parent": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFbHHH8ArOnTL8=", + "_parent": { + "$ref": "AAAAAAFbHHH8ArOmRco=" + }, + "reference": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visibility": "public", + "navigable": true, + "aggregation": "none", + "isReadOnly": false, + "isOrdered": false, + "isUnique": false, + "isDerived": false, + "isID": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFbHHH8ArOo1Sw=", + "_parent": { + "$ref": "AAAAAAFbHHH8ArOmRco=" + }, + "reference": { + "$ref": "AAAAAAFbHFzB0pgy9QE=" + }, + "visibility": "public", + "navigable": true, + "aggregation": "composite", + "isReadOnly": false, + "isOrdered": false, + "isUnique": false, + "isDerived": false, + "isID": false + }, + "visibility": "public", + "isDerived": false + } + ], + "visibility": "public", + "isAbstract": false, + "isFinalSpecialization": false, + "isLeaf": false, + "isActive": false } ], "visibility": "public" @@ -6192,7 +6366,7 @@ "containerExtending": false, "left": 5, "top": 22, - "width": 775, + "width": 1039, "height": 13, "autoResize": false, "underline": false, @@ -6264,7 +6438,7 @@ "containerExtending": false, "left": 0, "top": 15, - "width": 785, + "width": 1049, "height": 25, "autoResize": false, "stereotypeLabel": { @@ -6323,6 +6497,18 @@ }, { "$ref": "AAAAAAFbgmGMA7e9i94=" + }, + { + "$ref": "AAAAAAFcswhpISqVrfU=" + }, + { + "$ref": "AAAAAAFcswhpISqLa4s=" + }, + { + "$ref": "AAAAAAFcswhpISqfnt8=" + }, + { + "$ref": "AAAAAAFcswhpISqprwk=" } ], "visible": true, @@ -6336,7 +6522,7 @@ "containerExtending": false, "left": 0, "top": 0, - "width": 785, + "width": 1049, "height": 385, "autoResize": false, "stereotypeDisplay": "label", @@ -9861,7 +10047,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 112, + "left": 640, "top": -192, "width": 0, "height": 13, @@ -9886,7 +10072,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 797, + "left": 1061, "top": 158, "width": 214, "height": 13, @@ -9912,7 +10098,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 112, + "left": 640, "top": -192, "width": 73, "height": 13, @@ -9938,7 +10124,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 112, + "left": 640, "top": -192, "width": 0, "height": 13, @@ -9958,7 +10144,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 792, + "left": 1056, "top": 151, "width": 224, "height": 25, @@ -9991,7 +10177,7 @@ "showShadow": true, "containerChangeable": true, "containerExtending": false, - "left": 792, + "left": 1056, "top": 136, "width": 224, "height": 192, @@ -10041,7 +10227,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 80, + "left": 608, "top": -344, "width": 0, "height": 13, @@ -10066,7 +10252,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 869, + "left": 1133, "top": 223, "width": 72, "height": 13, @@ -10092,7 +10278,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 80, + "left": 608, "top": -344, "width": 73, "height": 13, @@ -10118,7 +10304,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 80, + "left": 608, "top": -344, "width": 0, "height": 13, @@ -10138,7 +10324,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 864, + "left": 1128, "top": 216, "width": 82, "height": 25, @@ -10174,7 +10360,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 864, + "left": 1128, "top": 241, "width": 82, "height": 10, @@ -10198,7 +10384,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 864, + "left": 1128, "top": 251, "width": 82, "height": 10, @@ -10222,7 +10408,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 48, + "left": 312, "top": -208, "width": 10, "height": 10, @@ -10246,7 +10432,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 48, + "left": 312, "top": -208, "width": 10, "height": 10, @@ -10265,7 +10451,7 @@ "showShadow": true, "containerChangeable": true, "containerExtending": false, - "left": 864, + "left": 1128, "top": 216, "width": 82, "height": 45, @@ -10325,8 +10511,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 744, - "top": 170, + "left": 875, + "top": 168, "width": 0, "height": 13, "autoResize": false, @@ -10359,8 +10545,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 748, - "top": 156, + "left": 877, + "top": 153, "width": 0, "height": 13, "autoResize": false, @@ -10393,8 +10579,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 735, - "top": 199, + "left": 870, + "top": 197, "width": 0, "height": 13, "autoResize": false, @@ -10426,7 +10612,7 @@ "$ref": "AAAAAAFbHDiqGk19SxU=" }, "lineStyle": 1, - "points": "618:157;863:226", + "points": "620:148;1127:231", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -10468,7 +10654,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 550, + "left": 681, "top": 167, "width": 0, "height": 13, @@ -10502,7 +10688,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 552, + "left": 683, "top": 152, "width": 0, "height": 13, @@ -10536,7 +10722,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 545, + "left": 678, "top": 196, "width": 0, "height": 13, @@ -10569,7 +10755,7 @@ "$ref": "AAAAAAFbHDirkk2m0MU=" }, "lineStyle": 1, - "points": "234:145;863:232", + "points": "234:142;1127:234", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -12456,8 +12642,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 655, - "top": 169, + "left": 786, + "top": 168, "width": 0, "height": 13, "autoResize": false, @@ -12490,8 +12676,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 658, - "top": 154, + "left": 788, + "top": 153, "width": 0, "height": 13, "autoResize": false, @@ -12524,8 +12710,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 650, - "top": 198, + "left": 783, + "top": 197, "width": 0, "height": 13, "autoResize": false, @@ -12557,7 +12743,7 @@ "$ref": "AAAAAAFbJy96y08MtFk=" }, "lineStyle": 1, - "points": "444:150;863:230", + "points": "444:145;1127:233", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -13344,7 +13530,7 @@ "height": 13, "autoResize": false, "underline": false, - "text": "scaleKeypoints", + "text": "keypoint", "horizontalAlignment": 2, "verticalAlignment": 5, "wordWrap": false @@ -14452,8 +14638,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 809, - "top": 132, + "left": 947, + "top": 133, "width": 0, "height": 13, "autoResize": false, @@ -14486,8 +14672,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 819, - "top": 121, + "left": 952, + "top": 119, "width": 0, "height": 13, "autoResize": false, @@ -14520,8 +14706,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 790, - "top": 155, + "left": 936, + "top": 162, "width": 0, "height": 13, "autoResize": false, @@ -14553,7 +14739,7 @@ "$ref": "AAAAAAFbgmAJRXI9LpI=" }, "lineStyle": 1, - "points": "723:85;877:215", + "points": "758:85;1127:223", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -15143,6 +15329,1456 @@ "propertyLabel": { "$ref": "AAAAAAFbgmHlS7nuOWI=" } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAFcswhpHypfaIQ=", + "_parent": { + "$ref": "AAAAAAFbHDVYsl1GUQo=" + }, + "model": { + "$ref": "AAAAAAFbHGnq5qGWd3A=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswhpHypgncQ=", + "_parent": { + "$ref": "AAAAAAFcswhpHypfaIQ=" + }, + "model": { + "$ref": "AAAAAAFbHGnq5qGWd3A=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 831, + "top": 183, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswhpHypfaIQ=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswhpICphrpM=", + "_parent": { + "$ref": "AAAAAAFcswhpHypfaIQ=" + }, + "model": { + "$ref": "AAAAAAFbHGnq5qGWd3A=" + }, + "visible": null, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 846, + "top": 183, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFcswhpHypfaIQ=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswhpICpieS0=", + "_parent": { + "$ref": "AAAAAAFcswhpHypfaIQ=" + }, + "model": { + "$ref": "AAAAAAFbHGnq5qGWd3A=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 802, + "top": 184, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswhpHypfaIQ=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "head": { + "$ref": "AAAAAAFcswhpISqfnt8=" + }, + "tail": { + "$ref": "AAAAAAFcswhpISqprwk=" + }, + "lineStyle": 1, + "points": "818:157;817:223", + "stereotypeDisplay": "label", + "showVisibility": true, + "showProperty": true, + "nameLabel": { + "$ref": "AAAAAAFcswhpHypgncQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFcswhpICphrpM=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswhpICpieS0=" + } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAFcswhpICpj6qk=", + "_parent": { + "$ref": "AAAAAAFbHDVYsl1GUQo=" + }, + "model": { + "$ref": "AAAAAAFbHGnvtqGnGyg=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswhpICpknBE=", + "_parent": { + "$ref": "AAAAAAFcswhpICpj6qk=" + }, + "model": { + "$ref": "AAAAAAFbHGnvtqGnGyg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 965, + "top": 187, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswhpICpj6qk=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswhpICplHfg=", + "_parent": { + "$ref": "AAAAAAFcswhpICpj6qk=" + }, + "model": { + "$ref": "AAAAAAFbHGnvtqGnGyg=" + }, + "visible": null, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 979, + "top": 191, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFcswhpICpj6qk=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswhpICpmMPg=", + "_parent": { + "$ref": "AAAAAAFcswhpICpj6qk=" + }, + "model": { + "$ref": "AAAAAAFbHGnvtqGnGyg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 936, + "top": 180, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswhpICpj6qk=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "head": { + "$ref": "AAAAAAFcswhpISqLa4s=" + }, + "tail": { + "$ref": "AAAAAAFcswhpISqVrfU=" + }, + "lineStyle": 1, + "points": "961:157;942:223", + "stereotypeDisplay": "label", + "showVisibility": true, + "showProperty": true, + "nameLabel": { + "$ref": "AAAAAAFcswhpICpknBE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFcswhpICplHfg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswhpICpmMPg=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFcswhpISqVrfU=", + "_parent": { + "$ref": "AAAAAAFbHDVYsl1GUQo=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswhpISqWYto=", + "_parent": { + "$ref": "AAAAAAFcswhpISqVrfU=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqXk7s=", + "_parent": { + "$ref": "AAAAAAFcswhpISqWYto=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 2, + "top": -796, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqYB1s=", + "_parent": { + "$ref": "AAAAAAFcswhpISqWYto=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 901, + "top": 119, + "width": 136, + "height": 13, + "autoResize": false, + "underline": false, + "text": "resizeAndMergeCaffe", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqZjxQ=", + "_parent": { + "$ref": "AAAAAAFcswhpISqWYto=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 2, + "top": -796, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqagFY=", + "_parent": { + "$ref": "AAAAAAFcswhpISqWYto=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 2, + "top": -796, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 896, + "top": 112, + "width": 146, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswhpISqXk7s=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswhpISqYB1s=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswhpISqZjxQ=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswhpISqagFY=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFcswhpISqb7PE=", + "_parent": { + "$ref": "AAAAAAFcswhpISqVrfU=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 896, + "top": 137, + "width": 146, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFcswhpISqc8EI=", + "_parent": { + "$ref": "AAAAAAFcswhpISqVrfU=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 896, + "top": 147, + "width": 146, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFcswhpISqdXCo=", + "_parent": { + "$ref": "AAAAAAFcswhpISqVrfU=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -83, + "top": -262, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFcswhpISqeBic=", + "_parent": { + "$ref": "AAAAAAFcswhpISqVrfU=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -83, + "top": -262, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHDZmRV12Zhg=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 896, + "top": 112, + "width": 146, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswhpISqWYto=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFcswhpISqb7PE=" + }, + "operationCompartment": { + "$ref": "AAAAAAFcswhpISqc8EI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFcswhpISqdXCo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFcswhpISqeBic=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFcswhpISqLa4s=", + "_parent": { + "$ref": "AAAAAAFbHDVYsl1GUQo=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswhpISqMNYQ=", + "_parent": { + "$ref": "AAAAAAFcswhpISqLa4s=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqNlfI=", + "_parent": { + "$ref": "AAAAAAFcswhpISqMNYQ=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 266, + "top": -548, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqOlaY=", + "_parent": { + "$ref": "AAAAAAFcswhpISqMNYQ=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 869, + "top": 231, + "width": 134, + "height": 13, + "autoResize": false, + "underline": false, + "text": "resizeAndMergeBase", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqPOFg=", + "_parent": { + "$ref": "AAAAAAFcswhpISqMNYQ=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 266, + "top": -548, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqQtYk=", + "_parent": { + "$ref": "AAAAAAFcswhpISqMNYQ=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 266, + "top": -548, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 864, + "top": 224, + "width": 144, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswhpISqNlfI=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswhpISqOlaY=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswhpISqPOFg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswhpISqQtYk=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFcswhpISqR/mc=", + "_parent": { + "$ref": "AAAAAAFcswhpISqLa4s=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 864, + "top": 249, + "width": 144, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFcswhpISqSyAs=", + "_parent": { + "$ref": "AAAAAAFcswhpISqLa4s=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 864, + "top": 259, + "width": 144, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFcswhpISqT4zI=", + "_parent": { + "$ref": "AAAAAAFcswhpISqLa4s=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 45, + "top": -126, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFcswhpISqUlZc=", + "_parent": { + "$ref": "AAAAAAFcswhpISqLa4s=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 45, + "top": -126, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHDZmRV12Zhg=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 864, + "top": 224, + "width": 144, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswhpISqMNYQ=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFcswhpISqR/mc=" + }, + "operationCompartment": { + "$ref": "AAAAAAFcswhpISqSyAs=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFcswhpISqT4zI=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFcswhpISqUlZc=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFcswhpISqfnt8=", + "_parent": { + "$ref": "AAAAAAFbHDVYsl1GUQo=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswhpISqgjTg=", + "_parent": { + "$ref": "AAAAAAFcswhpISqfnt8=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqh4GQ=", + "_parent": { + "$ref": "AAAAAAFcswhpISqgjTg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 710, + "top": -796, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqiL28=", + "_parent": { + "$ref": "AAAAAAFcswhpISqgjTg=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 789, + "top": 231, + "width": 57, + "height": 13, + "autoResize": false, + "underline": false, + "text": "nmsBase", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqjAKI=", + "_parent": { + "$ref": "AAAAAAFcswhpISqgjTg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 710, + "top": -796, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqkUKE=", + "_parent": { + "$ref": "AAAAAAFcswhpISqgjTg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 710, + "top": -796, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 224, + "width": 67, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswhpISqh4GQ=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswhpISqiL28=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswhpISqjAKI=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswhpISqkUKE=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFcswhpISql4lg=", + "_parent": { + "$ref": "AAAAAAFcswhpISqfnt8=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 249, + "width": 67, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFcswhpISqmmdg=", + "_parent": { + "$ref": "AAAAAAFcswhpISqfnt8=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 259, + "width": 67, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFcswhpISqnqpM=", + "_parent": { + "$ref": "AAAAAAFcswhpISqfnt8=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 333, + "top": -246, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFcswhpISqouF8=", + "_parent": { + "$ref": "AAAAAAFcswhpISqfnt8=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 333, + "top": -246, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHDZmRV12Zhg=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 784, + "top": 224, + "width": 67, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswhpISqgjTg=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFcswhpISql4lg=" + }, + "operationCompartment": { + "$ref": "AAAAAAFcswhpISqmmdg=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFcswhpISqnqpM=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFcswhpISqouF8=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFcswhpISqprwk=", + "_parent": { + "$ref": "AAAAAAFbHDVYsl1GUQo=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswhpISqqVXg=", + "_parent": { + "$ref": "AAAAAAFcswhpISqprwk=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpISqrj5w=", + "_parent": { + "$ref": "AAAAAAFcswhpISqqVXg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -62, + "top": -1068, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpIiqsXfc=", + "_parent": { + "$ref": "AAAAAAFcswhpISqqVXg=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 789, + "top": 119, + "width": 59, + "height": 13, + "autoResize": false, + "underline": false, + "text": "nmsCaffe", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpIiqtLX0=", + "_parent": { + "$ref": "AAAAAAFcswhpISqqVXg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -62, + "top": -1068, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswhpIiquJUA=", + "_parent": { + "$ref": "AAAAAAFcswhpISqqVXg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -62, + "top": -1068, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 112, + "width": 69, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswhpISqrj5w=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswhpIiqsXfc=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswhpIiqtLX0=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswhpIiquJUA=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFcswhpIiqv2Bo=", + "_parent": { + "$ref": "AAAAAAFcswhpISqprwk=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 137, + "width": 69, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFcswhpIiqwekI=", + "_parent": { + "$ref": "AAAAAAFcswhpISqprwk=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 147, + "width": 69, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFcswhpIiqxRAs=", + "_parent": { + "$ref": "AAAAAAFcswhpISqprwk=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -191, + "top": -390, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFcswhpIiqyBM8=", + "_parent": { + "$ref": "AAAAAAFcswhpISqprwk=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -191, + "top": -390, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHDZmRV12Zhg=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 784, + "top": 112, + "width": 69, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswhpISqqVXg=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFcswhpIiqv2Bo=" + }, + "operationCompartment": { + "$ref": "AAAAAAFcswhpIiqwekI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFcswhpIiqxRAs=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFcswhpIiqyBM8=" + } } ] }, @@ -24535,49 +26171,6 @@ }, "name": "pose", "ownedElements": [ - { - "_type": "UMLClass", - "_id": "AAAAAAFbHFyW9ZXECgk=", - "_parent": { - "$ref": "AAAAAAFbHFxkJJWoCjs=" - }, - "name": "bodyPartConnectorBase", - "ownedElements": [ - { - "_type": "UMLDependency", - "_id": "AAAAAAFbHGLjx6FvWeI=", - "_parent": { - "$ref": "AAAAAAFbHFyW9ZXECgk=" - }, - "source": { - "$ref": "AAAAAAFbHFyW9ZXECgk=" - }, - "target": { - "$ref": "AAAAAAFbHGJ4XKFAf+Y=" - }, - "visibility": "public" - }, - { - "_type": "UMLDependency", - "_id": "AAAAAAFbHGMlpKGFzvA=", - "_parent": { - "$ref": "AAAAAAFbHFyW9ZXECgk=" - }, - "source": { - "$ref": "AAAAAAFbHFyW9ZXECgk=" - }, - "target": { - "$ref": "AAAAAAFbHFyptZbjGLg=" - }, - "visibility": "public" - } - ], - "visibility": "public", - "isAbstract": false, - "isFinalSpecialization": false, - "isLeaf": false, - "isActive": false - }, { "_type": "UMLClass", "_id": "AAAAAAFbHFyaDZXtVSk=", @@ -24750,202 +26343,13 @@ "isLeaf": false, "isActive": false }, - { - "_type": "UMLClass", - "_id": "AAAAAAFbHFytbZcMIfs=", - "_parent": { - "$ref": "AAAAAAFbHFxkJJWoCjs=" - }, - "name": "bodyPartConnectorCaffe", - "ownedElements": [ - { - "_type": "UMLDependency", - "_id": "AAAAAAFbHGwQTKLXKW4=", - "_parent": { - "$ref": "AAAAAAFbHFytbZcMIfs=" - }, - "source": { - "$ref": "AAAAAAFbHFytbZcMIfs=" - }, - "target": { - "$ref": "AAAAAAFbHFyW9ZXECgk=" - }, - "visibility": "public" - }, - { - "_type": "UMLDependency", - "_id": "AAAAAAFbHGwVTKL3GS0=", - "_parent": { - "$ref": "AAAAAAFbHFytbZcMIfs=" - }, - "source": { - "$ref": "AAAAAAFbHFytbZcMIfs=" - }, - "target": { - "$ref": "AAAAAAFbHFyptZbjGLg=" - }, - "visibility": "public" - }, - { - "_type": "UMLDependency", - "_id": "AAAAAAFbHGxt3qOc9Cg=", - "_parent": { - "$ref": "AAAAAAFbHFytbZcMIfs=" - }, - "source": { - "$ref": "AAAAAAFbHFytbZcMIfs=" - }, - "target": { - "$ref": "AAAAAAFbHFyjIpa6NmI=" - }, - "visibility": "public" - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFbHHIVkrSVUkA=", - "_parent": { - "$ref": "AAAAAAFbHFytbZcMIfs=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFbHHIVkrSW4DQ=", - "_parent": { - "$ref": "AAAAAAFbHHIVkrSVUkA=" - }, - "reference": { - "$ref": "AAAAAAFbHFytbZcMIfs=" - }, - "visibility": "public", - "navigable": true, - "aggregation": "none", - "isReadOnly": false, - "isOrdered": false, - "isUnique": false, - "isDerived": false, - "isID": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFbHHIVkrSXJ+E=", - "_parent": { - "$ref": "AAAAAAFbHHIVkrSVUkA=" - }, - "reference": { - "$ref": "AAAAAAFbHFzB0pgy9QE=" - }, - "visibility": "public", - "navigable": true, - "aggregation": "composite", - "isReadOnly": false, - "isOrdered": false, - "isUnique": false, - "isDerived": false, - "isID": false - }, - "visibility": "public", - "isDerived": false - } - ], - "visibility": "public", - "isAbstract": false, - "isFinalSpecialization": false, - "isLeaf": false, - "isActive": false - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFbHFyvbZc1D+I=", - "_parent": { - "$ref": "AAAAAAFbHFxkJJWoCjs=" - }, - "name": "resizeAndMergeBase", - "visibility": "public", - "isAbstract": false, - "isFinalSpecialization": false, - "isLeaf": false, - "isActive": false - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFbHFy4FZeOtro=", - "_parent": { - "$ref": "AAAAAAFbHFxkJJWoCjs=" - }, - "name": "resizeAndMergeCaffe", - "ownedElements": [ - { - "_type": "UMLDependency", - "_id": "AAAAAAFbHGnvtqGnGyg=", - "_parent": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "source": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "target": { - "$ref": "AAAAAAFbHFyvbZc1D+I=" - }, - "visibility": "public" - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFbHHIBi7QWc3M=", - "_parent": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFbHHIBi7QXMuA=", - "_parent": { - "$ref": "AAAAAAFbHHIBi7QWc3M=" - }, - "reference": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "visibility": "public", - "navigable": true, - "aggregation": "none", - "isReadOnly": false, - "isOrdered": false, - "isUnique": false, - "isDerived": false, - "isID": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFbHHIBi7QYUYc=", - "_parent": { - "$ref": "AAAAAAFbHHIBi7QWc3M=" - }, - "reference": { - "$ref": "AAAAAAFbHFzB0pgy9QE=" - }, - "visibility": "public", - "navigable": true, - "aggregation": "composite", - "isReadOnly": false, - "isOrdered": false, - "isUnique": false, - "isDerived": false, - "isID": false - }, - "visibility": "public", - "isDerived": false - } - ], - "visibility": "public", - "isAbstract": false, - "isFinalSpecialization": false, - "isLeaf": false, - "isActive": false - }, { "_type": "UMLClass", "_id": "AAAAAAFbHFzELZhbldE=", "_parent": { "$ref": "AAAAAAFbHFxkJJWoCjs=" }, - "name": "poseRenderGpu", + "name": "renderPose", "visibility": "public", "isAbstract": false, "isFinalSpecialization": false, @@ -25260,11 +26664,41 @@ }, { "_type": "UMLClass", - "_id": "AAAAAAFbHFy7rZe3LU0=", + "_id": "AAAAAAFbHFyW9ZXECgk=", "_parent": { "$ref": "AAAAAAFbHFxkJJWoCjs=" }, - "name": "nmsBase", + "name": "bodyPartConnectorBase", + "ownedElements": [ + { + "_type": "UMLDependency", + "_id": "AAAAAAFbHGLjx6FvWeI=", + "_parent": { + "$ref": "AAAAAAFbHFyW9ZXECgk=" + }, + "source": { + "$ref": "AAAAAAFbHFyW9ZXECgk=" + }, + "target": { + "$ref": "AAAAAAFbHGJ4XKFAf+Y=" + }, + "visibility": "public" + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAFbHGMlpKGFzvA=", + "_parent": { + "$ref": "AAAAAAFbHFyW9ZXECgk=" + }, + "source": { + "$ref": "AAAAAAFbHFyW9ZXECgk=" + }, + "target": { + "$ref": "AAAAAAFbHFyptZbjGLg=" + }, + "visibility": "public" + } + ], "visibility": "public", "isAbstract": false, "isFinalSpecialization": false, @@ -25273,40 +26707,68 @@ }, { "_type": "UMLClass", - "_id": "AAAAAAFbHFy95Zfg+a8=", + "_id": "AAAAAAFbHFytbZcMIfs=", "_parent": { "$ref": "AAAAAAFbHFxkJJWoCjs=" }, - "name": "nmsCaffe", + "name": "bodyPartConnectorCaffe", "ownedElements": [ { "_type": "UMLDependency", - "_id": "AAAAAAFbHGnq5qGWd3A=", + "_id": "AAAAAAFbHGwQTKLXKW4=", "_parent": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" + "$ref": "AAAAAAFbHFytbZcMIfs=" }, "source": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" + "$ref": "AAAAAAFbHFytbZcMIfs=" }, "target": { - "$ref": "AAAAAAFbHFy7rZe3LU0=" + "$ref": "AAAAAAFbHFyW9ZXECgk=" + }, + "visibility": "public" + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAFbHGwVTKL3GS0=", + "_parent": { + "$ref": "AAAAAAFbHFytbZcMIfs=" + }, + "source": { + "$ref": "AAAAAAFbHFytbZcMIfs=" + }, + "target": { + "$ref": "AAAAAAFbHFyptZbjGLg=" + }, + "visibility": "public" + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAFbHGxt3qOc9Cg=", + "_parent": { + "$ref": "AAAAAAFbHFytbZcMIfs=" + }, + "source": { + "$ref": "AAAAAAFbHFytbZcMIfs=" + }, + "target": { + "$ref": "AAAAAAFbHFyjIpa6NmI=" }, "visibility": "public" }, { "_type": "UMLAssociation", - "_id": "AAAAAAFbHHH8ArOmRco=", + "_id": "AAAAAAFbHHIVkrSVUkA=", "_parent": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" + "$ref": "AAAAAAFbHFytbZcMIfs=" }, "end1": { "_type": "UMLAssociationEnd", - "_id": "AAAAAAFbHHH8ArOnTL8=", + "_id": "AAAAAAFbHHIVkrSW4DQ=", "_parent": { - "$ref": "AAAAAAFbHHH8ArOmRco=" + "$ref": "AAAAAAFbHHIVkrSVUkA=" }, "reference": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" + "$ref": "AAAAAAFbHFytbZcMIfs=" }, "visibility": "public", "navigable": true, @@ -25319,9 +26781,9 @@ }, "end2": { "_type": "UMLAssociationEnd", - "_id": "AAAAAAFbHHH8ArOo1Sw=", + "_id": "AAAAAAFbHHIVkrSXJ+E=", "_parent": { - "$ref": "AAAAAAFbHHH8ArOmRco=" + "$ref": "AAAAAAFbHHIVkrSVUkA=" }, "reference": { "$ref": "AAAAAAFbHFzB0pgy9QE=" @@ -25415,6 +26877,19 @@ "isFinalSpecialization": false, "isLeaf": false, "isActive": false + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFcswXRoLSckR0=", + "_parent": { + "$ref": "AAAAAAFbHGJipqEm58o=" + }, + "name": "rectangle.hpp", + "visibility": "public", + "isAbstract": false, + "isFinalSpecialization": false, + "isLeaf": false, + "isActive": false } ], "visibility": "public" @@ -25620,12 +27095,6 @@ { "$ref": "AAAAAAFbHFytbpcOd/U=" }, - { - "$ref": "AAAAAAFbHFyvbZc3RwA=" - }, - { - "$ref": "AAAAAAFbHFy4FZeQTuQ=" - }, { "$ref": "AAAAAAFbHFzELphdmCE=" }, @@ -25637,12 +27106,6 @@ }, { "$ref": "AAAAAAFbHFzK5piG7DA=" - }, - { - "$ref": "AAAAAAFbHFy7rZe5yb0=" - }, - { - "$ref": "AAAAAAFbHFy95Zfi54c=" } ], "visible": true, @@ -27706,588 +29169,6 @@ "$ref": "AAAAAAFbHFytb5cXWA4=" } }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFbHFyvbZc3RwA=", - "_parent": { - "$ref": "AAAAAAFbHDdYEV2Qawk=" - }, - "model": { - "$ref": "AAAAAAFbHFyvbZc1D+I=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFbHFyvbZc4C3A=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc3RwA=" - }, - "model": { - "$ref": "AAAAAAFbHFyvbZc1D+I=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFbHFyvbZc5kUI=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc4C3A=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -656, - "top": -200, - "width": 0, - "height": 13, - "autoResize": false, - "underline": false, - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFyvbZc6THM=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc4C3A=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;1", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 229, - "top": 567, - "width": 134, - "height": 13, - "autoResize": false, - "underline": false, - "text": "resizeAndMergeBase", - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFyvbZc7p48=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc4C3A=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -656, - "top": -200, - "width": 72, - "height": 13, - "autoResize": false, - "underline": false, - "text": "(from pose)", - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFyvbZc8l9I=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc4C3A=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -656, - "top": -200, - "width": 0, - "height": 13, - "autoResize": false, - "underline": false, - "horizontalAlignment": 1, - "verticalAlignment": 5, - "wordWrap": false - } - ], - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 224, - "top": 560, - "width": 144, - "height": 25, - "autoResize": false, - "stereotypeLabel": { - "$ref": "AAAAAAFbHFyvbZc5kUI=" - }, - "nameLabel": { - "$ref": "AAAAAAFbHFyvbZc6THM=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFbHFyvbZc7p48=" - }, - "propertyLabel": { - "$ref": "AAAAAAFbHFyvbZc8l9I=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFbHFyvbpc9Q/A=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc3RwA=" - }, - "model": { - "$ref": "AAAAAAFbHFyvbZc1D+I=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 224, - "top": 585, - "width": 144, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFbHFyvbpc+c/o=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc3RwA=" - }, - "model": { - "$ref": "AAAAAAFbHFyvbZc1D+I=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 224, - "top": 595, - "width": 144, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFbHFyvbpc/wXI=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc3RwA=" - }, - "model": { - "$ref": "AAAAAAFbHFyvbZc1D+I=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -536, - "top": -112, - "width": 10, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFbHFyvbpdAAyo=", - "_parent": { - "$ref": "AAAAAAFbHFyvbZc3RwA=" - }, - "model": { - "$ref": "AAAAAAFbHFyvbZc1D+I=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -536, - "top": -112, - "width": 10, - "height": 10, - "autoResize": false - } - ], - "containerView": { - "$ref": "AAAAAAFbHFxkJJWqH+E=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": true, - "containerExtending": false, - "left": 224, - "top": 560, - "width": 144, - "height": 45, - "autoResize": false, - "stereotypeDisplay": "label", - "showVisibility": true, - "showNamespace": false, - "showProperty": true, - "showType": true, - "nameCompartment": { - "$ref": "AAAAAAFbHFyvbZc4C3A=" - }, - "wordWrap": false, - "suppressAttributes": false, - "suppressOperations": false, - "suppressReceptions": true, - "showMultiplicity": true, - "showOperationSignature": true, - "attributeCompartment": { - "$ref": "AAAAAAFbHFyvbpc9Q/A=" - }, - "operationCompartment": { - "$ref": "AAAAAAFbHFyvbpc+c/o=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFbHFyvbpc/wXI=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFbHFyvbpdAAyo=" - } - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFbHFy4FZeQTuQ=", - "_parent": { - "$ref": "AAAAAAFbHDdYEV2Qawk=" - }, - "model": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFbHFy4FpeRMeY=", - "_parent": { - "$ref": "AAAAAAFbHFy4FZeQTuQ=" - }, - "model": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy4FpeSFbU=", - "_parent": { - "$ref": "AAAAAAFbHFy4FpeRMeY=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -1000, - "top": -416, - "width": 0, - "height": 13, - "autoResize": false, - "underline": false, - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy4FpeTkoY=", - "_parent": { - "$ref": "AAAAAAFbHFy4FpeRMeY=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;1", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 229, - "top": 463, - "width": 136, - "height": 13, - "autoResize": false, - "underline": false, - "text": "resizeAndMergeCaffe", - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy4FpeUTNc=", - "_parent": { - "$ref": "AAAAAAFbHFy4FpeRMeY=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -1000, - "top": -416, - "width": 72, - "height": 13, - "autoResize": false, - "underline": false, - "text": "(from pose)", - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy4FpeVlXs=", - "_parent": { - "$ref": "AAAAAAFbHFy4FpeRMeY=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -1000, - "top": -416, - "width": 0, - "height": 13, - "autoResize": false, - "underline": false, - "horizontalAlignment": 1, - "verticalAlignment": 5, - "wordWrap": false - } - ], - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 224, - "top": 456, - "width": 146, - "height": 25, - "autoResize": false, - "stereotypeLabel": { - "$ref": "AAAAAAFbHFy4FpeSFbU=" - }, - "nameLabel": { - "$ref": "AAAAAAFbHFy4FpeTkoY=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFbHFy4FpeUTNc=" - }, - "propertyLabel": { - "$ref": "AAAAAAFbHFy4FpeVlXs=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFbHFy4FpeWkb8=", - "_parent": { - "$ref": "AAAAAAFbHFy4FZeQTuQ=" - }, - "model": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 224, - "top": 481, - "width": 146, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFbHFy4FpeXKZk=", - "_parent": { - "$ref": "AAAAAAFbHFy4FZeQTuQ=" - }, - "model": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 224, - "top": 491, - "width": 146, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFbHFy4FpeYWpw=", - "_parent": { - "$ref": "AAAAAAFbHFy4FZeQTuQ=" - }, - "model": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -712, - "top": -224, - "width": 10, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFbHFy4F5eZQQc=", - "_parent": { - "$ref": "AAAAAAFbHFy4FZeQTuQ=" - }, - "model": { - "$ref": "AAAAAAFbHFy4FZeOtro=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -712, - "top": -224, - "width": 10, - "height": 10, - "autoResize": false - } - ], - "containerView": { - "$ref": "AAAAAAFbHFxkJJWqH+E=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": true, - "containerExtending": false, - "left": 224, - "top": 456, - "width": 146, - "height": 45, - "autoResize": false, - "stereotypeDisplay": "label", - "showVisibility": true, - "showNamespace": false, - "showProperty": true, - "showType": true, - "nameCompartment": { - "$ref": "AAAAAAFbHFy4FpeRMeY=" - }, - "wordWrap": false, - "suppressAttributes": false, - "suppressOperations": false, - "suppressReceptions": true, - "showMultiplicity": true, - "showOperationSignature": true, - "attributeCompartment": { - "$ref": "AAAAAAFbHFy4FpeWkb8=" - }, - "operationCompartment": { - "$ref": "AAAAAAFbHFy4FpeXKZk=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFbHFy4FpeYWpw=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFbHFy4F5eZQQc=" - } - }, { "_type": "UMLClassView", "_id": "AAAAAAFbHFzELphdmCE=", @@ -28354,7 +29235,7 @@ "height": 13, "autoResize": false, "underline": false, - "text": "poseRenderGpu", + "text": "renderPose", "horizontalAlignment": 2, "verticalAlignment": 5, "wordWrap": false @@ -28614,8 +29495,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": -1152, - "top": -1072, + "left": -1712, + "top": -1040, "width": 0, "height": 13, "autoResize": false, @@ -28639,8 +29520,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 413, - "top": 311, + "left": 133, + "top": 327, "width": 120, "height": 13, "autoResize": false, @@ -28665,8 +29546,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": -1152, - "top": -1072, + "left": -1712, + "top": -1040, "width": 72, "height": 13, "autoResize": false, @@ -28691,8 +29572,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": -1152, - "top": -1072, + "left": -1712, + "top": -1040, "width": 0, "height": 13, "autoResize": false, @@ -28711,8 +29592,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 408, - "top": 304, + "left": 128, + "top": 320, "width": 130, "height": 25, "autoResize": false, @@ -28747,8 +29628,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 408, - "top": 329, + "left": 128, + "top": 345, "width": 130, "height": 10, "autoResize": false @@ -28771,8 +29652,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 408, - "top": 339, + "left": 128, + "top": 355, "width": 130, "height": 10, "autoResize": false @@ -28795,8 +29676,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": -600, - "top": -576, + "left": -880, + "top": -560, "width": 10, "height": 10, "autoResize": false @@ -28819,8 +29700,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": -600, - "top": -576, + "left": -880, + "top": -560, "width": 10, "height": 10, "autoResize": false @@ -28838,8 +29719,8 @@ "showShadow": true, "containerChangeable": true, "containerExtending": false, - "left": 408, - "top": 304, + "left": 128, + "top": 320, "width": 130, "height": 45, "autoResize": false, @@ -29452,588 +30333,6 @@ "$ref": "AAAAAAFbHFzK55iPcVc=" } }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFbHFy7rZe5yb0=", - "_parent": { - "$ref": "AAAAAAFbHDdYEV2Qawk=" - }, - "model": { - "$ref": "AAAAAAFbHFy7rZe3LU0=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFbHFy7rpe6V8M=", - "_parent": { - "$ref": "AAAAAAFbHFy7rZe5yb0=" - }, - "model": { - "$ref": "AAAAAAFbHFy7rZe3LU0=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy7rpe70Ts=", - "_parent": { - "$ref": "AAAAAAFbHFy7rpe6V8M=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -440, - "top": -472, - "width": 0, - "height": 13, - "autoResize": false, - "underline": false, - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy7rpe8JrM=", - "_parent": { - "$ref": "AAAAAAFbHFy7rpe6V8M=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;1", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 73, - "top": 567, - "width": 57, - "height": 13, - "autoResize": false, - "underline": false, - "text": "nmsBase", - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy7rpe9fX8=", - "_parent": { - "$ref": "AAAAAAFbHFy7rpe6V8M=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -440, - "top": -472, - "width": 72, - "height": 13, - "autoResize": false, - "underline": false, - "text": "(from pose)", - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy7rpe+Aic=", - "_parent": { - "$ref": "AAAAAAFbHFy7rpe6V8M=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -440, - "top": -472, - "width": 0, - "height": 13, - "autoResize": false, - "underline": false, - "horizontalAlignment": 1, - "verticalAlignment": 5, - "wordWrap": false - } - ], - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 68, - "top": 560, - "width": 67, - "height": 25, - "autoResize": false, - "stereotypeLabel": { - "$ref": "AAAAAAFbHFy7rpe70Ts=" - }, - "nameLabel": { - "$ref": "AAAAAAFbHFy7rpe8JrM=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFbHFy7rpe9fX8=" - }, - "propertyLabel": { - "$ref": "AAAAAAFbHFy7rpe+Aic=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFbHFy7rpe/fWU=", - "_parent": { - "$ref": "AAAAAAFbHFy7rZe5yb0=" - }, - "model": { - "$ref": "AAAAAAFbHFy7rZe3LU0=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 68, - "top": 585, - "width": 67, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFbHFy7rpfAyfc=", - "_parent": { - "$ref": "AAAAAAFbHFy7rZe5yb0=" - }, - "model": { - "$ref": "AAAAAAFbHFy7rZe3LU0=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 68, - "top": 595, - "width": 67, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFbHFy7rpfBpkI=", - "_parent": { - "$ref": "AAAAAAFbHFy7rZe5yb0=" - }, - "model": { - "$ref": "AAAAAAFbHFy7rZe3LU0=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -400, - "top": -256, - "width": 10, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFbHFy7rpfC4aM=", - "_parent": { - "$ref": "AAAAAAFbHFy7rZe5yb0=" - }, - "model": { - "$ref": "AAAAAAFbHFy7rZe3LU0=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -400, - "top": -256, - "width": 10, - "height": 10, - "autoResize": false - } - ], - "containerView": { - "$ref": "AAAAAAFbHFxkJJWqH+E=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": true, - "containerExtending": false, - "left": 68, - "top": 560, - "width": 67, - "height": 45, - "autoResize": false, - "stereotypeDisplay": "label", - "showVisibility": true, - "showNamespace": false, - "showProperty": true, - "showType": true, - "nameCompartment": { - "$ref": "AAAAAAFbHFy7rpe6V8M=" - }, - "wordWrap": false, - "suppressAttributes": false, - "suppressOperations": false, - "suppressReceptions": true, - "showMultiplicity": true, - "showOperationSignature": true, - "attributeCompartment": { - "$ref": "AAAAAAFbHFy7rpe/fWU=" - }, - "operationCompartment": { - "$ref": "AAAAAAFbHFy7rpfAyfc=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFbHFy7rpfBpkI=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFbHFy7rpfC4aM=" - } - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFbHFy95Zfi54c=", - "_parent": { - "$ref": "AAAAAAFbHDdYEV2Qawk=" - }, - "model": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFbHFy95pfjA10=", - "_parent": { - "$ref": "AAAAAAFbHFy95Zfi54c=" - }, - "model": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy95pfk5rs=", - "_parent": { - "$ref": "AAAAAAFbHFy95pfjA10=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -1032, - "top": -768, - "width": 0, - "height": 13, - "autoResize": false, - "underline": false, - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy95pflDeI=", - "_parent": { - "$ref": "AAAAAAFbHFy95pfjA10=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;1", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 73, - "top": 463, - "width": 59, - "height": 13, - "autoResize": false, - "underline": false, - "text": "nmsCaffe", - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy95pfmtA4=", - "_parent": { - "$ref": "AAAAAAFbHFy95pfjA10=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -1032, - "top": -768, - "width": 72, - "height": 13, - "autoResize": false, - "underline": false, - "text": "(from pose)", - "horizontalAlignment": 2, - "verticalAlignment": 5, - "wordWrap": false - }, - { - "_type": "LabelView", - "_id": "AAAAAAFbHFy95pfnV80=", - "_parent": { - "$ref": "AAAAAAFbHFy95pfjA10=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -1032, - "top": -768, - "width": 0, - "height": 13, - "autoResize": false, - "underline": false, - "horizontalAlignment": 1, - "verticalAlignment": 5, - "wordWrap": false - } - ], - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 68, - "top": 456, - "width": 69, - "height": 25, - "autoResize": false, - "stereotypeLabel": { - "$ref": "AAAAAAFbHFy95pfk5rs=" - }, - "nameLabel": { - "$ref": "AAAAAAFbHFy95pflDeI=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFbHFy95pfmtA4=" - }, - "propertyLabel": { - "$ref": "AAAAAAFbHFy95pfnV80=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFbHFy95pfogx8=", - "_parent": { - "$ref": "AAAAAAFbHFy95Zfi54c=" - }, - "model": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 68, - "top": 481, - "width": 69, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFbHFy95pfpvIw=", - "_parent": { - "$ref": "AAAAAAFbHFy95Zfi54c=" - }, - "model": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": 68, - "top": 491, - "width": 69, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFbHFy95pfqAaA=", - "_parent": { - "$ref": "AAAAAAFbHFy95Zfi54c=" - }, - "model": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -744, - "top": -432, - "width": 10, - "height": 10, - "autoResize": false - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFbHFy95pfr/Ks=", - "_parent": { - "$ref": "AAAAAAFbHFy95Zfi54c=" - }, - "model": { - "$ref": "AAAAAAFbHFy95Zfg+a8=" - }, - "visible": false, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": false, - "containerExtending": false, - "left": -744, - "top": -432, - "width": 10, - "height": 10, - "autoResize": false - } - ], - "containerView": { - "$ref": "AAAAAAFbHFxkJJWqH+E=" - }, - "visible": true, - "enabled": true, - "lineColor": "#000000", - "fillColor": "#ffffff", - "fontColor": "#000000", - "font": "Arial;13;0", - "showShadow": true, - "containerChangeable": true, - "containerExtending": false, - "left": 68, - "top": 456, - "width": 69, - "height": 45, - "autoResize": false, - "stereotypeDisplay": "label", - "showVisibility": true, - "showNamespace": false, - "showProperty": true, - "showType": true, - "nameCompartment": { - "$ref": "AAAAAAFbHFy95pfjA10=" - }, - "wordWrap": false, - "suppressAttributes": false, - "suppressOperations": false, - "suppressReceptions": true, - "showMultiplicity": true, - "showOperationSignature": true, - "attributeCompartment": { - "$ref": "AAAAAAFbHFy95pfogx8=" - }, - "operationCompartment": { - "$ref": "AAAAAAFbHFy95pfpvIw=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFbHFy95pfqAaA=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFbHFy95pfr/Ks=" - } - }, { "_type": "UMLPackageView", "_id": "AAAAAAFbHGJip6EoNT0=", @@ -30069,8 +30368,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 448, - "top": -384, + "left": 384, + "top": -448, "width": 0, "height": 13, "autoResize": false, @@ -30094,9 +30393,9 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 501, - "top": 742, - "width": 191, + "left": 141, + "top": 710, + "width": 655, "height": 13, "autoResize": false, "underline": false, @@ -30120,8 +30419,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 448, - "top": -384, + "left": 384, + "top": -448, "width": 72, "height": 13, "autoResize": false, @@ -30146,8 +30445,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 448, - "top": -384, + "left": 384, + "top": -448, "width": 0, "height": 13, "autoResize": false, @@ -30166,9 +30465,9 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 496, - "top": 735, - "width": 201, + "left": 136, + "top": 703, + "width": 665, "height": 25, "autoResize": false, "stereotypeLabel": { @@ -30188,6 +30487,21 @@ "containedViews": [ { "$ref": "AAAAAAFbHGJ4XaFCtvY=" + }, + { + "$ref": "AAAAAAFcswZnYipVtjM=" + }, + { + "$ref": "AAAAAAFbHFyvbZc3RwA=" + }, + { + "$ref": "AAAAAAFbHFy4FZeQTuQ=" + }, + { + "$ref": "AAAAAAFbHFy7rZe5yb0=" + }, + { + "$ref": "AAAAAAFbHFy95Zfi54c=" } ], "visible": true, @@ -30199,9 +30513,9 @@ "showShadow": true, "containerChangeable": true, "containerExtending": false, - "left": 496, - "top": 720, - "width": 201, + "left": 136, + "top": 688, + "width": 665, "height": 160, "autoResize": false, "stereotypeDisplay": "label", @@ -30249,8 +30563,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 304, - "top": -336, + "left": 272, + "top": -384, "width": 0, "height": 13, "autoResize": false, @@ -30274,8 +30588,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 573, - "top": 799, + "left": 557, + "top": 775, "width": 61, "height": 13, "autoResize": false, @@ -30300,8 +30614,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 304, - "top": -336, + "left": 272, + "top": -384, "width": 72, "height": 13, "autoResize": false, @@ -30326,8 +30640,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 304, - "top": -336, + "left": 272, + "top": -384, "width": 0, "height": 13, "autoResize": false, @@ -30346,8 +30660,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 568, - "top": 792, + "left": 552, + "top": 768, "width": 71, "height": 25, "autoResize": false, @@ -30382,8 +30696,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 568, - "top": 817, + "left": 552, + "top": 793, "width": 71, "height": 10, "autoResize": false @@ -30406,8 +30720,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 568, - "top": 827, + "left": 552, + "top": 803, "width": 71, "height": 10, "autoResize": false @@ -30430,8 +30744,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 128, - "top": -160, + "left": 72, + "top": -184, "width": 10, "height": 10, "autoResize": false @@ -30454,8 +30768,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 128, - "top": -160, + "left": 72, + "top": -184, "width": 10, "height": 10, "autoResize": false @@ -30473,8 +30787,8 @@ "showShadow": true, "containerChangeable": true, "containerExtending": false, - "left": 568, - "top": 792, + "left": 552, + "top": 768, "width": 71, "height": 45, "autoResize": false, @@ -30533,8 +30847,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 672, - "top": 644, + "left": 663, + "top": 633, "width": 0, "height": 13, "autoResize": false, @@ -30567,8 +30881,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 686, - "top": 649, + "left": 677, + "top": 639, "width": 0, "height": 13, "autoResize": false, @@ -30601,8 +30915,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 643, - "top": 635, + "left": 636, + "top": 622, "width": 0, "height": 13, "autoResize": false, @@ -30634,7 +30948,7 @@ "$ref": "AAAAAAFbHFyW9pXGlaM=" }, "lineStyle": 1, - "points": "705:501;611:791", + "points": "704:501;596:767", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -30819,8 +31133,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 115, - "top": 523, + "left": 201, + "top": 770, "width": 0, "height": 13, "autoResize": false, @@ -30853,8 +31167,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 130, - "top": 523, + "left": 216, + "top": 769, "width": 0, "height": 13, "autoResize": false, @@ -30887,8 +31201,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 86, - "top": 524, + "left": 172, + "top": 773, "width": 0, "height": 13, "autoResize": false, @@ -30920,7 +31234,7 @@ "$ref": "AAAAAAFbHFy95Zfi54c=" }, "lineStyle": 1, - "points": "102:501;101:559", + "points": "187:765;188:791", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -30962,8 +31276,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 309, - "top": 523, + "left": 333, + "top": 771, "width": 0, "height": 13, "autoResize": false, @@ -30996,8 +31310,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 324, - "top": 523, + "left": 348, + "top": 771, "width": 0, "height": 13, "autoResize": false, @@ -31030,8 +31344,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 280, - "top": 524, + "left": 304, + "top": 772, "width": 0, "height": 13, "autoResize": false, @@ -31063,7 +31377,7 @@ "$ref": "AAAAAAFbHFy4FZeQTuQ=" }, "lineStyle": 1, - "points": "296:501;295:559", + "points": "320:765;319:791", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -31248,8 +31562,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 549, - "top": 634, + "left": 542, + "top": 622, "width": 0, "height": 13, "autoResize": false, @@ -31282,8 +31596,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 563, - "top": 628, + "left": 556, + "top": 617, "width": 0, "height": 13, "autoResize": false, @@ -31316,8 +31630,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 522, - "top": 645, + "left": 513, + "top": 633, "width": 0, "height": 13, "autoResize": false, @@ -31349,7 +31663,7 @@ "$ref": "AAAAAAFbHFzK5piG7DA=" }, "lineStyle": 1, - "points": "478:501;594:791", + "points": "478:501;578:767", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -31391,8 +31705,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 522, - "top": 645, + "left": 513, + "top": 633, "width": 0, "height": 13, "autoResize": false, @@ -31425,8 +31739,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 508, - "top": 651, + "left": 499, + "top": 638, "width": 0, "height": 13, "autoResize": false, @@ -31459,8 +31773,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 549, - "top": 634, + "left": 542, + "top": 622, "width": 0, "height": 13, "autoResize": false, @@ -31493,8 +31807,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 570, - "top": 766, + "left": 554, + "top": 741, "width": 0, "height": 13, "autoResize": false, @@ -31527,8 +31841,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 557, - "top": 769, + "left": 541, + "top": 744, "width": 0, "height": 13, "autoResize": false, @@ -31561,8 +31875,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 597, - "top": 760, + "left": 582, + "top": 736, "width": 0, "height": 13, "autoResize": false, @@ -31629,7 +31943,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 462, + "left": 461, "top": 531, "width": 0, "height": 13, @@ -31697,8 +32011,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": -496, - "top": -96, + "left": -320, + "top": -88, "width": 10, "height": 10, "autoResize": false @@ -31721,8 +32035,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": -496, - "top": -96, + "left": -320, + "top": -88, "width": 10, "height": 10, "autoResize": false @@ -31744,7 +32058,7 @@ "$ref": "AAAAAAFbHGJ4XaFCtvY=" }, "lineStyle": 1, - "points": "594:791;478:501", + "points": "578:767;478:501", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -34126,8 +34440,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 484, - "top": 396, + "left": 336, + "top": 390, "width": 0, "height": 13, "autoResize": false, @@ -34160,8 +34474,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 499, - "top": 396, + "left": 343, + "top": 377, "width": 0, "height": 13, "autoResize": false, @@ -34194,8 +34508,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 455, - "top": 395, + "left": 323, + "top": 417, "width": 0, "height": 13, "autoResize": false, @@ -34227,7 +34541,7 @@ "$ref": "AAAAAAFbHFzB0pg0a44=" }, "lineStyle": 1, - "points": "472:349;469:455", + "points": "239:365;422:455", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -34269,8 +34583,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 270, - "top": 386, + "left": 174, + "top": 535, "width": 0, "height": 13, "autoResize": false, @@ -34303,8 +34617,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 264, - "top": 372, + "left": 159, + "top": 535, "width": 0, "height": 13, "autoResize": false, @@ -34337,8 +34651,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 281, - "top": 413, + "left": 203, + "top": 536, "width": 0, "height": 13, "autoResize": false, @@ -34371,8 +34685,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 155, - "top": 434, + "left": 171, + "top": 686, "width": 0, "height": 13, "autoResize": false, @@ -34405,8 +34719,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 152, - "top": 421, + "left": 158, + "top": 684, "width": 0, "height": 13, "autoResize": false, @@ -34439,8 +34753,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 161, - "top": 461, + "left": 198, + "top": 691, "width": 0, "height": 13, "autoResize": false, @@ -34473,8 +34787,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 386, - "top": 339, + "left": 176, + "top": 384, "width": 0, "height": 13, "autoResize": false, @@ -34507,8 +34821,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 379, - "top": 327, + "left": 163, + "top": 386, "width": 0, "height": 13, "autoResize": false, @@ -34541,8 +34855,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 400, - "top": 362, + "left": 204, + "top": 380, "width": 0, "height": 13, "autoResize": false, @@ -34622,7 +34936,7 @@ "$ref": "AAAAAAFbHFy95Zfi54c=" }, "lineStyle": 1, - "points": "137:464;416:349", + "points": "186:719;192:365", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -34690,8 +35004,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 374, - "top": 384, + "left": 241, + "top": 540, "width": 0, "height": 13, "autoResize": false, @@ -34724,8 +35038,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 364, - "top": 373, + "left": 227, + "top": 545, "width": 0, "height": 13, "autoResize": false, @@ -34758,8 +35072,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 393, - "top": 407, + "left": 270, + "top": 531, "width": 0, "height": 13, "autoResize": false, @@ -34792,8 +35106,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 332, - "top": 420, + "left": 290, + "top": 692, "width": 0, "height": 13, "autoResize": false, @@ -34826,8 +35140,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 325, - "top": 409, + "left": 277, + "top": 694, "width": 0, "height": 13, "autoResize": false, @@ -34860,8 +35174,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 347, - "top": 444, + "left": 318, + "top": 688, "width": 0, "height": 13, "autoResize": false, @@ -34894,8 +35208,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 415, - "top": 348, + "left": 192, + "top": 388, "width": 0, "height": 13, "autoResize": false, @@ -34928,8 +35242,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 405, - "top": 340, + "left": 180, + "top": 394, "width": 0, "height": 13, "autoResize": false, @@ -34962,8 +35276,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 436, - "top": 366, + "left": 217, + "top": 375, "width": 0, "height": 13, "autoResize": false, @@ -34996,8 +35310,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 0, - "top": -104, + "left": 216, + "top": -96, "width": 10, "height": 10, "autoResize": false @@ -35020,8 +35334,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 0, - "top": -104, + "left": 216, + "top": -96, "width": 10, "height": 10, "autoResize": false @@ -35043,7 +35357,7 @@ "$ref": "AAAAAAFbHFy4FZeQTuQ=" }, "lineStyle": 1, - "points": "323:455;445:349", + "points": "313:719;199:365", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -35111,8 +35425,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 633, - "top": 361, + "left": 495, + "top": 369, "width": 0, "height": 13, "autoResize": false, @@ -35145,8 +35459,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 631, - "top": 376, + "left": 494, + "top": 384, "width": 0, "height": 13, "autoResize": false, @@ -35179,8 +35493,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 638, - "top": 332, + "left": 496, + "top": 340, "width": 0, "height": 13, "autoResize": false, @@ -35213,8 +35527,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 706, - "top": 373, + "left": 708, + "top": 384, "width": 0, "height": 13, "autoResize": false, @@ -35247,8 +35561,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 702, - "top": 386, + "left": 704, + "top": 397, "width": 0, "height": 13, "autoResize": false, @@ -35281,8 +35595,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 715, - "top": 347, + "left": 714, + "top": 357, "width": 0, "height": 13, "autoResize": false, @@ -35315,8 +35629,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 561, - "top": 349, + "left": 282, + "top": 356, "width": 0, "height": 13, "autoResize": false, @@ -35349,8 +35663,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 561, - "top": 363, + "left": 284, + "top": 370, "width": 0, "height": 13, "autoResize": false, @@ -35383,8 +35697,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 561, - "top": 322, + "left": 280, + "top": 328, "width": 0, "height": 13, "autoResize": false, @@ -35464,7 +35778,7 @@ "$ref": "AAAAAAFbHFytbpcOd/U=" }, "lineStyle": 1, - "points": "735:369;538:337", + "points": "735:377;258:346", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -35532,8 +35846,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 281, - "top": 413, + "left": 203, + "top": 536, "width": 0, "height": 13, "autoResize": false, @@ -35566,8 +35880,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 287, - "top": 427, + "left": 218, + "top": 536, "width": 0, "height": 13, "autoResize": false, @@ -35600,8 +35914,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 270, - "top": 386, + "left": 174, + "top": 535, "width": 0, "height": 13, "autoResize": false, @@ -35633,7 +35947,7 @@ "$ref": "AAAAAAFbHFzB0pg0a44=" }, "lineStyle": 1, - "points": "416:349;137:464", + "points": "192:365;186:719", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -35675,8 +35989,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 393, - "top": 407, + "left": 270, + "top": 531, "width": 0, "height": 13, "autoResize": false, @@ -35709,8 +36023,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 403, - "top": 418, + "left": 284, + "top": 526, "width": 0, "height": 13, "autoResize": false, @@ -35743,8 +36057,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 374, - "top": 384, + "left": 241, + "top": 540, "width": 0, "height": 13, "autoResize": false, @@ -35776,7 +36090,7 @@ "$ref": "AAAAAAFbHFzB0pg0a44=" }, "lineStyle": 1, - "points": "445:349;323:455", + "points": "199:365;313:719", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -35818,8 +36132,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 638, - "top": 332, + "left": 497, + "top": 340, "width": 0, "height": 13, "autoResize": false, @@ -35852,8 +36166,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 640, - "top": 317, + "left": 498, + "top": 325, "width": 0, "height": 13, "autoResize": false, @@ -35886,8 +36200,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 633, - "top": 361, + "left": 494, + "top": 369, "width": 0, "height": 13, "autoResize": false, @@ -35919,7 +36233,7 @@ "$ref": "AAAAAAFbHFzB0pg0a44=" }, "lineStyle": 1, - "points": "538:337;735:369", + "points": "258:346;735:377", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -35961,8 +36275,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 370, - "top": 304, + "left": 234, + "top": 287, "width": 0, "height": 13, "autoResize": false, @@ -35995,8 +36309,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 365, - "top": 318, + "left": 225, + "top": 275, "width": 0, "height": 13, "autoResize": false, @@ -36029,8 +36343,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 379, - "top": 275, + "left": 251, + "top": 312, "width": 0, "height": 13, "autoResize": false, @@ -36063,8 +36377,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 377, - "top": 306, + "left": 237, + "top": 285, "width": 0, "height": 13, "autoResize": false, @@ -36097,8 +36411,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 371, - "top": 318, + "left": 231, + "top": 273, "width": 0, "height": 13, "autoResize": false, @@ -36131,8 +36445,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 390, - "top": 281, + "left": 249, + "top": 310, "width": 0, "height": 13, "autoResize": false, @@ -36165,8 +36479,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 364, - "top": 302, + "left": 231, + "top": 290, "width": 0, "height": 13, "autoResize": false, @@ -36199,8 +36513,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 362, - "top": 315, + "left": 221, + "top": 280, "width": 0, "height": 13, "autoResize": false, @@ -36233,8 +36547,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 368, - "top": 274, + "left": 250, + "top": 309, "width": 0, "height": 13, "autoResize": false, @@ -36314,7 +36628,7 @@ "$ref": "AAAAAAFbHFzB0pg0a44=" }, "lineStyle": 1, - "points": "407:306;344:286", + "points": "225:319;261:293", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -36382,8 +36696,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 379, - "top": 275, + "left": 251, + "top": 312, "width": 0, "height": 13, "autoResize": false, @@ -36416,8 +36730,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 383, - "top": 261, + "left": 260, + "top": 324, "width": 0, "height": 13, "autoResize": false, @@ -36450,8 +36764,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 370, - "top": 304, + "left": 234, + "top": 287, "width": 0, "height": 13, "autoResize": false, @@ -36483,7 +36797,7 @@ "$ref": "AAAAAAFbHFy/tZgLHvQ=" }, "lineStyle": 1, - "points": "344:286;407:306", + "points": "261:293;225:319", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -36525,8 +36839,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 461, - "top": 528, + "left": 453, + "top": 516, "width": 0, "height": 13, "autoResize": false, @@ -36559,8 +36873,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 474, - "top": 521, + "left": 466, + "top": 509, "width": 0, "height": 13, "autoResize": false, @@ -36593,8 +36907,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 434, - "top": 543, + "left": 426, + "top": 531, "width": 0, "height": 13, "autoResize": false, @@ -36626,7 +36940,7 @@ "$ref": "AAAAAAFbHFy/tZgLHvQ=" }, "lineStyle": 1, - "points": "307:293;590:791", + "points": "307:293;574:767", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -36639,6 +36953,1461 @@ "propertyLabel": { "$ref": "AAAAAAFbHHSf7cWXNhk=" } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFcswZnYipVtjM=", + "_parent": { + "$ref": "AAAAAAFbHDdYEV2Qawk=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswZnYipWjY4=", + "_parent": { + "$ref": "AAAAAAFcswZnYipVtjM=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswZnYipXk+w=", + "_parent": { + "$ref": "AAAAAAFcswZnYipWjY4=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -244, + "top": 928, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswZnYipYmSQ=", + "_parent": { + "$ref": "AAAAAAFcswZnYipWjY4=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 637, + "top": 775, + "width": 88, + "height": 13, + "autoResize": false, + "underline": false, + "text": "rectangle.hpp", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswZnYipZ+XA=", + "_parent": { + "$ref": "AAAAAAFcswZnYipWjY4=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -244, + "top": 928, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswZnYipatsE=", + "_parent": { + "$ref": "AAAAAAFcswZnYipWjY4=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -244, + "top": 928, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 632, + "top": 768, + "width": 98, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswZnYipXk+w=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswZnYipYmSQ=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswZnYipZ+XA=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswZnYipatsE=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFcswZnYipbZ/0=", + "_parent": { + "$ref": "AAAAAAFcswZnYipVtjM=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 632, + "top": 793, + "width": 98, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFcswZnYipcT0k=", + "_parent": { + "$ref": "AAAAAAFcswZnYipVtjM=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 632, + "top": 803, + "width": 98, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFcswZnYypdFNI=", + "_parent": { + "$ref": "AAAAAAFcswZnYipVtjM=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -254, + "top": 724, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFcswZnYypeYYs=", + "_parent": { + "$ref": "AAAAAAFcswZnYipVtjM=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -254, + "top": 724, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHGJip6EoNT0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 632, + "top": 768, + "width": 98, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswZnYipWjY4=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFcswZnYipbZ/0=" + }, + "operationCompartment": { + "$ref": "AAAAAAFcswZnYipcT0k=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFcswZnYypdFNI=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFcswZnYypeYYs=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFbHFyvbZc3RwA=", + "_parent": { + "$ref": "AAAAAAFbHDdYEV2Qawk=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFbHFyvbZc4C3A=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc3RwA=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFbHFyvbZc5kUI=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc4C3A=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -616, + "top": 544, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFyvbZc6THM=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc4C3A=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 253, + "top": 799, + "width": 134, + "height": 13, + "autoResize": false, + "underline": false, + "text": "resizeAndMergeBase", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFyvbZc7p48=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc4C3A=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -616, + "top": 544, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFyvbZc8l9I=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc4C3A=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -616, + "top": 544, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 248, + "top": 792, + "width": 144, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFbHFyvbZc5kUI=" + }, + "nameLabel": { + "$ref": "AAAAAAFbHFyvbZc6THM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFbHFyvbZc7p48=" + }, + "propertyLabel": { + "$ref": "AAAAAAFbHFyvbZc8l9I=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFbHFyvbpc9Q/A=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc3RwA=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 248, + "top": 817, + "width": 144, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFbHFyvbpc+c/o=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc3RwA=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 248, + "top": 827, + "width": 144, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFbHFyvbpc/wXI=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc3RwA=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -520, + "top": 400, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFbHFyvbpdAAyo=", + "_parent": { + "$ref": "AAAAAAFbHFyvbZc3RwA=" + }, + "model": { + "$ref": "AAAAAAFbHFyvbZc1D+I=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -520, + "top": 400, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHGJip6EoNT0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 248, + "top": 792, + "width": 144, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFbHFyvbZc4C3A=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFbHFyvbpc9Q/A=" + }, + "operationCompartment": { + "$ref": "AAAAAAFbHFyvbpc+c/o=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFbHFyvbpc/wXI=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFbHFyvbpdAAyo=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFbHFy4FZeQTuQ=", + "_parent": { + "$ref": "AAAAAAFbHDdYEV2Qawk=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFbHFy4FpeRMeY=", + "_parent": { + "$ref": "AAAAAAFbHFy4FZeQTuQ=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy4FpeSFbU=", + "_parent": { + "$ref": "AAAAAAFbHFy4FpeRMeY=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -960, + "top": 392, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy4FpeTkoY=", + "_parent": { + "$ref": "AAAAAAFbHFy4FpeRMeY=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 253, + "top": 727, + "width": 136, + "height": 13, + "autoResize": false, + "underline": false, + "text": "resizeAndMergeCaffe", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy4FpeUTNc=", + "_parent": { + "$ref": "AAAAAAFbHFy4FpeRMeY=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -960, + "top": 392, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy4FpeVlXs=", + "_parent": { + "$ref": "AAAAAAFbHFy4FpeRMeY=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -960, + "top": 392, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 248, + "top": 720, + "width": 146, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFbHFy4FpeSFbU=" + }, + "nameLabel": { + "$ref": "AAAAAAFbHFy4FpeTkoY=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFbHFy4FpeUTNc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFbHFy4FpeVlXs=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFbHFy4FpeWkb8=", + "_parent": { + "$ref": "AAAAAAFbHFy4FZeQTuQ=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 248, + "top": 745, + "width": 146, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFbHFy4FpeXKZk=", + "_parent": { + "$ref": "AAAAAAFbHFy4FZeQTuQ=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 248, + "top": 755, + "width": 146, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFbHFy4FpeYWpw=", + "_parent": { + "$ref": "AAAAAAFbHFy4FZeQTuQ=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -696, + "top": 320, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFbHFy4F5eZQQc=", + "_parent": { + "$ref": "AAAAAAFbHFy4FZeQTuQ=" + }, + "model": { + "$ref": "AAAAAAFbHFy4FZeOtro=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -696, + "top": 320, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHGJip6EoNT0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 248, + "top": 720, + "width": 146, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFbHFy4FpeRMeY=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFbHFy4FpeWkb8=" + }, + "operationCompartment": { + "$ref": "AAAAAAFbHFy4FpeXKZk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFbHFy4FpeYWpw=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFbHFy4F5eZQQc=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFbHFy7rZe5yb0=", + "_parent": { + "$ref": "AAAAAAFbHDdYEV2Qawk=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFbHFy7rpe6V8M=", + "_parent": { + "$ref": "AAAAAAFbHFy7rZe5yb0=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy7rpe70Ts=", + "_parent": { + "$ref": "AAAAAAFbHFy7rpe6V8M=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -144, + "top": 288, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy7rpe8JrM=", + "_parent": { + "$ref": "AAAAAAFbHFy7rpe6V8M=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 161, + "top": 799, + "width": 57, + "height": 13, + "autoResize": false, + "underline": false, + "text": "nmsBase", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy7rpe9fX8=", + "_parent": { + "$ref": "AAAAAAFbHFy7rpe6V8M=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -144, + "top": 288, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy7rpe+Aic=", + "_parent": { + "$ref": "AAAAAAFbHFy7rpe6V8M=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -144, + "top": 288, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 156, + "top": 792, + "width": 67, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFbHFy7rpe70Ts=" + }, + "nameLabel": { + "$ref": "AAAAAAFbHFy7rpe8JrM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFbHFy7rpe9fX8=" + }, + "propertyLabel": { + "$ref": "AAAAAAFbHFy7rpe+Aic=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFbHFy7rpe/fWU=", + "_parent": { + "$ref": "AAAAAAFbHFy7rZe5yb0=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 156, + "top": 817, + "width": 67, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFbHFy7rpfAyfc=", + "_parent": { + "$ref": "AAAAAAFbHFy7rZe5yb0=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 156, + "top": 827, + "width": 67, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFbHFy7rpfBpkI=", + "_parent": { + "$ref": "AAAAAAFbHFy7rZe5yb0=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -192, + "top": 272, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFbHFy7rpfC4aM=", + "_parent": { + "$ref": "AAAAAAFbHFy7rZe5yb0=" + }, + "model": { + "$ref": "AAAAAAFbHFy7rZe3LU0=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -192, + "top": 272, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHGJip6EoNT0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 156, + "top": 792, + "width": 67, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFbHFy7rpe6V8M=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFbHFy7rpe/fWU=" + }, + "operationCompartment": { + "$ref": "AAAAAAFbHFy7rpfAyfc=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFbHFy7rpfBpkI=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFbHFy7rpfC4aM=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFbHFy95Zfi54c=", + "_parent": { + "$ref": "AAAAAAFbHDdYEV2Qawk=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFbHFy95pfjA10=", + "_parent": { + "$ref": "AAAAAAFbHFy95Zfi54c=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy95pfk5rs=", + "_parent": { + "$ref": "AAAAAAFbHFy95pfjA10=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -744, + "top": 56, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy95pflDeI=", + "_parent": { + "$ref": "AAAAAAFbHFy95pfjA10=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 157, + "top": 727, + "width": 59, + "height": 13, + "autoResize": false, + "underline": false, + "text": "nmsCaffe", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy95pfmtA4=", + "_parent": { + "$ref": "AAAAAAFbHFy95pfjA10=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -744, + "top": 56, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFbHFy95pfnV80=", + "_parent": { + "$ref": "AAAAAAFbHFy95pfjA10=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -744, + "top": 56, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 152, + "top": 720, + "width": 69, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFbHFy95pfk5rs=" + }, + "nameLabel": { + "$ref": "AAAAAAFbHFy95pflDeI=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFbHFy95pfmtA4=" + }, + "propertyLabel": { + "$ref": "AAAAAAFbHFy95pfnV80=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFbHFy95pfogx8=", + "_parent": { + "$ref": "AAAAAAFbHFy95Zfi54c=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 152, + "top": 745, + "width": 69, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFbHFy95pfpvIw=", + "_parent": { + "$ref": "AAAAAAFbHFy95Zfi54c=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 152, + "top": 755, + "width": 69, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFbHFy95pfqAaA=", + "_parent": { + "$ref": "AAAAAAFbHFy95Zfi54c=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -540, + "top": 128, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFbHFy95pfr/Ks=", + "_parent": { + "$ref": "AAAAAAFbHFy95Zfi54c=" + }, + "model": { + "$ref": "AAAAAAFbHFy95Zfg+a8=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -540, + "top": 128, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHGJip6EoNT0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 152, + "top": 720, + "width": 69, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFbHFy95pfjA10=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFbHFy95pfogx8=" + }, + "operationCompartment": { + "$ref": "AAAAAAFbHFy95pfpvIw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFbHFy95pfqAaA=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFbHFy95pfr/Ks=" + } } ] }, @@ -36979,6 +38748,77 @@ "isFinalSpecialization": false, "isLeaf": false, "isActive": false + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFcswO76bJsmb4=", + "_parent": { + "$ref": "AAAAAAFbHInAVcvEP2c=" + }, + "name": "keypoint", + "ownedElements": [ + { + "_type": "UMLDependency", + "_id": "AAAAAAFcswPht7KYSAs=", + "_parent": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "source": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "target": { + "$ref": "AAAAAAFbH1KdscyQvqc=" + }, + "visibility": "public" + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAFcswPmlrKpfyc=", + "_parent": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "source": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "target": { + "$ref": "AAAAAAFbH1K01c4qGfA=" + }, + "visibility": "public" + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAFcswRgfbSHUnE=", + "_parent": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "source": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "target": { + "$ref": "AAAAAAFbHGJ4XKFAf+Y=" + }, + "visibility": "public" + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAFcswYObrTJy5s=", + "_parent": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "source": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "target": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visibility": "public" + } + ], + "visibility": "public", + "isAbstract": false, + "isFinalSpecialization": false, + "isLeaf": false, + "isActive": false } ], "visibility": "public" @@ -37177,6 +39017,9 @@ }, { "$ref": "AAAAAAFbH1Kwgs3av4U=" + }, + { + "$ref": "AAAAAAFcswO767JuzTE=" } ], "visible": true, @@ -38402,7 +40245,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 1032, + "left": 904, "top": -208, "width": 0, "height": 13, @@ -38427,7 +40270,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 549, + "left": 485, "top": 159, "width": 46, "height": 13, @@ -38453,7 +40296,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 1032, + "left": 904, "top": -208, "width": 78, "height": 13, @@ -38479,7 +40322,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 1032, + "left": 904, "top": -208, "width": 0, "height": 13, @@ -38499,7 +40342,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 544, + "left": 480, "top": 152, "width": 56, "height": 25, @@ -38535,7 +40378,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 544, + "left": 480, "top": 177, "width": 56, "height": 10, @@ -38559,7 +40402,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 544, + "left": 480, "top": 187, "width": 56, "height": 10, @@ -38583,7 +40426,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 680, + "left": 616, "top": -104, "width": 10, "height": 10, @@ -38607,7 +40450,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 680, + "left": 616, "top": -104, "width": 10, "height": 10, @@ -38626,7 +40469,7 @@ "showShadow": true, "containerChangeable": true, "containerExtending": false, - "left": 544, + "left": 480, "top": 152, "width": 56, "height": 45, @@ -39275,7 +41118,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 744, + "left": 680, "top": 0, "width": 0, "height": 13, @@ -39300,7 +41143,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 445, + "left": 413, "top": 159, "width": 48, "height": 13, @@ -39326,7 +41169,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 744, + "left": 680, "top": 0, "width": 78, "height": 13, @@ -39352,7 +41195,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 744, + "left": 680, "top": 0, "width": 0, "height": 13, @@ -39372,7 +41215,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 440, + "left": 408, "top": 152, "width": 58, "height": 25, @@ -39408,7 +41251,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 440, + "left": 408, "top": 177, "width": 58, "height": 10, @@ -39432,7 +41275,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 440, + "left": 408, "top": 187, "width": 58, "height": 10, @@ -39456,7 +41299,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 552, + "left": 520, "top": 24, "width": 10, "height": 10, @@ -39480,7 +41323,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 552, + "left": 520, "top": 24, "width": 10, "height": 10, @@ -39499,7 +41342,7 @@ "showShadow": true, "containerChangeable": true, "containerExtending": false, - "left": 440, + "left": 408, "top": 152, "width": 58, "height": 45, @@ -41014,8 +42857,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 584, - "top": 260, + "left": 552, + "top": 255, "width": 0, "height": 13, "autoResize": false, @@ -41048,8 +42891,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 599, - "top": 260, + "left": 566, + "top": 250, "width": 0, "height": 13, "autoResize": false, @@ -41082,8 +42925,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 555, - "top": 259, + "left": 523, + "top": 264, "width": 0, "height": 13, "autoResize": false, @@ -41115,7 +42958,7 @@ "$ref": "AAAAAAFbH1Kncc02gVk=" }, "lineStyle": 1, - "points": "571:197;569:335", + "points": "515:197;561:335", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -41157,8 +43000,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 437, - "top": 231, + "left": 406, + "top": 229, "width": 0, "height": 13, "autoResize": false, @@ -41191,8 +43034,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 442, - "top": 245, + "left": 412, + "top": 243, "width": 0, "height": 13, "autoResize": false, @@ -41225,7 +43068,7 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 426, + "left": 393, "top": 202, "width": 0, "height": 13, @@ -41258,7 +43101,7 @@ "$ref": "AAAAAAFbH1Kncc02gVk=" }, "lineStyle": 1, - "points": "543:184;322:262", + "points": "479:187;322:257", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -41300,8 +43143,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 399, - "top": 269, + "left": 384, + "top": 268, "width": 0, "height": 13, "autoResize": false, @@ -41334,8 +43177,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 410, - "top": 279, + "left": 396, + "top": 276, "width": 0, "height": 13, "autoResize": false, @@ -41368,8 +43211,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 376, - "top": 250, + "left": 359, + "top": 251, "width": 0, "height": 13, "autoResize": false, @@ -41401,7 +43244,7 @@ "$ref": "AAAAAAFbH1KhQcy7aPg=" }, "lineStyle": 1, - "points": "448:197;329:335", + "points": "420:197;325:335", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -41443,8 +43286,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 385, - "top": 229, + "left": 367, + "top": 230, "width": 0, "height": 13, "autoResize": false, @@ -41477,8 +43320,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 392, - "top": 242, + "left": 375, + "top": 243, "width": 0, "height": 13, "autoResize": false, @@ -41511,8 +43354,8 @@ "showShadow": true, "containerChangeable": false, "containerExtending": false, - "left": 370, - "top": 202, + "left": 350, + "top": 205, "width": 0, "height": 13, "autoResize": false, @@ -41544,7 +43387,7 @@ "$ref": "AAAAAAFbH1KhQcy7aPg=" }, "lineStyle": 1, - "points": "439:190;318:255", + "points": "407:193;311:255", "stereotypeDisplay": "label", "showVisibility": true, "showProperty": true, @@ -42272,6 +44115,1631 @@ "propertyLabel": { "$ref": "AAAAAAFbH4LrtNH89TQ=" } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFcswO767JuzTE=", + "_parent": { + "$ref": "AAAAAAFbHImRMcuZ6y8=" + }, + "model": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswO767Jv7cY=", + "_parent": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "model": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswO77LJwV44=", + "_parent": { + "$ref": "AAAAAAFcswO767Jv7cY=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 208, + "top": -144, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswO77LJxhXE=", + "_parent": { + "$ref": "AAAAAAFcswO767Jv7cY=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 589, + "top": 159, + "width": 54, + "height": 13, + "autoResize": false, + "underline": false, + "text": "keypoint", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswO77LJyqRc=", + "_parent": { + "$ref": "AAAAAAFcswO767Jv7cY=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 208, + "top": -144, + "width": 78, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from utilities)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswO77LJz4mI=", + "_parent": { + "$ref": "AAAAAAFcswO767Jv7cY=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 208, + "top": -144, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 584, + "top": 152, + "width": 64, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswO77LJwV44=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswO77LJxhXE=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswO77LJyqRc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswO77LJz4mI=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFcswO77LJ0Um8=", + "_parent": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "model": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 584, + "top": 177, + "width": 64, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFcswO77bJ1zqg=", + "_parent": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "model": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 584, + "top": 187, + "width": 64, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFcswO77bJ2ZoE=", + "_parent": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "model": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 104, + "top": -120, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFcswO77bJ3Yfc=", + "_parent": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "model": { + "$ref": "AAAAAAFcswO76bJsmb4=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 104, + "top": -120, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFbHInAVcvGkAM=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 584, + "top": 152, + "width": 64, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswO767Jv7cY=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFcswO77LJ0Um8=" + }, + "operationCompartment": { + "$ref": "AAAAAAFcswO77bJ1zqg=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFcswO77bJ2ZoE=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFcswO77bJ3Yfc=" + } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAFcswPht7KaXPM=", + "_parent": { + "$ref": "AAAAAAFbHImRMcuZ6y8=" + }, + "model": { + "$ref": "AAAAAAFcswPht7KYSAs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswPhuLKbI0g=", + "_parent": { + "$ref": "AAAAAAFcswPht7KaXPM=" + }, + "model": { + "$ref": "AAAAAAFcswPht7KYSAs=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 456, + "top": 232, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswPht7KaXPM=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswPhuLKcUrE=", + "_parent": { + "$ref": "AAAAAAFcswPht7KaXPM=" + }, + "model": { + "$ref": "AAAAAAFcswPht7KYSAs=" + }, + "visible": null, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 460, + "top": 246, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFcswPht7KaXPM=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswPhuLKdcZs=", + "_parent": { + "$ref": "AAAAAAFcswPht7KaXPM=" + }, + "model": { + "$ref": "AAAAAAFcswPht7KYSAs=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 447, + "top": 203, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswPht7KaXPM=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "head": { + "$ref": "AAAAAAFbH1KdscySwQk=" + }, + "tail": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "lineStyle": 1, + "points": "583:184;322:264", + "stereotypeDisplay": "label", + "showVisibility": true, + "showProperty": true, + "nameLabel": { + "$ref": "AAAAAAFcswPhuLKbI0g=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFcswPhuLKcUrE=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswPhuLKdcZs=" + } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAFcswPmlrKrC/8=", + "_parent": { + "$ref": "AAAAAAFbHImRMcuZ6y8=" + }, + "model": { + "$ref": "AAAAAAFcswPmlrKpfyc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswPmmLKswyg=", + "_parent": { + "$ref": "AAAAAAFcswPmlrKrC/8=" + }, + "model": { + "$ref": "AAAAAAFcswPmlrKpfyc=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 537, + "top": 270, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswPmlrKrC/8=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswPmmLKtd10=", + "_parent": { + "$ref": "AAAAAAFcswPmlrKrC/8=" + }, + "model": { + "$ref": "AAAAAAFcswPmlrKpfyc=" + }, + "visible": null, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 548, + "top": 280, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFcswPmlrKrC/8=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswPmmLKutEc=", + "_parent": { + "$ref": "AAAAAAFcswPmlrKrC/8=" + }, + "model": { + "$ref": "AAAAAAFcswPmlrKpfyc=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 516, + "top": 249, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswPmlrKrC/8=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "head": { + "$ref": "AAAAAAFbH1K01c4swqY=" + }, + "tail": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "lineStyle": 1, + "points": "593:197;462:335", + "stereotypeDisplay": "label", + "showVisibility": true, + "showProperty": true, + "nameLabel": { + "$ref": "AAAAAAFcswPmmLKswyg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFcswPmmLKtd10=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswPmmLKutEc=" + } + }, + { + "_type": "UMLPackageView", + "_id": "AAAAAAFcswQsMiotLBc=", + "_parent": { + "$ref": "AAAAAAFbHImRMcuZ6y8=" + }, + "model": { + "$ref": "AAAAAAFbHGJipqEm58o=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswQsMyoufrg=", + "_parent": { + "$ref": "AAAAAAFcswQsMiotLBc=" + }, + "model": { + "$ref": "AAAAAAFbHGJipqEm58o=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswQsMyovxio=", + "_parent": { + "$ref": "AAAAAAFcswQsMyoufrg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#e2e2e2", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 684, + "top": -1352, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswQsMyowDWk=", + "_parent": { + "$ref": "AAAAAAFcswQsMyoufrg=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#e2e2e2", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 697, + "top": 246, + "width": 191, + "height": 13, + "autoResize": false, + "underline": false, + "text": "core", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswQsMyoxlOg=", + "_parent": { + "$ref": "AAAAAAFcswQsMyoufrg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#e2e2e2", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 684, + "top": -1352, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from pose)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswQsMyoy7m4=", + "_parent": { + "$ref": "AAAAAAFcswQsMyoufrg=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#e2e2e2", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 684, + "top": -1352, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#e2e2e2", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 692, + "top": 239, + "width": 201, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswQsMyovxio=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswQsMyowDWk=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswQsMyoxlOg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswQsMyoy7m4=" + } + } + ], + "containedViews": [ + { + "$ref": "AAAAAAFcswXRobSeQTI=" + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#e2e2e2", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 692, + "top": 224, + "width": 201, + "height": 160, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswQsMyoufrg=" + }, + "wordWrap": false + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFcswQsMyozWzc=", + "_parent": { + "$ref": "AAAAAAFbHImRMcuZ6y8=" + }, + "model": { + "$ref": "AAAAAAFbHGJ4XKFAf+Y=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswQsMyo0nco=", + "_parent": { + "$ref": "AAAAAAFcswQsMyozWzc=" + }, + "model": { + "$ref": "AAAAAAFbHGJ4XKFAf+Y=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswQsMyo12jk=", + "_parent": { + "$ref": "AAAAAAFcswQsMyo0nco=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 420, + "top": -1304, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswQsMyo2Jk4=", + "_parent": { + "$ref": "AAAAAAFcswQsMyo0nco=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 709, + "top": 303, + "width": 61, + "height": 13, + "autoResize": false, + "underline": false, + "text": "array.hpp", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswQsNCo3wc0=", + "_parent": { + "$ref": "AAAAAAFcswQsMyo0nco=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 420, + "top": -1304, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswQsNCo4KUo=", + "_parent": { + "$ref": "AAAAAAFcswQsMyo0nco=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 420, + "top": -1304, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 704, + "top": 296, + "width": 71, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswQsMyo12jk=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswQsMyo2Jk4=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswQsNCo3wc0=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswQsNCo4KUo=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFcswQsNCo59gQ=", + "_parent": { + "$ref": "AAAAAAFcswQsMyozWzc=" + }, + "model": { + "$ref": "AAAAAAFbHGJ4XKFAf+Y=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 704, + "top": 321, + "width": 71, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFcswQsNCo62r0=", + "_parent": { + "$ref": "AAAAAAFcswQsMyozWzc=" + }, + "model": { + "$ref": "AAAAAAFbHGJ4XKFAf+Y=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 704, + "top": 331, + "width": 71, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFcswQsNCo7VEo=", + "_parent": { + "$ref": "AAAAAAFcswQsMyozWzc=" + }, + "model": { + "$ref": "AAAAAAFbHGJ4XKFAf+Y=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 264, + "top": -656, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFcswQsNCo8cwg=", + "_parent": { + "$ref": "AAAAAAFcswQsMyozWzc=" + }, + "model": { + "$ref": "AAAAAAFbHGJ4XKFAf+Y=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 264, + "top": -656, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFcswQsMiotLBc=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 704, + "top": 296, + "width": 71, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswQsMyo0nco=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFcswQsNCo59gQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAFcswQsNCo62r0=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFcswQsNCo7VEo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFcswQsNCo8cwg=" + } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAFcswRgfrSJFJE=", + "_parent": { + "$ref": "AAAAAAFbHImRMcuZ6y8=" + }, + "model": { + "$ref": "AAAAAAFcswRgfbSHUnE=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswRgfrSKZRk=", + "_parent": { + "$ref": "AAAAAAFcswRgfrSJFJE=" + }, + "model": { + "$ref": "AAAAAAFcswRgfbSHUnE=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 688, + "top": 230, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswRgfrSJFJE=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswRgfrSLYpo=", + "_parent": { + "$ref": "AAAAAAFcswRgfrSJFJE=" + }, + "model": { + "$ref": "AAAAAAFcswRgfbSHUnE=" + }, + "visible": null, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 699, + "top": 220, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFcswRgfrSJFJE=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswRgfrSM3LQ=", + "_parent": { + "$ref": "AAAAAAFcswRgfrSJFJE=" + }, + "model": { + "$ref": "AAAAAAFcswRgfbSHUnE=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 665, + "top": 249, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswRgfrSJFJE=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "head": { + "$ref": "AAAAAAFcswQsMyozWzc=" + }, + "tail": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "lineStyle": 1, + "points": "635:197;719:295", + "stereotypeDisplay": "label", + "showVisibility": true, + "showProperty": true, + "nameLabel": { + "$ref": "AAAAAAFcswRgfrSKZRk=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFcswRgfrSLYpo=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswRgfrSM3LQ=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFcswXRobSeQTI=", + "_parent": { + "$ref": "AAAAAAFbHImRMcuZ6y8=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFcswXRobSflPc=", + "_parent": { + "$ref": "AAAAAAFcswXRobSeQTI=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFcswXRorSg5C0=", + "_parent": { + "$ref": "AAAAAAFcswXRobSflPc=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -64, + "top": -24, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswXRorShg3Y=", + "_parent": { + "$ref": "AAAAAAFcswXRobSflPc=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;1", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 789, + "top": 303, + "width": 88, + "height": 13, + "autoResize": false, + "underline": false, + "text": "rectangle.hpp", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswXRorSiCCE=", + "_parent": { + "$ref": "AAAAAAFcswXRobSflPc=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -64, + "top": -24, + "width": 72, + "height": 13, + "autoResize": false, + "underline": false, + "text": "(from core)", + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "LabelView", + "_id": "AAAAAAFcswXRorSj40E=", + "_parent": { + "$ref": "AAAAAAFcswXRobSflPc=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -64, + "top": -24, + "width": 0, + "height": 13, + "autoResize": false, + "underline": false, + "horizontalAlignment": 1, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 296, + "width": 98, + "height": 25, + "autoResize": false, + "stereotypeLabel": { + "$ref": "AAAAAAFcswXRorSg5C0=" + }, + "nameLabel": { + "$ref": "AAAAAAFcswXRorShg3Y=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFcswXRorSiCCE=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswXRorSj40E=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFcswXRorSkfOs=", + "_parent": { + "$ref": "AAAAAAFcswXRobSeQTI=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 321, + "width": 98, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFcswXRo7Sl4M0=", + "_parent": { + "$ref": "AAAAAAFcswXRobSeQTI=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 784, + "top": 331, + "width": 98, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFcswXRo7SmR9Q=", + "_parent": { + "$ref": "AAAAAAFcswXRobSeQTI=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -56, + "top": 0, + "width": 10, + "height": 10, + "autoResize": false + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFcswXRpLSn0qc=", + "_parent": { + "$ref": "AAAAAAFcswXRobSeQTI=" + }, + "model": { + "$ref": "AAAAAAFcswXRoLSckR0=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": -56, + "top": 0, + "width": 10, + "height": 10, + "autoResize": false + } + ], + "containerView": { + "$ref": "AAAAAAFcswQsMiotLBc=" + }, + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": true, + "containerExtending": false, + "left": 784, + "top": 296, + "width": 98, + "height": 45, + "autoResize": false, + "stereotypeDisplay": "label", + "showVisibility": true, + "showNamespace": false, + "showProperty": true, + "showType": true, + "nameCompartment": { + "$ref": "AAAAAAFcswXRobSflPc=" + }, + "wordWrap": false, + "suppressAttributes": false, + "suppressOperations": false, + "suppressReceptions": true, + "showMultiplicity": true, + "showOperationSignature": true, + "attributeCompartment": { + "$ref": "AAAAAAFcswXRorSkfOs=" + }, + "operationCompartment": { + "$ref": "AAAAAAFcswXRo7Sl4M0=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFcswXRo7SmR9Q=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFcswXRpLSn0qc=" + } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAFcswYOb7TLOOA=", + "_parent": { + "$ref": "AAAAAAFbHImRMcuZ6y8=" + }, + "model": { + "$ref": "AAAAAAFcswYObrTJy5s=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswYOb7TMUQ4=", + "_parent": { + "$ref": "AAAAAAFcswYOb7TLOOA=" + }, + "model": { + "$ref": "AAAAAAFcswYObrTJy5s=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 730, + "top": 226, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswYOb7TLOOA=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswYOcLTN/Ro=", + "_parent": { + "$ref": "AAAAAAFcswYOb7TLOOA=" + }, + "model": { + "$ref": "AAAAAAFcswYObrTJy5s=" + }, + "visible": null, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 738, + "top": 214, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFcswYOb7TLOOA=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFcswYOcLTOwQQ=", + "_parent": { + "$ref": "AAAAAAFcswYOb7TLOOA=" + }, + "model": { + "$ref": "AAAAAAFcswYObrTJy5s=" + }, + "visible": false, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "left": 713, + "top": 251, + "width": 0, + "height": 13, + "autoResize": false, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFcswYOb7TLOOA=" + }, + "edgePosition": 1, + "underline": false, + "horizontalAlignment": 2, + "verticalAlignment": 5, + "wordWrap": false + } + ], + "visible": true, + "enabled": true, + "lineColor": "#000000", + "fillColor": "#ffffff", + "fontColor": "#000000", + "font": "Arial;13;0", + "showShadow": true, + "containerChangeable": false, + "containerExtending": false, + "head": { + "$ref": "AAAAAAFcswXRobSeQTI=" + }, + "tail": { + "$ref": "AAAAAAFcswO767JuzTE=" + }, + "lineStyle": 1, + "points": "648:196;797:295", + "stereotypeDisplay": "label", + "showVisibility": true, + "showProperty": true, + "nameLabel": { + "$ref": "AAAAAAFcswYOb7TMUQ4=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFcswYOcLTN/Ro=" + }, + "propertyLabel": { + "$ref": "AAAAAAFcswYOcLTOwQQ=" + } } ] } diff --git a/doc/UML/1_0_0rc3/UML.pdf b/doc/UML/1_0_0rc3/UML.pdf index b643b206bac2c78c270b4d3bb831ca6a731cab8c..318d53d293a4405fd03abb36d7fee825c4b29fd6 100644 GIT binary patch delta 19722 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 delta 18922 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 JB_%~qMhaN=tzZBE diff --git a/doc/demo_overview.md b/doc/demo_overview.md index d2deadff..f21b503e 100644 --- a/doc/demo_overview.md +++ b/doc/demo_overview.md @@ -44,13 +44,13 @@ Each flag is divided into flag name, default value, and description. - DEFINE_int32(part_to_show, 0, "Part to show from the start."); - DEFINE_bool(disable_blending, false, "If blending is enabled, it will merge the results with the original frame. If disabled, it will only display the results."); 8. OpenPose Rendering Pose -- DEFINE_bool(no_render_pose, false, "If false, it will fill both `outputData` and `cvOutputData` with the original image + desired part to be shown. If true, it will leave them empty."); -- DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -- DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +- DEFINE_int32(render_pose, 1, "Set to 0 for no rendering, 1 for CPU rendering (slightly faster), and 2 for GPU rendering (slower but greater functionality, e.g. `alpha_X` flags). If rendering is enabled, it will render both `outputData` and `cvOutputData` with the original image and desired body part to be shown (i.e. keypoints, heat maps or PAFs)."); +- DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it. Only valid for GPU rendering."); +- DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame. Only valid for GPU rendering."); 9. OpenPose Rendering Face -- DEFINE_bool(no_render_face, false, "Analogous to `no_render_pose` but applied to the face keypoints and heat maps."); -- DEFINE_double(alpha_face, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -- DEFINE_double(alpha_heatmap_face, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +- DEFINE_int32(render_face, -1, "Analogous to `render_pose` but applied to the face. Extra option: -1 to use the same configuration that `render_pose` is using."); +- DEFINE_double(alpha_face, 0.6, "Analogous to `alpha_pose` but applied to face."); +- DEFINE_double(alpha_heatmap_face, 0.7, "Analogous to `alpha_heatmap` but applied to face."); 10. Display - DEFINE_bool(fullscreen, false, "Run in full-screen mode (press f during runtime to toggle)."); - DEFINE_bool(process_real_time, false, "Enable to keep the original source frame rate (e.g. for video). If the processing time is too long, it will skip frames. If it is too fast, it will slow it down."); @@ -60,11 +60,11 @@ Each flag is divided into flag name, default value, and description. - DEFINE_string(write_images, "", "Directory to write rendered frames in `write_images_format` image format."); - DEFINE_string(write_images_format, "png", "File extension and format for `write_images`, e.g. png, jpg or bmp. Check the OpenCV function cv::imwrite for all compatible extensions."); - DEFINE_string(write_video, "", "Full file path to write rendered frames in motion JPEG video format. It might fail if the final path does not finish in `.avi`. It internally uses cv::VideoWriter."); -- DEFINE_string(write_keypoint, "", "Directory to write the people body pose keypoint data. Desired format on `write_keypoint_format`."); -- DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml and yml. Json not available for OpenCV < 3.0, use `write_keypoint_json` instead."); -- DEFINE_string(write_keypoint_json, "", "Directory to write people pose data with *.json format, compatible with any OpenCV version."); +- DEFINE_string(write_keypoint, "", "Directory to write the people pose keypoint data. Format with `write_keypoint_format`."); +- DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml & yml. Json not available for OpenCV < 3.0, use `write_keypoint_json` instead."); +- DEFINE_string(write_keypoint_json, "", "Directory to write people pose data in *.json format, compatible with any OpenCV version."); - DEFINE_string(write_coco_json, "", "Full file path to write people pose data with *.json COCO validation format."); -- DEFINE_string(write_heatmaps, "", "Directory to write heatmaps with *.png format. At least 1 `add_heatmaps_X` flag must be enabled."); +- DEFINE_string(write_heatmaps, "", "Directory to write heatmaps in *.png format. At least 1 `add_heatmaps_X` flag must be enabled."); - DEFINE_string(write_heatmaps_format, "png", "File extension and format for `write_heatmaps`, analogous to `write_images_format`. Recommended `png` or any compressed and lossless format."); ## Multiple Scales diff --git a/doc/media/keypoints_hand.odt b/doc/media/keypoints_hand.odt new file mode 100644 index 0000000000000000000000000000000000000000..362910e41c00c25899ab82bf80fd84154dbb1c35 GIT binary patch literal 137093 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%0AT@PfR#5c(UHiG*m{cUob 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 literal 0 HcmV?d00001 diff --git a/doc/release_notes.md b/doc/release_notes.md index e474c3b0..f9437051 100644 --- a/doc/release_notes.md +++ b/doc/release_notes.md @@ -15,7 +15,7 @@ OpenPose Library - Release Notes 1. Main improvements: 1. Rendering max resolution from 720p to >32k images. 2. Highly improved documentation. -2. Functions or paremeters renamed: +2. Functions or parameters renamed: 1. Demo renamed from rtpose to openpose. 3. Main bugs fixed: 1. Demo uses exec instead of start, so it works with more OpenCV custom compiled versions. @@ -25,14 +25,14 @@ OpenPose Library - Release Notes ## OpenPose 1.0.0rc3 1. Main improvements: 1. Added face keypoint detection. - 2. Added Windows 10 compatibily. + 2. Added Windows 10 compatibility. 3. Auto-detection of the number of GPUs. 4. MPI visualization more similar to COCO one. 5. Rendering max resolution from 720p to >32k images. 6. GUI info adder working when the worker TDatum has more than 1 Datum. - 7. It prints out the error description before throwing the exception (so that it is writen on the Windows cmd). + 7. It prints out the error description before throwing the exception (so that it is written on the Windows cmd). 8. Highly improved documentation. -2. Functions or paremeters renamed: +2. Functions or parameters renamed: 1. Flag `write_pose` renamed as `write_keypoint` and it also applies to face and/or hands. 2. Flag `write_pose_json` renamed as `write_keypoint_json` and it also applies to face and/or hands. 3. Flag `write_pose_format` renamed as `write_keypoint_format` and it also applies to face and/or hands. @@ -46,11 +46,15 @@ OpenPose Library - Release Notes ## Current version (future OpenPose 1.0.0rc4) 1. Main improvements: - 1. Check() functions give more feedback. - 2. Improved documentation. -2. Functions or paremeters renamed: - 1. `Datum::scaleRatios` to save the relative scale ratio when multi-scale. + 1. Increased accuracy on multi-scale (added `Datum::scaleRatios` to save the relative scale ratio when multi-scale). + 2. Increased speed ~3-5% by adding CPU rendering and setting it as default rendering. + 3. Check() functions give more feedback. + 4. WCocoJsonSaver finished and removed its 3599-image limit. + 5. Improved documentation. +2. Functions or parameters renamed: + 1. Render flags renamed in the demo in order to incorporate the CPU/GPU rendering. 3. Main bugs fixed: 1. Fixed bug in Array::getConstCvMat() if mVolume=0, now returning empty cv::Mat. 2. Fixed bug: `--process_real_time` threw error with webcam. - 3. Fixed bug: Face not working with output resolution different to input. + 3. Fixed bug: Face not working when input and output resolutions are different. + 4. Fixed some bugs that prevented debug version to run. diff --git a/examples/openpose/openpose.cpp b/examples/openpose/openpose.cpp index b180e74e..f1f3646d 100755 --- a/examples/openpose/openpose.cpp +++ b/examples/openpose/openpose.cpp @@ -16,12 +16,12 @@ // This file should only be used for the user to take specific examples. // C++ std library dependencies -#include // std::atomic +#include #include // `std::chrono::` functions and classes, e.g. std::chrono::milliseconds #include // sscanf -#include // std::string +#include #include // std::this_thread -#include // std::vector +#include // Other 3rdpary depencencies #include // DEFINE_bool, DEFINE_int32, DEFINE_int64, DEFINE_uint64, DEFINE_double, DEFINE_string #include // google::InitGoogleLogging @@ -45,77 +45,98 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_int32(camera, 0, "The camera index for cv::VideoCapture. Integer in the range [0, 9]."); DEFINE_string(camera_resolution, "1280x720", "Size of the camera frames to ask for."); -DEFINE_string(video, "", "Use a video file instead of the camera. Use `examples/media/video.avi` for our default example video."); -DEFINE_string(image_dir, "", "Process a directory of images. Use `examples/media/` for our default example folder with 20 images."); +DEFINE_string(video, "", "Use a video file instead of the camera. Use `examples/media/video.avi` for our default" + " example video."); +DEFINE_string(image_dir, "", "Process a directory of images. Use `examples/media/` for our default example folder with 20" + " images."); DEFINE_uint64(frame_first, 0, "Start on desired frame number. Indexes are 0-based, i.e. the first frame has index 0."); -DEFINE_uint64(frame_last, -1, "Finish on desired frame number. Select -1 to disable. Indexes are 0-based, e.g. if set to 10, it will process" - " 11 frames (0-10)."); +DEFINE_uint64(frame_last, -1, "Finish on desired frame number. Select -1 to disable. Indexes are 0-based, e.g. if set to" + " 10, it will process 11 frames (0-10)."); DEFINE_bool(frame_flip, false, "Flip/mirror each frame (e.g. for real time webcam demonstrations)."); DEFINE_int32(frame_rotate, 0, "Rotate each frame, 4 possible values: 0, 90, 180, 270."); DEFINE_bool(frames_repeat, false, "Repeat frames when finished."); // OpenPose DEFINE_string(model_folder, "models/", "Folder where the pose models (COCO and MPI) are located."); -DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the default images resolution."); -DEFINE_int32(num_gpu, -1, "The number of GPU devices to use. If negative, it will use all the available GPUs in your machine."); +DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" + " default images resolution."); +DEFINE_int32(num_gpu, -1, "The number of GPU devices to use. If negative, it will use all the available GPUs in your" + " machine."); DEFINE_int32(num_gpu_start, 0, "GPU device start number."); -DEFINE_int32(keypoint_scale, 0, "Scaling of the (x,y) coordinates of the final pose data array, i.e. the scale of the (x,y) coordinates that will be saved" - " with the `write_keypoint` & `write_keypoint_json` flags. Select `0` to scale it to the original source resolution, `1`to scale" - " it to the net output size (set with `net_resolution`), `2` to scale it to the final output size (set with `resolution`)," - " `3` to scale it in the range [0,1], and 4 for range [-1,1]. Non related with `num_scales` and `scale_gap`."); +DEFINE_int32(keypoint_scale, 0, "Scaling of the (x,y) coordinates of the final pose data array, i.e. the scale of the (x,y)" + " coordinates that will be saved with the `write_keypoint` & `write_keypoint_json` flags." + " Select `0` to scale it to the original source resolution, `1`to scale it to the net output" + " size (set with `net_resolution`), `2` to scale it to the final output size (set with" + " `resolution`), `3` to scale it in the range [0,1], and 4 for range [-1,1]. Non related" + " with `num_scales` and `scale_gap`."); // OpenPose Body Pose DEFINE_string(model_pose, "COCO", "Model to be used (e.g. COCO, MPI, MPI_4_layers)."); -DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased, the speed increases."); +DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased," + " the speed increases."); DEFINE_int32(num_scales, 1, "Number of scales to average."); -DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you want to change the initial scale," - " you actually want to multiply the `net_resolution` by your desired initial scale."); -DEFINE_bool(heatmaps_add_parts, false, "If true, it will add the body part heatmaps to the final op::Datum::poseHeatMaps array (program speed will decrease). Not" - " required for our library, enable it only if you intend to process this information later. If more than one `add_heatmaps_X`" - " flag is enabled, it will place then in sequential memory order: body parts + bkg + PAFs. It will follow the order on" - " POSE_BODY_PART_MAPPING in `include/openpose/pose/poseParameters.hpp`."); -DEFINE_bool(heatmaps_add_bkg, false, "Same functionality as `add_heatmaps_parts`, but adding the heatmap corresponding to background."); +DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you" + " want to change the initial scale, you actually want to multiply the `net_resolution` by" + " your desired initial scale."); +DEFINE_bool(heatmaps_add_parts, false, "If true, it will add the body part heatmaps to the final op::Datum::poseHeatMaps array" + " (program speed will decrease). Not required for our library, enable it only if you intend" + " to process this information later. If more than one `add_heatmaps_X` flag is enabled, it" + " will place then in sequential memory order: body parts + bkg + PAFs. It will follow the" + " order on POSE_BODY_PART_MAPPING in `include/openpose/pose/poseParameters.hpp`."); +DEFINE_bool(heatmaps_add_bkg, false, "Same functionality as `add_heatmaps_parts`, but adding the heatmap corresponding to" + " background."); DEFINE_bool(heatmaps_add_PAFs, false, "Same functionality as `add_heatmaps_parts`, but adding the PAFs."); // OpenPose Face -DEFINE_bool(face, false, "Enables face keypoint detection. It will share some parameters from the body pose, e.g. `model_folder`."); -DEFINE_string(face_net_resolution, "368x368", "Multiples of 16. Analogous to `net_resolution` but applied to the face keypoint detector. 320x320 usually works fine" - " while giving a substantial speed up when multiple faces on the image."); +DEFINE_bool(face, false, "Enables face keypoint detection. It will share some parameters from the body pose, e.g." + " `model_folder`."); +DEFINE_string(face_net_resolution, "368x368", "Multiples of 16. Analogous to `net_resolution` but applied to the face keypoint detector." + " 320x320 usually works fine while giving a substantial speed up when multiple faces on the" + " image."); // OpenPose Hand // OpenPose Rendering DEFINE_int32(part_to_show, 0, "Part to show from the start."); -DEFINE_bool(disable_blending, false, "If blending is enabled, it will merge the results with the original frame. If disabled, it will only display the results."); +DEFINE_bool(disable_blending, false, "If blending is enabled, it will merge the results with the original frame. If disabled, it" + " will only display the results."); // OpenPose Rendering Pose -DEFINE_bool(no_render_pose, false, "If false, it will fill both `outputData` and `cvOutputData` with the original image + desired part to be shown." - " If true, it will leave them empty."); -DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +DEFINE_int32(render_pose, 1, "Set to 0 for no rendering, 1 for CPU rendering (slightly faster), and 2 for GPU rendering" + " (slower but greater functionality, e.g. `alpha_X` flags). If rendering is enabled, it will" + " render both `outputData` and `cvOutputData` with the original image and desired body part" + " to be shown (i.e. keypoints, heat maps or PAFs)."); +DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will" + " hide it. Only valid for GPU rendering."); +DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the" + " heatmap, 0 will only show the frame. Only valid for GPU rendering."); // OpenPose Rendering Face -DEFINE_bool(no_render_face, false, "Analogous to `no_render_pose` but applied to the face keypoints and heat maps."); -DEFINE_double(alpha_face, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -DEFINE_double(alpha_heatmap_face, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +DEFINE_int32(render_face, -1, "Analogous to `render_pose` but applied to the face. Extra option: -1 to use the same" + " configuration that `render_pose` is using."); +DEFINE_double(alpha_face, 0.6, "Analogous to `alpha_pose` but applied to face."); +DEFINE_double(alpha_heatmap_face, 0.7, "Analogous to `alpha_heatmap` but applied to face."); // Display DEFINE_bool(fullscreen, false, "Run in full-screen mode (press f during runtime to toggle)."); -DEFINE_bool(process_real_time, false, "Enable to keep the original source frame rate (e.g. for video). If the processing time is too long, it will skip frames. If it is" - " too fast, it will slow it down."); -DEFINE_bool(no_gui_verbose, false, "Do not write text on output images on GUI (e.g. number of current frame and people). It does not affect the pose rendering."); +DEFINE_bool(process_real_time, false, "Enable to keep the original source frame rate (e.g. for video). If the processing time is" + " too long, it will skip frames. If it is too fast, it will slow it down."); +DEFINE_bool(no_gui_verbose, false, "Do not write text on output images on GUI (e.g. number of current frame and people). It" + " does not affect the pose rendering."); DEFINE_bool(no_display, false, "Do not open a display window."); // Result Saving DEFINE_string(write_images, "", "Directory to write rendered frames in `write_images_format` image format."); -DEFINE_string(write_images_format, "png", "File extension and format for `write_images`, e.g. png, jpg or bmp. Check the OpenCV function cv::imwrite" - " for all compatible extensions."); -DEFINE_string(write_video, "", "Full file path to write rendered frames in motion JPEG video format. It might fail if the final path does" - " not finish in `.avi`. It internally uses cv::VideoWriter."); -DEFINE_string(write_keypoint, "", "Directory to write the people body pose keypoint data. Desired format on `write_keypoint_format`."); -DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml and yml. Json not available for OpenCV < 3.0," - " use `write_keypoint_json` instead."); -DEFINE_string(write_keypoint_json, "", "Directory to write people pose data with *.json format, compatible with any OpenCV version."); +DEFINE_string(write_images_format, "png", "File extension and format for `write_images`, e.g. png, jpg or bmp. Check the OpenCV" + " function cv::imwrite for all compatible extensions."); +DEFINE_string(write_video, "", "Full file path to write rendered frames in motion JPEG video format. It might fail if the" + " final path does not finish in `.avi`. It internally uses cv::VideoWriter."); +DEFINE_string(write_keypoint, "", "Directory to write the people pose keypoint data. Format with `write_keypoint_format`."); +DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml & yml. Json not available" + " for OpenCV < 3.0, use `write_keypoint_json` instead."); +DEFINE_string(write_keypoint_json, "", "Directory to write people pose data in *.json format, compatible with any OpenCV version."); DEFINE_string(write_coco_json, "", "Full file path to write people pose data with *.json COCO validation format."); -DEFINE_string(write_heatmaps, "", "Directory to write heatmaps with *.png format. At least 1 `add_heatmaps_X` flag must be enabled."); -DEFINE_string(write_heatmaps_format, "png", "File extension and format for `write_heatmaps`, analogous to `write_images_format`. Recommended `png` or any compressed and" - " lossless format."); +DEFINE_string(write_heatmaps, "", "Directory to write heatmaps in *.png format. At least 1 `add_heatmaps_X` flag must be" + " enabled."); +DEFINE_string(write_heatmaps_format, "png", "File extension and format for `write_heatmaps`, analogous to `write_images_format`." + " Recommended `png` or any compressed and lossless format."); op::PoseModel gflagToPoseModel(const std::string& poseModeString) { @@ -148,7 +169,8 @@ op::ScaleMode gflagToScaleMode(const int keypointScale) return op::ScaleMode::PlusMinusOne; else { - const std::string message = "String does not correspond to any scale mode: (0, 1, 2, 3, 4) for (InputResolution, NetOutputResolution, OutputResolution, ZeroToOne, PlusMinusOne)."; + const std::string message = "String does not correspond to any scale mode: (0, 1, 2, 3, 4) for (InputResolution," + " NetOutputResolution, OutputResolution, ZeroToOne, PlusMinusOne)."; op::error(message, __LINE__, __FUNCTION__, __FILE__); return op::ScaleMode::InputResolution; } @@ -175,7 +197,8 @@ op::ProducerType gflagsToProducerType(const std::string& imageDirectory, const s return op::ProducerType::Webcam; } -std::shared_ptr gflagsToProducer(const std::string& imageDirectory, const std::string& videoPath, const int webcamIndex, const op::Point webcamResolution) +std::shared_ptr gflagsToProducer(const std::string& imageDirectory, const std::string& videoPath, const int webcamIndex, + const op::Point webcamResolution) { op::log("", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); const auto type = gflagsToProducerType(imageDirectory, videoPath, webcamIndex); @@ -193,39 +216,60 @@ std::shared_ptr gflagsToProducer(const std::string& imageDirectory } } -std::vector gflagToHeatMaps(const bool heatmaps_add_parts, const bool heatmaps_add_bkg, const bool heatmaps_add_PAFs) +std::vector gflagToHeatMaps(const bool heatMapsAddParts, const bool heatMapsAddBkg, const bool heatMapsAddPAFs) { - std::vector heatMapTypes; - if (heatmaps_add_parts) + if (heatMapsAddParts) heatMapTypes.emplace_back(op::HeatMapType::Parts); - if (heatmaps_add_bkg) + if (heatMapsAddBkg) heatMapTypes.emplace_back(op::HeatMapType::Background); - if (heatmaps_add_PAFs) + if (heatMapsAddPAFs) heatMapTypes.emplace_back(op::HeatMapType::PAFs); return heatMapTypes; } +op::RenderMode gflagToRenderMode(const int renderFlag, const int renderPoseFlag = -2) +{ + if (renderFlag == -1 && renderPoseFlag != -2) + return gflagToRenderMode(renderPoseFlag, -2); + else if (renderFlag == 0) + return op::RenderMode::None; + else if (renderFlag == 1) + return op::RenderMode::Cpu; + else if (renderFlag == 2) + return op::RenderMode::Gpu; + else + { + op::error("Undefined RenderMode selected.", __LINE__, __FUNCTION__, __FILE__); + return op::RenderMode::None; + } +} + // Google flags into program variables -std::tuple, op::Point, op::Point, op::Point, std::shared_ptr, op::PoseModel, op::ScaleMode, std::vector> gflagsToOpParameters() +std::tuple, op::Point, op::Point, op::Point, std::shared_ptr, op::PoseModel, + op::ScaleMode, std::vector> gflagsToOpParameters() { op::log("", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); // cameraFrameSize op::Point cameraFrameSize; auto nRead = sscanf(FLAGS_camera_resolution.c_str(), "%dx%d", &cameraFrameSize.x, &cameraFrameSize.y); - op::checkE(nRead, 2, "Error, camera resolution format (" + FLAGS_camera_resolution + ") invalid, should be e.g., 1280x720", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, camera resolution format (" + FLAGS_camera_resolution + ") invalid, should be e.g., 1280x720", + __LINE__, __FUNCTION__, __FILE__); // outputSize op::Point outputSize; nRead = sscanf(FLAGS_resolution.c_str(), "%dx%d", &outputSize.x, &outputSize.y); - op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", + __LINE__, __FUNCTION__, __FILE__); // netInputSize op::Point netInputSize; nRead = sscanf(FLAGS_net_resolution.c_str(), "%dx%d", &netInputSize.x, &netInputSize.y); - op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", + __LINE__, __FUNCTION__, __FILE__); // faceNetInputSize op::Point faceNetInputSize; nRead = sscanf(FLAGS_face_net_resolution.c_str(), "%dx%d", &faceNetInputSize.x, &faceNetInputSize.y); - op::checkE(nRead, 2, "Error, face net resolution format (" + FLAGS_face_net_resolution + ") invalid, should be e.g., 368x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, face net resolution format (" + FLAGS_face_net_resolution + + ") invalid, should be e.g., 368x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); // producerType const auto producerSharedPtr = gflagsToProducer(FLAGS_image_dir, FLAGS_video, FLAGS_camera, cameraFrameSize); // poseModel @@ -257,25 +301,29 @@ int opRealTimePoseDemo() op::PoseModel poseModel; op::ScaleMode keypointScale; std::vector heatMapTypes; - std::tie(cameraFrameSize, outputSize, netInputSize, faceNetInputSize, producerSharedPtr, poseModel, keypointScale, heatMapTypes) = gflagsToOpParameters(); + std::tie(cameraFrameSize, outputSize, netInputSize, faceNetInputSize, producerSharedPtr, poseModel, keypointScale, + heatMapTypes) = gflagsToOpParameters(); // OpenPose wrapper op::log("Configuring OpenPose wrapper.", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); op::Wrapper> opWrapper; // Pose configuration (use WrapperStructPose{} for default and recommended configuration) - const op::WrapperStructPose wrapperStructPose{netInputSize, outputSize, keypointScale, FLAGS_num_gpu, FLAGS_num_gpu_start, FLAGS_num_scales, (float)FLAGS_scale_gap, - !FLAGS_no_render_pose, poseModel, !FLAGS_disable_blending, (float)FLAGS_alpha_pose, (float)FLAGS_alpha_heatmap, + const op::WrapperStructPose wrapperStructPose{netInputSize, outputSize, keypointScale, FLAGS_num_gpu, FLAGS_num_gpu_start, + FLAGS_num_scales, (float)FLAGS_scale_gap, gflagToRenderMode(FLAGS_render_pose), poseModel, + !FLAGS_disable_blending, (float)FLAGS_alpha_pose, (float)FLAGS_alpha_heatmap, FLAGS_part_to_show, FLAGS_model_folder, heatMapTypes, op::ScaleMode::UnsignedChar}; - // (Experimental, function and class names might change in next versions) Face configuration (use op::WrapperStructFace{} to disable it) - const op::WrapperStructFace wrapperStructFace{FLAGS_face, faceNetInputSize, !FLAGS_no_render_face, (float)FLAGS_alpha_face, (float)FLAGS_alpha_heatmap_face}; - // (Experimental, function and class names might change in next versions) Hand configuration (use op::WrapperStructFace{} to disable it) + // Face configuration (use op::WrapperStructFace{} to disable it) + const op::WrapperStructFace wrapperStructFace{FLAGS_face, faceNetInputSize, gflagToRenderMode(FLAGS_render_face, FLAGS_render_pose), + (float)FLAGS_alpha_face, (float)FLAGS_alpha_heatmap_face}; + // Hand configuration (use op::WrapperStructHand{} to disable it) const op::experimental::WrapperStructHand wrapperStructHand{false}; // Producer (use default to disable any input) - const op::WrapperStructInput wrapperStructInput{producerSharedPtr, FLAGS_frame_first, FLAGS_frame_last, FLAGS_process_real_time, FLAGS_frame_flip, - FLAGS_frame_rotate, FLAGS_frames_repeat}; + const op::WrapperStructInput wrapperStructInput{producerSharedPtr, FLAGS_frame_first, FLAGS_frame_last, FLAGS_process_real_time, + FLAGS_frame_flip, FLAGS_frame_rotate, FLAGS_frames_repeat}; // Consumer (comment or use default argument to disable any output) - const op::WrapperStructOutput wrapperStructOutput{!FLAGS_no_display, !FLAGS_no_gui_verbose, FLAGS_fullscreen, FLAGS_write_keypoint, op::stringToDataFormat(FLAGS_write_keypoint_format), - FLAGS_write_keypoint_json, FLAGS_write_coco_json, FLAGS_write_images, FLAGS_write_images_format, FLAGS_write_video, + const op::WrapperStructOutput wrapperStructOutput{!FLAGS_no_display, !FLAGS_no_gui_verbose, FLAGS_fullscreen, FLAGS_write_keypoint, + op::stringToDataFormat(FLAGS_write_keypoint_format), FLAGS_write_keypoint_json, + FLAGS_write_coco_json, FLAGS_write_images, FLAGS_write_images_format, FLAGS_write_video, FLAGS_write_heatmaps, FLAGS_write_heatmaps_format}; // Configure wrapper opWrapper.configure(wrapperStructPose, wrapperStructFace, wrapperStructHand, wrapperStructInput, wrapperStructOutput); @@ -310,7 +358,8 @@ int opRealTimePoseDemo() // opWrapper.stop(); // Measuring total time - const auto totalTimeSec = (double)std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-timerBegin).count() * 1e-9; + const auto now = std::chrono::high_resolution_clock::now(); + const auto totalTimeSec = (double)std::chrono::duration_cast(now-timerBegin).count() * 1e-9; const auto message = "Real-time pose estimation demo successfully finished. Total time: " + std::to_string(totalTimeSec) + " seconds."; op::log(message, op::Priority::Max); diff --git a/examples/tutorial_pose/1_extract_from_image.cpp b/examples/tutorial_pose/1_extract_from_image.cpp index 1018bef7..8bbffe06 100644 --- a/examples/tutorial_pose/1_extract_from_image.cpp +++ b/examples/tutorial_pose/1_extract_from_image.cpp @@ -22,21 +22,26 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_string(image_path, "examples/media/COCO_val2014_000000000192.jpg", "Process the desired image."); // OpenPose DEFINE_string(model_pose, "COCO", "Model to be used (e.g. COCO, MPI, MPI_4_layers)."); DEFINE_string(model_folder, "models/", "Folder path (absolute or relative) where the models (pose, face, ...) are located."); -DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased, the speed increases."); -DEFINE_string(resolution, "1280x720", "The image resolution (display). Use \"-1x-1\" to force the program to use the default images resolution."); +DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased," + " the speed increases."); +DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" + " default images resolution."); DEFINE_int32(num_gpu_start, 0, "GPU device start number."); -DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you want to change the initial scale, " - "you actually want to multiply the `net_resolution` by your desired initial scale."); +DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you" + " want to change the initial scale, you actually want to multiply the `net_resolution` by" + " your desired initial scale."); DEFINE_int32(num_scales, 1, "Number of scales to average."); // OpenPose Rendering -DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); +DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will" + " hide it. Only valid for GPU rendering."); op::PoseModel gflagToPoseModel(const std::string& poseModeString) { @@ -61,11 +66,13 @@ std::tuple, op::Point, op::Point, op::PoseModel> gflags // outputSize op::Point outputSize; auto nRead = sscanf(FLAGS_resolution.c_str(), "%dx%d", &outputSize.x, &outputSize.y); - op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", + __LINE__, __FUNCTION__, __FILE__); // netInputSize op::Point netInputSize; nRead = sscanf(FLAGS_net_resolution.c_str(), "%dx%d", &netInputSize.x, &netInputSize.y); - op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", + __LINE__, __FUNCTION__, __FILE__); // netOutputSize const auto netOutputSize = netInputSize; // poseModel diff --git a/examples/tutorial_pose/2_extract_pose_or_heatmat_from_image.cpp b/examples/tutorial_pose/2_extract_pose_or_heatmat_from_image.cpp index 4f55a072..b6867875 100644 --- a/examples/tutorial_pose/2_extract_pose_or_heatmat_from_image.cpp +++ b/examples/tutorial_pose/2_extract_pose_or_heatmat_from_image.cpp @@ -22,23 +22,29 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_string(image_path, "examples/media/COCO_val2014_000000000192.jpg", "Process the desired image."); // OpenPose DEFINE_string(model_pose, "COCO", "Model to be used (e.g. COCO, MPI, MPI_4_layers)."); DEFINE_string(model_folder, "models/", "Folder path (absolute or relative) where the models (pose, face, ...) are located."); -DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased, the speed increases."); -DEFINE_string(resolution, "1280x720", "The image resolution (display). Use \"-1x-1\" to force the program to use the default images resolution."); +DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased," + " the speed increases."); +DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" + " default images resolution."); DEFINE_int32(num_gpu_start, 0, "GPU device start number."); -DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you want to change the initial scale, " - "you actually want to multiply the `net_resolution` by your desired initial scale."); +DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you" + " want to change the initial scale, you actually want to multiply the `net_resolution` by" + " your desired initial scale."); DEFINE_int32(num_scales, 1, "Number of scales to average."); // OpenPose Rendering DEFINE_int32(part_to_show, 19, "Part to show from the start."); -DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will" + " hide it. Only valid for GPU rendering."); +DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the" + " heatmap, 0 will only show the frame. Only valid for GPU rendering."); op::PoseModel gflagToPoseModel(const std::string& poseModeString) { @@ -63,11 +69,13 @@ std::tuple, op::Point, op::Point, op::PoseModel> gflags // outputSize op::Point outputSize; auto nRead = sscanf(FLAGS_resolution.c_str(), "%dx%d", &outputSize.x, &outputSize.y); - op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", + __LINE__, __FUNCTION__, __FILE__); // netInputSize op::Point netInputSize; nRead = sscanf(FLAGS_net_resolution.c_str(), "%dx%d", &netInputSize.x, &netInputSize.y); - op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", + __LINE__, __FUNCTION__, __FILE__); // netOutputSize const auto netOutputSize = netInputSize; // poseModel @@ -100,8 +108,9 @@ int openPoseTutorialPose2() // Step 3 - Initialize all required classes op::CvMatToOpInput cvMatToOpInput{netInputSize, FLAGS_num_scales, (float)FLAGS_scale_gap}; op::CvMatToOpOutput cvMatToOpOutput{outputSize}; - std::shared_ptr poseExtractorPtr = std::make_shared(netInputSize, netOutputSize, outputSize, FLAGS_num_scales, - poseModel, FLAGS_model_folder, FLAGS_num_gpu_start); + std::shared_ptr poseExtractorPtr = std::make_shared(netInputSize, netOutputSize, outputSize, + FLAGS_num_scales, poseModel, + FLAGS_model_folder, FLAGS_num_gpu_start); op::PoseRenderer poseRenderer{netOutputSize, outputSize, poseModel, poseExtractorPtr, (float)FLAGS_alpha_pose, (float)FLAGS_alpha_heatmap}; poseRenderer.setElementToRender(FLAGS_part_to_show); op::OpOutputToCvMat opOutputToCvMat{outputSize}; diff --git a/examples/tutorial_thread/1_openpose_read_and_display.cpp b/examples/tutorial_thread/1_openpose_read_and_display.cpp index 11437cf3..76907cc9 100644 --- a/examples/tutorial_thread/1_openpose_read_and_display.cpp +++ b/examples/tutorial_thread/1_openpose_read_and_display.cpp @@ -21,19 +21,23 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_int32(camera, 0, "The camera index for cv::VideoCapture. Integer in the range [0, 9]."); DEFINE_string(camera_resolution, "1280x720", "Size of the camera frames to ask for."); -DEFINE_string(video, "", "Use a video file instead of the camera. Use `examples/media/video.avi` for our default example video."); -DEFINE_string(image_dir, "", "Process a directory of images. Use `examples/media/` for our default example folder with 20 images."); +DEFINE_string(video, "", "Use a video file instead of the camera. Use `examples/media/video.avi` for our default" + " example video."); +DEFINE_string(image_dir, "", "Process a directory of images. Use `examples/media/` for our default example folder with 20" + " images."); // OpenPose -DEFINE_string(resolution, "1280x720", "The image resolution (display). Use \"-1x-1\" to force the program to use the default images resolution."); +DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" + " default images resolution."); // Consumer DEFINE_bool(fullscreen, false, "Run in full-screen mode (press f during runtime to toggle)."); -DEFINE_bool(process_real_time, false, "Enable to keep the original source frame rate (e.g. for video). If the processing time is too long, it will skip frames. If it is" - " too fast, it will slow it down."); +DEFINE_bool(process_real_time, false, "Enable to keep the original source frame rate (e.g. for video). If the processing time is" + " too long, it will skip frames. If it is too fast, it will slow it down."); // Determine type of frame source op::ProducerType gflagsToProducerType(const std::string& imageDirectory, const std::string& videoPath, const int webcamIndex) @@ -56,7 +60,8 @@ op::ProducerType gflagsToProducerType(const std::string& imageDirectory, const s return op::ProducerType::Webcam; } -std::shared_ptr gflagsToProducer(const std::string& imageDirectory, const std::string& videoPath, const int webcamIndex, const op::Point webcamResolution) +std::shared_ptr gflagsToProducer(const std::string& imageDirectory, const std::string& videoPath, const int webcamIndex, + const op::Point webcamResolution) { op::log("", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); const auto type = gflagsToProducerType(imageDirectory, videoPath, webcamIndex); @@ -81,11 +86,13 @@ std::tuple, op::Point, std::shared_ptr> gflags // cameraFrameSize op::Point cameraFrameSize; auto nRead = sscanf(FLAGS_camera_resolution.c_str(), "%dx%d", &cameraFrameSize.x, &cameraFrameSize.y); - op::checkE(nRead, 2, "Error, camera resolution format (" + FLAGS_camera_resolution + ") invalid, should be e.g., 1280x720", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, camera resolution format (" + FLAGS_camera_resolution + ") invalid, should be e.g., 1280x720", + __LINE__, __FUNCTION__, __FILE__); // outputSize op::Point outputSize; nRead = sscanf(FLAGS_resolution.c_str(), "%dx%d", &outputSize.x, &outputSize.y); - op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, camera resolution format (" + FLAGS_camera_resolution + ") invalid, should be e.g., 1280x720", + __LINE__, __FUNCTION__, __FILE__); // producerType const auto producerSharedPtr = gflagsToProducer(FLAGS_image_dir, FLAGS_video, FLAGS_camera, cameraFrameSize); @@ -121,7 +128,8 @@ int openPoseTutorialThread1() if (producerSize.area() > 0) outputSize = producerSize; else - op::error("Output resolution = input resolution not valid for image reading (size might change between images).", __LINE__, __FUNCTION__, __FILE__); + op::error("Output resolution = input resolution not valid for image reading (size might change between images).", + __LINE__, __FUNCTION__, __FILE__); } // Step 4 - Setting thread workers && manager typedef std::vector TypedefDatumsNoPtr; @@ -138,7 +146,8 @@ int openPoseTutorialThread1() // ------------------------- CONFIGURING THREADING ------------------------- // In this simple multi-thread example, we will do the following: // 3 (virtual) queues: 0, 1, 2 - // 1 real queue: 1. The first and last queue ids (in this case 0 and 2) are not actual queues, but the beginning and end of the processing sequence + // 1 real queue: 1. The first and last queue ids (in this case 0 and 2) are not actual queues, but the beginning and end of the processing + // sequence // 2 threads: 0, 1 // wDatumProducer will generate frames (there is no real queue 0) and push them on queue 1 // wGui will pop frames from queue 1 and process them (there is no real queue 2) diff --git a/examples/tutorial_thread/2_user_processing_function.cpp b/examples/tutorial_thread/2_user_processing_function.cpp index faef043d..9ca9b7cc 100644 --- a/examples/tutorial_thread/2_user_processing_function.cpp +++ b/examples/tutorial_thread/2_user_processing_function.cpp @@ -22,19 +22,23 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_int32(camera, 0, "The camera index for cv::VideoCapture. Integer in the range [0, 9]."); DEFINE_string(camera_resolution, "1280x720", "Size of the camera frames to ask for."); -DEFINE_string(video, "", "Use a video file instead of the camera. Use `examples/media/video.avi` for our default example video."); -DEFINE_string(image_dir, "", "Process a directory of images. Use `examples/media/` for our default example folder with 20 images."); +DEFINE_string(video, "", "Use a video file instead of the camera. Use `examples/media/video.avi` for our default" + " example video."); +DEFINE_string(image_dir, "", "Process a directory of images. Use `examples/media/` for our default example folder with 20" + " images."); // OpenPose -DEFINE_string(resolution, "1280x720", "The image resolution (display). Use \"-1x-1\" to force the program to use the default images resolution."); +DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" + " default images resolution."); // Consumer DEFINE_bool(fullscreen, false, "Run in full-screen mode (press f during runtime to toggle)."); -DEFINE_bool(process_real_time, false, "Enable to keep the original source frame rate (e.g. for video). If the processing time is too long, it will skip frames. If it is" - " too fast, it will slow it down."); +DEFINE_bool(process_real_time, false, "Enable to keep the original source frame rate (e.g. for video). If the processing time is" + " too long, it will skip frames. If it is too fast, it will slow it down."); // This class can be implemented either as a template or as a simple class given // that the user usually knows which kind of data he will move between the queues, @@ -90,7 +94,8 @@ op::ProducerType gflagsToProducerType(const std::string& imageDirectory, const s return op::ProducerType::Webcam; } -std::shared_ptr gflagsToProducer(const std::string& imageDirectory, const std::string& videoPath, const int webcamIndex, const op::Point webcamResolution) +std::shared_ptr gflagsToProducer(const std::string& imageDirectory, const std::string& videoPath, const int webcamIndex, + const op::Point webcamResolution) { op::log("", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); const auto type = gflagsToProducerType(imageDirectory, videoPath, webcamIndex); @@ -115,11 +120,13 @@ std::tuple, op::Point, std::shared_ptr> gflags // cameraFrameSize op::Point cameraFrameSize; auto nRead = sscanf(FLAGS_camera_resolution.c_str(), "%dx%d", &cameraFrameSize.x, &cameraFrameSize.y); - op::checkE(nRead, 2, "Error, camera resolution format (" + FLAGS_camera_resolution + ") invalid, should be e.g., 1280x720", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, camera resolution format (" + FLAGS_camera_resolution + ") invalid, should be e.g., 1280x720", + __LINE__, __FUNCTION__, __FILE__); // outputSize op::Point outputSize; nRead = sscanf(FLAGS_resolution.c_str(), "%dx%d", &outputSize.x, &outputSize.y); - op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, camera resolution format (" + FLAGS_camera_resolution + ") invalid, should be e.g., 1280x720", + __LINE__, __FUNCTION__, __FILE__); // producerType const auto producerSharedPtr = gflagsToProducer(FLAGS_image_dir, FLAGS_video, FLAGS_camera, cameraFrameSize); @@ -155,7 +162,8 @@ int openPoseTutorialThread2() if (producerSize.area() > 0) outputSize = producerSize; else - op::error("Output resolution = input resolution not valid for image reading (size might change between images).", __LINE__, __FUNCTION__, __FILE__); + op::error("Output resolution = input resolution not valid for image reading (size might change between images).", + __LINE__, __FUNCTION__, __FILE__); } // Step 4 - Setting thread workers && manager typedef std::vector TypedefDatumsNoPtr; @@ -174,7 +182,8 @@ int openPoseTutorialThread2() // ------------------------- CONFIGURING THREADING ------------------------- // In this simple multi-thread example, we will do the following: // 3 (virtual) queues: 0, 1, 2 - // 1 real queue: 1. The first and last queue ids (in this case 0 and 2) are not actual queues, but the beginning and end of the processing sequence + // 1 real queue: 1. The first and last queue ids (in this case 0 and 2) are not actual queues, but the beginning and end of the processing + // sequence // 2 threads: 0, 1 // wDatumProducer will generate frames (there is no real queue 0) and push them on queue 1 // wGui will pop frames from queue 1 and process them (there is no real queue 2) diff --git a/examples/tutorial_thread/3_user_input_processing_and_output.cpp b/examples/tutorial_thread/3_user_input_processing_and_output.cpp index afefbc1a..b63ed618 100644 --- a/examples/tutorial_thread/3_user_input_processing_and_output.cpp +++ b/examples/tutorial_thread/3_user_input_processing_and_output.cpp @@ -27,8 +27,9 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_string(image_dir, "examples/media/", "Process a directory of images."); // Consumer @@ -183,7 +184,8 @@ int openPoseTutorialThread3() // ------------------------- CONFIGURING THREADING ------------------------- // In this simple multi-thread example, we will do the following: // 3 (virtual) queues: 0, 1, 2 - // 1 real queue: 1. The first and last queue ids (in this case 0 and 2) are not actual queues, but the beginning and end of the processing sequence + // 1 real queue: 1. The first and last queue ids (in this case 0 and 2) are not actual queues, but the beginning and end of the processing + // sequence // 2 threads: 0, 1 // wUserInput will generate frames (there is no real queue 0) and push them on queue 1 // wGui will pop frames from queue 1 and process them (there is no real queue 2) diff --git a/examples/tutorial_thread/4_user_input_processing_output_and_datum.cpp b/examples/tutorial_thread/4_user_input_processing_output_and_datum.cpp index 6d590a96..a0fb9778 100644 --- a/examples/tutorial_thread/4_user_input_processing_output_and_datum.cpp +++ b/examples/tutorial_thread/4_user_input_processing_output_and_datum.cpp @@ -27,8 +27,9 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_string(image_dir, "examples/media/", "Process a directory of images."); // Consumer @@ -36,7 +37,8 @@ DEFINE_bool(fullscreen, false, "Run in full-screen mode // If the user needs his own variables, he can inherit the op::Datum struct and add them -// UserDatum can be directly used by the OpenPose wrapper because it inherits from op::Datum, just define Wrapper instead of Wrapper +// UserDatum can be directly used by the OpenPose wrapper because it inherits from op::Datum, just define Wrapper instead of +// Wrapper struct UserDatum : public op::Datum { bool boolThatUserNeedsForSomeReason; @@ -195,7 +197,8 @@ int openPoseTutorialThread4() // ------------------------- CONFIGURING THREADING ------------------------- // In this simple multi-thread example, we will do the following: // 3 (virtual) queues: 0, 1, 2 - // 1 real queue: 1. The first and last queue ids (in this case 0 and 2) are not actual queues, but the beginning and end of the processing sequence + // 1 real queue: 1. The first and last queue ids (in this case 0 and 2) are not actual queues, but the beginning and end of the processing + // sequence // 2 threads: 0, 1 // wUserInput will generate frames (there is no real queue 0) and push them on queue 1 // wGui will pop frames from queue 1 and process them (there is no real queue 2) diff --git a/examples/tutorial_wrapper/1_user_asynchronous.cpp b/examples/tutorial_wrapper/1_user_asynchronous.cpp index b6ca99b6..4aafee84 100644 --- a/examples/tutorial_wrapper/1_user_asynchronous.cpp +++ b/examples/tutorial_wrapper/1_user_asynchronous.cpp @@ -14,12 +14,12 @@ // This file should only be used for the user to take specific examples. // C++ std library dependencies -#include // std::atomic +#include #include // `std::chrono::` functions and classes, e.g. std::chrono::milliseconds #include // sscanf -#include // std::string +#include #include // std::this_thread -#include // std::vector +#include // Other 3rdpary depencencies #include // DEFINE_bool, DEFINE_int32, DEFINE_int64, DEFINE_uint64, DEFINE_double, DEFINE_string #include // google::InitGoogleLogging @@ -43,67 +43,87 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_string(image_dir, "examples/media/", "Process a directory of images."); // OpenPose DEFINE_string(model_folder, "models/", "Folder where the pose models (COCO and MPI) are located."); -DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the default images resolution."); -DEFINE_int32(num_gpu, -1, "The number of GPU devices to use. If negative, it will use all the available GPUs in your machine."); +DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" + " default images resolution."); +DEFINE_int32(num_gpu, -1, "The number of GPU devices to use. If negative, it will use all the available GPUs in your" + " machine."); DEFINE_int32(num_gpu_start, 0, "GPU device start number."); -DEFINE_int32(keypoint_scale, 0, "Scaling of the (x,y) coordinates of the final pose data array, i.e. the scale of the (x,y) coordinates that will be saved" - " with the `write_keypoint` & `write_keypoint_json` flags. Select `0` to scale it to the original source resolution, `1`to scale" - " it to the net output size (set with `net_resolution`), `2` to scale it to the final output size (set with `resolution`)," - " `3` to scale it in the range [0,1], and 4 for range [-1,1]. Non related with `num_scales` and `scale_gap`."); +DEFINE_int32(keypoint_scale, 0, "Scaling of the (x,y) coordinates of the final pose data array, i.e. the scale of the (x,y)" + " coordinates that will be saved with the `write_keypoint` & `write_keypoint_json` flags." + " Select `0` to scale it to the original source resolution, `1`to scale it to the net output" + " size (set with `net_resolution`), `2` to scale it to the final output size (set with" + " `resolution`), `3` to scale it in the range [0,1], and 4 for range [-1,1]. Non related" + " with `num_scales` and `scale_gap`."); // OpenPose Body Pose DEFINE_string(model_pose, "COCO", "Model to be used (e.g. COCO, MPI, MPI_4_layers)."); -DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased, the speed increases."); +DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased," + " the speed increases."); DEFINE_int32(num_scales, 1, "Number of scales to average."); -DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you want to change the initial scale," - " you actually want to multiply the `net_resolution` by your desired initial scale."); -DEFINE_bool(heatmaps_add_parts, false, "If true, it will add the body part heatmaps to the final op::Datum::poseHeatMaps array (program speed will decrease). Not" - " required for our library, enable it only if you intend to process this information later. If more than one `add_heatmaps_X`" - " flag is enabled, it will place then in sequential memory order: body parts + bkg + PAFs. It will follow the order on" - " POSE_BODY_PART_MAPPING in `include/openpose/pose/poseParameters.hpp`."); -DEFINE_bool(heatmaps_add_bkg, false, "Same functionality as `add_heatmaps_parts`, but adding the heatmap corresponding to background."); +DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you" + " want to change the initial scale, you actually want to multiply the `net_resolution` by" + " your desired initial scale."); +DEFINE_bool(heatmaps_add_parts, false, "If true, it will add the body part heatmaps to the final op::Datum::poseHeatMaps array" + " (program speed will decrease). Not required for our library, enable it only if you intend" + " to process this information later. If more than one `add_heatmaps_X` flag is enabled, it" + " will place then in sequential memory order: body parts + bkg + PAFs. It will follow the" + " order on POSE_BODY_PART_MAPPING in `include/openpose/pose/poseParameters.hpp`."); +DEFINE_bool(heatmaps_add_bkg, false, "Same functionality as `add_heatmaps_parts`, but adding the heatmap corresponding to" + " background."); DEFINE_bool(heatmaps_add_PAFs, false, "Same functionality as `add_heatmaps_parts`, but adding the PAFs."); -DEFINE_int32(heatmaps_scale, 2, "Set 0 to scale op::Datum::poseHeatMaps in the range [0,1], 1 for [-1,1]; and 2 for integer rounded [0,255]."); +DEFINE_int32(heatmaps_scale, 2, "Set 0 to scale op::Datum::poseHeatMaps in the range [0,1], 1 for [-1,1]; and 2 for integer" + " rounded [0,255]."); // OpenPose Face -DEFINE_bool(face, false, "Enables face keypoint detection. It will share some parameters from the body pose, e.g. `model_folder`."); -DEFINE_string(face_net_resolution, "368x368", "Multiples of 16. Analogous to `net_resolution` but applied to the face keypoint detector. 320x320 usually works fine" - " while giving a substantial speed up when multiple faces on the image."); +DEFINE_bool(face, false, "Enables face keypoint detection. It will share some parameters from the body pose, e.g." + " `model_folder`."); +DEFINE_string(face_net_resolution, "368x368", "Multiples of 16. Analogous to `net_resolution` but applied to the face keypoint detector." + " 320x320 usually works fine while giving a substantial speed up when multiple faces on the" + " image."); // OpenPose Hand // OpenPose Rendering DEFINE_int32(part_to_show, 0, "Part to show from the start."); -DEFINE_bool(disable_blending, false, "If blending is enabled, it will merge the results with the original frame. If disabled, it will only display the results."); +DEFINE_bool(disable_blending, false, "If blending is enabled, it will merge the results with the original frame. If disabled, it" + " will only display the results."); // OpenPose Rendering Pose -DEFINE_bool(no_render_pose, false, "If false, it will fill both `outputData` and `cvOutputData` with the original image + desired part to be shown." - " If true, it will leave them empty."); -DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +DEFINE_int32(render_pose, 1, "Set to 0 for no rendering, 1 for CPU rendering (slightly faster), and 2 for GPU rendering" + " (slower but greater functionality, e.g. `alpha_X` flags). If rendering is enabled, it will" + " render both `outputData` and `cvOutputData` with the original image and desired body part" + " to be shown (i.e. keypoints, heat maps or PAFs)."); +DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will" + " hide it. Only valid for GPU rendering."); +DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the" + " heatmap, 0 will only show the frame. Only valid for GPU rendering."); // OpenPose Rendering Face -DEFINE_bool(no_render_face, false, "Analogous to `no_render_pose` but applied to the face keypoints and heat maps."); -DEFINE_double(alpha_face, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -DEFINE_double(alpha_heatmap_face, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +DEFINE_int32(render_face, -1, "Analogous to `render_pose` but applied to the face. Extra option: -1 to use the same" + " configuration that `render_pose` is using."); +DEFINE_double(alpha_face, 0.6, "Analogous to `alpha_pose` but applied to face."); +DEFINE_double(alpha_heatmap_face, 0.7, "Analogous to `alpha_heatmap` but applied to face."); // Result Saving DEFINE_string(write_images, "", "Directory to write rendered frames in `write_images_format` image format."); -DEFINE_string(write_images_format, "png", "File extension and format for `write_images`, e.g. png, jpg or bmp. Check the OpenCV function cv::imwrite" - " for all compatible extensions."); -DEFINE_string(write_video, "", "Full file path to write rendered frames in motion JPEG video format. It might fail if the final path does" - " not finish in `.avi`. It internally uses cv::VideoWriter."); -DEFINE_string(write_keypoint, "", "Directory to write the people body pose keypoint data. Desired format on `write_keypoint_format`."); -DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml and yml. Json not available for OpenCV < 3.0," - " use `write_keypoint_json` instead."); -DEFINE_string(write_keypoint_json, "", "Directory to write people pose data with *.json format, compatible with any OpenCV version."); +DEFINE_string(write_images_format, "png", "File extension and format for `write_images`, e.g. png, jpg or bmp. Check the OpenCV" + " function cv::imwrite for all compatible extensions."); +DEFINE_string(write_video, "", "Full file path to write rendered frames in motion JPEG video format. It might fail if the" + " final path does not finish in `.avi`. It internally uses cv::VideoWriter."); +DEFINE_string(write_keypoint, "", "Directory to write the people pose keypoint data. Format with `write_keypoint_format`."); +DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml & yml. Json not available" + " for OpenCV < 3.0, use `write_keypoint_json` instead."); +DEFINE_string(write_keypoint_json, "", "Directory to write people pose data in *.json format, compatible with any OpenCV version."); DEFINE_string(write_coco_json, "", "Full file path to write people pose data with *.json COCO validation format."); -DEFINE_string(write_heatmaps, "", "Directory to write heatmaps with *.png format. At least 1 `add_heatmaps_X` flag must be enabled."); -DEFINE_string(write_heatmaps_format, "png", "File extension and format for `write_heatmaps`, analogous to `write_images_format`. Recommended `png` or any compressed and" - " lossless format."); +DEFINE_string(write_heatmaps, "", "Directory to write heatmaps in *.png format. At least 1 `add_heatmaps_X` flag must be" + " enabled."); +DEFINE_string(write_heatmaps_format, "png", "File extension and format for `write_heatmaps`, analogous to `write_images_format`." + " Recommended `png` or any compressed and lossless format."); // If the user needs his own variables, he can inherit the op::Datum struct and add them -// UserDatum can be directly used by the OpenPose wrapper because it inherits from op::Datum, just define Wrapper instead of Wrapper +// UserDatum can be directly used by the OpenPose wrapper because it inherits from op::Datum, just define Wrapper instead of +// Wrapper struct UserDatum : public op::Datum { bool boolThatUserNeedsForSomeReason; @@ -224,41 +244,62 @@ op::ScaleMode gflagToScaleMode(const int keypointScale) return op::ScaleMode::PlusMinusOne; else { - const std::string message = "String does not correspond to any scale mode: (0, 1, 2, 3, 4) for (InputResolution, NetOutputResolution, OutputResolution, ZeroToOne, PlusMinusOne)."; + const std::string message = "String does not correspond to any scale mode: (0, 1, 2, 3, 4) for (InputResolution," + " NetOutputResolution, OutputResolution, ZeroToOne, PlusMinusOne)."; op::error(message, __LINE__, __FUNCTION__, __FILE__); return op::ScaleMode::InputResolution; } } -std::vector gflagToHeatMaps(const bool heatmaps_add_parts, const bool heatmaps_add_bkg, const bool heatmaps_add_PAFs) +std::vector gflagToHeatMaps(const bool heatMapsAddParts, const bool heatMapsAddBkg, const bool heatMapsAddPAFs) { - std::vector heatMapTypes; - if (heatmaps_add_parts) + if (heatMapsAddParts) heatMapTypes.emplace_back(op::HeatMapType::Parts); - if (heatmaps_add_bkg) + if (heatMapsAddBkg) heatMapTypes.emplace_back(op::HeatMapType::Background); - if (heatmaps_add_PAFs) + if (heatMapsAddPAFs) heatMapTypes.emplace_back(op::HeatMapType::PAFs); return heatMapTypes; } +op::RenderMode gflagToRenderMode(const int renderFlag, const int renderPoseFlag = -2) +{ + if (renderFlag == -1 && renderPoseFlag != -2) + return gflagToRenderMode(renderPoseFlag, -2); + else if (renderFlag == 0) + return op::RenderMode::None; + else if (renderFlag == 1) + return op::RenderMode::Cpu; + else if (renderFlag == 2) + return op::RenderMode::Gpu; + else + { + op::error("Undefined RenderMode selected.", __LINE__, __FUNCTION__, __FILE__); + return op::RenderMode::None; + } +} + // Google flags into program variables -std::tuple, op::Point, op::Point, op::PoseModel, op::ScaleMode, std::vector, op::ScaleMode> gflagsToOpParameters() +std::tuple, op::Point, op::Point, op::PoseModel, op::ScaleMode, std::vector, + op::ScaleMode> gflagsToOpParameters() { op::log("", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); // outputSize op::Point outputSize; auto nRead = sscanf(FLAGS_resolution.c_str(), "%dx%d", &outputSize.x, &outputSize.y); - op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", + __LINE__, __FUNCTION__, __FILE__); // netInputSize op::Point netInputSize; nRead = sscanf(FLAGS_net_resolution.c_str(), "%dx%d", &netInputSize.x, &netInputSize.y); - op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", + __LINE__, __FUNCTION__, __FILE__); // faceNetInputSize op::Point faceNetInputSize; nRead = sscanf(FLAGS_face_net_resolution.c_str(), "%dx%d", &faceNetInputSize.x, &faceNetInputSize.y); - op::checkE(nRead, 2, "Error, face net resolution format (" + FLAGS_face_net_resolution + ") invalid, should be e.g., 368x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, face net resolution format (" + FLAGS_face_net_resolution + + ") invalid, should be e.g., 368x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); // poseModel const auto poseModel = gflagToPoseModel(FLAGS_model_pose); // keypointScale @@ -266,7 +307,8 @@ std::tuple, op::Point, op::Point, op::PoseModel, op::Sc // heatmaps to add const auto heatMapTypes = gflagToHeatMaps(FLAGS_heatmaps_add_parts, FLAGS_heatmaps_add_bkg, FLAGS_heatmaps_add_PAFs); op::check(FLAGS_heatmaps_scale >= 0 && FLAGS_heatmaps_scale <= 2, "Non valid `heatmaps_scale`.", __LINE__, __FUNCTION__, __FILE__); - const auto heatMapScale = (FLAGS_heatmaps_scale == 0 ? op::ScaleMode::PlusMinusOne : (FLAGS_heatmaps_scale == 1 ? op::ScaleMode::ZeroToOne : op::ScaleMode::UnsignedChar )); + const auto heatMapScale = (FLAGS_heatmaps_scale == 0 ? op::ScaleMode::PlusMinusOne + : (FLAGS_heatmaps_scale == 1 ? op::ScaleMode::ZeroToOne : op::ScaleMode::UnsignedChar )); // return return std::make_tuple(outputSize, netInputSize, faceNetInputSize, poseModel, keypointScale, heatMapTypes, heatMapScale); } @@ -297,16 +339,19 @@ int openPoseTutorialWrapper1() const bool displayGui = false; const bool guiVerbose = false; const bool fullScreen = false; - const op::WrapperStructPose wrapperStructPose{netInputSize, outputSize, keypointScale, FLAGS_num_gpu, FLAGS_num_gpu_start, FLAGS_num_scales, (float)FLAGS_scale_gap, - !FLAGS_no_render_pose, poseModel, !FLAGS_disable_blending, (float)FLAGS_alpha_pose, (float)FLAGS_alpha_heatmap, + const op::WrapperStructPose wrapperStructPose{netInputSize, outputSize, keypointScale, FLAGS_num_gpu, FLAGS_num_gpu_start, + FLAGS_num_scales, (float)FLAGS_scale_gap, gflagToRenderMode(FLAGS_render_pose), poseModel, + !FLAGS_disable_blending, (float)FLAGS_alpha_pose, (float)FLAGS_alpha_heatmap, FLAGS_part_to_show, FLAGS_model_folder, heatMapTypes, heatMapScale}; - // (Experimental, function and class names might change in next versions) Face configuration (use op::WrapperStructFace{} to disable it) - const op::WrapperStructFace wrapperStructFace{FLAGS_face, faceNetInputSize, !FLAGS_no_render_face, (float)FLAGS_alpha_face, (float)FLAGS_alpha_heatmap_face}; - // (Experimental, function and class names might change in next versions) Hand configuration (use op::WrapperStructFace{} to disable it) + // Face configuration (use op::WrapperStructFace{} to disable it) + const op::WrapperStructFace wrapperStructFace{FLAGS_face, faceNetInputSize, gflagToRenderMode(FLAGS_render_face, FLAGS_render_pose), + (float)FLAGS_alpha_face, (float)FLAGS_alpha_heatmap_face}; + // Hand configuration (use op::WrapperStructHand{} to disable it) const op::experimental::WrapperStructHand wrapperStructHand{false}; // Consumer (comment or use default argument to disable any output) - const op::WrapperStructOutput wrapperStructOutput{displayGui, guiVerbose, fullScreen, FLAGS_write_keypoint, op::stringToDataFormat(FLAGS_write_keypoint_format), - FLAGS_write_keypoint_json, FLAGS_write_coco_json, FLAGS_write_images, FLAGS_write_images_format, FLAGS_write_video, + const op::WrapperStructOutput wrapperStructOutput{displayGui, guiVerbose, fullScreen, FLAGS_write_keypoint, + op::stringToDataFormat(FLAGS_write_keypoint_format), FLAGS_write_keypoint_json, + FLAGS_write_coco_json, FLAGS_write_images, FLAGS_write_images_format, FLAGS_write_video, FLAGS_write_heatmaps, FLAGS_write_heatmaps_format}; // Configure wrapper opWrapper.configure(wrapperStructPose, wrapperStructFace, wrapperStructHand, op::WrapperStructInput{}, wrapperStructOutput); @@ -339,7 +384,8 @@ int openPoseTutorialWrapper1() opWrapper.stop(); // Measuring total time - const auto totalTimeSec = (double)std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-timerBegin).count() * 1e-9; + const auto now = std::chrono::high_resolution_clock::now(); + const auto totalTimeSec = (double)std::chrono::duration_cast(now-timerBegin).count() * 1e-9; const auto message = "Real-time pose estimation demo successfully finished. Total time: " + std::to_string(totalTimeSec) + " seconds."; op::log(message, op::Priority::Max); diff --git a/examples/tutorial_wrapper/2_user_synchronous.cpp b/examples/tutorial_wrapper/2_user_synchronous.cpp index 3a5f00d1..571bda0e 100644 --- a/examples/tutorial_wrapper/2_user_synchronous.cpp +++ b/examples/tutorial_wrapper/2_user_synchronous.cpp @@ -14,12 +14,12 @@ // This file should only be used for the user to take specific examples. // C++ std library dependencies -#include // std::atomic +#include #include // `std::chrono::` functions and classes, e.g. std::chrono::milliseconds #include // sscanf -#include // std::string +#include #include // std::this_thread -#include // std::vector +#include // Other 3rdpary depencencies #include // DEFINE_bool, DEFINE_int32, DEFINE_int64, DEFINE_uint64, DEFINE_double, DEFINE_string #include // google::InitGoogleLogging @@ -43,67 +43,87 @@ // Note: This command will show you flags for other unnecessary 3rdparty files. Check only the flags for the OpenPose // executable. E.g. for `openpose.bin`, look for `Flags from examples/openpose/openpose.cpp:`. // Debugging -DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while 255 will not output any." - " Current OpenPose library messages are in the range 0-4: 1 for low priority messages and 4 for important ones."); +DEFINE_int32(logging_level, 3, "The logging level. Integer in the range [0, 255]. 0 will output any log() message, while" + " 255 will not output any. Current OpenPose library messages are in the range 0-4: 1 for" + " low priority messages and 4 for important ones."); // Producer DEFINE_string(image_dir, "examples/media/", "Process a directory of images."); // OpenPose DEFINE_string(model_folder, "models/", "Folder where the pose models (COCO and MPI) are located."); -DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the default images resolution."); -DEFINE_int32(num_gpu, -1, "The number of GPU devices to use. If negative, it will use all the available GPUs in your machine."); +DEFINE_string(resolution, "1280x720", "The image resolution (display and output). Use \"-1x-1\" to force the program to use the" + " default images resolution."); +DEFINE_int32(num_gpu, -1, "The number of GPU devices to use. If negative, it will use all the available GPUs in your" + " machine."); DEFINE_int32(num_gpu_start, 0, "GPU device start number."); -DEFINE_int32(keypoint_scale, 0, "Scaling of the (x,y) coordinates of the final pose data array, i.e. the scale of the (x,y) coordinates that will be saved" - " with the `write_keypoint` & `write_keypoint_json` flags. Select `0` to scale it to the original source resolution, `1`to scale" - " it to the net output size (set with `net_resolution`), `2` to scale it to the final output size (set with `resolution`)," - " `3` to scale it in the range [0,1], and 4 for range [-1,1]. Non related with `num_scales` and `scale_gap`."); +DEFINE_int32(keypoint_scale, 0, "Scaling of the (x,y) coordinates of the final pose data array, i.e. the scale of the (x,y)" + " coordinates that will be saved with the `write_keypoint` & `write_keypoint_json` flags." + " Select `0` to scale it to the original source resolution, `1`to scale it to the net output" + " size (set with `net_resolution`), `2` to scale it to the final output size (set with" + " `resolution`), `3` to scale it in the range [0,1], and 4 for range [-1,1]. Non related" + " with `num_scales` and `scale_gap`."); // OpenPose Body Pose DEFINE_string(model_pose, "COCO", "Model to be used (e.g. COCO, MPI, MPI_4_layers)."); -DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased, the speed increases."); +DEFINE_string(net_resolution, "656x368", "Multiples of 16. If it is increased, the accuracy usually increases. If it is decreased," + " the speed increases."); DEFINE_int32(num_scales, 1, "Number of scales to average."); -DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you want to change the initial scale," - " you actually want to multiply the `net_resolution` by your desired initial scale."); -DEFINE_bool(heatmaps_add_parts, false, "If true, it will add the body part heatmaps to the final op::Datum::poseHeatMaps array (program speed will decrease). Not" - " required for our library, enable it only if you intend to process this information later. If more than one `add_heatmaps_X`" - " flag is enabled, it will place then in sequential memory order: body parts + bkg + PAFs. It will follow the order on" - " POSE_BODY_PART_MAPPING in `include/openpose/pose/poseParameters.hpp`."); -DEFINE_bool(heatmaps_add_bkg, false, "Same functionality as `add_heatmaps_parts`, but adding the heatmap corresponding to background."); +DEFINE_double(scale_gap, 0.3, "Scale gap between scales. No effect unless num_scales>1. Initial scale is always 1. If you" + " want to change the initial scale, you actually want to multiply the `net_resolution` by" + " your desired initial scale."); +DEFINE_bool(heatmaps_add_parts, false, "If true, it will add the body part heatmaps to the final op::Datum::poseHeatMaps array" + " (program speed will decrease). Not required for our library, enable it only if you intend" + " to process this information later. If more than one `add_heatmaps_X` flag is enabled, it" + " will place then in sequential memory order: body parts + bkg + PAFs. It will follow the" + " order on POSE_BODY_PART_MAPPING in `include/openpose/pose/poseParameters.hpp`."); +DEFINE_bool(heatmaps_add_bkg, false, "Same functionality as `add_heatmaps_parts`, but adding the heatmap corresponding to" + " background."); DEFINE_bool(heatmaps_add_PAFs, false, "Same functionality as `add_heatmaps_parts`, but adding the PAFs."); -DEFINE_int32(heatmaps_scale, 2, "Set 0 to scale op::Datum::poseHeatMaps in the range [0,1], 1 for [-1,1]; and 2 for integer rounded [0,255]."); +DEFINE_int32(heatmaps_scale, 2, "Set 0 to scale op::Datum::poseHeatMaps in the range [0,1], 1 for [-1,1]; and 2 for integer" + " rounded [0,255]."); // OpenPose Face -DEFINE_bool(face, false, "Enables face keypoint detection. It will share some parameters from the body pose, e.g. `model_folder`."); -DEFINE_string(face_net_resolution, "368x368", "Multiples of 16. Analogous to `net_resolution` but applied to the face keypoint detector. 320x320 usually works fine" - " while giving a substantial speed up when multiple faces on the image."); +DEFINE_bool(face, false, "Enables face keypoint detection. It will share some parameters from the body pose, e.g." + " `model_folder`."); +DEFINE_string(face_net_resolution, "368x368", "Multiples of 16. Analogous to `net_resolution` but applied to the face keypoint detector." + " 320x320 usually works fine while giving a substantial speed up when multiple faces on the" + " image."); // OpenPose Hand // OpenPose Rendering DEFINE_int32(part_to_show, 0, "Part to show from the start."); -DEFINE_bool(disable_blending, false, "If blending is enabled, it will merge the results with the original frame. If disabled, it will only display the results."); +DEFINE_bool(disable_blending, false, "If blending is enabled, it will merge the results with the original frame. If disabled, it" + " will only display the results."); // OpenPose Rendering Pose -DEFINE_bool(no_render_pose, false, "If false, it will fill both `outputData` and `cvOutputData` with the original image + desired part to be shown." - " If true, it will leave them empty."); -DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +DEFINE_int32(render_pose, 1, "Set to 0 for no rendering, 1 for CPU rendering (slightly faster), and 2 for GPU rendering" + " (slower but greater functionality, e.g. `alpha_X` flags). If rendering is enabled, it will" + " render both `outputData` and `cvOutputData` with the original image and desired body part" + " to be shown (i.e. keypoints, heat maps or PAFs)."); +DEFINE_double(alpha_pose, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will" + " hide it. Only valid for GPU rendering."); +DEFINE_double(alpha_heatmap, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the" + " heatmap, 0 will only show the frame. Only valid for GPU rendering."); // OpenPose Rendering Face -DEFINE_bool(no_render_face, false, "Analogous to `no_render_pose` but applied to the face keypoints and heat maps."); -DEFINE_double(alpha_face, 0.6, "Blending factor (range 0-1) for the body part rendering. 1 will show it completely, 0 will hide it."); -DEFINE_double(alpha_heatmap_face, 0.7, "Blending factor (range 0-1) between heatmap and original frame. 1 will only show the heatmap, 0 will only show the frame."); +DEFINE_int32(render_face, -1, "Analogous to `render_pose` but applied to the face. Extra option: -1 to use the same" + " configuration that `render_pose` is using."); +DEFINE_double(alpha_face, 0.6, "Analogous to `alpha_pose` but applied to face."); +DEFINE_double(alpha_heatmap_face, 0.7, "Analogous to `alpha_heatmap` but applied to face."); // Result Saving DEFINE_string(write_images, "", "Directory to write rendered frames in `write_images_format` image format."); -DEFINE_string(write_images_format, "png", "File extension and format for `write_images`, e.g. png, jpg or bmp. Check the OpenCV function cv::imwrite" - " for all compatible extensions."); -DEFINE_string(write_video, "", "Full file path to write rendered frames in motion JPEG video format. It might fail if the final path does" - " not finish in `.avi`. It internally uses cv::VideoWriter."); -DEFINE_string(write_keypoint, "", "Directory to write the people body pose keypoint data. Desired format on `write_keypoint_format`."); -DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml and yml. Json not available for OpenCV < 3.0," - " use `write_keypoint_json` instead."); -DEFINE_string(write_keypoint_json, "", "Directory to write people pose data with *.json format, compatible with any OpenCV version."); +DEFINE_string(write_images_format, "png", "File extension and format for `write_images`, e.g. png, jpg or bmp. Check the OpenCV" + " function cv::imwrite for all compatible extensions."); +DEFINE_string(write_video, "", "Full file path to write rendered frames in motion JPEG video format. It might fail if the" + " final path does not finish in `.avi`. It internally uses cv::VideoWriter."); +DEFINE_string(write_keypoint, "", "Directory to write the people pose keypoint data. Format with `write_keypoint_format`."); +DEFINE_string(write_keypoint_format, "yml", "File extension and format for `write_keypoint`: json, xml, yaml & yml. Json not available" + " for OpenCV < 3.0, use `write_keypoint_json` instead."); +DEFINE_string(write_keypoint_json, "", "Directory to write people pose data in *.json format, compatible with any OpenCV version."); DEFINE_string(write_coco_json, "", "Full file path to write people pose data with *.json COCO validation format."); -DEFINE_string(write_heatmaps, "", "Directory to write heatmaps with *.png format. At least 1 `add_heatmaps_X` flag must be enabled."); -DEFINE_string(write_heatmaps_format, "png", "File extension and format for `write_heatmaps`, analogous to `write_images_format`. Recommended `png` or any compressed and" - " lossless format."); +DEFINE_string(write_heatmaps, "", "Directory to write heatmaps in *.png format. At least 1 `add_heatmaps_X` flag must be" + " enabled."); +DEFINE_string(write_heatmaps_format, "png", "File extension and format for `write_heatmaps`, analogous to `write_images_format`." + " Recommended `png` or any compressed and lossless format."); // If the user needs his own variables, he can inherit the op::Datum struct and add them -// UserDatum can be directly used by the OpenPose wrapper because it inherits from op::Datum, just define Wrapper instead of Wrapper +// UserDatum can be directly used by the OpenPose wrapper because it inherits from op::Datum, just define Wrapper instead of +// Wrapper struct UserDatum : public op::Datum { bool boolThatUserNeedsForSomeReason; @@ -269,41 +289,62 @@ op::ScaleMode gflagToScaleMode(const int keypointScale) return op::ScaleMode::PlusMinusOne; else { - const std::string message = "String does not correspond to any scale mode: (0, 1, 2, 3, 4) for (InputResolution, NetOutputResolution, OutputResolution, ZeroToOne, PlusMinusOne)."; + const std::string message = "String does not correspond to any scale mode: (0, 1, 2, 3, 4) for (InputResolution," + " NetOutputResolution, OutputResolution, ZeroToOne, PlusMinusOne)."; op::error(message, __LINE__, __FUNCTION__, __FILE__); return op::ScaleMode::InputResolution; } } -std::vector gflagToHeatMaps(const bool heatmaps_add_parts, const bool heatmaps_add_bkg, const bool heatmaps_add_PAFs) +std::vector gflagToHeatMaps(const bool heatMapsAddParts, const bool heatMapsAddBkg, const bool heatMapsAddPAFs) { - std::vector heatMapTypes; - if (heatmaps_add_parts) + if (heatMapsAddParts) heatMapTypes.emplace_back(op::HeatMapType::Parts); - if (heatmaps_add_bkg) + if (heatMapsAddBkg) heatMapTypes.emplace_back(op::HeatMapType::Background); - if (heatmaps_add_PAFs) + if (heatMapsAddPAFs) heatMapTypes.emplace_back(op::HeatMapType::PAFs); return heatMapTypes; } +op::RenderMode gflagToRenderMode(const int renderFlag, const int renderPoseFlag = -2) +{ + if (renderFlag == -1 && renderPoseFlag != -2) + return gflagToRenderMode(renderPoseFlag, -2); + else if (renderFlag == 0) + return op::RenderMode::None; + else if (renderFlag == 1) + return op::RenderMode::Cpu; + else if (renderFlag == 2) + return op::RenderMode::Gpu; + else + { + op::error("Undefined RenderMode selected.", __LINE__, __FUNCTION__, __FILE__); + return op::RenderMode::None; + } +} + // Google flags into program variables -std::tuple, op::Point, op::Point, op::PoseModel, op::ScaleMode, std::vector, op::ScaleMode> gflagsToOpParameters() +std::tuple, op::Point, op::Point, op::PoseModel, op::ScaleMode, std::vector, + op::ScaleMode> gflagsToOpParameters() { op::log("", op::Priority::Low, __LINE__, __FUNCTION__, __FILE__); // outputSize op::Point outputSize; auto nRead = sscanf(FLAGS_resolution.c_str(), "%dx%d", &outputSize.x, &outputSize.y); - op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, resolution format (" + FLAGS_resolution + ") invalid, should be e.g., 960x540 ", + __LINE__, __FUNCTION__, __FILE__); // netInputSize op::Point netInputSize; nRead = sscanf(FLAGS_net_resolution.c_str(), "%dx%d", &netInputSize.x, &netInputSize.y); - op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, net resolution format (" + FLAGS_net_resolution + ") invalid, should be e.g., 656x368 (multiples of 16)", + __LINE__, __FUNCTION__, __FILE__); // faceNetInputSize op::Point faceNetInputSize; nRead = sscanf(FLAGS_face_net_resolution.c_str(), "%dx%d", &faceNetInputSize.x, &faceNetInputSize.y); - op::checkE(nRead, 2, "Error, face net resolution format (" + FLAGS_face_net_resolution + ") invalid, should be e.g., 368x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); + op::checkE(nRead, 2, "Error, face net resolution format (" + FLAGS_face_net_resolution + + ") invalid, should be e.g., 368x368 (multiples of 16)", __LINE__, __FUNCTION__, __FILE__); // poseModel const auto poseModel = gflagToPoseModel(FLAGS_model_pose); // keypointScale @@ -311,7 +352,8 @@ std::tuple, op::Point, op::Point, op::PoseModel, op::Sc // heatmaps to add const auto heatMapTypes = gflagToHeatMaps(FLAGS_heatmaps_add_parts, FLAGS_heatmaps_add_bkg, FLAGS_heatmaps_add_PAFs); op::check(FLAGS_heatmaps_scale >= 0 && FLAGS_heatmaps_scale <= 2, "Non valid `heatmaps_scale`.", __LINE__, __FUNCTION__, __FILE__); - const auto heatMapScale = (FLAGS_heatmaps_scale == 0 ? op::ScaleMode::PlusMinusOne : (FLAGS_heatmaps_scale == 1 ? op::ScaleMode::ZeroToOne : op::ScaleMode::UnsignedChar )); + const auto heatMapScale = (FLAGS_heatmaps_scale == 0 ? op::ScaleMode::PlusMinusOne + : (FLAGS_heatmaps_scale == 1 ? op::ScaleMode::ZeroToOne : op::ScaleMode::UnsignedChar )); // return return std::make_tuple(outputSize, netInputSize, faceNetInputSize, poseModel, keypointScale, heatMapTypes, heatMapScale); } @@ -359,16 +401,19 @@ int openPoseTutorialWrapper2() const bool displayGui = false; const bool guiVerbose = false; const bool fullScreen = false; - const op::WrapperStructPose wrapperStructPose{netInputSize, outputSize, keypointScale, FLAGS_num_gpu, FLAGS_num_gpu_start, FLAGS_num_scales, (float)FLAGS_scale_gap, - !FLAGS_no_render_pose, poseModel, !FLAGS_disable_blending, (float)FLAGS_alpha_pose, (float)FLAGS_alpha_heatmap, + const op::WrapperStructPose wrapperStructPose{netInputSize, outputSize, keypointScale, FLAGS_num_gpu, FLAGS_num_gpu_start, + FLAGS_num_scales, (float)FLAGS_scale_gap, gflagToRenderMode(FLAGS_render_pose), poseModel, + !FLAGS_disable_blending, (float)FLAGS_alpha_pose, (float)FLAGS_alpha_heatmap, FLAGS_part_to_show, FLAGS_model_folder, heatMapTypes, heatMapScale}; - // (Experimental, function and class names might change in next versions) Face configuration (use op::WrapperStructFace{} to disable it) - const op::WrapperStructFace wrapperStructFace{FLAGS_face, faceNetInputSize, !FLAGS_no_render_face, (float)FLAGS_alpha_face, (float)FLAGS_alpha_heatmap_face}; - // (Experimental, function and class names might change in next versions) Hand configuration (use op::WrapperStructFace{} to disable it) + // Face configuration (use op::WrapperStructFace{} to disable it) + const op::WrapperStructFace wrapperStructFace{FLAGS_face, faceNetInputSize, gflagToRenderMode(FLAGS_render_face, FLAGS_render_pose), + (float)FLAGS_alpha_face, (float)FLAGS_alpha_heatmap_face}; + // Hand configuration (use op::WrapperStructHand{} to disable it) const op::experimental::WrapperStructHand wrapperStructHand{false}; // Consumer (comment or use default argument to disable any output) - const op::WrapperStructOutput wrapperStructOutput{displayGui, guiVerbose, fullScreen, FLAGS_write_keypoint, op::stringToDataFormat(FLAGS_write_keypoint_format), - FLAGS_write_keypoint_json, FLAGS_write_coco_json, FLAGS_write_images, FLAGS_write_images_format, FLAGS_write_video, + const op::WrapperStructOutput wrapperStructOutput{displayGui, guiVerbose, fullScreen, FLAGS_write_keypoint, + op::stringToDataFormat(FLAGS_write_keypoint_format), FLAGS_write_keypoint_json, + FLAGS_write_coco_json, FLAGS_write_images, FLAGS_write_images_format, FLAGS_write_video, FLAGS_write_heatmaps, FLAGS_write_heatmaps_format}; // Configure wrapper opWrapper.configure(wrapperStructPose, wrapperStructFace, wrapperStructHand, op::WrapperStructInput{}, wrapperStructOutput); @@ -400,7 +445,8 @@ int openPoseTutorialWrapper2() // opWrapper.stop(); // Measuring total time - const auto totalTimeSec = (double)std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-timerBegin).count() * 1e-9; + const auto now = std::chrono::high_resolution_clock::now(); + const auto totalTimeSec = (double)std::chrono::duration_cast(now-timerBegin).count() * 1e-9; const auto message = "Real-time pose estimation demo successfully finished. Total time: " + std::to_string(totalTimeSec) + " seconds."; op::log(message, op::Priority::Max); diff --git a/include/openpose/core/array.hpp b/include/openpose/core/array.hpp index e9a77518..23e005e5 100644 --- a/include/openpose/core/array.hpp +++ b/include/openpose/core/array.hpp @@ -211,12 +211,6 @@ namespace op return spData.get(); } - // Disabled because people might try to modify it in illegal ways and change the allocated memory (e.g. resizing), leading to huge errors - // inline cv::Mat& getCvMat() - // { - // return mCvMatData.second; - // } - /** * Return a cv::Mat wrapper to the data. It forbids the data to be modified. * OpenCV only admits unsigned char, signed char, int, float & double. If the T class is not supported by OpenCV, it will throw an error. @@ -229,6 +223,14 @@ namespace op */ const cv::Mat& getConstCvMat() const; + /** + * Analogous to getConstCvMat, but in this case it returns a editable cv::Mat. + * Very important: Only allowed functions which do not provoke data reallocation. + * E.g. resizing functions will not work and they would provoke an undefined behaviour and/or execution crashes. + * @return A cv::Mat pointing to the data. + */ + cv::Mat& getCvMat(); + /** * [] operator * Similar to the [] operator for raw pointer data. diff --git a/include/openpose/core/datum.hpp b/include/openpose/core/datum.hpp index a948e037..abdceb99 100644 --- a/include/openpose/core/datum.hpp +++ b/include/openpose/core/datum.hpp @@ -2,7 +2,7 @@ #define OPENPOSE_CORE_DATUM_HPP #include // std::shared_ptr -#include // std::string +#include #include // cv::Mat #include "array.hpp" #include "point.hpp" diff --git a/include/openpose/core/enumClasses.hpp b/include/openpose/core/enumClasses.hpp index f7821883..ea1e0960 100644 --- a/include/openpose/core/enumClasses.hpp +++ b/include/openpose/core/enumClasses.hpp @@ -19,6 +19,13 @@ namespace op Background, PAFs, }; + + enum class RenderMode : unsigned char + { + None, + Cpu, + Gpu, + }; } #endif // OPENPOSE_CORE_ENUM_CLASSES_HPP diff --git a/include/openpose/core/headers.hpp b/include/openpose/core/headers.hpp index 89655e5e..513879ef 100644 --- a/include/openpose/core/headers.hpp +++ b/include/openpose/core/headers.hpp @@ -18,7 +18,6 @@ #include "renderer.hpp" #include "resizeAndMergeBase.hpp" #include "resizeAndMergeCaffe.hpp" -#include "scaleKeypoints.hpp" #include "wCvMatToOpInput.hpp" #include "wCvMatToOpOutput.hpp" #include "wKeypointScaler.hpp" diff --git a/include/openpose/core/renderer.hpp b/include/openpose/core/renderer.hpp index f06da407..518b6910 100644 --- a/include/openpose/core/renderer.hpp +++ b/include/openpose/core/renderer.hpp @@ -11,8 +11,8 @@ namespace op class Renderer { public: - explicit Renderer(const unsigned long long volume, const float alphaKeypoint, const float alphaHeatMap, const unsigned int elementToRender = 0u, - const unsigned int numberElementsToRender = 0u); + explicit Renderer(const unsigned long long volume, const float alphaKeypoint, const float alphaHeatMap, + const unsigned int elementToRender = 0u, const unsigned int numberElementsToRender = 0u); ~Renderer(); @@ -22,9 +22,11 @@ namespace op void setElementToRender(const int elementToRender); - std::tuple, std::shared_ptr, std::shared_ptr>, std::shared_ptr> getSharedParameters(); + std::tuple, std::shared_ptr, std::shared_ptr>, + std::shared_ptr> getSharedParameters(); - void setSharedParametersAndIfLast(const std::tuple, std::shared_ptr, std::shared_ptr>, + void setSharedParametersAndIfLast(const std::tuple, std::shared_ptr, + std::shared_ptr>, std::shared_ptr>& tuple, const bool isLast); float getAlphaKeypoint() const; diff --git a/include/openpose/core/scaleKeypoints.hpp b/include/openpose/core/scaleKeypoints.hpp deleted file mode 100644 index 3c1a7e54..00000000 --- a/include/openpose/core/scaleKeypoints.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef OPENPOSE_CORE_SCALE_KEYPOINTS_HPP -#define OPENPOSE_CORE_SCALE_KEYPOINTS_HPP - -#include "array.hpp" - -namespace op -{ - void scaleKeypoints(Array& keypoints, const float scale); - - void scaleKeypoints(Array& keypoints, const float scaleX, const float scaleY); - - void scaleKeypoints(Array& keypoints, const float scaleX, const float scaleY, const float offsetX, const float offsetY); -} - -#endif // OPENPOSE_CORE_SCALE_KEYPOINTS_HPP diff --git a/include/openpose/core/wKeypointScaler.hpp b/include/openpose/core/wKeypointScaler.hpp index 64f159a0..3829eb37 100644 --- a/include/openpose/core/wKeypointScaler.hpp +++ b/include/openpose/core/wKeypointScaler.hpp @@ -3,7 +3,6 @@ #include #include "keypointScaler.hpp" -#include "scaleKeypoints.hpp" namespace op { diff --git a/include/openpose/experimental/hand/handParameters.hpp b/include/openpose/experimental/hand/handParameters.hpp index 97ee9f51..1ef87fbf 100644 --- a/include/openpose/experimental/hand/handParameters.hpp +++ b/include/openpose/experimental/hand/handParameters.hpp @@ -9,7 +9,33 @@ namespace op const auto HAND_MAX_HANDS = 2*POSE_MAX_PEOPLE; const auto HAND_NUMBER_PARTS = 21u; - #define HAND_PAIRS_TO_RENDER {0,1, 1,2, 2,3, 3,4, 0,5, 5,6, 6,7, 7,8, 0,9, 9,10, 10,11, 11,12, 0,13, 13,14, 14,15, 15,16, 0,17, 17,18, 18,19, 19,20} + #define HAND_PAIRS_RENDER_GPU {0,1, 1,2, 2,3, 3,4, 0,5, 5,6, 6,7, 7,8, 0,9, 9,10, 10,11, 11,12, 0,13, 13,14, 14,15, 15,16, 0,17, 17,18, 18,19, 19,20} + const std::vector HAND_PAIRS_RENDER {HAND_PAIRS_RENDER_GPU}; + #define HAND_COLORS_RENDER \ + 179.f, 0.f, 0.f, \ + 204.f, 0.f, 0.f, \ + 230.f, 0.f, 0.f, \ + 255.f, 0.f, 0.f, \ + 143.f, 179.f, 0.f, \ + 163.f, 204.f, 0.f, \ + 184.f, 230.f, 0.f, \ + 204.f, 255.f, 0.f, \ + 0.f, 179.f, 71.f, \ + 0.f, 204.f, 82.f, \ + 0.f, 230.f, 92.f, \ + 0.f, 255.f, 102.f, \ + 0.f, 71.f, 179.f, \ + 0.f, 82.f, 204.f, \ + 0.f, 92.f, 230.f, \ + 0.f, 102.f, 255.f, \ + 143.f, 0.f, 179.f, \ + 163.f, 0.f, 204.f, \ + 184.f, 0.f, 230.f, \ + 204.f, 0.f, 255.f, \ + 179.f, 179.f, 179.f, \ + 179.f, 179.f, 179.f, \ + 179.f, 179.f, 179.f, \ + 179.f, 179.f, 179.f // Constant parameters const auto HAND_CCN_DECREASE_FACTOR = 8.f; diff --git a/include/openpose/experimental/hand/handRenderGpu.hpp b/include/openpose/experimental/hand/handRenderGpu.hpp deleted file mode 100644 index ba1dcd82..00000000 --- a/include/openpose/experimental/hand/handRenderGpu.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef OPENPOSE_HAND_GPU_HAND_RENDER_HPP -#define OPENPOSE_HAND_GPU_HAND_RENDER_HPP - -#include -#include "handParameters.hpp" - -namespace op -{ - void renderHandsGpu(float* framePtr, const Point& frameSize, const float* const handsPtr, const int numberHands, const float alphaColorToAdd = HAND_DEFAULT_ALPHA_KEYPOINT); -} - -#endif // OPENPOSE_HAND_GPU_HAND_RENDER_HPP diff --git a/include/openpose/experimental/hand/handRenderer.hpp b/include/openpose/experimental/hand/handRenderer.hpp index d0d1cacd..cb969511 100644 --- a/include/openpose/experimental/hand/handRenderer.hpp +++ b/include/openpose/experimental/hand/handRenderer.hpp @@ -2,9 +2,11 @@ #define OPENPOSE_HAND_HAND_RENDERER_HPP #include +#include #include #include #include +#include "handParameters.hpp" namespace op { @@ -13,17 +15,23 @@ namespace op class HandRenderer : public Renderer { public: - explicit HandRenderer(const Point& frameSize); + HandRenderer(const Point& frameSize, const float alphaKeypoint = HAND_DEFAULT_ALPHA_KEYPOINT, + const float alphaHeatMap = HAND_DEFAULT_ALPHA_HEAT_MAP, const RenderMode renderMode = RenderMode::Cpu); ~HandRenderer(); void initializationOnThread(); - void renderHands(Array& outputData, const Array& handKeypoints); + void renderHand(Array& outputData, const Array& handKeypoints); private: const Point mFrameSize; - float* pGpuHands; // GPU aux memory + const RenderMode mRenderMode; + float* pGpuHands; // GPU aux memory + + void renderHandCpu(Array& outputData, const Array& handKeypoints); + + void renderHandGpu(Array& outputData, const Array& handKeypoints); DELETE_COPY(HandRenderer); }; diff --git a/include/openpose/experimental/hand/headers.hpp b/include/openpose/experimental/hand/headers.hpp index 9d8fd4c5..af333395 100644 --- a/include/openpose/experimental/hand/headers.hpp +++ b/include/openpose/experimental/hand/headers.hpp @@ -6,7 +6,7 @@ #include "handExtractor.hpp" #include "handParameters.hpp" #include "handRenderer.hpp" -#include "handRenderGpu.hpp" +#include "renderHand.hpp" #include "wHandExtractor.hpp" #include "wHandRenderer.hpp" diff --git a/include/openpose/experimental/hand/renderHand.hpp b/include/openpose/experimental/hand/renderHand.hpp new file mode 100644 index 00000000..8fb9fdd7 --- /dev/null +++ b/include/openpose/experimental/hand/renderHand.hpp @@ -0,0 +1,16 @@ +#ifndef OPENPOSE_HAND_GPU_HAND_RENDER_HPP +#define OPENPOSE_HAND_GPU_HAND_RENDER_HPP + +#include +#include +#include "handParameters.hpp" + +namespace op +{ + void renderHandKeypointsCpu(Array& frameArray, const Array& handKeypoints); + + void renderHandKeypointsGpu(float* framePtr, const Point& frameSize, const float* const handsPtr, const int numberHands, + const float alphaColorToAdd = HAND_DEFAULT_ALPHA_KEYPOINT); +} + +#endif // OPENPOSE_HAND_GPU_HAND_RENDER_HPP diff --git a/include/openpose/experimental/hand/wHandRenderer.hpp b/include/openpose/experimental/hand/wHandRenderer.hpp index bb4d0031..5ef87337 100644 --- a/include/openpose/experimental/hand/wHandRenderer.hpp +++ b/include/openpose/experimental/hand/wHandRenderer.hpp @@ -65,7 +65,7 @@ namespace op const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__); // Render people hands for (auto& tDatum : *tDatums) - spHandRenderer->renderHands(tDatum.outputData, tDatum.handKeypoints); + spHandRenderer->renderHand(tDatum.outputData, tDatum.handKeypoints); // Profiling speed Profiler::timerEnd(profilerKey); Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__, Profiler::DEFAULT_X); diff --git a/include/openpose/experimental/producer/wPeoplePoseLoader.hpp b/include/openpose/experimental/producer/wPeoplePoseLoader.hpp index f93e01b2..b5acd1a9 100644 --- a/include/openpose/experimental/producer/wPeoplePoseLoader.hpp +++ b/include/openpose/experimental/producer/wPeoplePoseLoader.hpp @@ -7,7 +7,7 @@ // namespace op // { -// template +// template // class wPoseLoader : public Worker // { // public: diff --git a/include/openpose/face/faceParameters.hpp b/include/openpose/face/faceParameters.hpp index 54fe45e8..aa2b8756 100644 --- a/include/openpose/face/faceParameters.hpp +++ b/include/openpose/face/faceParameters.hpp @@ -9,10 +9,12 @@ namespace op const auto FACE_MAX_FACES = POSE_MAX_PEOPLE; const auto FACE_NUMBER_PARTS = 70u; - #define FACE_PAIRS_TO_RENDER {0,1, 1,2, 2,3, 3,4, 4,5, 5,6, 6,7, 7,8, 8,9, 9,10, 10,11, 11,12, 12,13, 13,14, 14,15, 15,16, 17,18, 18,19, 19,20, \ + #define FACE_PAIRS_RENDER_GPU {0,1, 1,2, 2,3, 3,4, 4,5, 5,6, 6,7, 7,8, 8,9, 9,10, 10,11, 11,12, 12,13, 13,14, 14,15, 15,16, 17,18, 18,19, 19,20, \ 20,21, 22,23, 23,24, 24,25, 25,26, 27,28, 28,29, 29,30, 31,32, 32,33, 33,34, 34,35, 36,37, 37,38, 38,39, 39,40, 40,41, \ 41,36, 42,43, 43,44, 44,45, 45,46, 46,47, 47,42, 48,49, 49,50, 50,51, 51,52, 52,53, 53,54, 54,55, 55,56, 56,57, 57,58, \ 58,59, 59,48, 60,61, 61,62, 62,63, 63,64, 64,65, 65,66, 66,67, 67,60} + const std::vector FACE_PAIRS_RENDER {FACE_PAIRS_RENDER_GPU}; + #define FACE_COLORS_RENDER 255.f, 255.f, 255.f // Constant parameters const auto FACE_CCN_DECREASE_FACTOR = 8.f; diff --git a/include/openpose/face/faceRenderGpu.hpp b/include/openpose/face/faceRenderGpu.hpp deleted file mode 100644 index 47f6c4c4..00000000 --- a/include/openpose/face/faceRenderGpu.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef OPENPOSE_FACE_GPU_FACE_RENDER_HPP -#define OPENPOSE_FACE_GPU_FACE_RENDER_HPP - -#include -#include "faceParameters.hpp" - -namespace op -{ - void renderFaceGpu(float* framePtr, const Point& frameSize, const float* const facePtr, const int numberFace, const float alphaColorToAdd = FACE_DEFAULT_ALPHA_KEYPOINT); -} - -#endif // OPENPOSE_FACE_GPU_FACE_RENDER_HPP diff --git a/include/openpose/face/faceRenderer.hpp b/include/openpose/face/faceRenderer.hpp index 1ab61e01..02038063 100644 --- a/include/openpose/face/faceRenderer.hpp +++ b/include/openpose/face/faceRenderer.hpp @@ -2,9 +2,11 @@ #define OPENPOSE_FACE_FACE_RENDERER_HPP #include +#include #include #include #include +#include "faceParameters.hpp" namespace op { @@ -12,7 +14,7 @@ namespace op { public: explicit FaceRenderer(const Point& frameSize, const float alphaKeypoint = FACE_DEFAULT_ALPHA_KEYPOINT, - const float alphaHeatMap = FACE_DEFAULT_ALPHA_HEAT_MAP); + const float alphaHeatMap = FACE_DEFAULT_ALPHA_HEAT_MAP, const RenderMode renderMode = RenderMode::Cpu); ~FaceRenderer(); @@ -22,7 +24,12 @@ namespace op private: const Point mFrameSize; - float* pGpuFace; // GPU aux memory + const RenderMode mRenderMode; + float* pGpuFace; // GPU aux memory + + void renderFaceCpu(Array& outputData, const Array& faceKeypoints); + + void renderFaceGpu(Array& outputData, const Array& faceKeypoints); DELETE_COPY(FaceRenderer); }; diff --git a/include/openpose/face/headers.hpp b/include/openpose/face/headers.hpp index b1b66629..0bdeba98 100644 --- a/include/openpose/face/headers.hpp +++ b/include/openpose/face/headers.hpp @@ -7,7 +7,7 @@ #include "faceExtractor.hpp" #include "faceParameters.hpp" #include "faceRenderer.hpp" -#include "faceRenderGpu.hpp" +#include "renderFace.hpp" #include "wFaceDetector.hpp" #include "wFaceExtractor.hpp" #include "wFaceRenderer.hpp" diff --git a/include/openpose/face/renderFace.hpp b/include/openpose/face/renderFace.hpp new file mode 100644 index 00000000..e1e18039 --- /dev/null +++ b/include/openpose/face/renderFace.hpp @@ -0,0 +1,16 @@ +#ifndef OPENPOSE_FACE_RENDER_FACE_HPP +#define OPENPOSE_FACE_RENDER_FACE_HPP + +#include +#include +#include "faceParameters.hpp" + +namespace op +{ + void renderFaceKeypointsCpu(Array& frameArray, const Array& faceKeypoints); + + void renderFaceKeypointsGpu(float* framePtr, const Point& frameSize, const float* const facePtr, const int numberFace, + const float alphaColorToAdd = FACE_DEFAULT_ALPHA_KEYPOINT); +} + +#endif // OPENPOSE_FACE_RENDER_FACE_HPP diff --git a/include/openpose/pose/headers.hpp b/include/openpose/pose/headers.hpp index 879defe8..9cf37453 100644 --- a/include/openpose/pose/headers.hpp +++ b/include/openpose/pose/headers.hpp @@ -8,8 +8,8 @@ #include "poseExtractor.hpp" #include "poseExtractorCaffe.hpp" #include "poseRenderer.hpp" -#include "poseRenderGpu.hpp" #include "poseParameters.hpp" +#include "renderPose.hpp" #include "wPoseExtractor.hpp" #include "wPoseRenderer.hpp" diff --git a/include/openpose/pose/poseParameters.hpp b/include/openpose/pose/poseParameters.hpp index 4e5b8e6a..e36b4eb7 100644 --- a/include/openpose/pose/poseParameters.hpp +++ b/include/openpose/pose/poseParameters.hpp @@ -31,10 +31,30 @@ namespace op {17, "LEar"}, {18, "Background"} }; - const unsigned int POSE_COCO_NUMBER_PARTS = 18u; // Equivalent to size of std::map POSE_COCO_BODY_PARTS - 1 (removing background) - const std::vector POSE_COCO_MAP_IDX {31,32, 39,40, 33,34, 35,36, 41,42, 43,44, 19,20, 21,22, 23,24, 25,26, 27,28, 29,30, 47,48, 49,50, 53,54, 51,52, 55,56, 37,38, 45,46}; - #define POSE_COCO_PAIRS_TO_RENDER {1,2, 1,5, 2,3, 3,4, 5,6, 6,7, 1,8, 8,9, 9,10, 1,11, 11,12, 12,13, 1,0, 0,14, 14,16, 0,15, 15,17} - const std::vector POSE_COCO_PAIRS {1,2, 1,5, 2,3, 3,4, 5,6, 6,7, 1,8, 8,9, 9,10, 1,11, 11,12, 12,13, 1,0, 0,14, 14,16, 0,15, 15,17, 2,16, 5,17}; + const unsigned int POSE_COCO_NUMBER_PARTS = 18u; // Equivalent to size of std::map POSE_COCO_BODY_PARTS - 1 (removing background) + const std::vector POSE_COCO_MAP_IDX {31,32, 39,40, 33,34, 35,36, 41,42, 43,44, 19,20, 21,22, 23,24, 25,26, 27,28, 29,30, 47,48, 49,50, 53,54, 51,52, 55,56, 37,38, 45,46}; + #define POSE_COCO_PAIRS_RENDER_GPU {1,2, 1,5, 2,3, 3,4, 5,6, 6,7, 1,8, 8,9, 9,10, 1,11, 11,12, 12,13, 1,0, 0,14, 14,16, 0,15, 15,17} + const std::vector POSE_COCO_PAIRS_RENDER {POSE_COCO_PAIRS_RENDER_GPU}; + const std::vector POSE_COCO_PAIRS {1,2, 1,5, 2,3, 3,4, 5,6, 6,7, 1,8, 8,9, 9,10, 1,11, 11,12, 12,13, 1,0, 0,14, 14,16, 0,15, 15,17, 2,16, 5,17}; + #define POSE_COCO_COLORS_RENDER \ + 255.f, 0.f, 0.f, \ + 255.f, 85.f, 0.f, \ + 255.f, 170.f, 0.f, \ + 255.f, 255.f, 0.f, \ + 170.f, 255.f, 0.f, \ + 85.f, 255.f, 0.f, \ + 0.f, 255.f, 0.f, \ + 0.f, 255.f, 85.f, \ + 0.f, 255.f, 170.f, \ + 0.f, 255.f, 255.f, \ + 0.f, 170.f, 255.f, \ + 0.f, 85.f, 255.f, \ + 0.f, 0.f, 255.f, \ + 85.f, 0.f, 255.f, \ + 170.f, 0.f, 255.f, \ + 255.f, 0.f, 255.f, \ + 255.f, 0.f, 170.f, \ + 255.f, 0.f, 85.f const std::map POSE_MPI_BODY_PARTS{ {0, "Head"}, @@ -56,8 +76,25 @@ namespace op }; const unsigned int POSE_MPI_NUMBER_PARTS = 15; // Equivalent to size of std::map POSE_MPI_NUMBER_PARTS - 1 (removing background) const std::vector POSE_MPI_MAP_IDX {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43}; - #define POSE_MPI_PAIRS_TO_RENDER { 0,1, 1,2, 2,3, 3,4, 1,5, 5,6, 6,7, 1,14, 14,8, 8,9, 9,10, 14,11, 11,12, 12,13} - const std::vector POSE_MPI_PAIRS POSE_MPI_PAIRS_TO_RENDER; + #define POSE_MPI_PAIRS_RENDER_GPU { 0,1, 1,2, 2,3, 3,4, 1,5, 5,6, 6,7, 1,14, 14,8, 8,9, 9,10, 14,11, 11,12, 12,13} + const std::vector POSE_MPI_PAIRS POSE_MPI_PAIRS_RENDER_GPU; + // MPI colors chosen such that they are closed to COCO colors + #define POSE_MPI_COLORS_RENDER \ + 255.f, 0.f, 85.f, \ + 255.f, 0.f, 0.f, \ + 255.f, 85.f, 0.f, \ + 255.f, 170.f, 0.f, \ + 255.f, 255.f, 0.f, \ + 170.f, 255.f, 0.f, \ + 85.f, 255.f, 0.f, \ + 43.f, 255.f, 0.f, \ + 0.f, 255.f, 0.f, \ + 0.f, 255.f, 85.f, \ + 0.f, 255.f, 170.f, \ + 0.f, 255.f, 255.f, \ + 0.f, 170.f, 255.f, \ + 0.f, 85.f, 255.f, \ + 0.f, 0.f, 255.f // Constant Global Parameters const unsigned int POSE_MAX_PEOPLE = 96u; @@ -67,6 +104,7 @@ namespace op const std::array POSE_MAX_PEAKS{ POSE_MAX_PEOPLE, POSE_MAX_PEOPLE, POSE_MAX_PEOPLE}; const std::array POSE_NUMBER_BODY_PARTS{ POSE_COCO_NUMBER_PARTS, POSE_MPI_NUMBER_PARTS, POSE_MPI_NUMBER_PARTS}; const std::array, 3> POSE_BODY_PART_PAIRS{ POSE_COCO_PAIRS, POSE_MPI_PAIRS, POSE_MPI_PAIRS}; + const std::array, 3> POSE_BODY_PART_PAIRS_RENDER{POSE_COCO_PAIRS_RENDER, POSE_MPI_PAIRS, POSE_MPI_PAIRS}; const std::array, 3> POSE_MAP_IDX{ POSE_COCO_MAP_IDX, POSE_MPI_MAP_IDX, POSE_MPI_MAP_IDX}; const std::array POSE_PROTOTXT{ "pose/coco/pose_deploy_linevec.prototxt", "pose/mpi/pose_deploy_linevec.prototxt", @@ -74,17 +112,17 @@ namespace op const std::array POSE_TRAINED_MODEL{ "pose/coco/pose_iter_440000.caffemodel", "pose/mpi/pose_iter_160000.caffemodel", "pose/mpi/pose_iter_160000.caffemodel"}; - // POSE_BODY_PART_MAPPING crashes on Windows at dynamic initialization, to avoid this crash: - // POSE_BODY_PART_MAPPING has been moved to poseParameters.cpp and getPoseBodyPartMapping() wraps it - //const std::array, 3> POSE_BODY_PART_MAPPING{ POSE_COCO_BODY_PARTS, POSE_MPI_BODY_PARTS, POSE_MPI_BODY_PARTS}; - const std::map& getPoseBodyPartMapping(const PoseModel poseModel); + // POSE_BODY_PART_MAPPING crashes on Windows at dynamic initialization, to avoid this crash: + // POSE_BODY_PART_MAPPING has been moved to poseParameters.cpp and getPoseBodyPartMapping() wraps it + //const std::array, 3> POSE_BODY_PART_MAPPING{ POSE_COCO_BODY_PARTS, POSE_MPI_BODY_PARTS, POSE_MPI_BODY_PARTS}; + const std::map& getPoseBodyPartMapping(const PoseModel poseModel); // Default Model Parameters // They might be modified on running time const std::array POSE_DEFAULT_NMS_THRESHOLD{ 0.05f, 0.6f, 0.3f}; - const std::array POSE_DEFAULT_CONNECT_INTER_MIN_ABOVE_THRESHOLD{ 9, 8, 8}; + const std::array POSE_DEFAULT_CONNECT_INTER_MIN_ABOVE_THRESHOLD{ 9, 8, 8}; const std::array POSE_DEFAULT_CONNECT_INTER_THRESHOLD{ 0.05f, 0.01f, 0.01f}; - const std::array POSE_DEFAULT_CONNECT_MIN_SUBSET_CNT{ 3, 3, 3}; + const std::array POSE_DEFAULT_CONNECT_MIN_SUBSET_CNT{ 3, 3, 3}; const std::array POSE_DEFAULT_CONNECT_MIN_SUBSET_SCORE{ 0.4f, 0.4f, 0.4f}; // Rendering default parameters diff --git a/include/openpose/pose/poseRenderGpu.hpp b/include/openpose/pose/poseRenderGpu.hpp deleted file mode 100644 index d42743cc..00000000 --- a/include/openpose/pose/poseRenderGpu.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef OPENPOSE_POSE_GPU_POSE_RENDER_HPP -#define OPENPOSE_POSE_GPU_POSE_RENDER_HPP - -#include -#include "enumClasses.hpp" -#include "poseParameters.hpp" - -namespace op -{ - void renderPoseGpu(float* framePtr, const PoseModel poseModel, const int numberPeople, const Point& frameSize, const float* const posePtr, - const bool googlyEyes = false, const bool blendOriginalFrame = true, const float alphaBlending = POSE_DEFAULT_ALPHA_KEYPOINT); - void renderBodyPartGpu(float* frame, const PoseModel poseModel, const Point& frameSize, const float* const heatmap, const Point& heatmapSize, - const float scaleToKeepRatio, const int part, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); - void renderBodyPartsGpu(float* frame, const PoseModel poseModel, const Point& frameSize, const float* const heatmap, const Point& heatmapSize, - const float scaleToKeepRatio, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); - void renderPartAffinityFieldGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatmapPtr, - const Point& heatmapSize, const float scaleToKeepRatio, const int part, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); - void renderPartAffinityFieldsGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatmapPtr, - const Point& heatmapSize, const float scaleToKeepRatio, const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); -} - -#endif // OPENPOSE_POSE_GPU_POSE_RENDER_HPP diff --git a/include/openpose/pose/poseRenderer.hpp b/include/openpose/pose/poseRenderer.hpp index 4ad50bf5..daf6c57a 100644 --- a/include/openpose/pose/poseRenderer.hpp +++ b/include/openpose/pose/poseRenderer.hpp @@ -3,6 +3,7 @@ #include // std::shared_ptr #include +#include #include #include #include @@ -14,9 +15,10 @@ namespace op class PoseRenderer : public Renderer { public: - explicit PoseRenderer(const Point& heatMapsSize, const Point& outputSize, const PoseModel poseModel, const std::shared_ptr& poseExtractor, - const bool blendOriginalFrame = true, const float alphaKeypoint = POSE_DEFAULT_ALPHA_KEYPOINT, - const float alphaHeatMap = POSE_DEFAULT_ALPHA_HEAT_MAP, const unsigned int elementToRender = 0u); + explicit PoseRenderer(const Point& heatMapsSize, const Point& outputSize, const PoseModel poseModel, + const std::shared_ptr& poseExtractor, const bool blendOriginalFrame = true, + const float alphaKeypoint = POSE_DEFAULT_ALPHA_KEYPOINT, const float alphaHeatMap = POSE_DEFAULT_ALPHA_HEAT_MAP, + const unsigned int elementToRender = 0u, const RenderMode renderMode = RenderMode::Cpu); ~PoseRenderer(); @@ -38,10 +40,15 @@ namespace op const PoseModel mPoseModel; const std::map mPartIndexToName; const std::shared_ptr spPoseExtractor; + const RenderMode mRenderMode; std::atomic mBlendOriginalFrame; std::atomic mShowGooglyEyes; // Init with thread - float* pGpuPose; // GPU aux memory + float* pGpuPose; // GPU aux memory + + std::pair renderPoseCpu(Array& outputData, const Array& poseKeypoints, const float scaleNetToOutput = -1.f); + + std::pair renderPoseGpu(Array& outputData, const Array& poseKeypoints, const float scaleNetToOutput = -1.f); DELETE_COPY(PoseRenderer); }; diff --git a/include/openpose/pose/renderPose.hpp b/include/openpose/pose/renderPose.hpp new file mode 100644 index 00000000..d8e86c2f --- /dev/null +++ b/include/openpose/pose/renderPose.hpp @@ -0,0 +1,36 @@ +#ifndef OPENPOSE_POSE_RENDER_POSE_HPP +#define OPENPOSE_POSE_RENDER_POSE_HPP + +#include // cv::Mat +#include +#include +#include "enumClasses.hpp" +#include "poseParameters.hpp" + +namespace op +{ + void renderPoseKeypointsCpu(Array& frameArray, const Array& poseKeypoints, const PoseModel poseModel, + const bool blendOriginalFrame = true); + + void renderPoseKeypointsGpu(float* framePtr, const PoseModel poseModel, const int numberPeople, const Point& frameSize, + const float* const posePtr, const bool googlyEyes = false, const bool blendOriginalFrame = true, + const float alphaBlending = POSE_DEFAULT_ALPHA_KEYPOINT); + + void renderPoseHeatMapGpu(float* frame, const PoseModel poseModel, const Point& frameSize, const float* const heatmap, + const Point& heatmapSize, const float scaleToKeepRatio, const int part, + const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); + + void renderPoseHeatMapsGpu(float* frame, const PoseModel poseModel, const Point& frameSize, const float* const heatmap, + const Point& heatmapSize, const float scaleToKeepRatio, + const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); + + void renderPosePAFGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatmapPtr, + const Point& heatmapSize, const float scaleToKeepRatio, const int part, + const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); + + void renderPosePAFsGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatmapPtr, + const Point& heatmapSize, const float scaleToKeepRatio, + const float alphaBlending = POSE_DEFAULT_ALPHA_HEAT_MAP); +} + +#endif // OPENPOSE_POSE_RENDER_POSE_HPP diff --git a/include/openpose/thread/workerConsumer.hpp b/include/openpose/thread/workerConsumer.hpp index 66b146b1..00c894c3 100644 --- a/include/openpose/thread/workerConsumer.hpp +++ b/include/openpose/thread/workerConsumer.hpp @@ -13,7 +13,7 @@ namespace op inline void work(TDatums& tDatums) { - workConsumer(tDatums); + workConsumer(tDatums); } protected: diff --git a/include/openpose/utilities/cuda.hpp b/include/openpose/utilities/cuda.hpp index 6c2d880a..b3de9b86 100644 --- a/include/openpose/utilities/cuda.hpp +++ b/include/openpose/utilities/cuda.hpp @@ -20,7 +20,7 @@ namespace op return (totalRequired + numberCudaThreads - 1) / numberCudaThreads; } - dim3 getNumberCudaBlocks(const Point& frameSize, const dim3 numberCudaThreads = dim3{ CUDA_NUM_THREADS, CUDA_NUM_THREADS, 1 }); + dim3 getNumberCudaBlocks(const Point& frameSize, const dim3 numberCudaThreads = dim3{ CUDA_NUM_THREADS, CUDA_NUM_THREADS, 1 }); std::pair getNumberCudaThreadsAndBlocks(const Point& frameSize); } diff --git a/include/openpose/utilities/headers.hpp b/include/openpose/utilities/headers.hpp index c0acf06a..7043f03a 100644 --- a/include/openpose/utilities/headers.hpp +++ b/include/openpose/utilities/headers.hpp @@ -8,6 +8,7 @@ #include "errorAndLog.hpp" #include "fastMath.hpp" #include "fileSystem.hpp" +#include "keypoint.hpp" #include "macros.hpp" #include "openCv.hpp" #include "pointerContainer.hpp" diff --git a/include/openpose/utilities/keypoint.hpp b/include/openpose/utilities/keypoint.hpp new file mode 100644 index 00000000..4b5d08ed --- /dev/null +++ b/include/openpose/utilities/keypoint.hpp @@ -0,0 +1,28 @@ +#ifndef OPENPOSE_UTILITIES_KEYPOINT_HPP +#define OPENPOSE_UTILITIES_KEYPOINT_HPP + +#include +#include +#include + +namespace op +{ + float getDistance(const float* keypointPtr, const int elementA, const int elementB); + + void scaleKeypoints(Array& keypoints, const float scale); + + void scaleKeypoints(Array& keypoints, const float scaleX, const float scaleY); + + void scaleKeypoints(Array& keypoints, const float scaleX, const float scaleY, const float offsetX, const float offsetY); + + void renderKeypointsCpu(Array& frameArray, const Array& keypoints, const std::vector& pairs, + const std::vector colors, const float thicknessCircleRatio, const float thicknessLineRatioWRTCircle); + + Rectangle getKeypointsRectangle(const float* keypointPtr, const int numberBodyParts, const float threshold); + + int getKeypointsArea(const float* keypointPtr, const int numberBodyParts, const float threshold); + + int getBiggestPerson(const Array& keypoints, const float threshold); +} + +#endif // OPENPOSE_UTILITIES_KEYPOINT_HPP diff --git a/include/openpose/wrapper/wrapper.hpp b/include/openpose/wrapper/wrapper.hpp index cd5d353f..8fac32f6 100644 --- a/include/openpose/wrapper/wrapper.hpp +++ b/include/openpose/wrapper/wrapper.hpp @@ -80,17 +80,15 @@ namespace op // Consumer (keep default values to disable any output) const WrapperStructOutput& wrapperStructOutput = WrapperStructOutput{}); - // THIS FUNCTION IS NOT IMPLEMENTED YET -> COMING SOON // Similar to the previos configure, but it includes hand extraction and rendering void configure(const WrapperStructPose& wrapperStructPose, // Hand (use the default WrapperStructHand{} to disable any hand detector) - const experimental::WrapperStructHand& wrapperHandStruct, + const experimental::WrapperStructHand& wrapperStructHand, // Producer (set producerSharedPtr = nullptr or use the default WrapperStructInput{} to disable any input) const WrapperStructInput& wrapperStructInput, // Consumer (keep default values to disable any output) const WrapperStructOutput& wrapperStructOutput = WrapperStructOutput{}); - // THIS FUNCTION IS NOT IMPLEMENTED YET -> COMING SOON // Similar to the previos configure, but it includes hand extraction and rendering void configure(const WrapperStructPose& wrapperStructPose, // Face (use the default WrapperStructFace{} to disable any face detector) @@ -100,13 +98,12 @@ namespace op // Consumer (keep default values to disable any output) const WrapperStructOutput& wrapperStructOutput = WrapperStructOutput{}); - // THIS FUNCTION IS NOT IMPLEMENTED YET -> COMING SOON // Similar to the previos configure, but it includes hand extraction and rendering void configure(const WrapperStructPose& wrapperStructPose = WrapperStructPose{}, // Face (use the default WrapperStructFace{} to disable any face detector) const WrapperStructFace& wrapperStructFace = WrapperStructFace{}, // Hand (use the default WrapperStructHand{} to disable any hand detector) - const experimental::WrapperStructHand& wrapperHandStruct = experimental::WrapperStructHand{}, + const experimental::WrapperStructHand& wrapperStructHand = experimental::WrapperStructHand{}, // Producer (set producerSharedPtr = nullptr or use the default WrapperStructInput{} to disable any input) const WrapperStructInput& wrapperStructInput = WrapperStructInput{}, // Consumer (keep default values to disable any output) @@ -372,12 +369,14 @@ namespace op } template - void Wrapper::configure(const WrapperStructPose& wrapperStructPose, const WrapperStructInput& wrapperStructInput, + void Wrapper::configure(const WrapperStructPose& wrapperStructPose, + const WrapperStructInput& wrapperStructInput, const WrapperStructOutput& wrapperStructOutput) { try { - configure(wrapperStructPose, WrapperStructFace{}, experimental::WrapperStructHand{}, wrapperStructInput, wrapperStructOutput); + configure(wrapperStructPose, WrapperStructFace{}, experimental::WrapperStructHand{}, + wrapperStructInput, wrapperStructOutput); } catch (const std::exception& e) { @@ -386,12 +385,15 @@ namespace op } template - void Wrapper::configure(const WrapperStructPose& wrapperStructPose, const WrapperStructFace& wrapperStructFace, - const WrapperStructInput& wrapperStructInput, const WrapperStructOutput& wrapperStructOutput) + void Wrapper::configure(const WrapperStructPose& wrapperStructPose, + const WrapperStructFace& wrapperStructFace, + const WrapperStructInput& wrapperStructInput, + const WrapperStructOutput& wrapperStructOutput) { try { - configure(wrapperStructPose, wrapperStructFace, experimental::WrapperStructHand{}, wrapperStructInput, wrapperStructOutput); + configure(wrapperStructPose, wrapperStructFace, experimental::WrapperStructHand{}, + wrapperStructInput, wrapperStructOutput); } catch (const std::exception& e) { @@ -400,12 +402,15 @@ namespace op } template - void Wrapper::configure(const WrapperStructPose& wrapperStructPose, const experimental::WrapperStructHand& wrapperHandStruct, - const WrapperStructInput& wrapperStructInput, const WrapperStructOutput& wrapperStructOutput) + void Wrapper::configure(const WrapperStructPose& wrapperStructPose, + const experimental::WrapperStructHand& wrapperStructHand, + const WrapperStructInput& wrapperStructInput, + const WrapperStructOutput& wrapperStructOutput) { try { - configure(wrapperStructPose, WrapperStructFace{}, wrapperHandStruct, wrapperStructInput, wrapperStructOutput); + configure(wrapperStructPose, WrapperStructFace{}, wrapperStructHand, + wrapperStructInput, wrapperStructOutput); } catch (const std::exception& e) { @@ -414,8 +419,10 @@ namespace op } template - void Wrapper::configure(const WrapperStructPose& wrapperStructPose, const WrapperStructFace& wrapperStructFace, - const experimental::WrapperStructHand& wrapperHandStruct, const WrapperStructInput& wrapperStructInput, + void Wrapper::configure(const WrapperStructPose& wrapperStructPose, + const WrapperStructFace& wrapperStructFace, + const experimental::WrapperStructHand& wrapperStructHand, + const WrapperStructInput& wrapperStructInput, const WrapperStructOutput& wrapperStructOutput) { try @@ -426,8 +433,9 @@ namespace op typedef std::shared_ptr TDatumsPtr; // Required parameters - const auto renderOutput = wrapperStructPose.renderOutput || wrapperStructFace.renderOutput; - const auto renderFace = wrapperStructFace.enable && wrapperStructFace.renderOutput; + const auto renderOutput = wrapperStructPose.renderMode != RenderMode::None || wrapperStructFace.renderMode != RenderMode::None; + const auto renderOutputGpu = wrapperStructPose.renderMode == RenderMode::Gpu || wrapperStructFace.renderMode == RenderMode::Gpu; + const auto renderFace = wrapperStructFace.enable && wrapperStructFace.renderMode != RenderMode::None; // Check no wrong/contradictory flags enabled if (wrapperStructPose.alphaKeypoint < 0. || wrapperStructPose.alphaKeypoint > 1. @@ -563,22 +571,38 @@ namespace op // Pose renderers std::vector> poseRenderers; - if (wrapperStructPose.renderOutput || renderOutput) + std::shared_ptr poseCpuRenderer; + std::vector cpuRenderers; + if (renderOutputGpu || wrapperStructPose.renderMode == RenderMode::Cpu) { - // If !wrapperStructPose.renderOutput but renderOutput, then we create an alpha = 0 pose renderer + // If !wrapperStructPose.renderMode == RenderMode::Gpu but renderOutput, then we create an alpha = 0 pose renderer // in order to keep the removing background option - const auto alphaKeypoint = (wrapperStructPose.renderOutput ? wrapperStructPose.alphaKeypoint : 0.f); - const auto alphaHeatMap = (wrapperStructPose.renderOutput ? wrapperStructPose.alphaHeatMap : 0.f); - for (auto gpuId = 0; gpuId < poseExtractors.size(); gpuId++) + const auto alphaKeypoint = (wrapperStructPose.renderMode != RenderMode::None ? wrapperStructPose.alphaKeypoint : 0.f); + const auto alphaHeatMap = (wrapperStructPose.renderMode != RenderMode::None ? wrapperStructPose.alphaHeatMap : 0.f); + // GPU rendering + if (renderOutputGpu) { - poseRenderers.emplace_back(std::make_shared( - poseNetOutputSize, finalOutputSize, wrapperStructPose.poseModel, poseExtractors[gpuId], - wrapperStructPose.blendOriginalFrame, alphaKeypoint, - alphaHeatMap, wrapperStructPose.defaultPartToRender - )); + for (auto gpuId = 0; gpuId < poseExtractors.size(); gpuId++) + { + poseRenderers.emplace_back(std::make_shared( + poseNetOutputSize, finalOutputSize, wrapperStructPose.poseModel, poseExtractors[gpuId], + wrapperStructPose.blendOriginalFrame, alphaKeypoint, + alphaHeatMap, wrapperStructPose.defaultPartToRender, wrapperStructPose.renderMode + )); + } } + // CPU rendering + if (wrapperStructPose.renderMode == RenderMode::Cpu) + { + poseCpuRenderer = std::make_shared( + poseNetOutputSize, finalOutputSize, wrapperStructPose.poseModel, nullptr, + wrapperStructPose.blendOriginalFrame, alphaKeypoint, + alphaHeatMap, wrapperStructPose.defaultPartToRender, wrapperStructPose.renderMode + ); + cpuRenderers.emplace_back(std::make_shared>(poseCpuRenderer)); + } + log("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); } - log("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); // Input cvMat to OpenPose format const auto cvMatToOpInput = std::make_shared( @@ -589,7 +613,6 @@ namespace op spWCvMatToOpOutput = std::make_shared>(cvMatToOpOutput); // Pose extractor(s) - spWPoses.clear(); spWPoses.resize(poseExtractors.size()); for (auto i = 0; i < spWPoses.size(); i++) spWPoses.at(i) = {std::make_shared>(poseExtractors.at(i))}; @@ -612,7 +635,7 @@ namespace op } // Hand extractor(s) - if (wrapperHandStruct.extractAndRenderHands) + if (wrapperStructHand.extractAndRenderHands) { for (auto gpuId = 0; gpuId < spWPoses.size(); gpuId++) { @@ -624,44 +647,76 @@ namespace op } // Pose renderer(s) - if (!poseRenderers.empty()) + if (renderOutputGpu && !poseRenderers.empty()) for (auto i = 0; i < spWPoses.size(); i++) spWPoses.at(i).emplace_back(std::make_shared>(poseRenderers.at(i))); - // Hands renderer(s) - if (wrapperHandStruct.extractAndRenderHands) - { - for (auto i = 0; i < spWPoses.size(); i++) - { - // Construct hands renderer - const auto handRenderer = std::make_shared(finalOutputSize); - // Performance boost -> share spGpuMemoryPtr for all renderers - if (!poseRenderers.empty()) - { - const bool isLastRenderer = (!renderFace); - handRenderer->setSharedParametersAndIfLast(poseRenderers.at(i)->getSharedParameters(), isLastRenderer); - } - // Add worker - spWPoses.at(i).emplace_back(std::make_shared>(handRenderer)); - } - } - // Face renderer(s) if (renderFace) { - for (auto i = 0; i < spWPoses.size(); i++) + // CPU rendering + if (wrapperStructFace.renderMode == RenderMode::Cpu) { // Construct face renderer - const auto faceRenderer = std::make_shared(finalOutputSize, wrapperStructFace.alphaKeypoint, wrapperStructFace.alphaHeatMap); - // Performance boost -> share spGpuMemoryPtr for all renderers - if (!poseRenderers.empty()) - { - const bool isLastRenderer = true; - faceRenderer->setSharedParametersAndIfLast(poseRenderers.at(i)->getSharedParameters(), isLastRenderer); - } + const auto faceRenderer = std::make_shared(finalOutputSize, wrapperStructFace.alphaKeypoint, + wrapperStructFace.alphaHeatMap, + wrapperStructFace.renderMode); // Add worker - spWPoses.at(i).emplace_back(std::make_shared>(faceRenderer)); + cpuRenderers.emplace_back(std::make_shared>(faceRenderer)); } + // GPU rendering + else if (wrapperStructFace.renderMode == RenderMode::Gpu) + { + for (auto i = 0; i < spWPoses.size(); i++) + { + // Construct face renderer + const auto faceRenderer = std::make_shared(finalOutputSize, wrapperStructFace.alphaKeypoint, + wrapperStructFace.alphaHeatMap, + wrapperStructFace.renderMode); + // Performance boost -> share spGpuMemoryPtr for all renderers + if (!poseRenderers.empty()) + { + const bool isLastRenderer = (!wrapperStructHand.extractAndRenderHands); + faceRenderer->setSharedParametersAndIfLast(poseRenderers.at(i)->getSharedParameters(), isLastRenderer); + } + // Add worker + spWPoses.at(i).emplace_back(std::make_shared>(faceRenderer)); + } + } + else + error("Unknown RenderMode.", __LINE__, __FUNCTION__, __FILE__); + } + + // Hands renderer(s) + if (wrapperStructHand.extractAndRenderHands) + { + // CPU rendering + // if (wrapperStructHand.renderMode == RenderMode::Cpu) + { + // Construct hand renderer + const auto handRenderer = std::make_shared(finalOutputSize); + // Add worker + cpuRenderers.emplace_back(std::make_shared>(handRenderer)); + } + // GPU rendering + // else if (wrapperStructHand.renderMode == RenderMode::Gpu) + // { + // for (auto i = 0; i < spWPoses.size(); i++) + // { + // // Construct hands renderer + // const auto handRenderer = std::make_shared(finalOutputSize); + // // Performance boost -> share spGpuMemoryPtr for all renderers + // if (!poseRenderers.empty()) + // { + // const bool isLastRenderer = true; + // handRenderer->setSharedParametersAndIfLast(poseRenderers.at(i)->getSharedParameters(), isLastRenderer); + // } + // // Add worker + // spWPoses.at(i).emplace_back(std::make_shared>(handRenderer)); + // } + // } + // else + // error("Unknown RenderMode.", __LINE__, __FUNCTION__, __FILE__); } // Itermediate workers (e.g. OpenPose format to cv::Mat, json & frames recorder, ...) @@ -672,6 +727,7 @@ namespace op // Frames processor (OpenPose format -> cv::Mat format) if (renderOutput) { + mPostProcessingWs = mergeWorkers(mPostProcessingWs, cpuRenderers); const auto opOutputToCvMat = std::make_shared(finalOutputSize); mPostProcessingWs.emplace_back(std::make_shared>(opOutputToCvMat)); } @@ -692,7 +748,7 @@ namespace op mOutputWs.emplace_back(std::make_shared>(keypointSaver)); if (wrapperStructFace.enable) mOutputWs.emplace_back(std::make_shared>(keypointSaver)); - if (wrapperHandStruct.extractAndRenderHands) + if (wrapperStructHand.extractAndRenderHands) mOutputWs.emplace_back(std::make_shared>(keypointSaver)); } // Write people pose data on disk (json format) @@ -702,7 +758,7 @@ namespace op mOutputWs.emplace_back(std::make_shared>(keypointJsonSaver)); if (wrapperStructFace.enable) mOutputWs.emplace_back(std::make_shared>(keypointJsonSaver)); - if (wrapperHandStruct.extractAndRenderHands) + if (wrapperStructHand.extractAndRenderHands) mOutputWs.emplace_back(std::make_shared>(keypointJsonSaver)); } // Write people pose data on disk (COCO validation json format) @@ -750,7 +806,8 @@ namespace op if (wrapperStructOutput.displayGui) { const auto gui = std::make_shared( - wrapperStructOutput.fullScreen, finalOutputSize, mThreadManager.getIsRunningSharedPtr(), spVideoSeek, poseExtractors, poseRenderers + wrapperStructOutput.fullScreen, finalOutputSize, mThreadManager.getIsRunningSharedPtr(), spVideoSeek, poseExtractors, + (wrapperStructPose.renderMode == RenderMode::Cpu ? std::vector>{poseCpuRenderer} : poseRenderers) ); spWGui = {std::make_shared>(gui)}; } diff --git a/include/openpose/wrapper/wrapperStructFace.hpp b/include/openpose/wrapper/wrapperStructFace.hpp index 29f79dd0..b9aa36f0 100644 --- a/include/openpose/wrapper/wrapperStructFace.hpp +++ b/include/openpose/wrapper/wrapperStructFace.hpp @@ -1,6 +1,7 @@ #ifndef OPENPOSE_WRAPPER_WRAPPER_STRUCT_FACE_HPP #define OPENPOSE_WRAPPER_WRAPPER_STRUCT_FACE_HPP +#include #include #include @@ -27,9 +28,10 @@ namespace op Point netInputSize; /** - * Whether to render the output (pose locations, face, background or PAF heat maps). + * Whether to render the output (pose locations, body, background or PAF heat maps) with CPU or GPU. + * Select `None` for no rendering, `Cpu` or `Gpu` por CPU and GPU rendering respectively. */ - bool renderOutput; + RenderMode renderMode; /** * Rendering blending alpha value of the pose point locations with respect to the background image. @@ -49,7 +51,8 @@ namespace op * Since all the elements of the struct are public, they can also be manually filled. */ WrapperStructFace(const bool enable = false, const Point& netInputSize = Point{368, 368}, - const bool renderOutput = false, const float alphaKeypoint = FACE_DEFAULT_ALPHA_KEYPOINT, + const RenderMode renderMode = RenderMode::None, + const float alphaKeypoint = FACE_DEFAULT_ALPHA_KEYPOINT, const float alphaHeatMap = FACE_DEFAULT_ALPHA_HEAT_MAP); }; } diff --git a/include/openpose/wrapper/wrapperStructPose.hpp b/include/openpose/wrapper/wrapperStructPose.hpp index 2c3bb3fe..a8844d84 100644 --- a/include/openpose/wrapper/wrapperStructPose.hpp +++ b/include/openpose/wrapper/wrapperStructPose.hpp @@ -63,9 +63,10 @@ namespace op float scaleGap; /** - * Whether to render the output (pose locations, body, background or PAF heat maps). + * Whether to render the output (pose locations, body, background or PAF heat maps) with CPU or GPU. + * Select `None` for no rendering, `Cpu` or `Gpu` por CPU and GPU rendering respectively. */ - bool renderOutput; + RenderMode renderMode; /** * Pose model, it affects the number of body parts to render @@ -124,7 +125,7 @@ namespace op */ WrapperStructPose(const Point& netInputSize = Point{656, 368}, const Point& outputSize = Point{1280, 720}, const ScaleMode keypointScale = ScaleMode::InputResolution, const int gpuNumber = 1, const int gpuNumberStart = 0, - const int scalesNumber = 1, const float scaleGap = 0.15f, const bool renderOutput = false, + const int scalesNumber = 1, const float scaleGap = 0.15f, const RenderMode renderMode = RenderMode::None, const PoseModel poseModel = PoseModel::COCO_18, const bool blendOriginalFrame = true, const float alphaKeypoint = POSE_DEFAULT_ALPHA_KEYPOINT, const float alphaHeatMap = POSE_DEFAULT_ALPHA_HEAT_MAP, const int defaultPartToRender = 0, const std::string& modelFolder = "models/", diff --git a/models/pose/coco/pose_deploy_linevec.prototxt b/models/pose/coco/pose_deploy_linevec.prototxt index 2048c2e8..fbe0c824 100755 --- a/models/pose/coco/pose_deploy_linevec.prototxt +++ b/models/pose/coco/pose_deploy_linevec.prototxt @@ -1,8 +1,8 @@ input: "image" input_dim: 1 input_dim: 3 -input_dim: 1 # This value will be defined at runtime -input_dim: 1 # This value will be defined at runtime +input_dim: 1 # This value will be defined at runtime +input_dim: 1 # This value will be defined at runtime layer { name: "conv1_1" type: "Convolution" diff --git a/models/pose/mpi/pose_deploy_linevec.prototxt b/models/pose/mpi/pose_deploy_linevec.prototxt index c4251176..54492d68 100755 --- a/models/pose/mpi/pose_deploy_linevec.prototxt +++ b/models/pose/mpi/pose_deploy_linevec.prototxt @@ -1,8 +1,8 @@ input: "image" input_dim: 1 input_dim: 3 -input_dim: 1 # This value will be defined at runtime -input_dim: 1 # This value will be defined at runtime +input_dim: 1 # This value will be defined at runtime +input_dim: 1 # This value will be defined at runtime layer { name: "conv1_1" type: "Convolution" diff --git a/models/pose/mpi/pose_deploy_linevec_faster_4_stages.prototxt b/models/pose/mpi/pose_deploy_linevec_faster_4_stages.prototxt index f92c6fc2..02ec1833 100644 --- a/models/pose/mpi/pose_deploy_linevec_faster_4_stages.prototxt +++ b/models/pose/mpi/pose_deploy_linevec_faster_4_stages.prototxt @@ -1,8 +1,8 @@ input: "image" input_dim: 1 input_dim: 3 -input_dim: 1 # This value will be defined at runtime -input_dim: 1 # This value will be defined at runtime +input_dim: 1 # This value will be defined at runtime +input_dim: 1 # This value will be defined at runtime layer { name: "conv1_1" type: "Convolution" diff --git a/src/openpose/core/array.cpp b/src/openpose/core/array.cpp index 3d42813b..d16f2385 100644 --- a/src/openpose/core/array.cpp +++ b/src/openpose/core/array.cpp @@ -322,13 +322,25 @@ namespace op { try { - if (mCvMatData.first) - return mCvMatData.second; - else - { + if (!mCvMatData.first) error("Array: cv::Mat functions only valid for T types defined by OpenCV: unsigned char, signed char, int, float & double", __LINE__, __FUNCTION__, __FILE__); - return mCvMatData.second; - } + return mCvMatData.second; + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return mCvMatData.second; + } + } + + template + cv::Mat& Array::getCvMat() + { + try + { + if (!mCvMatData.first) + error("Array: cv::Mat functions only valid for T types defined by OpenCV: unsigned char, signed char, int, float & double", __LINE__, __FUNCTION__, __FILE__); + return mCvMatData.second; } catch (const std::exception& e) { diff --git a/src/openpose/core/keypointScaler.cpp b/src/openpose/core/keypointScaler.cpp index c2081f75..c90ca765 100644 --- a/src/openpose/core/keypointScaler.cpp +++ b/src/openpose/core/keypointScaler.cpp @@ -1,5 +1,5 @@ -#include #include +#include #include namespace op diff --git a/src/openpose/core/renderer.cpp b/src/openpose/core/renderer.cpp index bc916ea7..dfde23fb 100644 --- a/src/openpose/core/renderer.cpp +++ b/src/openpose/core/renderer.cpp @@ -1,12 +1,14 @@ -#include -#include +#ifndef CPU_ONLY + #include + #include +#endif #include #include namespace op { - Renderer::Renderer(const unsigned long long volume, const float alphaKeypoint, const float alphaHeatMap, const unsigned int elementToRender, - const unsigned int numberElementsToRender) : + Renderer::Renderer(const unsigned long long volume, const float alphaKeypoint, const float alphaHeatMap, + const unsigned int elementToRender, const unsigned int numberElementsToRender) : spGpuMemoryPtr{std::make_shared()}, spElementToRender{std::make_shared>(elementToRender)}, spNumberElementsToRender{std::make_shared(numberElementsToRender)}, @@ -23,8 +25,10 @@ namespace op { try { - if (mIsLastRenderer) - cudaFree(*spGpuMemoryPtr); + #ifndef CPU_ONLY + if (mIsLastRenderer) + cudaFree(*spGpuMemoryPtr); + #endif } catch (const std::exception& e) { @@ -36,8 +40,10 @@ namespace op { try { - if (mIsFirstRenderer) - cudaMalloc((void**)(spGpuMemoryPtr.get()), mVolume * sizeof(float)); + #ifndef CPU_ONLY + if (mIsFirstRenderer) + cudaMalloc((void**)(spGpuMemoryPtr.get()), mVolume * sizeof(float)); + #endif } catch (const std::exception& e) { @@ -74,7 +80,8 @@ namespace op } } - std::tuple, std::shared_ptr, std::shared_ptr>, std::shared_ptr> Renderer::getSharedParameters() + std::tuple, std::shared_ptr, std::shared_ptr>, + std::shared_ptr> Renderer::getSharedParameters() { try { @@ -88,7 +95,8 @@ namespace op } } - void Renderer::setSharedParametersAndIfLast(const std::tuple, std::shared_ptr, std::shared_ptr>, + void Renderer::setSharedParametersAndIfLast(const std::tuple, std::shared_ptr, + std::shared_ptr>, std::shared_ptr>& tuple, const bool isLast) { try @@ -160,11 +168,16 @@ namespace op { try { - if (!*spGpuMemoryAllocated) - { - cudaMemcpy(*spGpuMemoryPtr, cpuMemory, mVolume * sizeof(float), cudaMemcpyHostToDevice); - *spGpuMemoryAllocated = true; - } + #ifndef CPU_ONLY + if (!*spGpuMemoryAllocated) + { + cudaMemcpy(*spGpuMemoryPtr, cpuMemory, mVolume * sizeof(float), cudaMemcpyHostToDevice); + *spGpuMemoryAllocated = true; + } + #else + error("GPU rendering not available if `CPU_ONLY` is set.", __LINE__, __FUNCTION__, __FILE__); + UNUSED(cpuMemory); + #endif } catch (const std::exception& e) { @@ -176,11 +189,16 @@ namespace op { try { - if (*spGpuMemoryAllocated && mIsLastRenderer) - { - cudaMemcpy(cpuMemory, *spGpuMemoryPtr, mVolume * sizeof(float), cudaMemcpyDeviceToHost); - *spGpuMemoryAllocated = false; - } + #ifndef CPU_ONLY + if (*spGpuMemoryAllocated && mIsLastRenderer) + { + cudaMemcpy(cpuMemory, *spGpuMemoryPtr, mVolume * sizeof(float), cudaMemcpyDeviceToHost); + *spGpuMemoryAllocated = false; + } + #else + error("GPU rendering not available if `CPU_ONLY` is set.", __LINE__, __FUNCTION__, __FILE__); + UNUSED(cpuMemory); + #endif } catch (const std::exception& e) { diff --git a/src/openpose/core/scaleKeypoints.cpp b/src/openpose/core/scaleKeypoints.cpp deleted file mode 100644 index 9952fde1..00000000 --- a/src/openpose/core/scaleKeypoints.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include - -namespace op -{ - const std::string errorMessage = "This function is only for array of dimension: [sizeA x sizeB x 3]."; - - void scaleKeypoints(Array& keypoints, const float scale) - { - try - { - scaleKeypoints(keypoints, scale, scale); - } - catch (const std::exception& e) - { - error(e.what(), __LINE__, __FUNCTION__, __FILE__); - } - } - - void scaleKeypoints(Array& keypoints, const float scaleX, const float scaleY) - { - try - { - if (scaleX != 1. && scaleY != 1.) - { - // Error check - if (!keypoints.empty() && keypoints.getSize(2) != 3) - error(errorMessage, __LINE__, __FUNCTION__, __FILE__); - // Get #people and #parts - const auto numberPeople = keypoints.getSize(0); - const auto numberParts = keypoints.getSize(1); - // For each person - for (auto person = 0 ; person < numberPeople ; person++) - { - // For each body part - for (auto part = 0 ; part < numberParts ; part++) - { - const auto finalIndex = 3*(person*numberParts + part); - keypoints[finalIndex] *= scaleX; - keypoints[finalIndex+1] *= scaleY; - } - } - } - } - catch (const std::exception& e) - { - error(e.what(), __LINE__, __FUNCTION__, __FILE__); - } - } - - void scaleKeypoints(Array& keypoints, const float scaleX, const float scaleY, const float offsetX, const float offsetY) - { - try - { - if (scaleX != 1. && scaleY != 1.) - { - // Error check - if (!keypoints.empty() && keypoints.getSize(2) != 3) - error(errorMessage, __LINE__, __FUNCTION__, __FILE__); - // Get #people and #parts - const auto numberPeople = keypoints.getSize(0); - const auto numberParts = keypoints.getSize(1); - // For each person - for (auto person = 0 ; person < numberPeople ; person++) - { - // For each body part - for (auto part = 0 ; part < numberParts ; part++) - { - const auto finalIndex = 3*(person*numberParts + part); - keypoints[finalIndex] = keypoints[finalIndex] * scaleX + offsetX; - keypoints[finalIndex+1] = keypoints[finalIndex+1] * scaleY + offsetY; - } - } - } - } - catch (const std::exception& e) - { - error(e.what(), __LINE__, __FUNCTION__, __FILE__); - } - } -} diff --git a/src/openpose/experimental/hand/handRenderer.cpp b/src/openpose/experimental/hand/handRenderer.cpp index 1a30e284..46be2796 100644 --- a/src/openpose/experimental/hand/handRenderer.cpp +++ b/src/openpose/experimental/hand/handRenderer.cpp @@ -1,7 +1,8 @@ -#include -#include -#include -#include +#ifndef CPU_ONLY + #include + #include +#endif +#include #include #include #include @@ -10,9 +11,10 @@ namespace op { namespace experimental { - HandRenderer::HandRenderer(const Point& frameSize) : - Renderer{(unsigned long long)(frameSize.area() * 3), HAND_DEFAULT_ALPHA_KEYPOINT, HAND_DEFAULT_ALPHA_HEAT_MAP}, - mFrameSize{frameSize} + HandRenderer::HandRenderer(const Point& frameSize, const float alphaKeypoint, const float alphaHeatMap, const RenderMode renderMode) : + Renderer{(unsigned long long)(frameSize.area() * 3), alphaKeypoint, alphaHeatMap}, + mFrameSize{frameSize}, + mRenderMode{renderMode} { } @@ -21,7 +23,9 @@ namespace op try { // Free CUDA pointers - Note that if pointers are 0 (i.e. nullptr), no operation is performed. - cudaFree(pGpuHands); + #ifndef CPU_ONLY + cudaFree(pGpuHands); + #endif } catch (const std::exception& e) { @@ -33,8 +37,13 @@ namespace op { try { + log("Starting initialization on thread.", Priority::Low, __LINE__, __FUNCTION__, __FILE__); Renderer::initializationOnThread(); - cudaMalloc((void**)(&pGpuHands), 2*HAND_NUMBER_PARTS * 3 * sizeof(float)); + // GPU memory allocation for rendering + #ifndef CPU_ONLY + cudaMalloc((void**)(&pGpuHands), 2*HAND_NUMBER_PARTS * 3 * sizeof(float)); + #endif + log("Finished initialization on thread.", Priority::Low, __LINE__, __FUNCTION__, __FILE__); } catch (const std::exception& e) { @@ -42,25 +51,67 @@ namespace op } } - void HandRenderer::renderHands(Array& outputData, const Array& handKeypoints) + void HandRenderer::renderHand(Array& outputData, const Array& handKeypoints) { try { - const auto elementRendered = spElementToRender->load(); // I prefer std::round(T&) over intRound(T) for std::atomic - const auto numberPeople = handKeypoints.getSize(0); + // Security checks + if (outputData.empty()) + error("Empty Array outputData.", __LINE__, __FUNCTION__, __FILE__); + + // CPU rendering + if (mRenderMode == RenderMode::Cpu) + renderHandCpu(outputData, handKeypoints); + // GPU rendering - if (numberPeople > 0 && elementRendered == 0) - { - cpuToGpuMemoryIfNotCopiedYet(outputData.getPtr()); - // Draw faceKeypoints - cudaMemcpy(pGpuHands, handKeypoints.getConstPtr(), 2*HAND_NUMBER_PARTS*3 * sizeof(float), cudaMemcpyHostToDevice); - renderHandsGpu(*spGpuMemoryPtr, mFrameSize, pGpuHands, handKeypoints.getSize(0)); - // CUDA check + else + renderHandGpu(outputData, handKeypoints); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } + + void HandRenderer::renderHandCpu(Array& outputData, const Array& handKeypoints) + { + try + { + renderHandKeypointsCpu(outputData, handKeypoints); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } + + void HandRenderer::renderHandGpu(Array& outputData, const Array& handKeypoints) + { + try + { + // GPU rendering + #ifndef CPU_ONLY + const auto elementRendered = spElementToRender->load(); // I prefer std::round(T&) over intRound(T) for std::atomic + const auto numberPeople = handKeypoints.getSize(0); + // GPU rendering + if (numberPeople > 0 && elementRendered == 0) + { + cpuToGpuMemoryIfNotCopiedYet(outputData.getPtr()); + // Draw handKeypoints + cudaMemcpy(pGpuHands, handKeypoints.getConstPtr(), 2*HAND_NUMBER_PARTS*3 * sizeof(float), cudaMemcpyHostToDevice); + renderHandKeypointsGpu(*spGpuMemoryPtr, mFrameSize, pGpuHands, handKeypoints.getSize(0)); + // CUDA check + cudaCheck(__LINE__, __FUNCTION__, __FILE__); + } + // GPU memory to CPU if last renderer + gpuToCpuMemoryIfLastRenderer(outputData.getPtr()); cudaCheck(__LINE__, __FUNCTION__, __FILE__); - } - // GPU memory to CPU if last renderer - gpuToCpuMemoryIfLastRenderer(outputData.getPtr()); - cudaCheck(__LINE__, __FUNCTION__, __FILE__); + // CPU_ONLY mode + #else + error("GPU rendering not available if `CPU_ONLY` is set.", __LINE__, __FUNCTION__, __FILE__); + UNUSED(outputData); + UNUSED(handKeypoints); + #endif } catch (const std::exception& e) { diff --git a/src/openpose/experimental/hand/renderHand.cpp b/src/openpose/experimental/hand/renderHand.cpp new file mode 100644 index 00000000..29d882e0 --- /dev/null +++ b/src/openpose/experimental/hand/renderHand.cpp @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include + +namespace op +{ + const std::vector COLORS{HAND_COLORS_RENDER}; + + void renderHandKeypointsCpu(Array& frameArray, const Array& handKeypoints) + { + try + { + if (!frameArray.empty()) + { + // Parameters + const auto thicknessCircleRatio = 1.f/200.f; + const auto thicknessLineRatioWRTCircle = 0.75f; + const auto& pairs = HAND_PAIRS_RENDER; + + // Render keypoints + renderKeypointsCpu(frameArray, handKeypoints, pairs, COLORS, thicknessCircleRatio, thicknessLineRatioWRTCircle); + } + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } +} diff --git a/src/openpose/experimental/hand/handRenderGpu.cu b/src/openpose/experimental/hand/renderHand.cu similarity index 63% rename from src/openpose/experimental/hand/handRenderGpu.cu rename to src/openpose/experimental/hand/renderHand.cu index 99922b67..3bc53df2 100644 --- a/src/openpose/experimental/hand/handRenderGpu.cu +++ b/src/openpose/experimental/hand/renderHand.cu @@ -3,37 +3,12 @@ #include #include #include -#include +#include namespace op { - __constant__ const unsigned int PART_PAIRS_GPU[] = HAND_PAIRS_TO_RENDER; - __constant__ const float RGB_COLORS[] = { - 179.f, 0.f, 0.f, - 204.f, 0.f, 0.f, - 230.f, 0.f, 0.f, - 255.f, 0.f, 0.f, - 143.f, 179.f, 0.f, - 163.f, 204.f, 0.f, - 184.f, 230.f, 0.f, - 204.f, 255.f, 0.f, - 0.f, 179.f, 71.f, - 0.f, 204.f, 82.f, - 0.f, 230.f, 92.f, - 0.f, 255.f, 102.f, - 0.f, 71.f, 179.f, - 0.f, 82.f, 204.f, - 0.f, 92.f, 230.f, - 0.f, 102.f, 255.f, - 143.f, 0.f, 179.f, - 163.f, 0.f, 204.f, - 184.f, 0.f, 230.f, - 204.f, 0.f, 255.f, - 179.f, 179.f, 179.f, - 179.f, 179.f, 179.f, - 179.f, 179.f, 179.f, - 179.f, 179.f, 179.f - }; + __constant__ const unsigned int PART_PAIRS_GPU[] = HAND_PAIRS_RENDER_GPU; + __constant__ const float COLORS[] = {HAND_COLORS_RENDER}; @@ -51,18 +26,19 @@ namespace op // Other parameters const auto numberPartPairs = sizeof(PART_PAIRS_GPU) / (2*sizeof(PART_PAIRS_GPU[0])); - const auto numberColors = sizeof(RGB_COLORS) / (3*sizeof(RGB_COLORS[0])); + const auto numberColors = sizeof(COLORS) / (3*sizeof(COLORS[0])); const auto radius = fastMin(targetWidth, targetHeight) / 100.f; const auto stickwidth = fastMin(targetWidth, targetHeight) / 80.f; // Render key points renderKeypoints(targetPtr, sharedMaxs, sharedMins, sharedScaleF, globalIdx, x, y, targetWidth, targetHeight, handsPtr, PART_PAIRS_GPU, numberHands, - HAND_NUMBER_PARTS, numberPartPairs, RGB_COLORS, numberColors, + HAND_NUMBER_PARTS, numberPartPairs, COLORS, numberColors, radius, stickwidth, threshold, alphaColorToAdd); } - void renderHandsGpu(float* framePtr, const Point& frameSize, const float* const handsPtr, const int numberHands, const float alphaColorToAdd) + void renderHandKeypointsGpu(float* framePtr, const Point& frameSize, const float* const handsPtr, const int numberHands, + const float alphaColorToAdd) { try { @@ -72,7 +48,8 @@ namespace op dim3 threadsPerBlock; dim3 numBlocks; std::tie(threadsPerBlock, numBlocks) = getNumberCudaThreadsAndBlocks(frameSize); - renderHandsParts<<>>(framePtr, frameSize.x, frameSize.y, handsPtr, numberHands, threshold, alphaColorToAdd); + renderHandsParts<<>>(framePtr, frameSize.x, frameSize.y, handsPtr, numberHands, threshold, + alphaColorToAdd); cudaCheck(__LINE__, __FUNCTION__, __FILE__); } } diff --git a/src/openpose/face/faceDetector.cpp b/src/openpose/face/faceDetector.cpp index 3c2a88bd..5c681fbd 100644 --- a/src/openpose/face/faceDetector.cpp +++ b/src/openpose/face/faceDetector.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include namespace op @@ -16,21 +17,6 @@ namespace op { } - float getDistance(const float* posePtr, const int elementA, const int elementB) - { - try - { - const auto pixelX = posePtr[elementA*3] - posePtr[elementB*3]; - const auto pixelY = posePtr[elementA*3+1] - posePtr[elementB*3+1]; - return std::sqrt(pixelX*pixelX+pixelY*pixelY); - } - catch (const std::exception& e) - { - error(e.what(), __LINE__, __FUNCTION__, __FILE__); - return -1.f; - } - } - inline Rectangle getFaceFromPoseKeypoints(const Array& poseKeypoints, const unsigned int personIndex, const unsigned int neck, const unsigned int nose, const unsigned int lEar, const unsigned int rEar, const unsigned int lEye, const unsigned int rEye, const float threshold) diff --git a/src/openpose/face/faceExtractor.cpp b/src/openpose/face/faceExtractor.cpp index 30d1cd84..8f4fab54 100644 --- a/src/openpose/face/faceExtractor.cpp +++ b/src/openpose/face/faceExtractor.cpp @@ -10,9 +10,11 @@ namespace op { - FaceExtractor::FaceExtractor(const Point& netInputSize, const Point& netOutputSize, const std::string& modelFolder, const int gpuId) : + FaceExtractor::FaceExtractor(const Point& netInputSize, const Point& netOutputSize, const std::string& modelFolder, + const int gpuId) : mNetOutputSize{netOutputSize}, - spNet{std::make_shared(std::array{1, 3, mNetOutputSize.y, mNetOutputSize.x}, modelFolder + FACE_PROTOTXT, modelFolder + FACE_TRAINED_MODEL, gpuId)}, + spNet{std::make_shared(std::array{1, 3, mNetOutputSize.y, mNetOutputSize.x}, modelFolder + FACE_PROTOTXT, + modelFolder + FACE_TRAINED_MODEL, gpuId)}, spResizeAndMergeCaffe{std::make_shared>()}, spNmsCaffe{std::make_shared>()}, mFaceImageCrop{mNetOutputSize.area()*3} @@ -21,6 +23,7 @@ namespace op { checkE(netOutputSize.x, netInputSize.x, "Net input and output size must be equal.", __LINE__, __FUNCTION__, __FILE__); checkE(netOutputSize.y, netInputSize.y, "Net input and output size must be equal.", __LINE__, __FUNCTION__, __FILE__); + checkE(netInputSize.x, netInputSize.y, "Net input size must be squared.", __LINE__, __FUNCTION__, __FILE__); // Properties for (auto& property : mProperties) property = 0.; @@ -77,24 +80,25 @@ namespace op // Set face size const auto numberPeople = (int)faceRectangles.size(); - mFaceKeypoints.reset({numberPeople, FACE_NUMBER_PARTS, 3}, 0); -// // Commented lines are for debugging -// log("\nAreas:"); -// cv::Mat cvInputDataCopy = cvInputData.clone(); + mFaceKeypoints.reset({numberPeople, (int)FACE_NUMBER_PARTS, 3}, 0); + + // // Debugging + // cv::Mat cvInputDataCopy = cvInputData.clone(); + // Extract face keypoints for each person for (auto person = 0 ; person < numberPeople ; person++) { // Only consider faces with a minimum pixel area const auto faceAreaSquared = std::sqrt(faceRectangles.at(person).area()); + // // Debugging + // log(std::to_string(cvInputData.cols) + " " + std::to_string(cvInputData.rows)); + // cv::rectangle(cvInputDataCopy, + // cv::Point{(int)faceRectangle.x, (int)faceRectangle.y}, + // cv::Point{(int)faceRectangle.bottomRight().x, (int)faceRectangle.bottomRight().y}, + // cv::Scalar{0,0,255}, 2); // Get parts if (faceAreaSquared > 50) { const auto& faceRectangle = faceRectangles.at(person); -// log(faceAreaSquared); -// log(std::to_string(cvInputData.cols) + " " + std::to_string(cvInputData.rows)); -// cv::rectangle(cvInputDataCopy, -// cv::Point{(int)faceRectangle.x, (int)faceRectangle.y}, -// cv::Point{(int)faceRectangle.bottomRight().x, (int)faceRectangle.bottomRight().y}, -// cv::Scalar{255,0,255}, 2); // Get face position(s) const Point faceCenterPosition{faceRectangle.topLeft()}; const auto faceSize = fastMax(faceRectangle.width, faceRectangle.height); @@ -112,8 +116,11 @@ namespace op // cv::Mat -> float* uCharCvMatToFloatPtr(mFaceImageCrop.getPtr(), faceImage, true); -// if (person < 5) -// cv::imshow("faceImage" + std::to_string(person), faceImage); + + // // Debugging + // if (person < 5) + // cv::imshow("faceImage" + std::to_string(person), faceImage); + // 1. Caffe deep network auto* inputDataGpuPtr = spNet->getInputDataGpuPtr(); cudaMemcpy(inputDataGpuPtr, mFaceImageCrop.getPtr(), mNetOutputSize.area() * 3 * sizeof(float), cudaMemcpyHostToDevice); @@ -162,7 +169,7 @@ namespace op const auto x = facePeaksPtr[xyIndex]; const auto y = facePeaksPtr[xyIndex + 1]; const auto score = facePeaksPtr[xyIndex + 2]; - const auto baseIndex = (person * FACE_NUMBER_PARTS + part) * 3; + const auto baseIndex = mFaceKeypoints.getSize(2) * (person * mFaceKeypoints.getSize(1) + part); mFaceKeypoints[baseIndex] = scaleInputToOutput * (Mscaling.at(0,0) * x + Mscaling.at(0,1) * y + Mscaling.at(0,2)); mFaceKeypoints[baseIndex+1] = scaleInputToOutput * (Mscaling.at(1,0) * x + Mscaling.at(1,1) * y + Mscaling.at(1,2)); mFaceKeypoints[baseIndex+2] = score; @@ -170,7 +177,8 @@ namespace op } } } -// cv::imshow("AcvInputDataCopy", cvInputDataCopy); + // // Debugging + // cv::imshow("AcvInputDataCopy", cvInputDataCopy); } else mFaceKeypoints.reset(); diff --git a/src/openpose/face/faceRenderer.cpp b/src/openpose/face/faceRenderer.cpp index 48689d86..b1d9d8ca 100644 --- a/src/openpose/face/faceRenderer.cpp +++ b/src/openpose/face/faceRenderer.cpp @@ -1,16 +1,18 @@ -#include -#include -#include -#include +#ifndef CPU_ONLY + #include + #include +#endif +#include #include #include #include namespace op { - FaceRenderer::FaceRenderer(const Point& frameSize, const float alphaKeypoint, const float alphaHeatMap) : + FaceRenderer::FaceRenderer(const Point& frameSize, const float alphaKeypoint, const float alphaHeatMap, const RenderMode renderMode) : Renderer{(unsigned long long)(frameSize.area() * 3), alphaKeypoint, alphaHeatMap}, - mFrameSize{frameSize} + mFrameSize{frameSize}, + mRenderMode{renderMode} { } @@ -19,7 +21,9 @@ namespace op try { // Free CUDA pointers - Note that if pointers are 0 (i.e. nullptr), no operation is performed. - cudaFree(pGpuFace); + #ifndef CPU_ONLY + cudaFree(pGpuFace); + #endif } catch (const std::exception& e) { @@ -31,8 +35,13 @@ namespace op { try { + log("Starting initialization on thread.", Priority::Low, __LINE__, __FUNCTION__, __FILE__); Renderer::initializationOnThread(); - cudaMalloc((void**)(&pGpuFace), POSE_MAX_PEOPLE * FACE_NUMBER_PARTS * 3 * sizeof(float)); + // GPU memory allocation for rendering + #ifndef CPU_ONLY + cudaMalloc((void**)(&pGpuFace), POSE_MAX_PEOPLE * FACE_NUMBER_PARTS * 3 * sizeof(float)); + #endif + log("Finished initialization on thread.", Priority::Low, __LINE__, __FUNCTION__, __FILE__); } catch (const std::exception& e) { @@ -44,21 +53,63 @@ namespace op { try { - const auto elementRendered = spElementToRender->load(); // I prefer std::round(T&) over intRound(T) for std::atomic - const auto numberPeople = faceKeypoints.getSize(0); + // Security checks + if (outputData.empty()) + error("Empty Array outputData.", __LINE__, __FUNCTION__, __FILE__); + + // CPU rendering + if (mRenderMode == RenderMode::Cpu) + renderFaceCpu(outputData, faceKeypoints); + // GPU rendering - if (numberPeople > 0 && elementRendered == 0) - { - cpuToGpuMemoryIfNotCopiedYet(outputData.getPtr()); - // Draw faceKeypoints - cudaMemcpy(pGpuFace, faceKeypoints.getConstPtr(), faceKeypoints.getSize(0) * FACE_NUMBER_PARTS * 3 * sizeof(float), cudaMemcpyHostToDevice); - renderFaceGpu(*spGpuMemoryPtr, mFrameSize, pGpuFace, faceKeypoints.getSize(0), getAlphaKeypoint()); - // CUDA check + else + renderFaceGpu(outputData, faceKeypoints); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } + + void FaceRenderer::renderFaceCpu(Array& outputData, const Array& faceKeypoints) + { + try + { + renderFaceKeypointsCpu(outputData, faceKeypoints); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } + + void FaceRenderer::renderFaceGpu(Array& outputData, const Array& faceKeypoints) + { + try + { + // GPU rendering + #ifndef CPU_ONLY + const auto elementRendered = spElementToRender->load(); // I prefer std::round(T&) over intRound(T) for std::atomic + const auto numberPeople = faceKeypoints.getSize(0); + if (numberPeople > 0 && elementRendered == 0) + { + cpuToGpuMemoryIfNotCopiedYet(outputData.getPtr()); + // Draw faceKeypoints + cudaMemcpy(pGpuFace, faceKeypoints.getConstPtr(), faceKeypoints.getSize(0) * FACE_NUMBER_PARTS * 3 * sizeof(float), + cudaMemcpyHostToDevice); + renderFaceKeypointsGpu(*spGpuMemoryPtr, mFrameSize, pGpuFace, faceKeypoints.getSize(0), getAlphaKeypoint()); + // CUDA check + cudaCheck(__LINE__, __FUNCTION__, __FILE__); + } + // GPU memory to CPU if last renderer + gpuToCpuMemoryIfLastRenderer(outputData.getPtr()); cudaCheck(__LINE__, __FUNCTION__, __FILE__); - } - // GPU memory to CPU if last renderer - gpuToCpuMemoryIfLastRenderer(outputData.getPtr()); - cudaCheck(__LINE__, __FUNCTION__, __FILE__); + // CPU_ONLY mode + #else + error("GPU rendering not available if `CPU_ONLY` is set.", __LINE__, __FUNCTION__, __FILE__); + UNUSED(outputData); + UNUSED(faceKeypoints); + #endif } catch (const std::exception& e) { diff --git a/src/openpose/face/renderFace.cpp b/src/openpose/face/renderFace.cpp new file mode 100644 index 00000000..2f7aa70e --- /dev/null +++ b/src/openpose/face/renderFace.cpp @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include + +namespace op +{ + const std::vector COLORS{FACE_COLORS_RENDER}; + + void renderFaceKeypointsCpu(Array& frameArray, const Array& faceKeypoints) + { + try + { + if (!frameArray.empty()) + { + // Parameters + const auto thicknessCircleRatio = 1.f/75.f; + const auto thicknessLineRatioWRTCircle = 0.334f; + const auto& pairs = FACE_PAIRS_RENDER; + + // Render keypoints + renderKeypointsCpu(frameArray, faceKeypoints, pairs, COLORS, thicknessCircleRatio, thicknessLineRatioWRTCircle); + } + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } +} diff --git a/src/openpose/face/faceRenderGpu.cu b/src/openpose/face/renderFace.cu similarity index 79% rename from src/openpose/face/faceRenderGpu.cu rename to src/openpose/face/renderFace.cu index b8d66d75..e4e5823f 100644 --- a/src/openpose/face/faceRenderGpu.cu +++ b/src/openpose/face/renderFace.cu @@ -3,15 +3,13 @@ #include #include #include -#include +#include namespace op { const dim3 THREADS_PER_BLOCK{128, 128, 1}; - __constant__ const unsigned int PART_PAIRS_GPU[] = FACE_PAIRS_TO_RENDER; - __constant__ const float RGB_COLORS[] = { - 255.f, 255.f, 255.f, - }; + __constant__ const unsigned int PART_PAIRS_GPU[] = FACE_PAIRS_RENDER_GPU; + __constant__ const float COLORS[] = {FACE_COLORS_RENDER}; @@ -29,18 +27,19 @@ namespace op // Other parameters const auto numberPartPairs = sizeof(PART_PAIRS_GPU) / (2*sizeof(PART_PAIRS_GPU[0])); - const auto numberColors = sizeof(RGB_COLORS) / (3*sizeof(RGB_COLORS[0])); + const auto numberColors = sizeof(COLORS) / (3*sizeof(COLORS[0])); const auto radius = fastMin(targetWidth, targetHeight) / 120.f; const auto stickwidth = fastMin(targetWidth, targetHeight) / 250.f; // Render key points renderKeypoints(targetPtr, sharedMaxs, sharedMins, sharedScaleF, globalIdx, x, y, targetWidth, targetHeight, facePtr, PART_PAIRS_GPU, numberFaces, - FACE_NUMBER_PARTS, numberPartPairs, RGB_COLORS, numberColors, + FACE_NUMBER_PARTS, numberPartPairs, COLORS, numberColors, radius, stickwidth, threshold, alphaColorToAdd); } - void renderFaceGpu(float* framePtr, const Point& frameSize, const float* const facePtr, const int numberFaces, const float alphaColorToAdd) + void renderFaceKeypointsGpu(float* framePtr, const Point& frameSize, const float* const facePtr, const int numberFaces, + const float alphaColorToAdd) { try { @@ -48,7 +47,8 @@ namespace op { const auto threshold = 0.4f; const auto numBlocks = getNumberCudaBlocks(frameSize, THREADS_PER_BLOCK); - renderFaceParts<<>>(framePtr, frameSize.x, frameSize.y, facePtr, numberFaces, threshold, alphaColorToAdd); + renderFaceParts<<>>(framePtr, frameSize.x, frameSize.y, facePtr, numberFaces, threshold, + alphaColorToAdd); cudaCheck(__LINE__, __FUNCTION__, __FILE__); } } diff --git a/src/openpose/pose/poseExtractor.cpp b/src/openpose/pose/poseExtractor.cpp index 88185285..0e58c8fa 100644 --- a/src/openpose/pose/poseExtractor.cpp +++ b/src/openpose/pose/poseExtractor.cpp @@ -7,78 +7,6 @@ namespace op { - // In case I wanna order the pose keypoints by area - // inline int getPersonArea(const float* posePtr, const int numberBodyParts, const float threshold) - // { - // try - // { - // if (numberBodyParts < 1) - // error("Number body parts must be > 0", __LINE__, __FUNCTION__, __FILE__); - - // unsigned int minX = -1; - // unsigned int maxX = 0u; - // unsigned int minY = -1; - // unsigned int maxY = 0u; - // for (auto part = 0 ; part < numberBodyParts ; part++) - // { - // const auto score = posePtr[3*part + 2]; - // if (score > threshold) - // { - // const auto x = posePtr[3*part]; - // const auto y = posePtr[3*part + 1]; - // // Set X - // if (maxX < x) - // maxX = x; - // if (minX > x) - // minX = x; - // // Set Y - // if (maxY < y) - // maxY = y; - // if (minY > y) - // minY = y; - // } - // } - // return (maxX - minX) * (maxY - minY); - // } - // catch (const std::exception& e) - // { - // error(e.what(), __LINE__, __FUNCTION__, __FILE__); - // return 0; - // } - // } - - // inline int getPersonWithMaxArea(const Array& poseKeypoints, const float threshold) - // { - // try - // { - // if (!poseKeypoints.empty()) - // { - // const auto numberPeople = poseKeypoints.getSize(0); - // const auto numberBodyParts = poseKeypoints.getSize(1); - // const auto area = numberBodyParts * poseKeypoints.getSize(2); - // auto biggestPoseIndex = -1; - // auto biggestArea = -1; - // for (auto person = 0 ; person < numberPeople ; person++) - // { - // const auto newPersonArea = getPersonArea(&poseKeypoints[person*area], numberBodyParts, threshold); - // if (newPersonArea > biggestArea) - // { - // biggestArea = newPersonArea; - // biggestPoseIndex = person; - // } - // } - // return biggestPoseIndex; - // } - // else - // return -1; - // } - // catch (const std::exception& e) - // { - // error(e.what(), __LINE__, __FUNCTION__, __FILE__); - // return -1; - // } - // } - bool heatMapTypesHas(const std::vector& heatMapTypes, const HeatMapType heatMapType) { try diff --git a/src/openpose/pose/poseParameters.cpp b/src/openpose/pose/poseParameters.cpp index 65255adf..5f70117f 100644 --- a/src/openpose/pose/poseParameters.cpp +++ b/src/openpose/pose/poseParameters.cpp @@ -3,7 +3,7 @@ namespace op { - const std::array, 3> POSE_BODY_PART_MAPPING{ POSE_COCO_BODY_PARTS, POSE_MPI_BODY_PARTS, POSE_MPI_BODY_PARTS }; + const std::array, 3> POSE_BODY_PART_MAPPING{ POSE_COCO_BODY_PARTS, POSE_MPI_BODY_PARTS, POSE_MPI_BODY_PARTS }; unsigned int poseBodyPartMapStringToKey(const PoseModel poseModel, const std::vector& strings) { @@ -24,29 +24,29 @@ namespace op } } - unsigned int poseBodyPartMapStringToKey(const PoseModel poseModel, const std::string& string) - { - try - { - return poseBodyPartMapStringToKey(poseModel, std::vector{string}); - } - catch (const std::exception& e) - { - error(e.what(), __LINE__, __FUNCTION__, __FILE__); - return 0; - } - } + unsigned int poseBodyPartMapStringToKey(const PoseModel poseModel, const std::string& string) + { + try + { + return poseBodyPartMapStringToKey(poseModel, std::vector{string}); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return 0; + } + } - const std::map& getPoseBodyPartMapping(const PoseModel poseModel) - { - try - { - return POSE_BODY_PART_MAPPING.at((int)poseModel); - } - catch (const std::exception& e) - { - error(e.what(), __LINE__, __FUNCTION__, __FILE__); - return POSE_BODY_PART_MAPPING[(int)poseModel]; - } - } + const std::map& getPoseBodyPartMapping(const PoseModel poseModel) + { + try + { + return POSE_BODY_PART_MAPPING.at((int)poseModel); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return POSE_BODY_PART_MAPPING[(int)poseModel]; + } + } } diff --git a/src/openpose/pose/poseRenderer.cpp b/src/openpose/pose/poseRenderer.cpp index c349d4a5..09953b4a 100644 --- a/src/openpose/pose/poseRenderer.cpp +++ b/src/openpose/pose/poseRenderer.cpp @@ -1,7 +1,9 @@ -#include -#include +#ifndef CPU_ONLY + #include + #include +#endif #include -#include +#include #include #include #include @@ -37,8 +39,10 @@ namespace op } } - PoseRenderer::PoseRenderer(const Point& heatMapsSize, const Point& outputSize, const PoseModel poseModel, const std::shared_ptr& poseExtractor, - const bool blendOriginalFrame, const float alphaKeypoint, const float alphaHeatMap, const unsigned int elementToRender) : + PoseRenderer::PoseRenderer(const Point& heatMapsSize, const Point& outputSize, const PoseModel poseModel, + const std::shared_ptr& poseExtractor, const bool blendOriginalFrame, + const float alphaKeypoint, const float alphaHeatMap, const unsigned int elementToRender, + const RenderMode renderMode) : // #body elements to render = #body parts (size()) + #body part pair connections + 3 (+whole pose +whole heatmaps +PAFs) // POSE_BODY_PART_MAPPING crashes on Windows, replaced by getPoseBodyPartMapping Renderer{(unsigned long long)(outputSize.area() * 3), alphaKeypoint, alphaHeatMap, elementToRender, @@ -48,6 +52,7 @@ namespace op mPoseModel{poseModel}, mPartIndexToName{createPartToName(poseModel)}, spPoseExtractor{poseExtractor}, + mRenderMode{renderMode}, mBlendOriginalFrame{blendOriginalFrame}, mShowGooglyEyes{false}, pGpuPose{nullptr} @@ -59,7 +64,9 @@ namespace op try { // Free CUDA pointers - Note that if pointers are 0 (i.e. nullptr), no operation is performed. - cudaFree(pGpuPose); + #ifndef CPU_ONLY + cudaFree(pGpuPose); + #endif } catch (const std::exception& e) { @@ -71,11 +78,13 @@ namespace op { try { - // GPU memory allocation for rendering log("Starting initialization on thread.", Priority::Low, __LINE__, __FUNCTION__, __FILE__); Renderer::initializationOnThread(); - cudaMalloc((void**)(&pGpuPose), POSE_MAX_PEOPLE * POSE_NUMBER_BODY_PARTS[(int)mPoseModel] * 3 * sizeof(float)); - cudaCheck(__LINE__, __FUNCTION__, __FILE__); + // GPU memory allocation for rendering + #ifndef CPU_ONLY + cudaMalloc((void**)(&pGpuPose), POSE_MAX_PEOPLE * POSE_NUMBER_BODY_PARTS[(int)mPoseModel] * 3 * sizeof(float)); + cudaCheck(__LINE__, __FUNCTION__, __FILE__); + #endif log("Finished initialization on thread.", Priority::Low, __LINE__, __FUNCTION__, __FILE__); } catch (const std::exception& e) @@ -134,73 +143,135 @@ namespace op } } - std::pair PoseRenderer::renderPose(Array& outputData, const Array& poseKeypoints, const float scaleNetToOutput) + std::pair PoseRenderer::renderPose(Array& outputData, const Array& poseKeypoints, + const float scaleNetToOutput) { try { // Security checks if (outputData.empty()) - error("Empty outputData.", __LINE__, __FUNCTION__, __FILE__); + error("Empty Array outputData.", __LINE__, __FUNCTION__, __FILE__); - const auto elementRendered = spElementToRender->load(); // I prefer std::round(T&) over intRound(T) for std::atomic - const auto numberPeople = poseKeypoints.getSize(0); - std::string elementRenderedName; + // CPU rendering + if (mRenderMode == RenderMode::Cpu) + return renderPoseCpu(outputData, poseKeypoints, scaleNetToOutput); // GPU rendering - if (numberPeople > 0 || elementRendered != 0 || !mBlendOriginalFrame) + else + return renderPoseGpu(outputData, poseKeypoints, scaleNetToOutput); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return std::make_pair(-1, ""); + } + } + + std::pair PoseRenderer::renderPoseCpu(Array& outputData, const Array& poseKeypoints, + const float scaleNetToOutput) + { + try + { + const auto elementRendered = spElementToRender->load(); + + std::string elementRenderedName; + // CPU rendering + // Draw poseKeypoints + if (elementRendered == 0) + renderPoseKeypointsCpu(outputData, poseKeypoints, mPoseModel, mBlendOriginalFrame); + // Draw heat maps / PAFs + else { - cpuToGpuMemoryIfNotCopiedYet(outputData.getPtr()); - cudaCheck(__LINE__, __FUNCTION__, __FILE__); - const auto numberBodyParts = POSE_NUMBER_BODY_PARTS[(int)mPoseModel]; - const auto numberBodyPartsPlusBkg = numberBodyParts+1; - // Draw poseKeypoints - if (elementRendered == 0) + UNUSED(scaleNetToOutput); + error("CPU rendering only available for drawing keypoints, no heat maps nor PAFs.", __LINE__, __FUNCTION__, __FILE__); + } + // Return result + return std::make_pair(elementRendered, elementRenderedName); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return std::make_pair(-1, ""); + } + } + + std::pair PoseRenderer::renderPoseGpu(Array& outputData, const Array& poseKeypoints, + const float scaleNetToOutput) + { + try + { + const auto elementRendered = spElementToRender->load(); + + std::string elementRenderedName; + // GPU rendering + #ifndef CPU_ONLY + const auto numberPeople = poseKeypoints.getSize(0); + if (numberPeople > 0 || elementRendered != 0 || !mBlendOriginalFrame) { - if (!poseKeypoints.empty()) - cudaMemcpy(pGpuPose, poseKeypoints.getConstPtr(), numberPeople * numberBodyParts * 3 * sizeof(float), cudaMemcpyHostToDevice); - renderPoseGpu(*spGpuMemoryPtr, mPoseModel, numberPeople, mOutputSize, pGpuPose, mShowGooglyEyes, mBlendOriginalFrame, getAlphaKeypoint()); - } - else - { - if (scaleNetToOutput == -1.f) - error("Non valid scaleNetToOutput.", __LINE__, __FUNCTION__, __FILE__); - // Draw specific body part or bkg - if (elementRendered <= numberBodyPartsPlusBkg) + cpuToGpuMemoryIfNotCopiedYet(outputData.getPtr()); + cudaCheck(__LINE__, __FUNCTION__, __FILE__); + const auto numberBodyParts = POSE_NUMBER_BODY_PARTS[(int)mPoseModel]; + const auto numberBodyPartsPlusBkg = numberBodyParts+1; + // Draw poseKeypoints + if (elementRendered == 0) { - elementRenderedName = mPartIndexToName.at(elementRendered-1); - renderBodyPartGpu(*spGpuMemoryPtr, mPoseModel, mOutputSize, spPoseExtractor->getHeatMapCpuConstPtr(), mHeatMapsSize, - scaleNetToOutput, elementRendered, (mBlendOriginalFrame ? getAlphaHeatMap() : 1.f)); + if (!poseKeypoints.empty()) + cudaMemcpy(pGpuPose, poseKeypoints.getConstPtr(), numberPeople * numberBodyParts * 3 * sizeof(float), + cudaMemcpyHostToDevice); + renderPoseKeypointsGpu(*spGpuMemoryPtr, mPoseModel, numberPeople, mOutputSize, pGpuPose, + mShowGooglyEyes, mBlendOriginalFrame, getAlphaKeypoint()); } - // Draw PAFs (Part Affinity Fields) - else if (elementRendered == numberBodyPartsPlusBkg+1) - { - elementRenderedName = "Heatmaps"; - renderBodyPartsGpu(*spGpuMemoryPtr, mPoseModel, mOutputSize, spPoseExtractor->getHeatMapCpuConstPtr(), mHeatMapsSize, scaleNetToOutput, - (mBlendOriginalFrame ? getAlphaHeatMap() : 1.f)); - } - // Draw PAFs (Part Affinity Fields) - else if (elementRendered == numberBodyPartsPlusBkg+2) - { - elementRenderedName = "PAFs (Part Affinity Fields)"; - renderPartAffinityFieldsGpu(*spGpuMemoryPtr, mPoseModel, mOutputSize, spPoseExtractor->getHeatMapCpuConstPtr(), - mHeatMapsSize, scaleNetToOutput, (mBlendOriginalFrame ? getAlphaHeatMap() : 1.f)); - } - // Draw affinity between 2 body parts else { - const auto affinityPart = (elementRendered-numberBodyPartsPlusBkg-3)*2; - const auto affinityPartMapped = POSE_MAP_IDX[(int)mPoseModel].at(affinityPart); - elementRenderedName = mPartIndexToName.at(affinityPartMapped); - elementRenderedName = elementRenderedName.substr(0, elementRenderedName.find("(")); - renderPartAffinityFieldGpu(*spGpuMemoryPtr, mPoseModel, mOutputSize, spPoseExtractor->getHeatMapCpuConstPtr(), - mHeatMapsSize, scaleNetToOutput, affinityPartMapped, (mBlendOriginalFrame ? getAlphaHeatMap() : 1.f)); - } + if (scaleNetToOutput == -1.f) + error("Non valid scaleNetToOutput.", __LINE__, __FUNCTION__, __FILE__); + // Draw specific body part or bkg + if (elementRendered <= numberBodyPartsPlusBkg) + { + elementRenderedName = mPartIndexToName.at(elementRendered-1); + renderPoseHeatMapGpu(*spGpuMemoryPtr, mPoseModel, mOutputSize, spPoseExtractor->getHeatMapCpuConstPtr(), + mHeatMapsSize, scaleNetToOutput, elementRendered, + (mBlendOriginalFrame ? getAlphaHeatMap() : 1.f)); + } + // Draw PAFs (Part Affinity Fields) + else if (elementRendered == numberBodyPartsPlusBkg+1) + { + elementRenderedName = "Heatmaps"; + renderPoseHeatMapsGpu(*spGpuMemoryPtr, mPoseModel, mOutputSize, spPoseExtractor->getHeatMapCpuConstPtr(), + mHeatMapsSize, scaleNetToOutput, (mBlendOriginalFrame ? getAlphaHeatMap() : 1.f)); + } + // Draw PAFs (Part Affinity Fields) + else if (elementRendered == numberBodyPartsPlusBkg+2) + { + elementRenderedName = "PAFs (Part Affinity Fields)"; + renderPosePAFsGpu(*spGpuMemoryPtr, mPoseModel, mOutputSize, spPoseExtractor->getHeatMapCpuConstPtr(), + mHeatMapsSize, scaleNetToOutput, (mBlendOriginalFrame ? getAlphaHeatMap() : 1.f)); + } + // Draw affinity between 2 body parts + else + { + const auto affinityPart = (elementRendered-numberBodyPartsPlusBkg-3)*2; + const auto affinityPartMapped = POSE_MAP_IDX[(int)mPoseModel].at(affinityPart); + elementRenderedName = mPartIndexToName.at(affinityPartMapped); + elementRenderedName = elementRenderedName.substr(0, elementRenderedName.find("(")); + renderPosePAFGpu(*spGpuMemoryPtr, mPoseModel, mOutputSize, spPoseExtractor->getHeatMapCpuConstPtr(), + mHeatMapsSize, scaleNetToOutput, affinityPartMapped, + (mBlendOriginalFrame ? getAlphaHeatMap() : 1.f)); + } + } } - } - // GPU memory to CPU if last renderer - gpuToCpuMemoryIfLastRenderer(outputData.getPtr()); - cudaCheck(__LINE__, __FUNCTION__, __FILE__); - + // GPU memory to CPU if last renderer + gpuToCpuMemoryIfLastRenderer(outputData.getPtr()); + cudaCheck(__LINE__, __FUNCTION__, __FILE__); + // CPU_ONLY mode + #else + error("GPU rendering not available if `CPU_ONLY` is set.", __LINE__, __FUNCTION__, __FILE__); + UNUSED(elementRendered); + UNUSED(outputData); + UNUSED(poseKeypoints); + UNUSED(scaleNetToOutput); + #endif + // Return result return std::make_pair(elementRendered, elementRenderedName); } catch (const std::exception& e) diff --git a/src/openpose/pose/renderPose.cpp b/src/openpose/pose/renderPose.cpp new file mode 100644 index 00000000..9cb0aebf --- /dev/null +++ b/src/openpose/pose/renderPose.cpp @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include + +namespace op +{ + const std::vector COCO_COLORS{POSE_COCO_COLORS_RENDER}; + const std::vector MPI_COLORS{POSE_MPI_COLORS_RENDER}; + + void renderPoseKeypointsCpu(Array& frameArray, const Array& poseKeypoints, const PoseModel poseModel, const bool blendOriginalFrame) + { + try + { + if (!frameArray.empty()) + { + // Array --> cv::Mat + auto frame = frameArray.getCvMat(); + + // Background + if (!blendOriginalFrame) + frame.setTo(0.f); // [0-255] + + // Parameters + const auto thicknessCircleRatio = 1.f/75.f; + const auto thicknessLineRatioWRTCircle = 0.75f; + const auto& pairs = POSE_BODY_PART_PAIRS_RENDER[(int)poseModel]; + const auto& colors = (poseModel == PoseModel::COCO_18 ? COCO_COLORS : MPI_COLORS); + + // Render keypoints + renderKeypointsCpu(frameArray, poseKeypoints, pairs, colors, thicknessCircleRatio, thicknessLineRatioWRTCircle); + } + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } +} diff --git a/src/openpose/pose/poseRenderGpu.cu b/src/openpose/pose/renderPose.cu similarity index 79% rename from src/openpose/pose/poseRenderGpu.cu rename to src/openpose/pose/renderPose.cu index b01c7be9..675afc6d 100644 --- a/src/openpose/pose/poseRenderGpu.cu +++ b/src/openpose/pose/renderPose.cu @@ -1,74 +1,18 @@ -#include // std::pair #include #include #include #include #include -#include +#include namespace op { - // PI digits: http://www.piday.org/million/ - __constant__ const float PI = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745f; - __constant__ const unsigned int COCO_PAIRS_GPU[] = POSE_COCO_PAIRS_TO_RENDER; - __constant__ const unsigned int MPI_PAIRS_GPU[] = POSE_MPI_PAIRS_TO_RENDER; - __constant__ const float COCO_RGB_COLORS[] = { - 255.f, 0.f, 0.f, - 255.f, 85.f, 0.f, - 255.f, 170.f, 0.f, - 255.f, 255.f, 0.f, - 170.f, 255.f, 0.f, - 85.f, 255.f, 0.f, - 0.f, 255.f, 0.f, - 0.f, 255.f, 85.f, - 0.f, 255.f, 170.f, - 0.f, 255.f, 255.f, - 0.f, 170.f, 255.f, - 0.f, 85.f, 255.f, - 0.f, 0.f, 255.f, - 85.f, 0.f, 255.f, - 170.f, 0.f, 255.f, - 255.f, 0.f, 255.f, - 255.f, 0.f, 170.f, - 255.f, 0.f, 85.f, - }; - __constant__ const float MPI_RGB_COLORS[] = { // MPI colors chosen such that they are closed to COCO colors - 255.f, 0.f, 85.f, - 255.f, 0.f, 0.f, - 255.f, 85.f, 0.f, - 255.f, 170.f, 0.f, - 255.f, 255.f, 0.f, - 170.f, 255.f, 0.f, - 85.f, 255.f, 0.f, - 43.f, 255.f, 0.f, - 0.f, 255.f, 0.f, - 0.f, 255.f, 85.f, - 0.f, 255.f, 170.f, - 0.f, 255.f, 255.f, - 0.f, 170.f, 255.f, - 0.f, 85.f, 255.f, - 0.f, 0.f, 255.f, - }; - __constant__ const float RGB_COLORS_BACKGROUND[] = { - 255.f, 0.f, 0.f, - 255.f, 85.f, 0.f, - 255.f, 170.f, 0.f, - 255.f, 255.f, 0.f, - 170.f, 255.f, 0.f, - 85.f, 255.f, 0.f, - 0.f, 255.f, 0.f, - 0.f, 255.f, 85.f, - 0.f, 255.f, 170.f, - 0.f, 255.f, 255.f, - 0.f, 170.f, 255.f, - 0.f, 85.f, 255.f, - 0.f, 0.f, 255.f, - 85.f, 0.f, 255.f, - 170.f, 0.f, 255.f, - 255.f, 0.f, 255.f, - 255.f, 0.f, 170.f, - 255.f, 0.f, 85.f, - }; + // PI digits: http://www.piday.org/million/ + __constant__ const float PI = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745f; + __constant__ const unsigned int COCO_PAIRS_GPU[] = POSE_COCO_PAIRS_RENDER_GPU; + __constant__ const unsigned int MPI_PAIRS_GPU[] = POSE_MPI_PAIRS_RENDER_GPU; + __constant__ const float COCO_COLORS[] = {POSE_COCO_COLORS_RENDER}; + __constant__ const float MPI_COLORS[] = {POSE_MPI_COLORS_RENDER}; @@ -163,14 +107,14 @@ namespace op // Other parameters const auto numberPartPairs = sizeof(COCO_PAIRS_GPU) / (2*sizeof(COCO_PAIRS_GPU[0])); - const auto numberColors = sizeof(COCO_RGB_COLORS) / (3*sizeof(COCO_RGB_COLORS[0])); + const auto numberColors = sizeof(COCO_COLORS) / (3*sizeof(COCO_COLORS[0])); const auto radius = fastMin(targetWidth, targetHeight) / 100.f; const auto stickwidth = fastMin(targetWidth, targetHeight) / 120.f; // Render key points renderKeypoints(targetPtr, sharedMaxs, sharedMins, sharedScaleF, globalIdx, x, y, targetWidth, targetHeight, posePtr, COCO_PAIRS_GPU, numberPeople, - POSE_COCO_NUMBER_PARTS, numberPartPairs, COCO_RGB_COLORS, numberColors, + POSE_COCO_NUMBER_PARTS, numberPartPairs, COCO_COLORS, numberColors, radius, stickwidth, threshold, alphaColorToAdd, blendOriginalFrame, (googlyEyes ? 14 : -1), (googlyEyes ? 15 : -1)); } @@ -188,14 +132,14 @@ namespace op // Other parameters const auto numberPartPairs = sizeof(MPI_PAIRS_GPU) / (2*sizeof(MPI_PAIRS_GPU[0])); - const auto numberColors = sizeof(MPI_RGB_COLORS) / (3*sizeof(MPI_RGB_COLORS[0])); + const auto numberColors = sizeof(MPI_COLORS) / (3*sizeof(MPI_COLORS[0])); const auto radius = fastMin(targetWidth, targetHeight) / 100.f; const auto stickwidth = fastMin(targetWidth, targetHeight) / 120.f; // Render key points renderKeypoints(targetPtr, sharedMaxs, sharedMins, sharedScaleF, globalIdx, x, y, targetWidth, targetHeight, posePtr, MPI_PAIRS_GPU, numberPeople, - POSE_MPI_NUMBER_PARTS, numberPartPairs, MPI_RGB_COLORS, numberColors, + POSE_MPI_NUMBER_PARTS, numberPartPairs, MPI_COLORS, numberColors, radius, stickwidth, threshold, alphaColorToAdd, blendOriginalFrame); } @@ -205,7 +149,7 @@ namespace op const auto x = (blockIdx.x * blockDim.x) + threadIdx.x; const auto y = (blockIdx.y * blockDim.y) + threadIdx.y; - const auto numberColors = sizeof(RGB_COLORS_BACKGROUND)/(3*sizeof(RGB_COLORS_BACKGROUND[0])); + const auto numberColors = sizeof(COCO_COLORS)/(3*sizeof(COCO_COLORS[0])); if (x < targetWidth && y < targetHeight) { @@ -220,9 +164,9 @@ namespace op const auto offsetOrigin = part * heatMapArea; const auto value = __saturatef(heatMapPtr[offsetOrigin + yHeatMap*widthHeatMap + xHeatMap]); // __saturatef = trucate to [0,1] const auto rgbColorIndex = (part%numberColors)*3; - rgbColor[0] += value*RGB_COLORS_BACKGROUND[rgbColorIndex]; - rgbColor[1] += value*RGB_COLORS_BACKGROUND[rgbColorIndex+1]; - rgbColor[2] += value*RGB_COLORS_BACKGROUND[rgbColorIndex+2]; + rgbColor[0] += value*COCO_COLORS[rgbColorIndex]; + rgbColor[1] += value*COCO_COLORS[rgbColorIndex+1]; + rgbColor[2] += value*COCO_COLORS[rgbColorIndex+2]; } const auto blueIndex = y * targetWidth + x; @@ -340,9 +284,9 @@ namespace op } } - inline void renderKeypointsPartAffinityAux(float* framePtr, const PoseModel poseModel, const Point& frameSize, - const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, - const int part, const int partsToRender, const float alphaBlending) + inline void renderPosePAFGpuAux(float* framePtr, const PoseModel poseModel, const Point& frameSize, + const float* const heatMapPtr, const Point& heatMapSize, const float scaleToKeepRatio, + const int part, const int partsToRender, const float alphaBlending) { try { @@ -363,8 +307,8 @@ namespace op } } - void renderPoseGpu(float* framePtr, const PoseModel poseModel, const int numberPeople, const Point& frameSize, const float* const posePtr, - const bool googlyEyes, const bool blendOriginalFrame, const float alphaBlending) + void renderPoseKeypointsGpu(float* framePtr, const PoseModel poseModel, const int numberPeople, const Point& frameSize, + const float* const posePtr, const bool googlyEyes, const bool blendOriginalFrame, const float alphaBlending) { try { @@ -398,8 +342,8 @@ namespace op } } - void renderBodyPartGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, - const Point& heatMapSize, const float scaleToKeepRatio, const int part, const float alphaBlending) + void renderPoseHeatMapGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + const Point& heatMapSize, const float scaleToKeepRatio, const int part, const float alphaBlending) { try { @@ -422,8 +366,8 @@ namespace op } } - void renderBodyPartsGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, - const Point& heatMapSize, const float scaleToKeepRatio, const float alphaBlending) + void renderPoseHeatMapsGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + const Point& heatMapSize, const float scaleToKeepRatio, const float alphaBlending) { try { @@ -446,12 +390,12 @@ namespace op } } - void renderPartAffinityFieldGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, - const Point& heatMapSize, const float scaleToKeepRatio, const int part, const float alphaBlending) + void renderPosePAFGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + const Point& heatMapSize, const float scaleToKeepRatio, const int part, const float alphaBlending) { try { - renderKeypointsPartAffinityAux(framePtr, poseModel, frameSize, heatMapPtr, heatMapSize, scaleToKeepRatio, part, 1, alphaBlending); + renderPosePAFGpuAux(framePtr, poseModel, frameSize, heatMapPtr, heatMapSize, scaleToKeepRatio, part, 1, alphaBlending); } catch (const std::exception& e) { @@ -459,14 +403,14 @@ namespace op } } - void renderPartAffinityFieldsGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, - const Point& heatMapSize, const float scaleToKeepRatio, const float alphaBlending) + void renderPosePAFsGpu(float* framePtr, const PoseModel poseModel, const Point& frameSize, const float* const heatMapPtr, + const Point& heatMapSize, const float scaleToKeepRatio, const float alphaBlending) { try { const auto numberBodyPartPairs = (int)POSE_BODY_PART_PAIRS[(int)poseModel].size()/2; - renderKeypointsPartAffinityAux(framePtr, poseModel, frameSize, heatMapPtr, heatMapSize, scaleToKeepRatio, POSE_NUMBER_BODY_PARTS[(int)poseModel]+1, - numberBodyPartPairs, alphaBlending); + renderPosePAFGpuAux(framePtr, poseModel, frameSize, heatMapPtr, heatMapSize, scaleToKeepRatio, + POSE_NUMBER_BODY_PARTS[(int)poseModel]+1, numberBodyPartPairs, alphaBlending); } catch (const std::exception& e) { diff --git a/src/openpose/producer/defineTemplates.cpp b/src/openpose/producer/defineTemplates.cpp index aa8bf912..5f59c6e9 100644 --- a/src/openpose/producer/defineTemplates.cpp +++ b/src/openpose/producer/defineTemplates.cpp @@ -2,6 +2,6 @@ namespace op { - template class DatumProducer; + template class DatumProducer; template class WDatumProducer; } diff --git a/src/openpose/producer/videoReader.cpp b/src/openpose/producer/videoReader.cpp index f643dd79..bd2ea709 100644 --- a/src/openpose/producer/videoReader.cpp +++ b/src/openpose/producer/videoReader.cpp @@ -27,7 +27,7 @@ namespace op { try { - return VideoCaptureReader::getRawFrame(); + return VideoCaptureReader::getRawFrame(); } catch (const std::exception& e) { diff --git a/src/openpose/utilities/keypoint.cpp b/src/openpose/utilities/keypoint.cpp new file mode 100644 index 00000000..54aa8f7a --- /dev/null +++ b/src/openpose/utilities/keypoint.cpp @@ -0,0 +1,265 @@ +#include +#include +#include + +namespace op +{ + const std::string errorMessage = "The Array is not a RGB image. This function is only for array of dimension: [sizeA x sizeB x 3]."; + + float getDistance(const float* keypointPtr, const int elementA, const int elementB) + { + try + { + const auto pixelX = keypointPtr[elementA*3] - keypointPtr[elementB*3]; + const auto pixelY = keypointPtr[elementA*3+1] - keypointPtr[elementB*3+1]; + return std::sqrt(pixelX*pixelX+pixelY*pixelY); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return -1.f; + } + } + + void scaleKeypoints(Array& keypoints, const float scale) + { + try + { + scaleKeypoints(keypoints, scale, scale); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } + + void scaleKeypoints(Array& keypoints, const float scaleX, const float scaleY) + { + try + { + if (scaleX != 1. && scaleY != 1.) + { + // Error check + if (!keypoints.empty() && keypoints.getSize(2) != 3) + error(errorMessage, __LINE__, __FUNCTION__, __FILE__); + // Get #people and #parts + const auto numberPeople = keypoints.getSize(0); + const auto numberParts = keypoints.getSize(1); + // For each person + for (auto person = 0 ; person < numberPeople ; person++) + { + // For each body part + for (auto part = 0 ; part < numberParts ; part++) + { + const auto finalIndex = 3*(person*numberParts + part); + keypoints[finalIndex] *= scaleX; + keypoints[finalIndex+1] *= scaleY; + } + } + } + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } + + void scaleKeypoints(Array& keypoints, const float scaleX, const float scaleY, const float offsetX, const float offsetY) + { + try + { + if (scaleX != 1. && scaleY != 1.) + { + // Error check + if (!keypoints.empty() && keypoints.getSize(2) != 3) + error(errorMessage, __LINE__, __FUNCTION__, __FILE__); + // Get #people and #parts + const auto numberPeople = keypoints.getSize(0); + const auto numberParts = keypoints.getSize(1); + // For each person + for (auto person = 0 ; person < numberPeople ; person++) + { + // For each body part + for (auto part = 0 ; part < numberParts ; part++) + { + const auto finalIndex = keypoints.getSize(2)*(person*numberParts + part); + keypoints[finalIndex] = keypoints[finalIndex] * scaleX + offsetX; + keypoints[finalIndex+1] = keypoints[finalIndex+1] * scaleY + offsetY; + } + } + } + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } + + void renderKeypointsCpu(Array& frameArray, const Array& keypoints, const std::vector& pairs, + const std::vector colors, const float thicknessCircleRatio, const float thicknessLineRatioWRTCircle) + { + try + { + if (!frameArray.empty()) + { + // Array --> cv::Mat + auto frame = frameArray.getCvMat(); + + // Security check + if (frame.dims != 3 || frame.size[0] != 3) + error(errorMessage, __LINE__, __FUNCTION__, __FILE__); + + // Get frame channels + const auto width = frame.size[2]; + const auto height = frame.size[1]; + const auto area = width * height; + cv::Mat frameB{height, width, CV_32FC1, &frame.data[0]}; + cv::Mat frameG{height, width, CV_32FC1, &frame.data[area * sizeof(float) / sizeof(uchar)]}; + cv::Mat frameR{height, width, CV_32FC1, &frame.data[2 * area * sizeof(float) / sizeof(uchar)]}; + + // Parameters + const auto lineType = 8; + const auto shift = 0; + const auto threshold = 0.1; + const auto numberColors = colors.size(); + const auto numberBodyParts = keypoints.getSize(1); + const auto areaKeypoints = numberBodyParts * keypoints.getSize(2); + + // Keypoints + for (auto person = 0 ; person < keypoints.getSize(0) ; person++) + { + const auto personRectangle = getKeypointsRectangle(&keypoints[person*areaKeypoints], keypoints.getSize(1), threshold); + const auto ratioAreas = fastMin(1.f, fastMax(personRectangle.width/(float)width, personRectangle.height/(float)height)); + // Size-dependent variables + const auto thicknessCircle = fastMax(intRound(std::sqrt(area)*thicknessCircleRatio * ratioAreas), 2); + const auto thicknessLine = intRound(thicknessCircle * thicknessLineRatioWRTCircle); + const auto radius = thicknessCircle / 2; + + // Draw lines + for (auto pair = 0 ; pair < pairs.size() ; pair+=2) + { + const auto index1 = (person * keypoints.getSize(1) + pairs[pair]) * keypoints.getSize(2); + const auto index2 = (person * keypoints.getSize(1) + pairs[pair+1]) * keypoints.getSize(2); + if (keypoints[index1+2] > threshold && keypoints[index2+2] > threshold) + { + const auto colorIndex = pair/2*3; + const cv::Scalar color{colors[colorIndex % numberColors], + colors[(colorIndex+1) % numberColors], + colors[(colorIndex+2) % numberColors]}; + const cv::Point keypoint1{intRound(keypoints[index1]), intRound(keypoints[index1+1])}; + const cv::Point keypoint2{intRound(keypoints[index2]), intRound(keypoints[index2+1])}; + cv::line(frameR, keypoint1, keypoint2, color[0], thicknessLine, lineType, shift); + cv::line(frameG, keypoint1, keypoint2, color[1], thicknessLine, lineType, shift); + cv::line(frameB, keypoint1, keypoint2, color[2], thicknessLine, lineType, shift); + } + } + + // Draw circles + for (auto part = 0 ; part < keypoints.getSize(1) ; part++) + { + const auto faceIndex = (person * keypoints.getSize(1) + part) * keypoints.getSize(2); + if (keypoints[faceIndex+2] > threshold) + { + const auto colorIndex = part*3; + const cv::Scalar color{colors[colorIndex % numberColors], + colors[(colorIndex+1) % numberColors], + colors[(colorIndex+2) % numberColors]}; + const cv::Point center{intRound(keypoints[faceIndex]), intRound(keypoints[faceIndex+1])}; + cv::circle(frameR, center, radius, color[0], thicknessCircle, lineType, shift); + cv::circle(frameG, center, radius, color[1], thicknessCircle, lineType, shift); + cv::circle(frameB, center, radius, color[2], thicknessCircle, lineType, shift); + } + } + } + } + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + } + } + + Rectangle getKeypointsRectangle(const float* keypointPtr, const int numberBodyParts, const float threshold) + { + try + { + if (numberBodyParts < 1) + error("Number body parts must be > 0", __LINE__, __FUNCTION__, __FILE__); + + unsigned int minX = -1; + unsigned int maxX = 0u; + unsigned int minY = -1; + unsigned int maxY = 0u; + for (auto part = 0 ; part < numberBodyParts ; part++) + { + const auto score = keypointPtr[3*part + 2]; + if (score > threshold) + { + const auto x = keypointPtr[3*part]; + const auto y = keypointPtr[3*part + 1]; + // Set X + if (maxX < x) + maxX = x; + if (minX > x) + minX = x; + // Set Y + if (maxY < y) + maxY = y; + if (minY > y) + minY = y; + } + } + return Rectangle{minX, minY, maxX-minX, maxY-minY}; + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return Rectangle{}; + } + } + + int getKeypointsArea(const float* keypointPtr, const int numberBodyParts, const float threshold) + { + try + { + return getKeypointsRectangle(keypointPtr, numberBodyParts, threshold).area(); + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return 0; + } + } + + int getBiggestPerson(const Array& keypoints, const float threshold) + { + try + { + if (!keypoints.empty()) + { + const auto numberPeople = keypoints.getSize(0); + const auto numberBodyParts = keypoints.getSize(1); + const auto area = numberBodyParts * keypoints.getSize(2); + auto biggestPoseIndex = -1; + auto biggestArea = -1; + for (auto person = 0 ; person < numberPeople ; person++) + { + const auto newPersonArea = getKeypointsArea(&keypoints[person*area], numberBodyParts, threshold); + if (newPersonArea > biggestArea) + { + biggestArea = newPersonArea; + biggestPoseIndex = person; + } + } + return biggestPoseIndex; + } + else + return -1; + } + catch (const std::exception& e) + { + error(e.what(), __LINE__, __FUNCTION__, __FILE__); + return -1; + } + } +} diff --git a/src/openpose/wrapper/wrapperStructFace.cpp b/src/openpose/wrapper/wrapperStructFace.cpp index 86061a15..9b960193 100644 --- a/src/openpose/wrapper/wrapperStructFace.cpp +++ b/src/openpose/wrapper/wrapperStructFace.cpp @@ -2,11 +2,11 @@ namespace op { - WrapperStructFace::WrapperStructFace(const bool enable_, const Point& netInputSize_, const bool renderOutput_, const float alphaKeypoint_, - const float alphaHeatMap_) : + WrapperStructFace::WrapperStructFace(const bool enable_, const Point& netInputSize_, const RenderMode renderMode_, + const float alphaKeypoint_, const float alphaHeatMap_) : enable{enable_}, netInputSize{netInputSize_}, - renderOutput{renderOutput_}, + renderMode{renderMode_}, alphaKeypoint{alphaKeypoint_}, alphaHeatMap{alphaHeatMap_} { diff --git a/src/openpose/wrapper/wrapperStructPose.cpp b/src/openpose/wrapper/wrapperStructPose.cpp index 5d1a3b0e..6addd113 100644 --- a/src/openpose/wrapper/wrapperStructPose.cpp +++ b/src/openpose/wrapper/wrapperStructPose.cpp @@ -3,7 +3,7 @@ namespace op { WrapperStructPose::WrapperStructPose(const Point& netInputSize_, const Point& outputSize_, const ScaleMode keypointScale_, const int gpuNumber_, - const int gpuNumberStart_, const int scalesNumber_, const float scaleGap_, const bool renderOutput_, + const int gpuNumberStart_, const int scalesNumber_, const float scaleGap_, const RenderMode renderMode_, const PoseModel poseModel_, const bool blendOriginalFrame_, const float alphaKeypoint_, const float alphaHeatMap_, const int defaultPartToRender_, const std::string& modelFolder_, const std::vector& heatMapTypes_, const ScaleMode heatMapScale_) : @@ -14,7 +14,7 @@ namespace op gpuNumberStart{gpuNumberStart_}, scalesNumber{scalesNumber_}, scaleGap{scaleGap_}, - renderOutput{renderOutput_}, + renderMode{renderMode_}, poseModel{poseModel_}, blendOriginalFrame{blendOriginalFrame_}, alphaKeypoint{alphaKeypoint_},