From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f41.google.com ([209.85.128.41]) by ewsd; Thu Mar 26 18:10:20 EDT 2020 Received: by mail-wm1-f41.google.com with SMTP id f6so3242674wmj.3 for <9front@9front.org>; Thu, 26 Mar 2020 15:10:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=2CEy7ar7D0Gf26YzCcGu5iMeO9bwBFhOz3PnCvvwGME=; b=gPX7TfuGTHbUbvMQ4klp0kvX+OhoQ8+omJEZWX3Xlabd2s+c/4ZY8cyKDlZw+vjZuK eMSDZx5Lk3HFo+X0g/QsjvF3nRSdc1961ONVTo/K1frEO3/emeRhigwcJ31xAJ4aVQ9m 93iffmZt+wGuHGfhKp6gAaTFC4pmP6QLyCw4Ow/pa4NO0tpjL2dHwZnRHxQF11nRppmp SuEiBeqeBKPMh9VeV8PLEUM6G7OUw6weqsFnJ//lzkFdY4yjax+CiLg7INYSxMz25Uo4 uMLdeS3xRtMPm4+CTh3IrB6J8IZpuCPup2R1+q/HlIYBcKD5uaX+a9BZ+meChR8owUlW q99A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=2CEy7ar7D0Gf26YzCcGu5iMeO9bwBFhOz3PnCvvwGME=; b=NEYQfgWZx7veZDzVcUfkkGDVtul76oDZwgfRg2e7W/xZquUrVkARZYDX1j6cUV6lr5 86EpCA/gS4cnI7JLcpe1HivOSNNHNxApEY9qW1CsMA05BHXGuacwWW4ThaONH4IBwNDV LM4Juim4rcf/N7x57QNL/Xj230v/0jR4/fgE5tnR40/1B4T3HMbi63rSzPooQJ2e/j4t NyeBXPul5o+YkdpIWC4aErll9/9eORYV2y5TGm4GoEVRHU47NGlY8mgt6FmTv/++FC8F yFqHSocFTC7Qr+YjwcSTi5db6kxZdbYDwqJaN/HDrrsJPPAmU+e2pf1k5ERsVla5jgM5 iigw== X-Gm-Message-State: ANhLgQ13yK6R7Jkmu2yah8QEKnc8cHD4VI0Jnrqgv3URfHVT2WqzF9sZ qnG/bplfTReDDYJbdLLZ3lZk/TcNiUzpxV9TXKvZUYty X-Google-Smtp-Source: ADFU+vugJ2xpgDxul8EzYmvvEdE/n4wKUc7X47jF2UuuNPnZ2dwYMDnDER3BBaBzErER9l6MfqobJrz/iIZMWt+dMTw= X-Received: by 2002:a7b:c194:: with SMTP id y20mr2000562wmi.163.1585260614305; Thu, 26 Mar 2020 15:10:14 -0700 (PDT) MIME-Version: 1.0 References: <6C4D5687E7FF32423616B0CFA3CE6379@hera.eonet.ne.jp> In-Reply-To: <6C4D5687E7FF32423616B0CFA3CE6379@hera.eonet.ne.jp> From: Lucas Francesco Date: Thu, 26 Mar 2020 19:10:01 -0300 Message-ID: Subject: Re: [9front] [ports] add libfreetype To: 9front@9front.org Content-Type: multipart/alternative; boundary="000000000000caccf505a1c93f45" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: API markup-aware locator --000000000000caccf505a1c93f45 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable ive been using this exactly same setup as you described for weeks! nice to see we got on the same place from different perspectives! Em qui., 26 de mar. de 2020 =C3=A0s 03:07, escr= eveu: > Thank you very much Lucas! > > Attached is a new netsurf webpage image using dejavu freetpe font. > Most peoples here don't have interest to Japanese font, I show dejavu fon= t > example. > > Main changes are frontends/framebuffer/font_freetype.c and netsurf/mkfile= , > and of course > put dejavu font files under /sys/lib/netsurf/fonts/truetype/dejavu. > > The font defines in mkfile didn't work, so I hard coded each font names i= n > font_freetype.c.=E2=98=BA > > mkfile: > OBJ=3D\ > ... > # frontends/framebuffer/font_internal.$O \ > # frontends/framebuffer/font-ns-sans.$O \ > frontends/framebuffer/font_freetype.$O \ > ... > CFLAGS=3D\ > ... > -DNETSURF_FB_FONTPATH=3D"/sys/lib/netsurf/fonts/truetype/dejavu" = \ > ... > -DFB_USE_FREETYPE \ > # -DNETSURF_FB_FONT_SANS_SERIF =3Dconst char *"DejaVuSans.ttf\" \ > # -DNETSURF_FB_FONT_SANS_SERIF_BOLD =3Dconst char > *"DejaVuSans-Bold.ttf" \ > # -DNETSURF_FB_FONT_SANS_SERIF_ITALIC =3Dconst char > *"DejaVuSans-Oblique.ttf\" \ > # -DNETSURF_FB_FONT_SANS_SERIF_ITALIC_BOLD =3Dconst char > *"DejaVuSans-BoldOblique.ttf" \ > # -DNETSURF_FB_FONT_SERIF =3Dconst char *"DejaVuSerif.ttf" \ > # -DNETSURF_FB_FONT_SERIF_BOLD =3Dconst char *"DejaVuSerif-Bold.ttf= " \ > # -DNETSURF_FB_FONT_MONOSPACE =3Dconst char *"DejaVuSansMono.ttf" \ > # -DNETSURF_FB_FONT_MONOSPACE_BOLD =3Dconst char > *"DejaVuSansMono-Bold.ttf" \ > # -DNETSURF_FB_FONT_CURSIVE =3Dconst char *"Comic_Sans_MS.ttf" \ > # -DNETSURF_FB_FONT_FANTASY =3Dconst char *"Impact.ttf" > > font_freetype.c: > ... > /* exported interface documented in framebuffer/font.h */ > bool fb_font_init(void) > { > ... > /* Start with the sans serif font */ > fb_face =3D fb_new_face(nsoption_charp(fb_face_sans_serif), > "sans_serif.ttf", > // NETSURF_FB_FONT_SANS_SERIF); > "DejaVuSans.ttf"); /* K.Okamoto */ > ... > /* Bold sans serif face */ > fb_face =3D fb_new_face(nsoption_charp(fb_face_sans_serif_bold), > "sans_serif_bold.ttf", > // NETSURF_FB_FONT_SANS_SERIF_BOLD); > "DejaVuSans-Bold.ttf"); /* > K.Okamoto */ > ... > /* Italic sans serif face */ > fb_face =3D fb_new_face(nsoption_charp(fb_face_sans_serif_italic)= , > "sans_serif_italic.ttf", > // NETSURF_FB_FONT_SANS_SERIF_ITALIC); > "DejaVuSans-Oblique.ttf"); /* > K.Okamoto */ > ... > /* Bold italic sans serif face */ > fb_face =3D > fb_new_face(nsoption_charp(fb_face_sans_serif_italic_bold), > "sans_serif_italic_bold.ttf", > // NETSURF_FB_FONT_SANS_SERIF_ITALIC_BOLD); > "DejaVuSans-BoldOblique.ttf"); /= * > K.Okamoto */ > ... > /* serif face */ > fb_face =3D fb_new_face(nsoption_charp(fb_face_serif), > "serif.ttf", > // NETSURF_FB_FONT_SERIF); > "DejaVuSerif.ttf"); /* K.Okamoto */ > ... > /* bold serif face*/ > fb_face =3D fb_new_face(nsoption_charp(fb_face_serif_bold), > "serif_bold.ttf", > // NETSURF_FB_FONT_SERIF_BOLD); > "DejaVuSerif-Bold.ttf"); /* > K.Okamoto */ > ... > /* monospace face */ > fb_face =3D fb_new_face(nsoption_charp(fb_face_monospace), > "monospace.ttf", > // NETSURF_FB_FONT_MONOSPACE); > "DejaVuSansMono.ttf"); /* > K.Okamoto */ > ... > /* bold monospace face*/ > fb_face =3D fb_new_face(nsoption_charp(fb_face_monospace_bold), > "monospace_bold.ttf", > // NETSURF_FB_FONT_MONOSPACE_BOLD); > "DejaVuSansMono-Bold.ttf"); /= * > K.Okamoto */ > ... > /* cursive face */ > fb_face =3D fb_new_face(nsoption_charp(fb_face_cursive), > "cursive.ttf", > // NETSURF_FB_FONT_CURSIVE); > "Comic_Sans_MS.ttf"); /* > K.Okamoto */ > ... > fb_face =3D fb_new_face(nsoption_charp(fb_face_fantasy), > "fantasy.ttf", > // NETSURF_FB_FONT_FANTASY); > "Impact.ttf"); /* K.Okamoto */ > ... > > Kenji > > PS: > please include two lines in ft2build.h like: > #ifndef FT2BUILD_H_ > #define FT2BUILD_H_ > > #pragma src "/sys/ports/ape-libs/libfreetype" > #pragma lib "/$M/lib/ape/libfreetype.a" > > #include > --000000000000caccf505a1c93f45 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+aXZlIGJlZW4gdXNpbmcgdGhpcyBleGFjdGx5IHNhbWUgc2V0dXAgYXMg eW91IGRlc2NyaWJlZCBmb3Igd2Vla3MhPGJyPjxicj5uaWNlIHRvIHNlZSB3ZSBnb3Qgb24gdGhl IHNhbWUgcGxhY2UgZnJvbSBkaWZmZXJlbnQgcGVyc3BlY3RpdmVzITxicj48YnI+PGJyPjwvZGl2 Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWls X2F0dHIiPkVtIHF1aS4sIDI2IGRlIG1hci4gZGUgMjAyMCDDoHMgMDM6MDcsICZsdDs8YSBocmVm PSJtYWlsdG86a29rYW1vdG9AaGVyYS5lb25ldC5uZS5qcCI+a29rYW1vdG9AaGVyYS5lb25ldC5u ZS5qcDwvYT4mZ3Q7IGVzY3JldmV1Ojxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxf cXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNv bGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+VGhhbmsgeW91IHZlcnkgbXVj aCBMdWNhcyE8YnI+DQo8YnI+DQpBdHRhY2hlZCBpcyBhIG5ldyBuZXRzdXJmIHdlYnBhZ2UgaW1h Z2UgdXNpbmcgZGVqYXZ1IGZyZWV0cGUgZm9udC48YnI+DQpNb3N0IHBlb3BsZXMgaGVyZSBkb24m IzM5O3QgaGF2ZSBpbnRlcmVzdCB0byBKYXBhbmVzZSBmb250LCBJIHNob3cgZGVqYXZ1IGZvbnQg ZXhhbXBsZS48YnI+DQo8YnI+DQpNYWluIGNoYW5nZXMgYXJlIGZyb250ZW5kcy9mcmFtZWJ1ZmZl ci9mb250X2ZyZWV0eXBlLmMgYW5kIG5ldHN1cmYvbWtmaWxlLCBhbmQgb2YgY291cnNlPGJyPg0K cHV0IGRlamF2dSBmb250IGZpbGVzIHVuZGVyIC9zeXMvbGliL25ldHN1cmYvZm9udHMvdHJ1ZXR5 cGUvZGVqYXZ1Ljxicj4NCjxicj4NClRoZSBmb250IGRlZmluZXMgaW4gbWtmaWxlIGRpZG4mIzM5 O3Qgd29yaywgc28gSSBoYXJkIGNvZGVkIGVhY2ggZm9udCBuYW1lcyBpbjxicj4NCmZvbnRfZnJl ZXR5cGUuYy7imLo8YnI+DQo8YnI+DQpta2ZpbGU6PGJyPg0KT0JKPVw8YnI+DQouLi48YnI+DQoj wqAgwqAgwqAgwqBmcm9udGVuZHMvZnJhbWVidWZmZXIvZm9udF9pbnRlcm5hbC4kTyBcPGJyPg0K I8KgIMKgIMKgIMKgZnJvbnRlbmRzL2ZyYW1lYnVmZmVyL2ZvbnQtbnMtc2Fucy4kTyBcPGJyPg0K wqAgwqAgwqAgwqAgZnJvbnRlbmRzL2ZyYW1lYnVmZmVyL2ZvbnRfZnJlZXR5cGUuJE8gXDxicj4N Ci4uLjxicj4NCkNGTEFHUz1cPGJyPg0KLi4uPGJyPg0KwqAgwqAgwqAgwqAgLURORVRTVVJGX0ZC X0ZPTlRQQVRIPSZxdW90Oy9zeXMvbGliL25ldHN1cmYvZm9udHMvdHJ1ZXR5cGUvZGVqYXZ1JnF1 b3Q7IFw8YnI+DQouLi48YnI+DQrCoCDCoCDCoCDCoCAtREZCX1VTRV9GUkVFVFlQRSBcPGJyPg0K I8KgIMKgIMKgIMKgLURORVRTVVJGX0ZCX0ZPTlRfU0FOU19TRVJJRiA9Y29uc3QgY2hhciAqJnF1 b3Q7RGVqYVZ1U2Fucy50dGZcJnF1b3Q7IFw8YnI+DQojwqAgwqAgwqAgwqAtRE5FVFNVUkZfRkJf Rk9OVF9TQU5TX1NFUklGX0JPTEQgPWNvbnN0IGNoYXIgKiZxdW90O0RlamFWdVNhbnMtQm9sZC50 dGYmcXVvdDsgXDxicj4NCiPCoCDCoCDCoCDCoC1ETkVUU1VSRl9GQl9GT05UX1NBTlNfU0VSSUZf SVRBTElDID1jb25zdCBjaGFyIComcXVvdDtEZWphVnVTYW5zLU9ibGlxdWUudHRmXCZxdW90OyBc PGJyPg0KI8KgIMKgIMKgIMKgLURORVRTVVJGX0ZCX0ZPTlRfU0FOU19TRVJJRl9JVEFMSUNfQk9M RCA9Y29uc3QgY2hhciAqJnF1b3Q7RGVqYVZ1U2Fucy1Cb2xkT2JsaXF1ZS50dGYmcXVvdDsgXDxi cj4NCiPCoCDCoCDCoCDCoC1ETkVUU1VSRl9GQl9GT05UX1NFUklGID1jb25zdCBjaGFyIComcXVv dDtEZWphVnVTZXJpZi50dGYmcXVvdDsgXDxicj4NCiPCoCDCoCDCoCDCoC1ETkVUU1VSRl9GQl9G T05UX1NFUklGX0JPTEQgPWNvbnN0IGNoYXIgKiZxdW90O0RlamFWdVNlcmlmLUJvbGQudHRmJnF1 b3Q7IFw8YnI+DQojwqAgwqAgwqAgwqAtRE5FVFNVUkZfRkJfRk9OVF9NT05PU1BBQ0UgPWNvbnN0 IGNoYXIgKiZxdW90O0RlamFWdVNhbnNNb25vLnR0ZiZxdW90OyBcPGJyPg0KI8KgIMKgIMKgIMKg LURORVRTVVJGX0ZCX0ZPTlRfTU9OT1NQQUNFX0JPTEQgPWNvbnN0IGNoYXIgKiZxdW90O0RlamFW dVNhbnNNb25vLUJvbGQudHRmJnF1b3Q7IFw8YnI+DQojwqAgwqAgwqAgwqAtRE5FVFNVUkZfRkJf Rk9OVF9DVVJTSVZFID1jb25zdCBjaGFyIComcXVvdDtDb21pY19TYW5zX01TLnR0ZiZxdW90OyBc PGJyPg0KI8KgIMKgIMKgIMKgLURORVRTVVJGX0ZCX0ZPTlRfRkFOVEFTWSA9Y29uc3QgY2hhciAq JnF1b3Q7SW1wYWN0LnR0ZiZxdW90Ozxicj4NCjxicj4NCmZvbnRfZnJlZXR5cGUuYzo8YnI+DQou Li48YnI+DQovKiBleHBvcnRlZCBpbnRlcmZhY2UgZG9jdW1lbnRlZCBpbiBmcmFtZWJ1ZmZlci9m b250LmggKi88YnI+DQpib29sIGZiX2ZvbnRfaW5pdCh2b2lkKTxicj4NCns8YnI+DQouLi48YnI+ DQrCoCDCoCDCoCDCoCAvKiBTdGFydCB3aXRoIHRoZSBzYW5zIHNlcmlmIGZvbnQgKi88YnI+DQrC oCDCoCDCoCDCoCBmYl9mYWNlID0gZmJfbmV3X2ZhY2UobnNvcHRpb25fY2hhcnAoZmJfZmFjZV9z YW5zX3NlcmlmKSw8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAmcXVvdDtzYW5zX3NlcmlmLnR0ZiZxdW90Oyw8YnI+DQovL8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE5FVFNVUkZfRkJfRk9OVF9TQU5TX1NFUklGKTs8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCZxdW90O0RlamFW dVNhbnMudHRmJnF1b3Q7KTvCoCDCoCDCoCDCoCDCoC8qIEsuT2thbW90byAqLzxicj4NCi4uLjxi cj4NCsKgIMKgIMKgIMKgIC8qIEJvbGQgc2FucyBzZXJpZiBmYWNlICovPGJyPg0KwqAgwqAgwqAg wqAgZmJfZmFjZSA9IGZiX25ld19mYWNlKG5zb3B0aW9uX2NoYXJwKGZiX2ZhY2Vfc2Fuc19zZXJp Zl9ib2xkKSw8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAm cXVvdDtzYW5zX3NlcmlmX2JvbGQudHRmJnF1b3Q7LDxicj4NCi8vwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgTkVUU1VSRl9GQl9GT05UX1NBTlNfU0VSSUZfQk9MRCk7 PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgJnF1b3Q7RGVqYVZ1 U2Fucy1Cb2xkLnR0ZiZxdW90Oyk7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAvKiBLLk9rYW1vdG8g Ki88YnI+DQouLi48YnI+DQrCoCDCoCDCoCDCoCAvKiBJdGFsaWMgc2FucyBzZXJpZiBmYWNlICov PGJyPg0KwqAgwqAgwqAgwqAgZmJfZmFjZSA9IGZiX25ld19mYWNlKG5zb3B0aW9uX2NoYXJwKGZi X2ZhY2Vfc2Fuc19zZXJpZl9pdGFsaWMpLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgICZxdW90O3NhbnNfc2VyaWZfaXRhbGljLnR0ZiZxdW90Oyw8YnI+ DQovL8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE5FVFNVUkZfRkJf Rk9OVF9TQU5TX1NFUklGX0lUQUxJQyk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAmcXVvdDtEZWphVnVTYW5zLU9ibGlxdWUudHRmJnF1b3Q7KTvCoCDC oCDCoCDCoCDCoC8qIEsuT2thbW90byAqLzxicj4NCi4uLjxicj4NCsKgIMKgIMKgIMKgIC8qIEJv bGQgaXRhbGljIHNhbnMgc2VyaWYgZmFjZSAqLzxicj4NCsKgIMKgIMKgIMKgIGZiX2ZhY2UgPSBm Yl9uZXdfZmFjZShuc29wdGlvbl9jaGFycChmYl9mYWNlX3NhbnNfc2VyaWZfaXRhbGljX2JvbGQp LCA8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmcXVv dDtzYW5zX3NlcmlmX2l0YWxpY19ib2xkLnR0ZiZxdW90Oyw8YnI+DQovL8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE5FVFNVUkZfRkJfRk9OVF9TQU5TX1NFUklGX0lU QUxJQ19CT0xEKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCZxdW90O0RlamFWdVNhbnMtQm9sZE9ibGlxdWUudHRmJnF1b3Q7KTvCoCDCoCDCoCDCoCDC oCDCoCDCoC8qIEsuT2thbW90byAqLzxicj4NCi4uLjxicj4NCsKgIMKgIMKgIMKgIC8qIHNlcmlm IGZhY2UgKi88YnI+DQrCoCDCoCDCoCDCoCBmYl9mYWNlID0gZmJfbmV3X2ZhY2UobnNvcHRpb25f Y2hhcnAoZmJfZmFjZV9zZXJpZiksPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgJnF1b3Q7c2VyaWYudHRmJnF1b3Q7LDxicj4NCi8vwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgTkVUU1VSRl9GQl9GT05UX1NFUklGKTs8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmcXVvdDtEZWphVnVTZXJpZi50 dGYmcXVvdDspO8KgIMKgIMKgIMKgIMKgIMKgLyogSy5Pa2Ftb3RvICovPGJyPg0KLi4uPGJyPg0K wqAgwqAgwqAgwqAgLyogYm9sZCBzZXJpZiBmYWNlKi88YnI+DQrCoCDCoCDCoCDCoCBmYl9mYWNl ID0gZmJfbmV3X2ZhY2UobnNvcHRpb25fY2hhcnAoZmJfZmFjZV9zZXJpZl9ib2xkKSw8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmcXVvdDtzZXJpZl9i b2xkLnR0ZiZxdW90Oyw8YnI+DQovL8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIE5FVFNVUkZfRkJfRk9OVF9TRVJJRl9CT0xEKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmcXVvdDtEZWphVnVTZXJpZi1Cb2xkLnR0ZiZx dW90Oyk7wqAgwqAgwqAgwqAgwqAgLyogSy5Pa2Ftb3RvICovPGJyPg0KLi4uPGJyPg0KwqAgwqAg wqAgwqAgLyogbW9ub3NwYWNlIGZhY2UgKi88YnI+DQrCoCDCoCDCoCDCoCBmYl9mYWNlID0gZmJf bmV3X2ZhY2UobnNvcHRpb25fY2hhcnAoZmJfZmFjZV9tb25vc3BhY2UpLDxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZxdW90O21vbm9zcGFjZS50dGYm cXVvdDssPGJyPg0KLy/CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBO RVRTVVJGX0ZCX0ZPTlRfTU9OT1NQQUNFKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCAmcXVvdDtEZWphVnVTYW5zTW9uby50dGYmcXVvdDspO8KgIMKg IMKgIMKgIMKgIMKgIC8qIEsuT2thbW90byAqLzxicj4NCi4uLjxicj4NCsKgIMKgIMKgIMKgIC8q IGJvbGQgbW9ub3NwYWNlIGZhY2UqLzxicj4NCsKgIMKgIMKgIMKgIGZiX2ZhY2UgPSBmYl9uZXdf ZmFjZShuc29wdGlvbl9jaGFycChmYl9mYWNlX21vbm9zcGFjZV9ib2xkKSw8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmcXVvdDttb25vc3BhY2VfYm9s ZC50dGYmcXVvdDssPGJyPg0KLy/CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBORVRTVVJGX0ZCX0ZPTlRfTU9OT1NQQUNFX0JPTEQpOzxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZxdW90O0RlamFWdVNhbnNNb25vLUJvbGQu dHRmJnF1b3Q7KTvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qIEsuT2thbW90byAqLzxicj4NCi4u Ljxicj4NCsKgIMKgIMKgIMKgIC8qIGN1cnNpdmUgZmFjZSAqLzxicj4NCsKgIMKgIMKgIMKgIGZi X2ZhY2UgPSBmYl9uZXdfZmFjZShuc29wdGlvbl9jaGFycChmYl9mYWNlX2N1cnNpdmUpLDxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZxdW90O2N1cnNp dmUudHRmJnF1b3Q7LDxicj4NCi8vwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgTkVUU1VSRl9GQl9GT05UX0NVUlNJVkUpOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZxdW90O0NvbWljX1NhbnNfTVMudHRmJnF1b3Q7KTvC oCDCoCDCoCDCoCDCoCDCoCDCoC8qIEsuT2thbW90byAqLzxicj4NCi4uLjxicj4NCsKgIMKgIMKg IMKgIGZiX2ZhY2UgPSBmYl9uZXdfZmFjZShuc29wdGlvbl9jaGFycChmYl9mYWNlX2ZhbnRhc3kp LDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZxdW90 O2ZhbnRhc3kudHRmJnF1b3Q7LDxicj4NCi8vwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgTkVUU1VSRl9GQl9GT05UX0ZBTlRBU1kpOzxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJnF1b3Q7SW1wYWN0LnR0ZiZxdW90Oyk7wqAg wqAgwqAgwqAgwqAgwqAgwqAvKiBLLk9rYW1vdG8gKi88YnI+DQouLi48YnI+DQo8YnI+DQpLZW5q aTxicj4NCjxicj4NClBTOiA8YnI+DQpwbGVhc2UgaW5jbHVkZSB0d28gbGluZXMgaW4gZnQyYnVp bGQuaCBsaWtlOjxicj4NCiNpZm5kZWYgRlQyQlVJTERfSF88YnI+DQojZGVmaW5lIEZUMkJVSUxE X0hfPGJyPg0KPGJyPg0KI3ByYWdtYSBzcmPCoCDCoCDCoCZxdW90Oy9zeXMvcG9ydHMvYXBlLWxp YnMvbGliZnJlZXR5cGUmcXVvdDs8YnI+DQojcHJhZ21hIGxpYsKgIMKgIMKgJnF1b3Q7LyRNL2xp Yi9hcGUvbGliZnJlZXR5cGUuYSZxdW90Ozxicj4NCjxicj4NCiNpbmNsdWRlICZsdDtmcmVldHlw ZS9jb25maWcvZnRoZWFkZXIuaCZndDs8YnI+DQo8L2Jsb2NrcXVvdGU+PC9kaXY+DQo= --000000000000caccf505a1c93f45--