/*2008[ */#ifdef/**/j
#include<GL/glut.h>/*]>++++[>>[*/
#include<sys/time.h>/*]<++++>>++<<[->[>+*/
#include<stdlib.h>/*<<amaneku_sora_no_hate_e>>*/
typedef double A
;typedef void C
;A H
(A W
){return+((rand ()&32767)-16384)*W/16384.0;}struct{A/**/K,_,S,h,I,R,A,H,i,M,E;
}a[512],*b;A D,E,F,i[1024][3], k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,KA,NA,TA,_,g,h[1024][+
3],G,L,M,N,O,P,Q,R,S,MN;typedef int B;C xz(){glutPostRedisplay();}B
c
,d
,e
,f
;C yz
(unsigned char T
,B U
, B V
){glFlush
();exit(0);}A J
(A T
,A U
,A
V,A(W)){x=n*n;y=1.-n;z=y*y; R=2*n*y; return+ 3*(-z*T+(z-R)*U+(R-x)*V+x*W);}
GLfloat K[4][4]={{1,1,1,1},{0 ,1,-1,0 },{0,-1 ,1,0},{.9,.93,1,.8}};C yx(B W,B
V){xz();}A I(A T,A U,A V,A W){x =T+n*(U -T ); y=U+n*(V-U);z=V+n*(W-V);R=x+n*(y-
x);S=y+n*(z-y);return R+n*(S-R); }C xy (A X,A Y,A Z,A U,A V,A W){k=Y*W-V*Z;l=
U*Z-X*W;m=(X*V)-U*Y;}C zx(){struct timeval T;gettimeofday(&T,NULL);g=T.tv_sec+T
.
tv_usec*(10e-7);}C zy
(C
){zx
();if(g
>=D
){_
=D
;D
=g
+0.5+(rand()&32767)/8192.
;E
=s
;F
=t
;G
=u;N =v;O=s+s-o;P=t+t-p;Q=u+u-q;MN=v +v-r;for(e =0;e++<8;){s=H(128);t=H(128);u=H(128);k=s-E;l=t -F;m=u-G;if(k*k+l*l+m*
m>= 1820)break;}for(e=0;e++<8;){o=H( + 128)*0.4+ s;p =t+0.4*H(128);q=u+0.4*H(128);k=o-s;l=p-t;m=q-u;if(k*k+l*l+m*m>1820)break;}v=
H(L );r=v+0.4*H(L);}for(n=(g-_)/(D-_); d-c&&g-a[ (d)]. S>=20;d=(d+1)&511);if(g-a[c].S>=0.05){c=(c+1)&511;a[c].S=g;}b=
&a [c];b->M=I(E,O,o,s);b->E=I(F,P,p, t);b->K=I (G,Q,q ,u);b->h=J(E,O,o,s);b->I=J(F,P,p,t);b->R=J(G,Q,q,u);if(
(w
=b
->h
*b
->h
+b
->I
*( b
->I
)+b
->R
*b
->R
) >M
){;w
= sqrt (w
);b
->h
/=w
;b
->I
/=w
;b
->R
/=w
;}xy
(b
->h
,b
->I
,b
->R
,0,0,1);b
->A
=1;b
-> H
=b
->i
=0.
;if((w
=k
*k
+l
*l
+m
*m
)>M
){w
= sqrt (w
); b
->A
=k
/w
;b
->H
=l
/w
;b
->i
=m
/w
;}k
=b
->h
;l
=b
->I
;m
=b
-> R
;x
=sin(b
->_
=I
(N
, MN
,r
,v
));y
=cos(b
->_
);z
=1-y
;KA
=k
*l
;NA
=k
*m
;TA
=l
*m
;R
=b
->A
;S
=b
->H
;w
=b
->i
;b
->A
=(z
*k
*k
+y
)*R
+( z
*KA
-m
*x
)*S
+(z
*NA
+ l*x)*w;b->H=(z*KA+m *x)*R+(z*l*l+y)*S+ (z*TA-k*x)*w;b->i=(z*NA-l*x)*R+(z*TA+k*x)*S+(z*m*m +y)*w;h[e=c*2][0]=a[
c ].M-16*a[c].A;h[e][1]=a[c].E-16*a[c].H;h [e][2]=a[c].K-16*a[c].i;h[f=e+1][0]=a[c].M+16*a[c].A ;h[f][1]=
a[c].E+16*a[c].H;h[f][02]=a[c].K+16*a[c].i; xy(a[c].h,a[c].I,a[c].R,a[c].A,a[c].H,a[c].i);i[f][0]=
i[e][0]=k;i[f][1]=i[e][1]=l;i[f] [2]=i[e][2]=m ;glDrawBuffer(GL_BACK);glClear(GL_COLOR_BUFFER_BIT);f=j(
gl,ut,Get)(GLUT_WINDOW_WIDTH);k=l=1 ;e=glutGet( GLUT_WINDOW_HEIGHT);w=(f>e)?(k=f/(A)e):(l=e/(A)f);j(glVi,
ew,port)(0,0,f,e);glMatrixMode(j(GL_PR, OJECT, ION ));glLoadIdentity();glFrustum(-k,k,-l ,l,10,12800);gluLookAt
(0,0,1280,0,0,0,0,1,0);glLightfv(GL_LIGHT0, GL_DIFFUSE,*K);glLightfv(GL_LIGHT0,j(GL_ ,SPEC,ULAR),*K);j(gl
,Ligh ,tfv)(GL_LIGHT0,GL_POSITION,K[1]);j( glL ,ight,fv)(GL_LIGHT0,GL_SPOT_DIRECTION,K[ 2]); glLightModeli(j(G,
L_LI ,GHT_MODEL_TWO_SIDE),GL_TRUE);j(glMa, ter ,ialfv)(GL_FRONT_AND_BACK,GL_SPECULAR,K[3]);j(gl, Materia,lf)(j(GL_
,FRO ,NT_AND_BACK),GL_SHININESS,4);j(glCol ,orMa ,terial)(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);j(gl, En,able)(j(GL_CO
,LO, R_MATERIAL));glMatrixMode(GL_MODELVIEW );glLoadIdentity();glEnableClientState(GL_VERTEX_ARRAY); j(glEnableClie,
ntSta ,te)(GL_NORMAL_ARRAY);glVertexPointer( 3,GL_DOUBLE,00,h);glNormalPointer(GL_DOUBLE,00,i);glBegin( GL_QUAD_STRIP)
;j(g ,lColor,4d)(m=0,0,0,0);for(e=d;e!=c;e= (e+1)&511){glArrayElement(e*2);glArrayElement(e*2 +1);if(m <.8)j(glColo,
r
,4d
)(.4,.5,1,m
+=.08);}glEnd
();j
(glutSwap
, Buff
,ers
)();glFlush
();}B main
(B X
,char**Y
){j
(glutI
,ni
,t
)( &X
,Y
);L
=atan2(0,- 1);glutInitDisplayMode(GLUT_RGBA|j(G , LUT_,DOUBLE));glutSetWindow(glutCreateWindow("Kan" "ata") );X=GL_BLEND
;j(g ,lutDispl ,ayFunc)(zy);glEnable(X);M = 1e-7;glShadeModel(GL_SMOOTH);glEnable((GL_NORMALIZE ));;j( glutKeybo,
ard, Func)(yz );glutIdleFunc(xz);j (gl, ut, ReshapeFunc)(yx);X=GL_ONE;glEnable(j(GL,_LIGH, T0)); glEnable
(j
(G
,L_LIGHT
,ING
));j
(gl
,BlendFu
,nc
)(GL_SRC_ALPHA
,X
);srand ((B
)g
);zx
();D
=a
[0].
S =g
-1; o
=H
(128 );p= H(128.) ;q=H(128);r=H(L);s = t=u=N=c=d =0 ;j(gl,u, tMainLoop)();j(ret, ur, n)0;}
#/* ]+++++[ >>+>+>>+> +<<<<< <-]+++ +[ >>>>+< <<<-]<]<-]>>>++>+++ */ else
/*+ +>++*/ #include/* >+++ + +>->- --[> */<math.h>/* < */
# include /*<]< [. <-> +] [*/<stdio.h>
# define j(X, Y,Z)X##Y##Z
# include /* */__FILE__
/*] */ #endif
ICAgICAgICAgICAgICAgICAvKjIwMDhbICAqLyNpZmRlZi8qKi9qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGU8R0wvZ2x1dC5oPi8qXT4rKysrWz4+WyovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZTxzeXMvdGltZS5oPi8qXTwrKysrPj4rKzw8Wy0+Wz4rKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZTxzdGRsaWIuaD4vKjw8YW1hbmVrdV9zb3JhX25vX2hhdGVfZT4+Ki8KICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRlZiBkb3VibGUgQTt0eXBlZGVmIHZvaWQgQztBIEgoQSBXKXtyZXR1cm4rKChyYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAoKSYzMjc2NyktMTYzODQpKlcvMTYzODQuMDt9c3RydWN0e0EvKiovSyxfLFMsaCxJLFIsQSxILGksTSxFOwogICAgICAgICAgICAgICAgICAgICAgICB9YVs1MTJdLCpiO0EgRCxFLEYsaVsxMDI0XVszXSwgIGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcseCx5LHosS0EsTkEsVEEsXyxnLGhbMTAyNF1bKwogICAgICAgICAgICAgICAgICAgICAgIDNdLEcsTCxNLE4sTyxQLFEsUixTLE1OO3R5cGVkZWYgICAgaW50IEI7QyB4eigpe2dsdXRQb3N0UmVkaXNwbGF5KCk7fUIKICAgICAgICAgICAgICAgICAgICAgYyxkLGUsZjtDIHl6KHVuc2lnbmVkIGNoYXIgVCxCIFUsICAgICAgQiBWKXtnbEZsdXNoKCk7ZXhpdCgwKTt9QSBKKEEgVCxBIFUsQQogICAgICAgICAgICAgICAgICAgVixBKFcpKXt4PW4qbjt5PTEuLW47ej15Knk7IFI9MipuKnk7ICAgICAgIHJldHVybisgMyooLXoqVCsoei1SKSpVKyhSLXgpKlYreCpXKTt9CiAgICAgICAgICAgICAgICAgR0xmbG9hdCBLWzRdWzRdPXt7MSwxLDEsMX0sezAgICwxLC0xLDAgICAgICAgIH0sezAsLTEgICwxLDB9LHsuOSwuOTMsMSwuOH19O0MgeXgoQiBXLEIKICAgICAgICAgICAgICAgVil7eHooKTt9QSBJKEEgVCxBIFUsQSBWLEEgVyl7eCAgID1UK24qKFUgICAgICAgICAtVCAgKTsgIHk9VStuKihWLVUpO3o9VituKihXLVYpO1I9eCtuKih5LQogICAgICAgICAgICAgIHgpO1M9eStuKih6LXkpO3JldHVybiBSK24qKFMtUik7ICAgICB9QyB4eSAgICAgICAgICAoQSAgICAgIFgsQSBZLEEgWixBIFUsQSBWLEEgVyl7az1ZKlctVipaO2w9CiAgICAgICAgICAgIFUqWi1YKlc7bT0oWCpWKS1VKlk7fUMgengoKXtzdHJ1Y3QgICAgICB0aW1ldmFsICAgICAgICAgICAgICAgIFQ7Z2V0dGltZW9mZGF5KCZULE5VTEwpO2c9VC50dl9zZWMrVAogICAgICAgICAgIC50dl91c2VjKigxMGUtNyk7fUMgenkoQyl7engoKTtpZihnICAgPj1EKXtfPUQ7RCAgICAgICAgICAgICAgICAgPWcgKzAuNSsocmFuZCgpJjMyNzY3KS84MTkyLjtFPXM7Rj10O0cKICAgICAgICAgID11O04gPXY7Tz1zK3MtbztQPXQrdC1wO1E9dSt1LXE7TU49diAgK3Ytcjtmb3IoZSAgICAgICAgICAgICAgICAgICAgID0wO2UrKzw4Oyl7cz1IKDEyOCk7dD1IKDEyOCk7dT1IKDEyOCk7az1zLUU7bD10ICAgICAgICAgICAtRjttPXUtRztpZihrKmsrbCpsK20qCiAgICAgICAgIG0+PSAgMTgyMClicmVhazt9Zm9yKGU9MDtlKys8ODspe289SCggKyAxMjgpKjAuNCsgICAgICAgICAgICAgICBzO3AgID10KzAuNCpIKDEyOCk7cT11KzAuNCpIKDEyOCk7az1vLXM7bD1wLXQ7bT1xLXU7aWYoayprK2wqbCttKm0+MTgyMClicmVhazt9dj0KICAgICAgICBIKEwgICk7cj12KzAuNCpIKEwpO31mb3Iobj0oZy1fKS8oRC1fKTsgIGQtYyYmZy1hWyAgICAgICAgICAgICAgKGQpXS4gUz49MjA7ZD0oZCsxKSY1MTEpO2lmKGctYVtjXS5TPj0wLjA1KXtjPShjKzEpJjUxMTthW2NdLlM9Zzt9Yj0KICAgICAgICZhICAgIFtjXTtiLT5NPUkoRSxPLG8scyk7Yi0+RT1JKEYsUCxwLCAgIHQpO2ItPks9SSAgICAgICAgICAgICAoRyxRLHEgLHUpO2ItPmg9SihFLE8sbyxzKTtiLT5JPUooRixQLHAsdCk7Yi0+Uj1KKEcsUSxxLHUpO2lmKAogICAgICAodyAgICA9Yi0+aCpiLT5oK2ItPkkqKCBiLT5JKStiLT5SKmItPlIpICAgID5NKXs7dz0gICAgICAgICAgICAgIHNxcnQgKHcpO2ItPmgvPXc7Yi0+SS89dztiLT5SLz13O314eShiLT5oLGItPkksYi0+UiwwLDAsMSk7Yi0+QT0xO2IKICAgICAtPiAgICAgSD1iLT5pPTAuO2lmKCh3PWsgKmsrbCpsK20qbSk+TSl7dz0gICAgIHNxcnQgICAgICAgICAgICAgICAodyk7ICBiLT5BPWsvdztiLT5IPWwvdztiLT5pPW0vdzt9az1iLT5oO2w9Yi0+STttPWItPiAgIFI7eD1zaW4oYi0+Xz1JKE4sCiAgICBNTiAgICAgICxyLHYpKTt5PWNvcyhiLT5fICApO3o9MS15O0tBPWsqbDtOQSAgICAgICAgICAgICAgICAgICAgICAgID1rICAgKm07VEE9bCptO1I9Yi0+QTtTPWItPkg7dz1iLT5pO2ItPkE9KHoqayprK3kpKlIrKCAgICAgIHoqS0EtbSp4KSpTKyh6Kk5BCiAgICsgICAgICAgbCp4KSp3O2ItPkg9KHoqS0ErbSAgKngpKlIrKHoqbCpsK3kpKlMrICAgICAgICAgICAgICAgICAgICAgICAgICAgKHoqVEEtayp4KSp3O2ItPmk9KHoqTkEtbCp4KSpSKyh6KlRBK2sqeCkqUysoeiptKm0gICAgICAgICAgICAreSkqdztoW2U9YyoyXVswXT1hWwogIGMgICAgICAgIF0uTS0xNiphW2NdLkE7aFtlXVsxXT1hW2NdLkUtMTYqYVtjXS5IO2ggICAgICAgICAgICAgICAgICAgICAgICAgIFtlXVsyXT1hW2NdLkstMTYqYVtjXS5pO2hbZj1lKzFdWzBdPWFbY10uTSsxNiphW2NdLkEgICAgICAgICAgICAgICAgICAgICAgO2hbZl1bMV09CiAgICAgICAgICBhW2NdLkUrMTYqYVtjXS5IO2hbZl1bMDJdPWFbY10uSysxNiphW2NdLmk7ICAgICAgICAgICAgICAgICAgICAgICB4eShhW2NdLmgsYVtjXS5JLGFbY10uUixhW2NdLkEsYVtjXS5ILGFbY10uaSk7aVtmXVswXT0KICAgICAgICAgaVtlXVswXT1rO2lbZl1bMV09aVtlXVsxXT1sO2lbZl0gWzJdPWlbZV1bMl09bSAgICAgICAgICAgICAgICAgICAgIDtnbERyYXdCdWZmZXIoR0xfQkFDSyk7Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTtmPWooCiAgICAgICBnbCx1dCxHZXQpKEdMVVRfV0lORE9XX1dJRFRIKTtrPWw9MSAgICA7ZT1nbHV0R2V0KCAgICAgICAgICAgICAgICAgICBHTFVUX1dJTkRPV19IRUlHSFQpO3c9KGY+ZSk/KGs9Zi8oQSllKToobD1lLyhBKWYpO2ooZ2xWaSwKICAgICAgZXcscG9ydCkoMCwwLGYsZSk7Z2xNYXRyaXhNb2RlKGooR0xfUFIsICAgICAgIE9KRUNULCAgICAgIElPTiAgICAgICAgKSk7Z2xMb2FkSWRlbnRpdHkoKTtnbEZydXN0dW0oLWssaywtbCAsbCwxMCwxMjgwMCk7Z2x1TG9va0F0CiAgICAgKDAsMCwxMjgwLDAsMCwwLDAsMSwwKTtnbExpZ2h0ZnYoR0xfTElHSFQwLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9ESUZGVVNFLCpLKTtnbExpZ2h0ZnYoR0xfTElHSFQwLGooR0xfICAgLFNQRUMsVUxBUiksKkspO2ooZ2wKICAgICxMaWdoICx0ZnYpKEdMX0xJR0hUMCxHTF9QT1NJVElPTixLWzFdKTtqKCAgZ2xMICAgICAgICAgICAgICAgICAgICxpZ2h0LGZ2KShHTF9MSUdIVDAsR0xfU1BPVF9ESVJFQ1RJT04sS1sgMl0pOyAgICBnbExpZ2h0TW9kZWxpKGooRywKICAgIExfTEkgICxHSFRfTU9ERUxfVFdPX1NJREUpLEdMX1RSVUUpO2ooZ2xNYSwgICAgIHRlciAgICAgICAgICAgICxpYWxmdikoR0xfRlJPTlRfQU5EX0JBQ0ssR0xfU1BFQ1VMQVIsS1szXSk7aihnbCwgICAgICBNYXRlcmlhLGxmKShqKEdMXwogICAsRlJPICAgLE5UX0FORF9CQUNLKSxHTF9TSElOSU5FU1MsNCk7aihnbENvbCAgICAgICAgICxvck1hICx0ZXJpYWwpKEdMX0ZST05UX0FORF9CQUNLLEdMX0FNQklFTlRfQU5EX0RJRkZVU0UpO2ooZ2wsICAgICAgRW4sYWJsZSkoaihHTF9DTwogICxMTywgICAgUl9NQVRFUklBTCkpO2dsTWF0cml4TW9kZShHTF9NT0RFTFZJRVcgICAgICAgICAgICAgICAgKTtnbExvYWRJZGVudGl0eSgpO2dsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsgICAgICBqKGdsRW5hYmxlQ2xpZSwKIG50U3RhICAgICx0ZSkoR0xfTk9STUFMX0FSUkFZKTtnbFZlcnRleFBvaW50ZXIoICAgICAgICAgICAgICAgIDMsR0xfRE9VQkxFLDAwLGgpO2dsTm9ybWFsUG9pbnRlcihHTF9ET1VCTEUsMDAsaSk7Z2xCZWdpbiggICAgICBHTF9RVUFEX1NUUklQKQogO2ooZyAgICAgLGxDb2xvciw0ZCkobT0wLDAsMCwwKTtmb3IoZT1kO2UhPWM7ZT0gICAgICAgICAgICAgICAgKGUrMSkmNTExKXtnbEFycmF5RWxlbWVudChlKjIpO2dsQXJyYXlFbGVtZW50KGUqMiAgKzEpO2lmKG0gICAgICAgPC44KWooZ2xDb2xvLApyLDRkICAgICAgICkoLjQsLjUsMSxtKz0uMDgpO31nbEVuZCgpO2ooZ2x1dFN3YXAsICAgICAgICAgICAgICAgQnVmZixlcnMpKCk7Z2xGbHVzaCgpO31CIG1haW4oQiBYLGNoYXIqKlkpe2ooZ2x1dEkgICAsbmksdCkoICAgICAgICZYLFkpO0w9YXRhbjIKKDAsLSAgICAgICAxKTtnbHV0SW5pdERpc3BsYXlNb2RlKEdMVVRfUkdCQXxqKEcgLCAgICAgICAgICAgICAgIExVVF8sRE9VQkxFKSk7Z2x1dFNldFdpbmRvdyhnbHV0Q3JlYXRlV2luZG93KCJLYW4iICAgICAiYXRhIikgICAgICAgICk7WD1HTF9CTEVORAo7aihnICAgICAgICxsdXREaXNwbCAsYXlGdW5jKSh6eSk7Z2xFbmFibGUoWCk7TSA9ICAgICAgICAgICAgICAgMWUtNztnbFNoYWRlTW9kZWwoR0xfU01PT1RIKTtnbEVuYWJsZSgoR0xfTk9STUFMSVpFICAgICApKTs7aiggICAgICAgICBnbHV0S2V5Ym8sCiBhcmQsICAgICAgRnVuYykoeXogICk7Z2x1dElkbGVGdW5jKHh6KTtqIChnbCwgICAgICAgICAgICAgICAgICB1dCwgIFJlc2hhcGVGdW5jKSh5eCk7WD1HTF9PTkU7Z2xFbmFibGUoaihHTCxfTElHSCwgICAgICAgVDApKTsgICAgICAgICAgZ2xFbmFibGUKIChqKEcgICAgICAsTF9MSUdIVCAgICxJTkcpKTtqKGdsLEJsZW5kRnUgLG5jICAgICAgICAgICAgICAgICAgICAgICAgICkoR0xfU1JDX0FMUEhBICxYKTtzcmFuZCAoKEIpZyk7engoKTtEPWFbMF0uUyAgICAgICAgPWctMTsgICAgICAgICAgbz1IKDEyOAogICk7cD0gICAgICBIKDEyOC4pICAgIDtxPUgoMTI4KTtyPUgoTCk7cyAgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ9dT1OPWM9ZCA9MCAgO2ooZ2wsdSwgIHRNYWluTG9vcCkoKTtqKHJldCwgICAgICAgICAgIHVyLCAgICAgICAgICAgICBuKTA7fQogICAjLyogICAgICBdKysrKytbICAgICA+Pis+Kz4+Kz4gICArPDw8PDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC1dKysrICtbICAgID4+Pj4rPCAgIDw8PC1dPF08LV0+Pj4rKz4rKysgICAgICAgICAgICAqLyAgICAgICAgICAgICAgIGVsc2UKICAgIC8qKyAgICAgICs+KysqLyAgICAgICNpbmNsdWRlLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+KysrICArICAgICArPi0+LSAgICAtLVs+ICAqLzxtYXRoLmg+LyogICAgICAgICAgICAgIDwgICAgICAgICAgICAgICAgICAqLwogICAgICAjICAgICAgaW5jbHVkZSAgICAgICAvKjxdPCAgIFsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtPiAgICAgICtdICAgWyovPHN0ZGlvLmg+CiAgICAgICAjICAgICAgIGRlZmluZSAgICAgICBqKFgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFksWilYIyNZIyNaCiAgICAgICAgICMgICAgICBpbmNsdWRlICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9fX0ZJTEVfXwogICAgICAgICAgICAgICAgICAgICAvKl0gICAgICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlm