Closed vuppalasivakumar closed 6 years ago
Sorry but I´m relatively new at Flutter/Dart and I have literally no idea what's happening, can you show me the code so I can help you and change whatever is failing in the library?
I had this same problem. It's because each FloatingActionButton by default has a HeroTag, so if you have multiple FABs on screen at the same time, there is an error of duplicate HeroTag. A fix would be to either: 1) Generate within the library (behind the scenes from the user) and assign unique hero tags for each FAB used 2) Require a hero tag for each FAB
Change 2 is simple. See this commit on my fork of this repo. Sorry I fixed this for my scenario a while back but never got around to submitting a PR.
I'm trying to fix this, but I never had this problem. Can you tell me how to reproduce it?
Update fab_menu_item.dart to this to add the hero tag of the index:
part of flutter_fab_dialer;
typedef void OnFabMiniMenuItemPressed();
class FabMiniMenuItem {
double elevation;
String text;
Icon icon;
Color fabColor;
Color chipColor;
String tooltip;
Color textColor;
OnFabMiniMenuItemPressed onPressed;
FabMiniMenuItem.withText(
this.icon,
this.fabColor,
this.elevation,
this.tooltip,
this.onPressed,
this.text,
this.chipColor,
this.textColor);
FabMiniMenuItem.noText(this.icon,this.fabColor,this.elevation,this.tooltip,this.onPressed){
this.text = null;
this.chipColor = null;
this.textColor = null;
}
}
class FabMenuMiniItemWidget extends StatelessWidget {
const FabMenuMiniItemWidget(
{Key key,
this.elevation,
this.text,
this.icon,
this.fabColor,
this.chipColor,
this.textColor,
this.tooltip,
this.index,
this.controller,
this.onPressed})
: super(key: key);
final double elevation;
final String text;
final Icon icon;
final Color fabColor;
final Color chipColor;
final String tooltip;
final Color textColor;
final int index;
final OnFabMiniMenuItemPressed onPressed;
final AnimationController controller;
@override
Widget build(BuildContext context) {
return new Container(
margin: new EdgeInsets.symmetric(vertical: 5.0, horizontal: 8.0),
child: new Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
new Container(
margin: new EdgeInsets.symmetric(horizontal: 8.0),
child: new ScaleTransition(
scale: new CurvedAnimation(
parent: controller,
curve: new Interval(((index + 1) / 10), 1.0,
curve: Curves.linear),
),
child: chipColor!=null
?new Chip(
label: new Text(
text,
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
style: new TextStyle(
color: textColor, fontWeight: FontWeight.bold),
),
backgroundColor: chipColor,
):null)),
new ScaleTransition(
scale: new CurvedAnimation(
parent: controller,
curve:
new Interval(((index + 1) / 10), 1.0, curve: Curves.linear),
),
child: new FloatingActionButton(
elevation: elevation,
mini: true,
heroTag: "$index", //Add Hero Tag Here from Index
backgroundColor: fabColor,
tooltip: 'Increment',
child: icon,
onPressed: onPressed),
)
],
));
}
}
\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M-! EXCEPTION CAUGHT BY SCHEDULER LIBRARY \M-b\M^U\M^^\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P The following assertion was thrown during a scheduler callback: There are multiple heroes that share the same tag within a subtree. Within each subtree for which heroes are to be animated (typically a PageRoute subtree), each Hero must have a unique non-null tag. In this case, multiple heroes had the following tag:
Here is the subtree for one of the offending heroes:
Hero(tag:, state: _HeroState#4eb77)
\M-b\M^T\M^TKeyedSubtree-[GlobalKey#915b7]
\M-b\M^T\M^TMaterial(type: circle, elevation: 6.0, color: Color(0xff43a047), state: _MaterialState#8c254)
\M-b\M^T\M^TAnimatedPhysicalModel(duration: 200ms, shape: circle, borderRadius: BorderRadius.zero, elevation: 6.0, color: Color(0xff43a047), animateColor: false, shadowColor: Color(0xff000000), animateShadowColor: true, state: _AnimatedPhysicalModelState#c3b7d(ticker inactive))
\M-b\M^T\M^TPhysicalModel(shape: circle, borderRadius: BorderRadius.zero, elevation: 6.0, color: Color(0xff43a047), shadowColor: Color(0xff000000), renderObject: RenderPhysicalModel#9a3c8 relayoutBoundary=up7 NEEDS-PAINT)
\M-b\M^T\M^TNotificationListener
\M-b\M^T\M^T_InkFeatures-[GlobalKey#cb2fc ink renderer](renderObject: _RenderInkFeatures#99fe1 relayoutBoundary=up8 NEEDS-PAINT)
\M-b\M^T\M^TAnimatedDefaultTextStyle(duration: 200ms, debugLabel: (englishLike body1).merge(blackCupertino body1), inherit: false, color: Color(0xdd000000), family: .SF UI Text, size: 14.0, weight: 400, baseline: alphabetic, decoration: TextDecoration.none, softWrap: wrapping at box width, overflow: clip, state: _AnimatedDefaultTextStyleState#48817(ticker inactive))
\M-b\M^T\M^TDefaultTextStyle(debugLabel: (englishLike body1).merge(blackCupertino body1), inherit: false, color: Color(0xdd000000), family: .SF UI Text, size: 14.0, weight: 400, baseline: alphabetic, decoration: TextDecoration.none, softWrap: wrapping at box width, overflow: clip)
\M-b\M^T\M^TContainer(constraints: BoxConstraints(w=56.0, h=56.0))
\M-b\M^T\M^TConstrainedBox(BoxConstraints(w=56.0, h=56.0), renderObject: RenderConstrainedBox#99e2a relayoutBoundary=up9 NEEDS-PAINT)
\M-b\M^T\M^TInkWell(gestures: [tap], clipped to BoxShape.rectangle, state: _InkResponseState#1e762)
\M-b\M^T\M^TGestureDetector
\M-b\M^T\M^TRawGestureDetector(state: RawGestureDetectorState#1d357(gestures: [tap], behavior: opaque))
\M-b\M^T\M^T_GestureSemantics(renderObject: RenderSemanticsGestureHandler#a219c NEEDS-PAINT)
\M-b\M^T\M^TListener(listeners: [down], behavior: opaque, renderObject: RenderPointerListener#fc644 NEEDS-PAINT)
\M-b\M^T\M^TCenter(alignment: center, renderObject: RenderPositionedBox#31ff1 NEEDS-PAINT)
\M-b\M^T\M^TBuilder
\M-b\M^T\M^TIconTheme(color: Color(0xffffffff))
\M-b\M^T\M^TRotationTransition(animation: AlwaysStoppedAnimation#2f92b(\M-b\M^V\M-6 0.25; paused), state: _AnimatedState#bb655)
\M-b\M^T\M^TTransform(renderObject: RenderTransform#d0318 relayoutBoundary=up1 NEEDS-PAINT)
\M-b\M^T\M^TIcon(IconData(U+0E145))
\M-b\M^T\M^TSemantics(container: false, properties: SemanticsProperties#7e086, label: null, value: null, hint: null, renderObject: RenderSemanticsAnnotations#3b4c4 relayoutBoundary=up2 NEEDS-PAINT)
\M-b\M^T\M^TExcludeSemantics(excluding: true, renderObject: RenderExcludeSemantics#71537 relayoutBoundary=up3 NEEDS-PAINT)
\M-b\M^T\M^TSizedBox(width: 24.0, height: 24.0, renderObject: RenderConstrainedBox#31d75 relayoutBoundary=up4 NEEDS-PAINT)
\M-b\M^T\M^TCenter(alignment: center, renderObject: RenderPositionedBox#968b6 NEEDS-PAINT)
\M-b\M^T\M^TRichText(textDirection: ltr, softWrap: wrapping at box width, maxLines: unlimited, text: "\M-n\M^E\M^E", renderObject: RenderParagraph#a25eb relayoutBoundary=up1 NEEDS-PAINT)
When the exception was thrown, this was the stack:
0 Hero._allHeroesFor.visitor. (package:flutter/src/widgets/heroes.dart:130)
1 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:140)
2 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
3 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
4 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4676)
5 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
6 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4676)
7 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
8 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
9 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
10 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
11 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
12 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
13 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
14 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
15 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
16 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
17 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
18 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
19 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
20 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
21 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
22 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4676)
23 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
24 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
25 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
26 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
27 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
28 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
29 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
30 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4676)
31 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
32 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
33 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
34 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
35 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
36 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
37 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
38 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
39 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
40 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
41 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
42 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
43 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
44 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
45 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
46 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
47 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
48 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
49 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
50 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
51 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
52 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
53 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
54 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
55 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
56 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
57 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
58 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
59 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
60 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
61 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
62 List.forEach (dart:core-patch/dart:core/growable_array.dart:274)
63 SliverMultiBoxAdaptorElement.visitChildren (package:flutter/src/widgets/sliver.dart:866)
64 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
65 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4676)
66 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
67 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
68 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
69 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
70 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
71 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
72 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
73 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
74 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
75 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
76 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
77 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
78 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
79 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
80 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
81 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
82 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
83 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
84 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
85 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
86 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
87 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
88 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
89 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
90 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
91 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4676)
92 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
93 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
94 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
95 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
96 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
setState() callback argument returned a Future. 2.3
97 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
98 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
99 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
100 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
101 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4576)
102 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
103 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
104 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
105 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
106 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
107 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
108 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
109 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
110 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
111 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
112 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
113 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
114 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
115 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
116 Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:144)
117 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3636)
118 Element.visitChildElements (package:flutter/src/widgets/framework.dart:2610)
119 Hero._allHeroesFor (package:flutter/src/widgets/heroes.dart:146)
120 HeroController._startHeroTransition (package:flutter/src/widgets/heroes.dart:511)
121 HeroController._maybeStartHeroTransition. (package:flutter/src/widgets/heroes.dart:492)
122 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:931)
123 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:879)
124 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:783)
125 _invoke (file:///Users/Siva/flutter/bin/cache/pkg/sky_engine/lib/ui/hooks.dart:120)
126 _drawFrame (file:///Users/Siva/flutter/bin/cache/pkg/sky_engine/lib/ui/hooks.dart:109)
\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P\M-b\M^U\M^P