-
Notifications
You must be signed in to change notification settings - Fork 576
add compact vararg impl gv_stashsvpvn_cached_p, add gv_stashhek #23041
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: blead
Are you sure you want to change the base?
Conversation
All the code in gv.c, is very old and has gotten zero optimizing since 5.000 alpha. SV*s are instantly turned into PVNs on the front end instantly loosing and chance of [future] SVPV COW Shared HEK key string optimization. HEK*s are unknown to gv_* API. All inputs are continously parsed for ' and :: without exception, even if they are read only (SEGV) C literals or PP SvREADONLY() SvPROTECT() read only literals or API contract read only HEK* PV buffers. Returned from hv_store*() hv_fetch*(), HE*s, aren't exploited to pass the shared HEK* onto gv_init_*() or gv_name_set(), and gv_name_set() on front end only understands PVNs, but on backend, in the GP struct and GV body struct, ONLY understands HEK*s. Therefore no RC++, and looking up the ShHEK again in PL_strtab. The large amount of tiny extern exported symbols wrapper funs added over the years also causes C dbg call stacks even at -O1/-O2, to be 2-5 call frames deep of 3 line shims/stub functions before reaching the main logic. I can't tell what is a mathom and what isn't. So to lay provisions needed for future commits, that add proper SV*/HEK*/U32 hash precalculation, not to mention the memcmp() in hv_common() is skipped if left and right ptr addr are equal. The front end of gv_* needs cleanup. -move U32 flags to the start of the the func, so flags can encode details what void * Perl#1 means, and if vararg void * Perl#2 exists (PVN with N as size_t is only 2nd arg user right now). Since gv_stashpvs() is very common on core and CPAN, and called over and over in 1 proc, since most interp core and CPAN XS devs don't know GV*s have an RC that can be ++ed and stored in a MY_CXT struct. Also nobody knows "stashes" are HV*s or PP packages/classes are implimented with HV*s. So there is reason to pay extra attention to gv_stashpvs() b/c of its high usage/call sites per library. So if the STRLEN can be CC constant folded, and fits in a U8, store the length in the flags arg. Saves on CPU ops in all the callers to push 2 args, vs 3. Public API gv_stashpvs(str, create)'s create arg [flags in reality] can't be optimized away or removed, so combine the 2 CC time constant args, so they fold/optimize into 1 cpu op. -at some point perl core needs to cache/create/move around C level arrays of RC++ed ShHEKs to pass to the gv_*() APIs. SVPVs aren't exactly the right format for storing sanitized (no */::/'/SUPER/main/UNIVERSAL) and pre-parsed/splitted "package tokens", since SVs easily wind up or escape into PP-state, and SV RO flags/COW flags aren't the most honored and respected parts of the API by CPAN XS/maybe core. ShHEKs escaping into PP-state is rarer than "generic SVs" escaping into PP-state or CPAN XS state. All legacy XS code any quality and entry/beginner XS people, will pick "char *" getter macros vs an unknown opaque "HEK" type (and newSVpvn() to capture/move those char *s). Users who know what a HEK* is and how to RC++ it, know not to write to it. Also a bad write to a ShHEK will cause more PP or SEGV breakage/panics or proc exits, alot faster than a bad write to a SVfRO "SVPV" buffer. Hash doesn't match char string in a ShHEK will term the prc faster. So vararg on gv_*() is a provision for a future prototype, that accepts 1, 2, 3 or more HEK*s passed array style, that already were sanitized to not have ::s. 0xFF length was picked b/c there was bitfield space, shaving to 32/64/128 chars for gv_stashpvs(str, create) is possible if the bits are needed b/c a terminal is 80 chars, would fit almost all absolute ("::") C string package names, and everthing in core and CPAN. -the stubs remain as exported stub funcs, on purpose for now, it makes certain diag tools I use slightly easier to use vs optimized out inlines or macros. In 5.43 or 5.45 the exported stub funcs can be converted to macros no static inline, which is intent of this commit. The vararg is the 1 and only entry point to all of gv_stash* logic. -flipping I32 flags to the front requires "_p" suffixes for private for ABI reasons, public API still thinks I32 flags is always the last arg -since all front end wrappers, are 1-away from instead of multiple frames away, they are more likely to LTO inline away inside of libperl (not XS) on any CC. CCs have cost/benefit/wall time cut offs for scoring potential inlines opportunities. Going 2 layers, or 3+ layers of small inlines, is asking alot from a CC, that has to traverse a tree of nodes to do each inline, and the cut off could be as low as 1 inline fn and no more unrolling or folding.
Adp |HV * |gv_stashpv |NN const char *name \ | ||
|I32 flags | ||
Adp |HV * |gv_stashpvn |NN const char *name \ | ||
|U32 namelen \ | ||
|I32 flags | ||
Xp |HV * |gv_stashpvs_p |I32 flags \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For consistency with the other gv_ functions, could the flags argument always be the final argument?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, it's to support the vararg in Perl_gv_stashsvpvn_cached_p
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, the machine code level C prototype is non-publically/private internals. arg flags goes on the front to communicate the va_arg details of what comes next. The va_arg is never, ever, supposed to be filled out by hand with fingers. The macros are the only way to call it, and they give protect against all the usual pitfalls..
Flags being first prevents 2-5 "push NULL" CPU ops in all callers/all call sites. Remember about my_perl var that always exists in machine code, >4 args on Win64, and the __regcall ABI expires and now you are using real C stack. On Linux its >6, and the __regcall ABI expires, and then your using C stack. C stack ops atleast for Intel CISC always will take more space vs reg to reg moves, b/c they have to write out a 1 byte U8 or 4 byte U32 offset into the C stack. Arg flags is always const folded to 1/2/4 byte CPU integer literal anyway and 1 cpu code. Multiple NULLs will be multiple cpu ops.
There is a very tiny provision I'm making here, which VA, probably helps with. gv_*fetch*()
funcs need/should always return an var length array of HEK *s to the caller, after being given an ascii string. There are many ways to brain storm it; 5 void**
s being pushed on C stack, and used as 2-way transport, turn in a const C str, get back 1 HEK * (end user must RC++ it if they want it or are capable of caching it). 5 const char *s interleved with 5 &c_autos/void **
s. Also perhaps a NULL pointer terminated var len HEK * list gets passed to gv_*fetch*()
. I dont see myself doing anything this fancy any time soon. But the provision is there for futuristic not yet invented string objects/package token objects. RCPV and ref counted HEs are a recent example.
Er, I kinda thought quite a few people knew this? Especially if they are fans of monkeypatching? |
Does this benchmark as actually running any faster? What with CPU pipelines and execution tricks being what they are nowadays. Please could you give us some comparative numbers? |
namelen = hek_len; | ||
flags = (flags & ~SVf_UTF8) | (HEK_UTF8(hek) ? SVf_UTF8 : 0); | ||
/* hv_fetchhek() isn't used here. Its a macro and doesn't currently | ||
do the optimisation you think it is supposed to do. Using macro |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What optimization is that?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Line 849 in 49e1c32
for (; entry; entry = HeNEXT(entry)) { |
do the optimisation you think it is supposed to do. Using macro | ||
hv_fetchhek() in this fn, would add needless indirection through | ||
wrapper hv_common_key_len() instead of centralized single call sites | ||
to hv_common(). */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How's that? It looks like it just calls hv_common
to me.
# define hv_fetchhek(hv, hek, lval) \
((SV **) \
hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \
(lval) \
? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \
: HV_FETCH_JUST_SV, \
NULL, HEK_HASH(hek)))
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See link ^^^ hv_fetchhek() is writing checks that dont cash. Patches welcome.
I'll try to look some more over the weekend, but no promises. Trying to learn enough about how stashes work and what gv.c does to meaningfully provide comments. :/ |
https://www.perlmonks.org/?node_id=331262 PP grammar GVs/stash's behavior is so irratic/braindamaged/bespoke that it couldn't possibly be implemented with HVs. Why can't I tie @isa or a package? Lets write some broken code and see what happens, packages def dont behave like hashes.
|
I can create artificial benchmarks to prove my code strategy or pattern, whatever my strategy is at that moment, is better than whatever blead was doing before, but the benchmarks synthetic and artificial. A benchmark attempt using https://pubs.opengroup.org/onlinepubs/9699919799/functions/times.html or analogs like it on WinOS/AnyOS, on any production perl process, executing any kind of production PP code [p5p/.git C code] or production XSUB C code, just doesn't work from my experience. Intel's x86/x64 PMC hit count registers, which are the backend of https://perfwiki.github.io/main/tutorial/#counting-with-perf-stat are probably (no experience) equally useless as a micro benchmark if it involves
The electronic problem is, after a through reading of https://www.agner.org/optimize/ or skip to the end and just read https://en.wikipedia.org/wiki/Instruction-level_parallelism Modern CPUs have too many cores or hyperthread cores, and the Perl VM can only (sanely) saturate to 100% exactly 1 fake HW CPU or 1 real HW CPU on the box. ALL Intel CPUs have atleast 2 ALUs, Probably 3-4 nowadays. Each ALU does your pointer integer bitwise and HS algebra math, all if/else tests, and conditional jump, There are atleast 2, probably 4 of them randomly biting of incoming machine code. If there is nothing else to do, all 6 ALUs on 1 core, will speculative execute all your if/else branches 2 layers deep, in 1 tick, all permutations, and cold, take EQUAL wall time no mather conditional branch did or didn't execute in C code. This isn't benchmarkable by wall time or system times(). It can only be measure in artificial PMC, and you will prove its faster with one of the PMC report number but RDTSC says they are the same time, or total noise from RDTSC, like every run for loop, at 100,000 or 500000 iteractions, comes out different, My CoreI SandyBrige is too smart and detects my 10K iter for() loop bench marks in my WinPerl, and usually optimizes/const folds away any C function it wants. I've had problems, where this proper/correct code/production code, which is nonsensical code, is calling WinPerl;s pretty heavy Newx. was faster !!!!! than my hooked faked NewX timpl, that just had 4 hard coded fixed length PV bufs to hand out and return. The FULL BLOWN threaded WiPerl+MS CRT+K32+NTDLL MALLOC() code path, was faster or equal than my tiny almost-NOOP vtable func, after 15 minutes of 100% CPU. My 4 core Core i5 Sandy Bridge FOLDED AWAY all of malloc. Basically all the machine code, perl+windows, fit into the CPUs L1 16KB instruction cache, and got recompiled and const folded, to nothing, which was actually true.
Too much branch prediction, too much silicon, throw in a -8 to +8 avg "heat score " branch predictor trace bitfield on every condition jump op, and an instruction stream that was long ago, 100% "recompiled to intel internal "uop" language", and a for() loop that isn't getting external "input" from the outside word (DDR pins/global must cache flush announcements from other CPU cores), it just constant folded away. My WinXP Core 2 Duo Perl XS dev box, didn't do stuff this fancy, but setting to 600 mhz/6x clock multipler was need for me create sane benchmarks with libperl, no matter if it was NYTProf or WinKernel's times() or Intel PMC/RDTSC nanosecond resolution counters. In reality, in my experience ALIGNMENT by GCC/Clang of each branchless machine code chunk, I think its called a basic block, or in C lang its called block/branch/statement/subexpression. Alignment and padding of the interp's x86/x64 machine code, to units of 16/32 bytes, and noop instruction filling until next 16/32 boundary, is the LARGEST reason for ultra narrow and artificial benchmark swings of Light weight Perl_pp_*() funcs, like Perl_pp_null Perl_pp_introcv Perl_pp_once Perl_pp_pushmark Perl_pp_is_weak Perl_pp_gv Perl_pp_padcv Perl_pp_const contribute nothing to wall clock latency even with sky high runtime execution counts IMO. Its the other Perl_pp_*() functions that cause all speed problems. Those which must call into P5's middleware code, that lives in gv.c, sv.c and hv.c. And that middleware in blead has alot, ALOT, of algorithm inefficiency flaws, of the O(n) or O(n^2) style, which drown out C-in-assembly tweaks. For example, this is from a paused miniperl.exe's malloc() pool, OMGWTPerl!!!! click to expand``` 0x0000000003C94048 ................................ 0x0000000003C94068 ................................ 0x0000000003C94088 ................................ 0x0000000003C940A8 ................................ 0x0000000003C940C8 ................................ 0x0000000003C940E8 ................................ 0x0000000003C94108 ................................ 0x0000000003C94128 ....ints are in the range...les. 0x0000000003C94148 /X.@7..€U.\lib\unicore\mktables. 0x0000000003C94168 '.™@7..€6.\lib\unicore\mktables. 0x0000000003C94188 ).™@7..€8.\lib\unicore\mktables. 0x0000000003C941A8 +.™@7..€:.\lib\unicore\mktables. 0x0000000003C941C8 -.™@7..€<.\lib\unicore\mktables. 0x0000000003C941E8 /.™@7..€>.\lib\unicore\mktables. 0x0000000003C94208 ..™@7..€@.\lib\unicore\mktables. 0x0000000003C94228 ..™@7..€B.\lib\unicore\mktables. 0x0000000003C94248 ..™@7..€D.\lib\unicore\mktables. 0x0000000003C94268 ..™@7..€F.\lib\unicore\mktables. 0x0000000003C94288 ..™@7..€H.\lib\unicore\mktables. 0x0000000003C942A8 ..™@7..€J.\lib\unicore\mktables. 0x0000000003C942C8 ..™@7..€L.\lib\unicore\mktables. 0x0000000003C942E8 ..™@7..€N.\lib\unicore\mktables. 0x0000000003C94308 ..™@7..€P.\lib\unicore\mktables. 0x0000000003C94328 ..™@7..€R.\lib\unicore\mktables. 0x0000000003C94348 ..™@7..€T.\lib\unicore\mktables. 0x0000000003C94368 ..™@7..€V.\lib\u.X.@7e.€x.ables. 0x0000000003C94388 ..™@7..€X.\lib\unicore\mktables. 0x0000000003C943A8 ..™@7..€Z.\lib\unicore\mktables. 0x0000000003C943C8 ..™@7..€\.\lib\unicore\mktables. 0x0000000003C943E8 ..™@7..€^.\lib\unicore\mktables. 0x0000000003C94408 q.™@7..€`.\lib\unicore\mktables. 0x0000000003C94428 s.™@7..€b.\lib\unicore\mktables. 0x0000000003C94448 u.™@7..€d.\lib\unicore\mktables. 0x0000000003C94468 w.™@7..€f.\lib\unicore\mktables. 0x0000000003C94488 y.™@7..€h.\lib\unicore\mktables. 0x0000000003C944A8 {.™@7..€j.\lib\unicore\mktables. 0x0000000003C944C8 }.™@7..€l.\lib\unicore\mktables. 0x0000000003C944E8 ..™@7..€n.\lib\unicore\mktables. 0x0000000003C94508 a.™@7..€p.\lib\unicore\mktables. 0x0000000003C94528 c.™@7..€r.\lib\unicore\mktables. 0x0000000003C94548 e.™@7..€t.\lib\unicore\mktables. 0x0000000003C94568 g.™@7..€v.\lib\unicore\mktables. 0x0000000003C94588 i.™@7..€x.\lib\unicore\mktables. 0x0000000003C945A8 aX.@7..€..\lib\unicore\mktables. 0x0000000003C945C8 m.™@7..€|.\lib\unicore\mktables. 0x0000000003C945E8 o.™@7..€~.\lib\unicore\mktables. 0x0000000003C94608 Q.™@7..€€.\lib\unicore\mktables. 0x0000000003C94628 S.™@7..€..\lib\unicore\mktables. 0x0000000003C94648 U.™@7..€..\lib\unicore\mktables. 0x0000000003C94668 W.™@7..€..\lib\unicore\mktables. 0x0000000003C94688 Y.™@7..€ˆ.\lib\unicore\mktables. 0x0000000003C946A8 [.™@7..€Š.\lib\unicore\mktables. 0x0000000003C946C8 ].™@7..€Œ.\lib\unicore\mktables. 0x0000000003C946E8 _.™@7..€Ž.\lib\unicore\mktables. 0x0000000003C94708 A.™@7..€..\lib\unicore\mktables. 0x0000000003C94728 C.™@7..€’.\lib\unicore\mktables. 0x0000000003C94748 E.™@7..€”.\lib\unicore\mktables. 0x0000000003C94768 G.™@7..€–.\lib\unicore\mktables. 0x0000000003C94788 I.™@7..€˜.\lib\unicore\mktables. 0x0000000003C947A8 K.™@7..€š.\lib\unicore\mktables. 0x0000000003C947C8 M.™@7..€œ.\lib\uFX.@7e.€..ables. 0x0000000003C947E8 O.™@7..€ž.\lib\unicore\mktables. 0x0000000003C94808 ±.™@7..€ .\lib\unicore\mktables. 0x0000000003C94828 ..™@7..€¢.\lib\unicore\mktables. 0x0000000003C94848 µ.™@7..€¤.\lib\unicore\mktables. 0x0000000003C94868 ·.™@7..€¦.\lib\unicore\mktables. 0x0000000003C94888 ..™@7..€¨.\lib\unicore\mktables. 0x0000000003C948A8 ».™@7..€ª.\lib\unicore\mktables. 0x0000000003C948C8 ..™@7..€¬.\lib\unicore\mktables. 0x0000000003C948E8 ¿.™@7..€®.\lib\unicore\mktables. 0x0000000003C94908 ¡.™@7..€°.\lib\unicore\mktables. 0x0000000003C94928 £.™@7..€..\lib\unicore\mktables. 0x0000000003C94948 ¥.™@7..€´.\lib\unicore\mktables. 0x0000000003C94968 §.™@7..€¶.\lib\unicore\mktables. 0x0000000003C94988 ©.™@7..€¸.\lib\unicore\mktables. 0x0000000003C949A8 «.™@7..€º.\lib\unicore\mktables. 0x0000000003C949C8 ..™@7..€..\lib\unicore\mktables. 0x0000000003C949E8 ¯.™@7..€..\lib\unicore\mktables. 0x0000000003C94A08 .X.@7..€á.\lib\unicore\mktables. 0x0000000003C94A28 “.™@7..€Â.\lib\unicore\mktables. 0x0000000003C94A48 ..™@7..€Ä.\lib\unicore\mktables. 0x0000000003C94A68 —.™@7..€Æ.\lib\unicore\mktables. 0x0000000003C94A88 ™.™@7..€È.\lib\unicore\mktables. 0x0000000003C94AA8 ..™@7..€Ê.\lib\unicore\mktables. 0x0000000003C94AC8 ..™@7..€Ì.\lib\unicore\mktables. 0x0000000003C94AE8 Ÿ.™@7..€Î.\lib\unicore\mktables. 0x0000000003C94B08 ..™@7..€Ð.\lib\unicore\mktables. 0x0000000003C94B28 ƒ.™@7..€Ò.\lib\unicore\mktables. 0x0000000003C94B48 ..™@7..€Ô.\lib\unicore\mktables. 0x0000000003C94B68 ..™@7..€Ö.\lib\unicore\mktables. 0x0000000003C94B88 ..™@7..€Ø.\lib\unicore\mktables. 0x0000000003C94BA8 ..™@7..€Ú.\lib\unicore\mktables. 0x0000000003C94BC8 ..™@7..€Ü.\lib\unicore\mktables. 0x0000000003C94BE8 ..™@7..€Þ.\lib\unicore\mktables. 0x0000000003C94C08 ñ.™@7..€à.\lib\unicore\mktables. 0x0000000003C94C28 ó.™@7..€â.\lib\uøX.@7e.€..ables. 0x0000000003C94C48 õ.™@7..€ä.\lib\unicore\mktables. 0x0000000003C94C68 ÷.™@7..€æ.\lib\unicore\mktables. 0x0000000003C94C88 ù.™@7..€è.\lib\unicore\mktables. 0x0000000003C94CA8 û.™@7..€ê.\lib\unicore\mktables. 0x0000000003C94CC8 ý.™@7..€ì.\lib\unicore\mktables. 0x0000000003C94CE8 ÿ.™@7..€î.\lib\unicore\mktables. 0x0000000003C94D08 á.™@7..€ð.\lib\unicore\mktables. 0x0000000003C94D28 ã.™@7..€ò.\lib\unicore\mktables. 0x0000000003C94D48 å.™@7..€ô.\lib\unicore\mktables. 0x0000000003C94D68 ç.™@7..€ö.\lib\unicore\mktables. 0x0000000003C94D88 é.™@7..€ø.\lib\unicore\mktables. 0x0000000003C94DA8 ë.™@7..€ú.\lib\unicore\mktables. 0x0000000003C94DC8 í.™@7..€ü.\lib\unicore\mktables. 0x0000000003C94DE8 ï.™@7..€þ.\lib\unicore\mktables. 0x0000000003C94E08 Ñ.™@7..€..\lib\unicore\mktables. 0x0000000003C94E28 Ó.™@7..€..\lib\unicore\mktables. 0x0000000003C94E48 Õ.™@7..€..\lib\unicore\mktables. 0x0000000003C94E68 ÝX.@7..€'.\lib\unicore\mktables. 0x0000000003C94E88 Ù.™@7..€..\lib\unicore\mktables. 0x0000000003C94EA8 Û.™@7..€..\lib\unicore\mktables. 0x0000000003C94EC8 Ý.™@7..€..\lib\unicore\mktables. 0x0000000003C94EE8 ß.™@7..€..\lib\unicore\mktables. 0x0000000003C94F08 Á.™@7..€..\lib\unicore\mktables. 0x0000000003C94F28 Ã.™@7..€..\lib\unicore\mktables. 0x0000000003C94F48 Å.™@7..€..\lib\unicore\mktables. 0x0000000003C94F68 Ç.™@7..€..\lib\unicore\mktables. 0x0000000003C94F88 É.™@7..€..\lib\unicore\mktables. 0x0000000003C94FA8 Ë.™@7..€..\lib\unicore\mktables. 0x0000000003C94FC8 Í.™@7..€..\lib\unicore\mktables. 0x0000000003C94FE8 Ï.™@7..€..\lib\unicore\mktables. 0x0000000003C95008 1Œ™@7..€ .\lib\unicore\mktables. 0x0000000003C95028 3Œ™@7..€".\lib\unicore\mktables. 0x0000000003C95048 5Œ™@7..€$.\lib\unicore\mktables. 0x0000000003C95068 7Œ™@7..€&.\lib\unicore\mktables. 0x0000000003C95088 9Œ™@7..€(.\lib\u2Y.@7e.€J.ables. 0x0000000003C950A8 ;Œ™@7..€*.\lib\unicore\mktables. 0x0000000003C950C8 =Œ™@7..€,.\lib\unicore\mktables. 0x0000000003C950E8 ?Œ™@7..€..\lib\unicore\mktables. 0x0000000003C95108 !Œ™@7..€0.\lib\unicore\mktables. 0x0000000003C95128 #Œ™@7..€2.\lib\unicore\mktables. 0x0000000003C95148 %Œ™@7..€4.\lib\unicore\mktables. 0x0000000003C95168 'Œ™@7..€6.\lib\unicore\mktables. 0x0000000003C95188 )Œ™@7..€8.\lib\unicore\mktables. 0x0000000003C951A8 +Œ™@7..€:.\lib\unicore\mktables. 0x0000000003C951C8 -Œ™@7..€<.\lib\unicore\mktables. 0x0000000003C951E8 /Œ™@7..€>.\lib\unicore\mktables. 0x0000000003C95208 .Œ™@7..€@.\lib\unicore\mktables. 0x0000000003C95228 .Œ™@7..€B.\lib\unicore\mktables. 0x0000000003C95248 .Œ™@7..€D.\lib\unicore\mktables. 0x0000000003C95268 .Œ™@7..€F.\lib\unicore\mktables. 0x0000000003C95288 .Œ™@7..€H.\lib\unicore\mktables. 0x0000000003C952A8 .Œ™@7..€J.\lib\unicore\mktables. 0x0000000003C952C8 .Y.@7..€m.\lib\unicore\mktables. 0x0000000003C952E8 .Œ™@7..€N.\lib\unicore\mktables. 0x0000000003C95308 .Œ™@7..€P.\lib\unicore\mktables. 0x0000000003C95328 .Œ™@7..€R.\lib\unicore\mktables. 0x0000000003C95348 .Œ™@7..€T.\lib\unicore\mktables. 0x0000000003C95368 .Œ™@7..€V.\lib\unicore\mktables. 0x0000000003C95388 .Œ™@7..€X.\lib\unicore\mktables. 0x0000000003C953A8 .Œ™@7..€Z.\lib\unicore\mktables. 0x0000000003C953C8 .Œ™@7..€\.\lib\unicore\mktables. 0x0000000003C953E8 .Œ™@7..€^.\lib\unicore\mktables. 0x0000000003C95408 qŒ™@7..€`.\lib\unicore\mktables. 0x0000000003C95428 sŒ™@7..€b.\lib\unicore\mktables. 0x0000000003C95448 uŒ™@7..€d.\lib\unicore\mktables. 0x0000000003C95468 wŒ™@7..€f.\lib\unicore\mktables. 0x0000000003C95488 yŒ™@7..€h.\lib\unicore\mktables. 0x0000000003C954A8 {Œ™@7..€j.\lib\unicore\mktables. 0x0000000003C954C8 }Œ™@7..€l.\lib\unicore\mktables. 0x0000000003C954E8 .Œ™@7..€n.\lib\utY.@7e.€..ables. 0x0000000003C95508 aŒ™@7..€p.\lib\unicore\mktables. 0x0000000003C95528 cŒ™@7..€r.\lib\unicore\mktables. 0x0000000003C95548 eŒ™@7..€t.\lib\unicore\mktables. 0x0000000003C95568 gŒ™@7..€v.\lib\unicore\mktables. 0x0000000003C95588 iŒ™@7..€x.\lib\unicore\mktables. 0x0000000003C955A8 kŒ™@7..€z.\lib\unicore\mktables. 0x0000000003C955C8 mŒ™@7..€|.\lib\unicore\mktables. 0x0000000003C955E8 oŒ™@7..€~.\lib\unicore\mktables. 0x0000000003C95608 QŒ™@7..€€.\lib\unicore\mktables. 0x0000000003C95628 SŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95648 UŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95668 WŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95688 YŒ™@7..€ˆ.\lib\unicore\mktables. 0x0000000003C956A8 [Œ™@7..€Š.\lib\unicore\mktables. 0x0000000003C956C8 ]Œ™@7..€Œ.\lib\unicore\mktables. 0x0000000003C956E8 _Œ™@7..€Ž.\lib\unicore\mktables. 0x0000000003C95708 AŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95728 IY.@7..€..\lib\unicore\mktables. 0x0000000003C95748 EŒ™@7..€”.\lib\unicore\mktables. 0x0000000003C95768 GŒ™@7..€–.\lib\unicore\mktables. 0x0000000003C95788 IŒ™@7..€˜.\lib\unicore\mktables. 0x0000000003C957A8 KŒ™@7..€š.\lib\unicore\mktables. 0x0000000003C957C8 MŒ™@7..€œ.\lib\unicore\mktables. 0x0000000003C957E8 OŒ™@7..€ž.\lib\unicore\mktables. 0x0000000003C95808 ±Œ™@7..€ .\lib\unicore\mktables. 0x0000000003C95828 .Œ™@7..€¢.\lib\unicore\mktables. 0x0000000003C95848 µŒ™@7..€¤.\lib\unicore\mktables. 0x0000000003C95868 ·Œ™@7..€¦.\lib\unicore\mktables. 0x0000000003C95888 .Œ™@7..€¨.\lib\unicore\mktables. 0x0000000003C958A8 »Œ™@7..€ª.\lib\unicore\mktables. 0x0000000003C958C8 .Œ™@7..€¬.\lib\unicore\mktables. 0x0000000003C958E8 ¿Œ™@7..€®.\lib\unicore\mktables. 0x0000000003C95908 ¡Œ™@7..€°.\lib\unicore\mktables. 0x0000000003C95928 £Œ™@7..€..\lib\unicore\mktables. 0x0000000003C95948 ¥Œ™@7..€´.\lib\u®Y.@7e.€Ö.ables. 0x0000000003C95968 §Œ™@7..€¶.\lib\unicore\mktables. 0x0000000003C95988 ©Œ™@7..€¸.\lib\unicore\mktables. 0x0000000003C959A8 «Œ™@7..€º.\lib\unicore\mktables. 0x0000000003C959C8 .Œ™@7..€..\lib\unicore\mktables. 0x0000000003C959E8 ¯Œ™@7..€..\lib\unicore\mktables. 0x0000000003C95A08 ‘Œ™@7..€À.\lib\unicore\mktables. 0x0000000003C95A28 “Œ™@7..€Â.\lib\unicore\mktables. 0x0000000003C95A48 .Œ™@7..€Ä.\lib\unicore\mktables. 0x0000000003C95A68 —Œ™@7..€Æ.\lib\unicore\mktables. 0x0000000003C95A88 ™Œ™@7..€È.\lib\unicore\mktables. 0x0000000003C95AA8 .Œ™@7..€Ê.\lib\unicore\mktables. 0x0000000003C95AC8 .Œ™@7..€Ì.\lib\unicore\mktables. 0x0000000003C95AE8 ŸŒ™@7..€Î.\lib\unicore\mktables. 0x0000000003C95B08 .Œ™@7..€Ð.\lib\unicore\mktables. 0x0000000003C95B28 ƒŒ™@7..€Ò.\lib\unicore\mktables. 0x0000000003C95B48 .Œ™@7..€Ô.\lib\unicore\mktables. 0x0000000003C95B68 .Œ™@7..€Ö.\lib\unicore\mktables. 0x0000000003C95B88 ƒY.@7..€ù.\lib\unicore\mktables. 0x0000000003C95BA8 .Œ™@7..€Ú.\lib\unicore\mktables. 0x0000000003C95BC8 .Œ™@7..€Ü.\lib\unicore\mktables. 0x0000000003C95BE8 .Œ™@7..€Þ.\lib\unicore\mktables. 0x0000000003C95C08 ñŒ™@7..€à.\lib\unicore\mktables. 0x0000000003C95C28 óŒ™@7..€â.\lib\unicore\mktables. 0x0000000003C95C48 õŒ™@7..€ä.\lib\unicore\mktables. 0x0000000003C95C68 ÷Œ™@7..€æ.\lib\unicore\mktables. 0x0000000003C95C88 ùŒ™@7..€è.\lib\unicore\mktables. 0x0000000003C95CA8 ûŒ™@7..€ê.\lib\unicore\mktables. 0x0000000003C95CC8 ýŒ™@7..€ì.\lib\unicore\mktables. 0x0000000003C95CE8 ÿŒ™@7..€î.\lib\unicore\mktables. 0x0000000003C95D08 ጙ@7..€ð.\lib\unicore\mktables. 0x0000000003C95D28 ㌙@7..€ò.\lib\unicore\mktables. 0x0000000003C95D48 匙@7..€ô.\lib\unicore\mktables. 0x0000000003C95D68 猙@7..€ö.\lib\unicore\mktables. 0x0000000003C95D88 錙@7..€ø.\lib\unicore\mktables. 0x0000000003C95DA8 댙@7..€ú.\lib\uàY.@7e.€..ables. 0x0000000003C95DC8 팙@7..€ü.\lib\unicore\mktables. 0x0000000003C95DE8 @7..€þ.\lib\unicore\mktables. 0x0000000003C95E08 ÑŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95E28 ÓŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95E48 ÕŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95E68 ׌™@7..€..\lib\unicore\mktables. 0x0000000003C95E88 ÙŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95EA8 ÛŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95EC8 ÝŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95EE8 ߌ™@7..€..\lib\unicore\mktables. 0x0000000003C95F08 ÁŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95F28 ÃŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95F48 ÅŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95F68 ÇŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95F88 ÉŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95FA8 ËŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95FC8 ÍŒ™@7..€..\lib\unicore\mktables. 0x0000000003C95FE8 ÅY.@7..€?.\lib\unicore\mktables. 0x0000000003C96008 1.™@7..€ .\lib\unicore\mktables. 0x0000000003C96028 3.™@7..€".\lib\unicore\mktables. 0x0000000003C96048 5.™@7..€$.\lib\unicore\mktables. 0x0000000003C96068 7.™@7..€&.\lib\unicore\mktables. 0x0000000003C96088 9.™@7..€(.\lib\unicore\mktables. 0x0000000003C960A8 ;.™@7..€*.\lib\unicore\mktables. 0x0000000003C960C8 =.™@7..€,.\lib\unicore\mktables. 0x0000000003C960E8 ?.™@7..€..\lib\unicore\mktables. 0x0000000003C96108 !.™@7..€0.\lib\unicore\mktables. 0x0000000003C96128 #.™@7..€2.\lib\unicore\mktables. 0x0000000003C96148 %.™@7..€4.\lib\unicore\mktables. 0x0000000003C96168 '.™@7..€6.\lib\unicore\mktables. 0x0000000003C96188 ).™@7..€8.\lib\unicore\mktables. 0x0000000003C961A8 +.™@7..€:.\lib\unicore\mktables. 0x0000000003C961C8 -.™@7..€<.\lib\unicore\mktables. 0x0000000003C961E8 /.™@7..€>.\lib\unicore\mktables. 0x0000000003C96208 ..™@7..€@.\lib\u.Z.@7e.€b.ables. 0x0000000003C96228 ..™@7..€B.\lib\unicore\mktables. 0x0000000003C96248 ..™@7..€D.\lib\unicore\mktables. 0x0000000003C96268 ..™@7..€F.\lib\unicore\mktables. 0x0000000003C96288 ..™@7..€H.\lib\unicore\mktables. 0x0000000003C962A8 ..™@7..€J.\lib\unicore\mktables. 0x0000000003C962C8 ..™@7..€L.\lib\unicore\mktables. 0x0000000003C962E8 ..™@7..€N.\lib\unicore\mktables. 0x0000000003C96308 ..™@7..€P.\lib\unicore\mktables. 0x0000000003C96328 ..™@7..€R.\lib\unicore\mktables. 0x0000000003C96348 ..™@7..€T.\lib\unicore\mktables. 0x0000000003C96368 ..™@7..€V.\lib\unicore\mktables. 0x0000000003C96388 ..™@7..€X.\lib\unicore\mktables. 0x0000000003C963A8 ..™@7..€Z.\lib\unicore\mktables. 0x0000000003C963C8 ..™@7..€\.\lib\unicore\mktables. 0x0000000003C963E8 ..™@7..€^.\lib\unicore\mktables. 0x0000000003C96408 q.™@7..€`.\lib\unicore\mktables. 0x0000000003C96428 s.™@7..€b.\lib\unicore\mktables. 0x0000000003C96448 .Z.@7..€..\lib\unicore\mktables. 0x0000000003C96468 w.™@7..€f.\lib\unicore\mktables. 0x0000000003C96488 y.™@7..€h.\lib\unicore\mktables. 0x0000000003C964A8 {.™@7..€j.\lib\unicore\mktables. 0x0000000003C964C8 }.™@7..€l.\lib\unicore\mktables. 0x0000000003C964E8 ..™@7..€n.\lib\unicore\mktables. 0x0000000003C96508 a.™@7..€p.\lib\unicore\mktables. 0x0000000003C96528 c.™@7..€r.\lib\unicore\mktables. 0x0000000003C96548 e.™@7..€t.\lib\unicore\mktables. 0x0000000003C96568 g.™@7..€v.\lib\unicore\mktables. 0x0000000003C96588 i.™@7..€x.\lib\unicore\mktables. 0x0000000003C965A8 k.™@7..€z.\lib\unicore\mktables. 0x0000000003C965C8 m.™@7..€|.\lib\unicore\mktables. 0x0000000003C965E8 o.™@7..€~.\lib\unicore\mktables. 0x0000000003C96608 Q.™@7..€€.\lib\unicore\mktables. 0x0000000003C96628 S.™@7..€..\lib\unicore\mktables. 0x0000000003C96648 U.™@7..€..\lib\unicore\mktables. 0x0000000003C96668 W.™@7..€..\lib\u\Z.@7e.€¨.ables. 0x0000000003C96688 Y.™@7..€ˆ.\lib\unicore\mktables. 0x0000000003C966A8 [.™@7..€Š.\lib\unicore\mktables. 0x0000000003C966C8 ].™@7..€Œ.\lib\unicore\mktables. 0x0000000003C966E8 _.™@7..€Ž.\lib\unicore\mktables. 0x0000000003C96708 A.™@7..€..\lib\unicore\mktables. 0x0000000003C96728 C.™@7..€’.\lib\unicore\mktables. 0x0000000003C96748 E.™@7..€”.\lib\unicore\mktables. 0x0000000003C96768 G.™@7..€–.\lib\unicore\mktables. 0x0000000003C96788 I.™@7..€˜.\lib\unicore\mktables. 0x0000000003C967A8 K.™@7..€š.\lib\unicore\mktables. 0x0000000003C967C8 M.™@7..€œ.\lib\unicore\mktables. 0x0000000003C967E8 O.™@7..€ž.\lib\unicore\mktables. 0x0000000003C96808 ±.™@7..€ .\lib\unicore\mktables. 0x0000000003C96828 ..™@7..€¢.\lib\unicore\mktables. 0x0000000003C96848 µ.™@7..€¤.\lib\unicore\mktables. 0x0000000003C96868 ·.™@7..€¦.\lib\unicore\mktables. 0x0000000003C96888 ..™@7..€¨.\lib\unicore\mktables. 0x0000000003C968A8 ±Z.@7..€Ë.\lib\unicore\mktables. 0x0000000003C968C8 ..™@7..€¬.\lib\unicore\mktables. 0x0000000003C968E8 ¿.™@7..€®.\lib\unicore\mktables. 0x0000000003C96908 ¡.™@7..€°.\lib\unicore\mktables. 0x0000000003C96928 £.™@7..€..\lib\unicore\mktables. 0x0000000003C96948 ¥.™@7..€´.\lib\unicore\mktables. 0x0000000003C96968 §.™@7..€¶.\lib\unicore\mktables. 0x0000000003C96988 ©.™@7..€¸.\lib\unicore\mktables. 0x0000000003C969A8 «.™@7..€º.\lib\unicore\mktables. 0x0000000003C969C8 ..™@7..€..\lib\unicore\mktables. 0x0000000003C969E8 ¯.™@7..€..\lib\unicore\mktables. 0x0000000003C96A08 ‘.™@7..€À.\lib\unicore\mktables. 0x0000000003C96828 ..™@7..€¨.\lib\unicore\mktables. 0x0000000003C96848 ±Z.@7..€Ë.\lib\unicore\mktables. 0x0000000003C96868 ..™@7..€¬.\lib\unicore\mktables. 0x0000000003C96A88 ™.™@7..€È.\lib\unicore\mktables. 0x0000000003C96AA8 ..™@7..€Ê.\lib\unicore\mktables. 0x0000000003C96AC8 ..™@7..€Ì.\lib\u–Z.@7e.€î.ables. 0x0000000003C96AE8 Ÿ.™@7..€Î.\lib\unicore\mktables. 0x0000000003C96B08 ..™@7..€Ð.\lib\unicore\mktables. 0x0000000003C96B28 ƒ.™@7..€Ò.\lib\unicore\mktables. 0x0000000003C96B48 ..™@7..€Ô.\lib\unicore\mktables. 0x0000000003C96B68 ..™@7..€Ö.\lib\unicore\mktables. 0x0000000003C96B88 ..™@7..€Ø.\lib\unicore\mktables. 0x0000000003C96BA8 ..™@7..€Ú.\lib\unicore\mktables. 0x0000000003C96BC8 ..™@7..€Ü.\lib\unicore\mktables. 0x0000000003C96BE8 ..™@7..€Þ.\lib\unicore\mktables. 0x0000000003C96C08 ñ.™@7..€à.\lib\unicore\mktables. 0x0000000003C96C28 ó.™@7..€â.\lib\unicore\mktables. 0x0000000003C96C48 õ.™@7..€ä.\lib\unicore\mktables. 0x0000000003C96C68 ÷.™@7..€æ.\lib\unicore\mktables. 0x0000000003C96C88 ù.™@7..€è.\lib\unicore\mktables. 0x0000000003C96CA8 û.™@7..€ê.\lib\unicore\mktables. 0x0000000003C96CC8 ý.™@7..€ì.\lib\unicore\mktables. 0x0000000003C96CE8 ÿ.™@7..€î.\lib\unicore\mktables. 0x0000000003C96D08 ëZ.@7..€..\lib\unicore\mktables. 0x0000000003C96D28 ã.™@7..€ò.\lib\unicore\mktables. 0x0000000003C96D48 å.™@7..€ô.\lib\unicore\mktables. 0x0000000003C96D68 ç.™@7..€ö.\lib\unicore\mktables. 0x0000000003C96D88 é.™@7..€ø.\lib\unicore\mktables. 0x0000000003C96DA8 ë.™@7..€ú.\lib\unicore\mktables. 0x0000000003C96DC8 í.™@7..€ü.\lib\unicore\mktables. 0x0000000003C96DE8 ï.™@7..€þ.\lib\unicore\mktables. 0x0000000003C96E08 Ñ.™@7..€..\lib\unicore\mktables. 0x0000000003C96E28 Ó.™@7..€..\lib\unicore\mktables. 0x0000000003C96E48 Õ.™@7..€..\lib\unicore\mktables. 0x0000000003C96E68 ×.™@7..€..\lib\unicore\mktables. 0x0000000003C96E88 Ù.™@7..€..\lib\unicore\mktables. 0x0000000003C96EA8 Û.™@7..€..\lib\unicore\mktables. 0x0000000003C96EC8 Ý.™@7..€..\lib\unicore\mktables. 0x0000000003C96EE8 ß.™@7..€..\lib\unicore\mktables. 0x0000000003C96F08 Á.™@7..€..\lib\unicore\mktables. 0x0000000003C96F28 Ã.™@7..€..\lib\uÈZ.@7e.€4.ables. 0x0000000003C96F48 Å.™@7..€..\lib\unicore\mktables. 0x0000000003C96F68 Ç.™@7..€..\lib\unicore\mktables. 0x0000000003C96F88 É.™@7..€..\lib\unicore\mktables. 0x0000000003C96FA8 Ë.™@7..€..\lib\unicore\mktables. 0x0000000003C96FC8 Í.™@7..€..\lib\unicore\mktables. 0x0000000003C96FE8 Ï.™@7..€..\lib\unicore\mktables. 0x0000000003C97008 1Ž™@7..€ .\lib\unicore\mktables. 0x0000000003C97028 3Ž™@7..€".\lib\unicore\mktables. 0x0000000003C97048 5Ž™@7..€$.\lib\unicore\mktables. 0x0000000003C97068 7Ž™@7..€&.\lib\unicore\mktables. 0x0000000003C97088 9Ž™@7..€(.\lib\unicore\mktables. 0x0000000003C970A8 ;Ž™@7..€*.\lib\unicore\mktables. 0x0000000003C970C8 =Ž™@7..€,.\lib\unicore\mktables. 0x0000000003C970E8 ?Ž™@7..€..\lib\unicore\mktables. 0x0000000003C97108 !Ž™@7..€0.\lib\unicore\mktables. 0x0000000003C97128 #Ž™@7..€2.\lib\unicore\mktables. 0x0000000003C97148 %Ž™@7..€4.\lib\unicore\mktables. 0x0000000003C97168 -[.@7..€W.\lib\unicore\mktables. 0x0000000003C97188 )Ž™@7..€8.\lib\unicore\mktables. 0x0000000003C971A8 +Ž™@7..€:.\lib\unicore\mktables. 0x0000000003C971C8 -Ž™@7..€<.\lib\unicore\mktables. 0x0000000003C971E8 /Ž™@7..€>.\lib\unicore\mktables. 0x0000000003C97208 .Ž™@7..€@.\lib\unicore\mktables. 0x0000000003C97228 .Ž™@7..€B.\lib\unicore\mktables. 0x0000000003C97248 .Ž™@7..€D.\lib\unicore\mktables. 0x0000000003C97268 .Ž™@7..€F.\lib\unicore\mktables. 0x0000000003C97288 .Ž™@7..€H.\lib\unicore\mktables. 0x0000000003C972A8 .Ž™@7..€J.\lib\unicore\mktables. 0x0000000003C972C8 .Ž™@7..€L.\lib\unicore\mktables. 0x0000000003C972E8 .Ž™@7..€N.\lib\unicore\mktables. 0x0000000003C97308 .Ž™@7..€P.\lib\unicore\mktables. 0x0000000003C97328 .Ž™@7..€R.\lib\unicore\mktables. 0x0000000003C97348 .Ž™@7..€T.\lib\unicore\mktables. 0x0000000003C97368 .Ž™@7..€V.\lib\unicore\mktables. 0x0000000003C97388 .Ž™@7..€X.\lib\u.[.@7e.€z.ables. 0x0000000003C973A8 .Ž™@7..€Z.\lib\unicore\mktables. 0x0000000003C973C8 .Ž™@7..€\.\lib\unicore\mktables. 0x0000000003C973E8 .Ž™@7..€^.\lib\unicore\mktables. 0x0000000003C97408 qŽ™@7..€`.\lib\unicore\mktables. 0x0000000003C97428 sŽ™@7..€b.\lib\unicore\mktables. 0x0000000003C97448 uŽ™@7..€d.\lib\unicore\mktables. 0x0000000003C97468 wŽ™@7..€f.\lib\unicore\mktables. 0x0000000003C97488 yŽ™@7..€h.\lib\unicore\mktables. 0x0000000003C974A8 {Ž™@7..€j.\lib\unicore\mktables. 0x0000000003C974C8 }Ž™@7..€l.\lib\unicore\mktables. 0x0000000003C974E8 .Ž™@7..€n.\lib\unicore\mktables. 0x0000000003C97508 aŽ™@7..€p.\lib\unicore\mktables. 0x0000000003C97528 cŽ™@7..€r.\lib\unicore\mktables. 0x0000000003C97548 eŽ™@7..€t.\lib\unicore\mktables. 0x0000000003C97568 gŽ™@7..€v.\lib\unicore\mktables. 0x0000000003C97588 iŽ™@7..€x.\lib\unicore\mktables. 0x0000000003C975A8 kŽ™@7..€z.\lib\unicore\mktables. 0x0000000003C975C8 g[.@7..€..\lib\unicore\mktables. 0x0000000003C975E8 oŽ™@7..€~.\lib\unicore\mktables. 0x0000000003C97608 QŽ™@7..€€.\lib\unicore\mktables. 0x0000000003C97628 SŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97648 UŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97668 WŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97688 YŽ™@7..€ˆ.\lib\unicore\mktables. 0x0000000003C976A8 [Ž™@7..€Š.\lib\unicore\mktables. 0x0000000003C976C8 ]Ž™@7..€Œ.\lib\unicore\mktables. 0x0000000003C976E8 _Ž™@7..€Ž.\lib\unicore\mktables. 0x0000000003C97708 AŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97728 CŽ™@7..€’.\lib\unicore\mktables. 0x0000000003C97748 EŽ™@7..€”.\lib\unicore\mktables. 0x0000000003C97768 GŽ™@7..€–.\lib\unicore\mktables. 0x0000000003C97788 IŽ™@7..€˜.\lib\unicore\mktables. 0x0000000003C977A8 KŽ™@7..€š.\lib\unicore\mktables. 0x0000000003C977C8 MŽ™@7..€œ.\lib\unicore\mktables. 0x0000000003C977E8 OŽ™@7..€ž.\lib\uD[.@7e.€À.ables. 0x0000000003C97808 ±Ž™@7..€ .\lib\unicore\mktables. 0x0000000003C97828 .Ž™@7..€¢.\lib\unicore\mktables. 0x0000000003C97848 µŽ™@7..€¤.\lib\unicore\mktables. 0x0000000003C97868 ·Ž™@7..€¦.\lib\unicore\mktables. 0x0000000003C97888 .Ž™@7..€¨.\lib\unicore\mktables. 0x0000000003C978A8 »Ž™@7..€ª.\lib\unicore\mktables. 0x0000000003C978C8 .Ž™@7..€¬.\lib\unicore\mktables. 0x0000000003C978E8 ¿Ž™@7..€®.\lib\unicore\mktables. 0x0000000003C97908 ¡Ž™@7..€°.\lib\unicore\mktables. 0x0000000003C97928 £Ž™@7..€..\lib\unicore\mktables. 0x0000000003C97948 ¥Ž™@7..€´.\lib\unicore\mktables. 0x0000000003C97968 §Ž™@7..€¶.\lib\unicore\mktables. 0x0000000003C97988 ©Ž™@7..€¸.\lib\unicore\mktables. 0x0000000003C979A8 «Ž™@7..€º.\lib\unicore\mktables. 0x0000000003C979C8 .Ž™@7..€..\lib\unicore\mktables. 0x0000000003C979E8 ¯Ž™@7..€..\lib\unicore\mktables. 0x0000000003C97A08 ‘Ž™@7..€À.\lib\unicore\mktables. 0x0000000003C97A28 ™[.@7..€ã.\lib\unicore\mktables. 0x0000000003C97A48 .Ž™@7..€Ä.\lib\unicore\mktables. 0x0000000003C97A68 —Ž™@7..€Æ.\lib\unicore\mktables. 0x0000000003C97A88 ™Ž™@7..€È.\lib\unicore\mktables. 0x0000000003C97AA8 .Ž™@7..€Ê.\lib\unicore\mktables. 0x0000000003C97AC8 .Ž™@7..€Ì.\lib\unicore\mktables. 0x0000000003C97AE8 ŸŽ™@7..€Î.\lib\unicore\mktables. 0x0000000003C97B08 .Ž™@7..€Ð.\lib\unicore\mktables. 0x0000000003C97B28 ƒŽ™@7..€Ò.\lib\unicore\mktables. 0x0000000003C97B48 .Ž™@7..€Ô.\lib\unicore\mktables. 0x0000000003C97B68 .Ž™@7..€Ö.\lib\unicore\mktables. 0x0000000003C97B88 .Ž™@7..€Ø.\lib\unicore\mktables. 0x0000000003C97BA8 .Ž™@7..€Ú.\lib\unicore\mktables. 0x0000000003C97BC8 .Ž™@7..€Ü.\lib\unicore\mktables. 0x0000000003C97BE8 .Ž™@7..€Þ.\lib\unicore\mktables. 0x0000000003C97C08 ñŽ™@7..€à.\lib\unicore\mktables. 0x0000000003C97C28 óŽ™@7..€â.\lib\unicore\mktables. 0x0000000003C97C48 õŽ™@7..€ä.\lib\uþ[.@7e.€..ables. 0x0000000003C97C68 ÷Ž™@7..€æ.\lib\unicore\mktables. 0x0000000003C97C88 ùŽ™@7..€è.\lib\unicore\mktables. 0x0000000003C97CA8 ûŽ™@7..€ê.\lib\unicore\mktables. 0x0000000003C97CC8 ýŽ™@7..€ì.\lib\unicore\mktables. 0x0000000003C97CE8 ÿŽ™@7..€î.\lib\unicore\mktables. 0x0000000003C97D08 ᎙@7..€ð.\lib\unicore\mktables. 0x0000000003C97D28 ㎙@7..€ò.\lib\unicore\mktables. 0x0000000003C97D48 厙@7..€ô.\lib\unicore\mktables. 0x0000000003C97D68 玙@7..€ö.\lib\unicore\mktables. 0x0000000003C97D88 鎙@7..€ø.\lib\unicore\mktables. 0x0000000003C97DA8 뎙@7..€ú.\lib\unicore\mktables. 0x0000000003C97DC8 펙@7..€ü.\lib\unicore\mktables. 0x0000000003C97DE8 @7..€þ.\lib\unicore\mktables. 0x0000000003C97E08 ÑŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97E28 ÓŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97E48 ÕŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97E68 ׎™@7..€..\lib\unicore\mktables. 0x0000000003C97E88 Ó[.@7..€).\lib\unicore\mktables. 0x0000000003C97EA8 ÛŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97EC8 ÝŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97EE8 ߎ™@7..€..\lib\unicore\mktables. 0x0000000003C97F08 ÁŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97F28 ÃŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97F48 ÅŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97F68 ÇŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97F88 ÉŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97FA8 ËŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97FC8 ÍŽ™@7..€..\lib\unicore\mktables. 0x0000000003C97FE8 ÏŽ™@7..€..\lib\unicore\mktables. 0x0000000003C98008 1.™@7..€ .\lib\unicore\mktables. 0x0000000003C98028 3.™@7..€".\lib\unicore\mktables. 0x0000000003C98048 5.™@7..€$.\lib\unicore\mktables. 0x0000000003C98068 7.™@7..€&.\lib\unicore\mktables. 0x0000000003C98088 9.™@7..€(.\lib\unicore\mktables. 0x0000000003C980A8 ;.™@7..€*.\lib\u0T.@7e.€L.ables. 0x0000000003C980C8 =.™@7..€,.\lib\unicore\mktables. 0x0000000003C980E8 ?.™@7..€..\lib\unicore\mktables. 0x0000000003C98108 !.™@7..€0.\lib\unicore\mktables. 0x0000000003C98128 #.™@7..€2.\lib\unicore\mktables. 0x0000000003C98148 %.™@7..€4.\lib\unicore\mktables. 0x0000000003C98168 '.™@7..€6.\lib\unicore\mktables. 0x0000000003C98188 ).™@7..€8.\lib\unicore\mktables. 0x0000000003C981A8 +.™@7..€:.\lib\unicore\mktables. 0x0000000003C981C8 -.™@7..€<.\lib\unicore\mktables. 0x0000000003C981E8 /.™@7..€>.\lib\unicore\mktables. 0x0000000003C98208 ..™@7..€@.\lib\unicore\mktables. 0x0000000003C98228 ..™@7..€B.\lib\unicore\mktables. 0x0000000003C98248 ..™@7..€D.\lib\unicore\mktables. 0x0000000003C98268 ..™@7..€F.\lib\unicore\mktables. 0x0000000003C98288 ..™@7..€H.\lib\unicore\mktables. 0x0000000003C982A8 ..™@7..€J.\lib\unicore\mktables. 0x0000000003C982C8 ..™@7..€L.\lib\unicore\mktables. 0x0000000003C982E8 .T.@7..€o.\lib\unicore\mktables. 0x0000000003C98308 ..™@7..€P.\lib\unicore\mktables. 0x0000000003C98328 ..™@7..€R.\lib\unicore\mktables. 0x0000000003C98348 ..™@7..€T.\lib\unicore\mktables. 0x0000000003C98368 ..™@7..€V.\lib\unicore\mktables. 0x0000000003C98388 ..™@7..€X.\lib\unicore\mktables. 0x0000000003C983A8 ..™@7..€Z.\lib\unicore\mktables. 0x0000000003C983C8 ..™@7..€\.\lib\unicore\mktables. 0x0000000003C983E8 ..™@7..€^.\lib\unicore\mktables. 0x0000000003C98408 q.™@7..€`.\lib\unicore\mktables. 0x0000000003C98428 s.™@7..€b.\lib\unicore\mktables. 0x0000000003C98448 u.™@7..€d.\lib\unicore\mktables. 0x0000000003C98468 w.™@7..€f.\lib\unicore\mktables. 0x0000000003C98488 y.™@7..€h.\lib\unicore\mktables. 0x0000000003C984A8 {.™@7..€j.\lib\unicore\mktables. 0x0000000003C984C8 }.™@7..€l.\lib\unicore\mktables. 0x0000000003C984E8 ..™@7..€n.\lib\unicore\mktables. 0x0000000003C98508 a.™@7..€p.\lib\ujT.@7e.€’.ables. 0x0000000003C98528 c.™@7..€r.\lib\unicore\mktables. 0x0000000003C98548 e.™@7..€t.\lib\unicore\mktables. 0x0000000003C98568 g.™@7..€v.\lib\unicore\mktables. 0x0000000003C98588 i.™@7..€x.\lib\unicore\mktables. 0x0000000003C985A8 k.™@7..€z.\lib\unicore\mktables. 0x0000000003C985C8 m.™@7..€|.\lib\unicore\mktables. 0x0000000003C985E8 o.™@7..€~.\lib\unicore\mktables. 0x0000000003C98608 Q.™@7..€€.\lib\unicore\mktables. 0x0000000003C98628 S.™@7..€..\lib\unicore\mktables. 0x0000000003C98648 U.™@7..€..\lib\unicore\mktables. 0x0000000003C98668 W.™@7..€..\lib\unicore\mktables. 0x0000000003C98688 Y.™@7..€ˆ.\lib\unicore\mktables. 0x0000000003C986A8 [.™@7..€Š.\lib\unicore\mktables. 0x0000000003C986C8 ].™@7..€Œ.\lib\unicore\mktables. 0x0000000003C986E8 _.™@7..€Ž.\lib\unicore\mktables. 0x0000000003C98708 A.™@7..€..\lib\unicore\mktables. 0x0000000003C98728 C.™@7..€’.\lib\unicore\mktables. 0x0000000003C98748 OT.@7..€µ.\lib\unicore\mktables. 0x0000000003C98768 G.™@7..€–.\lib\unicore\mktables. 0x0000000003C98788 I.™@7..€˜.\lib\unicore\mktables. 0x0000000003C987A8 K.™@7..€š.\lib\unicore\mktables. 0x0000000003C987C8 M.™@7..€œ.\lib\unicore\mktables. 0x0000000003C987E8 O.™@7..€ž.\lib\unicore\mktables. 0x0000000003C98808 ±.™@7..€ .\lib\unicore\mktables. 0x0000000003C98828 ..™@7..€¢.\lib\unicore\mktables. 0x0000000003C98848 µ.™@7..€¤.\lib\unicore\mktables. 0x0000000003C98868 ·.™@7..€¦.\lib\unicore\mktables. 0x0000000003C98888 ..™@7..€¨.\lib\unicore\mktables. 0x0000000003C988A8 ».™@7..€ª.\lib\unicore\mktables. 0x0000000003C988C8 ..™@7..€¬.\lib\unicore\mktables. 0x0000000003C988E8 ¿.™@7..€®.\lib\unicore\mktables. 0x0000000003C98908 ¡.™@7..€°.\lib\unicore\mktables. 0x0000000003C98928 £.™@7..€..\lib\unicore\mktables. 0x0000000003C98948 ¥.™@7..€´.\lib\unicore\mktables. 0x0000000003C98968 §.™@7..€¶.\lib\u¬T.@7e.€Ø.ables. 0x0000000003C98988 ©.™@7..€¸.\lib\unicore\mktables. 0x0000000003C989A8 «.™@7..€º.\lib\unicore\mktables. 0x0000000003C989C8 ..™@7..€..\lib\unicore\mktables. 0x0000000003C989E8 ¯.™@7..€..\lib\unicore\mktables. 0x0000000003C98A08 ‘.™@7..€À.\lib\unicore\mktables. 0x0000000003C98A28 “.™@7..€Â.\lib\unicore\mktables. 0x0000000003C98A48 ..™@7..€Ä.\lib\unicore\mktables. 0x0000000003C98A68 —.™@7..€Æ.\lib\unicore\mktables. 0x0000000003C98A88 ™.™@7..€È.\lib\unicore\mktables. 0x0000000003C98AA8 ..™@7..€Ê.\lib\unicore\mktables. 0x0000000003C98AC8 ..™@7..€Ì.\lib\unicore\mktables. 0x0000000003C98AE8 Ÿ.™@7..€Î.\lib\unicore\mktables. 0x0000000003C98B08 ..™@7..€Ð.\lib\unicore\mktables. 0x0000000003C98B28 ƒ.™@7..€Ò.\lib\unicore\mktables. 0x0000000003C98B48 ..™@7..€Ô.\lib\unicore\mktables. 0x0000000003C98B68 ..™@7..€Ö.\lib\unicore\mktables. 0x0000000003C98B88 ..™@7..€Ø.\lib\unicore\mktables. 0x0000000003C98BA8 .T.@7..€û.\lib\unicore\mktables. 0x0000000003C98BC8 ..™@7..€Ü.\lib\unicore\mktables. 0x0000000003C98BE8 ..™@7..€Þ.\lib\unicore\mktables. 0x0000000003C98C08 ñ.™@7..€à.\lib\unicore\mktables. 0x0000000003C98C28 ó.™@7..€â.\lib\unicore\mktables. 0x0000000003C98C48 õ.™@7..€ä.\lib\unicore\mktables. 0x0000000003C98C68 ÷.™@7..€æ.\lib\unicore\mktables. 0x0000000003C98C88 ù.™@7..€è.\lib\unicore\mktables. 0x0000000003C98CA8 û.™@7..€ê.\lib\unicore\mktables. 0x0000000003C98CC8 ý.™@7..€ì.\lib\unicore\mktables. 0x0000000003C98CE8 ÿ.™@7..€î.\lib\unicore\mktables. 0x0000000003C98D08 á.™@7..€ð.\lib\unicore\mktables. 0x0000000003C98D28 ã.™@7..€ò.\lib\unicore\mktables. 0x0000000003C98D48 å.™@7..€ô.\lib\unicore\mktables. 0x0000000003C98D68 ç.™@7..€ö.\lib\unicore\mktables. 0x0000000003C98D88 é.™@7..€ø.\lib\unicore\mktables. 0x0000000003C98DA8 ë.™@7..€ú.\lib\unicore\mktables. 0x0000000003C98DC8 í.™@7..€ü.\lib\uæT.@7e.€..ables. 0x0000000003C98DE8 ï.™@7..€þ.\lib\unicore\mktables. 0x0000000003C98E08 Ñ.™@7..€..\lib\unicore\mktables. 0x0000000003C98E28 Ó.™@7..€..\lib\unicore\mktables. 0x0000000003C98E48 Õ.™@7..€..\lib\unicore\mktables. 0x0000000003C98E68 ×.™@7..€..\lib\unicore\mktables. 0x0000000003C98E88 Ù.™@7..€..\lib\unicore\mktables. 0x0000000003C98EA8 Û.™@7..€..\lib\unicore\mktables. 0x0000000003C98EC8 Ý.™@7..€..\lib\unicore\mktables. 0x0000000003C98EE8 ß.™@7..€..\lib\unicore\mktables. 0x0000000003C98F08 Á.™@7..€..\lib\unicore\mktables. 0x0000000003C98F28 Ã.™@7..€..\lib\unicore\mktables. 0x0000000003C98F48 Å.™@7..€..\lib\unicore\mktables. 0x0000000003C98F68 Ç.™@7..€..\lib\unicore\mktables. 0x0000000003C98F88 É.™@7..€..\lib\unicore\mktables. 0x0000000003C98FA8 Ë.™@7..€..\lib\unicore\mktables. 0x0000000003C98FC8 Í.™@7..€..\lib\unicore\mktables. 0x0000000003C98FE8 Ï.™@7..€..\lib\unicore\mktables. 0x0000000003C99008 ;U.@7..€A.\lib\unicore\mktables. 0x0000000003C99028 3€™@7..€".\lib\unicore\mktables. 0x0000000003C99048 5€™@7..€$.\lib\unicore\mktables. 0x0000000003C99068 7€™@7..€&.\lib\unicore\mktables. 0x0000000003C99088 9€™@7..€(.\lib\unicore\mktables. 0x0000000003C990A8 ;€™@7..€*.\lib\unicore\mktables. 0x0000000003C990C8 =€™@7..€,.\lib\unicore\mktables. 0x0000000003C990E8 ?€™@7..€..\lib\unicore\mktables. 0x0000000003C99108 !€™@7..€0.\lib\unicore\mktables. 0x0000000003C99128 #€™@7..€2.\lib\unicore\mktables. 0x0000000003C99148 %€™@7..€4.\lib\unicore\mktables. 0x0000000003C99168 '€™@7..€6.\lib\unicore\mktables. 0x0000000003C99188 )€™@7..€8.\lib\unicore\mktables. 0x0000000003C991A8 +€™@7..€:.\lib\unicore\mktables. 0x0000000003C991C8 -€™@7..€<.\lib\unicore\mktables. 0x0000000003C991E8 /€™@7..€>.\lib\unicore\mktables. 0x0000000003C99208 .€™@7..€@.\lib\unicore\mktables. 0x0000000003C99228 .€™@7..€B.\lib\u.U.@7e.€d.ables. 0x0000000003C99248 .€™@7..€D.\lib\unicore\mktables. 0x0000000003C99268 .€™@7..€F.\lib\unicore\mktables. 0x0000000003C99288 .€™@7..€H.\lib\unicore\mktables. 0x0000000003C992A8 .€™@7..€J.\lib\unicore\mktables. 0x0000000003C992C8 .€™@7..€L.\lib\unicore\mktables. 0x0000000003C992E8 .€™@7..€N.\lib\unicore\mktables. 0x0000000003C99308 .€™@7..€P.\lib\unicore\mktables. 0x0000000003C99328 .€™@7..€R.\lib\unicore\mktables. 0x0000000003C99348 .€™@7..€T.\lib\unicore\mktables. 0x0000000003C99368 .€™@7..€V.\lib\unicore\mktables. 0x0000000003C99388 .€™@7..€X.\lib\unicore\mktables. 0x0000000003C993A8 .€™@7..€Z.\lib\unicore\mktables. 0x0000000003C993C8 .€™@7..€\.\lib\unicore\mktables. 0x0000000003C993E8 .€™@7..€^.\lib\unicore\mktables. 0x0000000003C99408 q€™@7..€`.\lib\unicore\mktables. 0x0000000003C99428 s€™@7..€b.\lib\unicore\mktables. 0x0000000003C99448 u€™@7..€d.\lib\unicore\mktables. 0x0000000003C99468 }U.@7..€..\lib\unicore\mktables. 0x0000000003C99488 y€™@7..€h.\lib\unicore\mktables. 0x0000000003C994A8 {€™@7..€j.\lib\unicore\mktables. 0x0000000003C994C8 }€™@7..€l.\lib\unicore\mktables. 0x0000000003C994E8 .€™@7..€n.\lib\unicore\mktables. 0x0000000003C99508 a€™@7..€p.\lib\unicore\mktables. 0x0000000003C99528 c€™@7..€r.\lib\unicore\mktables. 0x0000000003C99548 e€™@7..€t.\lib\unicore\mktables. 0x0000000003C99568 g€™@7..€v.\lib\unicore\mktables. 0x0000000003C99588 i€™@7..€x.\lib\unicore\mktables. 0x0000000003C995A8 k€™@7..€z.\lib\unicore\mktables. 0x0000000003C995C8 m€™@7..€|.\lib\unicore\mktables. 0x0000000003C995E8 o€™@7..€~.\lib\unicore\mktables. 0x0000000003C99608 Q€™@7..€€.\lib\unicore\mktables. 0x0000000003C99628 S€™@7..€..\lib\unicore\mktables. 0x0000000003C99648 U€™@7..€..\lib\unicore\mktables. 0x0000000003C99668 W€™@7..€..\lib\unicore\mktables. 0x0000000003C99688 Y€™@7..€ˆ.\lib\uRU.@7e.€ª.ables. 0x0000000003C996A8 [€™@7..€Š.\lib\unicore\mktables. 0x0000000003C996C8 ]€™@7..€Œ.\lib\unicore\mktables. 0x0000000003C996E8 _€™@7..€Ž.\lib\unicore\mktables. 0x0000000003C99708 A€™@7..€..\lib\unicore\mktables. 0x0000000003C99728 C€™@7..€’.\lib\unicore\mktables. 0x0000000003C99748 E€™@7..€”.\lib\unicore\mktables. 0x0000000003C99768 G€™@7..€–.\lib\unicore\mktables. 0x0000000003C99788 I€™@7..€˜.\lib\unicore\mktables. 0x0000000003C997A8 K€™@7..€š.\lib\unicore\mktables. 0x0000000003C997C8 M€™@7..€œ.\lib\unicore\mktables. 0x0000000003C997E8 O€™@7..€ž.\lib\unicore\mktables. 0x0000000003C99808 ±€™@7..€ .\lib\unicore\mktables. 0x0000000003C99828 .€™@7..€¢.\lib\unicore\mktables. 0x0000000003C99848 µ€™@7..€¤.\lib\unicore\mktables. 0x0000000003C99868 ·€™@7..€¦.\lib\unicore\mktables. 0x0000000003C99888 .€™@7..€¨.\lib\unicore\mktables. 0x0000000003C998A8 »€™@7..€ª.\lib\unicore\mktables. 0x0000000003C998C8 ·U.@7..€Í.\lib\unicore\mktables. 0x0000000003C998E8 ¿€™@7..€®.\lib\unicore\mktables. 0x0000000003C99908 ¡€™@7..€°.\lib\unicore\mktables. 0x0000000003C99928 £€™@7..€..\lib\unicore\mktables. 0x0000000003C99948 ¥€™@7..€´.\lib\unicore\mktables. 0x0000000003C99968 §€™@7..€¶.\lib\unicore\mktables. 0x0000000003C99988 ©€™@7..€¸.\lib\unicore\mktables. 0x0000000003C999A8 «€™@7..€º.\lib\unicore\mktables. 0x0000000003C999C8 .€™@7..€..\lib\unicore\mktables. 0x0000000003C999E8 ¯€™@7..€..\lib\unicore\mktables. 0x0000000003C99A08 ‘€™@7..€À.\lib\unicore\mktables. 0x0000000003C99A28 “€™@7..€Â.\lib\unicore\mktables. 0x0000000003C99A48 .€™@7..€Ä.\lib\unicore\mktables. 0x0000000003C99A68 —€™@7..€Æ.\lib\unicore\mktables. 0x0000000003C99A88 ™€™@7..€È.\lib\unicore\mktables. 0x0000000003C99AA8 .€™@7..€Ê.\lib\unicore\mktables. 0x0000000003C99AC8 .€™@7..€Ì.\lib\unicore\mktables. 0x0000000003C99AE8 Ÿ€™@7..€Î.\lib\u”U.@7e.€ÿÿables. 0x0000000003C99B08 .€™@7..€Ð.\lib\unicore\mktables. 0x0000000003C99B28 ƒ€™@7..€Ò.\lib\unicore\mktables. 0x0000000003C99B48 .€™@7..€Ô.\lib\unicore\mktables. 0x0000000003C99B68 .€™@7..€Ö.\lib\unicore\mktables. 0x0000000003C99B88 .€™@7..€Ø.\lib\unicore\mktables. 0x0000000003C99BA8 .€™@7..€Ú.\lib\unicore\mktables. 0x0000000003C99BC8 .€™@7..€Ü.\lib\unicore\mktables. 0x0000000003C99BE8 .€™@7..€Þ.\lib\unicore\mktables. 0x0000000003C99C08 ñ€™@7..€à.\lib\unicore\mktables. 0x0000000003C99C28 ó€™@7..€â.\lib\unicore\mktables. 0x0000000003C99C48 õ€™@7..€ä.\lib\unicore\mktables. 0x0000000003C99C68 ÷€™@7..€æ.\lib\unicore\mktables. 0x0000000003C99C88 ù€™@7..€è.\lib\unicore\mktables. 0x0000000003C99CA8 û€™@7..€ê.\lib\unicore\mktables. 0x0000000003C99CC8 ý€™@7..€ì.\lib\unicore\mktables. 0x0000000003C99CE8 ÿ€™@7..€î.\lib\unicore\mktables. 0x0000000003C99D08 မ@7..€ð.\lib\unicore\mktables. 0x0000000003C99D28 〙@7..€ò.\lib\unicore\mktables. 0x0000000003C99D48 候@7..€ô.\lib\unicore\mktables. 0x0000000003C99D68 瀙@7..€ö.\lib\unicore\mktables. 0x0000000003C99D88 這@7..€ø.\lib\unicore\mktables. 0x0000000003C99DA8 뀙@7..€ú.\lib\unicore\mktables. 0x0000000003C99DC8 퀙@7..€ü.\lib\unicore\mktables. 0x0000000003C99DE8 @7..€þ.\lib\unicore\mktables. 0x0000000003C99E08 Ñ€™@7..€..\lib\u$k.Pe.Ü.pËž..... 0x0000000003C99E28 .Î.............ÀÐàð....ktables. 0x0000000003C99E48 ÅýŒ@7..¨........à$É............. 0x0000000003C99E68 ..........€.............È....... 0x0000000003C99E88 È.......°œÄ?...............€.... 0x0000000003C99EA8 .......ÀžÉ.............h....... 0x0000000003C99EC8 h.......0¡Ä?.............FE€.... 0x0000000003C99EE8 .ŸÉ.....ø É.............ÀžÉ..... 0x0000000003C99F08 ø É.....°œÄ?.............D...... 0x0000000003C99F28 8ŸÉ.............` É......ŸÉ..... 0x0000000003C99F48 .Ä?............».......È É..... 0x0000000003C99F68 . É.............ÀžÉ.....8ŸÉ..... 0x0000000003C99F88 €.Ä?............D.......¸ŸÉ..... 0x0000000003C99FA8 @ €.......'.....` É.....` É..... 0x0000000003C99FC8 °œÄ?.............D........-..... 0x0000000003C99FE8 ................Pgº?............ 0x0000000003C9A008 ª.......( É.....( É.......5..... 0x0000000003C9A028 ........èŸÉ.....Pgº?............ 0x0000000003C9A048 ª.................<.....xŸÉ..... 0x0000000003C9A068 xŸÉ..... ÍÄ?.................... 0x0000000003C9A088 ..B.....ÀžÉ.....xŸÉ..... šÄ?.... 0x0000000003C9A0A8 .........F......(.W.......I..... 0x0000000003C9A0C8 8ŸÉ...... É..... ÍÄ?............ 0x0000000003C9A0E8 .F........O.....ÀžÉ.....ÀžÉ..... 0x0000000003C9A108 °œÄ?...............€......U..... 0x0000000003C9A128 (ø......`ø......°œÄ?............ 0x0000000003C9A148 É.......h¡É..... ø........]..... 0x0000000003C9A168 H¢É.....È¡É.....°šÄ?............ 0x0000000003C9A188 ÊF..Ï...ˆK,.....èê(.....â...Ô-.. 0x0000000003C9A1A8 bÅö?......................i..... 0x0000000003C9A1C8 ....... .......@üÄ?............ 0x0000000003C9A1E8 &FE......¢É.....Ð%É.......q..... 0x0000000003C9A208 .&É.....Ð%É.....°œÄ?....¡....... 0x0000000003C9A228 .D......H¢É.....8%É.......y..... 0x0000000003C9A248 8%É.....8%É.....ÀœÄ?............ 0x0000000003C9A268 .F..............nicore\mktables. 0x0000000003C9A288 .ƒ™@7..€H.\lib\u.þŒ@7e.¨........ 0x0000000003C9A2A8 .'É.......................€.&... 0x0000000003C9A2C8 ................................ 0x0000000003C9A2E8 ................................ 0x0000000003C9A308 ................................ 0x0000000003C9A328 ................................ 0x0000000003C9A348 ................................ 0x0000000003C9A368 ................................ 0x0000000003C9A388 ................................ 0x0000000003C9A3A8 ................................ 0x0000000003C9A3C8 ................................ 0x0000000003C9A3E8 ..................&............. 0x0000000003C9A408 ........à|Å?............À..A.... 0x0000000003C9A428 P'É..... ¤É.............˜¦É..... 0x0000000003C9A448 ¤É.....°šÄ?............ÊF..å... 0x0000000003C9A468 ˆK,.....èê(.....â...å-..bÅö?.... 0x0000000003C9A488 ..................:......¤É..... 0x0000000003C9A4A8 P'É......ÔÁ?............Ù.F..... 0x0000000003C9A4C8 ؤÉ.......A..... ¤É..... ¤É..... 0x0000000003C9A4E8 @A¿?.....................¥É..... 0x0000000003C9A508 ..H.....ؤÉ.....ؤÉ.....°œÄ?.... 0x0000000003C9A528 ¡.........7.....€¥É.....€¥É..... 0x0000000003C9A548 ..P.....................Pgº?.... 0x0000000003C9A568 ........ª.2.......V.....ؤÉ..... 0x0000000003C9A588 .¥É..... ]¿?..............7..... 0x0000000003C9A5A8 ¸¥É.......].....€¥É.....€¥É..... 0x0000000003C9A5C8 °œÄ?....¡...............ø¥É..... 0x0000000003C9A5E8 (¦É.......e.....˜¦É.....(¦É..... 0x0000000003C9A608 °œÄ?.............D........k..... 0x0000000003C9A628 ¸¥É.....¸¥É.....°œÄ?............ 0x0000000003C9A648 ........`¦É.......r.....(¦É..... 0x0000000003C9A668 (¦É.....°œÄ?.................... 0x0000000003C9A688 ˜¦É.......y.....€¥É.....`¦É..... 0x0000000003C9A6A8 €.Ä?....................ˆÐ...... 0x0000000003C9A6C8 ]ƒ™@7..€Œ.\lib\unicore\mktables. 0x0000000003C9A6E8 OþŒ@7..¿(?^aax:^ ( .{27} # Don 0x0000000003C9A708 't look before the. 0x0000000003C9A728 0x0000000003C9A748 # indent.. 0x0000000003C9A768 \ * # Don' 0x0000000003C9A788 t look in leading. 0x0000000003C9A7A8 0x0000000003C9A7C8 # blanks past the indent. 0x0000000003C9A7E8 [^ ] .* 0x0000000003C9A808 # Find the right-most. 0x0000000003C9A828 (?: 0x0000000003C9A848 # acceptable break: 0x0000000003C9A868 . [ \ 0x0000000003C9A888 s = ] # space or equal. 0x0000000003C9A8A8 | - 0x0000000003C9A8C8 (?! [.0-9] ) # or non-unary min 0x0000000003C9A8E8 us.. 0x0000000003C9A908 | [^\\[(] (?= \\ )# break before 0x0000000003C9A928 single backslash. 0x0000000003C9A948 0x0000000003C9A968 # not immediately after opening 0x0000000003C9A988 . 0x0000000003C9A9A8 # punctuation. 0x0000000003C9A9C8 ) 0x0000000003C9A9E8 # $1 includes the ch 0x0000000003C9AA08 aracter. )).c 0x0000000003C9AA28 ate it is in inversion list form 0x0000000003C9AA48 at. The number following the V 0x0000000003C9AA68 gives the number of lines remain 0x0000000003C9AA88 ing. Each of those remaining li 0x0000000003C9AAA8 nes is a single number represent 0x0000000003C9AAC8 ing the .t data line of this fil 0x0000000003C9AAE8 e begins with the letter V to in 0x0000000003C9AB08 dicate it is in.V to indicate it 0x0000000003C9AB28 is in .@.......’þŒ@7e.€.. 'age 0x0000000003C9AB48 =na' => 1,. 'age=unassigned' 0x0000000003C9AB68 => 1,. 'ahex=f' => 1,. 'ah 0x0000000003C9AB88 ex=false' => 1,. 'ahex=n' => 0x0000000003C9ABA8 1,. 'ahex=no' => 1,. 'alph 0x0000000003C9ABC8 a=f' => 1,. 'alpha=false' => 0x0000000003C9ABE8 1,. 'alpha=n' => 1,. 'alph 0x0000000003C9AC08 a=no' => 1,. 'bc=l' => 1,. 0x0000000003C9AC28 'bc=lefttoright' => 1,. 'bid 0x0000000003C9AC48 ic=f' => 1,. 'bidic=false' => 0x0000000003C9AC68 1,. 'bidic=n' => 1,. 'bid 0x0000000003C9AC88 ic=no' => 1,. 'bidim=f' => 1, 0x0000000003C9ACA8 . 'bidim=false' => 1,. 'bi 0x0000000003C9ACC8 dim=n' => 1,. 'bidim=no' => 1 0x0000000003C9ACE8 ,. 'blk=nb' => 1,. 'blk=no 0x0000000003C9AD08 block' => 1,. 'bpt=n' => 1,. 0x0000000003C9AD28 'bpt=none' => 1,. 'cased=f 0x0000000003C9AD48 ' => 1,. 'cased=false' => 1,. 0x0000000003C9AD68 'cased=n' => 1,. 'cased=n 0x0000000003C9AD88 o' => 1,. 'ccc=0' => 1,. ' 0x0000000003C9ADA8 ccc=notreordered' => 1,. 'ccc 0x0000000003C9ADC8 =nr' => 1,. 'ce=f' => 1,. 0x0000000003C9ADE8 'ce=false' => 1,. 'ce=n' => 1 0x0000000003C9AE08 ,. 'ce=no' => 1,. 'ci=f' = 0x0000000003C9AE28 > 1,. 'ci=false' => 1,. 'c 0x0000000003C9AE48 i=n' => 1,. 'ci=no' => 1,. 0x0000000003C9AE68 'cn' => 1,. 'compex=f' => 1, 0x0000000003C9AE88 . 'compex=false' => 1,. 'c 0x0000000003C9AEA8 ompex=n' => 1,. 'compex=no' = 0x0000000003C9AEC8 > 1,. 'cwcf=f' => 1,. 'cwc 0x0000000003C9AEE8 f=false' => 1,. 'cwcf=n' => 1 0x0000000003C9AF08 ,. 'cwcf=no' => 1,. 'cwcm= 0x0000000003C9AF28 f' => 1,. 'cwcm=false' => 1,. 0x0000000003C9AF48 'cwcm=n' => 1,. 'cwcm=no' 0x0000000003C9AF68 => 1,. 'cwkcf=f'.t'.?....... 0x0000000003C9AF88 ÙþŒ@7..€[. 'age=na' => 1,. ' 0x0000000003C9AFA8 age=unassigned' => 1,. 'ahex= 0x0000000003C9AFC8 f' => 1,. 'ahex=false' => 1,. 0x0000000003C9AFE8 'ahex=n' => 1,. 'ahex=no' 0x0000000003C9B008 => 1,. 'alpha=f' => 1,. ' 0x0000000003C9B028 alpha=false' => 1,. 'alpha=n' 0x0000000003C9B048 => 1,. 'alpha=no' => 1,. 0x0000000003C9B068 'bc=l' => 1,. 'bc=lefttoright 0x0000000003C9B088 ' => 1,. 'bidic=f' => 1,. 0x0000000003C9B0A8 'bidic=false' => 1,. 'bidic=n 0x0000000003C9B0C8 ' => 1,. 'bidic=no' => 1,. 0x0000000003C9B0E8 'bidim=f' => 1,. 'bidim=fals 0x0000000003C9B108 e' => 1,. 'bidim=n' => 1,. 0x0000000003C9B128 'bidim=no' => 1,. 'blk=nb' = 0x0000000003C9B148 > 1,. 'blk=noblock' => 1,. 0x0000000003C9B168 'bpt=n' => 1,. 'bpt=none' => 0x0000000003C9B188 1,. 'cased=f' => 1,. 'cas 0x0000000003C9B1A8 ed=false' => 1,. 'cased=n' => 0x0000000003C9B1C8 1,. 'cased=no' => 1,. 'cc 0x0000000003C9B1E8 c=0' => 1,. 'ccc=notreordered 0x0000000003C9B208 ' => 1,. 'ccc=nr' => 1,. ' 0x0000000003C9B228 ce=f' => 1,. 'ce=false' => 1, 0x0000000003C9B248 . 'ce=n' => 1,. 'ce=no' => 0x0000000003C9B268 1,. 'ci=f' => 1,. 'ci=fal 0x0000000003C9B288 se' => 1,. 'ci=n' => 1,. ' 0x0000000003C9B2A8 ci=no' => 1,. 'cn' => 1,. 0x0000000003C9B2C8 'compex=f' => 1,. 'compex=fal 0x0000000003C9B2E8 se',..CHARACTER-',.
0x0000000003C9B308 }, # [6]. {. 'h
0x0000000003C9B328 igh' => 101640,. 'low' =>
0x0000000003C9B348 101632,. 'name' => 'TANG
0x0000000003C9B368 UT IDEOGRAPH SUPPLEMENT- |
Just single step any random blead miniperl or fullperl process that executes during a self make all. Set some breakpoints in gv.c, and hold F11 (MSVS IDE) for a while. If you dont know where to set your first BP, my favorite one to demonstrate what is wrong is Line 11982 in 5b9aabc
gv_fetchpvn() and single step (hold F11) into gv_fetchpvn and what happens C line by C line.
|
All the code in gv.c, is very old and has gotten zero optimizing since 5.000 alpha. SVs are instantly turned into PVNs on the front end instantly loosing and chance of [future] SVPV COW Shared HEK key string optimization. HEKs are unknown to gv_* API. All inputs are continously parsed for ' and :: without exception, even if they are read only (SEGV) C literals or PP SvREADONLY() SvPROTECT() read only literals or API contract read only HEK* PV buffers. Returned from hv_store*() hv_fetch*(), HEs, aren't exploited to pass the shared HEK onto gv_init_() or gv_name_set(), and gv_name_set() on front end only understands PVNs, but on backend, in the GP struct and GV body struct, ONLY understands HEKs. Therefore no RC++, and looking up the ShHEK again in PL_strtab.
The large amount of tiny extern exported symbols wrapper funs added over the years also causes C dbg call stacks even at -O1/-O2, to be 2-5 call frames deep of 3 line shims/stub functions before reaching the main logic. I can't tell what is a mathom and what isn't.
So to lay provisions needed for future commits, that add proper SV*/HEK*/U32 hash precalculation, not to mention the memcmp() in hv_common() is skipped if left and right ptr addr are equal. The front end of gv_* needs cleanup.
-move U32 flags to the start of the the func, so flags can encode details what void * #1 means, and if vararg void * #2 exists (PVN with N as size_t is only 2nd arg user right now). Since gv_stashpvs() is very common on core and CPAN, and called over and over in 1 proc, since most interp core and CPAN XS devs don't know GVs have an RC that can be ++ed and stored in a MY_CXT struct. Also nobody knows "stashes" are HVs or PP packages/classes are implimented with HV*s. So there is reason to pay extra attention to gv_stashpvs() b/c of its high usage/call sites per library. So if the STRLEN can be CC constant folded, and fits in a U8, store the length in the flags arg. Saves on CPU ops in all the callers to push 2 args, vs 3. Public API gv_stashpvs(str, create)'s create arg [flags in reality] can't be optimized away or removed, so combine the 2 CC time constant args, so they fold/optimize into 1 cpu op.
-at some point perl core needs to cache/create/move around C level arrays of RC++ed ShHEKs to pass to the gv_*() APIs. SVPVs aren't exactly the right format for storing sanitized (no */::/'/SUPER/main/UNIVERSAL) and pre-parsed/splitted "package tokens", since SVs easily wind up or escape into PP-state, and SV RO flags/COW flags aren't the most honored and respected parts of the API by CPAN XS/maybe core.
ShHEKs escaping into PP-state is rarer than "generic SVs" escaping into PP-state or CPAN XS state. All legacy XS code any quality and entry/beginner XS people, will pick "char " getter macros vs an unknown opaque "HEK" type (and newSVpvn() to capture/move those char s). Users who know what a HEK is and how to RC++ it, know not to write to it. Also a bad write to a ShHEK will cause more PP or SEGV breakage/panics or proc exits, alot faster than a bad write to a SVfRO "SVPV" buffer. Hash doesn't match char string in a ShHEK will term the prc faster. So vararg on gv_() is a provision for a future prototype, that accepts 1, 2, 3 or more HEK*s passed array style, that already were sanitized to not have ::s.
0xFF length was picked b/c there was bitfield space, shaving to 32/64/128 chars for gv_stashpvs(str, create) is possible if the bits are needed b/c a terminal is 80 chars, would fit almost all absolute ("::") C string package names, and everthing in core and CPAN.
-the stubs remain as exported stub funcs, on purpose for now, it makes
certain diag tools I use slightly easier to use vs optimized out inlines
or macros. In 5.43 or 5.45 the exported stub funcs can be converted to
macros no static inline, which is intent of this commit. The vararg
is the 1 and only entry point to all of gv_stash* logic.
-flipping I32 flags to the front requires "_p" suffixes for private for
ABI reasons, public API still thinks I32 flags is always the last arg
-since all front end wrappers, are 1-away from instead of multiple frames
away, they are more likely to LTO inline away inside of libperl (not XS)
on any CC. CCs have cost/benefit/wall time cut offs for scoring
potential inlines opportunities. Going 2 layers, or 3+ layers of small
inlines, is asking alot from a CC, that has to traverse a tree of nodes
to do each inline, and the cut off could be as low as 1 inline fn and no
more unrolling or folding.