< Back to IRCAM Forum

Head tracking to spat5.hoa.rotate~ : need help!

I need to convert head tracking orientation coming from HTC Vive trackers (returning quat, in openGL) to /quat or /ypr messages to drive spat5.hoa.rotate~.

I’m facing several problems :

Spat5 and openGL do not use the same coordinate convention.

When it’s about position xyz : I can deal with it, but when it’s about orientation / quat : I’m lost in translation :-s

  • I’m confused by spat5.quat.toeuler / jit.quat2euler rotate_order …

these 2 externals return different values with the same rotate order, I don’t know which one I should prefer…

Here is a basic patch showing my problem.

It contains 3 different attempts to do what I want… they ‘kindof’ work… but not in all orientations, so there must be something wrong…

I’m using a spat5.hoa.scope~ to visualize source position (because binaural rendering can be confusing in some orientations :slight_smile:

All the examples I could find in the doc or in this forum about head tracking apparently already receive data from the head tracker in the spat5 orientation format, so no need to mess with orientation translation…

Any help would be much appreciated :-/

Mathieu


----------begin_max5_patcher----------
12482.3oc68k9jihjjuetWy1+GjU1Xu0dq5gl6i8SsNP22RfNlYrxP.BPBAH
NkXsW+29yCHuqLUQVsT1YOspiTJ4JhvC+3m6dfG+u+m+G+zWV6dTO3Kk9eJ8
OJ8S+z+KbjeJ6Xni7S2efe5K6UNpZqDjcgewQOwc81u7y2ctP8igYG2qjoth
1CG2IZukisdX1Mg+ji5FEd+gIt+v4GK7jmdde4Keoz+59yYZooo67rK2RKqE
gtwemf5gVzSIT0zxw3q95pg4OGBBAFLNletDAOGF9OWhlA8SRRL7Ge9Y2lt+
cC46Gy+zW1XYqGq6GX49rF+m9hhm2SN9O8zaBQp15l8r3+4GOlkS9wXd7X95
wV2+HdxgU7ggPHz+i7yHEe4HK8WdxSxUS22IxJqCc2Q++8e9e7PWKaVxQYud
fmhZ9C.Ma9v4eBkghKmhvwi9fkFO623weBoAXELrcU2oq8z4PX1xS2wxwyWO
P2ITI7tQwimWSeiRjc3W235DFXkl0OH.Z9qdAatqi95mEMVxFFU7sTrebfX3
ao45f5HOetAc76aRXPlMci94SFSYWhih2qc6.GEPgdqyF.C1nf0J9not01YM
B4CmMz0094m6w6zVeS3cm2yxw4kDzPWuybVeKCyyc2qcgyt+rO9rSE70Hm7S
+UfMI7qAJwufxGpXaem38KZgiJNV6UB0CsxmOHwe7r5NJv.1LP020194i67S
E+ZmRCD.T0SrzBMyZrmwd.2fk28LVe4wocMKC8fvWbvPEifWbnfvS4SAO8XQ
quST+qg568rgQyKtBP1wJHLvzMI3tq7d1umQJdTg4yD8ephymehyp.84JQsc
UzVq3X7ry9LUoDu3Luh5zWWkZ1i8Q4fWpG8Ys3qnJkmJSAARLtDC+ipQe3t.
8P2+cjJoeXxip698fdkWm9XsozI2nRfr++UXISfAtjZL1VqvRf9tcJF5+bI3
6IV11khBzKEZpWRKQweSo+m+9+2m8.ssbzUcibxdpTO8LqiV+Rw22yb.9aPe
o4+dDXBd1bMwY5rx0NybcHwf8g.fX85jXjcuLS4XujK8Yz.xeT9v2lGjltXL
g4DJNpqHS32mBkwWQhslR6ikFQ9c4ivy4fnxnR43dtRTo798WtjxIDjEiGff
OSSDE98+74Tr6Uh7LE7YMkil9wmBe5kTimfT.oj3sz0m0wPWvaPmBbi7Uue5
7dl6RunWBF5Bsbd.A0+3QRPo20z06uyP9IpyPTz9x8jv2blK+WdDP7WPPbz9
ZNptupDF5asNJLeN8YX8emHN.TwqUreAFgWEQxC8nrub2m2Q2984tEBo.RKU
IhW2kKheGtb8T8Mbm0+JNB760u.Zjwegtlejw6KL++3.Nz+To.285k9u77cA
Sz.bTK0+qRt9V26ERoLWRBCPlzK8+ozCVSdt096UJ+JV5KDED+0nRLmkJgSK
fgbBkK+mTnOn3+cQl9Clsfh+bCXA1L9A5KFSQ9D66ZDw7lin6eX.ZRmrO9lC
7FhBDEXLSlAM9NaTbOKNCYsxW0TBUdhMkGib.z8WmGFhGMa9kGuZfkIWao.p
GZaEqiok4RLfGAlzQ86LJ88WGIUwtNBlyccOnr8Qc8uVOl7J2iATL7bz3DL7
37D3LzrBW3A.0Ud.H.x7zTT3zzvOYDnPwj5hN.n+AG.+cFVLVARABJbFFZBA
ARxhMf9AYhtBp7LzCQl1K46Bepe7T56ROA0aq46mu6+utFvypMfmIi9PPmoH
Pf4BnC7Etj7DCiQ9N.rHhR3ObtmE4MJL7WkfP9zq90Cz1uWqD3EJ3rrY5Ly8
3kj5pXVbqUHFJDVXZ9.S56hAg77LHu5.mjtPCbg7AN6Ef636IbbHRI7CQtf3
rCcNVgmHWj+KWoQ9+8uA5ddCTPjuW96.KCGPr30GwmUS.IN+SFwz3WwQrWoD
KmKeBXdxPk+7vbYyf4xhmotih6VtVtivvRmQKDny32oYyoO3D2x0xsbsbKWK
Wybsb1339KZtINAJP+CTjU54Y.4YxSDX3EKFumQL5xEBX1uaDRyflmgpPfHS
ILwGePx+EPkkqcTVbYrcS9yBwkoPD27npyI7GFwEYbpjmtxtetzu3CRWfhWn
q7Kf8efmFH8NfsKne+K5NFVN5k9meYHngsYuRSxNit++7KELcXW87YfWHBNA
AeVryxwOwf+G.I+NZKhuEf3fC1uw+yBS82MuZD4ISif8NhM8Ujw9SY5uoJHE
hj3pm+6BwElEck+TY0hrfTXA1G+4eHpVuiBC3DQHIAvzfrN+edj0IJprN0ce
f+GMkNC7+eVntjLEj9l6jG20jO9pj9c1BqIj6OWIfms3o7l8pmyalOScFDFr
OQ8lOScFph1YdEtKWes7Pcw9YnCxblNHymgN3qwE9POj9SQO7LcP7OCcPxyz
AI+LzAyLe9lcQpOEcwyzAIthcPxOSp8d04o+.6NWpNyesVhXW+7Ac1b8wRSk
mNHgaoC5YoChiKaoBIb2afyszAcKcP2RGzszAcKcP2RGzszAcKcP2RGzszAc
KcPeRSGD6+dmMHR5aYC5V1ftkMnaYC5V1ftkMnaYC5V1ftkMnaYC5V1ftkMn
BjMHBxyVr.n.3unW6UAta4C5o4ChOO7gr7z2RGzszAcKcP2RGzszAcKcP2RG
zszAcKcP2RGzszA8o9sC5eqyFDA+srAcKaP2xFzsrAcKaP2xFzsrAcKaP2xF
zsrAcKaP+aP1fPwUkAyzUAKPE.Y+ak90LN4RTk9UMK.cFJgHknpW5W2q9NKk
v+H0KQBxyWoHwo3xqTjz4Qrjm+aSdTQmr7T7ARdnt+WyiI9SzPecIz40mzOD
J89H6PKUSEGGc66Jcgmg1SWHZOycadR7r+Ij1+ofIm3rL4rj32wiieiG+Ryi
e9Zz48jdFZ5+rwh6CzE8RVNnzfq+tJ1o+Prv3EIC+TLznO33uh05zvRF5g2M
rKY+9J7wDu6Be7OFs5raJ.TTYDIRAlrTWfiekq9wOq..ekpOzuMYx1JH7bjJ
1BPpnHy1+DXIthTpbMYHZE1YkotjlEvIKj8WZfEIiSg6JJV8jw+Fe285Q1f2
MWeJ.Ugn.TbDYT.Bgq49LxxRiJM4K+d2QPHvINeI.GOiMlhNaRMOfvj3WmBD
+eirzeipze6RUKre8IQAghMGRkUinYXtl0AaecOcGsR+xaqyi3hYZ3cSmJFu
NMU9VpyKy.yOBc5I6KC2c5XkG867gy9OHv+WeG99WCbyOjhf7cGhWk.wITDn
Zz4auY4.1n4eJRsMtpQAqy.fp5Zmub+9GkvwnHn3HY9423aeCTuGv3cNzduV
a8hkgn9Qz5yK3gXC7JqUvXE6Hc2MuxM+HA210w30lyn9WOYQI93kuG3.xlc3
ex5454WfUVG5u+lWQfoq+ix.YqarW6xtel8UeFQNVgOrDvdxxj72Of3ByTS7
Yfol+rt9wQQbio9oyYzePL0dVvbweJ4pI+TvUedupAuAIuwU+vbFyGDS8Ikj
OSrzuEJsHGzd1KLcl+uKzlSy8a6Tu7KuN+KYgfZjuelbekx8JsKN8KHCrOEj
dgvqd82Cm3oJDMhOCVe91C8uS3puMIJSc8mQZDagrtmSiXvupzHP5+yHEhqP
VJtiKh8BPg9DEgGN9hHBQwjEQfOr36D59wDcGNlBM5y8zk.+RDXfhhhh8Sg+
t3EHj5zTB2vPAyXz2718rbz7eJ3nOqaAz4acn23n+l3SbyW2WkmV3SAO8YcU
flj8FO8qFchat594vUWVghfxff3Iu9GWIHn2mLZxKI7yymeYV9hrpExe+643
9qnW9zEBDp.4egcxmRnHnZxIQ+kzGeJ1hXh7NdH1Ox7Z9Y..AwYcCVfMSnhE
+F9gmMgcyKO+y5E7ejLzemE7Q9xX8FGc1LF4Mm7NOKMymAVZxuyZyIeMacik
NaFi5ul93swyR8QtD36OFV8Sd9XptNw5Nn2DHLuGqTEvrkuptRf2cLSDuGud
dabXfqTecuBvhb7MPj8P6qDE5twJ7ERTeKKNIdNvLNFLNRZFZNFBBJBRRB3X
r4mBgskgDmhkPP.WfAmj+J3jHpTefv+9NeaAJDjUSKMsmWPwdluhm8sgglIa
4Zm+96eIxGbVsaK7cMHYdyA48OrRewxI6iu4.EmLPU.x.ov8KaUT0g4YUxur
F9qZJgJO4cz+QsKvHZ8cu2jOJ993UCO67WLYg6zXCW+SizweOuPqb+Uw85WE
9ytHl27hd3UB7w2BvKagWrYuuR9UjNhKOy7SmxNaHJoXy1MtHHYdYTN9K9tw
ENdVzt3uyCrbXqz732J+h2J+h2J+hWyxu3KdELdtVyZO.jpTTftVoPSe2HCS
PWH7U8RSgNVIaq09J9md6BDD4yKPPqiV+RNxGObfkl9qUF6d+0LmmJMS7iVJ
lPuXXH0R4ghOG6EJ8RO+UcGQt1FEDZswR8AEPDW7pIzSA8lyOClu09lw28vg
6qnB3MbCLK0p9+yuHE.FI9kPUPlDlP+k55A6.47e4QjxYlF+ZnuhC7Ee3XOE
574fOeAK.buFT5uIGfOqO8JPpe64x7E2B4cSl2AbjFiCmPfmkigVfkE97Ekw
fGfCAnvQvXxnJk9R6p6l1DeS0UNXveFUqsQ8wSpfgUgpJFV8QUZsH63yO3rI
.8s581Op8Xwps1fUky.aYK3xTaMdRcw5RTIKYU22TcljV4FXkoGr73VwIXls
8iT2pVqdGy5xC3pEW8n4h9Sb8aI0wbDuSvd4URxcBmTUVjoxDwUc6Drd0T2Q
dclzd2H2Uiqua2zJ0pJ1Yxh190ZWst71Q1sOwvySpOJpFI8.R1dF6pS0ml9D
cu8aoUCOs0XIsQTjdTzIUrVl+N+qmr4QUPvgrKybgtk2YVa8lZ0Ot3jh1oZp
dSUYrER5JIIk3um2er6N4UwI9JjCjSMkquR9zpF5b6awLvplpSs1SFPuUDqE
kqVpkVq0zG2QYySzg0+zfsJMwZIGWUNtOePsw0EkNnFbnuO191CoaqOUjhan
Pyx0LLMmzhrg0xdVFFx0Giu19zZ6oKLlGwxJDJcXydK3o2Y0ZKk0slSFltKr
kmiYmEwhim0uYYA9tZaaROtZatDiZMMM634zpg.Up6zwCYFOrJMytYSZ2tSH
k4RGz8Dcraz5wJvep0ttW.7GytZIcWsrU5T9YCkVH4EvHEspALkIw5Bs0j5y
WmHNYTZbSgXwJUq2xO1Ym+1c0kcv6smtW1CNHZWD2tlxaROvuJRtUkIn1XZc
E+jFGI3hGxUqKGK4vZgsLCYWrZpxJi5cbcbZQD2fXCFli+wNSS4rI4FExISx
H2cPY5gCqEft9j.ERSMRVslSnl0wcqIEpyXVo2lJ0kmxg3dZmekry1yLyLcR
2fQUcWMp1p3.ti1aZY5Iw0V+39V9KOIuvPZ0d6iyrqlcSjmT3ki14ZHOjplv
FSOOuNMVOttZTSfaXr7xcRsLj6GlzWds4z0UAZyr98THChp05.77rO1pQRqp
K8G.cDK1xBQ5Z0023rZQOJyVSXh2z0rkaMzPe6fKwgds+ZgZ78Tq2ytlSgro
o2tEkC4U2vTUlp5bJfwuZ8wyvQjJ55ssWXZVeZuwx3hiwmXRCWI1x8iZcT6f
h5g38C0G0p9hlrKZRulTPn935KaG3EDWlU43praZvBw4jMR8HlT6.iYKFsUM
NPT02qqoGdbmvPwk9q51G86NrsWJgKuQREXSpJmfGfc39aaRCGo.D6ClV8Q6
tFzpaG51gtbRYO7W+X2A3t0mB1Mj1JuxsMXnHrUP5joboC4m1cPR6AFi.0GH
wmlfIfsfVkLSMlamNXInrdPcjwiEV8kGC1H2t.Twa0iCII0Dr73Z1.TL1Xxl
cISaue8QSTKk.cKuJ0OgrhcrEn8eO+bNQcjN4Q0ICQFYLTi.C3SCRUgKkbTt
f8F8xBh.vhlBbz0Pex6zjGC0JiFOt81oUMvplf283DIIw9ts6WQDT4GGpx1h
XgkDac8d6cTlx0erbqQ.nAxP0Zv+spoSUyBbHQcCxNhAOX1Dad3ZiYS6Kk5a
i2a65issPpYpqykTanF2lNG7mLCzmZhLCs1sqZapS6GllLfXbu3JCF0yoR+V
aWZuLiJkcaMGrNtY41LxX5VVUfd+7rGvTcloVU65Oxm.OTFYwa63FK2jNcnZ
JdHgzZcRRdCLf1brst.G5aXRR3iZPtq6bpz8BoNamzoB749FyAMjXVKpagMc
Q0oXPya2xc6jps2NpJGcEyv1wjwbkoHizSjhXjRpLjpRhN0PtlwHSUiKypWN
YSizMiXb2O.ryoCF.WUYViZdo5ZmB86pS20hOjj2zra3hsfMYC2g7tVM4GqO
KuqRYMTSfqxXoZb86fAFd8Fsdq0559ThQKlMarnw39diMZxln0a6By1fI6Y3
s2No7PdFbkEJjiGbbb7bgc5sAaRMz1MmVJdTSlQi8bs6fvwnqY3zxQiWYDzC
iPFbqcXkzgpGVHdHe3iPhTIAl8qPZYP5KI61eWhhcmSfM2IwCHRFDSxnvGD2
s7wndLfE4AHari3Y1qzpyDORA6Z6Gn1QHpLY4tZ7yKianxRjbRveX2UHDA0q
sZljjAvPZsBWRZemTf.AyOUPbGHNnMHDOl.HJENpgBVV1391RQ7z.3l5rHSt
qIiQyAhHtcwxd53QUsVMypJR9oVmNcLpOxc35JXfALCN1UcYqvumzaJC4f.E
c9x8wvPzBMmlLFi5prraBByQbHvEE2FjZqG.O3ZD9Ksprnt6TXNazLM5ccko
6LusbRG4JZFyoDG0X41J0qNNdT8f3FAi5FzwOb49iKvCX5dJrGPELADrplHv
iaDinDsPn21.Sb1LpCmOdqj2bd7oxz6lGtnc2kso30hHqQC78NrfPrQ8Itdd
MlzB.kZIiKupbnjkBA9IekgfZEpXiZokEH0WmzUaLWugmNsgOHhuh.s1VGEG
sow3RgGkp2U0sqHn1QoQ1iFOHD2PhuFV0twSrDv5yarjzcnahceEm47dyAcV
hCKepLG0llbavYFZONk2yad80zfLFL9S5DyLuLSRW9IQ0mzGeVsCymN1KR1V
zdozt4qjBVtd8oAQBI35KWYcvwYSuispQgeXNW0n3talpcb5QuvVUwqUMDzc
sgRWXX48KnAojE.LaYG29AtF3SaGno3NbwQpTwJgiGME28X2C1qbFyT6fOCg
K.UQISTdAPoCo5LmtCnA0i7vfxZRqQBkT80OQVG.aNsFRGU+ENVHL27oUwrI
12M3jh7t4LGhmnuStAqh8RV2ImBWiUmqlePCiQXJD9FfXanEzi5afnnUiz36
Ps+zXOAelzJygFc93d6b6Ih5IMQ+X+FiZLr61J3YkRtuKekw1Rh6D5rsmbhs
vFeOEK59x36RNb.TuMBzf.pW1WlaLvWG4QqGa4vZHsW0CAE0DAJEa1J2clIC
ERTXRqUCz2iqUYmrpmP0Vo3r6Rb4Vhm1ouF6BYLa.+JHQrZVLNs39isjzkUI
5DNft8v1Z6IoUiyjGAw.sXO2TaSmF77oSJGcX3FfPLuwgFm75Nsbjhe0dAGH
6exbgDH6JcXkHHlPHJC7Ip8oqoOiu0x8pDlHKAMAOo.NdQPrTkmvSsNHaoL1
2eWf+nFJKporXA3ikGIQ.syfk5S.0.fXQWASJDj8ELfB8J0B.wViVkiB.Oq7
GpXBb8fphZZzM1K6l3ElVkt2Au9mXR.qtiNzn47x6zM5ttBRF0B3+CNMTdTZ
P.pG0kQQmsqfcDsR0Ax.v38IYlKAysyB2owimIuiz1SYNmyrRyCHcJKPWnSB
.2mjHxNX.8LwgHJmbYl4COBFvpJXnQDoW1nWPrS+f9mHT.sTTZV7fmZSqUOl
w6.V33gjoykbjOwfuZsNRE7ZVh9GGVl6.ud7NuStHIyN5TMELZYuHLY7QdKP
g+l8feJS.SMkUXjyrU1IqQam1AbkqhH37B43pAXdVhqAEDcPyptTjbJB8opn
soIVfiXPKpjwcsXWN7vfkqoG4LjqBlw50zSzi7881OGyn7xY8lXXKKh4UlXb
q5NvzzNJUf8nB.5mcDEQfBQTWFhif6Ywyj4LmutkEejv7xc6cXY+CJdJHuiR
FR0jqVr.ILKMvFoqGTq4MFQCir5ytgoWk4.m894yFUQbiN5AXUNUmYngwPNi
Zfl+kq1raY2wUNUMFIrbRvMACDY5tRhdIwLvqCR4U6mKI0eqkAeiZI0qVAwb
WuSD2wD.kgeLRtOA4u6RJQUE58BSK61YH4I90F8HTJSD0GPav4QDQzAPRUQD
5JFpJ87M56y5Dj5LXb4wDfh9.mMU6fk45cr6z8fmIdRKF2c0Xi.aGrvjYIoN
5sG4nRC7cJp5KkjV1nFkemQm7DLWJOLv2a9RFRgLrIYSlH3cY5F5A3AGyUlG
9axvQDoA8PpQ.2FaTAjEYOALnfW1MI.iQ8ZDi0XTccUbTLGpirq0cKoN+ZXH
AFNASq5MKiaMob23xnasNxA9F5o.Vh3CyiP31VzY5xNKPp.rC4YTlMLteUuz
UUifINRe9YNI7lNIBlhtMnTjs35STNvAeSY.jzFj2u9fj7TDbGju+F8N0aJx
Q+l87F2uilSrQ3NUD1swv3TOF.uk.cePu8oLyniP146yiKgLiIAtn2CCfmcZ
iEvfNbQlW3yr31U0ZVz5VDveroly0UPbA3eOIZDfQAz2C8ZLBj32zEXW76D2
KbeS7gRCr3IO5InsbMy1FQp8BaDh4qk31PwOwDve0XyAM7CUQfIP5gLPvgVB
n3ZudOmwROMaD1zcHLXiAw4xiDklUACKKRCM.Pw8Wyj5FSMdOYVXR.nzQ0Zm
5gLrtnOv0iuPepb6.dJFjuwlz8inMh35VdBUh09MVjNMvaAnJcWrbneJ4gVV
MODXRLi1eUOdIsJ00hargtoZaSBFhNSpnuZORWT0ApKP8XTXkLP9maBOh5Dm
5xHKC3ICOhBovP+krMFWGjoYqf7En+1fS.sxLhjjk0.cDw09HPy9g3ACR2Zm
tckumvtia5BO6VG6StNQl3nbUYWwX7gyh2pw3prbz1jHWsdZBdmzVm5IrZIX
PuuRmsXwoch7WE0eE9QGLJlJ3LrV6mGoMdrnT8rPhwQkTqVjmkRiSKZXhT9K
YwwwADAmYnfNr.TXTQOt4FRp9ZVaJyaClFGP.V6VE2kD.bzpL2olKAb63NAd
i5vV63dAWcuEo.FPpUyYWYzKDLPFOy93rXrlT.ZEFvLWc.WAy9ANB3fuWqji
HnXNjdzSaknqv7kxT6WJU1s7QN5SM634XVkVuKFIUYbkV0V1ZB8ojY31sRpO
sdYG8zgUQLtUgYx9kGHbhD.Rw0yjCl+2re93wUxfYpiPxR0rrU4DC+ftKpzE
6zxAmbaTFe8Dxtd0PfXX4TEFr.g0.E+Di0KSZpysf3jFgChAxPEPcrJMp4vd
colzEaL3wfV.lXP24kWX2OHzAmSyp6vpVRmDCb2tpW8o5CERQgPyDorLyamP
v5rRWptNGbqFCS.VKb.1lErfkNv9Uk9NUPRPFbZwsAO4LPpvjNvspuqhmIJT
fYWog3pJq446s..UX6F4NuLYZpL97tVRhK6sHYwBqkk0vUGNXkjteuCjyaD0
yZ+PAvGE+lcQDVBABxACDRFpEjLsaJO1Z5ihHlrwnFHxZf3QJytC1AvEvMy.
MrFgItwQ1JnKnqrvw4BplkWK0cx7Xbjyt85CnxpnO0eojc8.gkhAX8OY6YKU
YnrD8NoozS0WHh0imYAt1ZD7gDPr2Vfxn4PsXjmToAGqcpp1jUCDsWYh4aSj
Z64KfGog73RjXGNh2KyRT8IsLVEzgcW3tZIMHoZTaYTKu8.2V0CyG1PwNPig
kdGQzg9hi4sVJqGA1R5FnS56NbkrnLixfnkGFCnQ3N56NXEYH8v9LIVM8QPG
73sBpK1FDnUwxbn.Xda1ZaBalKSHckAL7htcoVgPoZ2nJLeHvrPtFUeE19Mr
ECZfq.nnqdJcfqtROkNFLkYUHlnF6aypzCaZYZ7xFV3TkaPRJPLelVc7Y96W
bzJVKIHQScmRHslR4liAiz8Bg9TL.Z.S.4SUxAAuHl.dcPxcB4LwHtcQqqGs
NvpZcAN5tl73LDK8rr62ezI6ItfYNv3FUOk0GXR1sT5zRQd8p7tLDS5kTOom
cRuXDzzwgz1GNpdrQ5PR5Ay4HETJ2Gr7ROrLsE2ogkWErS2JEvsvO9TBfvjc
VZ0sdgVJRwaS.mi.qSCWwKdxuQrRuE8lLkMkJUtuUBOQKIxo8WtQDKlE7SZO
RgBIPO0NBvkRF033npK8y7Z.EB7U6h6hX3GrlJ9XLx0LuA.Ib2pxyNTsg0To
Te2dq3Xb0YLAub0WtNwElTX6OfehjDdqF1JDo6cYFXiFbpot0WA9eKscAxWW
idxHydi..mMyX5Ayi0B2e.v9zOyFRmfzIhfbWfWi.0ZSlKNGESkjicmBrrfw
4AdRSbKawXQnv0GjSZIUQN0qAf2to6HvNQzRYI.gVzJ59GnEjClKWAC4mUzI
g5XpC2sxrie5ZPuhbxTt5Cq.3JUiSVgPmKvB3KF.r10mgtCoN9wUGer890wc
iPt6qSFwRJBbDR3NRZsUqLOKh2FpNdis5qPDibvwjYVk9rVBSw66bjJX+xCD
7sB50tmhp5R+8Kavd.72vbkOS2CDcOfgohhYrMiaUfJi79GgWMFTXpCcKDGx
XCQ4Vq.uAVFShg.ZotCwMLRnWeYTbMxBjhrkV4oLUC0P3X5C8rpq42cLNi2Y
UjuorzTPKv1k8slyVeC9gxddS2A9b1SLPyvcHEdOTzZnFqssoaCV5pdgsQvS
mVNcXejN3owIylMKNy+0Z7iFNaAfnTRdoKGx+fFGWPuWWXgvIcA7ERpHRCB.
WcDKTZ2S.beprrB4Oo8IAlVGXlotSp4IlfNsl1MNwC6n2zM6DR52vzCeHBb2
JZMoTvHGUhNWyn7tjKJtFHLq1wMTPI0Qdvtz4L6zZuCEwDVvGpniG353DC55
azlaBPPPoJolleS1jd84PQnqYYplC86.DpQTm1GEi7ExtiSh1.WQ6ExirSvZ
a00pxAO+tq56MuLwg91DDLG20cZsPTvOP9u2LCBSepSMlo1OpL.wHCNi3wEY
w.Kh3.+pw7LBHidiSQ5s1fPgKNDeJ+rEHsVjI0h1Fx64.LNyPjXqQrsz7Fua
tFc7ttyMD8c44cWjJWAvs2LE.1GHoOxV..YPLteUdKENlkqY86r8jWmnT8Xk
oQY.lAaqYYN5n3zNRAnXe0tA2llfCH3PGQYKz.RACLYrAfcNYRBiAm3VFqYg
.80GDJRltAgJtyjtAod5k2sKKcXwCKuu7ow.P64KlKuAqRLXDeYu.ytV503c
7ZHzTX0AlfcKI0Fyrmo1xzP8kDA6S53gbcugkzNPQc7I.irWrVuVfAwlYwLq
AYeh5K2ADgScPJATaEo4gboZAR3.A1veUSpTj4mcU63rYjVDMRkYBZRv.PUE
YAl3RkRDw1.JRjxRliCXAsAR1p6V04G.X4DHM8wCayxr+3tkGNtl2nFlwb9c
B.4KhuwAtiKvmtRhxUm0LUaHnlaYC2NQfKSflJoVj5UB01ImYUJhArBDSYrX
tYOqtyCqmkMzcfDQklcMpOAC0v0H6bn4Av.pfKGJmohIa2yss1.h8ko0Gffy
InZyFOZxAppXNH9mNn3Ar.4sug+7FRRQBjB8gG5tJrU1IHMMRhW3nu1ZQnaY
N6DUehCcNsp0Prd8qeZgytDuSoC2kfvsMppY.vrtBD.5jgrXNyj4d35CL1Nb
EakDTjtattmnnHGLqVdIJrwZcKqy0GbIdonk99dg96B54mtKLksEHTGTYNF1
v3ZbXc.47SMQAhpAJbmFq8mWFAvrRYtNZmV2Z0fUUVwnzIJI3jehOyoTmkJV
Kk14ppOur21gi1fkAzZlrNWRygHvpMQvqa.lhZTsrrfgmblhWv8dcDPXlHgC
Vs6YzdsRYl8h9aDqSPRHW1WmXXMcF.3KIgwb71ZI7Ygk.TZTNA.ZtnBJ8cUi
ARgCJ.vK7sT8QHhbE8bkLLEpo2eUOMMq9pfj9h0dlLkY5eZwNoF6a3lzH3P+
Poo5fOTYoOtdHiTTGPS3FDv5VMoakY+dDxaHuDAaICGVoY6oEoj.wtrnUyQq
KrGY+VeMv3zJKpiYgXGaFesvzHUFRkMq50X1RBskyX4rEO5NbyI+McBJqIvy
NzGGemriyPcgQKgtUlFHfuuUl6.HA6dLy1yTeXu9Sw6NaOqHMZldBJY3M3Pg
FrYlFgdGGOXBJk.5SatFF8KVy1qQikRw.6xgThFVUluR4PxNtMIASKG..JR2
MhElYhyzbiBXKynlLXqPbmpg6619XmIfR5dSxrUhg4AlHEQQsJChZMTzn64G
LsaqXevhqNsLOKLTMs4mdfPwbkk6vEmV.rvx31BG1CxPf5nsXYwHlAZ1Nf65
y3mfSWMLEg+zE9+tVBD.739fExiUYG0UIENY0toyS1hByq3blgQIch5IWAvY
osT9DCO.1FE4HsCjLAiFB9+QmV0kIXKCO3nTJ.CWC3k7w7I4Cmm4mckZ.HtS
.LKOIV7gmjaTerRzP.tiBGGFoypdahqEziMBfiHI1.HIc.eEsqWKvgA26jLn
BZDXz1xb59AhHxWUTv6v38lyWEzi0y.Wo6lQkElUmpgzfk3MoaZAB3DZSlUF
L01BbHnGKYeEiCfuzSSiaPLxOVLbTJUCxEMVMF+fz9AH0EHmU5fR8xHNIc74
FHEPaP7nXhh6hWIquELbX2Wbh0z9oT6DC3IbH5bfbQ4nz461QP.lijP40YCZ
oGnvLmHntj9Td6x6YyV1DMPFJQo5vMhlzGOVbCtz5kD6TjWHskQzVhmdRYJ.
QVCDhnVQbGqA7mxsBoLOnc5zRPgNS+n1YYwKtl1ndDICjAJPxFjC4k2L2VHd
uBAXATHIs7zfciMjlZj5soKOax3fQGfYZdRSj3r7AAwv1iI6dPCWodVLuQxd
KlLc0jLOcQdwUKFfKToVGrvDixM5OVY2oZ0E53OWGP5to6IOrS9XClGttBJg
VnAsEvwdPwangPco4yAjU8p2ZDFZoqzA46SiATUF1JyP+BcQhChTNrLKVlIv
zSQIsoyRhliaYMcZJndYD3saY7xL5hC4pUNFYbKRi7zTvOF7t50L.adTJB1Q
Uh3UJSPQxyJn5fBKdkxD0NtXX.lI2Lw9xtR3sacxOtCnYFEzevI0lozCHWhr
aaL.2cPxPRi5KMYvibQAZyDrSFrAYRQqU8pYFIQo2XJqN3+USWsMKwm0vZ1v
nzFm.bEH8tT64lJzN24Zj+VqCVMdqnGY4FnPJ1ND7noWVHONBJkGAt41.gDn
5.9Dm.svdMFsjXX+CG6h5hjQ5T.1HzmnXhXgzaXhxiHQcMSypBM1VtIYnZWT
5uZXWla+Pv.d0QnP5lE8F5EyAOAW18z.hTEhUmPYji9D3TqsjBX6Zz.5sSii
H.Xkx0EU452lwArkibhF.eLnl7wIxUkw8jEQJFAEtTi.8S0PYHtmZkCMbcq6
0Ojn4xlAthCPQSiyLhpqowfTiprDA0f+eZe2VdqLiVlTGlkphxODP3QND01G
bDoiOXZdIJjtYhiPyitQKDVKD6LFV8iZ8mw5r0C7jtZHWGD9lLcMI02SUOgB
fbNF3TmtAf5sPTttZ2MQts6f7AGatdGCTjEnxBMIEx2xpnH+kgSsIxJhCpOo
wQUA5.MQAEIK3Kn3TigB9iCncdeVtmbh3ChfY9l.qnQS4csK7h6xSPnbkzH2
5ilVUfSdLZctgsc13Ai2dnZE6Me4OGaohe2MTw7EAJEC90Y+T7Zs6cluKM8K
D+xwSok9aDkxp.4e4ibmil46t.aEtaOpjN+0hP3Jto8dtM03+azKyxUfz7hW
yw28NYN.VMivju.joH9Ch73o7s0MkukJQ8GvthcN+CIivS1r2+3oOuQok4co
chp.LRmoLy7t2sryobDjYuvM7bWQJW1v+soI3+ArQVmO34n+y0FjKCw6byN8
yv9iKZO4j3yw9Q68zuq7tXI46X2d8Sztl5UtqPTztB4UsqT3cwSpa6Skeyd4
hmafUV+9p9Fzd9BWY91ZFAQltagqYY580P875Hd98NhwKvHl+t5eN8EXDe+K
f8i0Eg8JYsF66u7ef+iT9OVq3X75zBlyVPaXXyqd2YuIWL3+aNo3rkqaFBx+
BQJXJfDxEjT7l6KY41SdPQXIKmRn2L6l8Jo555qgLi.p7u+1PFlTcixAQ9vX
+aeAXewK+J0u288LlyV2HnHvuq73gTjRkGbC9qC8JeqHsDpxPp6n6WZwxUue
pyOJYfl87URH9LIH16p44jW.5v6xTRg1+Got5ULPN1BTS7HHxJ9j2Yuk55TR
EePph.82q5FkG04KxTzD2sgfl6cL9UtRrZXigJmAubR8wQM+kam.f77FXYDd
J7pLAjq6.Oq.XXp3oW5Wy+HvC.5h9MUEacTkXf4BUdZexaW9aScJhgFB57MD
PZ5+Mhu376K1DjTDY6NH2M1+H3LPkWF6R+Jpx2TRKQweCI1ZJsGYLH+.4KDJ
hNx6ihF00msHXmNp.89qJG0C.kk2QSdxb3UaiD4rbIT2EUQ1b0mbBWYJApNv
fo4aEC5Khr9ZNLCD8PWI.whfnLd55ZeeJyi0nk6J3OWxMgZ9hPz3xEo39.Tp
nB3H7UJ8q.OumqFhdgJrR1tt6PeuHlgufzMj3mg8WQ8QTYl5sohEi0iJmLxy
bkIiIt91ZkL0Uzl4qntC5M.WWl+OHZXVz4QGi3BUm4etRpLOkdSJESQHTTY6
i2jLDW.5jdplh5u8t.r8paWymseyQfem+cnRWc1zKMyUb+YxzUAKPE7t62J8
qYU3yRTk9UMKvOGTkRqDU8R+5d02476Oj1iyWPTIwyLHydWxA44+1ZJWQiL4
q5H+Ep5yBsX3SBb32T+Yew4+cW9Ye2wf6rdAgRPMR4Bsv8kvsWTH2dOEM1hT
tW0QQh4tfQuYCh4.Es3+0OWnJCaNs7ePv+cJNre+x95qL07pk+UxOhMvCT4H
MWw2eTal3uc.pHNuMdJ7Gp6inHubE1Z8dp.Ut9qXK8jmr0d7Bsa4mszuZ4XE
lXEZV5e9vBFIurfVh3e9kKjsqLcaus9syWCyumzwkSzd5thxmD8auE+piqUf
9ucgxURfEHja+VTPtBXgfHKFSktpNstWECsRH9sKVECdOfnzR0TwwQ297j.5
hPBxYh3vu5atiHvC5NpnBj5ugDx7hBy7SqH.ItRp0HeOD4yHsxT.BMIdlgRJ
RtG0z8IWZ8w4s7XV+gf568P4IwK.gmIux4Rxy9oSMInaHCNgghkyu81.AyN8
S2bM70sAWohKRJAdG3CoefpX5l7xBq5WPUj16lV91LTTzYwmtZsx1Zrd8Mk2
ui2ZYypDD4a8S45wIuh.OQ3AP5PxZ8+NE9qi47tq5UHyuMzzmM++81CQY+Na
aAbEZWKn0vJkBB80U1+6byKf9i.e6iZfVa4nD4qXWPcPudhz93zLwS+8Ygoy
yNKAalapTr+Ivh.vv91g03cjFRB1uO44N22YtDfydOJZ+nzx9ZJTIXuNZTIK
B.kbev3xn577WQEpmQGH2ec0AhHpQVe4hsvRd2I89QUVntxSVqBGOkVjb8bW
J.YItlaTknza70yr2jboRF94irNIGeVp+xWnDr7WfQ7ezS+zTe6z+cMRQxTS
drbd60dXda97E+8cDlWtfUum77MKTUAgmsRUeiUoJA9SWmpu5TQwaQpB0hjz
WrVjmqPsHAwkqEY+vaQlB0hrWtFjtHMHOykqAo9voojOaAk+VCwKbCR9caP7
KaC9coobBWtFjnPbMbWtFDuPM3ETtnXZ2tbygbERCN+kSANWgFhbWNIetBoM
k6xYvfqPJSuW34RzfERY5kSLjqPx8TWNoBtBI2ScAGgERtm9xIFxJTDiEbjW
1F76Zrfi3x1feewvKHIsPJZXubLMrED11ErEKjfO6Kf97jsywKQenP.qXDdy
9vCdEgBh3iQK6CoWwU7d0GHsho38JxKQuh7CmusP5yIubX.XKj97WRH1ao44
Z4Ddm6wzr4qul77bPwQ8vu83sbYYWJVu9EDyKpbDSgzZm0QIuHyTLbEtAItL
MHSgavKCuHcwhmvkq8JlRmKW6ULgap2fqk3CqKPHbEEbJXWf4M5BWB85zER8
wEzWR5hYG4x0fTBeviPpBgoj9xI7RUHkEWvncRw9QSRKVf4tbwzgpPRlBBW1
Fj3iy8bJ7OXdFRg2Cbt2.cE5slOKmU4qhj6vZQmgt5RzG+fiQBYgXqyhM0kA
GCYwBUI8Uzraw5BDuoo+KgcWx2i5qqhYWx2UBpdCoARhr72wjWIMHvo4xxtY
1u+GIk6gDj7852YqgbVJ7651LWMmjHDJrf1kwCEB9OXCVDLEdDdgZP5OVCVD
ER27KSbvEk4uXcABblqn5SBp2gIpqSv7HH4dWpvuHMI8GcNuHJlNCBBlKXSV
rnQeAEhIJ35V3B1hERQE4ErAo+3mGI9ncxsns3kCOOAdwBBG+ErEYKhImG5X
WjlrXq4Eb1KbSRT3l7shCMYd0PhL6kHmJ+ckJ62tP8xh4QN9ETPFuPfOEtfV
cv+Ar09h4AvxENFWVkOlHuN+cWcPl3sWscJddw59A20L48uurWYqq+iUJEnc
bx+cl7e2WO159a4tCo3qZZEpqlUMBPKLvir2sXQ+Bphj36DYcOlf6p9ieIag
MhVwsAdJ4zhrE.4+4+AbA++8VSDQO
-----------end_max5_patcher-----------

Hello, I am working on the same thing using an Oculus VR headset and there isn’t much documentation about that. I am using the Graham Wakefield VR library (you can download it from the package manager) to get the VR headset data

then I’m using the spat5.quat.toeuler with /yzx mode to transform the headset coordinates to the spat space

You have to check the coordinates of your headset and see which transform to use into the toeuler object.

Let me know if it works!

Marta

Hi,

Unfortunately this is a complex story.

In order to make the tools (HTC and Spat) compatible, you need to know precisely the convention used in each environment, i.e. how the rotation is composed :

  • which rotation sequence ( xyz, zyx, etc.)
  • passive or active rotation
  • intrinsic or extrinsic.

You’ll find some great info here : GitHub - kam3k/euler: A command line utility that converts euler angles to quaternions and rotation matrices.

The default convention (for ypr messages) in Spat is : intrinsic, active, zyx.

That said, testing via trial and error is also a viable approach.
Rather than using spat5.hoa.scope~ for visualization, I would recommend first to display the listener orientation :
spat5.viewer @initwith "/listener/visible 1, /listener/orientation/visible 1, /window/floating 1"
This is much more straightforward than going through HOA (which alas is also filled with convention pitfalls…) and binaural.

Best,
T.

Thanks for your help !

Marta : I’ve tried your solution : seems to give the same results as
image
Most of the time, it works fine… but with some particular orientations, it doesn’t :frowning:
(try head orientation presets 5 & 6 in the patch bellow)
(when you mainly rotate your head around the yaw axis, it sounds all right, but some specific orientation clearly demonstrate that there’s something wrong)

Here is a new version of the patch, using spat5.viewers that confirms that there’s something wrong.

The problem in this patch isn’t related to the tracker convention, as it’s a simple Max / jitter / openGL visualisation - no tracker involved.
It’s just about converting orientation from Max openGL to spat5.

(try head orientation presets 5 & 6 in the patch bellow, and compare head orientation in openGL and in spat5.viewer)


----------begin_max5_patcher----------
11373.3oc68k1jihrjsetGyl+CxJ6Z1XyitoYeY9vytZAzBZWBjPyLVYHABP
BAHVkXr2+8mGnrxkpxTIUVJyot2txrpTR.hHBOb+3G2ifH9e9W+W9sOsN3jU
7mp8eT6+r1u8a+OvQ9sxigNxu8kC7ae5fwoMdFwkW3m7sxCVu6S+9cmKw5TR
4w8BLLWa3ae+YBRS7rRRNGZco.9T4Yq8e+ky6ZV98fa1eHRb+2JzHYiiqu8m
ir1jb4KRRQQgy9603X3wI98ZrBn+BGh3g6ke5AWenzJqhjO5nWpDWNb4Q++8
u9ufdEd42qbS9fUbrgs021l+SO23DKeqn+LyM1csmET10d3fAQtV9IFItA9O
4BhCRi1X8mP0asUTMxWVh87RKAwJIsDHv4oXXY3YIIogixw+60nYodEgG0sV
38R5KwPcmEOHdCdXjUnku4CBtqHP98WRnvwdUgBIK6EcGtuUnPxR+1znndyB
kKM9LWqbqHbKPMvzzx7UZ1ubSmuJMcdpR6FV5xOQwv75s1PiHiCVIVQe1x2.
TdQmj34EEze4vkMlxK7mcMFVtqI13HAyGvLhk5eB0XXEtdSm7WJLOmTi4p1Y
BrHXWVZ9+ITeg5p5KbnF9+3nt34lYga5Z3ceiJyHxGpIO8r+mT+2WWdsEn7j
77BLpqCIScQjwHHT9BCRhwH71DXujlyWN71fMowqChLsh1D3EDcoJPfSSRyS
Ak9y+tGUUhMxrL+rQRRj65zDqGdW7cB4uHke9x52d7U.8em.aw3XfRTov5S2
cBTG3WtKYFdoVAaelu7Cseu.e6moKi69trmb0Gf9+RYEvIh34u.2x5ye7hWQ
rSPTx8kXTfm2yVReQE4YuGo9tIwImuqe6gV9k28k27dpRS+CnRKbcUZve4uT
oeGTo4+fToCcgN0+QTml+sqSSSUEly+Rm9VqSK7AoSe1H+mIM5WhmZpenwl8
P24k+8xpyWTk+8u4MOuxMSkTtYJosQRS71XnR+NjUEj20Z+sGxKx1.+G5SqG
8XHgJlxDZ1pvGikoL6HW9KE4qmiDTEK1s3hlBINwGWhmJQqusxHFpp3f+NYD
KwO+xHv5+FKgpjE0Wzh39YQBc8viOlZjfmDXk5YEU6u6Bfe4tIN09u9zedHv
zp14hS+We5sDsLiPkfeHuDtH0Gd.xujT4IPw0Hw+dURn3pR6llSDYMIx8JMa
lOJkg+OfS0W0yyy2feMbix1HMcI7AM4OK4e9GnASd8dXA5+IqAS9ZzjI9orA
+UzppQ9FXVccJVbUQtPIRhjKjDjuMHNlaODWMGKCyuWfMR5q0ZEYtjubRgKg
Iw9JM168x43ZZZ4esws6IkpUz2FNiqmUlUzWBVg79HTLBCezw+pfTNXr6RjO
BODD.T+tbL1GNVjEZn6tbKdzgMh.IPBz7Sitvn3DGyih0.46LxO08qhg39pV
YmDhMB3Ddyka.py79y+H0HZ9xg8jgujnNGCwkvPebveflfsWvl82kYz6OZPn
kuqOJRtuLNjO87lVaMR8R97SXfPg+7Wv16pnO+YedlU+1mribMC7QUjm12fN
9WJRnQVptf96iZSkWhuQ3y80AERPB8RmMFZrPDtFQ2MpqOF1ArCBB7d54d3a
5YsM4tyG556+0Bzjfvqb1HWamq8sWG.m8vUu8kmJFhA8xo+Lnlj7YTn8e0EZ
34cm08WUBmL7cOXjXk3do+fh3gydIaDNwaJSe4SZ2WNU1ycJSv.XiUtqYhSY
g8D0C3K3FlbeZBd3Lt1VwIe0ASLri+pCcef1O9XoquyT+yIVGB8fVyWcEfsi
abBDqed7cW4WT+dhn3go1vSL8eLt4SOwUwOu9zcnJS4guAQ8Ie4mAT8BSh6h
35am1CurKjWz+5Sxkw8tSdahmMAGN.3JOu7wcasyAo0.a++sjZNfBbsMY36b
Spg7ICwq860f2m6BA5mFaUKwwplYtQz1Z+G+w+9Stgdt9VaBR8Sd7n.8xwZ7
xiNG2EzyRblKHpruYYIwiO05z0qeZxhtch3uJ31mJhQ98J8ji+0ZoWwi9KGS
60UBuH+3oqfRH0GoR3qKgJ0qnvWSa9lkQTup5EwEEK5Roj.+OaRoK27O8R3P
TUSGfTnDI5RpBoItIVOeAD4I.7k0OeSqSWSZ7HlBHPhWBqur0ftfWPNcYxXc
mNvWrHp8UMMvQWhq+8Ln9OePtgtxp2c88WYn9IpxPV05xWDguXO284R+oidw
EVcWanK9NYb.rhWa38UbDdVFI+3Y2+qbG9.JTRz4ZwAGrp8uEFE.tJ.5Yta9
2p8nYGXsRJ5IwHWb09i+3+asGBr7I9+ndt7rc0TayKxTF74k+Bv2nHzE9dCA
89f09Zec2xnRQLpPn4e+SHR5qlpQdhR33KyoIhO54N5kd1WtE8kyCLl7Ke4a
NvKjdUxJzloJCq5Nva9u2FM68EPYU5ylFIFOBj8gPouLQVeJp+md3pAUtKvG
hnlyiFV2GRxRY2xWtNJ5pccjrW65tG84AvumqFS8NWiAt.B7LDjrBDBjDrLb
h23F.86bCPDvLXnoIXXf+xJRWNoHukM.l2XC3OX4v4DoDIoIXYYHEEonpVC5
1qDw9VaBBfAJsHMGOGOKu.IEakZA+AJGML7TLLD7jhbPWysVoh6isAwiyKxR
wyxIHPxSRKv+VZN289aoKIaqDDWjZQAvqVmNW7Vm.kzWEslU7R5utjZOQ1eZ
FI9jzHefGGYMha4XwSTk7HycYRqewMF824fnR+wMHp6bSvQobC2LBzQeKCTJ
ESUjGWzJ349YYXR+hoAZ3ieqVEjWskyRx7HqBNwOZqhWpkGA2cqZt9ngV3M0
gSRvWgIRNMa4vowK71FNsaeOdRMnO+tlcMu2FfvUjIWeF5vTF4x8CkFwq.KP
98AKP8t.K7DSiuGwD5gT3ZhJtJHpnoJegi71BfR8tOcNIId6ymSdwJ7bsvPS
8qoy4Mc5bRR+qoc+00oIe65zBWktDOE0uzoeWzoY907t+UTp+Ad9nDHu9CT1
kGOpeoTeiUpY+07t+8ed2KPUERHDWXx9O2S6dA5pHJtLzx+EcV2KvUE26WDQ
+kbR2KvWEWE2oC8ORy49efLHvWkmeeZF9KAKy+yRNi91G3f2TimsJMd9Ki3I
A6Gciupzm39AByknB4Ohg9tmuqewd5Fwdh4WQ4dUMZge.M5qFO.kn3kfb+kF
8MNHWxeEj600oE+AzouZb.T2oL+Kc5asNM0uBx88OHWNwpPA4tYdEM8OKic2
WFVFpWg840GAFNgpL9ckZQeYDr+.If9QFfOSkXhd25mweMCvmVrJTatHh9KY
.9zbUwO4c5P+zDfekyR9am.AIaElhmr7+h+vsk+vuhx6pJzL+.JzWEJjWf8W
JzuCJzT+JFuqqQy9Crn3c0A3f+h6peoQei0no+UDd2lGbFtqufFwVRem+66A
m40WOG9o6YogitBhg6VWSJkCnkzleX4vs9wqgU7NvJ35e5SKviedGX4e9q5I
OTDrru3E8NOi6Cq0t+mo9LZjh9tUlu93tWNcHIo3+QBJ+u5KEIDD28rfS8qk
hjesTj7qkhjOtkhjqtVazLvOCNI5AINM1xrVhSTPpsC.bUtvZLCpX07bWGYD
c9SUZoH4xi4arqo02rRE7r4v5QOlonkRSz3uK90qN.O1tk7qaF6RiSb25t4d
fAxpsvB7RnE+u3R1w1P2MOQXd+JVO4UW9I14l7YvZIx8zKuPTv+jarQZRvV2
ju4V+rcQWVkWuaYVj6N1bL37DjhBb7rLhbbvqOsjQsDTQOvXCveJH1oVmV+G
+oZL3H6OS1.3FfR2e1xJdOfE8matWIrz68mShL7g2DAGCO7qVmb1FDswxHN7
t5G4aZ8r4IKCA2yFhmkDwhorDq8otM1OqMw1Fq7wgeF2rqcqISqiiWmtANdq
w06rr73KN5uMF8tV8OLt6DoFc1h2f2FWuCbYa5LYZKoVpz45baNzdybUSLYb
Llg5m1IME2oaT5lcaZ1pmSKsg7MyZbxY4foAQcT64LVvO9f1JUsdISanIwVe
pzJkdwqWMKXbXuoc2ONX0jV62OqdyFR8ltraTytMZosarW2yrBBTViSaRwLj
hqu89VzCXXNyz+vNlMIm2YqyXmlZklddCdGmeveC0bNsArboTXWHpfs2o45s
MacZ4YCyyM2DNaCqmXthppZdzAgnIA60VkkGYPMTqvQq0Jsyqjs3OzgcnayM
9M6NcHyNI7NzAlEtlcVybZOsm.YOtnyC2YzFuiVVCsrABwMmzRR83l3iChvO
zcDSWqYRz7iDai0z1wYZGJYW89t11ZslPr167ZuYKsWjxwIlndb6AW3t2a0Z
Wi0cVPkTrOoSnuSukYRSlOnMlnfh4t1LSZzkO2tYaGmdg9cjEoKBlMYD6jQM
XX2OeZ2t8Rncz8QemzSJoqmX.+zraqvX3GGEybkU5cJlILej5R0vXV0zUxPW
lJW.TVSasXctzzwEYsEyjp2nUmnL+8Q612Rymn+Al9k233z8o76aqss3nvpT
sN0mhJiYsLhxkOQxmMhuoBOG0nlIcbR3VtZlwJ6V8B786PlIStEG2O5TuYE7
dT7iS30nX0TFhwLZTyXz0mGaP4XRwY1dJ87dA6bnQUFm582Vuk1Ldj1S2KWI
27CrycJlpDOtQvpwMWkEyexaaGmPU9tVmNzIR+r1Ra0UG7NM2qQ4Wh5rgfV5
9.asQzME25DFF1Sd8jVaRaCZCSzz2q1wVaPR9.s0NyV2.jMyGz2fJNsYmiv8
y6TG47NMziFBUDWNLwTKyVVa8WsrOsSmorYaUb5DzD0z2M7Vbnm6WWTgefd8
At07FTscB2uDKQXyV1FZzMVPCJ9MZMYNARTwzpq2RGmVy5OQiPZBwTGF3Jw0
OLtyIyiFaNlcXj03NsV1laYal0ThhslzRuabXbFFmwoUkeogKkVPIWDRNs4Q
VmNrlqjOR1HJTwIjHqWRhjdzJkAnO6y0UWkPaq5FPMogVNQL9wu70lJ6qFiT
evMaMd+6gr5WG5WG51Ykc+uQYACIBZMC7antSaUPWvQQRm3hoy3KFILSYXd2
g1iA3Cj4SavEvN.UozUiytYC0Av5gsPNOV5NPaB3ib2R.h2sOOxRpM34IvQF
.Fkmtce9rtGVexAUR4P0JrdqyHuXm5.n+GDVvKYgvjG2hJA4jwdSJ3.eVbwF
3RoFewvdqElnDPApsHOSSzqB9sEvQkx3IS5taVCa7F4DJmlppJMHn6f5R.je
VxFtNjKcU4ZY0+fuwL9ASz5LFHMPkroI7e2lVzMcg.R1rE4GwV.bahuHYs87
YCTKh7H5ua8ottHXlVV74MGYxus2wnoyA7TGjan0AJa5Re9vnh7gjS5mUe33
990GzYmtmdoTp7q0d35r1XcY0vsbcqC09Ek2fYVrybanDMNhjHQC4wa2DY8s
EyFsofHgTcsEEkfMNHaN00RjG8NbUUhwxT6UVPWbPrve2zd0gWOHu.PHwcW1
xEe1xFyvgh2qSvtoM5tabCdl5NIcynx3wnoRsxUSYUyqOhtdtE8H91YHWUSv
3rvx2JWrcLavggfeNKvA3p5ykaFVXYdNIRwhQwUHgRvwQIY4NvmrcvHg.21B
SrleopR6NxTju9D0l7C5gCNdCGudm65VQzRoKmOehj8jAgSrayka1e2RmtfK
64Dc2MEaj.KgwRCpICOMIag3dqtfOIYy8KXTyF2lc7jv.udHdLVl19c7MELF
C0vTjC2lGWodrwwkRGuz7QLQpmC890obsohT0BFrO2vq2Yvm6zrgj4CynXMD
hyTvNk1mE7HOD4icr.6AiN8lFRI507vvM8DSwnvTLEVfQXugiL+rXzHkUHFA
sZtZtppMnP5thPU8PuBP.A8O0QZGHMnsHFON.IJCd5QhttdDQdpoBL.4lVbH
WtqoxP8ARHscIrPKhzFtql61.Y+zrWud1sFGLZccbvAlMO2JEt5BGnBmwRML
1vR.a.NNRVX52l0drhgtRNhyQVBnEk0ErZaEC23ljQ5t0W1JXFzmMdtIydEM
ldK5pk2Sqto8BZowx56p2pwjrwshyjiGqD2KJQ+vokDwrJmS5CRAGfA6FGD4
wsRozRtH1aagNNO1MiVLYmZ3BAhYZL6WjrrqhdWZAyTplLfduOGXDa2ZZPXn
7zN.oTWMBsUXIptFjDmiLFAvJzY1MKvDorVmqXNgu+nym2JDmJTWjwbmugu4
rLB0jSpsT1DnHAvNFxk2Zh3DBaUgl3MTxl5JhOPvVmJXTPt2.C+EBgK.LKoQ
Xmw3o21leKA6HuIEBggKZslArwf1eduL1EXr4JBSSaMc.w7lGWLaRXplmjmt
59EqTi0Wu97vTwbBK8UtG8821+TmlzDGWv2HMSY6LySyNElzoAQyFI.10VZK
wQXGVx.VIKAZ1Z9AChCrIl0M1zHXzxSzER0SlLdFQvIkidq7mv17XDKY.PUw
nzTdIHoSn6sfoGffFRcbHlo5ZjQI8.qyTs.xlyZhvnFrz2Ew4VnnAtG4Ak3y
FZ6WvdLap0dMYNCOctfomSVi2huYTrr8XbCxHavrMwEpQCrQRzFolB8nObdR
nXDaQ8EPgtXR+8A8kP0j1n+bXqcSVt86DCcKnNnHTehmpzdwd65qk6ItMJzv
kYfFw97iGA3sw.BB.ub.ieBnWmFxXk45yYqdXSHhJpChTJ97UA6cxGIlavVz
rIf2SXVeu1lPwFcJH31mGvqSTzafI2RMbOf+JXQrZdFAizgScTsz1P1KYHS2
QcMOPwrIqzdDLCLyBCJ7b7kEDJlhkdbzVPPrP9n74PkYXoFQM5GejZvYmkpf
sq5wURfYBojFnmrY.SSq4BczOrgzA4InMDIEnwKAlkaDHC2zBrsLlDEsONZr
rwxlFKWBwXERQFy3OT2ZJ.C.lEJhNzHJ6KYA.85MiAyV6NXowPjUQiLb.sd.
pnoIi7Asf7vjhFL8OFN3LaN30c7Q41Kv1aYqrtNxF0Ez+iOORabQbLpFovZX
woH5kxXzXnFPL9Pdo6Rvc67j8lBDk16HzdZmE7N0aeDgorDcg94.ceJxTu3g
LykFgjbZXrKFcBbf0Pz1jL0Bytebl+f3AmIM.TJZSWAHRsYMakwFdDOYxHph
Ep9ZmYIVs1BAAulibvoQX7GErx1GdN.YY1yhtsncGukI4SNI3B.9aO.woLEb
0fYvpU5qrWYg1snGDJWcIH3EpIMhwCckVC.D8P8pAzT7FhCnqatsMdruTbG5
7IJtb5iNNTeMyX+Q70wsWulYpUZTT3gE31X5y6O01SSBODibRmV9P2zd5Mf5
QcfzO2XZxXCxTEVxSP3YYy03cVrtiqPp3BLk9G0GbzHz.EcT9H517MyDofdo
gdHrd.VKbBRFl5NfaKa+5K.M6CKlOttzVKzMvEqvhcjs8Hd6l.xu9ps60UlT
+biLjwxYwfbbvjQYkJiN4bHpCJsUGVnpNXmqsfby7VMpiTta0Kk+TNvxHJCY
2mih2UmVZiAyAwYXA8FQcVXsceRCLxzA.aC9PxTxd.Sp5RPUwdiQ+H6AQb9w
E9CmfMgD.5i821nGdYn2YAyN.QlDptbhxpI1wd93I4yyK7s5N1eCCn2YrwRW
UUWtIcTuwmCEcz0FEGEtPmkRrjaRYmIhdWI1PefO3DdLA327QiIKh6ifQfvF
kqC1hbmAETHJ61jfyn9xY3xiaYsg.kygVH+ZJ6nrDVCMIvwI3Z0pMFg6TLkL
LzWsEJ.dYqBfKQ1wEoHdaK6MSu2RDDfWh.qw7QYCZDVrpQJzwQEIL2OWvwOW
zQJPl1Pyke.IVrOwVLfjzVTzuQfk7LDcGTr+18O2eFJP+18CmLnmoelcx9MH
taSf1oUFPdKGp9.t84R2niQ94GHPnhbioBgn2GGnmcdqKnfNZYYT3yc422vc
d55NjvOdzK3UDkVBw2SgZA3zf78Xe4wfE+VEPcIpWV+jCsIFoNzUf5Tnno9Z
1cxoa5mHmfGYlGHaDk6.7uj2dzj3XCDYBDNjMhNjNvhq65C715gldHto6Qbv
l.lyXikTmWGGuLSCx.o3AqYKBxnmbfpLMI.U5zlcKBQNVWN.z5IVZMSqar.M
KJ1XGlAoL1o7JXSoycOr0kxWlnCvpLXo9nnBpicbaeL1gbNSzp9Bpl0aYlIu
ko8ltNjrj8lV2Z0ADVTigaVhpwnzJYihO2AtEsHOqvpoA7ISNgRovnHcN4Is
.aZt5nXAFrK9LHqbRon33rQGQZcDhzbTBQ7vhcdE6VEEJt+zVE3d24z.p04Z
jmzZnEHkQLZd1NS1.C8w6xSCL6aJFd1bcQn3Jcvg9.id6vyJ5kFsJcvJhS93
zr0IX4bOrH0bxDI0VkoDimNuYyzPWC4yKkcPf+pt777fPveNJoCKA.i5VYs2
RQOvzcKlfG3ZbHI3saUlBEP3nCF+415.ucB+3vw83Zd5fXfU3xBfCH8pEbqr
6m.NHyl6cZdFdaZfsBK3lqEvqf8vPeQBH1qUZojzrGKNEZtRJPbgtF8AcUr.
rS7Lma2Kz2oAikBNEMFgQml5clxbNeNgWm7VyZg4aULpARwsAzSN.an3YJfH
EeeGdn+e6gESlTujloEhIKcaLWrb6nXkk0UvOqO7bfLFw5oTJgMQjX332HNb
IhqAJ+I1q0yaawuj7rIoORAxdCv5XUQZ6Q8UnmpfOAhXvLFWJVYA1RuAwI9D
7ltJiZ3pdVJNX2p9slYMRr.kBMGDXYYzNIf2YCEZE+iAMxfN.2k9fZyRNvSG
3+p9.+5HKHadyrtPjb1HHL0i7qFDXD5fREX4UZKsp9ZAg9KAREdAoAKvnJJz
HVn3pJo2eY9xkt5XlDaFMbkpUT+iTKjS66dXjHDiRTaEjfkTjjZ3Pw7Qlw4y
TJDvWybRBojMAU.otCkNQ6nLbOPWfvojzvZDmX4Sb0QWfhl3oEhabvVqpLcQ
FAJX29C.VY0slEoq50JVTWJFevYuPO05izTY1qNiYl0RI79BrKILWinOjCl8
dhz1sGYlghjpH9TyyMLmtZnj2JG7HOxBuvHQhTSTDWRj6IP5dkdhZMsi8p3d
b6S12LWlhVtodZmvCf1ViiKFIa3EaxxwrmL83.oIBt5ZVofuDkXKpnfQqzjz
XMFlpebBvFg+TTvvUTILiFvl61NBQcHTvMtkTWvfdCdY.Efxa6N6x4JCYBgU
FyJHEnPuBwR0StAzeHxtTqI8.CtAxdRwxDF.K5FmKFFXYz2nmMKFmA4zMYQd
bF8wmgwPfY6RPiISQIRtXtYKh4QGVdxMyLON2bydiDFSCr1S.mz8Sf5TFPZ.
WDESU9QwvT1XAKvxcJ0boT98oqaktN1sQKQdFEGABVR8PWuACFe1aZ.3lCbt
Q22X8Q1785pm0kDrZHDvRNsedq79d48yPTSmjv3c7zlSxEinXFtfmRz.a.34
kYDFiK+4QXqh2a4V.7VDlbNGXXxMunwtvDWC0rc4PvQf2oQqDjNGImYzeY+o
y3JnKzF3lKP1QkZ1.8sR3YbPbRGP.JTf7z7DPWJer7owMziJiZ.kB7U6yTPJ
7CWSmcJCEZV3PPDteE17iMjcmoVDEzeEOafEqCDkqk957.nSgavPgoppDcj8
LHKNDvNzC031TDzZED+s5tknXcs6qgb6MFHb1tToGbO1L4vQf6yfReH8hKlJ
A1cwgxwaZNcgzBTNUxOoLCTYAmyCCUmFf4x5RZvO.rS5nVWqHTF3a2NXL3mH
UWSEXnkthYvQFQs3EZ0wQwYkdVrE9lQ6W4zKpXMfqnkOiu0n5.uxMY4qPryE
4.9ECAU6VyQeC0dQYMlbp6g0YJonv8snR4nj.MBUBeUytapunLi21a7Cm3Nv
fLCEfiC675C3bEmQLv+Dc7A8ijBch62suwlM5QGzk4NBwa3rJhU4HoxQb7Mn
bF6wFz.jxnn+Q7Uy..SKnZgzPlXKo0YEDMfdFENhn0l8Hsgwh8GngxqQYhTz
bMwlw1HwDwiY.TyZrVX+orRcmUoQNZpy.Tfc5CbWv0ZKwQrvvY6gXN6KEaZG
LhlnOJaMzSL20NPlioQXRWD8zYXEiFfvfmkkOe97rx3WaJLdz7k.iRUM8.dT
7AxmVxbvRbo3YKQhkpaPhFDAtVHUnBky.ce5xQEJZZ2yhrcNxNeyd01mYi60
YlRVdH9ovYa2KlOP1IjXDhb2JFS0BvIGctEe6zKUo.TdMPbV8xjMPCpi1v8E
KX2a1cOJiIbPLTomNx2yOCv5k6xOEDHngJooYTat79C3QYnqMFc6QQ8.A0X5
yGRyPwB40yO2bXfj2Rswd43ccUbqeLLRY0fvEXjGG3QRxdZuxrlInjefheuc
IElAzmkmuYPJFPwnjNizokk4.Kk7nvpIBrhHmdSJP3VaQrvkFQLSX9RDpEUd
yzcIBg9fhybjH1cLWGyvI6WXxjsWYgsTTffPvxBs5.u81E.w9XUqwdh.ICxI
CZH3ZvypulKp2tyg8RKrxLlkVRXF7sVNxQmjl0SMFk6qtx7aaCAfP.UDicPA
nFOzg0CH14WZILABhSOyzEQ5a.XTjOaKhUbuoJwEgVX62WNbXYivNfcdBPzd
wxEZawqmANw06G6n3Z0TvOTVrs3pirw60oLmvdfsodQhkNY7g7dgnP2kcU2C
.0YmANxgYl86.NDaWlyLYpAjsz2CBgy8Pf.a5jZFhBoZIx3.Q1HZUa5Bj6m8
M54ucrYJCBxLG0IXCrpRcAWbEp4R3aAfD0xAywG7fJirsT1sYwQfVNIBoOaT
WN1Cm1qe7zZA6l31KD1KBhuTA4i7mVRLakJcfEmSg4H.lSWNnWJDxDfTo1gx
pdh4dsRuRorfWfLZ6kKb56prHoU4ngtGrHp2Vwt0TbTA2jp2w1GAGnhA7nwL
UJe2A9cMGRd.iwZHhNm3FOtrwSOR2.2Go+zCkOfknn8siVHqplJRIN.to6qy
Ueun5rTUAwSQlqkfpky7yzCHO167pNiv6On04k96yCOWLZeNh213FNwfx5Jv
.nWIyhErSWDRXMzd2nUb0yQY5t859RRR7PuJlNJswlJXV7CfPh0kbsNzOIZe
b+nh8IEbc.i535KvwGk0jGuGXmetMJQTxnzcZuNZAFhfYcL9dlmW2Y0vU0Ww
ZzKMO9bTdD64BecCWc08AarVfEtaz3s3kDslqYwm2dDhrZaD8ZYvUjbCLMQ6
PsRfWH7dKDQX1Twitc6a2csAF6AonsRsHoH0vhrHG0zhEH9RQZufnqYtPYZI
.PCrbfn4x5nguqQFHJ7QI.dYj6lHDin.ov.UaGwlVCV02zzcvFvRe45PGVL1
AmWtWU9fbPtb7wAIpyrfXnJG93VIrpo8.jvsHh0cZyzoz+8XTzPg4hdp19bp
yOvHQqBlckYqlmwR7.x+s0ZPwoSYVGKSwN9bglIEoaXoL1tpu7bcRS84b7dR
mBFs8bz1dwXlhBbihHH1q46OxRbrNTsJQf.89NkgCfLr6yN+.aqQ8GLiPY9A
NIFTO8TzfgKyiRMX6RDg9mlLbJZHArl0dMz5WtlqurrtZFntbrfT1s9hUFGy
2yuMOdFVLPnnX+XNnmIqD4FkvV1wsYwWgzN2jbPo6odSAP59SK8UhiGBtHkP
YspjhZST1n6GEOSoSVD3w0hQSfCZpNdByNRZ3rxMXzxyKAUXMBOwiG.aH.NZ
GdYNhYghsGDt9bgoDLMRJP7OCf+uuiHIPOd.3g7TCtwJFEvIanTrHeGJMuRK
XGkl2KsuVcfmkot1YVAfrMJyQlGoXiGOBh+ionQ.a7NVAHPoBfFtInKEgGQI
jrnLN65MARbmAZVgpbDiNqI2ZhQ5HftiAOONk+p9ayZF2mKEninJIChjdPrh
dsZF6yRDdVCffFCNscclcXnDR70.k7NbgvEBM.br91DFJaGiINuEsr5Pch1L
scACbRyoyw.Wscf.B5yQMvv9HDK8rhLYxwQYRIiKnkoVJuZBwQ0CCQvEnfU5
gF5kw7pVDKrQ.PaQ5n3RR6yVoYsCbb3MPZp6rAEz6khEH8I6cjZIVZwh86II
A2Qpnw0YKZpGXvtfLtkp0LAOrCbkSaBYjiRzPcDjxPEQjIskPcsN4dCskp6X
k7TEXlhQCLxjQLh5jxepInep0Ig14n44y5.fN6fztkihWVSyw8IyGpARf7sn
.xw1tvSL6fAI3ATLu.aV79I1pyrKB2pHvkOId7QnmVfxAYNqcTTJo6DJkilD
FsJy4Mx1a4zYqlVFoKJJtlY.cg5M6gmjaiIOXhw9yMaI1KZgEvzcqx4P7yQ3
CWjrtNZ.sPMZWPi8nQ3HawVpKV.Lq52pyXbzTWoGJ1G4gz0G0ozQ+RKIxiRz
9brK0KMX5aXTz1Wmr8jNtylU.vKigncwHvXsjFw2DKC4bK0j57LHNFBEql1f
OOZCQuz5oBFXjzTBbha7QoEuNFYySKGEi6vOWZfVfJQ2Nmix5AHynj9CAo1t
fYHkNxus8Phfg4inrao6vRjFfRzlC3mLdKxkhYmVMJcRhFdiYbVP7WsCL2pS
LW1c9nzB4y.uBDtK8A9YhcuDbMJdq0wqlrSJjBSFkRwtIPDM8KS4wI.TdLDl
qLhIPigB49wlI8kGqSNZvwSJnpHUpEMvMB8JJmHtHbCGz3HR1xzwogn7Nr1T
IaTPC+krGF+gQfC7FiQozsL6MLKW.QBpqbdHYgA4pynQji4LDTqmpA36Z7Pl
cyxRIAZkZsj1vOnKqO3KGEDMP9XXSsSS0ZnQDpIg.FA.W5w.9TSzHD2eS8ix
AAsBGjP1VucbfzPT1z3cRoUbrGVX2fiLtI7+yGT5DtxIUOuEzK0.M9PffGEP
T2HHPjdQfqYcTJcKMGghG8EcQbsPpy33sNYNXNm+tPHR5FI78P7aJwZxacft
UNMP4bBnoNaKP0aojVqMJaSC51CECN9Bqd1nLKPWlZRZTrkMPY9qjmZajWDe
TcxjmtNTAZiRJRYxWP4oFGk7Ge.c9P4XO4mJDmB87sAUQ61Z66V4I2UnnHV8
hzfVim0PjWaBZdtgua9jgS1crQcuse56YOC5lreSw8Za2TWlPozrD+DscS8N
sEk8mW1kk9Sx+7z4hZ+MxZ+MpZ+M525NUF6qtkBJxeQZdY4whR7mscprqsmK
9jcv3JsKF+MxmWcibi5x5x3c6gyj+ij3Iz3aWlO9t2p6pl9CEaohCeUTen+Y
Q97BqDJuwUCkuYYLnZRNxKqniUZKB7JfZz2bIWYw9VUanpVimmox.5DUble+
y29GHak2l73d22w9Xq7N1Gbgjuu6jgUsp7E426XcAsSDQUo5xGRUox8Pu+UE
xpVUndWqJUdWuj9ufazju3yNajUnkuYsvfX2x5826CPK40eLnuPYjr746Rj+
idiT7Ea0FUYwM6EZwDUnEKb2hXFyqzhou0s3u77We+R7PzAijGu6r87KWEOc
OG+Ireu9RQEmX4NFCwiVpoodaqVE27MOlaun3pqpzTjT+ERTvVAifeJEEu3N
t6E+I2CDVy0uF5Iytc+ZaBBhLQtQ.H+JuE6x9v5CwSexXoulfqb66hk5xx7+
kDZ7+ta7tun35x1aXMzhdnkuUTsk5q9N1+gu5x2l.U4hP9kcyORBpeBDCeWN
R9wWd634pxlSLY4xSg3qscGR+QscG9hq+e2aSQh986ds965qzJjbkFMWVSDE
Hda67cuO6wi1d3n0xf259aG00c8xJ9XtUkXFWogK7QtK1AM7xU+BGiPqZ+8K
uDGBrbQeZigmEZYXf8kkIO54Z+kkNUwED4cdeXX9YY+L3FnWPd8MCUdNbpxs
uc1eJULPKsLd096nU8lZl4FQaovWSa9fdA0OlZgXUPNEtScf9mLsh38Vn0R1
+twIqX.p7NYxi5u+d1xKtNp4kUVWRtKbM3E+YRR7vdias+dp6muvw.IOrLhQ
pHHISnkk4aTxPJTEQykHan3qLxwCqEL2svB8oOXsmM.miHiZ+cv.ILvDIuPK
pRdAA6QuupNgQFY1deFcyQqMTurTrZJXTWDiBr+igXLOHxyrlikg47HiM6gF
En0UFMBRFVlNezwHqJHUYHTunLjsJhP5ROYTrjezKH5nLck59cyckoJHvWbN
Qw8LMJTw9nPLd7Nn9ObbiuCjaQfUe9UVjAeAhsW2Bh.bOQcebPbBezLaeac+
LzUQml4QKrduPu+c8kuac8WJxmNLN2IX95TO+Ewy2jxYtmly4WZHa3e5Ucv0
LLv0O4thkujEBOI6cz4KkMke7guR4BmZYi6k6Nuw0ZVgJUquDpN0k8cbzmdl
JM4GWk9qtp6qBT2fpfHQUpBBhOZ3E9wJvubq9gTuHonotzUwfKvQQwSyyxxw
xQRS+X0su4juSJeUqM8JJeWsMcuxXUZRjebMIp2dShm6EN06jlNS0v0XuYZ5
LLevEHM6GbAxw98XKeKzJoqjVI2sq.4+nKPtO3Bjk66A65VnkVMjElaWAx8A
WfLDevEHKy2CX8sPKk5ISQhWh0.4ss.od0Bj31VfupHk+FxKhrRDwtgXoUi4
2sCoguRF9Bz2tBTnR8g2N+g7UBog+1Y3yWIGvB2NCe9Jgzb6rJ3qjYH8MTIs
Rlgz2vVXkLCYtcHancrvWG6lm51VfuJ1MO4ss.ecyvanHsR.Mb2NkFtpEZwW
wV9Q6DG2h5P03hK9h0g2m7.UsZEe0qUefxJ1pWqtEQDyUIrNpaX7hUBqi6UR
p.GyiloHWRYW4GduRRW0pzjuPR5tIJ0v8l9U6mt6ptQk2qBXScC8PTEORTj2
zx6U6QIucsO1pkyShGMcx+AKP9JWfj2lBjsxE3MJF6J4xk9FFTe0fvuckW0.
moeAXGxOrp.o36HxWEqBruiiPBckzzXtcnSzUx3k5FlfrJwljl51VfuNfuvs
s.ecOZ2tjqPWIzBxaXAVo.kYtgJMjUoO71ExCMwGrUAk32C63WfrJ5YIobpg
bYW26NpqLkrUuE0wpgMc6rbopD1D8syMHUk3pwb6fJn9fyvEUkPJ34tYT0np
DRAE2MiLJEYkKvaSKjTrxhzaSKjT3CFsmjsxsvaTAx7wh1SVIqP9qOiJXonu
LKCYv4eXB8b4iuSTlqV8lqRUap6ly6jWdnHt742Id1UqdSRvVsZN4kZN6cyE
cxmuheKXmSR+c.W+9jHTxpCndiLNHpV38B2vRrRon49J1MoHYqlJI2MtHIqb
Q9Rb9t7DRSSJf+fQP4mtQ0x2fF+WUEEEXKgDI4EtLIr3v+xm9l53cyozuZia
tr580aXye8l07yrQMekMo4uYCZ9tUqfWZiY9e8eAtf++.9b8+b
-----------end_max5_patcher-----------

Hum…
Trying to understand what the problem is. Unsure yet.

But there’s at least one thing that I find suspicious : the quaternion delivered by jit.gl.model is not (always) consistent with jit.euler2quat. See attached patcher.
(while jit.euler2quat seems consistent with spat5.quat.fromeuler; also consistent with most other tools I tested)

Again: this might not explain your issue(s), but that’s a 1st source of concern.


----------begin_max5_patcher----------
1612.3oc4Z0zbhiCD8L7qPkOCdrjrw38xxddNLW1ayLUJAHRbViMwVNgjol+
6q9x.gXiUHxDSMUEBfrwsdu9otU21+Z3.m4YaoENf+B7cvfA+Z3fAxgDCLP+
8ANqIaWjPJjmlyhr0qooLmQpiwnaYxw+52.+c0fwKkCkM+9wXupAmWNedBsH
dIUbPzqFULBTOxFBawcwo2dSNcASMyvPOWuQ.DzMXD.OQ7Y7TWOvO0+jzx0w
oITVwgWG9fYkrpQ8NX9deYAKdU7BBKNKU9SDG62CGJ92ntgGPQVfGfQSELvU
GOrImVvOGoctIINktHqLkcH7OjolZClx+5Qw7suVmdIzBrP3gjPPufDVkjws
PM.FtysqLO64MTEJbbFAblSRu0Y2LeCImrlxn42PSIZdvqYdHBIIh.8aUrRK
Lwpr70D4UXRsbCxlvG40cveZX+G9vND9WAdeT2A+vdi2Ok9DGruI9WY58Ywo
.+53E+SxKu50A7SSbfejF8QlQBuFxAVMbWGtdOXZuWvC6v06A39O7wcG78uB
79S5P3iudC2ACsS3NMGziB20gatC42606gcG5gQ8dzGzgnu+6686vxZth2Xm
cBzE8IEmqoR4AOTR3tuTdAxfG1NB7vy7Wuve8TcQ68OpF+VplOxy2MjWIuOB
IvIT6wwuyJ5OC3tlVTPtk9F3N1y0eJFBw.OWn+z.eLPLDLxODwGJLv2yGUKx
OQ9fS4umDH6hglAP9SOsCGUKC.smBufOGCbENc2U4YqokIzbvr3zX1Swr6.+
v4KqyVRAae9ke3T8iaq+WP+Su6HSJzAq1..DiTe68IQPVTh3Avd.u5z.moBP
BL0+Ch9jc+IYjkxH30Dfq4rdGGy+s6nQ6DUfz+bBpYQPdeLy8or7jkf6njk+
aNYw+wmtfYpTT.HXFO2GgIFqN+byhY9E9Fdpn73s6xD15Fa8T5Zc2cwdmC2f
OCtgvX4kw0kdGajN98UBiFkp65ADEZFJEyQ47RaDqILrd3eD97V7imh5Ug+E
KMjw7QhT.fY4YLd5+axxWxSCvC5ClkJ1sUR7K70I0F+GWWqQZN4XRbAyzp+p
xA3o3rfOub.iCffw3H.Np1NAgNOwfNJ4kNUPSfjiwlgX34AQHtWAwwJLNtAP
dlYz02TydRJ8xzM7Db7nWp+pM5Ui3TlHTr97nObR3GFIfu1UGEdoxnYRPccn
7w6Buepf56UEuS+umeuJn9sTlHSprTtZqco8RWaujUcv4I9WJ2cR7iT2kwjj
pY+ij7T9lRd8A+N7m0A4S2Am2nwe6lc127gEkEyk4GWjkjkqtJdtXHNDwWET
+m7LY8SnJMmRK8NuK2UZpBxizk2H79wyK4Ix28oBMypo15AxfCNgANzshm5g
B8sJ2wQMN2gouBORRJoYqd6ObO+kjkd6o7Qu5jWyc2RDJa+ecGOVNSF2zITb
WVNam436Fmu49s0YoJ2ecWjRdouErm0d8JLOb+acir0uVYaTOV1hBB+CS1ht
bx1WtRjsA0IaQ39rrEN8OLYK9jx1nVTsQlKZe9yVz1v9g1PN41gCmXv19Vkk
xJ3UAKmo3JJQN7NV3exOX8RyI5QHoBTuQ4F6rI9RT6+sIth96l.lsJl6AW9D
IeExcNdIXVwBBeDOWzY0CfHCaZlIUVT0G.nm3aWh9.zXyxB8seyxpjEpm5Az
D36rYYpd1r84WZueYxqnz2czSLsbZIF+0jRQVY9hJ.tq0Nf8yrkzBVb5tmmx
uu+o.3fSRF1qYwqw1VbaEZ01hG3J6aa4UE2Fr0byG2Rn1.omsrDrMKAskkZ0
wgrfkNR40feZhsrTarm3ojxNVpMEADZKK0pJ2JZOCLzTKYm1ntPKYm1DCAVx
NsIu8sgRvnUrcQj1PSBxebpfc116BjgQdu+OvaaKiahosQLRiX3vFRiht.N2
i1igsDVlHoir.+5iMvP1HEDJvH1zFZFjIXR5cgezHOQlZIzG0RAlZIqDMEdA
jdFE1VdeN5f3WljCDYkMDYRVcXjsrTq7oMRraXgUR9y9tNy11rU1ftYTpcL0
YlRUUkLYylGo4UMjSZEm0j6U8ta5H4WiSUeU9fn5jSeLt57k066Px4E6y3U5
WlqZQz1IpFH3H55RdZYrNulrOeNxFPHZmTwFhBJx9TL72C+e.ZN+DgC
-----------end_max5_patcher-----------

jit.euler2quat : rotate_order : Set the order rotations are applied (default = auto).
The default of auto implements yzx ordering.

So it doesn’t seems suspicious to me that when using
jit.euler2quat @rotate_order xyz
it returns a quat that differs from the output of gl.model

But it seems strange that :
jit.euler2quat @normalize 1 (@rotate_order yzx // auto)
and
spat5.quat.fromeuler @initwith “/mode yzx”
DO NOT return the same quat

jit.euler2quat @rotate_order xyz @normalize 1
and
spat5.quat.fromeuler @initwith “/mode xyz”
DO return the same quat …


----------begin_max5_patcher----------
2401.3oc6b8zbiZCE+b1Y1uCZ7YGWjDR.6kl1q8Puzaa2IC1VNgTLjEDINoS
+tWIA33jUHjcDN1kdHw1XLu26md+WO3u+7mtXx77MrxIfu.9J3hK9awQtPcL
4Qtn8.WLYc7lEowkpSbxh70qYY7ISa9RNaCW8E7aYkL.BTdadU5RPAiWUjAD
GETFulA9dU7K+njkpeR976tLxe6QuOlu31jrattfsfWyU9TzLxT.kBm4MU7I
0KHuYdfu09qxpVmjkx3J1C1dz42rHOMun9p3MKxiDFhvDTjODFPmJNjuGNBA
IzPJJvm.63PT3qnTdEukTd6h.2UUxSVkrHlmjmoXD0W9Oe9SxWEuL0Z.Ni8n
.W9Q789hjLN3WzhgHSXHDiHRPDGUChXEFh5GCei7NPRzupUhfFkHOJUJDeXR
DO+laRY5X7vHyLdDRxqAjZV1u8+6GiCegDEBaKNq3ZVV7bAGsqdY8Of+z8rZ
hOQf1S.ey4KiOmBDNEDrhV.IxyJ.QnhJdA5EzyRIROhf5TnmLU726Pp6ze2i
IbgmNNnHuJaoPplBlmyuU4mqDjlm+Wk.l3CoylAlKNMgivm.BLBjkyAe4xxs
WvzjL1Bw0PcUw5ToBMhfHuvcQPhmxjH7TvXfRMw4TXsucDcrXKPCr.OH0VDz
SNKgtjYkAfHTommGTqTirwCPiXGDcXhMraw9iPjMG9BF5cxJxBeUbQJL5DJu
dxxP4+I5ivZddb1MuGgdMqrL9F1OtP6MSrJiD4NBi.p2GQEqZT8Nu80.ZDiN
u8Cg6jYVfRqf5eZnHLfXhQ2fQgjcxsazfITyA48COSAkcwESfhtLeHDSfR.0
+GvDh2oAlrJMWPlsb+p7h0wJ1lpQL8Mt1GVmQGAsU.OjZcPGliUYNCuWmq6G
VXz2Pn2nBKLF6HXboWXrt5fyc8htRzrJ6t7jLfut7wHdV.I9Q0fAL5vvDh4x
I18uAP7KEBFYlrj5YqJxWypRYEfqRxR3xpuA+4jeZc9RF3om27mSzGVAoC3f
V.bXr5EnecPF5AqLc75HwebKCrjsJtJkCxWAhq34fj02mxjmdoDk.4EKYEB4
cl8Ag8MFDlPp6DGpN6eHs1Nbu69v191VMuwfCN.Mjv23JO1mpZHADMVZHgOx
B7fDDdZ1PhtWmwV0EVZSfhwvBsUcgk1XEe50E18JWArMcYabj1DxXoED5XBK
vFc9SFU5EXjE6553JcZL1BH47Nc56R3yT4PijoTCtJSpijl7LC.sO6YLwBbp
I64vHWm7bZRIevRf929cvOqU0vXzSLrQmPI3M8o6cl.bYxR1q.B8CYfKyZdu
QEj4jrhBk3w3CULuas9+2VW42+MsXRf4Bt2ARHmqPxdE9EZVIAWWq0XIG0d1
WQ3nBLLuywnwklg4IG.ctqYbHooh7sASNOxSc+7YZ1Mw1VONJrLfVMejiEv.
aFLFWZFF63Sz4thwg3xDFXAj7ePOlFSxD4Ol193.ykpNlfBhE0mNVFp.i9EF
giT.pe.47vOYmMnPMe9rhrj7Lv22LE78mD+8r3uG0F4v73HA8QgyBdoS4vl6
OI+Ozs+9cNLEad548YXJf9TaJHocbJpmR3Sowon6wWDf8.dZUKLtAi0CmYyD
deNLM6o4wKUdaz4QvX3BTcu6pWaIgGlGA3fMV2l1GjGyKRWBtkEu7OJhW7WB
4BbUsqY.DbkHLRLWdLsq+F0388ZFbnZ+jD3ggJ3NQEA2esHnVQxlsgIdml.w
bdQUxVgR9Q0waBUoKxI1FHndiQfnf2ohwdF77HryYE4bQXjqUiSkzioE6kFV
aY7gVTZRquSO+dFw4OjcSqS+mWRffKwQfcFFmWI5HK7rz3LEeJ4FsSAVHuFD
WyYRfOYiZXb8UHuW1k.CsX6AOEWe6Nw46EAJ.s2UCZEZyMrNHRJyMq0QAtNv
fJnkzb9MuY.vhaXbYThNuq9gVTZUiaMZjqwAWT.QZxCrYKShS2JGODWjIhB8
5u8qvuoU7I1nGDnxEtd.is4F1cU9hpx4pXNu5ga.FhCPjoc7Nutd.FXr1TnQ
zsUup8jJiefs7ZoFQx7JQbwsuqrAiaAY8BwE6dFWLgs49BgSmlcocxjluPt9
0dUdHNshkuRyO9EgIMO6FiqXu5rWKV9UBt5dyT6Ijn3mK67LJuMufukhh7xD
4RtQKwZgSsWlJQEYk7m1sLvs5vu7lgTo1WuRsw48.QB9ek5OLkZzQUo94yQk
ZhVkZjwBYPvv+Wo9CSoFaVoNpOc5n8Pk9oSIU5Nef4DaN8y.pEocfPJc5lzO
wcpLieQYNiWJJrUIl3sP59jK9tWps.+uTHMZGjR0uIclrWlofqVkHVbW9Xbw
Jzr43kfqJWDKNh2LzAVxdjEPbaA6MiTtCKX+089YH54ScmM17zyZUv7sQAq9
oaAhBOaZ6SWfwVMDscAz7MFmWydAr6ikmyZvX2ddoEOBsAOp2NfOd7nlrJ68
29DvSw8xu3MnTYdUwh1q3189.riDrjUxSx1Nfoe8kGOa6dV0Hn4m4R1yCxVH
ZAO.6fGPtfGrDG7DmETCOfOh3f2.tV71KtdVP9HhSdVNffTnMDzuA2Odqzzt
z17cgPirVncCJaopEsKybnKDZqXA48liiD51KUOxbv.ZNQfVyBvAxy1akuNX
Apyf8.59rNOHdRsakWd6xMXATriEj285CV7D6XA4i2KsrfSr4IGYadpUwuBn
GaOqjfgLwA6BoIe.cMXqz14oS93vRKK3czb7PFxzHsDE7FvvrpKNtWGOtyBP
QPTuDLvsDD1KACcKA62Wt6RJVt2iVF7Xnxbw2tTTgNSl8sBjwtCjea3+NHHx
sDrW8VLzsDrWKSD0sDrWeOXGF70J+sPjCoH5nSwfiMEsSDItkf8pmBibKA60
RDgcqC8dInCEPxwNM3HqIHxIDDgslftouQHqfTnCsC8sRDcXg6Vk0QzQtQA+
PAVNMaY63g2hLNsYfG6PXVB6uslR21xeqT0FxtQZW5sNCzsJfCwojq2.pANk
b8l1m6pGSkQTuzC54VB1eBJP2Rvd0WfX2Rv9cJ3tfMH67.fbKA6OmOnaIX+U
e44VB1uYgCsCsquiH+gbiasq+qv.Kif2ro5w2e+Crh1wBql7SVGeW8LjENs9
yIY0et9NBcRA6gj1eRyghKVbaBmsfWUTOxPanMCfxD438TjUkzFQqYjylnFi
A4HFUdebsnpF2gO+IwI7uhn.gpC
-----------end_max5_patcher-----------

After many trials and errors… I think that I’ve finally found a working solution :slight_smile:

for some reason, pitch needs to be multiplied by -1 after quat to euler conversion…
image

spat5.viewer is not able to display listener rotation on y axis (pitch).
So when trying orientation presets 5 & 6, spat5.viewer listener head is not consistent with openGL representation.
But when listening to hoa.rotate~ in binaural (and looking at the scope~) : it sounds good :slight_smile:

Here is the working version of the patch :


----------begin_max5_patcher----------
12140.3oc68k2japjru+8Yh39cPgiIha7dbNX1WtQ7dwQKn8cIPKyLgCj.AH
g.DqRbi27Y+kEnd0pUisUa29dra2sj.DUUYkK+xLKx5+9+3u8aeXk6Q8fOT5
+pz+nzu8a+2vQ9srigNxuc2A9sOrW83Za0frK7Cqc2uW2I7C+94SFpeLL6D+
et+PVZYGvc01+fg39i5oFt1zxw3S95qCyaSdZFbheuDMOIN6uWhTD8AJBbhR
+q69RNQ6sbr0CyZaxGcT2nv6NLQ1Q++8e72PuBu76Edr3nm.cxOenD.8UV7C
Qpg3VNw59A5WZrQyc0wFe9XiV.8BIAe1fi5KcvQc2gyOV3IO876+G9vuC+V5
e8UO3ewIx7QerkdhteIqfRNtgkTWYqWJzsjlUfms5oRdVv.tjuanZnkqy82C
aKG80tQNgOoq+HZF0U4GHInIPjIdgLVAR1rOgXR9QyQX6ppsR0w3R7AhWcLw
vJfyCb2bbYCFVguN9.xWjOHqa8MvGrWOHP0P+yGyez1JHT2Q2+iwVAVHF.xe
uzCGz02BXexl+exED3F4uV+iP2eEv+PdIJlfXgnXhz37TLrL7rjjzjTTb7.y
.K0qP.o9RIfeKDuGKqfqCiXMMcsKMj43u5PllKiumNSKAKMa1Xj4Klwm9g1v
Wcudnt+mzcPxtYREWWURt5j6tlrwxairz+6R+AI9EMVbU1BAJQjUBFpLRECw
2HavZWaW+76LANMCIIOGCOAqf.EMzJD3BjrbBbT7LrDhBDLnCgTI8316ynia
.0DgeKrSW2fjavZbOecOcGsGjCuDgjk75DRRzP4hhWjrzu2rSYaEqiqYoZe+
XJV02A3te5Y+GT+qKQJntpbmf.aFOEalbGSlEaFgWeruwccTvJWeMc+mxGQR
ySkw9bo28za6kHdWRrk7pT16X4t6hBTi009jZXnu0pnP8GdWvYZ7cD4KOH9s
GeEfVfi.+VP.xDOhf9gym.M+c2cIV0NR2cyE9xOLXrccLtvLF28yXO4p2CS+
YCbAjH2Eu.qr9ye7hWQfoqe38snuqs8Eao6nkW7dD4XEFDd57jvCi772c2ad
K4nouLGsPQzR9KN5eDbz7em3nyfe+yHKM+EYoooJfmT+hk9GBKsv2IV5SpIu
mXneIjXQNdpq2A7I4++hbyLEIt.h4wEfl3qCuE8q.B82+r27l3hHxzZo+9Ec
xils.HuXIIxA0mQEHecz7abcBCrRymvIumw5KwYuGeqtm8qrOR40a.EJORIW
lDwPU.S4mIQ4wB4+QRh.Q+Wh.UDQo63g39Im.UfnQF5pGYq6W5Os.EeIVglk
9me3i6c0zKcJ83+7CWjDJTDsQbYrZTTu6796kHJOQKboKGOApqFfVNZxb7D7
ngtH2qLxY9dFVou3PmPcUMIbhT4wLQ.MTyG22xHn8lE2iWd7d0HbvwJ9+vFu
jWe98tXh8y138YnodA4XtBL1OqAijf7qSCFyWLdpe+Mjt3UxTW8hwQlj9pIP
gTjMK14jB4NKw9JTiuEaelVZZ5NO4xy5R59etWLV15n7nc1GEx6cLQ0y6QG+
Y9lrWcatCOBOf8G564Gi8gi4qix+P9s3QGV0GHOg.sIxO297QNlG4hAxrouS
j0ybc39tV1rDx1NX+cc9M.Mad+4eDUmlOmZymgomKO1zLBO1YRfUvv1c8tyA
U+9i55o6X4fbf6tjo7zyqouQMxN7SOAyBE9kufMm6nW9rOCmx8WiguklqCpi
7z4FzwuqIgAIadJ4dxXJ6RbT8tzWG3VAJzKc1.XvBN1p5eN0QOVuDHH35Z+z
y8v2zVeS34y6Y437bBZnq2UNqukg4091qbgyt+p29rSE.tdle5OArIgeB4Q+
ytPUa6yh2OqENp5XsWMTOzJe9fh3gylGQAyf0Ywr7Ii67SEeoSoAB.q0SrzB
MyZrmvd.eAKuv6iNvCmwxPOH7YGLT0H3YG5d+qe7whVcVT+Sg568rgQyytBP
1wJHDbwOI37UdG62SHEOr5Cdhn+iUb9zSbUEnWOmselpzmbhK4.VFZ3beSuP
daeYaKWQi5qmC2mDBi6sm70QddVN9eJ8wZSoStQk.Y++yvRl.Cbo0w3asBKg
rICdp86kf2mXAN3GEnWJzTujVhp+lR+W+w+qmbCeRR+oeAh8Ctg7h1tD3x0d
lomIWiJ6WM8l3wmZUzpUOMFQ2NR7ybq8ojXjcuLS43OmK8hN4dcFQgy4Ht.L
hTesLhuELguNEJiuhBeEs1KRindU1GhbFm7LoKv+yFUJuQdQcUTEiGgTHSaU
dTEoItIRO2oD4IJ3y5eNZ5GulT0iPJfTR7R55yFMnK3EnS4qnjyz96jXJ8rg
FXnKzx4dDT+iGnanqr3SWe4cFp2QcFxh1WtiD9hyb2GB8mlzhbTcWKiEegHN
.TwqTseFFgKhH4sKn9HjBHsTWd0Jwb0kP.IO48gvGzNSbqWdWuIKwuP+SkBb
2qW5+zy2ELMBvQsV+eV5QKoqRYtjDFfLoW5O9i+uk3J9h7ig85KxOlbW04y+
KcVLKD9hWie2c3mab+6GiA8UCspHWdP2d+wVjO0dQVcxBLhnxfBe1dC+W5Ph
8EGR20s.joNYu7YG3QAeH+beRSMT8QVUdH1A4K+vmZl6COb0.KWt9RQz88QY
u9gn6jubMOecTzE65HYu10cu51Gz1eodL0abOF.GIvyPPxJPHPRvxvIdiG.z
uwC.QPmACMMACC7WVQZTDutoC.luxAvevxgyIRIRRSvxxPJJRQUrAzsmIh8q
cHHvhSPKRywywyxKPRwVnQvefBJECOECCAOoHGL0bqYp399Nf3w4EYo3Y4DD
.S7zB7eMCm2fPCanGh.eku160OdJ8hVlt9B.MOWxjLYpvEYu0q.gGsbhu8YK
NLx2A.tRVh3hCbhBEdbtLSX4wX.kyyunLFS+tOiwasBwQAYDWyGXRuX9yXJD
cJeQpvy8yRVguS3.kr7Kl8jqudB3DejbQ9GduIW7hYN7eC5dtHJUxqpKfhP3
Qi4u4UU+mMlCrLb.V72jbjkX4bwmtjq9jVHluZZxguRy+Fler+hlLLNlLhpH
SdN34XyCEE4uRF1uRF1uRF1aYxvtZf1+nlahSfJz+.EhkHeo.My8pwYNySkL
DAhje1Jt6UBx9Krx69ZB.+yusWBS02srX7QPkkqcTVfyrcSdIhKagHt44tfW
7WD2yD2rE3nmt5teuzG8AoKzCFL7Vv7OvSCjdGv1EPG+ntigkido+4GF.ZXa
zsz3ryn6+O+vWQ9JIJzbEIY1RthLG3DKw+CIqb2QaQrSk3HH.62DuXp4d0Ly
kmxRRtyTLl+BwX+sr9DnKHgM+w47myEnPg3ByBtxUsZQUPRU9p7Uj6WpVeJE
FvIhPRBfoAYcgWVVmrnx5zzO9oa4WT56ozYf+ewj7yVP5atSU7+UhO90VeDb
EVaI+eAVgDbEeMIv8lunDXeO0YP.6dG0adO0YnKZm4BbWYOgpYoo48PGj8Jc
P12CcvKwEdeOj4cQO7JcPh2CcPpqzAodOzAyLm+hcQ52EcwqzAIeC6fTumT6
cw4oefcmaUm4uVqgu7mRVSWU7f0.H6+co+LiStDco+TyBPmgxIRI5Zk9y8qu
7p4hjpX0wsykoPAg2njh9kNWcwR802C5b9JP3qgPyTDBMKyYB8MO6y6irCsV
ap53naeN+juqH8EsXpPdwhoBIaAVCe4EiveUKU99VKUH+UAu5pLzLWlgV7UV
NwD+hi9GEGM0uJ3UWmkl8x0vsq+TbSj+Tr+KV5eDrzz+0rfWswyZ88LkpQgt
arBexD8kxL0kW7fjbYESF.3lf.AGKGIg.qHOkHMvFSlutq.zyTzBbB77BTBD
rLjLOdERBNDoF3c9NRdcldT29Abom77wW65Dq6f7cA26QUr4htBt1ZE9o8p.
+4w2hUs10ehR3dEjw40Lq2rmnjKTYGdCdHS3nKvfj59hAOJyw+fdHStTEt31
7bmvJdVMIb8OcYz+3GD.V9KeUO4oEfk8Eun23khtWoFc+D0mPRdWbd9p0rFZ
trG7KRJ1GsTreaXm+K5Bwjf37iMN0upJI+ZgX9qEh42uEh4UK6FUuGdBptZn
UJzz2MxvDTfkUiMl.crR1Vq7U8O8gmmj86DkH+ZWeFT4OsO4q9cJt7RmkXwS
B9KIvWnBvQfkl9msjDPzksQAgVarVeulFxuWUuiGi58o66AOoKbA7vOmzy+5
j970+14ZrH2Y.bL37DjhBb7rLhbbvqOeoUbQvvuxzzcfh6otFP03FXVpYs+q
OJG.F09X3ZPGBv.9wZ5A6.8Re7A7xYlx+TnupC7Fe3XOF.8W7hD4I.oeR5Lt
GNDOKIBFSVqT5CspraRChMUV5fC+aX0VF0FMtLNdY5J330FVt47riO6fyl.z
6p0c+vVijpzbCdEdC7EMgKacyQiqIUSlNYA258MVOUVCqNNFS+EG2JMF2rke
z5sqqVqsYMk97Uiqbzbduwt9MkaaNTvIXuxRYk1giqnHwVdrzxNsCVsbh6Pu
1iasan6xQ01saR4pUjZOddK+pspTSY6P6VmPabD5CipRwzmhqqwtZz8XXNwz
c+Vl0gm1ZrfwHJROJ5zZ7llei+3oXdbMH6R0gclXGrclUWsoZsiyOopcp5Zu
IqYsES5HKKm3uWvej6NkkwI9pT8URMUpsT4zx5576ax12p5ZmpsF2mYqDdSZ
WsTKslqXNti1VfrMm+o9aUaf2TIthRbOgfpipIIeXcvgd936aMfok9DIZ9Ah
MvpZXZNtIUcqEcsLLTpMhXk8oU1SlaLKhiSLT9vl8Vvcu8xUVpqZNiJLcWXS
OGy1yikFMsWCLQgNZaavLpRK9DipMLMa64zrtHcp6jQCXGMnBC6toia0pcHs
4BGz2I5XmnUiTg+UsUMu.3elczR5rbQyzIBSGHOW1KfUNZYcXJSlyEZqw0ls
JQZ7vz3FhwRkqTqoeryN+s6po3PzcOS2rabPztH9cMT1jdPXYjRyxiQswjZp
9I0ORxGOfuZGdNpAUCaZFxMe4D0kF0Z653zjLtN4FbbG+ismjxaSwOLjWghU
oSeLlACpFft9j.UJSMJNsFiom11cqIMpyXVt6lx0Tlvi3dZkekbS2yN0Lcbm
fgUbWNr5x3.9i1aZZ5Iy2R+39l9KNoL2Pd4d6iSsqj8knNoJnDsy0PY.cUwM
ldddsquZTs0QM.tgQJK1I2zPoWXROkUlSVUAnMS60UkJHpZyCv8y9Xy5IMqr
vuOzQr3vDiz0pouwY47tzlMGyFuoiYS2png9192hCcoerPM9d5U64VwqR0vz
a2brPg0aXqnPWYFMv3Wo1noDHRESsV1yMMqMo6HEBoQDiMYfqDew9gMOpcPc
8g38CzG1r17FbyavrhRTr1nZKZE3EDiwodbY1Wp+boYT0S8HGW8.qYSVsk0O
PVw2qioGQb6vPoE9K6zC8YGtVKjIT1HuFXSpnjPDfe3tu135NxAH1GbsZC28
VPq90g90gtcRY2+ieraeB2ZS.6FxaUV51BLTD1LHc7D9zABS5zOoUeigf5Cj
3SCvDvVPqRloFysS5u.TV2uFx3wbqdJi.ajamCp3s5xijjZ.VdbMqCJFqOdy
tjIs1u5nIpkRftkW4ZmPVwN1Dz9uWXFujNRm7vZTgHiLFqi.C3SBRWCWJ0vb
A6M5XhR.XoFh7LUQuJ3zP.G0JCGMp01IULvqjPz43XYYodts5UVBT4GGtlqI
4bKYtZ5c26nNgu2HklCAPCTgqqB+ZUUmtpE3Px5MH6HFBfYS7YgqLlNombpu
MQ2sqN1xBololNeR0AZ7aZeve7TPepIxLzJ2NqaQeZ+fzj9ji5FWt+vtNk60
b6B6EYToruVi9qhaf0hUAW2xpLz6mkcClnyNwpRG+g9jDgJHKdaGUewlzICV
mRDRJuRmhRv.GnMGaoKxidGtrLwv5T65LiNcuXpy1wsKCutu9LPCIt07ZV3S
lWYBNz71Mc2NtRqsCqvyT1LrULULOFMUjdhbDqbR4AzkSzoGv2HFYpZDFmNV
xl5oaFx5tuOXmSGL.tr7z5U8R00NE52QmoikPHkfoYmv4aAaxFtCDbsZHLRe
ZdWk1ZflHe4QxU460FGL75Mb0VqU07okhlOc5HIiQ87FYzfKQq614ls.S1SI
ZscL1.AVB04pTi5ebT7Lwc5s.aR001MiQNdXC1gi7bsaivwnqY3zzQSPcHzC
iPFbqdXo7gJGlKcHe3iPhTNAl8KSYYP4Kq31aWhpc6SfM2ww8IS5GSwpJDD2
A6XTWVvhbejM1gBr6Ua1drGknc088W2VLBiBqilvLLBi0bjImD8GzYIBQPsp
KmJKa.LjVKIjk22NEHPv7SYD2AhCZCBwiI.hRkmdfnkkMgusbj.C.toFGxj6
JpXzbfDhaWBySmHph0xoVUPxOUa2tsQsgtCVUFGLfYvysrCWYg8TdSXo5Gnp
Kf0CGGQKzbZvZLri5hNIHLGwg.WTbKPpsV.biqR5uvp77ZtSf4rgS0X10Qgo
8rVJIsUJqYLiVZX8EaKWqxn3g0BhqGLrSPa+vE6ONmHfsyovt.UvDPvt1DAd
biTDsjEB81FXhylc8fYi1J6MSfXhBytYgya0YQKZAsHppL.euCGHDaTarqmW
8wMAPoVJDJKwBksTIIN4qN.TqPGaTMESjReURGsQ7cGb5zFgfHgxhLZacTcz
lDSHGdTtVm0tcj.0Np0yt0DAgDFxBUwqzIdrkHdOAiETtCbSr6o5LSvaFnyR
Z.1ILd5MM32PvNvdTpfm2rZqX.YLX7mzNlcFFaRGgwQ0F2iXZ0CylLxKRwVx
dg7tYKkCVrZ0o9QhID5KVZcvwYS2iMqRSbXFekn3NalncbxQuvlUHpVIDzcs
gVWb.194LfTxb.lshiau.WChIsBzTcGL+HcpT4vQCmP3dryA6kNiXqdvmkzE
fpnlIJOGnzgzsmwzFzf5QcnOll7JjPIcO8ST0.vlSphzQ0atiEBysPZEbax8
cBNopraF6g3w56TpyoZufyc7ovU303q5GT2XHtJouAH1FZA8ndFHJZkHMg1z
6OMxSzmMs7LnQmMp6N2tRndRCze1uwnJK2tshdVoT66HTdjsrzNw1a6pjXKt
w2S0homBwtjCG.0aCAMHf5k8X7i.95HOF8XKGNC48q8PPQMQfRwmtzcmYx.w
DU1zpUA88DZk2or1SrRyTBtcIt7KHRa2SiatBtMfeEjHVNMlfQZ+wlx5JqIa
G1mo0fVZ6oXVGmIOBhAZwdto1lN0EDRGiEcXvFfPLq9g5m75LAKR0uR2fCT8
NYNWFjckOrTBDSHkT.9j08XppOUn4h8qIMQVBZ.dRAb7RfX4ZARu00.YK0Q9
96B7GVWcdU04yAer7nHCXb5uPeLnF.DK5HZRifrOmETnWtZ.H1ZzDKJ.7rxe
fpIv0CpJppwTeuhahWXZEltG75chMAr5N7P8Fyv1oazYUYjLpEv+GbZfxvzf
.TOpCqpNWGQ6HF0J8U.fw6SxLWBlamFtSSfHSdGosm1bFuY4FGP5TlitPmD.
tOEYjcPeloRCPTNEL1YCNBFvpHZnQFoiYzMH1oWPuSjpfVJZMKAvSsIUqEy5
c.Obz.pzYxNJmXIVtRGoBdEGYuiCv3OHnGuy6jKRxrsNcCQil1yCSFcTvBT3
uYO3mxXvTClJqRlsx1YMZqz1fqbkk.mWnFUI.2yRZEnfnMZV0klhWUrGcYsM
MvCbjBZRmLpiE2hAG5uXEyPmA7kwMVshYrdjuu29Y3FXKl1crgshDtGF4nl0
bfooczqA1ix.netgzjApjQcXIOBtmEOUg2b1plVBQhyv5z8vhdGT8TQdGkLf
tAe0XQJXVpuMRWOnVyaDhFFY0iaCa2xy.N68ylNrrzFczMvBKUmcfgw.dipf
l+EK2raQmQkOUIFIrbRzMAGDY5rTlYA4TvqCJkk6mIK2aqkgP8pI0pTFwbWq
cD+wD.kgeLRtOA4u6BZo0pL6Emf41d.0IgUFcIUwHi5AnM38HiHaCHoJKAcE
i0pc8M54y4Dj5zeD1HRPQefylJswyb8N1cxdvyDO44i5rbjQfsCdXxzjTG8V
CcVy.7cpq0WHKundUZ+1CO4IZtPYPfu2rErThYXSxlLQv6xzMzEvCNhGS.9I
YvPxzftH0Hfai0KCxhbm.FTvK6Fjfwnt0iwqOrl9ZBTLGpgrq0YKktvJXHAF
NASq5MvHrFi0IFC8UqgbfutdJfkH9vrHDts4smrn8bjJ.6PAV0oCh6UwKcYk
HXhixWXpShfoShnojacZUEK9djXANDav.PRaPd+5CRxSPvcP99az8T2IHG8a
z0aTu1ZNwFg6VivtMBFm5w.3sDn6C5sOkYFcHxNeOABYjYLYvE8t3.7rSar.
FzAyy7BepE+tJVSiV0jD9mM8L9NhRyA+6oPi.bZf9dna8gfD+lN.6he63tg6
aPLPtuk.0QOQsEqX2VOZc2v5g39ZIt0U8SLA7W02bPi3PEDXBjdHCDbnE.Jt
Vq1yarvSyFgMcGBC1HPbFanj7zx33YQZnN.Jt2J1T2X5Q6oxBSB.kNpZqTOj
g048.tdh45STZEHPyh7M1joWDiQDeGrwzIV62XQ4TmnIfpzc9hA9oTGZZ03P
fI4TF+kcEj0JWSKt9FlFqaYRxR1dbY8k6Q5hpze8bTOFEVICj+4lvsnF4oNr
JJ.dxvinPJLveAW8Q0.YZtxHeA5sM3DPqLinn33LPGQZkOBzreHQP+zs1oaW
56It63lNv8t4wdTqRTHOpTQwUJlXvz3sZrtpKFtMIxUqqln2IsUodhKW.Fz6
o1dKdbZ6H+kQ8VRbzAmlsLAKm09YQZiFIIWKKjX7zIUqF4YoV+z75lHk+xV7
77.QvYJJnCyAEFk0iarghtml0FLAavzXeRvZ2x3NT.filX7mZr.vsS3D3MrM
W0i6Ec08lmBX.oWNiaoQ2Pv.Y7T6iSiwaPCnUXAyb0.bEr666HR.9dsTIhjl
8P5QOskRthyVnPuegLlK1QdlSMZ64XVgQuCNEMFgZypKZNl4TxTB6lI0lTCy
QOcPEDiaEXlrGVewST.PJ9tl7v7+l8yFMpbFLScDRV5FXVXIF9AclWtC9oE8
O4VGiX0XpNdUQfX33WK1eNBqAJ9IFqVjzPmeN4IMRGDCjwZ.0wxznFC51gdb
G7QfGCZA3RAclgM2tWPnCAulUmAUrjOIE3tcY2ZSzGHlhBglIRYYl2Ngf0Y0
NzcbN3VIFl.rl6.rMy4.Kcf8qx8bJijfL30haAdxYfTgIefeYOWUOSTn.ytR
CokkWIHzcN.pv1MxcFFUZpBwrNVxRK5NOY9bqEXZDqGzeorte2CTypG00Z+.
QvGE+FcPDVRQRp98ESFnEjLoSp.9JliRHlrQnFHxpuzQZyN82AvEHLy.MrBg
It9QtxnKnih3wYhqMwVI2Y7rXBjytc6AnxJqOwegrcs.wERA38NY6YKWdfhL
yN4ILSzmKg2UfcNg1JD7gDPr2Vj1nw.sXjmToAGqdph13k8krWZh6aSlZ64K
RDog73RhbGAh2KyRTswMMVFzlaW3tpI0onqWcQTSu8.2VkCyFTW0NPikiYGY
zgdRiDrVnnGA1R5DnS46NXohjBqZ+nEGFAnQ3O561eIUHyfdrIVM7QPG7DrB
pI0BDnWim4PAv71n41DtLWlP5JCXEjb6PuDgR0tdEX9PjctRU5dpb8paKETm
PEPQW4TZeWc0tpsMXw3TIGuN12lSsK9DLFBLCKBZr5TThjylpUiXp+94Gsh0
RBRzVuSMjQSEqwHvHc2PnOECfFvEQ9TkbPzKhMPPGjbGSMUJheWzpZQqBrpT
Sjmoio.AK4BOK6d8FdxdrKXlCLtQ2Uc0A1jcKjOsPRPuhfKK43tI0R5ZmzMF
AMcTHi8giqOVOc.ES+Y7ThpX8.KuLCvXr3OM.aYvNcqT.2hvnSI.BStooU15
EZoJGuMAbNBrNMXofzI+5wpcm2c7DtT5TkdVIBjMkolzawFI7XNvOo8HEJT.
8T6H.WJYX8iCqrvOyqATHvWtKtChgu+J53iwHWy75CjvcKwldnRcqIxo9tcW
xy5pyZBd4puXUhKLov0quvXYYhl0sUIS26x12FM3Vm5VaI3+s714HecM5pfL
6MD.b1HioGLOVMb+A.6SuLaHsCRGKAxcAd0CVWc7LoYnXpjbryDfkELN22Sd
rKlEqEoJeOPNoobYkTu5.d6FtCA6DQKTjADZQKY5cfQTIXlRYbjeVQmDqgud
vtkls8SWA5UTRlvWaPY.W453jkHz4hb.9h9.qcsonugba+3JiN1Z+p3NQH28
0oh3nj.NBYBGYsVqKOKKh2Fqc7FY0SkLF4fiI6zx83rDmPzy4Hcv9EGHEZFz
sUW00qW3ueQctCf+FlK8Y6bfryAb70nXFay5VAnxHu+Q3UiAEl5P2BwgLxPR
o4RvafEwT3HfVq2g3FFJ1smBJtFYARQwRCaBakPMDNldPOqxJgcGiy3cVF4a
pHOAzBrcQOqYb01Pb.yyaxNvmytRAZFtCnI5hhVC8HssMbqywTwKrEBd5Drz
A8P5fmDmLc5z3L+WqJLbvz4.hRYkEt7H+CpebNydcw4hmzEIlKuFQZP.3pgX
gR6bBf6SmkUH+wsNIx17.6z06jabhMncyIchS7vO5MYyNwjd0M8HFf.2sjQS
NELxQmny2HJuK4hhqABypcbcUTRcT5uKcF6NsV6PQLgC7gJ53A91Nwft95s3
GCDDTpRpp42fKoaOdTD5ZfQ2XfeafPMj9z9nXjuP1scRz56JYOWYncBdKqNV
kO342YYOuYXjG5YSRxdbWmIUCQA+.4+diLHL8nOUe55dQX.DiL3LRGmmECrH
xCBKGIvJhL5MJEo2ZCBEtz.hIBSmizZQkTMZanfmCv3LEQhsFx0TyaztYZLw
65LyPx2UPvcdpRY.2diT.Xefr9PaQ.jA4ndUDrT4YWrhyu81SdsiR0iUmDkA
XFrslk4niRSZKGfh8Uq57aZ.NfP.cD0sPCHGz2j0F.14jIILBbhaQrlEBzWO
PnHYxFDp31i6Dj5oisaWV5vhGfsG6zH.n8r4yT1fWNFLhunafYGK8pBNd0Ea
Ht7.avtETZiX2yVcQZn9Bxf8Is8PttW2RdGnnN9DfQ1KVqaSvfXirXlUmpGY
sE6.hvo1Hk.qaFo4gboZNR3.A1veYC5Tj4mcUZ6rYnVDCRkYBZRv.PUEYAl3
RkSjv2.JRjyRliCXAsNR1py10yN.vxIQZ5iGzhic+wcKNbbkfQUbiYB6DAxW
jP8C7GmSLYoLsqNmYp1.PM2h5tsi.Wl.MUxMozKGpsSIypTDKXEHl1X9LytV
clEVKKan6.IhxM5XTaLNpgqR09PiCfATQWdTNSkR1tmea09j6wXz6ifyIt1l
Kd33CzUvcP7OsQwCXNxaeC+Y0kkiDoD6A2zck4JuSTdRjrf3QesURP2xb5I5
djGZeZYyA3c6U6zbmcIdmRGrKAgaaXEy.fYcIH.zNCYwL1wy7Hz6arcvRtxI
nHc2XUWIIIdXVEaAJrwZcvz46AtDuPxRee2P+cAc8S2Elx0DDpCJOCGePbUd
71fb9oFn.QUGEtSiU9yvP.LKiw2V6zplK6ur7RV01QIAm7S7YOk5rP0Zg7N2
05yv71NX3F7LfVSUz4SZL.AVsABdccvTT8JXJhFdJYJdA260Q.gYiDOX0pqQ
qUpXr6k72HUijhTAyWmbPUcV.3KEowLhVZIBYgk.TZfk..MmWFk9tJw.ovAE
.349Vq8QHhbk7bkMLEqp2aYWMMqdqAI84q7LYwX6cZ9N456q6lTO3PuP4I5f
OTYoOtVHqbTaPS3FDv5lMXZlY+dHxaHuDQaYCGN4o6YjnkAwtrnUyynKtGY+
VeEv3zLKpiYgXGepP0vzn0rTpaV1s9zEjZKlxwaKczcvlS9aZGfoIJvMvmfX
mhiy.cwgKftUlFHfuuYl6.HA6trS2yVaP2dSH5LcOmDCZldLJY304QgFrQlF
gtGG0eLJk.5SZrBF8yWw0sd8Exw.6xgTx5VkmsT8PxN9MIASvB..Eo6FxAyL
wYZtQArkcXCV7kHty0g66z5X6wfR5tiyrUhi6AlHkPQsJChZUTzn65GLoSyX
evhqNih.GLTMsElbfT0bok6f4mlCrvJD1hG1CxPf5ns3YwHlEZ11f65SEFSv
TILEg+zE9cWSQR.dbOvB4wJbC6nlBmrRmzYIaQg4UZF6fnj1QcUJC3rzVnbh
U..aihbj1AJ1fgC.++XRq3xFrkU.bTJEfgqA7R939TBgyx7ytbU.D2I.lkmL
GwfSJ0qMRMZ..2QkmGmxYY2MwUC5xEAvQjkpCjj1fuh10pF3vR3cRATAMDLZ
aYNYeeID4qBJ3c3BdyDp.5w5ZPn1YyPLwo0nqK2eAQClFVf.No13oXfo1lfC
Ac4n5oZb.7kdRZbcxg9wRgCSoqSMu9xQDGj22Got.4rRaTpWFxKqSLy.o.ZC
hGEWRZW7RE8sfgC6dRislzKkdmTf.oCY6CTywhRmsaGIIXNRFkWmMnkdfJ6L
xfZx5SDrw1yksrIpiLThR0gaDCkOQrzFB4UKH2opLWdKqjsr.yXLZ.QVcDhn
lQ7GqB7mJMCoMOnc5zBPgNaunVYYwKtp1vtjI8U.JPxFjC4XalYKFuWkDr.J
ljhMIX2HC4IFoda5HvkLJX3AXlVfxDINqbPTJr0HpNGzHTqkEyajr27wSVNN
ySWjWbUiA3Bkq1FOLw.qduQp6NUslXa+Y5.R2McN4gexGu+rvUkQIzBMns.N
1CpdCLDqIOaFfrpaslCwQKck1Heep2mt7flYF5mqKQdPh1gic9hLAltppoMb
VP1XTSqISRA0KCAucwHvX0kFvWEKFYbKRi5zDvOFhN5UM.adzph1QkiDTwHo
oD3DW6fBKdYLxpGmOH.2jepTOEWYhVMO4G2FzLiB5O3jZiTl9TKP1sM5S31O
Y.kQsElrDQtn.sYB1IC1fLon0rVkLijnzaLgSG7+pgq1lEDSqaMcPTZ8S.tB
jdW587SDak6bMxeqUAKGsUxiBqNJjhsBAOZ5lExiifR4gfat0QHApzWHwIPK
ra8gKHGz6vwNntHUjNMfMB8JJlHVH8Fln7HRVSyzrhX8sXMnBW2Ak9q51X76
G.FvqLDER2rn2vLeF3I3hNm5SlpRt7DJibLm.mZskUAaWC6yrcRbDI.qTolz
Z9dsXc.a4HmnAvG8qpbbrREEBOEIjhQPgK8PP+TUTFh6tt7g5tt075ER1XQi
.Wo9nnowaFQ2wznepQENxfpvum12oo2RynEI0fYoJn7CADdjCQs7AGQZ6Cll
WfBoal3Hz7nunEBqEhcFGu1QsdS4b15AdRWIjuMBeSltljZ6oqkPCPNGAbpS
1.P8lKoTacmMQtsZi7AGeldaCTjEnyBMIMx2xJnH+kgSsAxJhCpOowSWF5.M
PAEIK3Kn3TiiB9iCncdeVtmbhDBhfY9F.qnQCkcsJ7h6xSTDqbZjasgSpHxq
LBsN2v2NcT+QaOTor8lu+a8TuZgUJeIkRyR7NptJ8VUEuxqVCej7iGOkV5uS
V5uSU5uS+hk6yWc43JdtVTwj+nPH9y1lV10JugOYuL9KtRnBPJynImqS2juk
TlmrM998h73o9v9d7Wco0Lm+gJe6tluHrOz+rv97rsF5u5hjYNIhLe64pPaK
fWQ6DcA3idwMH5aIkKq29UWMLyoI7LEVg8spPA99qP4wR9EVzydOTm7P0lKx
2G0kt6neuwUyJpufp916npm1abWgrncEp2ztRgqlWz+pdU8f8eecOcGsRdtA
VY86K8DzRd8mT5bXi4ETaQ92Sawfu3n9BnddxHln.iXg7G5SZlWYDS+8bDe2
Cf8CEwf8pgOdeK6IveuZIsgkSLeOp4tZJ+2T4u5hEopqV8Ndbw99smTb0cWU
VRp+BQJXK.y+OsjhWbynM2dx8JBKY4TxMeCbXsqquFxLBnxuv69rrWs7RPSl
u+Ok8WR57PW7st4yd2C1J8sbOo8EoW40cuR1VAg5N59kluX4WvdyK20q7PBY
xam2pFHntIjm2l8l2WyTBOWApCdmqUMhu1NAH867cBvWb6R7doJRzOWbKS75
UyGFxr5wxYdAga9FD2aAJCz9engMNpbF73hJwS7Q95VfYEeLzpLYhqLnEdur
+GddfmU.LLU8zK8m4uD3A.cQeZspsNpRLvdQZRQr+PxjW3SYXt0kkyG87h+6
+v3KHu9FHJEMIN0CTge53LPkWF6R+Ipx2TRKQ0eCE9JZsGXLntDMQrHJRuKz
Zz+zxVDrSGFck9S0i5AfxxyzDxKtOydUPqjzmC5HWtpSdweV1+Te5FGao+Lx
5S4vLPzCc0.DKBhx3oqq8BTFRghPZ3yEb3+VUh7PYf4bME5C+njrVCVx8UK8
m.ipmqFhdgJrR1tt6Pu+0MCSVLVJ5bBm.62OBGR.zv9SnALplU8FRFSb8s0J
YpqpM0Wc8NzV9zel6dBhF94aCTWLiRWi7QymQ8XIu0asuOUIU9t502FcROUS
c8+9hbJWcjxSd2VQGLRYxXSXX+RgqQ7sUWTWEEF9nHZ8YUF0mc9GG+mqBZGk
nzrMqXw6p5WOq1e8kEwquv5Z5WU4LsHEhTcTHBNGkzMaPLNnvX9u98BUyRyo
k+CRgWork95EjzKL0bwBSJ0srrids5j4i2b7d5NZsv04RtuxBxd2VU5S1jrd
wxm6E2brJrmLmCPx2gM58GKPkW2SiszSz8eop0e9YK8mVNVgIVglk9m2uRFx
qWkkHeXOx7oTZwhPoOuQjQS+Ftio+NeaQvw0JP+xpqutk861.1yKLtesdU8i
XCXe+ZbTJ5+2u.dFRlhLryYct8Uy1KrGO7FPBdXyvP2YMpxc9uQBYdQgYNP7
ktuXb8ctgyTLJhLiezT72V8ZeCaWFubY77GszJvhlYUyP0x4e+x3QxN8Kr6C
H7vjBplZdlN74wX8RXw3nyYtyBbxYPKjEfI2W2FP5FqeENeluNPLuvb4iWyJ
HG9dr9VS2jmWjLu0.fP1kPbMY8w+fl3xXeNeUWXb9xPjdBCvilguHFItWovt
yWn55dyAkKED5qqt+ar7ty78.m0CZvVY4nF4qZWvMzmWMSCBWU++YYCtbWwH
4xdgl6uNaxOWwp5K53GWAnnBTYPHX+JARP7cQW6Ei97U0yRxU.Si4X84y3kD
D9ISO6sUk5UzBx+WWsfHhZj0CayEvGeTJUOdJ8hw5koHw+9bZQ3H+FQx9ElX
9uAPsuXNCQQ.9Su312.80CTIEuPVFRxSgLmv6o7E9RS+mozWJc4zEJZ14waf
+G7Tedy9z0G6YByyWSe2Qd97kU3S2aeeo0TnviVIeWblnvMHISQZPZtaWCRU
nVT3YW0y1WT+15COaUG+Rq3X9a1fVjnPiYwaVCd2spXiv6tp8VZdtVNgmYeY
3x0kvSQiKvQQwSyyxh1PgnQakPLYw26Bm61L.XKx.f71wWJTL1R1aWCVnAHE
wMqA4KjtEdlaWCVHR5siomqPCvrfpdqZwBMB4d55VuX6uSEuOPWj9.q3K1G9
LUrDe+5U7EuW8cjVwV7dE0snWQ8cmusPF.otcJ63JjAvmSH9L6Q44ejL6YSj
lm99O8FgSnf8ZxW.pxMQNBt2zu5D04q5F0dTuZ6Qc6XLdxyQyK0dj2z1q.Vc
uYsGaw.hQ7nmRnuwFjuvMH4soAYKbCdaHoLEhjRc67QhoPP0nuc.mXJzb3sS
nfoPvXXeK0yUrtvm473MUcOSwPGb6H6T+3I6TuCH6ECLB8O7t.o3a4LQw5Br
uPW3VfCktP54Xtc5cnKjdNpamhUZ1e3RbEqK71JwQyTDTWL2N+MnKVTFotsM
3qii81EgO5BY6f7F1fERyMyMT1grHLM2PdFhuyJGnD+RbJ9E7QE8vCmkOpLe
TuyiUlLeTuE8whoh91IHQUHUzz2NPQTemCZHUgDb44tY9KQUHAWJtalGgTjE
tAuQivuJKbOSPhhLKsdr4kYf6REQ1GuM4gRrvy62loARguyVHHYK7H7FlKwu
iVHHo+BTU71D78BlMy6SiyaBjRxhqQ4FQ3KlvCII6MrIKj3C2sbPVrnvPdCa
wBIwRcCaPlu+yiEqEucv5HI9JzR7LiQfXNANeVAQjLuZ+bt7HRdAqQmWGHpd
dw59Amal792G1qt00+gmLYncbx+La9m80ist6qb9Pp9qMsB0Wm8z+gVXLG4N
uhn9.5wI12Ix5NsYmKcSeHaI2fVKXAdm2w5yVZN+G+M3B9+yrJ8MK
-----------end_max5_patcher-----------

I must say that I’m a bit surprised that this simple Max + openGL → spat5 conversion is not more straightforward / covered by some spat5 external / documented.

If I remember well, in Spat4 there used to be a tutorial about visualisation in Max jitter openGL.
I don’t remember if it was only about position or if it was also dealing with some orientation conversion…

But IMHO this topic would deserve some doc & tut patches :wink:

Thanks for your thorough investigation.
It seems absolutely clear to me that jit.euler2quat @normalize 1 @rotate_order yzx is incorrect.
It actually returns the same values as : jit.euler2quat @normalize 1 @rotate_order xyz
(in almost all cases)

Must be a bug.

jitter has a different projection format than spat, and then as Thibaut said, headtracking device have their own system convention

in XP we are using exactly jitter object to convert to the right data. We are using jit.euler2quat @normalize 1 @rotate_order zyx then apply axis correction due to the difference between Jitter and Spat, then we use another spat5.abs2rel. So have in mind that XP has its projection system rotated to fit as much as possible to Spat. There’s a bit of gaming here to find your path into this.

If you look for a build in head tracking solution using Spat engine, you can check XP - lately covered by CDM blog - but it runs in Ableton. Still you will probably need to create a bridge patch for your device to adjust to the right OSC data input expected by XP, as in this tutorial

best.