
I found and killed a race-condition; the following three functions need to be changed: atomic::sys::once_dec(...) template<typename T> atomic::sys::once_def_POD<T>::release() Here is the fix: // System API Def namespace atomic { namespace sys { [...] // Dec the refcount if its >= 0. // returns true for the last ref, // otherwise false bool once_dec(refs_t *_this) throw() { refs_t local, cmp, xchg; do { local = ::ac_mb_load_naked(_this); if (local < 0) { return false; } xchg = (local == 1) ? -1 : local - 1; cmp = local; local = ac_atomic_cas_release(_this, local, xchg); } while(cmp != local); std::printf("atomic::sys::once_dec(); - %i\n", local - 1); return (local == 1); } [...] // define is a POD that holds a once POD template<typename T> struct once_def_POD { [...] // Acquires a reference and calls ctor for first ref. // returns pointer to ref, // otherwise NULL type_t* acquire() { type_t *local = 0, *cmp; do { if (local) { ac_atomic_dec_release(&s_this.m_refs); } local = (type_t*)ac_mb_loadptr_depends(&s_this.m_state); if (! local) { // hashed_mutex::guard_t lock(&_this); local = (type_t*)ac_mb_loadptr_depends(&s_this.m_state); if (! once_inc(&s_this.m_refs)) { return 0; } if (! local) { try { local = new type_t; } catch(...) { (void)once_dec(&s_this.m_refs); throw; } dbg_allocs_inc(); std::printf("\n(%p)once_def_POD::acquire(); - %p\n", (void*)this, (void*)local); ac_mb_storeptr_release(&s_this.m_state, local); return local; } } else if(! once_inc(&s_this.m_refs)) { return 0; } cmp = (type_t*)ac_mb_loadptr_depends(&s_this.m_state); } while(local != cmp); return local; } // Releases a reference and calls dtor if last ref. // returns nothing, // otherwise false void release() { type_t *local = (type_t*)ac_mb_loadptr_depends(&s_this.m_state); if (once_dec(&s_this.m_refs)) { ac_mb_storeptr_fence(&s_this.m_state, 0); ac_mb_store_fence(&s_this.m_refs, 0); if (local) { delete local; std::printf("(%p)once_def_POD::release(); - %p\n\n", (void*)this, (void*)local); dbg_allocs_dec(); } } } }; [...] }} // namespace atomic::sys I attached the complete fixed code; once-experimental.cpp. The race-condition allowed a thread to load a state pointer and inc a reference count to a static object that was possibly being dtor'd. I fixed this by zeroing the state pointer and invalidating the reference count when the count dropped to zero. I also had to make a thread double check the load of a state pointer after incrementing a valid reference count. Now I can't seem to find any other race-conditions after this... Can you? ;^) IMHO, this particular algorithm may be worth spending a little time on... Humm... begin 666 once-experimental.cpp M(VEN8VQU9&4@/&-A<W-E<G0^#0HC:6YC;'5D92 \8W-T9&EO/@T*(VEN8VQU M9&4@/&%P<&-O<F4N:#X-"@T*#0HO+R!5<V5R($%022!$96-L#0IN86UE<W!A M8V4@871O;6EC('L@#0H@('1E;7!L871E/'1Y<&5N86UE(%0^(&-L87-S(&]N M8V5?<'1R.PT*(" -"GT@+R\@;F%M97-P86-E(&%T;VUI8PT*#0H-"B\O(%-Y M<W1E;2!!4$D@1&5C; T*;F%M97-P86-E(&%T;VUI8R![( T*;F%M97-P86-E M('-Y<R![( T*("!T>7!E9&5F(&%C7VEN='=O<F1?="!R969S7W0[(" -"B @ M=&5M<&QA=&4\='EP96YA;64@5#X@<W1R=6-T(&]N8V5?4$]$.PT*("!T96UP M;&%T93QT>7!E;F%M92!4/B!S=')U8W0@;VYC95]D969?4$]$.R @#0H@('-T M871I8R!B;V]L(&]N8V5?:6YC*')E9G-?="HI('1H<F]W*"D[#0H@('-T871I M8R!B;V]L(&]N8V5?9&5C*')E9G-?="HI('1H<F]W*"D[(" -"B @<W1A=&EC M('9O:60@9&)G7V%L;&]C<U]I;F,H*2!T:')O=R@I.PT*("!S=&%T:6,@=F]I M9"!D8F=?86QL;V-S7V1E8R@I('1H<F]W*"D[(" -"B @#0I]?2 O+R!N86UE M<W!A8V4@871O;6EC.CIS>7,-"@T*(" -"B\O(%-Y<W1E;2!!4$D@1&5F#0IN M86UE<W!A8V4@871O;6EC('L@#0IN86UE<W!A8V4@<WES('L@(" -"B @(" @ M(" @(" -"B @+R\@1&5B=6<@8V]U;G1E<B -"B @<W1A=&EC(&%C7VEN='=O M<F1?="!D8F=?86QL;V-S(#T@,#L@(" @(" @(" @#0H-"@T*(" O+R!);F,@ M=&AE(&1E8G5G(&-O=6YT97(@(" @(" @(" @(" -"B @=F]I9"!D8F=?86QL M;V-S7VEN8R@I('1H<F]W*"D@>PT*(" @(&%C7VEN='=O<F1?="!A;&QO8W,@ M/2!A8U]A=&]M:6-?:6YC7V%C<75I<F4H)F1B9U]A;&QO8W,I.PT*(" @('-T M9#HZ<')I;G1F*")A=&]M:6,Z.G-Y<SHZ9&)G7V%L;&]C<U]I;F,@+2 E:5QN M(BP@86QL;V-S*3L@(" @(" @(" @( T*("!]#0H@( T*(" -"B @+R\@26YC M('1H92!D96)U9R!C;W5N=&5R#0H@('9O:60@9&)G7V%L;&]C<U]D96,H*2!T M:')O=R@I('L-"B @("!A8U]I;G1W;W)D7W0@86QL;V-S(#T@86-?871O;6EC M7V1E8U]A8W%U:7)E*"9D8F=?86QL;V-S*3L-"B @("!S=&0Z.G!R:6YT9B@B M871O;6EC.CIS>7,Z.F1B9U]A;&QO8W-?9&5C("T@)6E<;B(L(&%L;&]C<RD[ M(" -"B @?0T*(" @(" @(" @(" @(" -"B @(" @#0H@("\O($EN8R!T:&4@ M<F5F8V]U;G0@:68@:71S(#X](# N#0H@("\O(')E='5R;G,@=')U92!I9B!T M:&4@<F5F8V]U;G0@=V%S(&EN8R=D+ T*(" O+R!O=&AE<G=I<V4@9F%L<V4@ M(" @#0H@(&)O;VP@;VYC95]I;F,H<F5F<U]T("I?=&AI<RD@=&AR;W<H*2![ M#0H@(" @<F5F<U]T(&QO8V%L+"!C;7 [#0H@(" @9&\@>PT*(" @(" @;&]C M86P@/2 Z.F%C7VUB7VQO861?;F%K960H7W1H:7,I.PT*(" @(" @:68@*&QO M8V%L(#P@,"D@>R!R971U<FX@9F%L<V4[('T-"B @(" @(&-M<" ](&QO8V%L M.PT*(" @(" @;&]C86P@/2!A8U]A=&]M:6-?8V%S7V%C<75I<F4H7W1H:7,L M(&QO8V%L+"!L;V-A;" K(#$I.PT*(" @('T@=VAI;&4H8VUP("$](&QO8V%L M*3L-"B @("!S=&0Z.G!R:6YT9B@B871O;6EC.CIS>7,Z.F]N8V5?:6YC*"D[ M("T@)6E<;B(L(&QO8V%L("L@,2D[(" @( T*(" @( T*(" @(')E='5R;B!T M<G5E.PT*("!]( T*(" @( T*(" @( T*(" O+R!$96,@=&AE(')E9F-O=6YT M(&EF(&ET<R ^/2 P+@T*(" O+R!R971U<FYS('1R=64@9F]R('1H92!L87-T M(')E9BP-"B @+R\@;W1H97)W:7-E(&9A;'-E#0H@(&)O;VP@;VYC95]D96,H M<F5F<U]T("I?=&AI<RD@=&AR;W<H*2![#0H@(" @<F5F<U]T(&QO8V%L+"!C M;7 L('AC:&<[#0H@(" @9&\@>PT*(" @(" @;&]C86P@/2 Z.F%C7VUB7VQO M861?;F%K960H7W1H:7,I.PT*(" @(" @:68@*&QO8V%L(#P@,"D@>R!R971U M<FX@9F%L<V4[('T-"B @(" @('AC:&<@/2 H;&]C86P@/3T@,2D@/R M,2 Z M(&QO8V%L("T@,3L-"B @(" @(&-M<" ](&QO8V%L.PT*(" @(" @;&]C86P@ M/2!A8U]A=&]M:6-?8V%S7W)E;&5A<V4H7W1H:7,L(&QO8V%L+"!X8VAG*3L- M"B @("!]('=H:6QE*&-M<" A/2!L;V-A;"D[( T*(" @('-T9#HZ<')I;G1F M*")A=&]M:6,Z.G-Y<SHZ;VYC95]D96,H*3L@+2 E:5QN(BP@;&]C86P@+2 Q M*3L@#0H@( T*(" @(')E='5R;B H;&]C86P@/3T@,2D[#0H@('T-"B @#0H@ M( T*(" O+R!O;F-E(&ES(&$@4$]$#0H@("-D969I;F4@051/34E#7T].0T5? M4UE37U-4051)0TE.250H*2![,"P@,'T-"B @=&5M<&QA=&4\='EP96YA;64@ M5#X-"B @<W1R=6-T(&]N8V5?4$]$('L-"B @("!T>7!E9&5F(%0@='EP95]T M.PT*(" @('1Y<&5D968@;VYC95]D969?4$]$/&]N8V5?4$]$/B!D969I;F5? M4$]$7W0[#0H@(" @<F5F<U]T(&U?<F5F<SL@(" @#0H@(" @='EP95]T("IM M7W-T871E.PT*("!].R @( T*(" -"B @#0H@("\O(&1E9FEN92!I<R!A(%!/ M1"!T:&%T(&AO;&1S(&$@;VYC92!03T0-"B @=&5M<&QA=&4\='EP96YA;64@ M5#X-"B @<W1R=6-T(&]N8V5?9&5F7U!/1"![#0H@(" @='EP961E9B!T>7!E M;F%M92!4.CIT>7!E7W0@='EP95]T.PT*(" @('-T871I8R!4('-?=&AI<SL- M"B @(" -"B @(" -"B @(" O+R!!8W%U:7)E<R!A(')E9F5R96YC92!A;F0@ M8V%L;',@8W1O<B!F;W(@9FER<W0@<F5F+@T*(" @("\O(')E='5R;G,@<&]I M;G1E<B!T;R!R968L#0H@(" @+R\@;W1H97)W:7-E($Y53$P@( T*(" @('1Y M<&5?="H@86-Q=6ER92@I('L-"B @(" @('1Y<&5?=" J;&]C86P@/2 P+" J M8VUP.PT*(" @(" @#0H@(" @("!D;R![#0H@(" @(" @(&EF("AL;V-A;"D@ M>R!A8U]A=&]M:6-?9&5C7W)E;&5A<V4H)G-?=&AI<RYM7W)E9G,I.R!]#0H@ M(" @(" @(&QO8V%L(#T@*'1Y<&5?="HI86-?;6)?;&]A9'!T<E]D97!E;F1S M*"9S7W1H:7,N;5]S=&%T92D[#0H@(" @(" @(&EF("@A(&QO8V%L*2![#0H@ M(" @(" @(" @+R\@:&%S:&5D7VUU=&5X.CIG=6%R9%]T(&QO8VLH)E]T:&ES M*3L-"B @(" @(" @("!L;V-A;" ]("AT>7!E7W0J*6%C7VUB7VQO861P=')? M9&5P96YD<R@F<U]T:&ES+FU?<W1A=&4I.PT*(" @(" @(" @(&EF("@A(&]N M8V5?:6YC*"9S7W1H:7,N;5]R969S*2D@>R!R971U<FX@,#L@?0T*(" @(" @ M(" @(&EF("@A(&QO8V%L*2![#0H@(" @(" @(" @("!T<GD@>R!L;V-A;" ] M(&YE=R!T>7!E7W0[('T@#0H@(" @(" @(" @("!C871C:"@N+BXI('L-"B @ M(" @(" @(" @(" @*'9O:60I;VYC95]D96,H)G-?=&AI<RYM7W)E9G,I.PT* M(" @(" @(" @(" @("!T:')O=SL-"B @(" @(" @(" @('T-"B @(" @(" @ M(" @(&1B9U]A;&QO8W-?:6YC*"D[#0H@(" @(" @(" @("!S=&0Z.G!R:6YT M9B@B7&XH)7 I;VYC95]D969?4$]$.CIA8W%U:7)E*"D[("T@)7!<;B(L("AV M;VED*BET:&ES+" H=F]I9"HI;&]C86PI.PT*(" @(" @(" @(" @86-?;6)? M<W1O<F5P=')?<F5L96%S92@F<U]T:&ES+FU?<W1A=&4L(&QO8V%L*3L-"B @ M(" @(" @(" @(')E='5R;B!L;V-A;#L-"B @(" @(" @("!]#0H@(" @(" @ M('T@96QS92!I9B@A(&]N8V5?:6YC*"9S7W1H:7,N;5]R969S*2D@>PT*(" @ M(" @(" @(')E='5R;B P.PT*(" @(" @("!]#0H@(" @(" @( T*(" @(" @ M("!C;7 @/2 H='EP95]T*BEA8U]M8E]L;V%D<'1R7V1E<&5N9',H)G-?=&AI M<RYM7W-T871E*3L-"B @(" @('T@=VAI;&4H;&]C86P@(3T@8VUP*3L-"B @ M(" @( T*(" @(" @<F5T=7)N(&QO8V%L.PT*(" @('T@( T*(" -"B @#0H@ M(" @+R\@4F5L96%S97,@82!R969E<F5N8V4@86YD(&-A;&QS(&1T;W(@:68@ M;&%S="!R968N#0H@(" @+R\@<F5T=7)N<R!N;W1H:6YG+ T*(" @("\O(&]T M:&5R=VES92!F86QS92 @#0H@(" @=F]I9"!R96QE87-E*"D@>R @(" @( T* M(" @(" @='EP95]T("IL;V-A;" ]("AT>7!E7W0J*6%C7VUB7VQO861P=')? M9&5P96YD<R@F<U]T:&ES+FU?<W1A=&4I.PT*(" @(" @:68@*&]N8V5?9&5C M*"9S7W1H:7,N;5]R969S*2D@>PT*(" @(" @("!A8U]M8E]S=&]R97!T<E]F M96YC92@F<U]T:&ES+FU?<W1A=&4L(# I.PT*(" @(" @("!A8U]M8E]S=&]R M95]F96YC92@F<U]T:&ES+FU?<F5F<RP@,"D[(" @(" @(" @(" @(" -"B @ M(" @(" @:68@*&QO8V%L*2![#0H@(" @(" @(" @9&5L971E(&QO8V%L.R - M"B @(" @(" @("!S=&0Z.G!R:6YT9B@B*"5P*6]N8V5?9&5F7U!/1#HZ<F5L M96%S92@I.R M("5P7&Y<;B(L("AV;VED*BET:&ES+" H=F]I9"HI;&]C86PI M.PT*(" @(" @(" @(&1B9U]A;&QO8W-?9&5C*"D[#0H@(" @(" @('T-"B @ M(" @('T-"B @("!]( T*(" @( T*(" @(" @+R\@<W1A=&EC(%!/1"!I;FET M( T*("!].R @=&5M<&QA=&4\='EP96YA;64@5#X@#0H@(" @("!4(&]N8V5? M9&5F7U!/1#Q4/CHZ<U]T:&ES(#T@051/34E#7T].0T5?4UE37U-4051)0TE. M250H*3L-"B @#0I]?2 O+R!N86UE<W!A8V4@871O;6EC.CIS>7,-"@T*#0HO M+R!5<V5R($%022!$968-"FYA;65S<&%C92!A=&]M:6,@>PT*(" -"B @+R\@ M2&]L9',@86X@86-Q=6ER960@<F5F97)E;F-E+@T*("!T96UP;&%T93QT>7!E M;F%M92!4/@T*("!C;&%S<R!O;F-E7W!T<B![#0H@('!U8FQI8SH-"B @("!T M>7!E9&5F('1Y<&5N86UE('-Y<SHZ;VYC95]03T0\5#XZ.F1E9FEN95]03T1? M="!D969I;F5?4$]$7W0[#0H-"B @(" -"B @<')I=F%T93H@(" @#0H@(" @ M9&5F:6YE7U!/1%]T("IM7V]N8V4[(" @#0H@(" @5" J;5]S=&%T93L-"B @ M(" -"B @(" -"B @<')I=F%T93H-"B @("!4*B!A8W%U:7)E*"D@>PT*(" @ M(" @<F5T=7)N("AM7V]N8V4I(#\@;5]O;F-E+3YA8W%U:7)E*"D@.B P.PT* M(" @('T-"B @(" -"B @("!V;VED(')E;&5A<V4H*2![#0H@(" @("!I9B H M;5]O;F-E*2![(&%S<V5R="AM7W-T871E*3L@;5]O;F-E+3YR96QE87-E*"D[ M('T-"B @("!](" @( T*#0H-"B @<'5B;&EC.@T*(" @(&]N8V5?<'1R*"D@ M=&AR;W<H*2 Z(&U?;VYC92@P*2P@;5]S=&%T92@P*2![?0T*(" @(" @(" - M"B @("!O;F-E7W!T<BAD969I;F5?4$]$7W0@)E]O;F-E*2 -"B @(" @(#H@ M;5]O;F-E*"9?;VYC92DL(&U?<W1A=&4H7V]N8V4N86-Q=6ER92@I*2![?0T* M(" @( T*(" @('YO;F-E7W!T<B@I('L@<F5L96%S92@I.R!]#0H@(" @#0H@ M(" @#0H@('!U8FQI8SH-"B @("!O;F-E7W!T<BAO;F-E7W!T<B!C;VYS=" F M<FAS*2 -"B @(" @(#H@;5]O;F-E*')H<RYM7V]N8V4I+"!M7W-T871E*')H M<RYA8W%U:7)E*"DI('M]#0H@(" @#0H@(" @;VYC95]P='(@8V]N<W0F(&]P M97)A=&]R(#TH;VYC95]P='(@)G)H<RD@>PT*(" @(" @9&5F:6YE7U!/1%]T M("IO;&0@/2!M7V]N8V4[#0H@(" @("!I9B H;VQD("$](')H<RYM7V]N8V4I M('L-"B @(" @(" @9&5F:6YE7U!/1%]T("I?;VYC92 ](')H<RYM7V]N8V4[ M#0H@(" @(" @(%0@*E]S=&%T92 ](')H<RYA8W%U:7)E*"D[#0H@(" @(" @ M(')E;&5A<V4H*3L-"B @(" @(" @;5]O;F-E(#T@7V]N8V4[#0H@(" @(" @ M(&U?<W1A=&4@/2!?<W1A=&4[#0H@(" @("!]#0H@(" @("!R971U<FX@*G1H M:7,[#0H@(" @?0T*(" @( T*(" @(&]N8V5?<'1R(&-O;G-T)B!O<&5R871O M<B ]*&1E9FEN95]03T1?=" F<FAS*2![#0H@(" @("!D969I;F5?4$]$7W0@ M*F]L9" ](&U?;VYC93L-"B @(" @(&EF("AO;&0@(3T@)G)H<RD@>PT*(" @ M(" @("!D969I;F5?4$]$7W0@*E]O;F-E(#T@)G)H<SL-"B @(" @(" @5" J M7W-T871E(#T@<FAS+F%C<75I<F4H*3L-"B @(" @(" @<F5L96%S92@I.PT* M(" @(" @("!M7V]N8V4@/2!?;VYC93L-"B @(" @(" @;5]S=&%T92 ](%]S M=&%T93L-"B @(" @('T-"B @(" @(')E='5R;B J=&AI<SL-"B @("!](" @ M( T*(" @(" @(" -"B @(" @(" @(" @( T*("!P=6)L:6,Z#0H@(" @5"H@ M;&]A9"@I(&-O;G-T('1H<F]W*"D@>R!R971U<FX@;5]S=&%T93L@?0T*#0H- M"B @<'5B;&EC.B @(" -"B @("!4*B!O<&5R871O<B M/B@I('L@<F5T=7)N M(&QO860H*3L@?0T*(" @(%0F(&]P97)A=&]R("HH*2![(')E='5R;B J;&]A M9"@I.R!]#0H@(" @#0H@(" @#0H@('!U8FQI8SH-"B @("!O<&5R871O<B!B M;V]L*"D@=&AR;W<H*2![(')E='5R;B H;5]S=&%T92 A/2 P*3L@?0T*(" @ M(&)O;VP@;W!E<F%T;W(@(2@I('1H<F]W*"D@>R!R971U<FX@*&U?<W1A=&4@ M/3T@,"D[('T-"B @?3L-"B @#0I]("\O(&YA;65S<&%C92!A=&]M:6,-"@T* M#0H-"@T*+R\@2&5R92!I<R!S86UP;&4@=7-A9V4Z#0IS=')U8W0@9F]O,2![ M( T*("!T>7!E9&5F(&%T;VUI8SHZ;VYC95]P='(\9F]O,3X@;VYC95]P=')? M=#L-"B @#0H@('9O:60@=VAA=&5V97(H*2![#0H@(" @<W1D.CIP<FEN=&8H M(B@E<"EF;V\Q.CIW:&%T979E<B@I.UQN(BP@*'9O:60J*71H:7,I.PT*("!] M#0H@( T*("!F;V\Q*"D@>R!S=&0Z.G!R:6YT9B@B*"5P*69O;S$Z.F9O;S$H M*3M<;B(L("AV;VED*BET:&ES*3L@?0T*(" -"B @?F9O;S$H*2![('-T9#HZ M<')I;G1F*"(H)7 I9F]O,3HZ?F9O;S$H*3M<;B(L("AV;VED*BET:&ES*3L@ M?0T*?3L-"@T*#0IS=&%T:6,@=F]I9"!F=6YC85]F;W)?;75L=&EP;&5?=&AR M96%D<R@I('L-"B @<W1A=&EC(&9O;S$Z.F]N8V5?<'1R7W0Z.F1E9FEN95]0 M3T1?="!S7V9O;SL-"@T*("!F;V\Q.CIO;F-E7W!T<E]T(&UY9F]O,2AS7V9O M;RD[#0H@(&EF("AM>69O;S$I('L-"B @("!M>69O;S$M/G=H871E=F5R*"D[ M#0H@('T-"GT-"@T*#0IS=')U8W0@9F]O,B![( T*("!T>7!E9&5F(&%T;VUI M8SHZ;VYC95]P='(\9F]O,3X@;VYC95]P=')?=#L-"B @#0H@('9O:60@=VAA M=&5V97(H*2![#0H@(" @<W1D.CIP<FEN=&8H(B@E<"EF;V\R.CIW:&%T979E M<B@I.UQN(BP@*'9O:60J*71H:7,I.PT*(" @(&9U;F-A7V9O<E]M=6QT:7!L M95]T:')E861S*"D[#0H@('T@( T*(" -"B @9F]O,B@I('L@#0H@(" @<W1A M=&EC(&9O;S$Z.F]N8V5?<'1R7W0Z.F1E9FEN95]03T1?="!S7V9O;SL@(" @ M(" @( T*(" @(&9O;S$Z.F]N8V5?<'1R7W0@;7EF;V\Q*'-?9F]O*3L-"B @ M("!I9B H;7EF;V\Q*2![#0H@(" @("!M>69O;S$M/G=H871E=F5R*"D[#0H@ M(" @?2 @#0H@(" @(" -"B @("!S=&0Z.G!R:6YT9B@B*"5P*69O;S(Z.F9O M;S(H*3M<;B(L("AV;VED*BET:&ES*3L-"B @?2 @#0H@( T*("!^9F]O,B@I M('L@<W1D.CIP<FEN=&8H(B@E<"EF;V\R.CI^9F]O,B@I.UQN(BP@*'9O:60J M*71H:7,I.R!]#0I].PT*#0H-"G-T<G5C="!F;V\S('L@#0H@('1Y<&5D968@ M871O;6EC.CIO;F-E7W!T<CQF;V\S/B!O;F-E7W!T<E]T.PT*(" -"B @<W1A M=&EC(&9O;S$Z.F]N8V5?<'1R7W0Z.F1E9FEN95]03T1?="!S7V9O;S$[(" - M"B @#0H@('9O:60@=VAA=&5V97(H*2![#0H@(" @<W1D.CIP<FEN=&8H(B@E M<"EF;V\S.CIW:&%T979E<B@I.UQN(BP@*'9O:60J*71H:7,I.PT*(" @(&9O M;S$Z.F]N8V5?<'1R7W0@;7EF;V\Q*'-?9F]O,2D[#0H@(" @:68@*&UY9F]O M,2D@>PT*(" @(" @;7EF;V\Q+3YW:&%T979E<B@I.PT*(" @('T@( T*(" @ M(&9U;F-A7V9O<E]M=6QT:7!L95]T:')E861S*"D[(" @( T*("!](" -"B @ M#0H@(&9O;S,H*2![( T*(" @('-T871I8R!F;V\R.CIO;F-E7W!T<E]T.CID M969I;F5?4$]$7W0@<U]F;V\R.R @( T*(" @( T*(" @(&9O;S(Z.F]N8V5? M<'1R7W0@;7EF;V\R*'-?9F]O,BDL(&UY9F]O,F$[#0H@(" @:68@*&UY9F]O M,BD@>PT*(" @(" @;7EF;V\R+3YW:&%T979E<B@I.R @(" @(" @(" @(" @ M(" -"B @(" @(&9O;S$Z.F]N8V5?<'1R7W0@;7EF;V\Q*'-?9F]O,2D[#0H@ M(" @("!M>69O;S)A(#T@;7EF;V\R.PT*(" @(" @:68@*&UY9F]O,2D@>PT* M(" @(" @("!M>69O;S$M/G=H871E=F5R*"D[#0H@(" @("!](" @(" @(" @ M(" @(" @(" @#0H@(" @("!M>69O;S)A+3YW:&%T979E<B@I.PT*(" @('T@ M(" @#0H-"B @("!S=&0Z.G!R:6YT9B@B*"5P*69O;S,Z.F9O;S,H*3M<;B(L M("AV;VED*BET:&ES*3L-"B @?2 @#0H@( T*("!^9F]O,R@I('L@#0H@(" @ M=VAA=&5V97(H*3L-"B @("!S=&0Z.G!R:6YT9B@B*"5P*69O;S,Z.GYF;V\S M*"D[7&XB+" H=F]I9"HI=&AI<RD[( T*("!]#0I].R @9F]O,3HZ;VYC95]P M=')?=#HZ9&5F:6YE7U!/1%]T(&9O;S,Z.G-?9F]O,3L-"@T*#0IS=&%T:6,@ M=F]I9"!F=6YC8E]F;W)?;75L=&EP;&5?=&AR96%D<R@I('L-"B @9G5N8V%? M9F]R7VUU;'1I<&QE7W1H<F5A9',H*3L@(" @#0H@('-T871I8R!F;V\R.CIO M;F-E7W!T<E]T.CID969I;F5?4$]$7W0@<U]M>69O;S)A.R @(" -"B @9G5N M8V%?9F]R7VUU;'1I<&QE7W1H<F5A9',H*3L-"B @#0H@(&9O;S(Z.F]N8V5? M<'1R7W0@<VUY9F]O82AS7VUY9F]O,F$I+"!S;7EF;V]A83L-"B @:68@*'-M M>69O;V$I('L-"B @("!S;7EF;V]A+3YW:&%T979E<B@I.PT*("!](" @(" @ M( T*(" -"B @>PT*(" @(&9U;F-A7V9O<E]M=6QT:7!L95]T:')E861S*"D[ M#0H@(" @#0H@(" @<W1A=&EC(&9O;S(Z.F]N8V5?<'1R7W0Z.F1E9FEN95]0 M3T1?="!S7VUY9F]O,F([#0H@(" @#0H@(" @9F]O,2!M>69O;S$[(" @(" - M"B @(" -"B @("!F;V\R.CIO;F-E7W!T<E]T('-M>69O;V$H<U]M>69O;S)A M*3L-"B @("!I9B H<VUY9F]O82D@>PT*(" @(" @<VUY9F]O86$@/2!S;7EF M;V]A.PT*(" @(" @<VUY9F]O86$M/G=H871E=F5R*"D[#0H@(" @?2 @(" @ M#0H@(" @(" @(" @(" -"B @("!F;V\R(&UY9F]O,CL@(" -"B @(" @(" @ M(" @(" @#0H@(" @>PT*(" @(" @;7EF;V\Q+G=H871E=F5R*"D[#0H@(" @ M(" -"B @(" @(&9O;S(Z.F]N8V5?<'1R7W0@<VUY9F]O,BAS7VUY9F]O,F$I M.PT*(" @(" @:68@*'-M>69O;S(I('L-"B @(" @(" @<VUY9F]O,BT^=VAA M=&5V97(H*3L-"B @(" @('T@(" @(" -"B @(" @( T*(" @(" @;7EF;V\R M+G=H871E=F5R*"D[(" @( T*(" @(" @#0H@(" @("!F=6YC85]F;W)?;75L M=&EP;&5?=&AR96%D<R@I.R @(" -"B @(" @(" @(" @(" @(" @(" @(" @ M( T*(" @(" @>PT*(" @(" @("!F;V\S(&UY9F]O,SL-"B @(" @(" @;7EF M;V\S+G=H871E=F5R*"D[(" @( T*(" @(" @(" @(" @#0H@(" @(" @(&9O M;S(@;7EF;V\R.PT*(" @(" @("!M>69O;S(N=VAA=&5V97(H*3L@(" @(" @ M(" -"B @(" @('T-"B @(" @( T*(" @(" @;7EF;V\R+G=H871E=F5R*"D[ M(" @(" @( T*(" @('T-"B @(" -"B @("!F;V\S(&UY9F]O,SL-"B @(" - M"B @("!F;V\R.CIO;F-E7W!T<E]T('-M>69O;S(H<U]M>69O;S)B*3L-"B @ M("!I9B H<VUY9F]O,BD@>PT*(" @(" @<VUY9F]O,BT^=VAA=&5V97(H*3L- M"B @(" @(&9U;F-A7V9O<E]M=6QT:7!L95]T:')E861S*"D[#0H@(" @("!M M>69O;S,N=VAA=&5V97(H*3L@( T*(" @('T@( T*(" @( T*(" @(&9U;F-A M7V9O<E]M=6QT:7!L95]T:')E861S*"D[#0H@('T-"B @#0H@(&EF("AS;7EF M;V]A82D@>PT*(" @('-M>69O;V%A+3YW:&%T979E<B@I.PT*("!](" @(" @ M#0H@( T*("!F=6YC85]F;W)?;75L=&EP;&5?=&AR96%D<R@I.PT*?0T*#0H- M"FEN="!M86EN*&EN="!A<F=C+"!C:&%R("IA<F=V6UTI#0I[#0H@(&9U;F-A M7V9O<E]M=6QT:7!L95]T:')E861S*"D[(" @( T*("!F=6YC8E]F;W)?;75L M=&EP;&5?=&AR96%D<R@I.PT*("!F=6YC85]F;W)?;75L=&EP;&5?=&AR96%D M<R@I.R @(" -"B @9G5N8V)?9F]R7VUU;'1I<&QE7W1H<F5A9',H*3L@( T* 6#0H@(')E='5R;B P.PT*?0T*#0H-"@`` ` end