Closer to an IDE extension

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Closer to an IDE extension

Bill Schwab
Blair,

I'm writing an IDE extension to fire up my code generator on a selection of
instance variable names, with the goal of writing a constructor method and
an instance side set method.  The brain-dead obvious code is often useful,
so it seems a good place to start.

The next step in my coding is to find the 'classes' view - a tree view.
Problem: the CHB view resource has a reference view named 'classes', and I
get it instead of the tree view that appears inside it.  Ok, I can use
something like

  ( shell view viewNamed:'classes' ) viewNamed:'classes'

(perhaps with a #referee send - haven't tried it yet).  Is that the intent?

Also, I'm starting to wonder whether extensions should be enabled by class
initialization as implied by your sample.  It would be very easy for one to
break, and debugging something that extends the debugger would be, ummmm,
interesting<g>.  It's even fun when it extends the CHB.

One solution might be to have all extensions started by something like
#activateExtension which could be tried after making a backup of a newly
built image.  Comments?

Have a good one,

Bill


--
Wilhelm K. Schwab, Ph.D.
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Closer to an IDE extension

Steve Alan Waring
Hi Bill,

>   ( shell view viewNamed:'classes' ) viewNamed:'classes'
>
> (perhaps with a #referee send - haven't tried it yet).  Is that the
intent?

I have been playing around with IDE Extensions the past couple of days, and
I have ended up with a few methods that look like that :) I have found it a
bit cleaner to locate a view by following the presenter chain, and then
asking for the view.

> break, and debugging something that extends the debugger would be, ummmm,
> interesting<g>.  It's even fun when it extends the CHB.

This was a concern for me. My solution was to add an error handler around
the code that accesses the view resource, that prints a notification to the
Transcript and aborts the attempt to add the extension.

Attached is a package that adds a couple of menu commands for SUnitBrowser.
It has helper methods to get the classes/methods and definitions presenters
for the SB and CHB.

(It will replace the SUnitBrowser>>publishedAspects method when installed.
The original is in the package comment)

Thoughts and suggestions on making this more robust welcomed!
Thanks,
Steve


begin 666 SUnitBrowserIDEExtension.pac
M?"!P86-K86=E('P-"G!A8VMA9V4@.CT@4&%C:V%G92!N86UE.B G4U5N:71"
M<F]W<V5R241%17AT96YS:6]N)RX-"G!A8VMA9V4@<&%X5F5R<VEO;CH@,#L-
M"@EB87-I8T-O;6UE;G0Z("=356YI=$)R;W=S97(@241%($5X=&5N<VEO;@T*
M4W1E=F4@5V%R:6YG(#(P,#(-"CT]/3T]/3T]/3T-"BU!9&1S(&$@(E)U;B!4
M97-T<R(@8V]M;6%N9"!T;R!T:&4@=&]P(&]F('1H92!30B!A;F0@0TA"(&-L
M87-S97,@8V]N=&5X="!M96YU+@T*+4%D9',@82 B4W1E<"!497-T(B!C;VUM
M86YD('1O('1H92!30B!A;F0@0TA"(&UE=&AO9',@8V]N=&5X="!M96YU+@T*
M#0H]/3T]/3T]/3T]#0H-"E1H92!E>'1E;G-I;VYS(&%R92!D:7-A8FQE9"!B
M>2!D969A=6QT+@T*5&\@96YA8FQE+"!U<V4@=&AE(%-5;FET0G)O=W-E<B!0
M=6)L:7-H961!<W!E8W0@;W!T:6]N<RX-"D]N8V4@96YA8FQE9"P@=&AE($E$
M12!%>'1E;G-I;VYS('=I;&P@8F4@861D960@=&\@;F5W;'D@;W!E;F5D(%-H
M96QL<RX-"@T*/3T]/3T]/3T]/0T*5&AI<R!M971H;V0@=V%S(&]V97)W<FET
M=&5N.@T*#0IP=6)L:7-H961!<W!E8W1S#0H)(D%N<W=E<B!A(%-E="!O9B!T
M:&4@87-P96-T<R!P=6)L:7-H960@8GD@(&EN<W1A;F-E<R!O9B!T:&4@<F5C
M96EV97(B#0H-"@E\(&%S<&5C=',@? T*"6%S<&5C=',@.CT@<W5P97(@<'5B
M;&ES:&5D07-P96-T<RX-"@EA<W!E8W1S#0H)"6%D9#H@*$%S<&5C="!B;V]L
M96%N.B C<VAO=T%L;"D[#0H)"6%D9#H@*$%S<&5C="!B;V]L96%N.B C<VAO
M=U-T871U<T)A8VMG<F]U;F1#;VQO<G,I+@T*#0H)7F%S<&5C=',-"B<N#0H-
M"@T*<&%C:V%G92!C;&%S<TYA;65S#0H)861D.B C4U5N:71"<F]W<V5R241%
M17AT96YS:6]N.PT*"7EO=7)S96QF+@T*#0IP86-K86=E(&UE=&AO9$YA;65S
M#0H)861D.B C365T:&]D0G)O=W-E<B M/B C<W1E<%1E<W0[#0H)861D.B G
M4U5N:71"<F]W<V5R(&-L87-S)R M/B C:61E17AT96YS:6]N<SL-"@EA9&0Z
M("=356YI=$)R;W=S97(@8VQA<W,G("T^("-P=6)L:7-H961!<W!E8W1S.PT*
M"7EO=7)S96QF+@T*#0IP86-K86=E(&)I;F%R>4=L;V)A;$YA;65S.B H4V5T
M(&YE=PT*"7EO=7)S96QF*2X-"@T*<&%C:V%G92!G;&]B86Q!;&EA<V5S.B H
M4V5T(&YE=PT*"7EO=7)S96QF*2X-"@T*<&%C:V%G92!A;&Q297-O=7)C94YA
M;65S.B H4V5T(&YE=PT*"7EO=7)S96QF*2X-"@T*<&%C:V%G92!S9710<F5R
M97%U:7-I=&5S.B H261E;G1I='E3970@;F5W#0H)861D.B G+BY<+BY<3V)J
M96-T($%R='-<1&]L<&AI;EQ)1$5<0F%S95Q$979E;&]P;65N="!3>7-T96TG
M.PT*"6%D9#H@)RXN7"XN7$]B:F5C="!!<G1S7$1O;'!H:6Y<0F%S95Q$;VQP
M:&EN)SL-"@EA9&0Z("<N+EPN+EQ/8FIE8W0@07)T<UQ$;VQP:&EN7$U64%Q"
M87-E7$1O;'!H:6X@3590($)A<V4G.PT*"6%D9#H@)RXN7"XN7$]B:F5C="!!
M<G1S7$1O;'!H:6Y<241%7%-T86YD87)D($5D:71I;VY<4W1A;F1A<F0@161I
M=&EO;B!4;V]L<R<[#0H)861D.B G4U5N:71"<F]W<V5R)SL-"@EY;W5R<V5L
M9BDN#0H-"G!A8VMA9V4A#0H-"B)#;&%S<R!$969I;FET:6]N<R(A#0H-"D]B
M:F5C="!S=6)C;&%S<SH@(U-5;FET0G)O=W-E<DE$145X=&5N<VEO;@T*"6EN
M<W1A;F-E5F%R:6%B;&5.86UE<SH@)R<-"@EC;&%S<U9A<FEA8FQE3F%M97,Z
M("<G#0H)<&]O;$1I8W1I;VYA<FEE<SH@)R<-"@EC;&%S<TEN<W1A;F-E5F%R
M:6%B;&5.86UE<SH@)V5N86)L94-(0E)U;E1E<W1S1FER<W0@96YA8FQE4T)2
M=6Y497-T<T9I<G-T(&5N86)L94UE=&AO9%-T97 G(0T*#0HB1VQO8F%L($%L
M:6%S97,B(0T*#0H-"B),;V]S92!-971H;V1S(B$-"@T*(4UE=&AO9$)R;W=S
M97(@"6%D9$ET96TZ("A#;VUM86YD
M365N=4ET96T@8V]M;6%N9$1E<V-R:7!T:6]N.B H0VQO<V5D0V]M;6%N9$1E
M<V-R:7!T:6]N( T*"0D)"0D)"6-O;6UA;F0Z("-S=&5P5&5S= T*"0D)"0D)
M"61E<V-R:7!T:6]N.B G4W1E<"!);G1O(%1E<W0G#0H)"0D)"0D)<75E<GE"
M;&]C:SH@#0H)"0D)"0D)"5LZ84-O;6UA;F11=65R>2!\( T*"0D)"0D)"0E\
M(&UE=&AO9"!\#0H)"0D)"0D)"6%#;VUM86YD475E<GD@<F5C96EV97(Z(&UE
M=&AO9'-0<F5S96YT97(N#0H)"0D)"0D)"6UE=&AO9" Z/2!M971H;V1S4')E
M<V5N=&5R('-E;&5C=&EO;D]R3FEL+@T*"0D)"0D)"0EA0V]M;6%N9%%U97)Y
M(&ES16YA8FQE9#H@*&UE=&AO9"!N;W1.:6P@#0H)"0D)"0D)"0D)"6%N9#H@
M6VUE=&AO9"!M971H;V1#;&%S<R!A;&Q3=7!E<F-L87-S97,@86YY4V%T:7-F
M>3H@6SIE86-H('P@96%C:"!N86UE(#T@(U1E<W1#87-E75TI70T*"0D)"0D)
M"7)E8V5I=F5R.B!M971H;V1S4')E<V5N=&5R*2DA#0H-"F5N86)L94-(0E)U
M;E1E<W1S1FER<W0-"@DB06YS=V5R(&EF(&YE=R!#2$(G<R!S:&]U;&0@:&%V
M92!A("=2=6X@5&5S=',G(&-O;6UA;F0@861D960@=&\@=&AE( T*"71O<"!O
M9B!T:&5I<B!C;&%S<R!P86YE(&-O;G1E>'0@;65N=2(-"@T*"5YE;F%B;&5#
M2$)2=6Y497-T<T9I<G-T(0T*#0IE;F%B;&5#2$)2=6Y497-T<T9I<G-T.B!A
M0F]O;&5A;@T*"65N86)L94-(0E)U;E1E<W1S1FER<W0@.CT@84)O;VQE86XA
M#0H-"F5N86)L94UE=&AO9%-T97 -"@DB06YS=V5R(&EF(&YE=R!"<F]W<V5R
M<R!S:&]U;&0@:&%V92!A("=3=&5P($EN=&\@5&5S=',G(&-O;6UA;F0@861D
M960@=&\@=&AE:7(@365T:"6%D9$ET96TZ("A#;VUM86YD
M365N=4ET96T@8V]M;6%N9$1E<V-R:7!T:6]N.B H0VQO<V5D0V]M;6%N9$1E
M<V-R:7!T:6]N( T*"0D)"0D)"6-O;6UA;F0Z("-S=&5P5&5S= T*"0D)"0D)
M"61E<V-R:7!T:6]N.B G4W1E<"!);G1O(%1E<W0G#0H)"0D)"0D)<75E<GE"
M;&]C:SH@#0H)"0D)"0D)"5LZ84-O;6UA;F11=65R>2!\( T*"0D)"0D)"0E\
M(&UE=&AO9"!\#0H)"0D)"0D)"6%#;VUM86YD475E<GD@<F5C96EV97(Z(&UE
M=&AO9'-0<F5S96YT97(N#0H)"0D)"0D)"6UE=&AO9" Z/2!M971H;V1S4')E
M<V5N=&5R('-E;&5C=&EO;D]R3FEL+@T*"0D)"0D)"0EA0V]M;6%N9%%U97)Y
M(&ES16YA8FQE9#H@*&UE=&AO9"!N;W1.:6P@#0H)"0D)"0D)"0D)"6%N9#H@
M6VUE=&AO9"!M971H;V1#;&%S<R!A;&Q3=7!E<F-L87-S97,@86YY4V%T:7-F
M>3H@6SIE86-H('P@96%C:"!N86UE(#T@(U1E<W1#87-E75TI70T*"0D)"0D)
M"7)E8V5I=F5R.B!M971H;V1S4')E<V5N=&5R*2DA#0H-"F5N86)L94-(0E)U
M;E1E<W1S1FER<W0-"@DB06YS=V5R(&EF(&YE=R!#2$(G<R!S:&]U;&0@:&%V
M92!A("=2=6X@5&5S=',G(&-O;6UA;F0@861D960@=&\@=&AE( T*"71O<"!O
M9B!T:&5I<B!C;&%S<R!P86YE(&-O;G1E>'0@;65N=2(-"@T*"5YE;F%B;&5#
M2$)2=6Y497-T<T9I<G-T(0T*#0IE;F%B;&5#2$)2=6Y497-T<T9I<G-T.B!A
M0F]O;&5A;@T*"65N86)L94-(0E)U;E1E<W1S1FER<W0@.CT@84)O;VQE86XA
M#0H-"F5N86)L94UE=&AO9%-T97 -"@DB06YS=V5R(&EF(&YE=R!"<F]W<V5R
M<R!S:&]U;&0@:&%V92!A("=3=&5P($EN=&\@5&5S=',G(&-O;6UA;F0@861D
M960@=&\@=&AE:7(@365T:"6%D9$ET96TZ("A#;VUM86YD
M365N=4ET96T@8V]M;6%N9$1E<V-R:7!T:6]N.B H0VQO<V5D0V]M;6%N9$1E
M<V-R:7!T:6]N( T*"0D)"0D)"6-O;6UA;F0Z("-S=&5P5&5S= T*"0D)"0D)
M"61E<V-R:7!T:6]N.B G4W1E<"!);G1O(%1E<W0G#0H)"0D)"0D)<75E<GE"
M;&]C:SH@#0H)"0D)"0D)"5LZ84-O;6UA;F11=65R>2!\( T*"0D)"0D)"0E\
M(&UE=&AO9"!\#0H)"0D)"0D)"6%#;VUM86YD475E<GD@<F5C96EV97(Z(&UE
M=&AO9'-0<F5S96YT97(N#0H)"0D)"0D)"6UE=&AO9" Z/2!M971H;V1S4')E
M<V5N=&5R('-E;&5C=&EO;D]R3FEL+@T*"0D)"0D)"0EA0V]M;6%N9%%U97)Y
M(&ES16YA8FQE9#H@*&UE=&AO9"!N;W1.:6P@#0H)"0D)"0D)"0D)"6%N9#H@
M6VUE=&AO9"!M971H;V1#;&%S<R!A;&Q3=7!E<F-L87-S97,@86YY4V%T:7-F
M>3H@6SIE86-H('P@96%C:"!N86UE(#T@(U1E<W1#87-E75TI70T*"0D)"0D)
M"7)E8V5I=F5R.B!M971H;V1S4')E<V5N=&5R*2DA#0H-"F5N86)L94-(0E)U
M;E1E<W1S1FER<W0-"@DB06YS=V5R(&EF(&YE=R!#2$(G<R!S:&]U;&0@:&%V
M92!A("=2=6X@5&5S=',G(&-O;6UA;F0@861D960@=&\@=&AE( T*"71O<"!O
M9B!T:&5I<B!C;&%S<R!P86YE(&-O;G1E>'0@;65N=2(-"@T*"5YE;F%B;&5#
M2$)2=6Y497-T<T9I<G-T(0T*#0IE;F%B;&5#2$)2=6Y497-T<T9I<G-T.B!A
M0F]O;&5A;@T*"65N86)L94-(0E)U;E1E<W1S1FER<W0@.CT@84)O;VQE86XA
M#0H-"F5N86)L94UE=&AO9%-T97 -"@DB06YS=V5R(&EF(&YE=R!"<F]W<V5R
M<R!S:&]U;&0@:&%V92!A("=3=&5P($EN=&\@5&5S=',G(&-O;6UA;F0@861D
M960@=&\@=&AE:7(@365T:"6%D9$ET96TZ("A#;VUM86YD
M365N=4ET96T@8V]M;6%N9$1E<V-R:7!T:6]N.B H0VQO<V5D0V]M;6%N9$1E
M<V-R:7!T:6]N( T*"0D)"0D)"6-O;6UA;F0Z("-S=&5P5&5S= T*"0D)"0D)
M"61E<V-R:7!T:6]N.B G4W1E<"!);G1O(%1E<W0G#0H)"0D)"0D)<75E<GE"
M;&]C:SH@#0H)"0D)"0D)"5LZ84-O;6UA;F11=65R>2!\( T*"0D)"0D)"0E\
M(&UE=&AO9"!\#0H)"0D)"0D)"6%#;VUM86YD475E<GD@<F5C96EV97(Z(&UE
M=&AO9'-0<F5S96YT97(N#0H)"0D)"0D)"6UE=&AO9" Z/2!M971H;V1S4')E
M<V5N=&5R('-E;&5C=&EO;D]R3FEL+@T*"0D)"0D)"0EA0V]M;6%N9%%U97)Y
M(&ES16YA8FQE9#H@*&UE=&AO9"!N;W1.:6P@#0H)"0D)"0D)"0D)"6%N9#H@
M6VUE=&AO9"!M971H;V1#;&%S<R!A;&Q3=7!E<F-L87-S97,@86YY4V%T:7-F
M>3H@6SIE86-H('P@96%C:"!N86UE(#T@(U1E<W1#87-E75TI70T*"0D)"0D)
M"7)E8V5I=F5R.B!M971H;V1S4')E<V5N=&5R*2DA#0H-"F5N86)L94-(0E)U
M;E1E<W1S1FER<W0-"@DB06YS=V5R(&EF(&YE=R!#2$(G<R!S:&]U;&0@:&%V
M92!A("=2=6X@5&5S=',G(&-O;6UA;F0@861D960@=&\@=&AE( T*"71O<"!O
M9B!T:&5I<B!C;&%S<R!P86YE(&-O;G1E>'0@;65N=2(-"@T*"5YE;F%B;&5#
M2$)2=6Y497-T<T9I<G-T(0T*#0IE;F%B;&5#2$)2=6Y497-T<T9I<G-T.B!A
M0F]O;&5A;@T*"65N86)L94-(0E)U;E1E<W1S1FER<W0@.CT@84)O;VQE86XA
M#0H-"F5N86)L94UE=&AO9%-T97 -"@DB06YS=V5R(&EF(&YE=R!"<F]W<V5R
M<R!S:&]U;&0@:&%V92!A("=3=&5P($EN=&\@5&5S=',G(&-O;6UA;F0@861D
M960@=&\@=&AE:7(@365T:


Reply | Threaded
Open this post in threaded view
|

Re: Closer to an IDE extension

Steve Alan Waring
In reply to this post by Bill Schwab
Hi Bill,

>   ( shell view viewNamed:'classes' ) viewNamed:'classes'
>
> (perhaps with a #referee send - haven't tried it yet).  Is that the
intent?

I have been playing around with IDE Extensions the past couple of days, and
I have ended up with a few methods that look like that :) I have found it a
bit cleaner to locate a view by following the presenter chain, and then
asking for the view.

> break, and debugging something that extends the debugger would be, ummmm,
> interesting<g>.  It's even fun when it extends the CHB.

This was a concern for me. My solution was to add an error handler around
the code that accesses the view resource, that prints a notification to the
Transcript and aborts the attempt to add the extension.

Attached is a package that adds a couple of menu commands for SUnitBrowser.
It has helper methods to get the classes/methods and definitions presenters
for the SB and CHB.

(It will replace the SUnitBrowser>>publishedAspects method when installed.
The original is in the package comment)

Thoughts and suggestions on making this more robust welcomed!
Thanks,
Steve


begin 666 SUnitBrowserIDEExtension.pac
M?"!P86-K86=E('P-"G!A8VMA9V4@.CT@4&%C:V%G92!N86UE.B G4U5N:71"
M<F]W<V5R241%17AT96YS:6]N)RX-"G!A8VMA9V4@<&%X5F5R<VEO;CH@,#L-
M"@EB87-I8T-O;6UE;G0Z("=356YI=$)R;W=S97(@241%($5X=&5N<VEO;@T*
M4W1E=F4@5V%R:6YG(#(P,#(-"CT]/3T]/3T]/3T-"BU!9&1S(&$@(E)U;B!4
M97-T<R(@8V]M;6%N9"!T;R!T:&4@=&]P(&]F('1H92!30B!A;F0@0TA"(&-L
M87-S97,@8V]N=&5X="!M96YU+@T*+4%D9',@82 B4W1E<"!497-T(B!C;VUM
M86YD('1O('1H92!30B!A;F0@0TA"(&UE=&AO9',@8V]N=&5X="!M96YU+@T*
M#0H]/3T]/3T]/3T]#0H-"E1H92!E>'1E;G-I;VYS(&%R92!D:7-A8FQE9"!B
M>2!D969A=6QT+@T*5&\@96YA8FQE+"!U<V4@=&AE(%-5;FET0G)O=W-E<B!0
M=6)L:7-H961!<W!E8W0@;W!T:6]N<RX-"D]N8V4@96YA8FQE9"P@=&AE($E$
M12!%>'1E;G-I;VYS('=I;&P@8F4@861D960@=&\@;F5W;'D@;W!E;F5D(%-H
M96QL<RX-"@T*/3T]/3T]/3T]/0T*5&AI<R!M971H;V0@=V%S(&]V97)W<FET
M=&5N.@T*#0IP=6)L:7-H961!<W!E8W1S#0H)(D%N<W=E<B!A(%-E="!O9B!T
M:&4@87-P96-T<R!P=6)L:7-H960@8GD@(&EN<W1A;F-E<R!O9B!T:&4@<F5C
M96EV97(B#0H-"@E\(&%S<&5C=',@? T*"6%S<&5C=',@.CT@<W5P97(@<'5B
M;&ES:&5D07-P96-T<RX-"@EA<W!E8W1S#0H)"6%D9#H@*$%S<&5C="!B;V]L
M96%N.B C<VAO=T%L;"D[#0H)"6%D9#H@*$%S<&5C="!B;V]L96%N.B C<VAO
M=U-T871U<T)A8VMG<F]U;F1#;VQO<G,I+@T*#0H)7F%S<&5C=',-"B<N#0H-
M"@T*<&%C:V%G92!C;&%S<TYA;65S#0H)861D.B C4U5N:71"<F]W<V5R241%
M17AT96YS:6]N.PT*"7EO=7)S96QF+@T*#0IP86-K86=E(&UE=&AO9$YA;65S
M#0H)861D.B C365T:&]D0G)O=W-E<B M/B C<W1E<%1E<W0[#0H)861D.B G
M4U5N:71"<F]W<V5R(&-L87-S)R M/B C:61E17AT96YS:6]N<SL-"@EA9&0Z
M("=356YI=$)R;W=S97(@8VQA<W,G("T^("-P=6)L:7-H961!<W!E8W1S.PT*
M"7EO=7)S96QF+@T*#0IP86-K86=E(&)I;F%R>4=L;V)A;$YA;65S.B H4V5T
M(&YE=PT*"7EO=7)S96QF*2X-"@T*<&%C:V%G92!G;&]B86Q!;&EA<V5S.B H
M4V5T(&YE=PT*"7EO=7)S96QF*2X-"@T*<&%C:V%G92!A;&Q297-O=7)C94YA
M;65S.B H4V5T(&YE=PT*"7EO=7)S96QF*2X-"@T*<&%C:V%G92!S9710<F5R
M97%U:7-I=&5S.B H261E;G1I='E3970@;F5W#0H)861D.B G+BY<+BY<3V)J
M96-T($%R='-<1&]L<&AI;EQ)1$5<0F%S95Q$979E;&]P;65N="!3>7-T96TG
M.PT*"6%D9#H@)RXN7"XN7$]B:F5C="!!<G1S7$1O;'!H:6Y<0F%S95Q$;VQP
M:&EN)SL-"@EA9&0Z("<N+EPN+EQ/8FIE8W0@07)T<UQ$;VQP:&EN7$U64%Q"
M87-E7$1O;'!H:6X@3590($)A<V4G.PT*"6%D9#H@)RXN7"XN7$]B:F5C="!!
M<G1S7$1O;'!H:6Y<241%7%-T86YD87)D($5D:71I;VY<4W1A;F1A<F0@161I
M=&EO;B!4;V]L<R<[#0H)861D.B G4U5N:71"<F]W<V5R)SL-"@EY;W5R<V5L
M9BDN#0H-"G!A8VMA9V4A#0H-"B)#;&%S<R!$969I;FET:6]N<R(A#0H-"D]B
M:F5C="!S=6)C;&%S<SH@(U-5;FET0G)O=W-E<DE$145X=&5N<VEO;@T*"6EN
M<W1A;F-E5F%R:6%B;&5.86UE<SH@)R<-"@EC;&%S<U9A<FEA8FQE3F%M97,Z
M("<G#0H)<&]O;$1I8W1I;VYA<FEE<SH@)R<-"@EC;&%S<TEN<W1A;F-E5F%R
M:6%B;&5.86UE<SH@)V5N86)L94-(0E)U;E1E<W1S1FER<W0@96YA8FQE4T)2
M=6Y497-T<T9I<G-T(&5N86)L94UE=&AO9%-T97 G(0T*#0HB1VQO8F%L($%L
M:6%S97,B(0T*#0H-"B),;V]S92!-971H;V1S(B$-"@T*(4UE=&AO9$)R;W=S
M97(@;65T:&]D<T9O<B$-"@T*<W1E<%1E<W0-"@DB0W)E871E(&$@5&5S=$-A
M<V4@86YD('-T97 @:6YT;R!I="(-"@T*"2-S=6YI=$(N#0H)*'-E;&8@<V5L
M96-T:6]N(&UE=&AO9$-L87-S('-E;&5C=&]R.B!S96QF('-E;&5C=&EO;B!S
M96QE8W1O<BD@<W1E<"$@(0T*(4UE=&AO9$)R;W=S97(@8V%T96=O<FEE<T9O
M<CH@(W-T97!497-T(6-O;6UA;F1S(7!U8FQI8R$@(0T*#0HA4U5N:71"<F]W
M<V5R(&-L87-S(&UE=&AO9'-&;W(A#0H-"FED945X=&5N<VEO;G,-"@E>4U5N
M:71"<F]W<V5R241%17AT96YS:6]N(0T*#0IP=6)L:7-H961!<W!E8W1S#0H)
M(D%N<W=E<B!A(%-E="!O9B!T:&4@87-P96-T<R!P=6)L:7-H960@8GD@(&EN
M<W1A;F-E<R!O9B!T:&4@<F5C96EV97(B#0H-"@E\(&%S<&5C=',@? T*"6%S
M<&5C=',@.CT@<W5P97(@<'5B;&ES:&5D07-P96-T<RX-"@EA<W!E8W1S#0H)
M"6%D9#H@*$%S<&5C="!B;V]L96%N.B C<VAO=T%L;"D[#0H)"6%D9#H@*$%S
M<&5C="!B;V]L96%N.B C<VAO=U-T871U<T)A8VMG<F]U;F1#;VQO<G,I.PT*
M"0EA9&0Z("A!<W!E8W0@;F%M93H@(VED945X=&5N<VEO;G,I(&)E4F5A9$]N
M;'DN#0H)7F%S<&5C=',A("$-"B%356YI=$)R;W=S97(@8VQA<W,@8V%T96=O
M<FEE<T9O<CH@(VED945X=&5N<VEO;G,A86-C97-S:6YG(7!U8FQI8R$@(0T*
M(5-5;FET0G)O=W-E<B!C;&%S<R!C871E9V]R:65S1F]R.B C<'5B;&ES:&5D
M07-P96-T<R%D979E;&]P;65N="%P=6)L:6,A("$-"@T*(D5N9"!O9B!P86-K
M86=E(&1E9FEN:71I;VXB(0T*#0HB4V]U<F-E($=L;V)A;',B(0T*#0HB0VQA
M<W-E<R(A#0H-"E-5;FET0G)O=W-E<DE$145X=&5N<VEO;B!G=6ED.B H1U5)
M1"!F<F]M4W1R:6YG.B G>S@P13=&,T8R+44W13(M-$1%0RTY,S<R+48V1C4P
M13="-$%&-GTG*2$-"E-5;FET0G)O=W-E<DE$145X=&5N<VEO;B!C;VUM96YT
M.B G)R$-"B%356YI=$)R;W=S97))1$5%>'1E;G-I;VX@8V%T96=O<FEE<T9O
M<D-L87-S(4ME<FYE;"U/8FIE8W1S(2 A#0HA4U5N:71"<F]W<V5R241%17AT
M96YS:6]N(&-L87-S(&UE=&AO9'-&;W(A#0H-"F%D9%)U;E1E<W1S365N=3H@
M8VQA<W-E<TUE;G4@<')E<V5N=&5R.B!C;&%S<V5S4')E<V5N=&5R#0H)(E1H
M92!Q=65R>4)L;V-K(&ES(&$@8W5T(&%N9"!P87-T92!F<F]M($-L87-S4V5L
M96-T;W(N#0H)270@=V%S(&YE8V5S<V%R>2!T;R!S970@=&AE(')E8V5I=F5R
M(&EN=&\@=&AE(&-O;6UA;F11=65R>2 -"@D)*'=H:6-H(&AA<R!A('-I;6EL
M87(@969F96-T('1O("-Q=65R>4-O;6UA;F0@86YS=V5R:6YG('1R=64I(@T*
M#0H)?"!M96YU271E;2!\#0H);65N=4ET96T@.CT@0V]M;6%N9$UE;G5)=&5M
M(&-O;6UA;F1$97-C<FEP=&EO;CH@*$-L;W-E9$-O;6UA;F1$97-C<FEP=&EO
M;B -"@D)"0D)"6-O;6UA;F0Z("-R=6Y497-T<PT*"0D)"0D)9&5S8W)I<'1I
M;VXZ("=2=6X@5&5S=',G#0H)"0D)"0EQ=65R>4)L;V-K.B -"@D)"0D)"0E;
M.F%#;VUM86YD475E<GD@?" -"@D)"0D)"0EA0V]M;6%N9%%U97)Y(')E8V5I
M=F5R.B!C;&%S<V5S4')E<V5N=&5R+@T*"0D)"0D)"6%#;VUM86YD475E<GD@
M#0H)"0D)"0D)"6ES16YA8FQE9#H@*&-L87-S97-0<F5S96YT97(@=&5S=$)R
M;W=S97)#;&%S<R!N;W1.:[hidden email] -"@D)"0D)"0D)"0D)6WP@8VQA<W,@
M? T*"0D)"0D)"0D)"0EC;&%S<R Z/2!C;&%S<V5S4')E<V5N=&5R('-E;&5C
M=&EO;D]R3FEL+@T*"0D)"0D)"0D)"0EC;&%S<R!N;W1.:[hidden email]!;8VQA
M<W,@86QL4W5P97)C;&%S<V5S(&%N>5-A=&ES9GDZ(%LZ96%C:"!\(&5A8V@@
M;F%M92 ]("-497-T0V%S95U=72DN#0H)"0D)"0D)=')U95T-"@D)"0D)"7)E
M8V5I=F5R.B!C;&%S<V5S4')E<V5N=&5R*2X-"@EC;&%S<V5S365N=2!I;G-E
M<G1)=&5M.B!M96YU271E;2!A=#H@,2$-"@T*861D4W1E<%1E<W1-96YU.B!M
M971H;V1S365N=2!P<F5S96YT97(Z(&UE=&AO9'-0<F5S96YT97(-"@EM971H
M;V1S365N=0T*"0EA9&1397!A<F%T;W([#0H)"6%D9$ET96TZ("A#;VUM86YD
M365N=4ET96T@8V]M;6%N9$1E<V-R:7!T:6]N.B H0VQO<V5D0V]M;6%N9$1E
M<V-R:7!T:6]N( T*"0D)"0D)"6-O;6UA;F0Z("-S=&5P5&5S= T*"0D)"0D)
M"61E<V-R:7!T:6]N.B G4W1E<"!);G1O(%1E<W0G#0H)"0D)"0D)<75E<GE"
M;&]C:SH@#0H)"0D)"0D)"5LZ84-O;6UA;F11=65R>2!\( T*"0D)"0D)"0E\
M(&UE=&AO9"!\#0H)"0D)"0D)"6%#;VUM86YD475E<GD@<F5C96EV97(Z(&UE
M=&AO9'-0<F5S96YT97(N#0H)"0D)"0D)"6UE=&AO9" Z/2!M971H;V1S4')E
M<V5N=&5R('-E;&5C=&EO;D]R3FEL+@T*"0D)"0D)"0EA0V]M;6%N9%%U97)Y
M(&ES16YA8FQE9#H@*&UE=&AO9"!N;W1.:6P@#0H)"0D)"0D)"0D)"6%N9#H@
M6VUE=&AO9"!M971H;V1#;&%S<R!A;&Q3=7!E<F-L87-S97,@86YY4V%T:7-F
M>3H@6SIE86-H('P@96%C:"!N86UE(#T@(U1E<W1#87-E75TI70T*"0D)"0D)
M"7)E8V5I=F5R.B!M971H;V1S4')E<V5N=&5R*2DA#0H-"F5N86)L94-(0E)U
M;E1E<W1S1FER<W0-"@DB06YS=V5R(&EF(&YE=R!#2$(G<R!S:&]U;&0@:&%V
M92!A("=2=6X@5&5S=',G(&-O;6UA;F0@861D960@=&\@=&AE( T*"71O<"!O
M9B!T:&5I<B!C;&%S<R!P86YE(&-O;G1E>'0@;65N=2(-"@T*"5YE;F%B;&5#
M2$)2=6Y497-T<T9I<G-T(0T*#0IE;F%B;&5#2$)2=6Y497-T<T9I<G-T.B!A
M0F]O;&5A;@T*"65N86)L94-(0E)U;E1E<W1S1FER<W0@.CT@84)O;VQE86XA
M#0H-"F5N86)L94UE=&AO9%-T97 -"@DB06YS=V5R(&EF(&YE=R!"<F]W<V5R
M<R!S:&]U;&0@:&%V92!A("=3=&5P($EN=&\@5&5S=',G(&-O;6UA;F0@861D
M960@=&\@=&AE:7(@365T:&]D($QI<W0@(@T*#0H)7F5N86)L94UE=&AO9%-T
M97 A#0H-"F5N86)L94UE=&AO9%-T97 Z(&%";V]L96%N#0H)96YA8FQE365T
M:&]D4W1E<" Z/2!A0F]O;&5A;B$-"@T*96YA8FQE4T)2=6Y497-T<T9I<G-T
M#0H)(D%N<W=E<B!I9B!N97<@4T(G<R!S:&]U;&0@:&%V92!A("=2=6X@5&5S
M=',G(&-O;6UA;F0@861D960@=&\@=&AE( T*"71O<"!O9B!T:&5I<B!C;&%S
M<R!P86YE<R!C;VYT97AT(&UE;G5S(@T*#0H)7F5N86)L95-"4G5N5&5S='-&
M:7)S="$-"@T*96YA8FQE4T)2=6Y497-T<T9I<G-T.B!A0F]O;&5A;@T*"65N
M86)L95-"4G5N5&5S='-&:7)S=" Z/2!A0F]O;&5A;B$-"@T*97AT96YD0TA"
M0VQA<W-E<SH@84-L87-S0G)O=W-E<E-H96QL#0H)(D5A<FQY(&]U="!I9B!N
M;W1H:6YG('1O(&1O+B!!8F]R="!G<F%C969U;&QY(&]N(&%N(&5R<F]R(&QO
M8V%T:6YG('1H92!C;VYT97AT365N=2(-"@T*"7P@;65N=4%R<F%Y('P-"@EE
M;F%B;&5#2$)2=6Y497-T<T9I<G-T(&EF1F%L<V4Z(%M>;FEL72X-"@DH;65N
M=4%R<F%Y(#H]('-E;&8@9V5T0TA"0VQA<W-E<TUE;G4Z(&%#;&%S<T)R;W=S
M97)3:&5L;"D@:7-.:6P@:694<G5E.B!;7FYI;%TN#0H)<V5L9B!A9&12=6Y4
M97-T<TUE;G4Z(&UE;G5!<G)A>2!F:7)S="!P<F5S96YT97(Z(&UE;G5!<G)A
M>2!S96-O;F0A#0H-"F5X=&5N9$-(0D1E9FEN:71I;VYS.B!A0G)O=W-E<E-H
M96QL#0H)(0T*#0IE>'1E;F1#2$)-971H;V1S.B!A0G)O=W-E<E-H96QL#0H)
M(D5A<FQY(&]U="!I9B!N;W1H:6YG('1O(&1O+B!!8F]R="!G<F%C969U;&QY
M(&]N(&%N(&5R<F]R(&QO8V%T:6YG('1H92!C;VYT97AT365N=2(-"@T*"7P@
M;65N=4%R<F%Y('P-"@EE;F%B;&5-971H;V13=&5P(&EF1F%L<V4Z(%M>;FEL
M72X-"@DH;65N=4%R<F%Y(#H]('-E;&8@9V5T0G)O=W-E<DUE=&AO9'--96YU
M.B!A0G)O=W-E<E-H96QL*2!I<TYI;"!I9E1R=64Z(%M>;FEL72X-"@ES96QF
M(&%D9%-T97!497-T365N=3H@;65N=4%R<F%Y(&9I<G-T('!R97-E;G1E<CH@
M;65N=4%R<F%Y('-E8V]N9"$-"@T*97AT96YD4T)#;&%S<V5S.B!A4WES=&5M
M0G)O=W-E<E-H96QL#0H)(D5A<FQY(&]U="!I9B!N;W1H:6YG('1O(&1O+B!!
M8F]R="!G<F%C969U;&QY(&]N(&%N(&5R<F]R(&QO8V%T:6YG('1H92!C;VYT
M97AT365N=2(-"@T*"7P@;65N=4%R<F%Y('P-"@EE;F%B;&530E)U;E1E<W1S
M1FER<W0@:69&86QS93H@6UYN:6Q=+@T*"2AM96YU07)R87D@.CT@<V5L9B!G
M97130D-L87-S97--96YU.B!A4WES=&5M0G)O=W-E<E-H96QL*2!I<TYI;"!I
M9E1R=64Z(%M>;FEL72X-"@ES96QF(&%D9%)U;E1E<W1S365N=3H@;65N=4%R
M<F%Y(&9I<G-T('!R97-E;G1E<CH@;65N=4%R<F%Y('-E8V]N9"$-"@T*97AT
M96YD4T)$969I;FET:6]N<SH@84)R;W=S97)3:&5L; T*"2$-"@T*97AT96YD
M4T)-971H;V1S.B!A0G)O=W-E<E-H96QL#0H)(D5A<FQY(&]U="!I9B!N;W1H
M:6YG('1O(&1O+B!!8F]R="!G<F%C969U;&QY(&]N(&%N(&5R<F]R(&QO8V%T
M:6YG('1H92!C;VYT97AT365N=2(-"@T*"7P@;65N=4%R<F%Y('P-"@EE;F%B
M;&5-971H;V13=&5P(&EF1F%L<V4Z(%M>;FEL72X-"@DH;65N=4%R<F%Y(#H]
M('-E;&8@9V5T0G)O=W-E<DUE=&AO9'--96YU.B!A0G)O=W-E<E-H96QL*2!I
M<TYI;"!I9E1R=64Z(%M>;FEL72X-"@ES96QF(&%D9%-T97!497-T365N=3H@
M;65N=4%R<F%Y(&9I<G-T('!R97-E;G1E<CH@;65N=4%R<F%Y('-E8V]N9"$-
M"@T*9V5T0G)O=W-E<D1E9FEN:71I;VYS365N=3H@84)R;W=S97)3:&5L; T*
M"2)!;G-W97(@86X@87)R87D@=VET:"!T:&4@)V1E9FEN:71I;VYS)R @;65N
M=2!A;F0@<')E<V5N=&5R+@T*"5=E(&UA:V4@87-S=6UP=&EO;G,@86)O=70@
M=&AE(&QA>6]U="]N86UI;F<@;V8@=&AE('9I97<@<F5S;W5R8V4N( T*"4AA
M;F1L92!E<G)O<G,@8GD@('!R:6YT:6YG(&$@;F]T:69I8V%T:6]N('1R86-E
M('1O('1H92!4<F%N<V-R:7!T(&%N9"!A;G-W97)I;F<@;FEL+B(-"@T*"7P@
M9&5F:6YI=&EO;E!R97-E;G1E<B!M96YU('P-"@E><V5L9B!H86YD;&5%>&-E
M<'1I;VXZ( T*"0D)6V1E9FEN:71I;VY0<F5S96YT97(@.CT@84)R;W=S97)3
M:&5L;"!P<F5S96YT97).86UE9#H@)V1E9FEN:71I;VXG+@T*"0D)*&UE;G4@
M.CT@9&5F:6YI=&EO;E!R97-E;G1E<B!V:65W(&-O;G1E>'1-96YU*2!I<TYI
M;" -"@D)"0EI9E1R=64Z(%MS96QF(&5R<F]R.B G0V]U;&0@;F]T(&9I;F0@
M=&AE('=O<FMS<&%C92!C;VYT97AT365N=2==+@T*"0D)07)R87D@=VET:#H@
M;65N=2!W:71H.B!D969I;FET:6]N4')E<V5N=&5R72$-"@T*9V5T0G)O=W-E
M<DUE=&AO9'--96YU.B!A0G)O=W-E<E-H96QL#0H)(D%N<W=E<B!A;B!A<G)A
M>2!W:71H('1H92 G;65T:&]D<R<@;65N=2!A;F0@<')E<V5N=&5R+@T*"5=E
M(&UA:V4@87-S=6UP=&EO;G,@86)O=70@=&AE(&QA>6]U="]N86UI;F<@;V8@
M=&AE('9I97<@<F5S;W5R8V4N( T*"4AA;F1L92!E<G)O<G,@8GD@('!R:6YT
M:6YG(&$@;F]T:69I8V%T:6]N('1R86-E('1O('1H92!4<F%N<V-R:7!T(&%N
M9"!A;G-W97)I;F<@;FEL+B(-"@T*"7P@;65N=2!M971H;V1S4')E<V5N=&5R
M('P-"@E><V5L9B!H86YD;&5%>&-E<'1I;VXZ( T*"0D)6VUE=&AO9'-0<F5S
M96YT97(@.CT@84)R;W=S97)3:&5L;"!P<F5S96YT97).86UE9#H@)VUE=&AO
M9$)R;W=S97(G+@T*"0D)*&UE;G4@.CT@*&UE=&AO9'-0<F5S96YT97(@<')E
M<V5N=&5R3F%M960Z("=M971H;V1S)RD@=FEE=R!C;VYT97AT365N=2D@:7-.
M:6P@#0H)"0D):694<G5E.B!;<V5L9B!E<G)O<CH@)T-O=6QD(&YO="!F:6YD
M('1H92!M971H;V1S(&-O;G1E>'1-96YU)UTN#0H)"0E!<G)A>2!W:71H.B!M
M96YU('=I=&@Z(&UE=&AO9'-0<F5S96YT97)=(0T*#0IG971#2$)#;&%S<V5S
M365N=3H@84-L87-S0G)O=W-E<E-H96QL#0H)(D%N<W=E<B!A;B!A<G)A>2!W
M:71H('1H92 G8VQA<W-E<R<@;65N=2!A;F0@<')E<V5N=&5R+@T*"5=E(&UA
M:V4@;F%S='D@87-S=6UP=&EO;G,@86)O=70@=&AE(&QA>6]U="]N86UI;F<@
M;V8@=&AE('9I97<@<F5S;W5R8V4N( T*"4AA;F1L92!E<G)O<G,@8GD@('!R
M:6YT:6YG(&$@;F]T:69I8V%T:6]N('1R86-E('1O('1H92!4<F%N<V-R:7!T
M(&%N9"!A;G-W97)I;F<@;FEL(@T*#0H)?"!C;&%S<V5S4')E<V5N=&5R(&-L
M87-S97-6:65W(&UE;G4@? T*"5YS96QF(&AA;F1L945X8V5P=&EO;CH@#0H)
M"0E;8VQA<W-E<U!R97-E;G1E<B Z/2!A0VQA<W-"<F]W<V5R4VAE;&P@<')E
M<V5N=&5R3F%M960Z("=C;&%S<V5S)RX-"@D)"2AM96YU(#H]("AC;&%S<V5S
M4')E<V5N=&5R('!R97-E;G1E<DYA;65D.B G8VQA<W-E<R<I('9I97<@8V]N
M=&5X=$UE;G4I(&ES3FEL( T*"0D)"6EF5')U93H@6W-E;&8@97)R;W(Z("=#
M;W5L9"!N;W0@9FEN9"!T:&4@8VQA<W-E<R!C;VYT97AT365N=2==+@T*"0D)
M07)R87D@=VET:#H@;65N=2!W:71H.B!C;&%S<V5S4')E<V5N=&5R72$-"@T*
M9V5T4T)#;&%S<V5S365N=3H@85-Y<W1E;4)R;W=S97)3:&5L; T*"2)!;G-W
M97(@86X@87)R87D@=VET:"!T:&4@)V-L87-S97,G(&UE;G4@86YD('!R97-E
M;G1E<BP-"@E792!M86ME(&YA<W1Y(&%S<W5M<'1I;VYS(&%B;W5T('1H92!L
M87EO=70O;F%M:6YG(&]F('1H92!V:65W(')E<V]U<F-E+B -"@E(86YD;&4@
M97)R;W)S(&)Y("!P<FEN=&EN9R!A(&YO=&EF:6-A=&EO;B!T<F%C92!T;R!T
M:&4@5')A;G-C<FEP="!A;F0@86YS=V5R:6YG(&YI;"X-"@E.;W1E.B!T;W5G
M:&5R('1O(&QO8V%T92!I;B!T:&4@4T(L(%1H92!C;VYT97AT365N=2!B96QO
M;F=S('1O(&%N('5N;F%M960@0V%R9$-O;G1A:6YE<B(-"@T*"7P@8VQA<W-E
M<U!R97-E;G1E<B!C;&%S<V5S5FEE=R!M96YU('P-"@E><V5L9B!H86YD;&5%
M>&-E<'1I;VXZ( T*"0D)6V-L87-S97-0<F5S96YT97(@.CT@85-Y<W1E;4)R
M;W=S97)3:&5L;"!P<F5S96YT97).86UE9#H@)V-L87-S97,G+@T*"0D)8VQA
M<W-E<U9I97<@.CT@8VQA<W-E;F0Z("-O;D-(0D]P96YE
M9#H-"@D)=&\Z('-E;&8N#0H)4WES=&5M0G)O=W-E<E-H96QL( T*"0EW:&5N
M.B C=FEE=T]P96YE9#H-"@D)<V5N9#H@(V]N4T)/<&5N960Z#0H)"71O.B!S
M96QF+@T*"65N86)L94-(0E)U;E1E<W1S1FER<W0@.CT@9F%L<V4N#0H)96YA
M8FQE4T)2=6Y497-T<T9I<G-T(#H](&9A;'-E+@T*"65N86)L94UE=&AO9%-T
M97 @.CT@9F%L<V4A#0H-"F]N0TA"3W!E;F5D.B!A0VQA<W-"<F]W<V5R4VAE
M;&P-"@ES96QF#0H)"65X=&5N9$-(0D-L87-S97,Z(&%#;&%S<T)R;W=S97)3
M:&5L;#L-"@D)97AT96YD0TA"365T:&]D<SH@84-L87-S0G)O=W-E<E-H96QL
M.PT*"0EE>'1E;F1#2$)$969I;FET:6]N<SH@84-L87-S0G)O=W-E<E-H96QL
M(0T*#0IO;E-"3W!E;F5D.B!A4WES=&5M0G)O=W-E<E-H96QL#0H)<V5L9@T*
M"0EE>'1E;F130D-L87-S97,Z(&%3>7-T96U"<F]W<V5R4VAE;&P[#0H)"65X
M=&5N9%-"365T:&]D<SH@85-Y<W1E;4)R;W=S97)3:&5L;#L-"@D)97AT96YD
M4T)$969I;FET:6]N<SH@85-Y<W1E;4)R;W=S97)3:&5L;"$-"@T*<'5B;&ES
M:&5D07-P96-T<PT*"2)!;G-W97(@82 \3&]O:W5P5&%B;&4^(&]F('1H92 \
M07-P96-T/G,@<'5B;&ES:&5D(&)Y('1H92!R96-E:79E<BXB#0H-"@E>*'-U
M<&5R('!U8FQI<VAE9$%S<&5C=',I#0H)"6%D9#H@*$%S<&5C="!B;V]L96%N
M.B C96YA8FQE0TA"4G5N5&5S='-&:7)S="D[#0H)"6%D9#H@*$%S<&5C="!B
M;V]L96%N.B C96YA8FQE4T)2=6Y497-T<T9I<G-T*3L-"@D)861D.B H07-P
M96-T(&)O;VQE86XZ("-E;F%B;&5-971H;V13=&5P*3L-"@D)>6]U<G-E;&8A
M#0H-"G5N:6YI=&EA;&EZ90T@<VEG;F%L.B!S96QF(&YA;64@87-3=')I;F<@+" G(&9A:6QE9#H@
M)R L(&4@9&5S8W)I<'1I;VXN#0H)"0EN:6Q=(0T*#0II;FET:6%L:7IE#0H)
M(@T*"0ES96QF(&EN:71I86QI>F4-"@DB#0H-"@E#;&%S<T)R;W=S97)3:&5L
M;" -"@D)=VAE;CH@(W9I97=/<&5N960Z#0H)"7-E;F0Z("-O;D-(0D]P96YE
M9#H-"@D)=&\Z('-E;&8N#0H)4WES=&5M0G)O=W-E<E-H96QL( T*"0EW:&5N
M.B C=FEE=T]P96YE9#H-"@D)<V5N9#H@(V]N4T)/<&5N960Z#0H)"71O.B!S
M96QF+@T*"65N86)L94-(0E)U;E1E<W1S1FER<W0@.CT@9F%L<V4N#0H)96YA
M8FQE4T)2=6Y497-T<T9I<G-T(#H](&9A;'-E+@T*"65N86)L94UE=&AO9%-T
M97 @.CT@9F%L<V4A#0H-"F]N0TA"3W!E;F5D.B!A0VQA<W-"<F]W<V5R4VAE
M;&P-"@ES96QF#0H)"65X=&5N9$-(0D-L87-S97,Z(&%#;&%S<T)R;W=S97)3
M:&5L;#L-"@D)97AT96YD0TA"365T:&]D<SH@84-L87-S0G)O=W-E<E-H96QL
M.PT*"0EE>'1E;F1#2$)$969I;FET:6]N<SH@84-L87-S0G)O=W-E<E-H96QL
M(0T*#0IO;E-"3W!E;F5D.B!A4WES=&5M0G)O=W-E<E-H96QL#0H)<V5L9@T*
M"0EE>'1E;F130D-L87-S97,Z(&%3>7-T96U"<F]W<V5R4VAE;&P[#0H)"65X
M=&5N9%-"365T:&]D<SH@85-Y<W1E;4)R;W=S97)3:&5L;#L-"@D)97AT96YD
M4T)$969I;FET:6]N<SH@85-Y<W1E;4)R;W=S97)3:&5L;"$-"@T*<'5B;&ES
M:&5D07-P96-T<PT*"2)!;G-W97(@82 \3&]O:W5P5&%B;&4^(&]F('1H92 \
M07-P96-T/G,@<'5B;&ES:&5D(&)Y('1H92!R96-E:79E<BXB#0H-"@E>*'-U
M<&5R('!U8FQI<VAE9$%S<&5C=',I#0H)"6%D9#H@*$%S<&5C="!B;V]L96%N
M.B C96YA8FQE0TA"4G5N5&5S='-&:7)S="D[#0H)"6%D9#H@*$%S<&5C="!B
M;V]L96%N.B C96YA8FQE4T)2=6Y497-T<T9I<G-T*3L-"@D)861D.B H07-P
M96-T(&)O;VQE86XZ("-E;F%B;&5-971H;V13=&5P*3L-"@D)>6]U<G-E;&8A
M#0H-"G5N:6YI=&EA;&EZ90T*"2(-"@D)<V5L9B!U;FEN:71I86QI>F4-"@DB
M#0H-"@DH07)R87D@=VET:#H@0VQA<W-"<F]W<V5R4VAE;&P@=VET:#H@4WES
M=&5M0G)O=W-E<E-H96QL*2 -"@D)9&\Z(%LZ96%C:"!\(&5A8V@@<F5M;W9E
M179E;G1S5')I9V=E<F5D1F]R.B!S96QF72$@(0T*(5-5;FET0G)O=W-E<DE$
M145X=&5N<VEO;B!C;&%S<R!C871E9V]R:65S1F]R.B C861D4G5N5&5S='--
M96YU.G!R97-E;G1E<CHA;65N=7,A<')I=F%T92$@(0T*(5-5;FET0G)O=W-E
M<DE$145X=&5N<VEO;B!C;&%S<R!C871E9V]R:65S1F]R.B C861D4W1E<%1E
M<W1-96YU.G!R97-E;G1E<CHA;65N=7,A<')I=F%T92$@(0T*(5-5;FET0G)O
M=W-E<DE$145X=&5N<VEO;B!C;&%S<R!C871E9V]R:65S1F]R.B C96YA8FQE
M0TA"4G5N5&5S='-&:7)S="%A8V-E<W-I;F<A<'5B;&EC(2 A#0HA4U5N:71"
M<F]W<V5R241%17AT96YS:6]N(&-L87-S(&-A=&5G;W)I97-&;W(Z("-E;F%B
M;&5#2$)2=6Y497-T<T9I<G-T.B%A8V-E<W-I;F<A<'5B;&EC(2 A#0HA4U5N
M:71"<F]W<V5R241%17AT96YS:6]N(&-L87-S(&-A=&5G;W)I97-&;W(Z("-E
M;F%B;&5-971H;V13=&5P(6%C8V5S<VEN9R%P=6)L:6,A("$-"B%356YI=$)R
M;W=S97))1$5%>'1E;G-I;VX@8VQA<W,@8V%T96=O<FEE<T9O<CH@(V5N86)L
M94UE=&AO9%-T97 Z(6%C8V5S<VEN9R%P=6)L:6,A("$-"B%356YI=$)R;W=S
M97))1$5%>'1E;G-I;VX@8VQA<W,@8V%T96=O<FEE<T9O<CH@(V5N86)L95-"
M4G5N5&5S='-&:7)S="%A8V-E<W-I;F<A<'5B;&EC(2 A#0HA4U5N:71"<F]W
M<V5R241%17AT96YS:6]N(&-L87-S(&-A=&5G;W)I97-&;W(Z("-E;F%B;&53
M0E)U;E1E<W1S1FER<W0Z(6%C8V5S<VEN9R%P=6)L:6,A("$-"B%356YI=$)R
M;W=S97))1$5%>'1E;G-I;VX@8VQA<W,@8V%T96=O<FEE<T9O<CH@(V5X=&5N
M9$-(0D-L87-S97,Z(6UE;G5S(7!R:79A=&4A("$-"B%356YI=$)R;W=S97))
M1$5%>'1E;G-I;VX@8VQA<W,@8V%T96=O<FEE<T9O<CH@(V5X=&5N9$-(0D1E
M9FEN:71I;VYS.B%M96YU<R%P<FEV871E(2 A#0HA4U5N:71"<F]W<V5R241%
M17AT96YS:6]N(&-L87-S(&-A=&5G;W)I97-&;W(Z("-E>'1E;F1#2$)-971H
M;V1S.B%M96YU<R%P<FEV871E(2 A#0HA4U5N:71"<F]W<V5R241%17AT96YS
M:6]N(&-L87-S(&-A=&5G;W)I97-&;W(Z("-E>'1E;F130D-L87-S97,Z(6UE
M;G5S(7!R:79A=&4A("$-"B%356YI=$)R;W=S97))1$5%>'1E;G-I;VX@8VQA
M<W,@8V%T96=O<FEE<T9O<CH@(V5X=&5N9%-"1&5F:6YI=&EO;G,Z(6UE;G5S
M(7!R:79A=&4A("$-"B%356YI=$)R;W=S97))1$5%>'1E;G-I;VX@8VQA<W,@
M8V%T96=O<FEE<T9O<CH@(V5X=&5N9%-"365T:&]D<SHA;65N=7,A<')I=F%T
M92$@(0T*(5-5;FET0G)O=W-E<DE$145X=&5N<VEO;B!C;&%S<R!C871E9V]R
M:65S1F]R.B C9V5T0G)O=W-E<D1E9FEN:71I;VYS365N=3HA:&5L<&5R<R%P
M<FEV871E(2 A#0HA4U5N:71"<F]W<V5R241%17AT96YS:6]N(&-L87-S(&-A
M=&5G;W)I97-&;W(Z("-G971"<F]W<V5R365T:&]D<TUE;G4Z(6AE;'!E<G,A
M<')I=F%T92$@(0T*(5-5;FET0G)O=W-E<DE$145X=&5N<VEO;B!C;&%S<R!C
M871E9V]R:65S1F]R.B C9V5T0TA"0VQA<W-E<TUE;G4Z(6AE;'!E<G,A<')I
M=F%T92$@(0T*(5-5;FET0G)O=W-E<DE$145X=&5N<VEO;B!C;&%S<R!C871E
M9V]R:65S1F]R.B C9V5T4T)#;&%S<V5S365N=3HA:&5L<&5R<R%P<FEV871E
M(2 A#0HA4U5N:71"<F]W<V5R241%17AT96YS:6]N(&-L87-S(&-A=&5G;W)I
M97-&;W(Z("-G9717;W)K<W!A8V5-96YU.B%H96QP97)S(7!R:79A=&4A("$-
M"B%356YI=$)R;W=S97))1$5%>'1E;G-I;VX@8VQA<W,@8V%T96=O<FEE<T9O
M<CH@(VAA;F1L945X8V5P=&EO;CHA:&5L<&5R<R%P<FEV871E(2 A#0HA4U5N
M:71"<F]W<V5R241%17AT96YS:6]N(&-L87-S(&-A=&5G;W)I97-&;W(Z("-I
M;FET:6%L:7IE(6EN:71I86QI>FEN9R%P=6)L:6,A("$-"B%356YI=$)R;W=S
M97))1$5%>'1E;G-I;VX@8VQA<W,@8V%T96=O<FEE<T9O<CH@(V]N0TA"3W!E
M;F5D.B%E=F5N="!H86YD;&EN9R%P=6)L:6,A("$-"B%356YI=$)R;W=S97))
M1$5%>'1E;G-I;VX@8VQA<W,@8V%T96=O<FEE<T9O<CH@(V]N4T)/<&5N960Z
M(65V96YT(&AA;F1L:6YG(7!U8FQI8R$@(0T*(5-5;FET0G)O=W-E<DE$145X
M=&5N<VEO;B!C;&%S<R!C871E9V]R:65S1F]R.B C<'5B;&ES:&5D07-P96-T
M<R%D979E;&]P;65N="%P=6)L:6,A("$-"B%356YI=$)R;W=S97))1$5%>'1E
M;G-I;VX@8VQA<W,@8V%T96=O<FEE<T9O<CH@(W5N:6YI=&EA;&EZ92%I;FET
M:6%L:7II;F<A<'5B;&EC(2 A#0H-"B)":6YA<GD@1VQO8F%L<R(A#0H-"B)2
.97-O=7)C97,B(0T*#0H`
`
end


Reply | Threaded
Open this post in threaded view
|

Re: Closer to an IDE extension

Steve Alan Waring
In reply to this post by Steve Alan Waring
Apologies for the double post.

The package attached to the message I am replying to, was corrupted on
upload and truncated to 5kb.

The valid package is an attachment of 13.2kb.

Thanks,
Steve


Reply | Threaded
Open this post in threaded view
|

Re: Closer to an IDE extension

Ian Bartholomew-3
In reply to this post by Steve Alan Waring
Steve,

FYI That package seems to be corrupted as well. It looks like a couple of
areas within the file have got transposed somehow.  We have seen this sort
of thing affecting pac files in the past (not recently though I must admit)
and found that zipping them first is the best way.

Note: I'm making the unwarranted assumption that it's not something wrong my
end and that others get the same....

Ian


Reply | Threaded
Open this post in threaded view
|

Re: Closer to an IDE extension

Ian Bartholomew-3
In reply to this post by Bill Schwab
Bill,

> Also, I'm starting to wonder whether extensions should be enabled by class
> initialization as implied by your sample.  It would be very easy for one
to
> break, and debugging something that extends the debugger would be, ummmm,
> interesting<g>.  It's even fun when it extends the CHB.

Whatever you do you are going to open yourself to nasty problems when
testing an extension to the browser that is used to write the extension
IYSWIM.  Other than foresight, saving your edited additions whenever you
can - just in case, I can't see a way of getting round it.

FWIW, I tend, while I'm writing/integrating extensions, to manually do the
initialization rather than letting the package load do it. If you always
know the package will load, rather than bombing out on installation, then
you are half way there.

> One solution might be to have all extensions started by something like
> #activateExtension which could be tried after making a backup of a newly
> built image.  Comments?

I'm not sure a generic on/off switch for extensions is needed. I've always
tried to work on the basis that if an extension is not needed then the
package it comes in should be uninstalled.  As it stands it's easy enough to
add a switch, in the extension method that is evoked when the Shell shows,
and is controlled by an aspect in the main class (as, I think, Steve's
example shows).

It would just seem to add a bit of unneeded complexity to me.

Ian


Reply | Threaded
Open this post in threaded view
|

3rd try lucky? Was: Closer to an IDE extension

Steve Alan Waring
In reply to this post by Ian Bartholomew-3
Hi Ian,

> FYI That package seems to be corrupted as well. It looks like a couple of
> areas within the file have got transposed somehow.

Thanks, I did not have a very healthy connection yesterday!

Fingers crossed it makes it through this time.

Steve


begin 666 SUnitBrowserIDEExtension.zip
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
H97))1$5%>'1E;G-I;VXN<&%C4$L%!@`````!``$`2@```-L*````````
`
end


Reply | Threaded
Open this post in threaded view
|

Re: Closer to an IDE extension

Steve Alan Waring
In reply to this post by Ian Bartholomew-3
Hi Ian and Bill,

> > One solution might be to have all extensions started by something like
> > #activateExtension which could be tried after making a backup of a newly
> > built image.  Comments?

>
> I'm not sure a generic on/off switch for extensions is needed. I've always
> tried to work on the basis that if an extension is not needed then the
> package it comes in should be uninstalled.  As it stands it's easy enough
to
> add a switch, in the extension method that is evoked when the Shell shows,
> and is controlled by an aspect in the main class (as, I think, Steve's
> example shows).
>

Yes, in the SUnitBrowser example I used aspect switches to control whether
the extensions were made, but in my personal extension classes, I am
planning to use Ian's technique of installing/uninstalling as needed.

As I see it, the danger time is not when the class is initialized, but the
first time a browser is opened after the events have been registered. One
extension could interfere with another, or the image could be configured to
use a non-default resource. The approach I took was to expect problems
during the handling of #viewOpened: events, and to handle a problem by
aborting the extension.

Thanks,
Steve