Files
pmomusic/pmoqobuz/test_python_qobuz/__pycache__/raw.cpython-312.pyc

106 lines
16 KiB
Plaintext
Raw Normal View History

2025-12-13 13:57:20 +01:00
<EFBFBD>
C<>>i<>0<00><00><><00>dZddlZddlZddlZddlZddlZddlZddlmZddl Z ddl
Z
de_ da d<06>Z d<07>ZGd<08>d e<0F>Zy)
a=
qobuz.api.raw
~~~~~~~~~~~~~
Our base api, all method are mapped like in <endpoint>_<method>
see Qobuz API on GitHub (https://github.com/Qobuz/api-documentation)
:part_of: xbmc-qobuz
:copyright: (c) 2012 by Joachim Basmaison, Cyril Leclerc
:license: GPLv3, see LICENSE for more details.
<EFBFBD>N)<01>cycle<6C><00>c<00>T<00>tdk\rtd|ztj<00><03>yy)N<><00>%s<><01>file<6C><04> _loglevel<65>print<6E>sys<79>stderr<72><01>ss <20>X/Users/coissac/Sync/maison/Petite_maisons/src/pmomusic/pmoqobuz/test_python_qobuz/raw.py<70>debugr<00> <00><00><10>A<EFBFBD>~<7E> <0A>d<EFBFBD>Q<EFBFBD>h<EFBFBD>S<EFBFBD>Z<EFBFBD>Z<EFBFBD>(<28><16>c<00>T<00>tdk\rtd|ztj<00><03>yy)Nrrr r rs r<00>warnr!rrc<00><><00>eZdZd<01>Zdidfd<03>Zgfd<04>Zd<05>Zd<06>Zd<07>Zd<08>Z d <09>Z
d
<EFBFBD>Z d <0B>Z dd <0C>Z d <0A>Zd<0E>Zd<0F>Zd<10>Zd<11>Zd<12>Zd<13>Zd<14>Zd<15>Zd<16>Zd<17>Zd<18>Zd<19>Zd<1A>Zd<1B>Zy)<1E>RawApic<00><><00>|r!|r||_||_|j<00>n8tj<00>|_|j
j <00>|_d|_d|_d|_ d|_
d|_ d|_ |j|jz|_ tj<00>|_d|_ y)Nz0.2zhttp://localhost:8080/api.json/)<11> configvalue<75>appid<69>_RawApi__set_s4<73>spoofbuz<75>Spoofer<65>spoofer<65>getAppId<49>version<6F>baseUrl<72>user_auth_token<65>user_id<69>error<6F> status_code<64>_baseUrl<72>requests<74>Session<6F>session)<03>selfrrs r<00>__init__zRawApi.__init__(s<><00><00> <10>[<5B>*<2A>D<EFBFBD> <1C><1E>D<EFBFBD>J<EFBFBD> <10>M<EFBFBD>M<EFBFBD>O<EFBFBD>#<23>+<2B>+<2B>-<2D>D<EFBFBD>L<EFBFBD><1D><1C><1C>.<2E>.<2E>0<>D<EFBFBD>J<EFBFBD><1C><04> <0C>8<><04> <0C>#<23><04><1C><1B><04> <0C><19><04>
<EFBFBD><1F><04><18><1C> <0C> <0C>t<EFBFBD>|<7C>|<7C>3<><04> <0A><1F>'<27>'<27>)<29><04> <0C><19><04>
r<00>c<00><><00>dj|j|j|t|j <00>D<00><05>cgc] \}}|<05>d|<06><01><03><02>c}}<05>t|<04><00><03>Scc}}w)NzC{reason} (code={status_code})
url={url}
params={params}
json={json}z: )<05>reasonr'<00>url<72>params<6D>json)<05>formatr0r'<00>str<74>items)r,<00>requestr1r2r3<00>k<>vs r<00>_api_error_stringzRawApi._api_error_string;s]<00><00> <1C>"<22>F<EFBFBD><1E>~<7E>~<7E> <20>,<2C>,<2C><17><1A>&<26>,<2C>,<2C>.<2E>I<>$<24>!<21>Q<EFBFBD><01>1<EFBFBD>-<2D>I<>J<><18><14>Y<EFBFBD> #<23><0E>
<EFBFBD><EFBFBD>Js<00>A#c<00><><00>|D]}||vs<01>td|z<00><00>|D]}||vs<01>||vs<01> td|z<00><00>d}|D] }||s<01> d}n|rd|d<yy)z<>Checking parameters before sending our request
- if mandatory parameter is missing raise error
- if a given parameter is neither in mandatory or allowed
raise error
zQobuz: missing parameter [%s]zQobuz: invalid parameter [%s]TF<54>10000<30>limitN)<01> Exception)r,<00>ka<6B> mandatory<72>allowed<65>label<65>noparamss r<00> _check_kazRawApi._check_kaHs<><00><00> <1F> I<01>E<EFBFBD><18>B<EFBFBD>;<3B><1F> ?<3F>%<25> G<>H<>H<> I<01><18> I<01>E<EFBFBD><14>I<EFBFBD>%<25>%<25>w<EFBFBD>*><3E><1F> ?<3F>%<25> G<>H<>H<> I<01> <18><08><17> <16>E<EFBFBD><11>%<25>y<EFBFBD> <20><08><15> <16> <14>!<21>B<EFBFBD>w<EFBFBD>K<EFBFBD> rc<00><00>|jjd<01>}tj|<01>}|jjd<01>}t |<03>}t ||<04>}djd<03>|D<00><00>|_y)z<>appid and associated secret is for this app usage only
Any use of the API implies your full acceptance of the
General Terms and Conditions
(http://www.qobuz.com/apps/api/QobuzAPI-TermsofUse.pdf)
<20>ASCIIrc3<00>NK<00>|]\}}||z jdd<01><02><00><01><00>y<03>w<01><04><00>big)<01> byteorderN<72><01>to_bytes<65><03>.0<EFBFBD>x<>ys r<00> <genexpr>z"RawApi.__set_s4.<locals>.<genexpr>js(<00><00><><00>P<>F<EFBFBD>Q<EFBFBD><01>A<EFBFBD><01>E<EFBFBD>+<2B>+<2B>A<EFBFBD><15>+<2B>?<3F>P<><50><00>#%N) r<00>encode<64>binascii<69>
a2b_base64rr<00>zip<69>join<69>s4)r,<00>s3b<33>s3s<33>bappid<69>a<>bs r<00>__set_s4zRawApi.__set_s4_sh<00><00> <13><1E><1E>%<25>%<25>g<EFBFBD>.<2E><03><16>!<21>!<21>#<23>&<26><03><15><1A><1A>"<22>"<22>7<EFBFBD>+<2B><06> <11>&<26>M<EFBFBD><01> <0F><03>Q<EFBFBD>K<EFBFBD><01><15>(<28>(<28>P<>a<EFBFBD>P<>P<><04>rc<00><><00>t|<01>}t||<03>}djd<02>|D<00><00>}tj|<05>}|S)Nrc3<00>NK<00>|]\}}||z jdd<01><02><00><01><00>y<03>wrHrLrNs rrRz$RawApi.__unset_s4.<locals>.<genexpr>ps(<00><00><><00>L<><06><11>A<EFBFBD><01>A<EFBFBD><05>'<27>'<27><01>U<EFBFBD>'<27>;<3B>L<>rS)rrWrXrU<00>
b2a_base64)r,<00>id<69>secr]r^<00>bs4<73>values r<00>
__unset_s4zRawApi.__unset_s4ms?<00><00> <11>"<22>I<EFBFBD><01> <0F><03>Q<EFBFBD>K<EFBFBD><01><11>h<EFBFBD>h<EFBFBD>L<>!<21>L<>L<><03><18>#<23>#<23>C<EFBFBD>(<28><05><14> rc <00><><00>d|_d|_|j|z}|rd|vrdnd}|rd|vrdnd}ddi}|r|jr|j|d <|j|d
<d}|rd nd } t | <09>d |<04>d|<01><00><05> |r|j j|||<07><0F>}n|j j|||<07><10>}t d|j<00>d|j<00>d|j<00><00><06>t|j<00>|_|jdk7r.|j|||<01>|_t|j<00>y|jsd|_t|j<00>y |j<00>}
d} |
d} | dk(r/|j||||
<EFBFBD>|_t|j<00>y|
S#d|_t|j<00>YyxYw#t$rX} tdt!| <0B><00> |j<00>}
n'#d|_t|j<00>YYd} ~ yxYwYd} ~ <0B><>d} ~ wwxYw#Y<00><>xYw)a<>Qobuz API HTTP get request
Arguments:
params: parameters dictionary
uri : service/method
opt : Optional named parameters
- noToken=True/False
- useGet=True/False
Return None if something went wrong
Return raw data from qobuz on success as dictionary
* on error you can check error and status_code
Example:
ret = api._api_request({'username':'foo',
'password':'bar'},
'user/login', noToken=True)
print('Error: %s [%s]' % (api.error, api.status_code))
This should produce something like:
Error: [200]
Error: Bad Request [400]
r.N<>noTokenFT<46>useGetz
User-AgentzNMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0zX-User-Auth-TokenzX-App-Id<49>GET<45>POST<53> z params )r2<00>headers)<02>datarnzPost request failz status_code: z
headers: z
content: <20><>zRequest return no contentz)Json loads failed to load... retrying!
{}z%Failed to load json two times...abort<72>statusr&)r&r'r(r$rrr+<00>get<65>postrrn<00>content<6E>intr:r3r><00>repr) r,r2<00>uri<72>optr1<00>useTokenrjrn<00>r<>op<6F> response_json<6F>erqs r<00> _api_requestzRawApi._api_requesttsA<00><00>2<18><04>
<EFBFBD><1F><04><18><12>m<EFBFBD>m<EFBFBD>c<EFBFBD>!<21><03> <20>Y<EFBFBD>#<23>%5<>5<EFBFBD>D<EFBFBD><08><1D>(<28>c<EFBFBD>/<2F><14><05><06> <18>j<>
<EFBFBD><07> <14><04>,<2C>,<2C>+/<2F>+?<3F>+?<3F>G<EFBFBD>'<27> (<28>"<22>j<EFBFBD>j<EFBFBD><07>
<EFBFBD><1B> <10><01><1C>U<EFBFBD>&<26><02> <0A><12><04>A<EFBFBD>c<EFBFBD>U<EFBFBD>(<28>6<EFBFBD>(<28>+<2B>,<2C> <18><15><18>L<EFBFBD>L<EFBFBD>$<24>$<24>S<EFBFBD><16><17>$<24>I<><01><18>L<EFBFBD>L<EFBFBD>%<25>%<25>c<EFBFBD><06><07>%<25>H<><01>
<0E> <0A>a<EFBFBD>m<EFBFBD>m<EFBFBD>_<EFBFBD>K<EFBFBD><01> <09> <09>{<7B>+<2B>a<EFBFBD>i<EFBFBD>i<EFBFBD>[<5B>Y<>Z<><1E>q<EFBFBD>}<7D>}<7D>-<2D><04><18> <0F> <1B> <1B>s<EFBFBD> "<22><1D>/<2F>/<2F><01>3<EFBFBD><06>?<3F>D<EFBFBD>J<EFBFBD> <10><14><1A><1A> <1C><17><10>y<EFBFBD>y<EFBFBD>4<>D<EFBFBD>J<EFBFBD> <10><14><1A><1A> <1C><17>)<29> <1C><1D>F<EFBFBD>F<EFBFBD>H<EFBFBD>M<EFBFBD><16><06> <11>"<22>8<EFBFBD>,<2C>F<EFBFBD> <12>W<EFBFBD> <1C><1D>/<2F>/<2F><01>3<EFBFBD><06> <0A>N<>D<EFBFBD>J<EFBFBD> <10><14><1A><1A> <1C><17><1C><1C><>G <18>,<2C>D<EFBFBD>J<EFBFBD> <10><14><1A><1A> <1C><17><><19> <1C> <10>=<3D>t<EFBFBD>A<EFBFBD>w<EFBFBD> G<> <1C> !<21><06><06><08> <0A><> <1C>D<><04>
<EFBFBD><14>T<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20><1B><> <1E><> <1C><> <11> <10>sN<00>>?F?<00>1G"<00>I<00>?G<03>" I<03>+H><03>H<02>H><03>H6<05>0H><03>6H><03>>I<03>I
c<00>.<00>d|_d|_d|_y)N)r$r%<00> logged_on)r,s r<00>logoutz RawApi.logout<75>s<00><00>#<23><04><1C><1B><04> <0C><1D><04>rc <00><><00>|j|ddgdg<01>|j|dd<05><06>}|rd|vsd|dvsd |dvs
d
|ddvrtd |z<00>|j<00>y|ddd
s td <0C>y|dd |_|d |_|ddd
d|_tdj|j <00><00>d|dd<d|dd<d|dd<|j<00>|S)N<>username<6D>password<72>emailz /user/loginT)ri<00>user<65>
credentialrc<00>
parametersz/user/login returns %sz2Free accounts are not eligible to download tracks.r$<00> short_labelzMembership: {}r.<00> firstname<6D>lastname)
rDr~rr<>r%r$rBrr4<00>setSec)r,r?ros r<00>
user_loginzRawApi.user_login<69>s"<00><00> <0C><0E><0E>r<EFBFBD>J<EFBFBD>
<EFBFBD>3<>g<EFBFBD>Y<EFBFBD>?<3F><13> <20> <20><12>]<5D>D<EFBFBD> <20>A<><04><14><19>T<EFBFBD>><3E><1F>4<EFBFBD><06><<3C>/<2F><17>4<EFBFBD><06><<3C>'<27><1F>4<EFBFBD><06><<3C> <0C>#=<3D>=<3D> <10>)<29>D<EFBFBD>0<> 1<> <10>K<EFBFBD>K<EFBFBD>M<EFBFBD><17><13>F<EFBFBD>|<7C>L<EFBFBD>)<29>,<2C>7<> <10>E<> F<><17><1B>F<EFBFBD>|<7C>D<EFBFBD>)<29><04> <0C>#<23>$5<>6<><04><1C><19>&<26>\<5C>,<2C>/<2F> <0C>=<3D>m<EFBFBD>L<><04>
<EFBFBD> <0A><1E>%<25>%<25>d<EFBFBD>j<EFBFBD>j<EFBFBD>1<>2<> "<22><04>V<EFBFBD> <0C>W<EFBFBD><1D>$&<26><04>V<EFBFBD> <0C>[<5B>!<21>#%<25><04>V<EFBFBD> <0C>Z<EFBFBD> <20> <0C> <0B> <0B> <0A><13> rc<00><><00>t}da|jj<00>j<00>D]8}|j d<02>|_|j |j
<00><03><00><01>6|ay|ay)NrI<00>utf-8)rd)r r <00>
getSecrets<EFBFBD>valuesrTrY<00>userlib_getAlbums)r,<00> savedloglevelrfs rr<>z RawApi.setSec<65>sh<00><00>!<21> <0A><15> <09><19>\<5C>\<5C>,<2C>,<2C>.<2E>5<>5<>7<> <17>E<EFBFBD><1B>l<EFBFBD>l<EFBFBD>7<EFBFBD>+<2B>D<EFBFBD>G<EFBFBD><13>%<25>%<25>$<24>'<27>'<27>%<25>2<>><3E>)<29> <09><16>  <17> "<22> rc <00>L<00>|j|dg<01>|j|d<02>S)N<>track_idz
/track/get<65>rDr~<00>r,r?s r<00> track_getzRawApi.track_get<65>s%<00><00> <0C><0E><0E>r<EFBFBD>J<EFBFBD><<3C>(<28><13> <20> <20><12>\<5C>2<>2rc <00><><00>|j|ddg<02>ttj<00><00>}t|d<00>}t|d<00>}d|zdz|zdz|z|z}|jd<05>}||jz }tt j |<06>j<00><00>}|||||d<06>}|j|d<07>S)N<> format_idr<64><00>trackgetFileUrlformat_id<69>intentrF)r<>r<><00>
request_ts<EFBFBD> request_sigr<67>z/track/getFileUrl) rDr5<00>timerTrY<00>hashlib<69>md5<64> hexdigestr~) r,r<>r?<00>tsr<73><00>fmt_id<69> stringvalue<75>rq_sigr2s r<00>track_getFileUrlzRawApi.track_getFileUrl<72>s<><00><00> <0C><0E><0E>r<EFBFBD>K<EFBFBD><1A>4<>5<> <10><14><19><19><1B> <1D><02><16>r<EFBFBD>*<2A>~<7E>&<26><08><14>R<EFBFBD> <0B>_<EFBFBD>%<25><06> &<26><16> /<2F>(<28> :<3A>V<EFBFBD> C<>j<EFBFBD> P<>S[<5B> [<5B>^`<60> `<60> <14>"<22>(<28>(<28><17>1<> <0B><13>t<EFBFBD>w<EFBFBD>w<EFBFBD><1E> <0B><14>W<EFBFBD>[<5B>[<5B><1B>-<2D>7<>7<>9<>:<3A><06><1F><1C><1C>!<21> <20> 
<EFBFBD><06><14> <20> <20><16>)<<3C>=<3D>=rc <00>4<00>ttj<00><00>}dt|<02>zt|d<00>z}tj|j d<03><00>j <00>}|j |j||d<04>}|j|d<05>S)N<>userLibrarygetAlbumsListrdr<>)<04>app_idr$r<>r<>z/userLibrary/getAlbumsList) r5r<>r<>r<>rTr<>rr$r~)r,r?r<><00>r_sig<69> r_sig_hashedr2s rr<>zRawApi.userlib_getAlbums s<><00><00> <10><14><19><19><1B> <1D><02>*<2A>S<EFBFBD><12>W<EFBFBD>4<>s<EFBFBD>2<EFBFBD>e<EFBFBD>9<EFBFBD>~<7E>E<><05><1E>{<7B>{<7B>5<EFBFBD><<3C><<3C><07>#8<>9<>C<>C<>E<> <0C><1A>j<EFBFBD>j<EFBFBD>#<23>3<>3<><1C>'<27> 
<EFBFBD><06> <14> <20> <20><16>)E<>F<>Frc <00>P<00>|j|dgdg<01>|j|d<03>S)N<>queryr=z /track/searchr<68>r<>s r<00> track_searchzRawApi.track_searchs)<00><00> <0C><0E><0E>r<EFBFBD>G<EFBFBD>9<EFBFBD>w<EFBFBD>i<EFBFBD>0<><13> <20> <20><12>_<EFBFBD>5<>5rc <00>V<00>|j|dggd<02><01>|j|dd<04><05>S)N<>album_id<69><03>extrar=<00>offsetz
/album/getT<74>rjr<>r<>s r<00> album_getzRawApi.album_gets/<00><00> <0C><0E><0E>r<EFBFBD>J<EFBFBD><<3C>)E<>F<><14> <20> <20><12>\<5C>$<24> <20>?<3F>?rc <00>T<00>|j|ggd<01><01>|j|dd<03><04>S)N)<04>type<70> genre_idsr=r<>z/album/getFeaturedTr<54>r<>r<>s r<00>album_getFeaturedzRawApi.album_getFeatured!s,<00><00> <0C><0E><0E>r<EFBFBD>2<EFBFBD>G<>H<><13> <20> <20><12>%9<>$<24> <20>G<>Grc <00>P<00>|j|ggd<01><01>|j|d<02>S)N)r%r<>r=r<>z/favorite/getUserFavoritesr<73>r<>s r<00>favorite_getUserFavoritesz RawApi.favorite_getUserFavorites%s'<00><00> <0C><0E><0E>r<EFBFBD>2<EFBFBD>E<>F<><13> <20> <20><12>%A<>B<>Brc <00>V<00>|j|dggd<02><01>|j|dd<04><05>S)N<> playlist_idr<64>z /playlist/getTr<54>r<>r<>s r<00> playlist_getzRawApi.playlist_get)s-<00><00> <0C><0E><0E>r<EFBFBD>M<EFBFBD>?<3F>,H<>I<><13> <20> <20><12>_<EFBFBD>T<EFBFBD> <20>B<>Brc <00><><00>|j|dggd<02><01>dD]}||vs<01>||dk(s<01>||=<00>|j|dd<06><07>S)Nr<4E>)r<><00>tagsr=r<>)r<>r<><00>Nonez/playlist/getFeaturedTr<54>r<>)r,r?r8s r<00>playlist_getFeaturedzRawApi.playlist_getFeatured-sW<00><00> <0C><0E><0E>r<EFBFBD>F<EFBFBD>8<EFBFBD>%M<>N<>&<26> <1A>A<EFBFBD><10>B<EFBFBD>w<EFBFBD>2<EFBFBD>a<EFBFBD>5<EFBFBD>F<EFBFBD>?<3F><16>q<EFBFBD>E<EFBFBD> <1A><14> <20> <20><12>%<<3C>T<EFBFBD> <20>J<>Jrc <00>~<00>|j|ggd<01><01>d|vrd|vr|j|d<|j|d<04>S)N)r%r<><00>orderr<72>r=r%r<>z/playlist/getUserPlaylists)rDr%r~r<>s r<00>playlist_getUserPlaylistsz RawApi.playlist_getUserPlaylists5sB<00><00> <0C><0E><0E>r<EFBFBD>2<EFBFBD>R<>S<><18>B<EFBFBD><EFBFBD>z<EFBFBD>R<EFBFBD>'7<> <20>L<EFBFBD>L<EFBFBD>B<EFBFBD>y<EFBFBD>M<EFBFBD><13> <20> <20><12>%A<>B<>Brc <00>V<00>|j|dgddg<02>|j|dd<05><06>S)N<> artist_idr=r<>z/artist/getSimilarArtistsTr<54>r<>r<>s r<00>artist_getSimilarArtistszRawApi.artist_getSimilarArtists;s2<00><00> <0C><0E><0E>r<EFBFBD>K<EFBFBD>=<3D>7<EFBFBD>H<EFBFBD>*=<3D>><3E><13> <20> <20><12>%@<40><14> <20>N<>Nrc <00>V<00>|j|dggd<02><01>|j|dd<04><05>S)Nr<4E>r<>z /artist/getTr<54>r<>r<>s r<00>
artist_getzRawApi.artist_get?s-<00><00> <0C><0E><0E>r<EFBFBD>K<EFBFBD>=<3D>*F<>G<><13> <20> <20><12>]<5D>4<EFBFBD> <20>@<40>@rc <00>P<00>|j|ggd<01><01>|j|d<02>S)N)<03> parent_idr=r<>z /genre/listr<74>r<>s r<00>
genre_listzRawApi.genre_listCs&<00><00> <0C><0E><0E>r<EFBFBD>2<EFBFBD>?<3F>@<40><13> <20> <20><12>]<5D>3<>3rc <00>P<00>|j|gddg<02>|j|d<03>S)Nr=r<>z /label/listr<74>r<>s r<00>
label_listzRawApi.label_listGs*<00><00> <0C><0E><0E>r<EFBFBD>2<EFBFBD><07><18>2<>3<><13> <20> <20><12>]<5D>3<>3rc <00>V<00>|j|dggd<02><01>|j|dd<04><05>S)Nr<4E>)r<>r<>r=z/catalog/searchTr<54>r<>r<>s r<00>catalog_searchzRawApi.catalog_searchKs.<00><00> <0C><0E><0E>r<EFBFBD>G<EFBFBD>9<EFBFBD>&A<>B<><13> <20> <20><12>%6<>t<EFBFBD> <20>D<>Drc <00>&<00>|j|d<01>S)Nz/catalog/getFeatured<65>r~r<>s r<00>catalog_getFeaturedzRawApi.catalog_getFeaturedRs<00><00><13> <20> <20><12>%;<3B><<3C><rc <00>&<00>|j|d<01>S)Nz/catalog/getFeaturedTypesr<73>r<>s r<00>catalog_getFeaturedTypeszRawApi.catalog_getFeaturedTypesUs<00><00><13> <20> <20><12>%@<40>A<>ArN)<01>stream)<1D>__name__<5F>
__module__<EFBFBD> __qualname__r-r:rDr<00>_RawApi__unset_s4r~r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<><00>rrrr&s<><00><00><1A>&.0<EFBFBD><02><12> 
<EFBFBD>02<30>"<22>. Q<01><15>P<1D>d<1E>
<14>4
"<22>3<>><3E>(
G<01>6<>@<01>H<01>C<01>C<01>K<01>C<01> O<01>A<01>4<>4<>E<01>=<3D>Brr)<11>__doc__rr<><00>mathr<68><00>socketrU<00> itertoolsrr)r<00>timeoutr rr<00>objectrr<>rr<00><module>r<>sM<00><01>
<04> <0B> <0B> <0B><0E> <0A><0F><1B><0F><0F><12><06><0E> <0A> <09>)<29>
)<29>
pB<01>V<EFBFBD>pBr