diff --git a/pxii_bec/bec_widgets/profiles/DailySetup.ini b/pxii_bec/bec_widgets/profiles/DailySetup.ini new file mode 100644 index 0000000..0e7b421 --- /dev/null +++ b/pxii_bec/bec_widgets/profiles/DailySetup.ini @@ -0,0 +1,605 @@ +[BECDockArea] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=false +baseSize=@Size(0 0) +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 23 1142 746) +inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0) +layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0) +maximumSize=@Size(16777215 16777215) +minimumSize=@Size(0 0) +mode=creator +mouseTracking=false +sizeIncrement=@Size(0 0) +sizePolicy=@Variant(\0\0\0K\0\0\0U) +statusTip= +tabletTracking=false +toolTip= +toolTipDuration=-1 +whatsThis= +windowFilePath= +windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0) +windowModified=false +windowOpacity=1 +windowTitle=BEC - DailySetup +workspace_is_locked=false + +[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Info.dockWidgetScrollArea.qt_scrollarea_viewport.Info] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=true +baseSize=@Size(0 0) +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 0 408 667) +html_text="\n
\n|D\xf9\xcau9\xb8w\x8b\x66\xb2\xe0\xe0\xe0`N\xfdv\x9a\x63\xc7\x8es\xf9\xcau>~\f\xc4\xa3\\i\xda\xb5\xf5\xa6\x66\xcd\x1a\x9a/\xb3\xde\xbe}\xcb\x8a\x95k\xf8\xe5\x97S\x84\x84\x86R\xa5r\x5\xbe\xeb\xdd\x83\x2\x5\xa2z7\\\xbf~\x83I\x93\xa7\xf3\xecy\0#\x86\xf\xa6i\xd3\xc6\xde\xadP(\x14\x1c\xfd\xe9\x18\v\x16.\xe5\xe3\xc7@\x9a}\xdd\x88\xc8\xc8\xa8\xa9\x13\xbe|\xfd\xb8\x9f\xdf\xe\x6\f\x1e\xcd\xb9?~&_\xbe\xbc\x9a\xe5\xff}\xddy\x89\x32U\xf9\xf1\x80\x1f\x1e\x1e\xe5\0x\xf0\xe0\x1\x15\xaa\xd4\xe7\xd4\x89\x83\x14\xfd\xff\xc4\xa7\xbf\xfez\x92\x35k7\xf0<\xe0%M\x1a\xd5\xe7\xf8/'\xa9]\xab:\xc3\x87%\xee\xcd\x8c\xbar\xe7\x9f\x80\x4\x8f\x35]\x97\xa5\xed\x9a\x30\x64\xd8(\xe\x1d>B\xa1\x82I\xeb\x1s\xf7\xde}\x9a\x36i\xc4\xdc\xd9\xd3\xb4o\x9c\x46\xed?x\x98\x1f~\xd8\x1a\xe7:\x1b[\x1bV.[\x88\x95\xd5\xbf\x43\x19\x7f\xfb\xedw:u\xed\xc1\xd4I\xe3\xe9\xd8\x31\xe5sW\xa5\xe4\xba\xadV\xab\x99=g\x1K\x97\xaf\xa2_\x9f^\f\x1a\xd8\x8f\x82\x45J0s\xfa\x64\xda\xb6\x89\xf9\xa5\xb4\xdf\xf6]|?r,\xb7o\\d\xc9\xd2\x95,^\xba\x82~}z1t\xc8\xc0\x64\xcf\x31\xb9j\xf5:\xa6N\x9fM\t\xf7\xe4\r\x11\xbcz\xed:\xdf\xf\x1fL\x9f\xde=\x12\xdc\xee\xc9\xf3\xd7i\xea\xbe\x46\xa9\x8c\x1a\xd2if\x96\xba\x1d\x45$\xb1\x93\x86\xc8\r\xb7\x30\x36r\xcc\x1a'i\xb7\x84\xbd|\xf9\x8a\x13\xbf\x9c\xa0H\xe1\"\x98\x98(X\xb2t\x19\xd5\xaaV\xa5k\xd7.\x86\xaeZ\x8aI\xdb\v\x11\x37]$vR\xd3\xde\xbd\xfb\x99:}\xeg\xfe\xf8%M$\x9c\xff\x9b\x8cJ\xfT*\x15u\xea\x35\xa1\x7f\xdf^xy\xb5H\xd5\xb2\xd3Zb\xc7o\xfb.\xce\xfb_H\xd6\xfe==\xca\xc6J\"\xa4gA\x81\x41L\x98<\x9d\xfe\xfdz\x93\x37O\xee\x14\xef/\xa5\x89\x9d\xb9\xf3\x16\x1\x30\x64\xf0\0T*\x15\xc3G\x8c\xc5\xbbu\xec\xb9s\xce\x9e;\xcf\xce]{\x99\x31m\x12\x66\x66\xa6\x31>\x97\xdc\xc4\xce\xc9\x93\xbfq\xf0\xf0\xd1\x64}6Z\x93\x46\r\xa8]\xbb\x46\x82\xdb\xa4\xb5\xc4\x8e\xa1\xe8\xbfO\x90\x10\x42\baD\xc2\xc3\xc3\xb9z\xe5*K\x97\xad\xc4\xd5%\a\xde\xde\xad\xf0\xf2\xf2\x32t\xb5\x84\x10\x2\x88zX\xfb\x61\xd3V\xbatn\x97&\x92:\xe9\xc5\xa7O\x9fX\xbf\xe1\a\x8a\x14.L\xe6\xcc\xe\x9c<\xf5\x1b*\x95\x8az\xf5\xea\x18\xbaj\x6\xd7\xb6M\xeb\f\x95\x9cI\t;{\xbb\x34\xd3\x43I\xa1P0d\xf0\0\xcd\xffMMM\xe3\xad[\xc5\n\x9e\x31\x92=_~.\xb9j\xd6\xacNM=\xbe\xe9J\xc4$\x89\x1d!\x84\x10\xe2\v\xb9r\xb9\x31}z\xda\xb8)\x13\x42\x88\xff\xbaq\xf3&\x7f\x9c\xbd\xc0\xf4i\x93\f]\x95t%<<\x82\xa0\xa0OL\x9f\x39\x97\xc8\xc8H\xea\xd5\xad\xc5\xce\x1d\x9b\xb1\xb3\xb3\x33t\xd5\x84H\xb6\xe4&fR\x92\xd0\x11\x86!\x89\x1d!\x84\x10\x42\b!\x8c\x44\xf1\x62\xc5\x12|\xc3\x94!\f\x1d\xeak\xe8*\xa4\x98\x93\x93#\xa3\x46\xeg\xd4\xc8\xe1\x86\xae\x8a\x10\x42$\x99\xbcOU\b!\x84\x10\x42\b!\x84\x10\xc2HIbG\b!\x84\x10\x42\b-,,\xcc\t\v\x93W_\x8b\xf4\xe3sX\x4\x96\x16\x32O\x93\x10\xe9\x81$v\x84\x10\x42\b!\x84\xd0\xc2\xca\xd2\x82\x8f\x41!\x86\xae\x86\xc8\0R\xeb\x8dXaa\x11Xf\x92\xc4\x8e\x10\xe9\x81$v\x84\x10\x42\b!\x84\xd0\xc2\xde\xce\x9a\x8f\x81\xa1\xbc}\x1f\x88\x32\x32\xd2\xd0\xd5\x11\"\xd9>\x87\x45\xf0\x31(\x84\x97o>\xe2`kc\xe8\xea\b\x91\"\xf2\xaa\xf3(2y\xb2\x10\x42\b!\x84\x10\x89\xe0\x96\xd3\x99\xe0\xd0\xcf \x4\x11\xa9R\x11\x11\xae$R\xa5\x32T\x9d\x84HS\xcc\xcd\xcd\xb0\x30\x37\xc3\xca\xd2\x12++\x8b\x64\xed\x43\x62K\b!\x84\xae\xc8uI\x88\x8cK\xe2_\x88\x8c-\xbes\x80\"$4B\x1d\x16\x1e\xc1\xab\x37\x1f\xc8\xe2h\x8f\x89\x42\x81\xb9\x85\x19\xa6&\xd2\x99G\b\x80\x88\b%\xe1\x11J\xc2\"\"P*#\xc9\x92\xd9\xeSS\xd3\x44}VbK\b!\x84\xae\xc9uI\x88\x8cK\xe2_\x88\x8c-\xbes\x80\"$4B\xfd\xe4\xf9kr\xe5\xccj\xe8:\n\x91\xe6\x85\x84~\xe6\xed\xfb\xa0\x44\xc7\x8b\xc4\x96\x10\x42\b}\x92\xeb\x92\x10\x19\x97\xc4\xbf\x10\x19\xdb\x97\xe7\0\xc5\xd3\x80w\xeaL\x96\x16X[Y\x1a\xba^B\x18\x85\x90\xd0\x30\xc2\xc2\xc3qt\xb0Kp\xbbw\x1f\x82\x90\xd8\x12\x42\b\xa1or]\x12\"\xe3\x92\xf8\x17\"c\x8b>\a\x98\x44\xaaT\x98(\x14\x86\xae\x8f\x10\x46\xc3\x44\x1\xcaH\xb5\xd6\xed$\xb6\x84\x10\x42\xa4\x6\xb9.\t\x91qI\xfc\v\x91\xb1\x45\x9f\x3L\"\xc2\x95\x98[\x98i\xff\x84\x10\x2\0s\vs\"\xc2#\xb4n'\xb1%\x84\x10\"5\xc8uI\x88\x8cK\xe2_\x88\x8c-\xfa\x1c`\x12\xa9R\xc9\xa4YB$\x81\xa9\x89I\xa2\xde \xb1%\x84\x10\"5\xc8uI\x88\x8cK\xe2_\x88\x8c-\xfa\x1c \xd1-\x84\x10\x42\b!\x84\x10\x42\ba\xa4R\xdc\x1fo\xd4\xd8\t\xdc\xbeu7I\x9f)\xf2U!\xa6M\x9e\x90\xd2\xa2\x85H\xd7$\xb6\x84\x10\x42\b!\x84\x10\x42h\x93\xe2\xc4\xce\xed[w)X \x1f\x1e\x1e\x1e\x89\xda\xde\xdf\xdf?\xc9\xf\xab\"yf\xcd\x9e\xcf\xb9\xbf\xfc\x1\xa8P\xde\x83\xe1\xc3|\r\\\xa3\x7f\x8d\x1a\x33\x9e\xb3g\xffJ\xd4\xb6n\xb9r\xf1\xc3\xfaUz\xaeQ\xda#\xb1%\x84Ho\xe4\xba$D\xc6%\xf1/D\xc6&\xe7\0\xfd\xd2\xc9\fZ\x1e\x1e\x1ex\xb7n\x91\xe8\xed\xef\xdd\x7f\x90\xa8\xedn\xdd\xba\x45\x83\xc6-5?\x17\xc8\x97\x8b\xea\xd5\xaa\xf0\xcd\x37\xdd\xc8\x9d;w\x92\xeb\x99\xd1\x1c\xff\xf5$\xb7o\xdd\x1 (\xf8S\x9a\n\x9e\x80\x17/\xb9\xff\xcf\x43\x43W#\xcd\xd3Wl\x1\xa8T*\xf2\x15,\xce\x82y\xd3i\xd9\"\xf1\x65\xfc\xfd\xf7\x5\x96,YJ\xc0\x8b\x97t\xed\xd2\x91\xb6m\xdb&\xfa\xb3\x42\x88\x8cM\xaeK\x19\xcb\xcbW\xaf\x30\x33\x35%K\x96,\x89\xda~\xf8\xf0\x11l\xdf\xb5\x1f\x80L\x99,\xa8\\\xc1\x83\x66\xcd\xbf\xa6i\x93&\x98\x9b\x9b\xf3\xf2\xe5+\xcaW\xaa\xc1\xde][([\xb6l\xa2\xf6\xa9R\xa9\b\n\n\xc2\xca\xca\n\v\v\x8b\x44\xd7=00\x90\xcd[\xb6\xb0l\xf9\x1aN\xfc|\x84\xec\xd9\xb3%\xfa\xb3\"n\x12\xff\x19KR\xe2?\xfa\x9e\x34ZVgG*W,O\xc7\x8e\xed)_\xbe<\0\xa7N\x9d\xa2s\xb7\xde\xdc\xb8\xea\x8f\x8d\x8dM\xa2\xea\x10\x1e\x1eNhh(vvv\x98$r~\xa1\xdb\xb7o\xb3}\xc7N\xce\x9d\xfb\v\x85\xc2\x84\xc6\x8d\xea\xd3\xa9S'\xec\xec\x12~\x9d\xbc\xd0N\xce\x1\xfa\xa5\xd3\xa9\xd1\xf3\x17rOp\xfd?w\xaf%k\xbfsgM\xc6\xcd\xcd\x8d\xf\x1f>\xb0}\xfbN\x1a\x37m\xc9\x91\xc3\xfb\xc9\x95\xcb-Y\xfbK-\xcf\x9e=\xe3\xd6\xad\xbb\xd4\xa9S3\xce\xf5'N\x9c\xe4\xab\xaf\n\xe1\xea\xea\xaa\x93\xf2\xe\x1e\xfe\x91\v\x17.\xf1M\xd7.\\\xb8t\x89\a_<\xe4?\xb8\xff\x80\xdd{\xf6Q\xde\xd3\x93\xb5\xeb\x37P\xae\\\x19\xben\xd2X'\xe5&\xc5\xa8\x31\xe3\xf1\xf1n\r@\x87\xemh\xdc\xb0\x41\x82\xdb_\xb8x\x99}\xfb\xf6\xa7\xa8\xcc\xd4n\a}\xd0Wl%\xd5\xb3g\xcfh\xdf\xa9\x1b\x13\xc6\x8e\xa4`\xc1\x2X[[\xeb\xa5\fco/!D\x14\xb9.\xc5-#\x9c\xe7\x82\x2\x83\xe8\xdc\xb5'\xf5\xea\xd4\x62\xe8\x90\x81\x89\xfe\\\x9d\x9aU\xe8\xd5\xab\a\x11\x11\x11\xdc\xbcu\x8b\x11\xa3\xc6s\xff\xfe}\x86\xe\x19\x92\xbcz\x4\x5Q\xb2LEvl\xdb@\x85\n\x15\xb4n\x1f\x1a\x1a\xca\xa1\x43\x87\x98=w\x1/_\xbdKV\x99\x90\x31\xdaX\x1b\x89\xff\xb8\x65\x84\x63#\xb9\xf1\xdf\xef\xbbo\xa9^\xbd\x1a!!!\x9c>\xfd;\xdem\xbb\xb0~\xcdRj\xd7\xae\x9d\xacz\\\xbcx\x11\x9fv]\xb9r\xf1,\xe\xe\xeZ\xb7\x7f\xf0\xe0\x1-[\xb5\xa5O\xef\xee\f\x1a\xd8\x9f\xbbw\xef\xf2\xc3\xa6m\xfc\xf3\xcf\x43\x66\xcf\x9e\x89\"\t\xaf\x8b\xcf\b\xed\xac\x8d\x9c\x3\xe2\xa6\xaf\x63\x43\xa7\x89\x9d;7/\xebrw\x1a\xa5J\x95\xa2P\xa1\x42\0\xd4\xa8Q\x83\x66\xcd\xbd\xd8\xb6m\x1b\xc3\x87\xf\xd3Ky\xbar\xeb\xd6]\xfa\xf4\xf7\x65\xe1\xfcY4lP/\xc6\xba\xa3?\xfd\xcc@\xdf\xe1,[<_'\x1\x1d\x12\x12\xca\x94)\xb3x\xf1\xf2%\xeb\xd6o\x8a\xb5><\"\x82\xc1\x43Gj~>r\xe4g\xea\xd4\xaa\x85\xb5\xb5U\x8a\xcbN\x8a\xb3g\xff\xa2N\xadZ\0\x14\xc8\x9f\x9f\xaaU*%\xb8}\xd8\xe7\xb0\x14\aOj\xb6\x83\xbe\xe8+\xb6\x92\xea\xde\xbd\xfb|\xfe\x1cN\x8b\x16\xcd\xb1\xb2\xd2\xcf\xb1\x93\x1e\xdaK\b!\xd7\xa5\x84\xa4\xf7\xf3\\xD\x4\xbd\xfa\f [Vg\x6\xe\xe8\x9b\xa4\xcf\xe6\xc8\x91]\x93\x80\xa9Z\xb5*\xd9\xb2\x66\x65\x80\xef\b\xda\xb5m\x8b\x99\x99\xb9>\xaa\x1b\xc3\xb5k\xd7\xf0\xdb\xbe\x93\x19\xd3&\xe3\xe0\x90\x19/\xef\xe\xc9\xdaOzocm$\xfe\xe3\x97\xde\x8f\x8d\x94\xc4\x7f\xc1\x42\x5\x35\xf1_\xabV-\xc2\xc3\xc3\x99\x36}V\xb2\x13;I\x95'O\x1e~9~\x84\x1c\x39r\0P\xaf^=\n\x15*D\xf7^\x3\x18>|(\xd9\xb2%\xbe\xe7^zogm\xe4\x1c\x10?}\x1d\x1b:}+V\xd3\xe6\xad\x12\xfc\xa7\vVVV\xd4\xaaY\x9d\xab\xd7\xa2z(,X\xb0\x90\x39s\xe7\xb2i\xf3\x66\x9a\x35o\xc9\xa8Q\xa3\x1P\xab\xd5\x1c?~\x9c\x1e={Q\xa3\x66\x1d\xc6\x8c\x19\xcb\xd3\xa7OuR\x87\xc4\xaaS\xa7&\v\xe7\xcf\x62\xa0\xefp\x8e\xfe\xf4\xb3\x66yt\x83-\x9c?+\xdeL]R\xadZ\xbd\x96\x17/_\xc6Z\x9e\x39sf2\xc7\x91\xa1~\xf1\xf2%+W\xaf\xd3I\xd9i]j\xb6\x83\xbe\xa4\x46l\xbd|\xf9\x8a\x42\x45J\xb0k\xf7n\x6\r\x1aL\x95j5\x19\x39r\x14\x1\x1\x1\0\x1c\x38x\x90\xce\xddz\x1\xf0U\xf1\xb2\xe4\xc9_\x94\xcb\x97\xa3\x12No\xde\xbc\x61\xfa\xf4\x19\xd4\xad\xd7\x90\xe\x1d:\xb1{\xf7\x1eT\x89x\xf5\x66\\\xd2\x43{\t!\xe4\xba\x94\x90\xf4r\x9e\v\x8f\x88\xe0\x8f?\xcf\xc4X\xa6R\xa9\x18\x36l\x14\xef\xdf\x7f`\xf9\xd2\x85\x98\x9b\xa7\xec;\xc4\xe8!WO\x9f>\x8bs}B\xf7{\xd1\xbdu\0|\xdau%O\xfe\xa2\x9c?\xef\x9f`y\x1e\x1e\x1e\xec\xd8\xbe\x8d\xda\xb5kca\x91\xfc\x44Rzi\xe3\xe4\x92\xf8\x8f_z96R#\xfe\xabU\xab\xca\xdd\xfb\x8f\xf8\xf8\xf1\x63\xdcu\b\xfg\xfd\x86\r\xf8\xf8\xb4\xa5q\x93\xafY\xb4x1\x9f>}\x2\xe0\xfcy\x7f|\xdau\x5\xa0\x64\x99\x8a\xe4\xc9_\x94\xa0\xa0\xa0\x4\xcb\x33\x31\x31\xd1$u\xa2\x45\xf%\x8b\x88\x88HR\xdd\xd3K;'\x97\x9c\x3\xe2\xa7\xaf\x63\x43\xa7=v\xe6\xcd\x99\xa1\xcb\xdd\xc5+$$\x84\xfc\xf9\xf2i~^\xbct\r\xcd\x9b\x36\xa0[\xb7.\xe4\xc8\x9e\x1d\x80\xdd{\xf6\x30o\xde\"F\x8c\x18\x8a\x83\xbd=;v\xec\xa2\x85\x97\xfG\x7f<\x80\xb3\xb3s\xaa\xd4\x13\xa0\x61\x83z\x9a\x86[8\x7f\x16\x80\xe6\xff\xff\xcd\xd0\xa5\x84\xa7\xa7\a\xd9\xb2\x65\xe5\xd5\xab\xd7\x9a\x65\x3\xfa\xf5\xc6wP\x7f\0\x66\xcfY\xc0\xb2\x15\xab\x35\xeb\\r\xe4\xa0\x62\x5O\xad\xfb}\xf6\xec\x19\xa7\x7f?\x13\xe7\xbajU+\x19M\x96\x39\xb5\xda\x41_R+\xb6\xc2#\x94\f\x19\x36\x86\x65\x8b\xe7R\xbf~]6\xfe\xb0\x19\xdf\xc1\x43\xd9\xb2\xf9\a*W\xaa\x44\x9f^\xddX\xb6r=\xbb\xb6o\xc2\xc6\xc6\x9a\\\xb9r\x11\x14\x14\x44\xdbv\x1d\xa9Z\xa5\x12\x13\xc6\x8f\xe1\xf1\xe3\xc7\x8c\x1d?\x99w\xef\xdf\xd1\xa3{\xf7\x64\xd5\xc3\xd8\xdbK\b!\xd7%m\x8c\xfd<\x17\x1e\x11\x41\xdf~\x83\xf9\xf9\xf8\t\xe6\xcc\x9aJ\xebVQs\"\xce\x98\x35\x97\xf3\xfe\x17\xd8\xb7\xc7\xf[\xdb\xc4\xcd\x83\x91\x90\xb0\xb0\x30\0\xb2\x66\x8d\xfb\xde-\xa1\xfb=GGG6o\\M\xc7.=\x18\xea\xdb\x97:uj\xe3\xe6\x96\xf0\x30~\x85\x42\x81\xa9\xa9i\x8a\xeb\r\xc6\xdf\xc6)!\xf1\x9f\x30\x63?6R+\xfe?\x7f\xfeLVg\xc7\x38\xe7\xb7Q\xab\xd5\x8c\x1d;\x8e\xe7\x1\x1|\xf7]/>\x87\x85\xb1`\xc1\"\xae\\\xb9\xca\xaa\x95+(R\xa4\x30\x43}\xfb\x32g\xfeR6o\\M\x96,N\xc9\x9a\x42\xe0\xfa\xf5\xeb\x14-R V\xc2'1\x8c\xbd\x9dSB\xce\x1\t\xd3\xc7\xb1\xa1\xd3\xc4\xce\xb2\x65\xab\x63-\x1b:t y\xf3\xe8\x66\xa2\xe3\xb0\xb0\x30.]\xba\xc4\xf6\x9d\xfb\xd8\xbay}\x8cu\xf3\xe6\xcd\xc1\xcc,\xea\xd7\t\xe\xe\x66\xca\xd4\x99,\x9c?\x9b\x1a\x35j\0P\xbe\x42\x5\x1a\x35\xfe\x9a\xbd\xfb\xf6%\xfb\x61\x33\xb9\xbel8@/\xc1\\\xa5rE\x8e\x1e\xdeKY\xcf\xaa\0\x64vp\xc0wP\x7f\xcd\x44\x61\x43\x87\fd\xd3V?\x82\x2\xa3\x32\xd5G\x7f\xdcK\xe6\xcc\x99\xb5\xee\xd7\xc5\xc5\x85K\x97\xaf\xb0\xcdog\x8c\xe5\xed\xdb\xf9\xe0\xe3\xed\xa5\xd3\xdf\x41\xdfR\xa3\x1d\xf4\x45\xdf\xb1\xf5\xa5\xcd\x1bWQ\xadZ5\0lll\xe9\xdc\xad\x17\xcf\x9f\a\x90+\x97\x1b\x15+V`\xd9\xca\xf5\xb8\x97p\xc7*S&\0\xb6l\xd9\x82\x83\x83=c\xc7\x8e\xd1\xdc\f[[\xdb\x30\xec\xfb\x31\xf8x{'jLs\\\x8c\xb9\xbd\x84\x10r]J\fc=\xcf\x45?\xd4]\xb9r\x95!\x83\a0|\xc4X\0\x2\x3?\xe1\xe7\xb7\x9b\xdd\xbb\xb6\x92-[\xd6\x14\x95\xa1V\xaby\xfb\xf6-\xeb\xd7o\xa0\x61\xfd\x9a\xe4\xc9\x93\x87\x37o\xde\xc6\xd8&1\xf7{%K\x96\x88Z^\xde\x93\x62\xc5\x8a\xa5\xa8N\xc9\x61\xacm\x9cR\x12\xff\xda\x19\xeb\xb1\x91\x1a\xf1\x1f\x19\x19\xc9\xe3\xc7\x8fY\xb7~#\xdf\xf5\xea\x1e\xe7\xc4\xc7W\xaf^\xc5o\xe7~\xfe:s\x92\xec\xff\xff\x62\xbf`\x81\x82\xd4m\xf0\x35\xfe\xfe\xfe\x94/_\x9e\xf2\xe5\xa3\x12\x5%K\x96H\xd6\xfd\xe8\x9b\x37o\x98;\x7f\x31sfMOv\xc2\xd7X\xdb\x39\xa5\xe4\x1c\xa0\x9d\xae\x8f\r\x9d&v\xea\x37\x88=\xfe\x31\xb3\x83}\x8a\xf7[\xb7\x41\x33\xcd\xff\xb3:;\xb2h\xc1,<=\xff}\x5t\xfd\xba\xd5\x35I\x1d\x80\xa7O\x9f\xf2\xfe\x43\x10\x45\x8a\x14\xd1,\xb3\xca\x94\x89\xbaujr\xfd\xda\x8d\x14\xd7'=H\xec\x30\x19\x13\x13\x13\xa6M\x99\x80\x42\xa1`\xeb\xb6\x1d\0th\xef\xc3\x94I\xe3\x13=\xbb\xbcH9}\xc5V\\\xbe|\xd3@\xee\xdc\xb9\0\b\xe\xfe\x14\xef\xf6W\xae\\\xa5J\xe5J1.xe\xcb\x96!b\fff\xe6l\xfe\x61\r\x85\n\xe6O\xf6\xfe\xb7\xf8\xed\x61\x8b\xdf\x1e\xcd\xcf\xad[6e\xca\xe4Iq>T\xc9\xfd^\xfa!\xf1o\x1c\xf4\x1d\xff\x83\x6\x8f\x64\xd0\xe0\x7f\xe7]\x19\x36\xb8\x1f\x9d:u\x8cs\xdb\xbbw\xefQ\xbchAMR\a\xa0P\xa1\x82\xb8\x64w\xe6\x9f\x7f\xfe\xd1\xbcM+\xb9\xc2\xc2\xc2\x18=f,^-\xbe\xa6v\xedZ)\xda\x97\xd0N\xce\x1)\xa7\xb3\xc4ND\x84\x92\x6\xf5\xea\xc6\xb9.\xba\x1b-\x80R\x99\xb4\xf1\x89\0\xa3G\f\xa6T\xa9\x92\x38::\xe2\xe6\xe6\xa6\xb5\x1b]xx8\x10\xfb\0\xb1\xb4\xb0$S&\xcb$\x97\x9fR_\x8e\x97\x3\xfdt\xc1\xfb\xe3\xcf\xb3\f\x1a<\\\xf3\xf3\x87\x8f\x1f\x99\x37\x7f\x31\x83}\xfb\xa3V\xab\x99=g\x81\n\xd0\xa8\x89\x17\xf3\xe7\xcd\xa4r%\xedo\x88\x30\x31\x31\x61\xea\xe4\xf1(\x14\x80\x42\xc1\x94\x89\xe3\x8c\x32pR\xa3\x1d\xf4\x41\x9f\xb1\xa5Mbf\xff\xf\r\xfdLddd\x8c\x65\xd1\x89\xd6\x94\xccO`\xac\xed%\x84\x88\"\xd7%\xed\x8c\xed<\x17\xe3\xa1n\xdb\xf\xe4\xc9\x13\x95\xfco\xe5\xd5\x2S33,\xcc\xcd\xf1\xf4(\x97\xe2rvl\xdb\x80\x99\x99\x39...\xb8\xb8\xe4\x88\xf7Z\x94\xd6\xee\xf7\xe2\x62lm\xac+\x12\xff\xda\x19\xdb\xb1\x91\x1a\xf1_\xad\x8a'\xfd\xfb\xf5\xc5\xda\xda\x1a\x37\x37\x37\x1c\x1d\x1d\xe3\xdd\x36,<\x8c\xf0\xf0\xd8\xf7\xbe\xb6\xb6\x36XXX\xa4\xa8\x1e\x91\x91\x91\xcc\x9c\x39\v\xa5R\xc9\xb0\xe1\xc3Rt|\x19[;\xeb\x8a\x9c\x3\xb4\xd3\xf5\xb1\xa1\x93\xc4\xce\xd3\xa7O\xa8\\\xadv\x8c\x31t\t\xf1(W6I\xfb\xafU\xab\xa6\xe6\xadX\x89\xe1\xe6\xe6\x86\xa9\xa9\t\x97.]\"g\xce\x9c@T\x80\xfe\xf1\xe7\xd9\x18]\xb4\xa2'\xc1\x32\x37\xff\xf7\xe1\x33<<\x1c\x85\x42\xa1uYb}\xd9`\xd1\x8d\xf4\xe5x:]\x5\xf5\xf9\xf3\xfe\xb1\xfe\xfe\x8b\x97\xae`\xd3\x16?P\xab\xf9\xf0\x9fI\xc7^\xbc|\xc9\xb9\xbf\xfc\x13\x15<\x10\x15@S&\x8d\xd7\xfc\xdf\xd8\xa4V;\xe8\x9a\xbe\x63K\x17\x8a\x17/\xc6\xde}\a\x18\x38p\x80\xe6\x42z\xeb\xd6-\x1c\xecm\x93=\xce\xd5X\xdbK\b\xf1/\xb9.%\xcc\x18\xcfs\x8b\x17/\xe3\xda\xb5\xeb\x31\x1e\xea\xa2\xb5h\xd6T'eth\xeb\x95\xa8\xd7\x92\x43\xe2\xef\xf7 \xe9\x13\x9f\xea\x82\x31\xb6\xb1\xaeH\xfc'\xcc\x18\x8f\x8d\xd4\x88\xffV\xad\x12\x1f\xff\xf9\xf3\xe5\xe3\xee\xfdG<|\xf8\x90\xbcy\xf3\x2\x10\x10\x10\xc0\xdd\xfb\x8f\xbexn\x8cJ\n'%\xfe###\x99={\xe\xf\x1e \x9b\xf1\x63G\xc6\x18\xd6\x95X\xc6\xdc^B\x88\x7f\xc9u)~\xc6z\x9e\xeb\xd9\xe3[\xda\xf8\xb4\xc6\xcd\xcd\x30\x93SF\xbf\x6\xf7\xf2\x95+8;;\x93;wn\xad\xf7{\xf6\xf6\xf6\x14\xc8\x97\x8b\x3\a\xe\x61gg\x87\xb3\xb3s\xaaL\xaei\xacm\xac+\x12\xff\xf1\x33\xd6\x63\xc3\xf0\xf1\x1fuO\xe9\xef\xff\x37\xc5\x8b\x17\xc3\xd3\xd3\x93\x9a\xd5+1p\xd0`\xfa\xf7\xeb\x83\xb9\xb9\x5\xab\xd7\xac\xa1\x9dO\vJ\x94\x88\x9a[+:\xe1\xbbw\xef^<<<(T\xa8\x10\xb6\xb6\xb6\xf1\x96\x11\x19\x19\xc9\xacY\xb3Y\xb1z#\xabW,\xe2\xf6\xed;\x9auNN\x8e\x14(P \xd1\xf5\x35\xd6v\xd6\x15\x39\a\xc4O_\xc7\x86N\x12;\x83\x6\xf4\x61\xd0\xc0~\xba\xd8\x95\xce\xf4\xec\xd1\x3'GGv\xee\xda\xc3\xbbw\xef\xa9S\xbb&~\xdb\x36k\x82\xd9\xc4\xc4\x84\xaf\x8a\x14\x46\xa1Ph\xe\x8a\xe8\x65\xe6\xe6\xe6\xb1\x96YXZ&\xf9\xe0\xf9\xea\xab\x42\xf1\x36J\xc3\x6\xf5X\xb6x>_}\x95\xf8\x9eH\t\xb1\xb6\xb6\x62\xcc\x98\xe1\\\xbcp\x99n];s\xde\xdf\x9f\xe1#\xc6\x10\x11\xa1\x4\xc0\xc2\xdc\x9c\x19\xd3'Q\xde\xd3\x93u\x1b\x36R\xb6li\xac\xac\xactRvr\x94,Q\x82+W\xaf\xf2\xfb\x1f\x7fj\xdd\xb6\x62\xc5\x94\x8d\x91M\xcdv\xd0\xb5\xb4\x18[\xff\x95\x35kV\xf6\xef\xdd\xc9\xf2\xe5+\x18>b4\xc5\x8a\x16\x61\xd2\xc4q\xd4\xad['Y\xfb\x33\xe6\xf6\x12\x42\xfcK\xaeK\xf1\x33\xd6\xf3\x9c\x9d\x9d-vv\xf1?\x14\xe9\xbf|;\xe6\xcc\x9c\xc4\xa2\xc5\xcb\xf9\xf0\xfe\x3\xbe\xbe\x83\xb4\xde\xef)\x14\n\x96,^\xc0\xf4\x19\x33\x19\x32\xf4{\x86\f\x1e\x98*\x89\x1d\x63mc]\x91\xf8\x8f\x9f\xb1\x1e\x1b\x86\x8e\xff\xd2\xa5K\xf1m\xb7\xe\x8c\x1b?\x91\xd1\xa3\x46P\xbf~=\x16/Z\xc0\x9a\x35k\x99=g\x1e\xe\xf6\xf6\x34i\xd2\x98v\xed\xdaj>\x93+\x97\x1b+\x96\xce\x63\xe1\xa2\xa5\x1c\xfd\xe9g\xa6M\x9d\x1c\x63N\xae\xffz\xf6\xec\x19+Vo\x4\xa0G\xef\x1\x31\xd6\xf5\xef\xdb\x9d\xa1\x43\x86$\xba\xbe\xc6\xda\xce\xba\"\xe7\x80\xf8\xe9\xeb\xd8P\xdc\xbe\xff\\\x9d+g\xf2g.?q\xe2\x64\xba\xcd\x34\x1a\xbbz\x8d\x9aq\xe7vTV\xb1\xc8W\x85\x39\xf6\xe3~\x3\xd7\bj\xd7mD\xd3&\x8d(U\xb2\xa4\xd6m\xb3\x38g\xa1t\xa9\x12\xa9P\xab\xa4{\xf2\xfc\x35\xda\xe2&1\xdb$DbK\b\x91\xde\xc8uI\x7fR\xe3\xba\x94\x1e\x4\x5\x5\xf1\xf0\xe1\xc3x\xd7[[['\xe9[y\x91x\x12\xff\xfa#\xf1\x9f\x38/^\xbc\xe0\xf5\xeb\xf8\xa7\x37\xc8\x96-[\x8c\xc9\x98\x85n\xc9\x39@\x7f\x9e<\x7f\x9d\xf2\x1e;\xf2\xe0\x99v\xd5\xadU\x13{[;\0*\x94\xf7\xd0\xb2u\xeap\xcb\x95\x8b\x43\x87\x8fp\xe8\xf0\x11\xad\xdbV\xacX>\xcd\x6Oj\x90\xd8\x12\x42\xa4\x37r]\x12\x86\xf6\xf0\xe1\x43\x9a\x36\xf7\x89w}\xab\x16M\x98\x37oN*\xd6(\xe3\x90\xf8\x17\x86\xf6\xcb\xaf\xbf\x32r\xf4\xa4x\xd7\xcf\x9a\x31\x91\x36>\xf1\x9f\x1f\x44\xca\xc8\x39@\xbfR\xdc\x63G\x88\x8cH\xbe\x19\x11\x42\b\x91\x96\xc8uI\x88\x8cK\xe2_\x88\x8c\xed\xc9\xf3\xd7\x18\xdf\x14\xd2\x42\b!\x84\x10\x42\b!\x84\x10\x2@\x12;B\b!\x84\x10\x42\b!\x84\x10\xc6J\x12;B\b!\x84\x10\x42\b!\x84\x10\x46J\x12;B\b!\x84\x10\x42\b!\x84\x10\x46*\xc6[\xb1\x9e<\x8f\xff\xf5o\"m\x92I\xd0\x8c\x83\xc4V\xda\"q#\x84\xc8\xe8\xe4\xba\x64\xfc\xe4Z&\x92K\xe2?}\x90s\x80\xf8\x92\xf4\xd8\x11\x42\b!\x84\x10\x42\b!\x84\x30R1z\xecH\xd6O\b\xfd\x90\xd8\x12\x42\b\x91\x96\xc8uI\x88\x8cK\xe2_\x88\xf4G\x86\x62\t\x91\x4\xc9\xbd\x10Jl\t!\x84\xd0\a\xb9.\t\x91qI\xfc\v\x91\xb1}y\xe\x88\xb3\xc7Np\xf0g\x2?\x5\xa3\x8cT\xa5n\xcd\x84Hc,,\xcc\xc9\x64i\x81\x83\x9du\x8a\xf6#\xb1%\x84\x10\x42\x17t}]\x12\x42\x64<\x12\xff\x42\xa4?f\xff]\x10\xf0\xea\x1dV\x16\xe6\xe4v\xcb\x8a\x99\xa9L\xc1#2\xb6\xb0\xb0\b>\x6\x86\xf2\xf4\xf9\x1b\xdcr:\xa7h_\x12[B\b!RJ\x97\xd7%!\x84\x10\x42\xa4\xf\x31\x12;\xc1\xc1\x9f\xc9\x64i\x8eKvGC\xd5G\x88\x34\xc5\xd2\xd2\x9clY\xcd\x31\x35\x83\xe0\x90\x30l\xac-\x93\xb5\x1f\x89-!\x84\x10\xba\xa0\xab\xeb\x92H\x9c\xf0\xf0p\x9e={\xc6\xa7\xa0 \"\x94\x11\x86\xaeN\xb2\x99\x9b\x99\x63kg\x87\xab\xab+\x16\x16\x16\x86\xae\x8e\x10\x46\x41\xe2_\x18\x93\x18\xdd\x6\x2?\x5\x93\xcd\xd9\xc1Pu\x11\"\xcdr\xb0\xb7\xe1\x63`p\xb2?/\xb1%\x84\x10\x42\x97Rz]\x12\xda\x85\x87\x87s\xf3\xe6M\xde\xbf\x7fg\xd4\xfu\0\x11\xca\b\xde\xbf\x7f\xc7\xcd\x9b\x37\t\xf\xf\x37tu\x84H\xf3$\xfe\x85\xb1\x89\x91\xd8QF\xaa\x64\x88\x88\x10q035%R\x15\x99\xec\xcfKl\t!\x84\xd0\xa5\x94^\x97\xd2\nCM\xe2\xfa\xe4\xf9k\xad\x65?{\xf6\x8c\xc8He*\xd5(\xb6\xac\x39r\xeb|\x9f\x91\x91J\x9e={\xa6\xf3\xfd\xeaRb\xda\x46\xa4\xf\x12\xff\xf1\x93\xf8\x17I%O\x9a\x42\b!\x84\x10\x42\xfc\xc7\xa7\xa0 CWA/>}J\x9f\xbf\x97\x10\xba$\xf1/\x8c\x8d$v\x84\x10\x42\b!\x84\xf8\xf\x63\x1f~\x11\x9f\x88\x88\xf4\xf9{\t\xa1K\x12\xff\xc2\xd8HbG\b!\x84\x10\x42\b!\x84\x10\xc2HIbG\b!\x84\x10\x42\b\x1dy\xf2\xf4\x39O\x9e>7t5\x84\x10\x6 \xf1/\f\xc5L\xfb&B\b!\x84\x10\"\xa3\xf1\xdb\xbe\x8b\xf3\xfe\x17\x12\xbd}\xa5\x8a\x9e\xb4n\xd5R\x8f\x35J\xfb\x9e<}\xce\xb8\tS\x1\x98\x34\x61\x34\xb9\xdcr\x1a\xb8\x46\xfa\xb3`\xe1\x92\x38\x1f`==\xca\xd2\xb6Mk\x3\xd4H\xbb\xf5\x1b\x36\x3\xd0\xadkG\x3\xd7$\xed\x93\xf8O:\x89\x7f\x89\x7f\x43\x92\xc4\x8e\x10\x42\b!\x84\x88\xe5\xbc\xff\x5\xe\x1d>B\xa1\x82\x5\xb4n\xfb\xe9\xd3'v\xed\xdeKh\xc8g:uj\x97\n\xb5K{\xa2\x1f\xea>|\xf8\b\xc0\xb8\tS\xd3\xf5\xc3\xdd\xc3GO\xb8w\xef\xbe\xe6\xe7\x9b\xb7n\xa1TF\xbd\xa9-\xad>\xd8\xfd\xf6\xfb\xef@\xfa}\xb0\xd3%\x89\xff\xa4\x91\xf8\x97\xf8\x37\x34I\xec\b!\x84\x10\x42\x88\x38\x15*X\x80\x3\xfbv\xf0\xf6\xed\xdbx\xb7\xb1\xb7\xb7\xc7\xd4\xd4\x8c!CG0f\xfc$\x80\f\xf7p\xf7\xe2\xc5+\xc6M\x98\x8a\x99\xa9\x19y\xf3\x44\xbd\xa6\xf8\xd3\xa7`\xc6M\x98\xca\xf4)\xe3\xc9\x91#\x9b\x81k\xa8{\v\xe6\xcd\xfc\xf7\xff\v\x97p\xf5\xdau\xcc\xccL\rX\xa3\xf4/44\x94\xb6\xed\xbb\xa0\x30\x31\xc1o\xcb\x6\x32\x65\xca\xa4\xd7\xf2$\xfe\x13G\xe2_\xe2?\xb5$t\xe\x90\xc4\x8e\x10\x42\b!\x84\x88\xd7\xdb\xb7o\xf1\xa8P=\xde\xf5\v\xe6\xcd\xa4\x65\x8b\x66\xcc\x9d\x33\x3\x80\x31\xe3'ae\x9d)C\r\xcbpr\xcaL\x99\xd2\xa5\xf0i\xdd\x82\xb5\xeb\x7f\0\xe0\xfb\x61\x83\xd8\xb1k\x1fNN\x99\r\\;\xfdZ\xb0p\t\xf3\x17.\xc5w`_\x8e\x9f\x38i\xe8\xea\xa4kVVVL\x99<\x1e\xafV\xed\x98\x34\x65:\xd3\xa6L\xd4{\x99\x12\xff\xdaI\xfcK\xfc\xa7\x96\x84\xce\x1\x32y\xb2\x10\x42\b!\x84H133S\xe6\xce\x99\x41\xbe\xbcy8s\xf6\xbc\xa1\xab\x93*\x2\x2^\x10\x1a\xfa\x19\v\v\v\x6\xf4\xeb\x19\xe3\x9b\xf9\x1c\x39\xb2\x31\xa0_O,,,\b\xf\xf\xe7\xc5\x8bW\x6\xac\xa9~|\xf9P7h`?CWG\xab:5kR\xa7\x66MCW#EJ\xb8\x17g\xcc\xe8\xef\xd9\xb2u\x87\xa1\xab\x12\x83\xc4\xbf\xc4\x7fZ\x97\x1e\xe2\x1f\xe2?\aH\x8f\x1d!\x84\x10\x42\b\x11/SSS\\]]\xe3]occ\xad\xf9\xbf\x99\x99)\xb6\xb6\xb6\xa9Q-\x83\x8b\x9eS\xa3\x84{1\x6\xf\xea\x9b\xe0\xb6+Vm\xe0\xe2\xa5\xcb\xe9j\xce\rc{\xa8\x3\xe8\xd8\xb1\xad\xa1\xab\xa0\x13\x9d;\xb5\xe7\xcc\xd9\xbfR\xa5,\x89\xff\xb8I\xfcK\xfc\x1bR\\\xe7\0I\xec\b!\x84\x10\x42\x88x999\xf1\xe7\xe9\xe3\xa9^\xee\xb3g\xcf\x38\xfd\xfb\x99\x38\xd7U\xabZ)\xc1\x87M}\x8b~\xa8\x33\x33\x35\xa3}[o\xad\xdb\xfb\xb4n\xc1\xd5\xab\xd7u6\xa1\xea\xeb\xd7o\xb8t\xe5Z\x9c\xebJ\x97t'kV\xe7\x14\xed_\x9b\xf8\x1e\xea\n\x16,\x90\x66\x1f\\\x95\xcaH\x8e\xfc\xf4\x13\x1f\xde}\xa4];\x1f\xa3\x9e\xf\x44\xa1P0{\xc6\x94T)K\xe2?6\x89\x7f\x89\x7f\x43\x8b\xeb\x1c \x89\x1d!\x84\x10\x42\b\x91\xe6\xb8\xb8\xb8p\xe9\xf2\x15\xb6\xf9\xed\x8c\xb1\xbc};\x1f|\xbc\xbd\fT\xab\x98o\xbf\xc9\x9b'\xb7\x66N\x8dhw\xee\x46\xbd)f\xea\xf4\x39\x31\x96\xdb\xda\xda\xf0\xf0\xd1\x63\x9d<\xdc\x65\xc9\xe2\xc4\xbd\xbb\xf7\x39v\xfc\xd7\x18\xcb\xeb\xd7\xabM\x9dZ\xf1\xcf\x87\xa2\v\t}S\xff\xe5\x84\xaa\x86\xb2~\xc3\x66\xcd\xdbo j\xf8\x45\xc7\x8em\xd9\xb6m\x87\x66r\xdf\xccN\xe|\xdd\xa4\x31\x9b\x37\xfbq\xe2\xe4I\xcd\xb6\xd5\xabV5\x9a\x37\xe6\xd8\xd9\xdb\x19\xba\nz%\xf1\x1f?\x89\xff\xf8\x65\x94\xf8\x87\xd8\xe7\0I\xec\b!\x84\x10\x42\x88\x44\v\v\vc\xdf\x81\xc3\0\xb4h\xd6\x4KKK\xbd\x94\x63\x62\x62\xc2\xb4)\x13P(\x14l\xdd\x16\x35\x97@\x87\xf6>L\x99\x34\x1e\x13\x93\x8c=M\xa4\x89\x89\t\xbdzv\x3\x85\x82\x63?\xff\x2@\x83\xfa\xb5\xe9\xd9\xbd\xab^\xff\x36\xc6\x38\x42K\xd5[\0\0 \0IDAT\xfc\"Zf'\a\xcd\xff?\xbc\xfbh\xc0\x9a\x18\x37\x89\x7f\xc3\x93\xf8O\xba\x8c\x10\xff\x92\xd8\x11\x42\b!\x84\x10\x89\xd6\xa9Kw\xce\xfd\xe5\xf\xc0\x9e=\xfb\xf0\xdb\xba\x11\x85\x42\xa1\x97\xb2LLL\x98:y<\n\x5\xa0P0e\xe2\x38\x83?\xd4\xe5r\xcb\xc9\xa4\t\xa3\x19\x37\x61*\x9f>\x5\xf3\xfd\xb0\x41\x31&M\x8d\xfe\xa6~\xf4\xc8\xa1\x9a\x65/^\xbc\x62\xec\xf8\xa9\x64\xce\xec\xa0\xb3y6LLL\xe8\xd5\xa3k\xd4\xdf\x6\x5=\xbbw\xd1\xd9\xdf\x66\xc1\xc2%<|\xf4$\xd6+\x8d\x8d\xe1\xa1\xae[\xd7\x8eq~\xeb\xde\xa8\x41\x3\xa6L\xfcHf'\a\x1a\x35h\0\x44\xcd\xb9\x61\xac\xf3n\x4\x6\x6\x62oo\x9f\xea\xe5J\xfcK\xfcK\xfc\xa7\r\xff=\ad\xect\xa7\x10\x42\b!\x84H\xb4\xe7\x1\x1\x9a\x87:\x80\xb3\xe7\xce\x13\xf0\xe2\x85^\xcb\x34\x31\x31\x61\xca\xa4\xf1i\xe2\xa1.Z\xf4\xc3\x9d\x32R\xc9\x8e]\xfb\xb4n\xbf\x63\xd7>\x94\x91J\x9dO\x9ejbbB\xcf\xee]u\xfaP\aQ\xc3M\xee\xdd\xbb\xaf\xf9\xd9X\x1e\xea\x12\x62\x66\x66J\xa7N\xed\xf8\xbaIc\xa3\x9f_C\xadV3|\xc4\xd8T/W\xe2?\x8a\xc4\xbf\xf1IO\xf1\xfq\x9f\x3\xa4\xc7\x8e\x10\x42\b!\x84H\x94,NNdvp\xe0\xc3\xc7\xa8\xae\xec\x99\x33g&\x8b\x93\x93\xde\xcbM+\xft_\xca\xe5\x96\x93\xe9S\xc6\xe3\xe4\x94Y\xeb\xb6\xbd{v\xe5\xdd\xbb\xf\x31\xbe\xd9\xd7\x15}\xffm\xd2\xc3\x43]\xb4\xcd\x9b\xfd\0\xe3\x7f;\xce\xf\x9b\xb6r\xe4\xe8\xb1T/W\xe2\xff_\x12\xff\xc6'\xbd\xc4?\xc4}\xeH{Q\"\x84\x10\x42\b!\xd2$KKK\xd6\xad]N\xe5J\x15\xa8R\xb9\"\xeb\xd7.\xd7\xdb\x1c\x1b\xc6 G\x8elXXX\xf0\xe6\xed[\xc6O\x9c\xce\xabW\xaf\x35\xeb^\xbe|\xc5\xf8\x89\xd3y\xf3\xf6-\x16\x16\x16zy\xa8\xd3\xb7\xf4\xf4P\ap\xe2\xe4\xc9\x18\x93\xa5\x1a\xa3+W\xaf\x31\x65\xeaL:\xb4\xf7I\xf5\xb2%\xfe\x63\x92\xf8\x37.\xe9!\xfe!\xfes\x80\xf4\xd8\x11\x42\b!\x84\x10\x89V\xael\x19\xb6m\xd9`\xe8j\xa4)\x9f?\x87\xf3\xf8\xc9SF\x8f\x9d\x82\xad\xad\r\0\x63\xc6ME\x19\xa9\xe4\xf3\xe7p\x3\xd7.yn\xde\xba\xc5\xd5k\xd7\xd3\xcd\x43]z\x10\x1a\x1a\xca\xd8q\x93(\xee^\x8cqcF\x1a\xa4\xe\x12\xff\xb1I\xfc\x8b\xd4\x92\xd0\x39@\x12;B\b!\x84\x10\"Nw\xef\xdd\xa7i\xb3\xd6I\xfeL\x91\"\x85\xf5T\xa3\xb4\xc9\xcd\xd5\x45\x33\xa1\xea\xc3G\x8f\x1\x34\x13\xa5\xba\xb9\xba\x18\xb8v\xc9\xa3TFbff\xca\xf1\x13'9~\xe2$\0\x5\v\x16H\x13\xaf\x34\xce\xa8\xac\xac\xac\xd8\xbfwG\xaa\x95'\xf1\x9f\x38\x12\xff\"\xb5$t\xe\x90\xc4\x8e\x10\x42\b!\x84\x88\xc5\xd3\xa3l\xb2>W\xa4H\xe1\x64\x7f\xd6\x98}\xf9\xb6\x1c@\xe7\x13\xa5\xa6\xa6\xf8\xda\xcfX\x7f\x9fh\xd5\xabV5t\x15\x8c\x86\xc4\x7f\xd2H\xfc\xa7}\xe9=\xfe%\xb1#\x84\x10\x42\b!bi\xdb\xa6\x35m\xdb$\xed\xdb\xfa\x8c.\xfa\xe1.\xfa\xff\xc6*\xbd\xb6}\\\xaf\x41\x16qK\xaf\xc7\x80>I\xfc\xa7m\xe9=\xfe%\xb1#\x84\x10\x42\b!\x84\x8e\x18\xf3\x3\x9d\x10\"e$\xfe\x85\xa1\xc8[\xb1\x84\x10\x42\b!\x84\x10\x42\b!\x8c\x94$v\x84\x10\x42\b!\x84\x10\x42\b!\x8c\x94$v\x84\x10\x42\b!\x84\xf8\xfs3sCWA/\xcc\xcd\xd3\xe7\xef%\x84.I\xfc\vc#\x89\x1d!\x84\x10\x42\b!\xfe\xc3\xd6\xce\xce\xd0U\xd0\v[\xdb\xf4\xf9{\t\xa1K\x12\xff\xc2\xd8\xc8\xe4\xc9\x42\b!\x84\x10\xc2 r\xe5\xcc\x9a\x66\xcbuuu%00\x90\xc8He*\xd4(\xb6\xd7/\x1e\xeb|\x9f\xa6\xa6\x66\xb8\xba\xba\xea|\xbf\xba\x64\xa8\x63\x42\xa4>\x89\xff\xf8I\xfc\x8b\xa4\x92\x1e;B\b!\x84\x10\x42\xfc\x87\x85\x85\x5\x45\x8b\x16\xc5\xd1\xd1\xc9\xe8\x87/\x98\x9b\x9b\xe3\xe8\xe8\x44\xd1\xa2\x45\xb1\xb0\xb0\x30tu\x84H\xf3$\xfe\x85\xb1\x91\x1e;B\b!\x84\x10\x42\xc4\xc1\xc2\xc2\x82|\xf9\xf2\x19\xba\x1a\x42\b\x3\x90\xf8\x17\xc6\x44z\xec\b!\x84\x10\x42\b!\x84\x10\x42\x18)\xe9\xb1#\x84\x10\x42\b!P\xab\x41\xa9R\x12\xa9\x8c$R\xa5\x44\xad\x6\xb5Zm\xe8j\t\x91\xe1(\x14\n\x14\n051\xc3\xd4\xcc\x14\x33\x13\x33\x14\n\xfd\x96)\xf1/D\xda\x91\x9cs\x80$v\x84\x10\x42\b!28e\xa4\x92\xb0\xb0\x30T\xf2 '\x84\xc1\xa9\xd5j\xd4jP\xa9\"\x88PF`\xa2P`ii\x89\x99\xa9~\x1e\xdd$\xfe\x85H[\x92s\xe\x90\xa1XB\b!\x84\x10\x19XXX\x18\xa1\x9f?\xcb\x43\x9d\x10i\x94J\xad&\xf4\xf3g\xc2\xc2\xc2t\xbeo\x89\x7f!\xd2\xbe\xc4\x9c\x3$\xb1#\x84\x10\x42\b\x91\x41\x85\x85\x85\x11\xae\x8c\x30t5\x84\x10\x89\x10\xae\x8c\xd0irG\xe2_\b\xe3\x92\xd0\x39@\x12;B\b!\x84\x10\x19\x90\x32R)\xfuB\x18\x99pe\x4\xcaHe\x8a\xf7#\xf1/\x84q\x8a\xef\x1c \x89\x1d!\x84\x10\x42\x88\xff\xb1w\xe7qQ\xd5\xfb\x1f\xc7\xdf\x3\x3\x88\b(\x8a\x81\xa0\x95\n\xa2h\xddr)\xcb\x35\xcb%\x97\xcc\f5\xcd%\xcd\xba\x95\x66\x66\x66\xe6\x9e\xb6\xd9\x66\x9aYf\x9aZ\x9a\x99\x9a\x99Kaz\xcb\xca\xd4J\xdb\x34\x97~\x99)\xb8\xa3 \xeb\xc0\xfc\xfe\xe0\x32W\x4\x64\x6\x6\xe6\f\xf3z>\x1e<\x84\x33\xe7\xcc\xf9\0\xf3>\xf2\xfd\x9cs\xbe\xe3\x61\xacV9\xed\xcc\xff\xef\xbf\xfd\xaa\xd8\x98(\x9d \a\x83\x39\xa0h\xa5\xc9\x30\xf9\a\xdc\xdf\xa5\x39\xa6\xb1\x3\0\0\xe0\x61\xac\x65\x38\xb2;t\xe8\xa0\xe2\xee\xbaSc\xc7\x8dW\x9f\xbe\xfd\x64\x36\x9b\x35\xea\xb1\xd1zp\xf8\x30\xf9\xf8\x98\xd5\xb0\x61\xac\x36\xc7\x7f\xa1\xd3\xa7O\xeb\xf6\xae\xdd\xcb\xac\xe\xa0\"+M\x86\xc9?\xe0\xfe.\xcd\x31\x8d\x1d\0\0\0\x38M@@\x15\xc5\xc6\x36VXX\xb8mY\xeb\x36m\xb5`\xe1{Z\xf9\xd1\n\xadY\xbdJm\xdb\xb6\xd7\xfc\x5\v\x15\x12\x12R\xe4\xf3p+\x6\xe0~\xc8?\xe0\x1a\x34v\0\0\0Pb\x8d\x62\x1b\xe7\x9b\xe8\x34,,L\x8b\xdf_V`\xbd\x1b[\xde\xa4\x1b[\xde\x64\xf7\xf3\x32\x98\x3\x8c\x8f\xfc\x3\xc6@c\a\0\0\0\x86\xc3\x19{\xc0s\x91\x7f\xc0\x31\x34v\0\0\0`8\f\xe6\0\xcf\x45\xfe\x1\xc7x\xb9\xba\0\0\0\0\0\0\0\x94\fW\xec\0\0\0\xc0p\xb8\x15\x3\xf0\\\xe4\x1fp\f\x8d\x1d\0\0\0\x18\xe\x83\x39\xc0s\x91\x7f\xc0\x31\x34v\0\0\0`8s\xe7\xcc\xce\xf7\xf5\x43\x8f\x8cpQ%\0\xca\x1b\xf9\a\x1c\x43\x63\a\0\0\0\x86\xc3@\xe\xf0\\\xe4\x1fp\f\x93'\x3\0\0\0\0\0\xb8)\xae\xd8\x1\0\0\x80\xe1\x30y*\xe0\xb9\xc8?\xe0\x18\x1a;\0\0\0\x30\x1c\x6s\x80\xe7\"\xff\x80\x63h\xec\0\0\0\xc0p8c\xfx.\xf2\xf\x38\x86\xc6\xe\0\0\0\f\x87\xc1\x1c\xe0\xb9\xc8?\xe0\x18&O\x6\0\0\0\0\0pS\\\xb1\x3\0\0\0\x87\xa4\xa7\xa7\xeb\x83\xa5K\x14\x1f\xff\xb9\x2\x3\x83\xd4\xb5[wu\xefq\x87L&S\x91\xdb\xec\xd9\xb3[K\x17\xbf\xa7\x1f\x7f\xd8\xa5\xba\xf5\xea\xa9\xd7]w\xabS\xe7.\xf2\xf2*\xfc<#\xb7\x62\0\xc6\x44\xfe\x1\xe3\xa1\xb1\x3\0\0\0\xbbY,\x16=\xf5\xe4\x13JII\xd6\xb0\xfb\x1f\xd0\x99\x33g\xf4\xcc\xd4\xc9:{\xf6\xac\x6\r\x1eR\xe8\x36\xbf\xfd\xfa\xab\xee\xe9s\xb7\x46\x8d\x1e\xa3\x9ew\xf6\xd2\x1f\xfb\xf6i\xc2\xf8q\xca\xc8\xc8P\xcf;{\x15\xba\r\x83\x39\xc0x\xc8?`L4v\0\0\0`\xb7\x1d;\xbe\xd7\xb6\xaf\xbf\xd2\xa6\xf8-\n\t\t\x91$\x5\a\ak\xdc\xd8\x31\xea\xd6\xbd\x87\xaaW\xaf^`\x9b/\xbf\x8c\xd7M7\xdf\xac\xfb\x87? I\xba\xb9UkeY\xb2\xb4i\xe3\x86\"\av\x9c\xb1\a\x8c\x87\xfc\x3\xc6\x44\x63\a\0\0\0v\xdb\xb8\x61\xbd\xee\xe8y\xa7mP'I7\xdd\xdcJ\xd9\xd9\x39\xda\xb5sG\xa1\x83\xb0\x80\x80*JHHPZZ\x9a\xfc\xfd\xfd%I\xa7O\x9dR\xfd\xa8\xa8\"\xf7\xc3`\xe\x30\x1e\xf2\xf\x18\x13\x93'\x3\0\0\xc0n\a\xfe\xf8\x43u\xae\xbc*\xdf\xb2\x80\x80\0\x45\x37\x88VbBB\xa1\xdb\xf4\xb8\xe3\xe\xf9W\xf2\xd7\xe8Q#\xb5\x66\xf5*=\xff\xdc\f%&\x1e\xd7\xa0\xc1\xf7\x95\x43\xc5\0\x9c\x85\xfc\x3\xc6\xc4\x15;\0\0\0\xb0\x8b\xd5j\xd5\xde\xbd{\xd5;.\xae\xc0\x63\xa1\xa1\x35u\xe6\xec\x99\x42\xb7\xabQ#T#G\x8d\xd6\x83\xc3\x87\xea\xab\xffl\x95$-\xfd`\xb9j\xd4\xa8Q\xe4\xbe\x62\x63\n?\x9b\xff\xdb\xbe\x3\x8e\x17\xe\xa0\xd4\xc8?`\\4v\0\0\0`\x17\x93\xc9\xa4\xba\xf5\xea*99\xb9\xc0\x63g\xcf\x9eQhhh\xa1\xdb\xad\xfd\x64\x8d\xdezs\xae\xde~\xe7]5nr\x8d\xb6\x7f\xf7\xad\x46\x8d\x1c\xa1;{\xdd\xa5G\x1f\x1b]\xe8\xbb\xe9\x30\x80\x3\x8c\x85\xfc\x3\xc6\x45\x63\a\0\0\0v\x8b\x8en\xa0?\xff\xfc\x33\xdf\xb2\x8c\x8c\f\x1d:xHaa\xe1\x5\xd6\xb7X,zn\xc6t\x8d\x9f\x30Q7\xb7j-)w\xfe\x8c\xc0\xc0@\xdd?t\x88z\xdc\xd1Su\xeb\xd5+\xb0\x1d\x93\xa7\x2\xc6\x43\xfe\x1\x63\x62\x8e\x1d\0\0\0\xd8\xed\xb6\x8e\x9d\xb4v\xcd\x1a\x9dG\x8b\x16\xbd\xab\xd9\xaf\xbf\xa6\xf0\xf0Z\x1a?ab\xbe\x33\xeb\x35j\x84\xaa\xc9\x35\xd7*((H\x92\x34t\xd8p]u\xd5\xd5\xfa\x64\xcdj-\x98\xff\xb6\xae\xae[W\xb7\xde\xd6Q=\xef\xec%\xb3\xb9\xf0?G\xb9\x15\x3\x30\x1e\xf2\xf\x18\x93\xe9\x8f\x43\xc7\xac\xb5k\xe5Ntu\xe4\xd8IE\xd7-xo$\0i\xff\x9f\t\xba\x38+y\x9f\x17\xe5\xe2u\xc8\x16\0\xc0\xd9J\xf3\xffR\xf2\x85\x94\xcb\xae\xebj\xb1\x31QL\x9e\n\x14#0\xa0\x8a$\xf2\xfx\xaa\x8b\x8f\x1\xcc\xb1\x3\0\0\0\0\0\xe0\xa6\xb8\x15\v\0\0\0\x86\xc3\xad\x18\x80\xe7\"\xff\x80\x63h\xec\0\0\0\xc0p\x18\xcc\x1\x9e\x8b\xfc\x3\x8e\xa1\xb1\x3\0\0\0\xc3\xe1\x8c=\xe0\xb9\xc8?\xe0\x18\x1a;\0\0\0\x30\x1c\x6s\x80\xe7\"\xff\x80\x63\x98<\x19\0\0\0\0\0\xc0Mq\xc5\xe\0\0\0\fg\xee\x9c\xd9\xf9\xbe~\xe8\x91\x11.\xaa\x4@y#\xff\x80\x63h\xec\0\0\0\xc0p\x18\xc8\x1\x9e\x8b\xfc\x3\x8e\xa1\xb1\x3\0\0\0\xc3\x61\xf2T\xc0s\x91\x7f\xc0\x31\x34v\0\0\0`8\f\xe6\0\xcf\x45\xfe\x1\xc7\x30y2\0\0\0\0\0\x80\x9b\xe2\x8a\x1d\0\0\0\x18\xe\xb7\x62\0\x9e\x8b\xfc\x3\x8e\xa1\xb1\x3\0\0\0\xc3\x61\x30\ax.\xf2\xf\x38\x86\xc6\xe\0\0\0\f\x87\x33\xf6\x80\xe7\"\xff\x80\x63h\xec\0\0\0\xc0!\xe9\xe9\xe9\xfa`\xe9\x12\xc5\xc7\x7f\xae\xc0\xc0 u\xed\xd6]\xdd{\xdc!\x93\xc9t\xd9\xed\xfe\xb3u\xab\xe2\xe3?\xd7\xf7\xdf}\xa7Z\x11\x11\xba\xf5\xb6\x8e\xba\xab\xf7\xdd\xf2\xf7\xf7/\xb0.\x83\x39\xc0\x98\xc8?`<4v\0\0\0`7\x8b\xc5\xa2\xa7\x9e|B))\xc9\x1av\xff\x3:s\xe6\x8c\x9e\x99:Yg\xcf\x9e\xd5\xa0\xc1\x43\x8a\xdc\xee\xcd\xb9oh\xe5\x8a\xe5\x1a\x36\xfc\x1\xddv[G%''\xeb\xc7\x1f~\x90\xaf\xafo9V\xf\xa0\x34\xc8?`L4v\0\0\0`\xb7\x1d;\xbe\xd7\xb6\xaf\xbf\xd2\xa6\xf8-\n\t\t\x91$\x5\a\ak\xdc\xd8\x31\xea\xd6\xbd\x87\xaaW\xaf^`\x9b\xbd\xbf\xff\xae\xb7\xde\x9c\xab\xcf\x36nRDD\xa4my\xd7n\xdd\x8b\xdc\xf\xb7\x62\0\xc6\x43\xfe\x1\x63\xa2\xb1\x3\0\0\0\xbbm\xdc\xb0^w\xf4\xbc\xd3\x36\xa8\x93\xa4\x9bnn\xa5\xec\xec\x1c\xed\xda\xb9\xa3\xd0\x41\xd8\xea\xd5\x1f\xab_\xff\xfe\xf9\x6u\xc5\x61\x30\a\x18\xf\xf9\a\x8c\x89\xc6\xe\0\0\0\xecv\xe0\x8f?\xd4\xa5k\xb7|\xcb\x2\x2\x2\x14\xdd Z\x89\t\t\x85n\xf3\xfbo\xbf\xa9[\xf7\x1eZ\xf7\xe9Z\xadX\xbeLg\xce\x9eQ\x97.]5p\xf0\x10\x5\x6\x6\x16\xbaMlLT\xa1\xcb\x7f\xdbw\xa0t\xdf\0\x80\x12#\xff\x80\x31\xd1\xd8\x1\0\0\x80]\xacV\xab\xf6\xee\xdd\xab\xdeqq\x5\x1e\v\r\xad\xa9\x33g\xcf\x14X\x9e\x93\x93\xa3\x9f\xf7\xec\xd6O?\xfe\xa0\xbb\xe3\xfaj\xe8\xfd\xc3\x95\x93\x93\xa3yo\xce\xd5\x91#\x7f\xeb\xb9\x17\x66\x16:\xe9*\x3\x38\xc0X\xc8?`\\4v\0\0\0`\x17\x93\xc9\xa4\xba\xf5\xea*99\xb9\xc0\x63g\xcf\x9eQhhh\x81\xe5^^^\n\xaeZUgN\x9f\xd6\xe4\xa9\xd3l\x83\xb8\xd0\x9a\x35\xd5\xa7w/=2\xe2QE\xd6\xae]\xe6\xb5\x3(\x1d\xf2\xf\x18\x17\x8d\x1d\0\0\0\xd8-:\xba\x81\xfe\xfc\xf3\xcf|\xcb\x32\x32\x32t\xe8\xe0!\x85\x85\x85\x17\xba\xcd\xbf\xfeu\x9d\x42\x42\xaa\xe7;3\x7f\xc5\x15\x61\x92\xa4\xa4\xa4\xa4\x42\avL\x9e\n\x18\xf\xf9\a\x8c\xc9\xcb\xd5\x5\0\0\0\xc0}\xdc\xd6\xb1\x93\xd6\xaeY\xa3\x93'N\xd8\x96\xfd\xb0k\xa7$\xa9y\x8b\x1b$\xe5\xde~\x91\x96\x96\x66{\xbc\x63\xa7\xce\xda\xba\xe5\xcb|g\xfa\xf7\xed\xdd+I\n\xafU\xab\xd0\xfdt\xea\xdc\xc5\xf6\x1\xc0\x18\xc8?`L\\\xb1\x3\0\0\0\xbb\xb5n\xdd\x46M\x9b\x35\xd3\x13\x63\x46k\xd0\xe0!JMM\xd5\x8b\xcf?\xa7\xc7\x9f\x18\xab\xe0\xe0`I\xd2\xf3\xcfN\xd7\xe6\xf8/\xb4z\xedg\n\n\n\xd2-\x1dn\xd5\xd2%\x8b\xf5\xc4\xe3\x8f\xe9\xee\xb8>\x92\xa4\xb7\xe6\xcd\xd5\xa8\xd1\x63\n}{d\x89\x33\xf6\x80\x11\x91\x7f\xc0\x98h\xec\0\0\0\xc0n\xbe~~\x9a\xf5\xfa\x1c-Z\xf4\xae\x66\xbf\xfe\x9a\xc2\xc3ki\xfc\x84\x89\xf9\x6_u\xae\xbcJ1\r\x1b\xc9\xd7\xd7WR\xee\xbb\xe6\xcc{\xfb\x1d\xbd\xbb`\xbe\x66\xbd\xfa\x8a\x42k\xd6\xd4\x80{\a\xa9k\xb7\xee\x45\xee\x87\xc1\x1c`<\xe4\x1f\x30&\xd3\x1f\x87\x8eYk\xd7\xca\x9d\xe8\xea\xc8\xb1\x93\x8a\xae[\xf8\xbd\x91\x80\xa7\xdb\xffg\x82.\xceJ\xde\xe7\x45\xb9x\x1d\xb2\x5\0p\xb6\xd2\xfc\xbf\x94|!\xa5\xcc\xeb+\x8d\xd8\x98(\xde\x15\a(F`@\x15I\xe4\x1f\xf0T\x17\x1f\x3\xb8\x62\a\0\0\0\x86\xc3\xad\x18\x80\xe7\"\xff\x80\x63h\xec\0\0\0\xc0p\x18\xcc\x1\x9e\x8b\xfc\x3\x8e\xa1\xb1\x3\0\0\0\xc3\xe1\x8c=\xe0\xb9\xc8?\xe0\x18\x1a;\0\0\0\x30\x1c\x6s\x80\xe7\"\xff\x80\x63\xbc\\]\0\0\0\0\0\0\0J\x86+v\0\0\0`8s\xe7\xcc\xce\xf7\xf5\x43\x8f\x8cpQ%\0\xca\x1b\xf9\a\x1c\x43\x63\a\0\0\0\x86\xc3@\xe\xf0\\\xe4\x1fp\f\xb7\x62\x1\0\0\0\0\0\xb8)\xae\xd8\x1\0\0\x80\xe1\xf0\xae\x38\x80\xe7\"\xff\x80\x63h\xec\0\0\0\xc0p\x18\xcc\x1\x9e\x8b\xfc\x3\x8e\xa1\xb1\x3\0\0\0\xc3\xe1\x8c=\xe0\xb9\xc8?\xe0\x18\x1a;\0\0\0\x30\x1c\x6s\x80\xe7\"\xff\x80\x63\x98<\x19\0\0\0\0\0\xc0Mq\xc5\xe\0\0\0\x1cr\xfcx\xa2\xde[\xb8P\xdb\xbe\xfeJ\x8d\x62\x63\x15\xd7\xa7\x9f\xaeo\xda\xd4\xaem-\x16\x8b\x1e\x1d\xf1\xb0rrr\xf4\xe6[\xf3\x8b\\\x8f[1\0\x63\"\xff\x80\xf1p\xc5\xe\0\0\0\xecv\xe2\xc4\t\r\x1d\x32H\xe9\xe9\xe9\x1a\x33\xf6IEDFj\xf0\xc0\xfe\xfa\x61\xd7N\xbb\xb6_\xf1\xe1rm\xdd\xf2\x65\xb1\xebu\xea\xdc\xc5\xf6\x1\xc0\x18\xc8?`L\\\xb1\x3\0\0\0\xbb\xad^\xb5Ru\xea\\\xa9\xa7'N\x92\xb7\xb7\xb7\xda\xb4m\xa7\x8c\xf4\f\xcd}c\x8e\xdeyw\x91L&S\x91\xdb\xee\xdb\xbbWo\xccy]=\xee\xe8\xa9\xa4\xa4\xa4\xcb\xee\x87\x33\xf6\x80\xf1\x90\x7f\xc0\x98\xb8\x62\a\0\0\0v\xb1X,z\xf7\x9dw\xd4\xad{\xfy{{\xdb\x96w\xec\xd4Y\xdb\xbf\xfbV\x7f\x1f>\\\xe4\xb6\x17.\\\xd0\xe4I\x13\x34i\xf2T\xc5\xc4\x34,v_\x9c\xb1\a\x8c\x85\xfc\x3\xc6\x45\x63\a\0\0\0vIJ:\xab\x94\x94\x64\x85\x85\x85\xe7[\x1e\x1e\x9e\xfb\xf5\xa9S'\x8b\xdc\xf6\xed\xb7\xdeTTt\xb4:v\xea\\\xa6\x35\x2(\x1b\xe4\x1f\x30.n\xc5\x2\0\0\x80]\xf2n\x9f\xf0\xf7\xf7\xcf\xb7\xbcr@eI\xd2\xf9\xf3\xe7\v\xdd\xee\xdbo\xbf\xd1\xba\xb5\x9fh\xc5\xc7\xab/{\xab\xc6\xc5\x62\x63\xa2\n]\xfe\xdb\xbe\x3\xf6\x96\v\xc0\x89\xc8?`\\4v\0\0\0`\x97\xc0\xc0@I\xd2\x85\xd4\v\xf9\x96\xa7\xa5\xa5K\x92\xaaV\xabV`\x9b\xd3\xa7Oi\xd2\x84\xf1\x9a\x36\xfdYU\xaf^C\x92\x64\x95\xb5\xd8}1\x80\x3\x8c\x85\xfc\x3\xc6\x45\x63\a\0\0\0v\xa9V-D\xde\xde\xde:v\xf4\xa8\xd4\xac\xb9m\xf9\xc9\x93'$I\xa1\x35\x42\vl\xb3`\xfe|%\x1c;\xa6\xe1\xc3\xee+\xf0XlL\x94\xee\x1d\x34X\xe3\x9ez\xba\xc0\x63L\x9e\n\x18\v\xf9\a\x8c\x8b\xc6\xe\0\0\0\xec\xe2\xeb\xeb\xab\x41\x43\xee\xd3\xa7k\xd7\xa8\xcb\xed]\xe5\xe3\xe3#I\xfa\xcf\xd6-j\xd7\xfe\x16\x45\x44\x46J\x92\x32\x32\x32\x64\x36\x9b\xe5\xed\xed\xad\xbb\xe3\xfa\xa8[\xf7\xee\xf9\x9eg\xca\xe4\x89\xfa\xed\xd7_\xf5\xd1\xc7\xabU\xe5\xbfW\x1\\\x8a\xc1\x1c`,\xe4\x1f\x30.\x1a;\0\0\0\xb0[\\\x9f\xbe\x1a\xd8\xff\x1eM\x9f\x36U\x1d;u\xd2\xfe\xfd\xfb\x35\xff\xadyZ\xb8x\xa9L&\x93\xd2\xd3\xd3\xd5\xe7\xee^\x8a\x8a\x8a\xd6K\xaf\xbc\xa6\xab\xeb\xd6-\xf0\x1c]n\xef\xa6\xea\xd5k\xa8Qlc\x17|\a\0J\x8a\xfc\x3\xc6\xc4\xbb\x62\x1\0\0\xc0n\xb5k\xd7\xd1\xa2%\xef\xcbl6k\xfa\x33Su\xf0\xe0\x1-^\xbaL\xd7\\s\xad$\xc9\xc7\xc7G\r\x1a\xc4\xa8^\xfd\xc2'?\xb5\xd7\xa6\x8d\x1bl\x1f\0\x8c\x81\xfc\x3\xc6\x64\xfa\xe3\xd0\x31k\xedZ\xb9\xf7\x43\x1e\x39vR\xd1u\xc3\x8b\xd9\x4\xf0L\xfb\xffL\xd0\xc5Y\xc9\xfb\xbc(\x17\xaf\x43\xb6\0\0\xceV\x9a\xff\x97\x92/\xa4\x94y}\xa5\x11\x1b\x13\xc5\xe4\xa9@1\x2\x3\xaaH\"\xff\x80\xa7\xba\xf8\x18\xc0\xadX\0\0\0\x30\x1c&O\x5<\x17\xf9\a\x1c\x43\x63\a\0\0\0\x86\xc3`\xe\xf0\\\xe4\x1fp\fs\xec\0\0\0\0\0\0\xb8)\xae\xd8\x1\0\0\x80\xe1p+\x6\xe0\xb9\xc8?\xe0\x18\x1a;\0\0\0\x30\x1c\x6s\x80\xe7\"\xff\x80\x63h\xec\0\0\0\xc0p\xe6\xce\x99\x9d\xef\xeb\x87\x1e\x19\xe1\xa2J\0\x94\x37\xf2\xf\x38\x86\xc6\xe\0\0\0\f\x87\x81\x1c\xe0\xb9\xc8?\xe0\x18&O\x6\0\0\0\0\0pS\\\xb1\x3\0\0\0\xc3\x61\xf2T\xc0s\x91\x7f\xc0\x31\x34v\0\0\0`8\f\xe6\0\xcf\x45\xfe\x1\xc7\xd0\xd8\x1\0\0\x80\xe1p\xc6\x1e\xf0\\\xe4\x1fp\f\x8d\x1d\0\0\0\x18\xe\x83\x39\xc0s\x91\x7f\xc0\x31L\x9e\f\0\0\0\0\0\xe0\xa6\xb8\x62\a\0\0\0\xe;~:u\xee\x62\xfb\0`\x1c\xe4\x1f\x30\x1e\xae\xd8\x1\0\0\x80\x43V\xafZ\xa9:u\xae\xd4\xd3\x13'\xc9\xdb\xdb[m\xda\xb6SFz\x86\xe6\xbe\x31G\xef\xbc\xbbH&\x93)\xdf\xfa-o\xbaY\xad\xdb\xb4U\xe5\xca\x95%I\x1dn\xbdM>\xbe>\xfap\xf9\x32\xf5\xba\xab\xb7+\xbe\x5\0%D\xfe\x1\xe3\xe1\x8a\x1d\0\0\0\xd8\xcd\x62\xb1\xe8\xddw\xdeQ\xb7\xee=\xf2\xdd\x46\xd1\xb1Sgm\xff\xee[\xfd}\xf8p\x81m\x82\x82\x82l\x83\xba<5k^\xa1\v\x17R\x8a\xdc\xcf\xa6\x8d\x1bl\x1f\0\x8c\x81\xfc\x3\xc6\xc4\x15;\0\0\0\xb0[R\xd2Y\xa5\xa4$+,,<\xdf\xf2\xf0\xf0\xdc\xafO\x9d:\xa9+\xaf\xba\xaa\xd8\xe7\xf9\x61\xd7N\xdd\xd2\xe1\xd6\"\x1f\xe7\x16\f\xc0x\xc8?`L4v\0\0\0`\xb7\xa4\xa4$I\x92\xbf\xbf\x7f\xbe\xe5\x95\x3r\xcf\xc8\x9f?\x7f\xbe\xd8\xe7\xd8\xb9\x63\x87\xbe\xdc\xbcY\xeb\x37}^\xe4:\xb1\x31Q\x85.\xffm\xdf\x1{K\x5\xe0\x64\xe4\x1f\x30&\x1a;\0\0\0\xb0[``\xa0$\xe9\x42\xea\x85|\xcb\xd3\xd2\xd2%IU\xabU\xbb\xec\xf6\x89\t\t\x9a\xf8\xf4\x38=\xff\xe2L\xd5\xaa\x15Q\xe4z\f\xe0\0\xe3!\xff\x80\x31\x31\xc7\xe\0\0\0\xecV\xadZ\x88\xbc\xbd\xbdu\xec\xe8\xd1|\xcbO\x9e}\xbav\x8d\xb2\xb2\xb2l\xcb\xff\xb3u\x8b\xda\xb5\xbf\x45\x11\x91\x91\x92\xa4\x9c\x9c\x1c\xa5\xa5\xa5\xd9\x1e?w\xee\x9c\x9ex\xfc\x31\x35k\xd1\x42\xc3\x1f\xf8w\xb1\xfb\x61\xf2T\xc0x\xc8?`L\xdc\x8a\x5\0\0\0\x87\xc4\xf5\xe9\xab\x81\xfd\xef\xd1\xf4iS\xd5\xb1S'\xed\xdf\xbf_\xf3\xdf\x9a\xa7\x85\x8b\x97\xda\xde\xea\xf8\xf9g\xa7ks\xfc\x17Z\xbd\xf6\x33Y\xadV\r\x1fv\x9f~\xfd\xe5g\xdd?\xfc\x41\xed\xfe\xe9'\xdbs\xd5\xb9\xb2\x8ej\x14r\x96\x9f\xc9S\x1\x63\"\xff\x80\xf1\xd0\xd8\x1\0\0\x80\x43j\xd7\xae\xa3\x45K\xde\xd7\xe2\x45\v5\xfd\x99\xa9\xba\xbei3-^\xbaL\xb1\x8d\x1b\xdb\xd6\xa9s\xe5U\x8ai\xd8H\xbe\xbe\xbe\xda\xf6\xf5W\xfa\xf5\x97\x9f%I\x83\a\xf6\xcf\xf7\\s\xe7\xcdW\xdbv\xed\n\xec\xe3\xe2\x33\xf5\f\xf2\0\xe3 \xff\x80\xf1\x98\xfe\x38t\xccZ\xbbVn\x97\xf4\xc8\xb1\x93\x8a\xae\x1b^\xcc&\x80g\xda\xffg\x82.\xceJ\xde\xe7\x45\xb9x\x1d\xb2\x5\0p\xb6\xd2\xfc\xbf\x94|!\xa5\xcc\xeb+\x8d\xd8\x98(&O\x5\x8a\x11\x18PE\x12\xf9\a<\xd5\xc5\xc7\0\xe6\xd8\x1\0\0\0\0\0pS\xdc\x8a\x5\0\0\0\xc3\xe1V\f\xc0s\x91\x7f\xc0\x31\x34v\0\0\0`8\f\xe6\0\xcf\x45\xfe\x1\xc7\xd0\xd8\x1\0\0\x80\xe1p\xc6\x1e\xf0\\\xe4\x1fp\f\x8d\x1d\0\0\0\x18\xe\x83\x39\xc0s\x91\x7f\xc0\x31L\x9e\f\0\0\0\0\0\xe0\xa6\xb8\x62\a\0\0\0\x86\x33w\xce\xec|_?\xf4\xc8\b\x17U\x2\xa0\xbc\x91\x7f\xc0\x31\x34v\0\0\0`8\f\xe4\0\xcf\x45\xfe\x1\xc7\xd0\xd8\x1\0\0\x80\xe1\x30y*\xe0\xb9\xc8?\xe0\x18\x1a;\0\0\0\x30\x1c\x6s\x80\xe7\"\xff\x80\x63\x98<\x19\0\0\0\0\0\xc0Mq\xc5\xe\0\0\0\f\x87[1\0\xcf\x45\xfe\x1\xc7\xd0\xd8\x1\0\0\x80\xe1\x30\x98\x3<\x17\xf9\a\x1c\x43\x63\a\0\0\0\x86\xc3\x19{\xc0s\x91\x7f\xc0\x31\xcc\xb1\x3\0\0\x80\x32\xb7g\xcfn==~\x9c\xbav\xee\xa8gg<\xa3\x84\x63\xc7.\xbb\xfe\xe8Q#\xd5\xa9s\x17\x43\xe\xea\x62\x63\xa2\\]B\x91\xa8\xad\x64\xa8\xadl\x91\xff\xf2\x41m%c\xe4\xda$\xfb\xea\xa3\xb1\x3\0\0\x80\x32\xf5\xc3\xae\x9d\x1a\x34\xa0\xbf\xea\xd5\xab\xaf\xb1\xe3\xc6\xeb\\R\x92\xee\x1b\x32P'N\x9c(\x97\xfd\xcf\x9d\x33\xbb\\\xf6S\x12\xd4V2\xd4\xe6>\xc8\x7f\xd1\x8c\\\x9b\x64\xec\xfa\xa8-?\x1a;\0\0\0(3999\x9a\xfd\xfa,\x8d|t\x94\xee\x1b:Lm\xdb\xb5\xd3\xd4gf\xa8jpU}\xbav\xcd\x65\xb7\xdd\xb4q\x83\xed\xe3\xd2\xe5\x8e|]\xd8\xf3:\xeb\xf9\xa8\x8d\xda\xca\xb3\x36wS\xd1\xf3_\xdc\xfa\x46\xae\xcd\xd1\xe7\x33rm\xc5\xado\xe4\xdaJ\xf2|\x85\xa1\xb1\x3\0\0\x80\x32s\xe8\xe0\x41\xed\xdc\xf1\xbd\xda\xdf\xd2\xc1\xb6\xacR\xa5J\xea\xd1\xb3\xa7\x16/Z$\xab\xd5Z\xe4\xb6\x46\xbd\x15\x3\x80}\xc8?P>h\xec\0\0\0\xa0\xcc\xe4\xddn\x11\x1a\x1a\x9aoy\xed\xdaut\xea\xd4I%''\xbb\xa2,\0\xe5\x80\xfc\x3\xe5\x83w\xc5\x2\0\0@\x99\x39s\xe6\xb4$\xc9\xafR\xa5|\xcb\x3\xaaT\x91$\xa5\xa4$+((\xa8\xd0m\v\x9b\x30\xf2\xb7}\a\x9c\\!\x80\xb2\x42\xfe\x81\xf2\x41\x63\a\0\0\0\x65&88X\x92\x94\x96\x96&\x1f\x1f\x1f\xdb\xf2\xb4\xd4\xd4|\x8f\xdb\xab\xa4\xef^\xf2\xc6\x9c\xd7K\xb4\x9d\xb3\xeb(\f\xb5\x95\x8c'\xd5\xe6\xae\xc8\x7f\xf1\x8c\\\x9b\xe4\xdc\xfa\xa8\xad\xec\xd0\xd8\x1\0\0@\x99\t\r\xad)I:\x9e\x98\x98\xef\xcc|BB\x82\"\"\"\x15\x10P\xa5\xc0\x36\x9c\x95\a*\x6\xf2\xf\x94\xf\xe6\xd8\x1\0\0@\x99\x89\x8a\x8eVL\xc3\x46\x8a\x8f\xff\xc2\xb6\xcc\x62\xb1h\xfdg\xeb\x34p\xf0`\xd7\x15\x6\xa0\xcc\x91\x7f\xa0|p\xc5\xe\0\0\0\xca\x8c\xd9l\xd6\xa8\xc7\x46\xeb\xc1\xe1\xc3\xe4\xe3\x63V\xc3\x86\xb1\xda\x1c\xff\x85N\x9f>\xad\xdb\xbbvwuy\0\xca\x10\xf9\a\xca\aW\xec\0\0\0\xa0L\xb5n\xd3V\v\x16\xbe\xa7}{\xf7\xea\xb9g\x9f\x91\xbf\xbf\xbf\xe6/X\xa8\x90\x90\x10W\x97\x6\xa0\x8c\x91\x7f\xa0\xecq\xc5\xe\0\0\0\xca\xdc\x8d-o\xd2\x8d-oru\x19\xc5\xb2Z\xad\xda\xb0\x61\xbd\xd6\xaf\xfbT\xc7\x13\x13uk\xc7\x8e\x1a\x38h\x88\xfc\xfd\xfd\v]\xff\xf4\xe9\xd3Z\xf9\xd1\x87\xda\xf1\xfd\xf7:\xfa\xcf\x11\xb5n\xd3V\x83\xef\x1b\xaa\x88\x88H\xa7\xd7v\xfcx\xa2\xde[\xb8P\xdb\xbe\xfeJ\x8d\x62\x63\x15\xd7\xa7\x9f\xaeo\xda\xd4\xaem-\x16\x8b\x1e\x1d\xf1\xb0rrr\xf4\xe6[\xf3\rQ[VV\x96V\xafZ\xa9\xef\xbe\xfdV?\xef\xd9\xad\x46\xb1\x8d\xd5\xad{\xfu\xea\xdc\xc5\xa5\xb5\xe5\xe4\xe4\xe8\xf3M\x1b\xb5\xea\xe3\x95:t\xf0\x80\xaeo\xdaL\x3\x6\xe\xd2\xb5\xd7\xfe\xcb\xa9uy\x92\x8a\x9a\xff\x8c\x8c\f\xad\xfb\xf4\x13m\xfb\xfak\xfd\xbcg\xb7\xae\xfd\xd7u\xbaw\xe0 ]w\xbd}\xb9tDzz\xba>X\xba\x44\xf1\xf1\x9f+00H]\xbbuW\xf7\x1ew\xc8\x64\x32\xd9\xb5\xfd\x82w\xde\xd6+/\xcd\xd4\xf7;\x7fT\x95\xc0@\xa7\xd6\xe6\xe8\xcf-\xcf\x99\x33g\xf4\xe1\xb2\xf\xb4s\xe7\xe\x1d;\xfa\x8fZ\xdc\xd8Rqq}\xd5\xb8I\x13\xa7\xd6\xb7g\xcfn\xad\xf8p\xb9v\xff\xf8\xa3nn\xddZC\x86\fUx\xadZE\xae\x7f\xe1\x42\x8a>\\\xbe\\\xf1_l\xd2\xb9\xa4sj\xd3\xae\x9d\xee\x1d\x38H\xb5jE8\xb5.g\xe2\x8a\x1d\0\0\0\xe0\xbf\x96,~O3\x9f\x7fN\x9d:w\xd1\xfd\xf<\xa8/7o\xd6\x93O\x8cQvvv\x81u-\x16\x8b\x6\xdc\xd3G\xa7N\x9eT\xdf~\xf7\xe8\xbe\x61\xc3\xf5\xfb\xef\xbf\xeb\xdf\xc3\xef\xd7\xf9\xf3\xe7\x9dZ\xd7\x89\x13'4t\xc8 \xa5\xa7\xa7k\xcc\xd8'\x15\x11\x19\xa9\xc1\x3\xfb\xeb\x87];\xed\xda~\xc5\x87\xcb\xb5u\xcb\x97N\xad\xa9\x34\xb5\xa5\xa6\xa6j\xf4\xa8\x91\xda\xb0~\xbd\xda\xb6k\xaf)\xd3\x66\xa8u\x9b\xb6JLHpym\x1f\xaf\xfcH3_xN\x9d\xbb\xdc\xaeIS\x9eQ\xb5\x90\x10\xdd{O_\xfd\xf1\xc7>\xa7\xd6\x6\xe3q$\xff\x92\xf4\xca\xcb\x33\x15\xff\xc5\x17j\x7fK\a\x8d\x19;N&\x93I\x3\xee\xe9\xab\xbd{\x7fwj]\x16\x8b\x45O=\xf9\x84\xbe\xfb\xee\x1b\r\xbb\xff\x1\xdd\xd6\xb1\x93\x9e\x99:Y\x8b\xdf[d\xd7\xf6{\xf6\xec\xd6+/\xcdtjM\x17s\xf4\xe7&I\x87\xf\x1f\xd6\xc0\x1\xfdt,\xe1\x98\xe2\xfa\xf4\xd5SOOT\x9d:ut\xf6\xecY\xa7\xd6\xf6\xc3\xae\x9d\x1a\x34\xa0\xbf\xea\xd5\xab\xaf\xb1\xe3\xc6\xeb\\R\x92\xee\x1b\x32P'N\x9c(t}\xab\xd5\xaag\xa6N\xd1\x37\xdb\xbe\xd6\x90\xfb\x86i\xc4\xa3\xa3t\xe4\xef\xbf\xf5\xef\a\xeeWJr\xb2Sks&\xae\xd8\x1\0\0\0$\x9d:uR\xaf\xbc\x34So/xW-Z\xdc Ij\xd8\xa8\x91:\xdf\xd6\x41?\xec\xda\xa9\x16\x37\xdc\x98o}\xb3\xd9\xacw\x17-Qxx\xb8mY\xab\xd6\xadu\xdb-\xed\xf4\xcb\xcf{ts\xab\xd6N\xabm\xf5\xaa\x95\xaaS\xe7J==q\x92\xbc\xbd\xbd\xd5\xa6m;e\xa4gh\xee\x1bs\xf4\xce\xbb\x8b.{\xd6~\xdf\xde\xbdzc\xce\xeb\xeaqGO%%%9\xad\xa6\xd2\xd4\xb6\x61\xfd:\xa5\xa4\xa4h\xee\xbc\xb7\x8b=\xab_\xde\xb5-\xfb`\xa9\x6\f\x1c\xac^w\xf5\x96$\xb5i\xdbV\xbf\xff\xf6\x9b\xbe\xdf\xbe]\r\x1a\xc4\x94Y\xadp-G\xf3/IC\x87\rW\xf5\xea\xd5\xe5\xed\xed-I\xea\xd8\xa9\xb3\xfe>|X[\xbf\xfcR\r\x1b\x36rZm;v|\xafm_\x7f\xa5M\xf1[l\xb7\xb0\x5\a\ak\xdc\xd8\x31\xea\xd6\xbd\x87\xaaW\xaf^\xe4\xb6\xe7\xcf\x9f\xd7\xa4\t\xe3\xd5\xfb\xee>Z\xf9\xd1\x87N\xab)OI~n\x92\x34o\xee\x1cu\xec\xd8Y#\x1e\x1d\x65\xcb\x61\xdbv\xed\x9dZ[NN\x8e\x66\xbf>K#\x1f\x1d\xa5\xfb\x86\xe\x93$\xddp\xe3\x8d\x1a\x32p\x80>]\xbb\x46\x43\x87\r/\xb0\xcd\x89\x13\xc7\xf5\xe9\xdaO\xf4\xde\x92\xf7\xd5\xacy\vIR\xf3\x16-\xd4\xe6\xe6\x96\xda\xbf\x7f\xbf\xddWI\x96\x37\xae\xd8\x1\0\0\0$}\xfb\xcd\x37\xaa^=D\xd7_t\x1b\x45\xed\xdautk\xc7N\xda\xbc\x39\xbe\xd0m.n\xeaHR\xd5\xaa\xd5$I\x99\x99YN\xab\xcb\x62\xb1\xe8\xddw\xdeQ\xb7\xee=l\x3H)w\x10\xb9\xfd\xbbo\xf5\xf7\xe1\xc3\x45n{\xe1\xc2\x5M\x9e\x34\x41\x93&OULLC\xa7\xd5T\x9a\xdarrr4\xe7\xf5\xd7\xd5\xef\x9e\xfe\x65\xda\xd4)\xe9\xcf\xadZ\xb5\x10\xfds\xe4\x88\xacV\xab\xa4\xdc[\xc6\x92\x92\xce*\"\xc2\xb8\xb7\x61\xa0\xf4J\x92\xff\x9a\x35k\xe6{my{{+,<\\\x19\x19\x19N\xadm\xe3\x86\xf5\xba\xa3\xe7\x9d\xf9\xe6%\xba\xe9\xe6V\xca\xce\xce\xd1\xae\x9d;\x8a\xdc\xcej\xb5j\xce\xecYjy\xd3\xcd\xea~\xc7\x1dN\xad)OI~n\x7f\xfd\xf5\x7fZ\xfb\xc9\x1a\xf5\xec\xd5\xcb\xee[\xc9J\xe2\xd0\xc1\x83\xda\xb9\xe3{\xb5\xbf\xa5\x83mY\xa5J\x95\xd4\xa3gO-^\xb4\xc8\x96\xf1\x8bU\xaaTI\x92\x94\x98\x98h[\x96|>\xf7J\x9d\x9aW\\Qf\xb5\x96\x16W\xec\0\0\0\0\x92\x8e\x1e=\xaa\xe8\x6\x31\x32\x9b\xf3\xff\x89\xdc \xba\x81\xf6\xec\xd9m\xd7s\x1c\x9fo\xbf\xfd\x46\xeb\xd6~\xa2\x15\x1f\xaf.\xb3\xb3\xe2%\xa9\xed\xcc\xe9\xd3\x92\xa4\xa1\x43\x6\xe9\x91\x91\xa3\xf4\xd4\xf8\tJHH\xd0\x8b\xcf?'\x8b\xc5\xa2\xbb\xe3\xfa\xb8\xac\x36Ij\xdc\xa4\x89\x86\xe\x1b\xae\x97g\xbe`[6n\xf3\xd6\x2\x3WT,\xa5\xcd\xbf$}\xb8|\xb9\xa2\xa2\xa3\xd5\xbaM[\xa7\xd5\x65\xb5Z\xb5w\xef^\xf5\x8e\x8b+\xf0XhhM\x9d\x39{\xa6\xd0\xed\x12\x13\x13\x35i\xe2\xd3\x9a\xf5\xfa\x1b\x5\x9a\x17\xceT\x92\x9f\xdb\xc9\x93\xb9\r\x97g\xa6MQ\xc7N\x9d\xd4\xb1s\x17\xfd\xb0k\x97\x6\xf\xec\xaf\x15+W+\xb6qc\xa7\xd4v\xe6L\xee\xb1\xc6\xef\xbfW\xe1\xe4\t\xa8RE\x92\x94\x92R\xb0\xb1#I]n\xef\xaao\xb6m\xd3\xf3\xcfN\x97$\xddyWo\xb5q\xe2\xef\xb4,pt\x2\0\0\0$U\xafQ]\xbf\xfc\xfcs\x81\xe5)))\xba\xea\xea\xab\x8b\xdd~\xd1\xc2\x5:\x7f\xfe\xbc\x86\xe\xbb\xdf\xa9u\x5\xfe\xf7\x1dl.\xa4^\xc8\xb7<--]\x92T\xb5Z\xb5\x2\xdb\x9c>}J\x93&\x8c\xd7\xb4\xe9\xcf\xaaz\xf5\x1a\x92$\xab\n\xdev\xe0\x8a\xda\xfc+\xe7\x36V\xbau\xef\xa1\x7f?\xf4\xb0myVV\xa6\xe6\xbf\x35O\xbd\xef\x8esJ#\xaa$\xb5Y\xadV=;\xfd\x19\x9d:uJ\x1f}\xbcZ5\xaf\xb8\x42k?\xf9\x44\xb7w\xee\xa8\x97_}M\x1dn\xbd\xad\xd4u\xc1\x98J\x9b\xff\x1d\xdfo\xd7[o\xce\xd5\a\xcbW\xc8\xc7\xc7\xc7iu\x99L&\xd5\xadWW\xc9\x85L\xdc{\xf6\xec\x99\x2W\xa3H\xb9M\xe6\x17\x9e\x9b\xa1{\xee\x19`\x9b\x13\xc6\xf9\xe9\xcfU\x92\x9f[@@\x80$\xe9\x89\xb1O\xaaQln\x13\xa7\x45\x8b\x1bt\xe8\xe0\x1mX\xff\x99\xd3\x1a;y\r\xa7\xb4\xb4\xb4|\xbf\x93\xb4\xd4\xd4|\x8f_,99YC\a\xf\xd4M\xadZ\xe9\xf3\xcd[\x94\x91\x9e\xa1\x45\x8b\xdeU\xcf;\xbai\xfe;\vuu\xdd\xbaN\xa9\xcd\xd9\x98\x63\a\0\0\0\x90T\xabV-\xed\xdd\xfb\xbb\x32\x33\x33\xf3-?\xfc\xd7_\xba\xfa\xea\xcb\xff\x31\xbf\xfe\xb3u\xfa`\xe9\x12\xbd\x38\xf3\x65\xa7\xbf\x95p\xb5j!\xf2\xf6\xf6\xd6\xb1\xa3G\xf3-\xcf;\xeb\x1dZ\xa3\xe0\xc0n\xc1\xfc\xf9J8vL\xc3\x87\xdd\xa7\xd8\x98(\xc5\xc6\x44i\xe6\v\xcf\xeb\xab\xfflUlL\x94\x9e\x7fn\x86\xcbj\xcb\x9b'\xa4]\xfb[\xf2-\x8f\x88\x88\xd4\xd1\xa3\xff\x38m~\x92\x92\xd4v\xf0\xc0\x1}\xb8\xfc\x3\x8d\x1c\x35J\x8d\x62\x1b\xab\x46\x8dP\xdd\x37t\x98\x1e|\xe8!M\x99<\xf1\xb2\xef\xf2\x3\xf7V\x9a\xfc\x1f\xd8\xbf_\x8f\x8exD\xaf\xbc\xf6\xba\xea\xd5\xaf\xef\xf4\xda\xa2\xa3\x1b\xe8\xcf?\xff\xcc\xb7,##C\x87\xe\x1e*p\xab\xa1$}\xb9\x39^\x9fo\xda\xa8\x39\xb3g\xd9\xf2?h\xc0=\x92\xa4\x1b\x9a_\xaf\xd6\x37\x17>\xa1qI\x94\xe4\xe7V\xa3\x46n\xb3\xb9ZH\xfeI\x9f\xeb\xd5\xab\xaf\x84\x84\x63N\xab-4\xb4\xa6\xa4\xdc\xab\x8a.\x96\x90\x90\xa0\x88\x88H\x5\x4T)\xb0\xcd\x96/7\xebX\xc2\x31\x8d\x18\x39J\x11\x11\x91\xaa[\xaf\x9e&O\x99\xa6\xda\xb5\xebh\xe9\x92\xc5N\xab\xcd\xd9h\xec\0\0\0\0\x92nly\x93\xce\x9c>\xad\x9d;\xfe\x37\x19\xe9\xc9\x93'\xf5\xd9\xbaO\xd5\xe1\xb6\xff]\xa9\x91\xfa\xdf\xb3\xbdy>\xdf\xb4Q\xaf\xbc \xfa\xe8\xe3\xd5\xf9>\xf2\xce\x82\x7f\xf4\xf1j\xdd\xd3\x7f@\xb9\xd6\x96\x93\x93\xa3\xb4\xb4\x34IR\xe5\xca\x95uw\\_m\xdd\xf2\xa5rrrl\xdb\xec\xfe\xe9'5m\xda\xcc\x36y\xa9+j\xcb\xca\xca\x1d\x9c^\xfa;\xaeU+B\x99\x19\x99\xf9\xea\x45\xc5R\xd2\xfc\x1f\xa7\x9b[\xb5*\x93\xdan\xeb\xd8Ik\xd7\xac\xd1\xc9\x8b\xde\xa2\xfb\x87];%I\xcd\xff\xfbNT\x17\xd7v\xed\xb5\xff*\x90\xff\x87\x1f\x19)I\x9a\xff\xee\"\xbd=\xff]\xa7\xd5V\x92\x9f[\x83\x98\x86\xaa]\xbb\xb6\xbe\xfa\xcfV\xdb\x32\xab\xd5\xaa\xad[\xb7\x38u\x92\xf7\xa8\xe8h\xc5\x34l\xa4\xf8\xf8/l\xcb,\x16\x8b\xd6\x7f\xb6N\x3\a\xf\xb6-\xbb\xf8\xd8\x99\x91\x91\xa1\xf4\xb4\xb4|\rfooo\xd5\xa9s\xa5\xd2\x33\xd2\x9dV\x9b\xb3y\x8fx\xf4\xf1)\xc1\x81\xb9\x97\x42\x9dONU\xf5j\xce=\xc3\0T\x14\xa7\xcf\xa6\xe8\xe2\xac\xe4}^\x94\x8b\xd7![\0\0g+\xcd\xffK\x99Y\x99\x97]\xd7S\x5\x5\x5\xc9j\xb5j\xd6k\xaf\xa8\x46\x8d\x1aJH8\xa6\x97g\xbe\xa8\x7f]w\x9d\xfa\xf\xb8W&\x93I\x87\xe\x1d\xd4\xed\x9dnU\xd5\xaa\xd5\xd4\xb8q\x13m\xda\xb8\x41\xa3G\x8d\xd4\xc8G\x1fS``\xa0\x12\x12\x12\x94\x90\x90\xa0\x93'O\xea\x8a\xb0\x30\xa7\xd5V\xbbvm-\x98?_\x87\xf\x1f\x96\xaf\xaf\x8f\x36\xc7\xc7k\xde\xdc\x39z\xe6\xd9\xe7\x14\x16\x16\xa6\xf4\xf4t\xf5\xb9\xbb\x97~\xfc\xe1\au\xec\xd4Y\xd5\xaaUSh\xcd\x9a\xf9>RR.\xc8l6k\xc8}\xc3\x14\x1c\\\xb5\xdcj\x93\xa4\xe7\x66<\xa3\x19\xcfL\xd5\x9d\xbdz\xcb\xcf\xcfO\x91\x91\xb5\xf5\xcaK3u\xea\xe4\t\x99L&\xed\xdc\xb9\x43\xf3\xde\x9c\xab\x89S\xa6*2\xb2\xb6\xcbj\xaby\xc5\x15\xda\xfb\xfb\xefZ\xfb\xc9j\x5\x4\x4\xe8\xdc\xb9$\xfd\xf4\xd3\x8f\x9a=\xeb\x35\xdd\x37l\x98\x9a\x36m\xe6\xb4\xdaJ\xcb\xcf\xd7W\x12\xf9w\x96\x92\xe4\xff\xe0\x81\x3\xba\xa3\xfb\xed\xba\xf5\xb6\x8e\xba\xbei3[\xfe\x13\x12\x12T-$\xc4i\xf3\x32\x45\x46\x44\xea\xc7\x1f\x7f\xd0\xa6M\x1b\x15\x1c\x1c\xac\xdf\x7f\xfbM\xd3\xa6L\xd6\xa3\x8f\x8d\xb6\xbd&7\xac\xffL}\xef\xbeK\xadZ\xb7Q\xddz\xf5\n\xe4\xdf\x64\x32i\xcd\xeaU\x9a\x30\x61\x92\xad\xa9\xe9\f%\xf9\xb9\x99\xcd\x66\x85\xd4\xa8\xa1\tO=\xa9*\x1U\x94\x9a\x96\xaauk?\xd1\x37\xdf|\xad\xc9S\x9f\xb1\xdd\xaaUZ^^^\xaaU\xab\x96&M\x18/???\xa5\xa5\xa5k\xf1\xa2\x85\xfa\xf3\xcf\x43\x1a\x33v\x9c\xfc\xfd\xfd\v\x1c;C\xaa\x85h\xdd\xa7\x9fj\xf7\xee\x9fT\xa9R%\x9d \x6\x30\xc7\xe\0\0\x80\x87\x31\x99L\x85\xbe\xcd+\xa4\x87\x1e\x1e\xa1\xb0\xb0p\xadY\xbdJ\xe9\xe9i\xba\xad\x63g\xf5\xef?@^^\xb9\x17\xba\a\x4TQllc\xdb\xed\xf\x33_|^\x92\xf4\xec\xf4i\xf9\x9e'*\xba\x81\xd6\xac]\xe7\xb4\xbaj\xd7\xae\xa3\x45K\xde\xd7\xe2\x45\v5\xfd\x99\xa9\xba\xbei3-^\xba\xccv\x15\x8e\x8f\x8f\x8f\x1a\x34\x88\xd1\xd5u\xeb\x39m\x9f\xce\xaaM\x92\xea\\y\x95\x62\x1a\x36\x92\xef\x7f\a\"\xf5\xa3\xa2\xb4\xe4\x83\x65Z\xb2\xf8=M\x9b\x32Y\x8d\x9b\x34\xd1\x9c\xb9o\xaai\xb3\xe6.\xad\xcd\xd7\xd7W/\xcc|Y\xabW}\xac\x8fW\xae\xd0_\xff\xf7\x97\x1a\x37i\xa2'\x9e\x1c\xa7[:\xdc\xea\xd4\xdaJ\xa3\x34s\x10\x91\xff\xa2\x39\x9a\xff\x35\xabW\xd9\xfe\xcd\xfb<\xcf\xe6\xad_\xdb\x9a\x87\xa5\xe5\xeb\xe7\xa7Y\xaf\xcf\xd1\xa2\x45\xefj\xf6\xeb\xaf)<\xbc\x96\xc6O\x98\xa8N\x9d\xbb\xd8\xd6\xa9Q#TM\xae\xb9\xb6L'J.\x8a\xa3?7I\xba\xfd\xf6\xae\xf2\xafTI\xabW\xad\xd2\xb2\xf\x96\xea\xe6Vm\xf4\xe1\x8a\x8fU\xb3\x66M\xa7\xd6\xd6\xbaM[-X\xf8\x9eV~\xb4\x42kV\xafR\xdb\xb6\xed\x35\x7f\xc1\x42\xdb-\xa1\x97\x1e;\xc3k\xd5\xd2\x92\xf7\x97i\xf9\xb2\xf\x34\xf7\x8d\x39\xba\x90\x92\xac\xa6\xcd[h\xd9\x8a\x95\xba\xe6\x9ak\x9dZ[i\\z\f0\xfdq\xe8\x98\xb5v\xad\xdc\xfbK\x8f\x1c;\xa9\xe8\xba\x5\xef\xd1\x3 \xed\xff\x33\x41\x17g%\xef\xf3\xa2\\\xbc\xe\xd9\x2\0\x38[i\xfe_\xba\x90vA99\f\xec\0w\xe5\xe5\x65R\x80\x7f\xeeU\r\xe4\x1f\xf0<\x97\x1e\x3\x98\x63\a\0\0\xc0\xc3x{q\xd1\x36\xe0\xceJ\x93\x61\xf2\xf\xb8\xbfKsLc\a\0\0\xc0\xc3x\x9b\xbd]]\x2\x80R(M\x86\xc9?\xe0\xfe.\xcd\x31\x8d\x1d\0\0\0\xf\x63\xf6\x32\xcb\xab\x14st\0p\x1d/\x93If\xef\x92_uC\xfe\x1\xf7V\xd8\x31\x80\xc6\xe\0\0\x80\x87\x31\x99$???W\x97\x1\xa0\x4\xfc\xfc\xfcT\x9a\xb6\f\xf9\a\xdc[a\xc7\0\x1a;\0\0\0\x1e\xc8\xecm\x96\xaf\xd9\xc7\xd5\x65\0p\x80\xaf\xd9\xa7TW\xeb\xe4!\xff\x80{*\xea\x18@c\a\0\0\xc0\x3\xf8\xf8\x98\x95\x95\x65\xc9\xb7\xcc\xcf\xcf\x8f\xc1\x1d\xe0&|\xcd>\x5\xae\xb4\xc9\xcc\xb2\xc8\xd7\xa7\xf8\x46\xf\xf9\a\xdc\xdf\xe5\x8e\x1\x34v\0\0\0<\x80\xaf\x8fY\x99\x97\f\xec\xa4\xdc\xc1\x9d\x7f\xa5J\xcc\xb9\x1\x18\x94\x97\xc9$\xffJ\x95\n\xbd}*+\xd3\"\x1f\xdf\xe2\x1b;\xe4\x1fp_\xf6\x1c\x3x\xaf;\0\0\0\xfP\xc9\xcfW\xe9\x99\x99\nP\xa5\x2\x8f\x99\xbd\xcd\xf2\xael\x96%\xdb\xa2lK\xb6\xb2s,\xb2Z%\xab\xd5\xea\x82J\x1\xcf\x66\x32\x99\x64\x32\xe5\xbe\x9d\xb1\xb7\xd9[fos\x91s\xea\x64\x64\x66\xca\xdf\xbf`\xa6/E\xfe\x1\xf7Q\x92\x63\0\x8d\x1d\0\0\0\xfP\xd9\xdfO)\xa9iJMKW\xe5\x42\x6\x82&I>\xde\x66\xf9x\x9b%1\xb1*`tg\x92\x92\x65\xc9\xc9\x91\x7f%\xdf\x62\xd7%\xff@\xc5s\xf1\x31\x80\xc6\xe\0\0\x80\x87\xa8^5P\xc7\x8e\x9f\xc9=\x1b(\xc9\xc7\xd7G\xde^\xdc\x99\xf\xb8\x8b\xcc,\x8b\xb2\x32-J\xcf\xccRNv\xb6j\xd6\xa8j\xf7\xb6\xe4\x1fp\x7f\x45\x1d\x3h\xec\0\0\0x\booo\xd5\xae\x15\xaa\xb3\xe7\x92\x65\xc9\xb6*+)E\xd9\x39\x39\xae.\v\x80\x9d|}\xcc\xf2\xf1\x35\xab\xb2\xbf\xaf\xfc+9ve\r\xf9\a\xdc_Q\xc7\0\x1a;\0\0\0\x1e\xa6Zp\xa0\xabK\0\xe0\"\xe4\x1f\xa8x\xb8\xf6\xe\0\0\0\0\0\xc0M\xd1\xd8\x1\0\0\0\0\0pS4v\0\0\0\0\0\0\xdc\x14\x8d\x1d\0\0\0\0\0\0\x37\x45\x63\a\0\0\0\0\0\xc0M\xd1\xd8\x1\0\0\0\0\0pS4v\0\0\0\0\0\0\xdc\x94\xd9\xd5\x5\0\0\0\xa0|\x9dIJVvN\x8e\xb2\x32-\xca\xce\xc9qu9\0\xec\xe4\xe3\x63\x96\xaf\x8fY\xfe~~\xf2\xf7\xf7-\xd1s\x90\x7f\xc0}\x15u\f\xa0\xb1\x3\0\0\xe0!22\xb3t\xe2T\x92\xaaW\v\x92\x97\xc9$\x9f\xaa\x66y{q\x1\x37\xe0.\xb2\xb2,\xca\xcc\xb2(-3C\xc9\xa9\xa9\xaa^5P\xde\xde\xdevmK\xfe\x1\xf7W\xd4\x31\x80\xc6\xe\0\0\x80\x87\x38q*I\xb5k\x85\xba\xba\f\0%\xe4\xe3\x63\x96\x8f\x8fY\x1\xaa\xa4\xd4\xb4t\x1d;~\xc6\xeeL\x93\x7f\xc0\xfd\x15u\f\xa0\xb1\x3\0\0\xe0\x1\xce$%\xabz\xb5 W\x97\x1\xc0I*\xfbW\x92\x64\xd2\xd9s\xc9\xaa\x16\x1cx\xd9u\xc9?P\xf1\\|\f\xe0\xda;\0\0\0\xf\x90\x9d\x93#/\x93\xc9\xd5\x65\0p\"/\x93\x64\xc9\xb6\x16\xbb\x1e\xf9\a*\xa6\xbc\x63\0\x8d\x1d\0\0\0\xf\x90\x95i\x91\x8f/\x17k\x3\x15\x89\x8f\xaf\x8f\xb2\x32\xb3\x8a]\x8f\xfc\x3\x15S\xde\x31\x80\xc6\xe\0\0\x80\a\xc8\xce\xc9\x61\xa2T\xa0\x82\xf1\xf6\xf2\xb2\xeb\x9d\xad\xc8?P1\xe5\x1d\x3H7\0\0\0\0\0\x80\x9b\xa2\xb1\x3\0\0\0\0\0\xe0\xa6\xb8\xd1\x12\0\0\0@\x99zq\xe6\xab\xfa~\xc7.I\xd2\r-\x9ai\xec\x13\x8f\xb9\xb8\xa2\xff\x19?a\xb2\xb6o\xdf\x61\xd7\xba\x91\xb5kk\xf1\xc2\xb7\xcb\xb8\"\xa0\xe2\xe1\x18P\xb6h\xec\0\0\0\xc0\xe9\x8e\x9f\x38!\xb3\xb7\xb7\xaaW\xafn\xd7\xfa\x63\xc7\x8e\xd3\x87+?\x91$U\xaa\xe4\xab\x9bnh\xa6\x1ewtW\xb7\xae]\xe5\xe3\xe3\xa3\xe3\xc7O\xa8\x45\xcb\xb6Z\xbd\xf2}]\x7f\xfd\xf5v=gNN\x8e\x92\x93\x93\xe5\xef\xef/___\xbb\xb6\x39t\xe8\x90>[\xbf^;v\xec\xd4\xfe\x3\x87\xd4\xf4\xbak5p\xe0\xbdj\xd9\xb2\xa5]\xdb\xa3p\xf1[\xb6\xea\x8f}\xfb%I\xc9\x17R\f5\xa8KH<\xae\x43\x7f\xfe\xe5\xea\x32*\x14G\xf2\x9f\x93\x93\xa3\xab\xeb\xc7\xda\xbe\xe\xadQM7\xdd\xd8\x42\x3\x6\xdc\xa3\x16-ZH\x92\xfe\xf3\x9f\xffh\xe0\x90\a\xf5\xfb/\xbb\x14\x10\x10`W\r\x99\x99\x99JKKS``\xa0\xbcJ8\xbf\xd0\x9b\xf3\xe6\xe9\xf9\x17g\xe9\xd7=;\x14\x18x\xf9\xb7\x94\xc7\xe5q\f([4v\0\0\0\xe0T\xc9\xe7\x93\x35p\xf0p\xdd\xd6\xa1\xbd\xc6<\xfe\xa8\xdd\xdbuhw\xb3\x1ex\xe0~eeei\xef\xbe}\x1a\x37~\xb2\xe\x1d:\xa4\x31\x8f?^\xb2:\x92\x93u\xcdu7j\xc5\xb2\x45\xba\xe1\x86\x1b\xec\xda\x66\xc9\x92\xa5\xf2\xf5\xf5U\xff\xfe\xf7\xc8\xdb\xcbK\xdb\xbf\xdf\xa1\xbe\xfd\xef\xd3\xf2\xf7\x17\xaa\x65\xcb\x1b\x1d\xda\xff\xd1\xa3G\xb5o\xdf\x1u\xe8\xd0\xae\xd0\xc7\x37o\xde\xaa\x98\x98(EDD8\xf4\xbc\xee\xe0\xd3\xcf\xd6\xeb\xc7\x1fw\xeb\xbe\xc1\x83\xf4\xe3\xee\xdd\xfa\xbf\x43\xffg{\xec\xff\xe\xfd\x9f>^\xb5\x46-\x9a\x37\xd7\x82\x85\x8b\xd4\xb4\xe9u\xea\xde\xf5\xf6r\xafq\xfc\x84\xc9\x8a\xbb\xbb\xb7$\xa9\x7f\xff>\xba\xbds\xa7\xcb\xae\xff\xe3O{\xb4\x66\xcd'\xa5\xda\xa7'\xbc&J\x9a\xffG\xfe=Tm\xda\xb4Vjj\xaa\xbe\xfez\x9b\xee\xee;H\v\xdfyC\xb7\xdcrK\x89\xea\xf8\xe9\xa7\x9f\x14\xd7o\xb0~\xfei\xbb\x82\x83\x83K\xb4\xfd\xf3/\xce*\xd1\xbe%\xcf\xf8]_\xe\xc7\x80\xc2\x95\xd5\xeb\x82\xc6\xe\0\0\0\x9c&3+K\xf<4R5Ck\xe8\xd1\x91\xf;\xb4mX\xd8\x15\xb6\x6L\xabV\xadT34T#\x1f\x1b\xa7~}\xfb\xcal\xf6)\x8br\v\x98\x34ib\xbe\xb3\xfb\x1d;vTZj\xaa\x36n\xdc\xe8pcg\xdf\xbe\x3zh\xc4\x63\x9a\xf5\xea\x8b\xea\xdc\xe9\xb6|\x8fm\xdc\xf4\x85\x1e}l\xac\xe6\xce~\xb5\xc2\r\xecRS\xd3\x34}\xfa\x8bJ<~\\\xef.\\R\xe0\xf1\xcc\xac,\x8d\x1e\xf3\x94\xed\xeb\r\x1b\xbeP\x87\xf6\xedU\xb9\xb2\x7fy\x96\xa9\xed\xdbw\xa8\x43\xfb\xf6\x92\xa4zu\xeb\xaa\xd5\xcd\x97\xbf*+#=\xa3\xd4\x83\xba\x8a\xfe\x9a(M\xfe\xebG\xd5\xb7\xe5\xbf}\xfb\xf6\xca\xcc\xcc\xd4\xb3\xcf\xbdX\xe2\xc6Ni\x9c?\x7f^c\x9f\x1c\xaf~q=\xb5l\xc5\x9a\x12=GE\xff]_\xe\xc7\x80\xa2\x95\xd5\xeb\x82\xc9\x93\x1\0\0\xe0\xb0\xcc\xac,}\xf3\xedw\xf9\x96\xe5\xe4\xe4\xe8\x89'\xc6\xeb\xec\xd9$\xbd\xf9\xc6,\xf9\xf8\x94\xee\x1c\x62\xde-W\xff\xfcs\xb4\xd0\xc7\xadV\xab\xe2\xe3\xe3u\xff\xf0\a\xd4\xb6]\aM\x98\x30Q\xff\xfc\xf3\x8f\xa4\xff]\xad#Iq\xfd\x6\xeb\xca\xba\r\xb5s\xe7\xae\x62\xf7y\xe9-\x1bV\xabUii\xe9%:\xe3\xdf\xa1\x43;\xcdz\xf5\x45=\xfa\xd8Xm\xdc\xf4\x85my\xde\x1f\xef\xb3^}\xb1\xc8\xb3\xb6\xee\xec\xed\xf9\v\x94x\xfcx\x81\xe5U\xabVU\xd5\x42~\x8e\x89\xc7\x8f\xeb\xad\xf9\xef\x96Gi.WQ^\x13\xe5\x91\xff\xd6\xad[\xe9\xc0\xa1\xc3:w\xee\\\xe1\x35\x64\x66j\xe1\xa2\x45\x8a\x8b\xeb\xab\xdb\xbbv\xd7\xeb\xb3g+%%E\x92\xb4s\xe7.\xc5\xf5\x1b,I\xba\xe6\xba\x1bue\xdd\x86JNN\xb6k\xbfV\xabU\xaf\xbc\xf2\xaaZ\xb7\xbaIw\xdeyg\x89\xeb\xaf(\xbf\xeb\x92\xe0\x18P\xb4\xb2z]p\xc5\xe\0\0\0\x1c\x92\x99\x95\xa5\x87\x1f\x19\xad/\xe2\x37\xeb\xa5\x17g\xa8\xf7]\xb9\x83\x9f\xe7_|Y;w\xfd\xa8\x35\xab\x96\xabJ\x15\xfb\xe6\xc1\xb8\x9c\x8c\x8c\fIRhh\x8d\x42\x1f\xffx\xd5*\xbd\xf2\xca\xeb\x1a\x37n\x8c\x82\x83\x82\xb4\x62\xc5J\xf5\xec\x15\xa7\x8d\xeb\xd7\xaaZ\xb5jZ\xfa\xde|\r\x18t\xbf\xc6<\xf6\xb0:t\xb8\x45\x91\x91\x91v\xed\x37;;[\xbbw\xef\xd1\x85\v)\xda\xfa\x9f\xafro\v\x1b\x37\xb6\x44\xdf\x43\xe7N\xb7\xd9\xfe\x88\x9f\xf5\xea\x8b\x92\x64\xfb\xfc\xd2\xb3\xb5\x15\x45\xf3\xe6\xcdT\xb3\x66\xa8N\x9c\x38i[6\xf2\x91\a\xf5\xd8\xa8\x11\x92\xa4\x99/\xbd\xa6\xb9\xf3\xe6\xdb\x1e\v\xf\v\xd3\x8d\x37\x34/\xf6y\x8f\x1e=\xaa\xaf\xb7}W\xe8\x63\xad[\xb5t\x9b+\x1f\xdc\xfd\x35Q^\xf9OOOWh\x8dj\x85\xcemc\xb5Z5q\xe2$\x1dKH\xd0\xbf\xff\xfd\x80\xd2\x33\x32\xf4\xdak\xaf\xeb\xe7\x9f\x7f\xd1\xdbo\xcdS\x83\x6\xd1\x1a\xf3\xd8\xc3z\xe9\xd5\x37\xb4\xf4\xbd\xf9\xaa^=D\x95+W\xb6k\xbf\xf1\xf1\xf1\xda\xf6\xcdw\xfax\xe5\x87\xfa\xe3\x8f?J\xf5=\xb8\xfb\xef\xba\xa4\x38\x6\\^Y\xbc.h\xec\0\0\0\xc0ny\x83\xba\x9f\x7f\xfe\x45\x8f\x8f\x1e\xa9\xb1\xe3&J\x92\xce\x9fO\xd1\xf2\xe5\x1f\xeb\xe3\x95\x1f\xa8\x66\xcd\xd0R\xed\xc3j\xb5\xea\xf4\xe9\xd3Z\xb8p\x91:wl\xa7+\xaf\xbcR\xa7N\x9d\xce\xb7\xce\x85\v\x17\x34}\xc6\v\x9a\xf5\xeaL\xb5m\xdbV\x92\xd4\xe2\x86\x1b\xd4\xe5\xf6\xeeZ\xbd\x66\x8d\xee\x1f\x36L\xd7\\\xd3$wy\x8b\xe6j\xd4\xa8\x91\xdd\xfbOOOW\xaf\xbb\xfb\xdb\xbe\xee}g\xb7\x12O\xbe*\xe5\xff#^R\x85\x1f\xd4\xdd|\xd3\x8d\xda\xf8\xd9j]\xdf\xbc\x95$\xa9jp\xb0\x1e\x1b\x35\xc2\xf6\x33\x1c\xf3\xf8\xa3Z\xf2\xc1r%\x9f\xcf\xbd\x82\x62\xe3\xfa\xd5\xaaZ\xb5j\xb1\xcf\x1b\x1e\x1e\xae\xdd{~\xd6\xb2\xe5\x1f\xe5[~O\xbf\x38\xc5\xdd\xdd\xcb\xc9\xdf\x45\xd9r\xd7\xd7\x44y\xe4?;;[\x7f\xff\xfd\xb7\xde]\xf8\x9e\xfe\xfd\xc0\xb0\x42\xb3\xf7\xcb/\xbfh\xf9G\x9fh\xc7w[u\xc5\x15WH\x92\xea\xd7\xab\xaf[;u\xd7\xae]\xbb\xd4\xa2\x45\v\xb5h\x91\xdb(\xb8\xe6\x9a&v_q\x97\x90\x90\xa0'\x9f\x9a\xa8\xb7\xde\x9cS\xa2\xab\xf4\n\xe3\xae\xbf\xeb\xd2\xe0\x18P q\xbd\x15\x19\xe9\x9a\xc9)\xf3\xde\x6w\xcf\xcf?\xab\x46\x8d\x1a\xaaS\xa7\x8e\x9ex|\x84\xc6\x8d\x9f\xac\xd4\xd4TEDDh\xe3\xc6M\xbap\xe1\x82z\xf4\xe8!)\xb7\x11S\xef\xea\xdaZ\xbbv\x9d\x2\x3\x3U\xa3\x46\x8d\xcbN\xae\x99\x93\x93\xa3\x1ew\xdc\xa9\x36\xad[)66VAAAJLL\xd0[o/\xd0\xb0\xfb\x6\xd8=\xf9r\x9e\xcd\x9b\xb7\x16\xfa\x87\xfa\xc5s+\xcc\x9d\xfdj\x85{g\x9c\xe1\xf7\xf\xd5\xb2\xe5+\v\xbc+NRRR\xa1\xeb\x87\x87\x85\xe9\xc1\xe1\xf7\x39\xb4\xfg\xf\xe6\xb6o\xdfY\xec:\xfb\xf7\x1f(\xf5~\xdc\xf5\x35\xe1\xfa\xfc\xe7N\xc6\xbck\xd7\xf\x8a\x8dm\xa4\xe6\xcd\x9b\xab]\x9b\x96zt\xd4h\x8dx\xe4!\xf9\xf8\xf8j\xfe;\xef\xa8_\\O5i\x92;\xb7V^\xc3w\xf5\xea\xd5j\xd6\xac\x99\xa2\xa2\xa2T\xa5J\x95\"\xf7\x11\x16\x16\xa6\xb0\xb0\xb0|\xcbRSS\xf5\xea\xeb\xf3\xf4\xaf\x7f][\xe8$\xce\x97\xe3\xae\xbfkg\xe0\x18P\xb4\xb2z]x\x8fx\xf4\xf1)\xc1\x81\xb9\x41\x39\x9f\x9c\xaa\xea\xd5\x1c{\xc1\x2\x9e\xe2\xf4\xd9\x14]\x9c\x95\xbc\xcf\x8br\xf1:d\v\0\xe0l\xa5\xf9\x7f\xa9$\xfc\xfc|Kt\xc5\x8a\xbd\xbe\xf8\"^^^^\xea\xd0\xa1\x43\x11\xfb\xf7Sd\xad+4\xef\xad\x5\x92\x35G-[\xde\xa8\xeb\xaf\xbbN5\xaaW\xd5\xc7\xab\xd6h\xfd\x86M\x8a\x8e\x8e\xd2s\xcfN\xb7M\xc2i2\x99\xd4\xbcySm\xd8\xb8Q\x1f\xafZ\xa3zu\xaf\xbe\xe8l~AV\xabUQQ\xf5\xb5\xff\xc0\x1m\xdc\xb8I\x1f\xad\\\xad\xd4\xd4\v\x1a W\x9d;\xdd\xaa\x86\x31\x31\x85\xaeS\xb3\x66\xa8.\\8\xafw\xdf]\xa4\xa8\xfa\xf5\x15\x15U_\x1dni\xaf\x33\xa7Ok\xf1\x92\xf7\xf5\xf3\xcf?\xabs\xe7N\x1a\x39r\x84mN\xae\xe0\xe0 \xc5\x44\xd7\xd3\xc2\x45K\xb4}\xfb\xf7j\xd1\xbc\x99j\xd4(\xfc\x1d\xf6\x8ar\xf4\xe8Q}\xf4\xf1\x1a=\xf4\xef\xfb\x1d\x9e_\xcbS\xf3/q\f\xb8\x9c\xb2:\x6\x98\xfe\x38t\xccZ\xbbV\xee\xcc\xe5G\x8e\x9dTt\xdd\xf0\x12\x17\tTd\xfb\xffL\xd0\xc5Y\xc9\xfb\xbc(\x17\xaf\x43\xb6\0\0\xceV\x9a\xff\x97 \xdb\xa0u\x9fm(v\xdd\x1bola\xd8\x41\x1d\xec\xf3\xe5\x96-z\xea\xe9iE>\xfe\xe2\xf3S\xd5'\xae\xe8\xe3\x3J\x87\x63@\xd9\xe2\x8a\x1d\xc0N\\\xb1\x3\0\x30\x12\xae\xd8\x1 \x91\x7f\xc0\xd3\x1d\x39vR\xee\x37\x85\x34\0\0\0\0\0\0$\x89\xc6\xe\0\0\0\0\0\x80\xbb\xa2\xb1\x3\0\0\0\0\0\xe0\xa6h\xec\0\0\0\0\0\0\xb8)\xde\x15\v\0\0\xc0\xc3\x1c\x39V\xf4[\xfe\xc2\xbd\x30!.\x1c\x45\xfe+\xe\xf2\x8f<\\\xb1\x3\0\0\0\0\0\xe0\xa6\xb8\x62\a\0\0\xc0\xc3p\x96\x17\xf0\\\xe4\x1f\xa8xh\xec\0\0\0x\x18n\xc5\0\xdc_I\x1b\x34\xe4\x1f\xa8\x18.>\x6\xd0\xd8\x1\0\0\xf0\x30\x9c\xb1\a<\x17\xf9\a*\x1e\xe6\xd8\x1\0\0\0\0\0pS\\\xb1\x3\0\0\0\x14\"33SG\x8f\x1eUJr\xb2\xb2,Y\xae.\xa7\xc4|\xcc>\xaa\x12\x18\xa8\x88\x88\b\xf9\xfa\xfa\xba\xba\x1c\xc0-\x90\x7f\xb8\x13\x1a;\0\0\0\xc0%233\xb5w\xef^eg[\\]J\xa9\x65Y\xb2t\xf6\xec\x19\x9d?\x7f^\r\x1b\x36\x64p\a\x14\x83\xfc\xc3\xddp+\x16\0\0\0\\\xc2U\x93\xb8\x1e\x39v\xb2\xd8}\x1f=z\xd4\xa5\x83\xba\xd0\xb0:N\x7f\xce\xecl\x8b\x8e\x1e=\xea\xf4\xe7u&{~7\xa8\x18\xc8\x7f\xd1\xc8?\x1c\x45\x63\a\0\0\0\xb8\x44Jr\xb2\xabK(\x13))\x15\xf3\xfb\x2\x9c\x89\xfc\xc3\xdd\xd0\xd8\x1\0\0\0.\xe1\xcesj\\NVV\xc5\xfc\xbe\0g\"\xffp74v\0\0\0\0\0\0\xdc\x14\x8d\x1d\0\0\0\xc0I\x8e\xfcsLG\xfe\x39\xe6\xea\x32\0\xb8\0\xf9\x87\xab\xf0\xaeX\0\0\0(`\xf9\x87+\xb5s\xd7\x8fv\xaf\xdf\xf2\xc6\xe6\xea}\xd7\x9d\x65X\x91\xf1\x1d\xf9\xe7\x98&M\x99!I\x9a\x36\xe5i\xd5\x8e\xac\xe5\xe2\x8a\xca\xcek\xb3\xe6\x14:\x80m\xde\xecz\xf5\xed\xd3\xdb\x5\x15\x15o\xe1\xa2\xa5\x92\xa4!\x83\a\xb8\xb8\x12\xe3#\xff\x8e#\xff\xe4\xdf\x95h\xec\0\0\0\xa0\x80\x9d\xbb~\xd4\xba\xcf\x36(\xaa~\xbd\x62\xd7MII\xd1\xca\x8fW+-5]\xf7\xde\xdb\xaf\x1c\xaa\x33\x9e\xbc\x41]R\xd2\x39I\xd2\xa4)3*\xf4\xe0\xee\xaf\xc3Gt\xf0\xe0!\xdb\xd7{\xf7\xed\x93\xc5\x92-I\x86\x1d\xd8}\xb5m\x9b\xa4\x8a;\xb0s&\xf2\xef\x18\xf2O\xfe]\x8d\xc6\xe\0\0\0\n\x15U\xbf\x9e\xd6\xaeY\xa1\xd3\xa7O\x17\xb9NPP\x90\xbc\xbd\xcdz|\xcc\x38M\x98 Yaa5]\\\xa1\xf3\xbd\xf6\xca\v\xff\xfb|\xd6\x1c\xfd\xf2\xebo2\x9b\xbd]XQ\xc5\x97\x96\x96\xa6\xbe\xf7\f\x92\xc9\xcbK\xcb\xdf_\xa4J\x95*\x95\xe9\xfe\xc8\xbf}\xc8?\xf9//\x97;\x6\xd0\xd8\x1\0\0@\x91N\x9f>\xad\x66\x37\xb4)\xf2\xf1\xd7^yAw\xf6\xec\xa1\x97_z^\x92\x34\x61\xf2\x34\xf9W\xae\xe4Q\xb7\x65\x84\x84T\xd5u\xff\xbaVq\xbd{j\xc1\xc2\xc5\x92\xa4'\x9f\x18\xa5\x15+\xd7($\xa4\xaa\x8b\xab+[\xaf\xcd\x9a\xa3Wg\xbd\xa1\xc7\x1e}X\xf1\x9b\xb7\xba\xba\x9c\n\xcd\xdf\xdf_\xd3\x9f\x99\xac^w\xf5\xd3\xb4\xe9\xcf\xe9\xd9\xe9S\xcb|\x9f\xe4\xbfx\xe4\x9f\xfc\x97\x97\xcb\x1d\x3\x98<\x19\0\0\0\xa5\x66\x36{\xeb\xe5\x97\x9e\xd7\xd5W]\xa9\xef\xb6\xeftu9\xe5\"!!Qii\xe9\xf2\xf5\xf5\xd5\xc8G\x86\xe7;3\x1f\x16VS#\x1f\x19.___eff*1\xf1\x84\v+-\x1b\x17\xf\xea\x46=\xfa\x88\xab\xcb)V\x87v\xed\xd4\xa1];W\x97Q*M\x1a\xc7j\xc2\xd3O\xea\xfd\xfV\xb8\xba\x94|\xc8?\xf9\x37\xba\x8a\x90\x7f\xa9\xe8\x63\0W\xec\0\0\0\xa0H\xde\xde\xde\x8a\x88\x88(\xf2\xf1\x80\x80\xca\xb6\xcf\xcd\x66oU\xa9R\xa5<\xcar\xb9\xbc\x39\x35\x9a\x34n\xa4\xd1\xa3\x1e\xbe\xec\xba\xf3\xde^\xa4\x9fv\xef\xa9Psn\xb8\xdb\xa0N\x92\x6\f\xe8\xeb\xea\x12\x9c\x62\xe0\xbd\xf7\xe8\xbb\xed;\xca\x65_\xe4\xbfp\xe4\x9f\xfc\xbbRa\xc7\0\x1a;\0\0\0(RHH\x88\xbe\xfd:\xbe\xdc\xf7{\xf4\xe8Q}\xbd\xed\xbb\x42\x1fk\xdd\xaa\xe5\x65\a\x9b\x65-oPg\xf6\x36\xeb\x9e\xbew\x17\xbb~\\\xef\x9e\xfa\xe5\x97\xdf\x9c\x36\xa1\xea\xc9\x93\xa7\xb4\xfb\xe7_\v}\xec_\xd7\x34Vhh\x8dR=\x7fq\x8a\x1a\xd4\xd5\xaf_\xcf\xb0\x3W\x8b%[\x1b\x36mR\xd2\x99s\xea\xd7/\xce\xad\xe7\x3\x31\x99L\x9a\xf9\xfc\xf4r\xd9\x17\xf9/\x88\xfc\x93\x7fW+\xec\x18@c\a\0\0\0\x86\x13\x1e\x1e\xae\xdd{~\xd6\xb2\xe5\x1f\xe5[~O\xbf\x38\xc5\xdd\xdd\xcb\x45U\xe5\x7f\xf7\x9b\xab\xae\xac\x63\x9bS#\xcf\xfe\x3\xb9\xef\x14\x33\xe3\xb9\x97\xf2-\xafR%@\x7f\x1d\xfe\xdb)\x83\xbb\xea\xd5\x43t\xf0\xc0!}\x1e\xbf%\xdf\xf2\x8e\xb7\xdd\xa2\xe\xed\x8b\x9e\xf\xc5\x19.w\xa6\xfe\xe2\tU]e\xe1\xa2\xa5\xb6w\xbf\x91ro\xbf\x18\x30\xa0\xaf\x96-[a\x9b\xdc\xb7jH\xb0\xbaw\xbd]K\x97.\xd7\xe6\xad[m\xeb\xb6i\xd5\xcam\xde\x31'0(\xd0\xd5%\x94)\xf2_4\xf2_4O\xc9\xbfT\xf0\x18@c\a\0\0\0v\xcb\xc8\xc8\xd0\x9a\xb5\x9fI\x92z\xf6\xe8*??\xbf\x32\xd9\x8f\x97\x97\x97\x9e\x9d>E&\x93I\x1f,\xcb\x9dK\xa0\xff=q\x9a>m\xb2\xbc\xbc<{\x9aH///=0|\x88\x64\x32\xe9\xf3/\xbe\x94$u\xeax\x8b\x86\xf\x1b\\\xa6?\x1bw\xbc\xfd\"O\xd5\x90`\xdb\xe7Ig\xce\xb9\xb0\x12\xf7\x46\xfe]\x8f\xfc;\xce\x13\xf2Oc\a\0\0\0v\xbbw\xd0\x30}\xbf\x63\x97$i\xd5\xaa\x35Z\xfe\xc1{2\x99Le\xb2////\xcdxf\xb2L&I&\x93\xa6O\x9d\xe4\xf2\x41]\xed\xc8Z\x9a\x36\xe5iM\x9a\x32\x43))\x17\xf4\xe4\x13\xa3\xf2M\x9a\x9aw\xa6\xfe\xe9\xa7\xc6\xd8\x96%&\x9e\xd0\xc4\xc9\x33T\xb5j\xb0\xd3\xe6\xd9\xf0\xf2\xf2\xd2\x3\xf7\xf\xce\xfd\xd9\xc8\xa4\xe1\xc3\x6\x39\xedg\xf3\xda\xac\x39\xfa\xeb\xf0\x91\x2oi\xec\xe\x83\xba!\x83\a\x14z\xd6\xbdK\xa7N\x9a>\xf5\x9c\xaa\x86\x4\xabK\xa7N\x92r\xe7\xdcp\xd7y7\xce\x9f?\xaf\xa0\xa0\xa0r\xdf/\xf9'\xff\xe4\xdf\x18.=\x6xv\xbb\x13\0\0\0v;\x96\x90`\x1b\xd4I\xd2\xf6\xefw*!1\xb1L\xf7\xe9\xe5\xe5\xa5\xe9\xd3&\x1b\x62P\x97'opg\xc9\xb6h\xc5\xca\x35\xc5\xae\xbf\x62\xe5\x1aY\xb2-N\x9f<\xd5\xcb\xcbK\xc3\x87\rv\xea\xa0N\xca\xbd\xdd\xe4\xe0\xc1\x43\xb6\xaf\xdd\x65Pw9f\xb3\xb7\xee\xbd\xb7\x9f\xbaw\xbd\xdd\xed\xe7\xd7\xb0Z\xad\x1a;nb\xb9\xef\x97\xfc\xe7\"\xff\xee\xa7\"\xb9\xf9\x90\x39\0\0 \0IDAT\xe5_*\xfc\x18\xc0\x15;\0\0\0\xb0K\xf5\x90\x10U\r\xeV\xd2\xb9\xdcK\xd9\xabV\xad\xaa\xea!!e\xbe_\xa3\f\xe8.V;\xb2\x96\x9e\x9b>Y!!U\x8b]\xf7\xc1\xe1\x83u\xe6LR\xbe\x33\xfb\xceR\xd6?\x9b\x8a\x30\xa8\xcb\xb3t\xe9rI\xee\xff\xee\x38\x8b\x97|\xa0\r\x1b?/\xf7\xfd\x92\xff\xff!\xff\xee\xa7\xa2\xe4_*\xfc\x18`\xbc\x94\0\0\0\xc0\x90\xfc\xfc\xfc\xf4\xee\x82\x37uS\xcb\x1bt\xf3M7j\xe1\x82\x37\xcbl\x8e\rw\x10\x16VS\xbe\xbe\xbe:u\xfa\xb4&O}N'N\x9c\xb4=v\xfc\xf8\tM\x9e\xfa\x9cN\x9d>-__\xdf\x32\x19\xd4\x95\xb5\x8a\x34\xa8\x93\xa4\xcd[\xb7\xe6\x9b,\xd5\x1d\xfd\xfc\xcb\xaf\x9a>\xe3\x5\xf5\xbf'\xae\xdc\xf7M\xfe\xf3#\xff\xee\xa5\"\xe4_*\xfa\x18\xc0\x15;\0\0\0\xb0[\xd3\xeb\xaf\xd3\xb2\xf7\x17\xb9\xba\fCIO\xcf\xd4\xdfG\xfe\xd1\xd3\x13\xa7\xabJ\x95\0I\xd2\x84I3d\xc9\xb6(==\xd3\xc5\xd5\x95\xcc\xde}\xfb\xf4\xcb\xaf\xbfU\x98\x41]E\x90\x96\x96\xa6\x89\x93\xa6)\xb6q#M\x9a\xf0\x94Kj \xff\x5\x91\x7f\x94\x97\xcb\x1d\x3h\xec\0\0\0\xa0P\a\xe\x1eR\xb7\x1e\xbd\x1d\xde\xa6\x41\x83\xe8\x32\xaa\xc8\x98\"#\xc2m\x13\xaa\xfeu\xf8oI\xb2M\x94\x1a\x19\x11\xee\xe2\xeaJ\xc6\x62\xc9\x96\xd9\xec\xad\xf8\xcd[\x15\xbfy\xab$\xa9~\xfdz\x86xKcO\xe5\xef\xef\xafOV\xaf(\xb7\xfd\x91\x7f\xfb\x90\x7f\x94\x97\xcb\x1d\x3h\xec\0\0\0\xa0\x80\xe6\xcd\xae/\xd1v\r\x1a\x44\x97x[wv\xf1\xbb\xe5Hr\xfa\x44\xa9\xe5\xa9\xa8\xdf\x9f\xbb~?y\xda\xb4j\xe5\xea\x12\xdc\x6\xf9w\f\xf9\x37\xbe\x8a\x9e\x7f\x1a;\0\0\0(\xa0o\x9f\xde\xea\xdb\xc7\xb1\xb3\xf5\x9e.op\x97\xf7\xb9\xbb\xaa\xa8\xbf\xfb\xc2\xde\x6\x19\x85\xab\xa8\xaf\x81\xb2\x44\xfe\x8d\xad\xa2\xe7\x9f\xc6\xe\0\0\0\xe0$\xee<\xa0\x3P:\xe4\x1f\xae\xc2\xbb\x62\x1\0\0\0\0\0\xb8)\x1a;\0\0\0\0\0\0n\x8a\xc6\xe\0\0\0p\t\x1f\xb3\x8f\xabK(\x13>>\x15\xf3\xfb\x2\x9c\x89\xfc\xc3\xdd\xd0\xd8\x1\0\0\0.Q%0\xd0\xd5%\x94\x89*U*\xe6\xf7\x5\x38\x13\xf9\x87\xbb\x61\xf2\x64\0\0\0\xb8\x44\xedZ\xa1\x86\xddoDD\x84\xce\x9f?\xaf\xeclK9TT\xd0\xc9\xc4\xbf\x9d\xfe\x9c\xde\xde\x66\x45\x44\x44\x38\xfdy\x9d\xc9U\xaf\t\x94?\xf2_4\xf2\xfGq\xc5\xe\0\0\0p\t___5l\xd8P\xd5\xaa\x85\xb8\xfd\xed\v>>>\xaaV-D\r\x1b\x36\x94\xaf\xaf\xaf\xab\xcb\x1\f\x8f\xfc\xc3\xddp\xc5\xe\0\0\0P\b___]}\xf5\xd5\xae.\x3\x80\v\x90\x7f\xb8\x13\xae\xd8\x1\0\0\0\0\0pS\\\xb1\x3\0\0\0Y\xad\x92%\xc7\xa2lK\xb6\xb2s,\xb2Z%\xab\xd5\xea\xea\xb2\0\x8f\x63\x32\x99\x64\x32I\xde^fy\x9b\xbd\x65\xf6\x32\xcb\x64*\xdb}\x92\x7f\xc0\x38Jr\f\xa0\xb1\x3\0\0\xe0\xe1,\xd9\x16\x65\x64\x64(\x87\x81\x1c\xe0rV\xabUV\xab\x94\x93\x93\xa5,K\x96\xbcL&\xf9\xf9\xf9\xc9\xec]6C7\xf2\xf\x18KI\x8e\x1\xdc\x8a\x5\0\0\xe0\xc1\x32\x32\x32\x94\x96\x9e\xce\xa0\xe\x30\xa8\x1c\xabUi\xe9\xe9\xca\xc8\xc8p\xfas\x93\x7f\xc0\xf8\xec\x39\x6\xd0\xd8\x1\0\0\xf0P\x19\x19\x19\xca\xb4\x64\xb9\xba\f\0v\xc8\xb4\x64\x39\xb5\xb9\x43\xfe\x1\xf7r\xb9\x63\0\x8d\x1d\0\0\0\xf\x64\xc9\xb6\x30\xa8\x3\xdcL\xa6%K\x96lK\xa9\x9f\x87\xfc\x3\xee\xa9\xa8\x63\0\x8d\x1d\0\0\0\xf\x63\xb5\xcaig\xfe\x7f\xff\xedW\xc5\xc6\x44\xe9\xe4\x89\x13\x85>\xfe\xcd\xb6m\x8a\x8d\x89RJrr\xbe\xe5\xdb\xbe\xfeJ\xb1\x31Q:\x7f\xfe|\x81mbc\xa2\x9cR\x1bP\x11\x65\x64\x64\xa8\x34\x37N\x91\x7f\xc0\xbd\x15v\f`\xf2\x64\0\0\0\xf\x63\xc9\xb1\x94\xdb\x9c\x1ag\xce\x9c\x96$\xf9U\xaa\x94oy@\x95*\x92\xa4\x94\x94\x64\x5\x5\x5\x15\xd8\xae\xa8\xc1\xddo\xfb\xe\x38\xb9\x42\xc0\xbd\xe4X\xad\xb2\x64[\xe4S\xc2\xc9\x94\xc9?\xe0\xde\n;\x6\xd0\xd8\x1\0\0\xf0\x30\xd9\x96\xecr\xdbWpp\xb0$)--M>>>\xb6\xe5i\xa9\xa9\xf9\x1e\xbf\x14\x3\x38\xa0h\xd9\x96\xec\x12\x37v\xc8?\xe0\xfe.=\x6\xd0\xd8\x1\0\0\xf0\x30\xd9\x39\xa5\x9f\xa3\xc3^\xa1\xa1\x35%I\xc7\x13\x13\xf3\x9d\x99OHHPDD\xa4\x2\x2\xaa\x14\xba\xdd\xa6\x8d\x1bl\x9fw\xea\xdc\xa5l\x8b\x4\xdcLn\x86\xfdJ\xb1m\xf9 \xff@\xd9\xb8\xf4\x18@c\a\0\0\xc0\xc3\x94\xf5]\x18\xa9\xa9\xa9\xaa\\\xb9\xb2$)*:Z1\r\x1b)>\xfe\vEEGK\x92,\x16\x8b\xd6\x7f\xb6N\x3\a\xf.\xf2\x39\x18\xcc\x1\x45+M\x86\xc9?\xe0\xfe.\xcd\x31\x8d\x1d\0\0\0\xf\x63-\xc3\x91\xdd\xa1\x43\a\x15w\xd7\x9d\x1a;n\xbc\xfa\xf4\xed'\xb3\xd9\xacQ\x8f\x8d\xd6\x83\xc3\x87\xc9\xc7\xc7\xac\x86\rc\xb5\x39\xfe\v\x9d>}Z\xb7w\xed^fu\0\x15Yi2L\xfe\x1\xf7wi\x8ei\xec\0\0\0\xc0i\x2\x2\xaa(6\xb6\xb1\xc2\xc2\xc2m\xcbZ\xb7i\xab\x5\v\xdf\xd3\xca\x8fVh\xcd\xeaUj\xdb\xb6\xbd\xe6/X\xa8\x90\x90\x90\"\x9f\x87[1\0\xf7\x43\xfe\x1\xd7\xa0\xb1\x3\0\0\x80\x12k\x14\xdb\x38\xdf\x44\xa7\x61\x61\x61Z\xfc\xfe\xb2\x2\xeb\xdd\xd8\xf2&\xdd\xd8\xf2&\xbb\x9f\x97\xc1\x1c`|\xe4\x1f\x30\x6\x1a;\0\0\0\x30\x1c\xce\xd8\x3\x9e\x8b\xfc\x3\x8e\xa1\xb1\x3\0\0\0\xc3\x61\x30\ax.\xf2\xf\x38\xc6\xcb\xd5\x5\0\0\0\0\0\0\xa0\x64\xb8\x62\a\0\0\0\x86\xc3\xad\x18\x80\xe7\"\xff\x80\x63h\xec\0\0\0\xc0p\x18\xcc\x1\x9e\x8b\xfc\x3\x8e\xa1\xb1\x3\0\0\0\xc3\x99;gv\xbe\xaf\x1fzd\x84\x8b*\x1P\xde\xc8?\xe0\x18\x1a;\0\0\0\x30\x1c\x6r\x80\xe7\"\xff\x80\x63\x98<\x19\0\0\0\0\0\xc0Mq\xc5\xe\0\0\0\f\x87\xc9S\x1\xcf\x45\xfe\x1\xc7\xd0\xd8\x1\0\0\x80\xe1\x30\x98\x3<\x17\xf9\a\x1c\x43\x63\a\0\0\0\x86\xc3\x19{\xc0s\x91\x7f\xc0\x31\x34v\0\0\0`8\f\xe6\0\xcf\x45\xfe\x1\xc7\x30y2\0\0\0\0\0\x80\x9b\xe2\x8a\x1d\0\0\0\x38$==]\x1f,]\xa2\xf8\xf8\xcf\x15\x18\x18\xa4\xae\xdd\xba\xab{\x8f;d2\x99\x8a\xdc\x66\xcf\x9e\xddZ\xba\xf8=\xfd\xf8\xc3.\xd5\xadWO\xbd\xee\xba[\x9d:w\x91\x97W\xe1\xe7\x19\xb9\x15\x3\x30&\xf2\xf\x18\xf\x8d\x1d\0\0\0\xfc?{w\x1e\x17U\xd9\xfeq\xfc;\xac\"\x2\x8a\xa0 \xb8\xa4\x82\xb8\xf6\x94K\x8bkY\xee[fhj.i\xf6\xb4hfjf\xeeiV\xb6\xb9\x64\x8b\x95\x66\x96\x66\xa6\x66\xe5RnO\xab\xa9\x95Y\xa6\xe5\xf2\xd3Lq\x5\x15\x64\x1d\x98\xdf\x1f<\xcc#\x2\x32\x3\x3s\x86\xf9\xbc_/^\xc2=\xe7>\xe7\x2\xe6:r_\xe7>\xf7\xb1\x99\xd9l\xd6SO\x8eSRR\xa2\x86?\xf0\xa0\xe2\xe3\xe3\xf5\xcc\xf4\xa9JHH\xd0\xe0!C\xf3\xed\xb3\xef\xf7\xdf\xd5\xbf\xef=\x1a=f\xacz\xdd\xd5[\x7f\x1e\x38\xa0I\x13'(--M\xbd\xee\xea\x9do\x1f\x6s\x80\xf1\x90\xff\x80\x31Q\xd8\x1\0\0\x80\xcdv\xee\xfcQ\xdf~\xf3\xb5\x36m\xde\xa6\xe0\xe0`IRPP\x90&\x8c\x1f\xabn\xdd{\xa8r\xe5\xcay\xfal\xdd\xbaY\xb7\xb6l\xa9\aF<(Ij\xd9\xaa\xb5\x32\xcc\x19\xda\xb4qC\x81\x3;\xae\xd8\x3\xc6\x43\xfe\x3\xc6\x44\x61\a\0\0\0\x36\xdb\xb8\x61\xbdz\xf6\xba\xcb:\xa8\x93\xa4[[\xb6Rff\x96v\xef\xda\x99\xef \xcc\xdf\xbf\x82\xe2\xe2\xe2\x94\x92\x92\"???I\xd2\xf9s\xe7T7*\xaa\xc0\xe3\x30\x98\x3\x8c\x87\xfc\a\x8c\x89\xc5\x93\x1\0\0`\xb3\x83\x7f\xfe\xa9\x1a\x35k\xe5j\xf3\xf7\xf7Wt\xbdh\x9d\x8a\x8b\xcb\xb7O\x8f\x9e=\xe5W\xceOcF\x8f\xd2\xda\x35\xab\xf5\xdc\xecY:u\xea\xb4\x6\xf\xb9\xbf\x14\"\x6\xe0(\xe4?`L\xcc\xd8\x1\0\0\x80M,\x16\x8b\xf6\xef\xdf\xaf>\xb1\xb1y^\v\r\xad\xa2\xf8\x84\xf8|\xfb\x85\x84\x84j\xd4\xe8\x31\xfa\xf7\x88\x61\xfa\xfa?\xdb%I\xcb>\\\xa1\x90\x90\x90\x2\x8f\xd5\x30&\xff\xab\xf9\xfb\xe\x1c\xb4?p\0\xc5\x46\xfe\x3\xc6\x45\x61\a\0\0\0\x36\x31\x99L\xaa]\xa7\xb6\x12\x13\x13\xf3\xbc\x96\x90\x10\xaf\xd0\xd0\xd0|\xfb\xad\xfbt\xad\xde|}\xa1\xdez\xfb]5j\xdc\x44;~\xf8^\xa3G\x8d\xd4]\xbd\xef\xd6\x63\x8f\x8f\xc9\xf7i:\f\xe0\0\x63!\xff\x1\xe3\xa2\xb0\x3\0\0\0\x9b\x45G\xd7\xd3\x91#Gr\xb5\xa5\xa5\xa5\xe9\xf0\xa1\xc3\n\v\v\xcf\xb3\xbd\xd9l\xd6\xecY35q\xd2\x64\xb5l\xd5ZR\xf6\xfa\x19\x1\x1\x1z`\xd8P\xf5\xe8\xd9K\xb5\xeb\xd4\xc9\xd3\x8f\xc5S\x1\xe3!\xff\x1\x63\x62\x8d\x1d\0\0\0\xd8\xec\xce\xe\x1d\xb5n\xedZ\x9d=s\xc6\xda\xf6\xd3\xee]\x92\xa4\xe6-n\xb2\xb6%''K\xca\x1e\xd8\xa5\xa4\xa4()))\xd7~\xaaT\xa9*I\xca\x30g\xe4{\x9c\x8e\x9d:[?\0\x18\x3\xf9\xf\x18\x13\x33v\0\0\0`\xb3\xd6\xad\xdb\xa8i\xb3\x66\x1a\x37v\x8c\x6\xf\x19\xaa\xe4\xe4\x64\xbd\xf0\xdcl=1n\xbc\x82\x82\x82$I\x1b\xd6\x7f\xa1'\xc7=\xa1\xf\x96\xafT\xe3&M\xf4\xd0#\x8f\xe8\xc5\x17\x9eSFF\x86\xa2\xa3\xa3\x95\x92\x92\xaa\xe5\x1f.S\xfb;:\xa8N\x9d\xbaN\xfe\x8e\0\xd8\x8a\xfc\a\x8c\x89\xc2\xe\0\0\0l\xe6\xe3\xeb\xab\xb9\xf3\x16h\xc9\x92w5\x7f\xde\xab\n\xf\xaf\xa6\x89\x93&\xe7\xba\xb2\x1e\x12\x12\xaa\xc6M\xaeW``\xa0$i\xd8\xf0\x11\xaaU\xeb:}\xbav\x8d\xdeY\xf4\x96\xae\xab][w\xdc\xd9\x41\xbd\xee\xea-/\xaf\xfc\xff\x1c\xe5V\f\xc0x\xc8\x7f\xc0\x98L\x7f\x1e>i\xa9^-{\xa1\xab\xe3'\xcf*\xbav\xde{#\x1H\x7f\x1d\x89\xd3\x95\xb9\x92\xf3yA\xae\xdc\x86\xdc\x2\0\x38Zq\xfe_J\xbc\x9ct\xcdm\x9d\xad\x61L\x14\x8b\xa7\x2\x85\b\xf0\xaf \x89\xfc\a\xdc\xd5\x95\xe7\0\x66\xec\0\0\0\xc0p\xb8\x62\xf\xb8/\xf2\x1f\xb0\xf\x85\x1d\0\0\0\x18\xe\x83\x39\xc0}\x91\xff\x80}x*\x16\0\0\0\0\0\x80\x8b\x62\xc6\xe\0\0\0\f\x87[1\0\xf7\x45\xfe\x3\xf6\xa1\xb0\x3\0\0\0\xc3\x61\x30\a\xb8/\xf2\x1f\xb0\xf\x85\x1d\0\0\0\x18\xce\xc2\x5\xf3s}\xfd\xf0\xa3#\x9d\x14\t\x80\xd2\x46\xfe\x3\xf6\xa1\xb0\x3\0\0\0\xc3\x61 \a\xb8/\xf2\x1f\xb0\xf\x8b'\x3\0\0\0\0\0\xb8(f\xec\0\0\0\xc0pX<\x15p_\xe4?`\x1f\n;\0\0\0\x30\x1c\x6s\x80\xfb\"\xff\x1\xfbP\xd8\x1\0\0\x80\xe1p\xc5\x1ep_\xe4?`\x1f\n;\0\0\0\x30\x1c\x6s\x80\xfb\"\xff\x1\xfb\xb0x2\0\0\0\0\0\x80\x8b\x62\xc6\xe\0\0\0\xec\x92\x9a\x9a\xaa\xf\x97\xbd\xaf\xcd\x9b\xbfT@@\xa0\xbav\xeb\xae\xee=z\xca\x64\x32]\xb3\xdf\x7f\xb6o\xd7\xe6\xcd_\xea\xc7\x1f~P\xb5\x88\b\xddqg\a\xdd\xdd\xe7\x1e\xf9\xf9\xf9\xe5\xd9\x96[1\0\x63\"\xff\x1\xe3\xa1\xb0\x3\0\0\0\x9b\x99\xcd\x66=\xf5\xe4\x38%%%j\xf8\x3\xf*>>^\xcfL\x9f\xaa\x84\x84\x4\r\x1e\x32\xb4\xc0~\xaf/|M\xabV\xae\xd0\xf0\x11\xf\xea\xce;;(11Q?\xff\xf4\x93|||\xf2\xdd\x9e\xc1\x1c`<\xe4?`L\x14v\0\0\0`\xb3\x9d;\x7f\xd4\xb7\xdf|\xadM\x9b\xb7)88X\x92\x14\x14\x14\xa4\t\xe3\xc7\xaa[\xf7\x1e\xaa\\\xb9r\x9e>\xfb\xff\xf8\x43o\xbe\xbeP_l\xdc\xa4\x88\x88Hk{\xd7n\xdd\v<\xeW\xec\x1\xe3!\xff\x1\x63\xa2\xb0\x3\0\0\0\x9bm\xdc\xb0^={\xdd\x65\x1d\xd4I\xd2\xad-[)33K\xbbw\xed\xccw\x10\xb6\x66\xcd'\xbaw\xc0\x80\\\x83\xba\xc2\x30\x98\x3\x8c\x87\xfc\a\x8c\x89\xc5\x93\x1\0\0`\xb3\x83\x7f\xfe\xa9\x1a\x35k\xe5j\xf3\xf7\xf7Wt\xbdh\x9d\x8a\x8b\xcb\xb7\xcf\x1f\xfb\xf6\xa9\x66\xcdZ\xfa\xfc\xb3u\x1a\x34\xe0^u\xeb\xd2Q\xaf\xcd\x9f\xa7\xc4\xc4\xc4R\x88\x18\x80\xa3\x90\xff\x80\x31\x31\x63\a\0\0\0\x36\xb1X,\xda\xbf\x7f\xbf\xfa\xc4\xc6\xe6y-4\xb4\x8a\xe2\x13\xe2\xf3\xb4geei\xef\xaf{\xf4\xcb\xcf?\xe9\x9e\xd8~\x1a\xf6\xc0\beee\xe9\x8d\xd7\x17\xea\xf8\xf1\xbf\x35\xfb\xf9\x39\xf9.\xba\xda\x30&*\xdf\x18\xf6\x1d\x38X\xfco\x4\x80\xdd\xc8\x7f\xc0\xb8(\xec\0\0\0\xc0&&\x93I\xb5\xeb\xd4\xce\xf7J{BB\xbc\x42\x43\x43\xf3\xb4{xx(\xa8\x62\x45\xc5\x9f?\xaf\xa9\xd3gX\aq\xa1U\xaa\xa8o\x9f\xdezt\xe4\x63\x8a\xac^=O?\x6p\x80\xb1\x90\xff\x80qQ\xd8\x1\0\0\x80\xcd\xa2\xa3\xeb\xe9\xc8\x91#\xb9\xda\xd2\xd2\xd2t\xf8\xd0\x61\x85\x85\x85\xe7\xdb\xe7_\xff\xba\x41\xc1\xc1\x95s]\x99\xafZ5L\x92t\xe1\xc2\x85|\av,\x9e\n\x18\xf\xf9\xf\x18\x13k\xec\0\0\0\xc0\x66wv\xe8\xa8uk\xd7\xea\xec\x99\x33\xd6\xb6\x9fv\xef\x92$5oq\x93\xa4\xec\xdb/RRR\xac\xafw\xe8\xd8I\xdb\xb7m\xcdu\xa5\xff\xc0\xfe\xfd\x92\xa4\xf0j\xd5\xf2=N\xc7N\x9d\xad\x1f\0\x8c\x81\xfc\a\x8c\x89\xc2\xe\0\0\0l\xd6\xbau\x1b\x35m\xd6L\xe3\xc6\x8e\xd1\xb6\xad[\xf4\xc5\xe7\x9f\xe9\xa9'\xc7\xeb\x89q\xe3\x15\x14\x14$Iz\xee\xd9\x99\xea\xd6\xb9\x83.]\xba$I\xba\xbd\xfd\x1d\n\v\xf\xd7\xb8'\x1e\xd7\x96\xcd_i\xcb\xe6\xaf\x34\x7f\xde+\x1a=fl\xbe\x8fG\x6`L\xe4?`L\xdc\x8a\x5\0\0\0\x9b\xf9\xf8\xfaj\xee\xbc\x5Z\xb2\xe4]\xcd\x9f\xf7\xaa\xc2\xc3\xabi\xe2\xa4\xc9\xb9\xae\xac\xd7\xa8YK1\xf5\x1b\xc8\xc7\xc7GR\xf6Ss\xdex\xebm\xbd\xfb\xce\"\xcd}\xe5\x65\x85V\xa9\xa2\x81\xf7\rV\xd7n\xdd\v<\xe\xb7\x62\0\xc6\x43\xfe\x3\xc6\x64\xfa\xf3\xf0IK\xf5j\xd9\v]\x1d?yV\xd1\xb5\xf3\xbf\x37\x12pw\x7f\x1d\x89\xd3\x95\xb9\x92\xf3yA\xae\xdc\x86\xdc\x2\0\x38Zq\xfe_J\xbc\x9cT\xe2\xf1\x15G\xc3\x98(\x16O\x5\n\x11\xe0_A\x12\xf9\xf\xb8\xab+\xcf\x1\xcc\xd8\x1\0\0\x80\xe1p\xc5\x1ep_\xe4?`\x1f\n;\0\0\0\x30\x1c\x6s\x80\xfb\"\xff\x1\xfb\xb0x2\0\0\0\0\0\x80\x8b\x62\xc6\xe\0\0\0\f\x87[1\0\xf7\x45\xfe\x3\xf6\xa1\xb0\x3\0\0\0\xc3\x61\x30\a\xb8/\xf2\x1f\xb0\xf\xb7\x62\x1\0\0\0\0\0\xb8(f\xec\0\0\0\xc0p\x16.\x98\x9f\xeb\xeb\x87\x1f\x1d\xe9\xa4H\0\x94\x36\xf2\x1f\xb0\xf\x85\x1d\0\0\0\x18\xe\x3\x39\xc0}\x91\xff\x80}(\xec\0\0\0\xc0pX<\x15p_\xe4?`\x1f\n;\0\0\0\x30\x1c\x6s\x80\xfb\"\xff\x1\xfb\xb0x2\0\0\0\0\0\x80\x8b\x62\xc6\xe\0\0\0\f\x87[1\0\xf7\x45\xfe\x3\xf6\xa1\xb0\x3\0\0\0\xc3\x61\x30\a\xb8/\xf2\x1f\xb0\xf\x85\x1d\0\0\0\xd8\xe5\xf4\xe9Szo\xf1\x62}\xfb\xcd\xd7j\xd0\xb0\xa1\x62\xfb\xde\xab\x1b\x9b\x36\xb5\xa9\xaf\xd9l\xd6\x63#\x1fQVV\x96^\x7fsQ\x81\xdbq\xc5\x1e\x30&\xf2\x1f\x30\x1e\xd6\xd8\x1\0\0\x80\xcd\xce\x9c\x39\xa3\x61\x43\a+55Uc\xc7?\xa9\x88\xc8H\r\x19\x34@?\xed\xde\x65S\xff\x95\x1f\xad\xd0\xf6m[\v\xdd\xae\x63\xa7\xce\xd6\xf\0\xc6@\xfe\x3\xc6\xc4\x8c\x1d\0\0\0\xd8l\xcd\xeaU\xaaQ\xa3\xa6\x9e\x9e v\xac\xc0\xbe\x97/_\xd6\xd4)\x93\x34\x65\xeat\xc5\xc4\xd4/\xf4X\x9b\x36n\xb0~\0p>\xf2\x1f\x30.f\xec\0\0\0\xc0&\x17.$())Qaa\xe1\xb9\xda\xc3\xc3\xb3\xbf>w\xee\xacj\xd6\xaa\x95o\xdf\xb7\xde|]Q\xd1\xd1\xea\xd0\xb1\x93\x96.Y\\\xe8\xb1\xb8\x5\x3\x30\x16\xf2\x1f\x30.\n;\0\0\0\xb0I\xce\xed\x13~~~\xb9\xda\xcb\xfb\x97\x97$]\xbat)\xdf~\xdf\x7f\xff\x9d>_\xf7\xa9V~\xb2\xe6\x9a\xb7j\\\xa9\x61LT\xbe\xed\xfb\xe\x1c\xb4\x35\\\0\xe\x44\xfe\x3\xc6\x45\x61\a\0\0\0\x36\t\b\b\x90$]N\xbe\x9c\xab=%%U\x92T\xb1R\xa5<}\xce\x9f?\xa7)\x93&j\xc6\xccgU\xb9r\x88$\xc9\"K\xa1\xc7\x62\0\a\x18\v\xf9\xf\x18\x17\x85\x1d\0\0\0\xd8\xa4R\xa5`yzz\xea\xe4\x89\x13R\xb3\xe6\xd6\xf6\xb3g\xcfH\x92\x42\x43\x42\xf3\xf4yg\xd1\"\xc5\x9d<\xa9\x11\xc3\xef\xcf\xf3Z\xc3\x98(\xdd\x37x\x88&<\xf5t\xc9\x5\r\xc0!\xc8\x7f\xc0\xb8(\xec\0\0\0\xc0&>>>\x1a<\xf4~}\xb6n\xad:w\xe9*oooI\xd2\x7f\xb6oS\xbb\xdbnWDd\xa4$)--M^^^\xf2\xf4\xf4\xd4=\xb1}\xd5\xad{\xf7\\\xfb\x99\x36u\xb2\xf6\xfd\xfe\xbb>\xfe\x64\x8d*\xfcw\x16\xc0\xd5\xae\\4\x95\xf5\x36\0\xe7#\xff\x1\xe3\xa2\xb0\x3\0\0\0\x9b\xc5\xf6\xed\xa7\x41\x3\xfak\xe6\x8c\xe9\xea\xd0\xb1\xa3\xfe\xfa\xeb/-z\xf3\r-^\xbaL&\x93I\xa9\xa9\xa9\xea{OoEEE\xeb\xc5\x97_\xd5u\xb5k\xe7\xd9G\xe7.\xddT\xb9r\x88\x1a\x34lT\xe0q\x18\xcc\x1\xc6\x43\xfe\x3\xc6\xc4\xe3\xce\x1\0\0`\xb3\xea\xd5kh\xc9\xfb\x1f\xc8\xcb\xcbK3\x9f\x99\xae\x43\x87\xej\xe9\xb2\xe5j\xd2\xe4zI\x92\xb7\xb7\xb7\xea\xd5\x8bQ\x9d\xba\xf9/~j+\x1ew\f\x18\xf\xf9\xf\x18\x93\xe9\xcf\xc3'-\xd5\xab\x65\xdf\xfy\xfc\xe4YE\xd7\xe/\xa4\v\xe0\x9e\xfe:\x12\xa7+s%\xe7\xf3\x82\\\xb9\r\xb9\x5\0p\xb4\xe2\xfc\xbf\x94x9\xa9\xc4\xe3+\x8e\x86\x31Q,\x9e\n\x14\"\xc0\xbf\x82$\xf2\x1fpWW\x9e\x3\x98\xb1\x3\0\0\0\0\0\xe0\xa2Xc\a\0\0\0\x86\xc3\xe2\xa9\x80\xfb\"\xff\x1\xfbP\xd8\x1\0\0\x80\xe1\x30\x98\x3\xdc\x17\xf9\xf\xd8\x87\xc2\xe\0\0\0\f\x87+\xf6\x80\xfb\"\xff\x1\xfbP\xd8\x1\0\0\x80\xe1\x30\x98\x3\xdc\x17\xf9\xf\xd8\x87\xc5\x93\x1\0\0\0\0\0\\\x14\x33v\0\0\0`8\v\x17\xcc\xcf\xf5\xf5\xc3\x8f\x8etR$\0J\x1b\xf9\xf\xd8\x87\xc2\xe\0\0\0\f\x87\x81\x1c\xe0\xbe\xc8\x7f\xc0>\x14v\0\0\0`8,\x9e\n\xb8/\xf2\x1f\xb0\xf\x85\x1d\0\0\0\x18\xe\x83\x39\xc0}\x91\xff\x80}X<\x19\0\0\0\0\0\xc0\x45\x31\x63\a\0\0\0\x86\xc3\xad\x18\x80\xfb\"\xff\x1\xfbP\xd8\x1\0\0\x80\xe1\x30\x98\x3\xdc\x17\xf9\xf\xd8\x87\xc2\xe\0\0\0\f\x87+\xf6\x80\xfb\"\xff\x1\xfbP\xd8\x1\0\0\x80\xddN\x9f>\xa5\xf7\x16/\xd6\xb7\xdf|\xad\x6\r\x1b*\xb6\xef\xbd\xba\xb1i\xd3|\xb7\xb5X,\xfa\xf6\x9bo\xf4\xe5\x97\x1b\xb5\xeb\xc7\x1d\x8a\x88\xac\xae\xbbz\xdf\xad\xce]\xba\xca\xd3\xd3\x33\xdf>\f\xe6\0\xe3\"\xff\x1\x63\x61\xf1\x64\0\0\0\xd8\xe5\xcc\x99\x33\x1a\x36t\xb0RSS5v\xfc\x93\x8a\x88\x8c\xd4\x90\x41\x3\xf4\xd3\xee]\xf9n\xff\xe5\xa6\x8dz\xfe\xb9Yj\xd4\xa8\xb1\xc6=\xf9\x94\xea\xd5\x8b\xd1\x93\xe3\x9e\xd0\xa7k\xd7\x94r\xe4\0\x8a\x8b\xfc\a\x8c\x87\x19;\0\0\0\xb0\xcb\x9a\xd5\xabT\xa3\x46M==y\x8a<==\xd5\xa6m;\xa5\xa5\xa6i\xe1k\v\xf4\xf6\xbbKd2\x99rm\x7f\xcb\xad-\xd5\xbaM[\x95/_^\x92\xd4\xfe\x8e;\xe5\xed\xe3\xad\x8fV,W\xef\xbb\xfb\xe4{\fn\xc5\0\x8c\x89\xfc\a\x8c\x87\xc2\xe\0\0\0lf6\x9b\xf5\xee\xdbok\xea\xf4\x19\xb9n\xa3\xe8\xd0\xb1\x93\x16\xbf\xfb\xb6\xfe>vL5k\xd5\xca\xd5'000\xcf~\xaaT\xa9\xaa\xcb\x97\x93\n<\xe\x83\x39\xc0x\xc8\x7f\xc0\x98(\xec\0\0\0\xc0\x66\x17.$())Qaa\xe1\xb9\xda\xc3\xc3\xb3\xbf>w\xeel\x9e\x81]~~\xda\xbdK\xb7\xb7\xbf\xa3\xc0\xd7\x1b\xc6\x44\xe5\xdb\xbe\xef\xc0\x41\xdb\x83\x5\xe0P\xe4?`L\x14v\0\0\0`\xb3\v\x17.H\x92\xfc\xfc\xfcr\xb5\x97\xf7\xcf\xbe\xcd\xe2\xd2\xa5K\x85\xee\x63\xd7\xce\x9d\xda\xba\x65\x8b\xd6o\xfa\xb2\xc0m\x18\xc0\x1\xc6\x43\xfe\x3\xc6\xc4\xe2\xc9\0\0\0\xb0Y@@\x80$\xe9r\xf2\xe5\\\xed))\xa9\x92\xa4\x8a\x95*]\xb3\xff\xa9\xb8\x38M~z\x82\x9e{a\x8e\xaaU\x8b(\x99 \x1\x94\b\xf2\x1f\x30&f\xec\0\0\0\xc0\x66\x95*\x5\xcb\xd3\xd3S'O\x9c\x90\x9a\x35\xb7\xb6\x9f={F\x92\x14\x1a\x12Z`\xdf\x8b\x17/j\xfc\xd8\x31\xea\xd5\xfbnu\xea\xdc\xe5\x9a\xc7\x61\xf1T\xc0x\xc8\x7f\xc0\x98(\xec\0\0\0\xc0\x66>>>\x1a<\xf4~}\xb6n\xad:w\xe9*oooI\xd2\x7f\xb6oS\xbb\xdbnWDd\xa4$)++Kiii\xd6[6.^\xbc\xa8qO<\xae\x66-Zh\xc4\x83\xf\x15z\x1c\x6s\x80\xf1\x90\xff\x80\x31Q\xd8\x1\0\0\x80]b\xfb\xf6\xd3\xa0\x1\xfd\x35s\xc6tu\xe8\xd8Q\x7f\xfd\xf5\x97\x16\xbd\xf9\x86\x16/]f}\xd4\xf1s\xcf\xce\xd4\x96\xcd_i\xcd\xba/d\xb1X4b\xf8\xfd\xfa\xfd\xb7\xbdz`\xc4\xbf\xb5\xe7\x97_\xac\xfb\xaaQ\xb3\x86\x42\xf2\xb9\xca\xcf\x15{\xc0\x98\xc8\x7f\xc0x(\xec\0\0\0\xc0.\xd5\xab\xd7\xd0\x92\xf7?\xd0\xd2%\x8b\x35\xf3\x99\xe9\xba\xb1i3-]\xb6\\\r\x1b\x35\xb2nS\xa3\x66-\xc5\xd4o \x1f\x1f\x1f}\xfb\xcd\xd7\xfa\xfd\xb7\xbd\x92\xa4!\x83\x6\xe4\xda\xd7\xc2\x37\x16\xa9m\xbbvy\x8e\xc1`\xe\x30&\xf2\x1f\x30\x1e\xd3\x9f\x87OZ\xaaW\xcb\xae\x92\x1e?yV\xd1\xb5\xc3\v\xe9\x2\xb8\xa7\xbf\x8e\xc4\xe9\xca\\\xc9\xf9\xbc WnCn\x1\0\x1c\xad\x38\xff/%^N*\xf1\xf8\x8a\xa3\x61L\x14O\xc5\x1\n\x11\xe0_A\x12\xf9\xf\xb8\xab+\xcf\x1\xcc\xd8\x1\0\0\x80\xe1p+\x6\xe0\xbe\xc8\x7f\xc0>\x14v\0\0\0`8\f\xe6\0\xf7\x45\xfe\x3\xf6\xa1\xb0\x3\0\0\0\xc3\xe1\x8a=\xe0\xbe\xc8\x7f\xc0>\x14v\0\0\0`8\f\xe6\0\xf7\x45\xfe\x3\xf6\xf1pv\0\0\0\0\0\0\0(\x1a\x66\xec\0\0\0\xc0p\x16.\x98\x9f\xeb\xeb\x87\x1f\x1d\xe9\xa4H\0\x94\x36\xf2\x1f\xb0\xf\x85\x1d\0\0\0\x18\xe\x3\x39\xc0}\x91\xff\x80}(\xec\0\0\0\xc0pX<\x15p_\xe4?`\x1f\n;\0\0\0\x30\x1c\x6s\x80\xfb\"\xff\x1\xfb\xb0x2\0\0\0\0\0\x80\x8b\x62\xc6\xe\0\0\0\f\x87[1\0\xf7\x45\xfe\x3\xf6\xa1\xb0\x3\0\0\0\xc3\x61\x30\a\xb8/\xf2\x1f\xb0\xf\x85\x1d\0\0\0\x18\xeW\xec\x1\xf7\x45\xfe\x3\xf6\x61\x8d\x1d\0\0\0\x94\xb8_\x7f\xdd\xa3\xa7'NP\xd7N\x1d\xf4\xec\xacg\x14w\xf2\xe4\x35\xb7\x1f\x33z\x94:v\xeal\xc8\x41]\xc3\x98(g\x87P b+\x1a\x62+Y\xe4\x7f\xe9 \xb6\xa2\x31rl\x92m\xf1Q\xd8\x1\0\0@\x89\xfai\xf7.\r\x1e\x38@u\xea\xd4\xd5\xf8\t\x13u\xf1\xc2\x5\xdd?t\x90\xce\x9c\x39S*\xc7_\xb8`~\xa9\x1c\xa7(\x88\xadh\x88\xcdu\x90\xff\x5\x33rl\x92\xb1\xe3#\xb6\xdc(\xec\0\0\0\xa0\xc4\x64\x65\x65i\xfe\xbc\xb9\x1a\xf5\xd8h\xdd?l\xb8\xda\xb6k\xa7\xe9\xcf\xccR\xc5\xa0\x8a\xfal\xdd\xdak\xf6\xdd\xb4q\x83\xf5\xe3\xeav{\xbe\xceo\xbf\x8e\xda\x1f\xb1\x11[i\xc6\xe6j\xcaz\xfe\x17\xb6\xbd\x91\x63\xb3w\x7f\x46\x8e\xad\xb0\xed\x8d\x1c[Q\xf6\x97\x1f\n;\0\0\0(1\x87\xf\x1d\xd2\xae\x9d?\xea\xb6\xdb\xdb[\xdb\xca\x95+\xa7\x1e\xbdzi\xe9\x92%\xb2X,\x5\xf6\x35\xea\xad\x18\0lC\xfe\x3\xa5\x83\xc2\xe\0\0\0JL\xce\xed\x16\xa1\xa1\xa1\xb9\xda\xabW\xaf\xa1s\xe7\xce*11\xd1\x19\x61\x1(\x5\xe4?P:x*\x16\0\0\0JL|\xfcyI\x92o\xb9r\xb9\xda\xfd+T\x90$%%%*000\xdf\xbe\xf9-\x18\xb9\xef\xc0\x41\aG\b\xa0\xa4\x90\xff@\xe9\xa0\xb0\x3\0\0\x80\x12\x13\x14\x14$IJII\x91\xb7\xb7\xb7\xb5=%99\xd7\xeb\xb6*\xea\xd3K^[0\xafH\xfd\x1c\x1dG~\x88\xadh\xdc)6WE\xfe\x17\xce\xc8\xb1I\x8e\x8d\x8f\xd8J\xe\x85\x1d\0\0\0\x94\x98\xd0\xd0*\x92\xa4\xd3\xa7N\xe5\xba\x32\x1f\x17\x17\xa7\x88\x88H\xf9\xfbW\xc8\xd3\x87\xab\xf2@\xd9@\xfe\x3\xa5\x83\x35v\0\0\0Pb\xa2\xa2\xa3\x15S\xbf\x81\x36o\xfe\xca\xda\x66\x36\x9b\xb5\xfe\x8b\xcf\x35h\xc8\x10\xe7\x5\x6\xa0\xc4\x91\xff@\xe9`\xc6\xe\0\0\0J\x8c\x97\x97\x97\x46?>F\xff\x1e\x31\\\xde\xde^\xaa_\xbf\xa1\xb6l\xfeJ\xe7\xcf\x9fW\x97\xae\xdd\x9d\x1d\x1e\x80\x12\x44\xfe\x3\xa5\x83\x19;\0\0\0(Q\xad\xdb\xb4\xd5;\x8b\xdf\xd3\x81\xfd\xfb\x35\xfb\xd9g\xe4\xe7\xe7\xa7\x45\xef,Vpp\xb0\xb3\x43\x3P\xc2\xc8\x7f\xa0\xe4\x31\x63\a\0\0\0%\xee\xe6[n\xd5\xcd\xb7\xdc\xea\xec\x30\ne\xb1X\xb4\x61\xc3z\xad\xff\xfc\x33\x9d>uJwt\xe8\xa0\x41\x83\x87\xca\xcf\xcf/\xdf\xed\xcf\x9f?\xafU\x1f\x7f\xa4\x9d?\xfe\xa8\x13\xff\x1cW\xeb\x36m5\xe4\xfe\x61\x8a\x88\x88txl\xa7O\x9f\xd2{\x8b\x17\xeb\xdbo\xbeV\x83\x86\r\x15\xdb\xf7^\xdd\xd8\xb4\xa9M}\xcd\x66\xb3\x1e\x1b\xf9\x88\xb2\xb2\xb2\xf4\xfa\x9b\x8b\f\x11[FF\x86\xd6\xac^\xa5\x1f\xbe\xff^{\x7f\xdd\xa3\x6\r\x1b\xa9[\xf7\x1e\xea\xd8\xa9\xb3Sc\xcb\xca\xca\xd2\x97\x9b\x36j\xf5'\xabt\xf8\xd0\x41\xdd\xd8\xb4\x99\x6\xe\x1a\xac\xeb\xaf\xff\x97\x43\xe3r'e5\xff\xd3\xd2\xd2\xf4\xf9g\x9f\xea\xdbo\xbe\xd1\xde_\xf7\xe8\xfa\x7f\xdd\xa0\xfb\x6\r\xd6\r7\xda\x96\x97\xf6HMM\xd5\x87\xcb\xde\xd7\xe6\xcd_* P]\xbbuW\xf7\x1e=e2\x99l\xea\xff\xce\xdbo\xe9\xe5\x17\xe7\xe8\xc7]?\xab\x42@\x80\x43\x63\xb3\xf7\xe7\x96#>>^\x1f-\xffP\xbbv\xed\xd4\xc9\x13\xff\xa8\xc5\xcd\xb7(6\xb6\x9f\x1a\x35n\xec\xd0\xf8~\xfdu\x8fV~\xb4\x42{~\xfeY-[\xb7\xd6\xd0\xa1\xc3\x14^\xadZ\x81\xdb_\xbe\x9c\xa4\x8fV\xac\xd0\xe6\xaf\x36\xe9\xe2\x85\x8bj\xd3\xae\x9d\xee\x1b\x34X\xd5\xaa\x45\x38\x34.Gb\xc6\xe\0\0\0\xf0_\xef/}Os\x9e\x9b\xad\x8e\x9d:\xeb\x81\a\xff\xad\xad[\xb6\xe8\xc9qc\x95\x99\x99\x99g[\xb3\xd9\xac\x81\xfd\xfb\xea\xdc\xd9\xb3\xeawo\x7f\xdd?|\x84\xfe\xf8\xe3\xf=4\xe2\x1]\xbat\xc9\xa1q\x9d\x39sF\xc3\x86\xeVjj\xaa\xc6\x8e\x7fR\x11\x91\x91\x1a\x32h\x80~\xda\xbd\xcb\xa6\xfe+?Z\xa1\xed\xdb\xb6:4\xa6\xe2\xc4\x96\x9c\x9c\xac\x31\xa3Gi\xc3\xfa\xf5j\xdb\xee\x36M\x9b\x31K\xad\xdb\xb4\xd5\xa9\xb8\x38\xa7\xc7\xf6\xc9\xaa\x8f\x35\xe7\xf9\xd9\xea\xd4\xb9\x8b\xa6L{F\x95\x82\x83u_\xff~\xfa\xf3\xcf\x3\xe\x8d\r\xc6\x63O\xfeK\xd2\xcb/\xcd\xd1\xe6\xaf\xbe\xd2m\xb7\xb7\xd7\xd8\xf1\x13\x64\x32\x99\x34\xb0\x7f?\xed\xdf\xff\x87\x43\xe3\x32\x9b\xcdz\xea\xc9q\xfa\xe1\x87\xef\x34\xfc\x81\aug\x87\x8ezf\xfaT-}o\x89M\xfd\x7f\xfdu\x8f^~q\x8e\x43\x63\xba\x92\xbd?7I:v\xec\x98\x6\r\xbcW'\xe3N*\xb6o?=\xf5\xf4\x64\xd5\xa8QC\t\t\t\xe\x8d\xed\xa7\xdd\xbb\x34x\xe0\0\xd5\xa9SW\xe3'L\xd4\xc5\v\x17t\xff\xd0\x41:s\xe6L\xbe\xdb[,\x16=3}\x9a\xbe\xfb\xf6\x1b\r\xbd\x7f\xb8\x46>6Z\xc7\xff\xfe[\xf=\xf8\x80\x92\x12\x13\x1d\x1a\x9b#1c\a\0\0\0\x90t\xee\xdcY\xbd\xfc\xe2\x1c\xbd\xf5\xce\xbbj\xd1\xe2&IR\xfd\x6\r\xd4\xe9\xce\xf6\xfai\xf7.\xb5\xb8\xe9\xe6\\\xdb{yy\xe9\xdd%\xef+<<\xdc\xda\xd6\xaauk\xddy{;\xfd\xb6\xf7W\xb5l\xd5\xda\x61\xb1\xadY\xbdJ5j\xd4\xd4\xd3\x93\xa7\xc8\xd3\xd3Sm\xda\xb6SZj\x9a\x16\xbe\xb6@o\xbf\xbb\xe4\x9aW\xed\xf\xec\xdf\xaf\xd7\x16\xccS\x8f\x9e\xbdt\xe1\xc2\x5\x87\xc5T\x9c\xd8\x36\xac\xff\\IIIZ\xf8\xc6[\x85^\xd5/\xed\xd8\x96\x7f\xb8L\x3\a\rQ\xef\xbb\xfbH\x92\xda\xb4m\xab?\xf6\xed\xd3\x8f;v\xa8^\xbd\x98\x12\x8b\x15\xce\x65o\xfeK\xd2\xb0\xe1#T\xb9reyzzJ\x92:t\xec\xa4\xbf\x8f\x1d\xd3\xf6\xad[U\xbf~\x3\x87\xc5\xb6s\xe7\x8f\xfa\xf6\x9b\xaf\xb5i\xf3\x36\xeb-lAAA\x9a\x30~\xac\xbau\xef\xa1\xca\x95+\x17\xd8\xf7\xd2\xa5K\x9a\x32i\xa2\xfa\xdc\xd3W\xab>\xfe\xc8\x61\x31\xe5(\xca\xcfM\x92\xdeX\xb8@\x1d:t\xd2\xc8\xc7\x46[\xf3\xb0m\xbb\xdb\x1c\x1a[VV\x96\xe6\xcf\x9b\xabQ\x8f\x8d\xd6\xfd\xc3\x86K\x92n\xba\xf9\x66\r\x1d\x34P\x9f\xad[\xab\x61\xc3G\xe4\xe9s\xe6\xcci}\xb6\xeeS\xbd\xf7\xfe\aj\xd6\xbc\x85$\xa9y\x8b\x16j\xd3\xf2\x16\xfd\xf5\xd7_6\xcf\x92,m\xcc\xd8\x1\0\0\0$}\xff\xddw\xaa\\9X7^q\x1b\x45\xf5\xea\x35tG\x87\x8e\xda\xb2\x65s\xbe}\xae,\xeaHR\xc5\x8a\x95$I\xe9\xe9\x19\xe\x8b\xcbl6\xeb\xdd\xb7\xdfV\xb7\xee=\xac\x3H){\x10\xb9\xe3\x87\xef\xf5\xf7\xb1\x63\x5\xf6\xbd|\xf9\xb2\xa6N\x99\xa4)S\xa7+&\xa6\xbe\xc3\x62*NlYYYZ0o\x9e\xee\xed?\xa0\x44\x8b:E\xfd\xb9U\xaa\x14\xac\x7f\x8e\x1f\x97\xc5\x62\x91\x94}\xcb\xd8\x85\v\t\x8a\x88\x30\xeem\x18(\xbe\xa2\xe4\x7f\x95*Ur\xbd\xb7<==\x15\x16\x1e\xae\xb4\xb4\x34\x87\xc6\xb6q\xc3z\xf5\xecuW\xaeu\x89nm\xd9J\x99\x99Y\xda\xbdkg\x81\xfd,\x16\x8b\x16\xcc\x9f\xab[nm\xa9\xee={:4\xa6\x1c\x45\xf9\xb9\x1d=\xfa\x7fZ\xf7\xe9Z\xf5\xea\xdd\xdb\xe6[\xc9\x8a\xe2\xf0\xa1\x43\xda\xb5\xf3G\xddv{{k[\xb9r\xe5\xd4\xa3W/-]\xb2\xc4\x9a\xe3W*W\xae\x9c$\xe9\xd4\xa9S\xd6\xb6\xc4K\xd9\x33u\xaaT\xadZb\xb1\x16\x17\x33v\0\0\0\0I'N\x9cPt\xbd\x18yy\xe5\xfe\x13\xb9^t=\xfd\xfa\xeb\x1e\x9b\xf6q\xe8\xd0\x41IRt\xbdh\x87\xc5u\xe1\x42\x82\x92\x92\x12\x15\x16\x96\xbb\x88\x94ST:w\xee\xacj\xd6\xaa\x95o\xdf\xb7\xde|]Q\xd1\xd1\xea\xd0\xb1\x93\x96.Y\xec\xb0\x98\x8a\x13[BB\x82\xce\x9c\x39\xad\xc0\xc0@-z\xf3\r}\xfe\xf9:\x5\x4\x4\xea\xee>\xf7\xa8G\xcf^\xb9\x6\xca\xa5\x1d\x9b$\x8d\x1c\x35Z\x8f<\xfc\xa0\xbc\xbc\xbdT\xaf^\x8c\xb6o\xdb\xa6;\xee\xe8\xe0\xf0\xd9\x4\x30\x16G\xe4\xff\xe5\xcbI\xda\xf1\xc3\xf7\xba\xab\xf7\xdd\xe\x8d\xed\xe0\x9f\x7f\xaas\xd7n\xb9\xda\xfc\xfd\xfd\x15]/\xfa\x9a\xb7/n\xdf\xb6U;\xbe\xff^\xcb\x96\x7f\xa4\x83\x7f\xfd\xe9\xd0\x98r\x14\xe5\xe7\x16w2;fs\x86Y3gL\xd3\xf6\xed\xdbT\xaf^\x8c\x86\f\x1d\xa6\xe6-Z8,\xb6\x9c\xdb\xad\x42\x43\x43s\xb5W\xaf^C\xe7\xce\x9dUbb\xa2\x2\x3\x3s\xbd\x16\x14TQS\xa6\xcd\xd0\xa4\x89O)!!A&\x93\xb4\xfe\x8b\xcf\x35\xe7\xa5W\x14\x19\xe9\xf8\xb5\xd3\x1c\x85\xc2\xe\0\0\0 \xe9\xf4\xa9S\n\n\n\xca\xd3\x1e\x18\x14\xa8\x7f\x8e\x1f/\xb4\x7f\x66\x66\xa6\xdeX\xf8\x9a\x46<\xf8\x90\x43\x17O\xce\xb9}\xea\xea\xd9-\xe5\xfd\xcbKR\x81\xeb\xf9|\xff\xfdw\xfa|\xdd\xa7Z\xf9\xc9\x9a\x12\xbb*^\x94\xd8\xe2\xcf\x9f\x97$\r\x1b:X\x8f\x8e\x1a\xad\xa7&NR\\\\\x9c^xn\xb6\xcc\x66\xb3\xee\x89\xed\xeb\xb4\xd8$\xa9Q\xe3\xc6\x1a\x36|\x84^\x9a\xf3\xbc\xb5m\xc2\x96\xedy\x6\xae([\x8a\x9b\xff\x92\xf4\xd1\x8a\x15\x8a\x8a\x8eV\xeb\x36m\x1d\x16\x97\xc5\x62\xd1\xfe\xfd\xfb\xd5'66\xcfk\xa1\xa1U\x14\x9f\x10\x9f\xf7%g\xf9\0\0 \0IDATo\xbfS\xa7Ni\xca\xe4\xa7\x35w\xdeky\x8a\x17\x8eT\x94\x9f\xdb\xd9\xb3\xd9\x5\x97gfLS\x87\x8e\x1d\xd5\xa1Sg\xfd\xb4{\xb7\x86\f\x1a\xa0\x95\xab\xd6\xa8\x61\xa3\x46\xe\x89->>\xfb\\\xe3\xfb\xdfY89\xfc+T\x90$%%\xe5-\xecHR\xe7.]\xf5\xdd\xb7\xdf\xea\xb9ggJ\x92\xee\xba\xbb\x8f\xda\x38\xf0wZ\x12\x38;\x1\0\0\0\x92*\x87T\xd6o{\xf7\xe6iOJJR\xad\xeb\xae+\xb4\xff\x92\xc5\xef\xe8\xd2\xa5K\x1a\x36\xfc\x1\x87\xc6\x15\xf0\xdf'\xd8\\N\xbe\x9c\xab=%%U\x92T\xb1R\xa5<}\xce\x9f?\xa7)\x93&j\xc6\xccgU\xb9r\x88$\xc9\xa2\xbc\xb7\x1d\x38#6\xbf\xf2\xd9\x85\x95n\xdd{\xe8\xa1\x87\x1f\xb1\xb6gd\xa4k\xd1\x9bo\xa8\xcf=\xb1\xe)D\x15%6\x8b\xc5\xa2gg>\xa3s\xe7\xce\xe9\xe3O\xd6\xa8J\xd5\xaaZ\xf7\xe9\xa7\xea\xd2\xa9\x83^z\xe5U\xb5\xbf\xe3\xce\x62\xc7\x5\x63*n\xfe\xef\xfcq\x87\xde|}\xa1>\\\xb1R\xde\xde\xde\xe\x8b\xcb\x64\x32\xa9v\x9d\xdaJ\xccg\xe1\xde\x84\x84\xf8<\xb3Q\xa4\xec\"\xf3\xf3\xb3g\xa9\x7f\xff\x81\xd6\x35\x61\x1c\x9f\xfd\xd9\x8a\xf2s\xf3\xf7\xf7\x97$\x8d\x1b\xff\xa4\x1a\x34\xcc.\xe2\xb4hq\x93\xe\x1f:\xa8\r\xeb\xbfpXa'\xa7\xe0\x94\x92\x92\x92\xebw\x92\x92\x9c\x9c\xeb\xf5+%&&j\xd8\x90\x41\xba\xb5U+}\xb9\x65\x9b\xd2R\xd3\xb4\x64\xc9\xbb\xea\xd5\xb3\x9b\x16\xbd\xbdX\xd7\xd5\xae\xed\x90\xd8\x1c\x8d\x35v\0\0\0\0I\xd5\xaaU\xd3\xfe\xfd\x7f(===W\xfb\xb1\xa3Gu\xddu\xd7\xfe\x63~\xfd\x17\x9f\xeb\xc3\x65\xef\xeb\x85\x39/9\xfcQ\xc2\x95*\x5\xcb\xd3\xd3S'O\x9c\xc8\xd5\x9es\xd5;4$\xef\xc0\xee\x9d\x45\x8b\x14w\xf2\xa4\x46\f\xbf_\rc\xa2\xd4\x30&Js\x9e\x7fN_\xffg\xbb\x1a\xc6\x44\xe9\xb9\xd9\xb3\x9c\x16[\xce:!\xedn\xbb=W{DD\xa4N\x9c\xf8\xc7\x61\xeb\x93\x14%\xb6\x43\a\xf\xea\xa3\x15\x1fj\xd4\xe8\xd1j\xd0\xb0\x91\x42\x42\x42u\xff\xb0\xe1\xfa\xf7\xc3\xfk\xda\xd4\xc9\xd7|\xca\xf\\[q\xf2\xff\xe0_\x7f\xe9\xb1\x91\x8f\xea\xe5W\xe7\xa9N\xdd\xba\xe\x8f-:\xba\x9e\x8e\x1c\x39\x92\xab---M\x87\xf\x1d\xces\xab\xa1$m\xdd\xb2Y_n\xda\xa8\x5\xf3\xe7Z\xf3\x7f\xf0\xc0\xfe\x92\xa4\x9b\x9a\xdf\xa8\xd6-\xf3_\xd0\xb8(\x8a\xf2s\v\t\xc9.6W\n\xce\xbd\xe8s\x9d:u\x15\x17w\xd2\x61\xb1\x85\x86V\x91\x94=\xab\xe8Jqqq\x8a\x88\x88\x94\xbf\x7f\x85<}\xb6m\xdd\xa2\x93q'5r\xd4hEDD\xaav\x9d:\x9a:m\x86\xaaW\xaf\xa1\x65\xef/uXl\x8e\x46\x61\a\0\0\0\x90t\xf3-\xb7*\xfe\xfcy\xed\xda\xf9\xbf\xc5H\xcf\x9e=\xab/>\xffL\xed\xef\xfc\xdfL\x8d\xe4\xff^\xed\xcd\xf1\xe5\xa6\x8dz\xf9\xa5\x39Z\xf4\xce\x12U+\x81\x5v}||4x\xe8\xfd\xfal\xddZed\xfcoQ\xe6\xffl\xdf\xa6v\xb7\xdd\xae\x88\xff\xae\xfb\x90\x96\x96\x66-<\xdc\x13\xdbW\x1f\x7f\xb2&\xd7G\xceU\xf0\x8f?Y\xa3\xfe\x3\x6\x96jlYYYJII\x91$\x95/_^\xf7\xc4\xf6\xd3\xf6m[\x95\x95\x95\x65\xed\xb3\xe7\x97_\xd4\xb4i3\xeb\xe2\xa5\xce\x88-##{pz\xf5\xef\xb8Z\xb5\b\xa5\xa7\xa5\xe7\x8a\x17\x65KQ\xf3\xff\xd0\xa1\x83\xfa\xf7\x88\x61\x9a\xf9\xecl\xb5l\xd5\xaa\x44\x62\xbb\xb3\x43G\xad[\xbbVg\xafxD\xf7O\xbbwI\x92\x9a\xff\xf7ITW\xc6v\xfd\xf5\xff\xca\x93\xff\x8f<:J\x92\xb4\xe8\xdd%zk\xd1\xbb\xe\x8b\xad(?\xb7z1\xf5U\xbdzu}\xfd\x9f\xed\xd6\x36\x8b\xc5\xa2\xed\xdb\xb7\x39t\x91\xf7\xa8\xe8h\xc5\xd4o\xa0\xcd\x9b\xbf\xb2\xb6\x99\xcd\x66\xad\xff\xe2s\r\x1a\x32\xc4\xdav\xe5\xb9\x33--M\xa9))\xb9\n\xcc\x9e\x9e\x9e\xaaQ\xa3\xa6R\xd3R\x1d\x16\x9b\xa3y\x8e|\xec\x89iA\x1\xd9S\xa1.%&\xabr%\xc7^a\0\xca\x8a\xf3\tI\xba\x32Wr>/\xc8\x95\xdb\x90[\0\0G+\xce\xffK\xe9\x19\xe9\xd7\xdc\xd6]\x5\x6\x6\xca\x62\xb1h\xee\xab/+$$Dqq'\xf5\xd2\x9c\x17\xf4\xaf\x1bn\xd0\x80\x81\xf7\xc9\x64\x32\xe9\xf0\xe1\x43\xea\xd2\xf1\xeU\xacXI\x8d\x1a\x35\xd6\xa6\x8d\x1b\x34\x66\xf4(\x8dz\xecq\x5\x4\x4(..Nqqq:{\xf6\xac\xaa\x86\x85\x39,\xb6\xea\xd5\xab\xeb\x9d\x45\x8bt\xec\xd8\x31\xf9\xf8xk\xcb\xe6\xcdzc\xe1\x2=\xf3\xecl\x85\x85\x85)55U}\xef\xe9\xad\x9f\x7f\xfaI\x1d:vR\xa5J\x95\x14Z\xa5J\xae\x8f\xa4\xa4\xcb\xf2\xf2\xf2\xd2\xd0\xfb\x87+(\xa8\x62\xa9\xc5&I\xb3g=\xa3Y\xcfL\xd7]\xbd\xfb\xc8\xd7\xd7W\x91\x91\xd5\xf5\xf2\x8bst\xee\xec\x19\x99L&\xed\xda\xb5So\xbc\xbeP\x93\xa7MWddu\xa7\xc5V\xa5jU\xed\xff\xe3\xf\xad\xfbt\x8d\xfc\xfd\xfdu\xf1\xe2\x5\xfd\xf2\xcb\xcf\x9a?\xf7U\xdd?|\xb8\x9a\x36m\xe6\xb0\xd8\x8a\xcb\xd7\xc7G\x12\xf9\xef(E\xc9\xff\x43\a\xf\xaag\xf7.\xba\xe3\xce\xe\xba\xb1i3k\xfe\xc7\xc5\xc5\xa9Rp\xb0\xc3\xd6\x65\x8a\x8c\x88\xd4\xcf?\xff\xa4M\x9b\x36*((H\x7f\xec\xdb\xa7\x19\xd3\xa6\xea\xb1\xc7\xc7X\xdf\x93\x1b\xd6\x7f\xa1~\xf7\xdc\xadV\xad\xdb\xa8v\x9d:y\xf2\xdf\x64\x32i\xed\x9a\xd5\x9a\x34i\x8a\xb5\xa8\xe9\bE\xf9\xb9yyy)8$D\x93\x9ezR\x15\xfc+(9%Y\x9f\xaf\xfbT\xdf}\xf7\x8d\xa6N\x7f\xc6z\xabVqyxx\xa8Z\xb5j\x9a\x32i\xa2|}}\x95\x92\x92\xaa\xa5K\x16\xeb\xc8\x91\xc3\x1a;~\x82\xfc\xfc\xfc\xf2\x9c;\x83+\x5\xeb\xf3\xcf>\xd3\x9e=\xbf\xa8\\\xb9r:{\xe6\xac\xb6n\xd9\xac\x45o\xbe\xae\xa7&N*\x91\xe2}Q]y\xe`\x8d\x1d\0\0\0\x37\x63\x32\x99\xf2}\xcc+\xa4\x87\x1f\x19\xa9\xb0\xb0p\xad]\xb3Z\xa9\xa9)\xba\xb3\x43'\r\x18\x30P\x1e\x1e\xd9\x13\xdd\xfd\xfd+\xa8\x61\xc3\x46\xd6\xdb\x1f\xe6\xbc\xf0\x9c$\xe9\xd9\x99\x33r\xed'*\xba\x9e\xd6\xae\xfb\xdc\x61qU\xaf^CK\xde\xff@K\x97,\xd6\xccg\xa6\xeb\xc6\xa6\xcd\xb4t\xd9r\xeb,\x1cooo\xd5\xab\x17\xa3\xebj\xd7q\xd8\x31\x1d\x15\x9b$\xd5\xa8YK1\xf5\x1b\xc8\xe7\xbf\x3\x91\xbaQQz\xff\xc3\xe5z\x7f\xe9{\x9a\x31m\xaa\x1a\x35n\xac\x5\v_W\xd3\x66\xcd\x9d\x1a\x9b\x8f\x8f\x8f\x9e\x9f\xf3\x92\xd6\xac\xfe\x44\x9f\xacZ\xa9\xa3\xffwT\x8d\x1a\x37\xd6\xb8''\xe8\xf6\xf6w84\xb6\xe2(\xce\x1a\x44\xe4\x7f\xc1\xec\xcd\xff\xb5kV[\xff\xcd\xf9<\xc7\x96\xed\xdfX\x8b\x87\xc5\xe5\xe3\xeb\xab\xb9\xf3\x16h\xc9\x92w5\x7f\xde\xab\n\xf\xaf\xa6\x89\x93&\xab\x63\xa7\xce\xd6mBBB\xd5\xb8\xc9\xf5%\xbaPrA\xec\xfd\xb9IR\x97.]\xe5W\xae\x9c\xd6\xac^\xad\xe5\x1f.S\xcbVm\xf4\xd1\xcaOT\xa5J\x15\x87\xc6\xd6\xbaM[\xbd\xb3\xf8=\xad\xfax\xa5\xd6\xaeY\xad\xb6mo\xd3\xa2w\x16[o\t\xbd\xfa\xdc\x19^\xad\x9a\xde\xff`\xb9V,\xffP\v_[\xa0\xcbI\x89j\xda\xbc\x85\x96\xaf\\\xa5&M\xaewhl\xc5q\xf5\x39\xc0\xf4\xe7\xe1\x93\x96\xea\xd5\xb2\xef/=~\xf2\xac\xa2k\xe7\xbdG\xf\x80\xf4\xd7\x91\x38]\x99+9\x9f\x17\xe4\xcam\xc8-\0\x80\xa3\x15\xe7\xff\xa5\xcb)\x97\x95\x95\xc5\xc0\xepU\x1e\x1e&\xf9\xfb\x65\xcfj \xff\x1\xf7s\xf5\x39\x80\x35v\0\0\0\xdc\x8c\xa7\a\x93\xb6\x1WV\x9c\x1c&\xff\x1\xd7wu\x1eS\xd8\x1\0\0p3\x9e^\x9e\xce\xe\x1@1\x14'\x87\xc9\x7f\xc0\xf5]\x9d\xc7\x14v\0\0\0\xdc\x8c\x97\x87\x97<\x8a\xb1\x46\a\0\xe7\xf1\x30\x99\xe4\xe5Y\xf4Y7\xe4?\xe0\xda\xf2;\aP\xd8\x1\0\0p3&\x93\xe4\xeb\xeb\xeb\xec\x30\0\x14\x81\xaf\xaf\xaf\x8aS\x96!\xff\x1\xd7\x96\xdf\x39\x80\xc2\xe\0\0\x80\x1b\xf2\xf2\xf4\x92\x8f\x97\xb7\xb3\xc3\0`\a\x1f/\xef\x62\xcd\xd6\xc9\x41\xfe\x3\xae\xa9\xa0s\0\x85\x1d\0\0\0\x37\xe0\xed\xed\xa5\x8c\fs\xae\x36___\x6w\x80\x8b\xf0\xf1\xf2\xce\x33\xd3&=\xc3,\x1f\xef\xc2\v=\xe4?\xe0\xfa\xaeu\xe\xa0\xb0\x3\0\0\xe0\x6|\xbc\xbd\x94~\xd5\xc0N\xca\x1e\xdc\xf9\x95+\xc7\x9a\x1b\x80\x41y\x98L\xf2+W.\xdf\xdb\xa7\x32\xd2\xcd\xf2\xf6)\xbc\xb0\x43\xfe\x3\xae\xcb\x96s\0\xcf\xba\x3\0\0p\x3\xe5|}\x94\x9a\x9e.\x7f\x95\xcb\xf3\x9a\x97\xa7\x97<\xcb{\xc9\x9ciV\xa6\x39S\x99YfY,\x92\xc5\x62qB\xa4\x80{3\x99L2\x99\xb2\x1fg\xec\xe9\xe5)/O\xaf\x2\xd7\xd4IKO\x97\x9f_\xde\x9c\xbe\x1a\xf9\xf\xb8\x8e\xa2\x9c\x3(\xec\0\0\0\xb8\x81\xf2~\xbeJJNQrJ\xaa\xca\xe7\x33\x10\x34I\xf2\xf6\xf4\x92\xb7\xa7\x97$\x16V\x5\x8c.\xfe\x42\xa2\xccYY\xf2+\xe7S\xe8\xb6\xe4?P\xf6\\y\xe\xa0\xb0\x3\0\0\xe0&*W\f\xd0\xc9\xd3\xf1\xd9W\x3%y\xfbx\xcb\xd3\x83;\xf3\x1W\x91\x9e\x61VF\xbaY\xa9\xe9\x19\xca\xca\xccT\x95\x90\x8a\x36\xf7%\xff\x1\xd7W\xd0\x39\x80\xc2\xe\0\0\x80\x9b\xf0\xf4\xf4T\xf5j\xa1J\xb8\x98(s\xa6\x45\x19\x17\x92\x94\x99\x95\xe5\xec\xb0\0\xd8\xc8\xc7\xdbK\xde>^*\xef\xe7#\xbfr\xf6\xcd\xac!\xff\x1\xd7W\xd0\x39\x80\xc2\xe\0\0\x80\x9b\xa9\x14\x14\xe0\xec\x10\0\x38\t\xf9\xf\x94=\xcc\xbd\x3\0\0\0\0\0pQ\x14v\0\0\0\0\0\0\\\x14\x85\x1d\0\0\0\0\0\0\x17\x45\x61\a\0\0\0\0\0\xc0\x45Q\xd8\x1\0\0\0\0\0pQ\x14v\0\0\0\0\0\0\\\x14\x85\x1d\0\0\0\0\0\0\x17\xe5\xe5\xec\0\0\0\0P\xba\xe2/$*3+K\x19\xe9\x66\x65\x66\x65\x39;\x1c\0\x36\xf2\xf6\xf6\x92\x8f\xb7\x97\xfc|}\xe5\xe7\xe7S\xa4}\x90\xff\x80\xeb*\xe8\x1c@a\a\0\0\xc0M\xa4\xa5g\xe8\xcc\xb9\v\xaa\\)P\x1e&\x93\xbc+z\xc9\xd3\x83\t\xdc\x80\xab\xc8\xc8\x30+=\xc3\xac\x94\xf4\x34%&'\xabr\xc5\0yzz\xda\xd4\x97\xfc\a\\_A\xe7\0\n;\0\0\0n\xe2\xcc\xb9\v\xaa^-\xd4\xd9\x61\0(\"oo/y{{\xc9_\xe5\x94\x9c\x92\xaa\x93\xa7\xe3m\xcei\xf2\x1fp}\x5\x9d\x3(\xec\0\0\0\xb8\x81\xf8\v\x89\xaa\\)\xd0\xd9\x61\0p\x90\xf2~\xe5$\x99\x94p1Q\x95\x82\x2\xae\xb9-\xf9\xf\x94=W\x9e\x3\x98{\a\0\0\xe0\x6\x32\xb3\xb2\xe4\x61\x32\x39;\f\0\xe\xe4\x61\x92\xcc\x99\x96\x42\xb7#\xff\x81\xb2)\xe7\x1c@a\a\0\0\xc0\rd\xa4\x9b\xe5\xed\xc3\x64m\xa0,\xf1\xf6\xf1VFzF\xa1\xdb\x91\xff@\xd9\x94s\xe\xa0\xb0\x3\0\0\xe0\x6\x32\xb3\xb2X(\x15(c<= w\xdf\xa5!C\x6\xdb\xb4\xcf\xac\xac,%&&\xca\xcf\xcfO>>>6\xf5\x39z\xf4\xa8\xda\xde\xde\x39O\xfb\xc8G\x86k\xec\x13O\xd8\xb4\xf\xe4\xb5y\xdbv\xfdy\xe0/IR\xe2\xe5$C\r\xea\xe2N\x9d\xd6\xe1#G\x9d\x1d\x46\x99\x62O\xfegee\xe9\xba\xba\r\xad_\x87\x86T\xd2\xad\x37\xb7\xd0\xc0\x81\xfd\xd5\xa2\x45\x8b\xec\xfd\x9d>\xa3\x16\xb7\xb4\xd5\x9aU\x1f\xe8\xc6\x1bo\xb4)\x86\xf4\xf4t\xa5\xa4\xa4( @\x1ev\xae/\xb4u\xebVm\xdc\xf8\xa5\xbe\xfb\x61\x87\"#\xaa\xa9S\xa7\xe\xea\x1b\x1b\xab\xf2\xe5\xcb\xdb\xb5\x1f\xfc\xf\xe7\x80\x92\x45\x61\a\0\0\0\xe\x95x)Q\x83\x86\x8c\xd0\x9d\xedo\xd3\xd8'\x1e\xb3\xb9_\xfbv-\xf5\xe0\x83\xf(##C\xfb\xf\x1c\xd0\x84\x89Su\xf8\xf0\xe1\"\x17T\x12\x13\x13\xd5\xe4\x86\x9b\xb5r\xf9\x12\xddt\xd3M6\xf5IKK\x93$-\x9c\xff\x92\xaaT\xa9\x62m\xf\xe\xae\x64\xf7\xf1O\x9c\x38\xa1\x3\a\xe\xaa}\xfbv\xf9\xbe\xbe\x65\xcbv\xc5\xc4\x44)\"\"\xc2\xee}\x1b\xddg_\xac\xd7\xcf?\xef\xd1\xfd\x43\x6\xeb\xe7={\xf4\x7f\x87\xff\xcf\xfa\xda\xff\x1d\xfe?}\xb2z\xadZ4o\xaew\x16/Q\xd3\xa6\x37\xa8{\xd7.\xa5\x1e\xe3\xc4IS\x15{O\x1fI\xd2\x80\x1}\xd5\xa5S\xc7kn\xff\xf3/\xbfj\xed\xdaO\x8buLwxO\x14\x35\xff\x1f}h\x98\xda\xb4i\xad\xe4\xe4\x64}\xf3\xcd\xb7\xba\xa7\xdf`-~\xfb\x35\xdd~\xfb\xed\x45\x8a\xe3\x97_~Q\xec\xbd\x43\xb4\xf7\x97\x1d\n\n\n\xb2\xb9\xdf\xdcy\xf3\xb4|\xf9\xc7z\xf8\xa1\a\xd4\xa9sG%^\xba\xa4]\xbbv\xcb\xd7\xd7\xd7\xae\xe3\xbb\xc3\xef\xfaZ8\a\xe4\xaf\xa4\xde\x17\x14v\0\0\0\xe0\x30\xe9\x19\x19z\xf0\xe1Q\xaa\x12\x1a\xa2\xc7\x46=bW\xdf\xb0\xb0\xaa\xd6\x2L\xabV\xadT%4T\xa3\x1e\x9f\xa0{\xfb\xf5+\xb5\xc1Ojj\xaa$\xa9\x45\x8b\xe6\n\r\r-\xd6\xbe\xe\x1c\x38\xa8\x87G>\xae\xb9\xaf\xbc\xa0N\x1d\xef\xcc\xf5\xda\xc6M_\xe9\xb1\xc7\xc7k\xe1\xfcW\xca\xdc\xc0.99E3g\xbe\xa0S\xa7O\xeb\xdd\xc5\xef\xe7y==#Cc\xc6>e\xfdz\xc3\x86\xaf\xd4\xfe\xb6\xdbT\xbe\xbc_i\x86\xa9\x1d;v\xaa\xfdm\xb7I\x92\xea\xd4\xae\xadV-o\xb9\xe6\xf6i\xa9i\xc5\x1e\xd4\x95\xf5\xf7\x44q\xf2\xbfnT]k\xfe\xdfv\xdbmJOO\xd7\xb3\xb3_(ra\xa7(~\xff}\x9f\x16\xbc\xb6H[7oP\xf5\xea\x91\xd6\xf6\x9e={\xda\xbd\xaf\xb2\xfe\xbb\xbe\x16\xce\x1\x5+\xa9\xf7\x5\x8b'\x3\0\0\xc0n\xe9\x19\x19\xfa\xee\xfb\x1fr\xb5\x65\x65\x65i\xdc\xb8\x89JH\xb8\xa0\xd7_\x9b+o\xef\xe2]C\xcc\xb9\xe5\xe2\x9f\x7fN\xe4\xfb\xba\xc5\x62\xd1\xe6\xcd\x9b\xf5\xc0\x88\a\xd5\xb6]{M\x9a\x34Y\xff\xfc\xf3\x8f\xa4\xff\xcd\xd6\x91\xa4\xd8{\x87\xa8\x66\xed\xfa\xda\xb5kw\xa1\xc7LM\xcd\x9e\xb1\x63\xef\xd5\xf9\xfc\xb4o\xdfNs_yA\x8f=>^\x1b\x37}em\xcf\xf9\xe3}\xee+/\x14x\xd5\xd6\x95\xbd\xb5\xe8\x1d\x9d:}:O{\xc5\x8a\x15U1\x9f\x99\x13\xa7N\x9f\xd6\x9b\x8b\xde-\x8d\xd0\x9c\xae\xac\xbc'J#\xff[\xb7n\xa5\x83\x87\x8f\xe9\xe2\xc5\x8b\xf9\xc7\x90\x9e\xae\xc5K\x96(6\xb6\x9f\xbat\xed\xaey\xf3\xe7+))I\x92\xb4k\xd7n\xc5\xde;D\x92\xd4\xe4\x86\x9bU\xb3v}%&&\x16z\xccU\xabV\xe9\xbe\x81}s\x15u\x8a\xaa\xac\xfc\xae\x8b\x82s@\xc1J\xea}\xc1\x8c\x1d\0\0\0\xd8%=#C\x8f<:F_m\xde\xa2\x17_\x98\xa5>w\xdf%Iz\xee\x85\x97\xb4k\xf7\xcfZ\xbbz\x85*T\xf0/\xf6qrn\x8b\n\r\r\xc9\xf7\xf5OV\xaf\xd6\xcb/\xcf\xd3\x84\tc\x15\x14\x18\xa8\x95+W\xa9W\xefXm\\\xbfN\x95*U\xd2\xb2\xf7\x16i\xe0\xe0\a4\xf6\xf1G\xd4\xbe\xfd\xed\x8a\x8c,|\xb0\x96\x33\x63\xa7k\xb7^\xca\xcc\xcc\xd4\x8d\x37\\\xaf~\xfd\x62\xd5\xb2\x65K\x99L&\xbb\xbf\x87N\x1d\xef\xb4\xfe\x11?\xf7\x95\x17$\xc9\xfa\xf9\xd5Wk\xcb\x8a\xe6\xcd\x9b\xa9J\x95P\x9d\x39s\xd6\xda\x36\xea\xd1\x7f\xeb\xf1\xd1#%Is^|U\v\xdfXd}-<,L7\xdf\xd4\xbc\xd0\xfd\x9e\x38qB\xdf|\xfb\x43\xbe\xaf\xb5nu\x8b\xcb\xcc|p\xf5\xf7\x44i\xe5\x7fjj\xaa\x42\x43*) \xc0Zp\xcd\x61\xb1X4y\xf2\x14\x9d\x8c\x8b\xd3\x43\xf=\xa8\xd4\xb4\x34\xbd\xfa\xea<\xed\xdd\xfb\x9b\xdez\xf3\r\xd5\xab\x17\xad\xb1\x8f?\xa2\x17_yM\xcb\xde[\xa4\xca\x95\x83mZ\x1f\xe7\xb7\xdf\xf7\xa9W\xaf\x1eZ\xb3v\xad>\xf8`\xb9\xe2\xe3\x13\xd4\xbd[\x17\r\x1bv\xbf\x2\x3\x3\xed\xfe\x1e\\\xfdw]T\x9c\x3\xae\xad$\xde\x17\x14v\0\0\0`\xb3\x9c\x41\xdd\xde\xbd\xbf\xe9\x89\x31\xa3\x34~\xc2\x64I\xd2\xa5KIZ\xb1\xe2\x13}\xb2\xea\x43U\xa9R\xbc[\x98,\x16\x8b\xce\x9f?\xaf\xc5\x8b\x97\xa8S\x87v\xaaY\xb3\x66\x9em._\xbe\xac\x99\xb3\x9e\xd7\xdcW\xe6\xa8m\xdb\xb6\x92\xa4\x16\x37\xdd\xa4\xce]\xbak\xcd\xda\xb5z`\xf8p5i\xd2\x38\xbb\xbd\x45s5h\xd0\xc0\xa6\x63W\xadZE/\xcd\x99\xa9\xb0\xaaU\x95\x99\x99\xa5\x9d;wj\xc0\xa0\a4\xef\x95\xe7\x8at;\x86\x94\xfb\x8fxIe~P\xd7\xf2\xd6\x9b\xb5\xf1\x8b\x35\xba\xb1y+IR\xc5\xa0 =>z\xa4u\x1\xdb\xb1O<\xa6\xf7?\\\xa1\xc4K\xd9\x33(6\xae_\xa3\x8a\x15+\x16\xba\xdf\xf0\xf0p\xed\xf9u\xaf\x96\xaf\xf8\x38W{\xff{c\x15{Oo\a\x7f\x17%\xcbU\xdf\x13\xa5\x91\xff\x99\x99\x99\xfa\xfb\xef\xbf\xf5\xee\xe2\xf7\xf4\xd0\x83\xc3\xf3]\xf8\xf8\xb7\xdf~\xd3\x8a\x8f?\xd5\xce\x1f\xb6\xabj\xd5\xaa\x92\xa4\xbau\xea\xea\x8e\x8e\xdd\xb5{\xf7n\xb5h\xd1\x42-Zd\x17\n\x9a\x34il\xd3\x1a;YYY\xfa\xe5\xd7}\xda\xfd\xf3o\xea\xdf\xf7.=\xf4\xef\x11\xca\xca\xca\xd2\xfc\x5\vu\xec\xd8\xdfz\xe5\x95\x97\x8a]\xdc\x95\\\xe7w]\x1c\x9c\x3\n\xe7\xe8\xf7\x5\x85\x1d\0\0\0\xd8$gP\xf7\xdbo\xbf\xeb\xa3\x15KU\xab\x66\rU\v\xf\xd3\xf8\t\x93\xe4\xe5\xe5\xad\x65K\xdfVT\xdd\xda\x45\xde\xff\a+V\xeb\x83\x15\xab\xad_\xf7\xb9\xab\x9b\x66>3C\x9e\x9e\x9ey\xb6\xfd\xe7\x9f\x7f\x94p!Q\xf5\xea\xd5\xb3\xb6\xf9\x95+\xa7;\xda\xb7\xd3\xbe\xdf\xff(r\f111\x8a\x89\x89\xb1~\xdd\xb6m\x1b\x99 M\xcb\x1e\x1e\x1e\x1e\xaa\x18\x14\xa0\xf3\xf1\x17\xf5\xec\xb3\xb3\xac\x45\x9c\xaaU\xab\xaa{\xaf\xbe\x1a\x33\x66\xb4j\xd4\xa8\x61\xf7~Q8\xce\x1\xc5Ga\a\0\0\0\x85\xca\x35\xa8[\xbeT5kV\x97$\xdd\xdd\xbb\x97<\xbd\xbc\xe4\xe3\xed\xad\xe6\xcd\x9a\x16\xfb\x38+\x97/\x91\x97\x97\xb7\xc2\xc3\xc3\x15\x1e\x1eV\xe0\x15\xf2\xf4\xf4tIy\a\x4\xbe>\xbe*W\xae\xf8\xeb\xe3\\\xe9\xfa&M4\xff\xb5\xb7\x95\x98\x98h\xd7\xd3ur\\\xb9v\x82T\xf6o\xc5\xf8\xee\xfb\x1d\x1a=f\xbc\xf5\xeb\v\x17/\xea\xe5W\xe6k\xcc\xe3#e\xb1X4\xe7\xc5W\xadW\xea%\xa9s\xd7\xdez\xe5\xe5\xe7u\xeb-\x85?\xb9\xcc\xc3\xc3\x43\xb3\x9e\x99*\x93I\x92\xc9\xa4\x99\xd3\xa7\xb8\xe4\x80\xce\xd5\xde\x13\xa5\x91\xff\xad[6\xd7\xc8G\x1fQ\xf9\xf2\xe5\x15\x19\x19\xa9J\x95\n~\x12]Zz\x9a\xd2\xd3\x33\xf2\xb4W\xa8\xe0/\x1f\x1f\x9f\"\xc7\xd0\xf4\xc6\xebU988\xd7y',,L\x92\x94\x90\x90P\xa4\xc2\x8e\xab\xfd\xae\x1d\x81s@\xe1\x1c\xfd\xbe\xa0\xb0\x3\0\0\x80\x42\xcd\x9f\xbfP\xbf\xff\xbe/\xd7\xa0.G\xaf\x1e\xdd\x1cr\x8c\x1\xfdz\xdb\xfcX\xf2\xc8\xc8Hyzzh\xcf\x9e=\xaaV\xad\x9a\xa4\xec[8\xbe\xfb~G\x9e)\xf9\x19\x19y\a\x80\x5\xc9\xcc\xcc\xcc\x33\x43\xe8\xc0\x81?\x15U\xa7\x66\xb1\x8b:9\x7f\xb0_\xb9\xb6\x42Y\x1c\xdc\xed\xda\xb5;\xd7\xda\x1a\x92\x34\xff\xb5\x37\xf4\xfe\a+$\x8b\x45\x17\xaeZ\f\xf7\xd4\xe9\xd3\xfaq\xe7n\x9b\x6uR\xf6\xc0n\xe6\x8c\xa9\xd6\xcf]\x8d+\xbe'J#\xff\xef\xbe\xdb\xf6\xfc\xaf}\xddu:x\xf8\x98\x8e\x1e=\xaaZ\xb5jI\x92\xe2\xe2\xe2t\xf0\xf0\x31\x45\x45\x45\xfdw\xab\xec\xe2\x8c=\xf9\xdf\xa5s'\xcd\x9a=G\x97.]\xb2\xae\xa9\xf3\xc7\x1f\xd9\x33\0\x8b\xb2~\x8b+\xfe\xae\x1d\x81s\xc0\xb5\x95\xc4\xfb\x82\xc2\xe\0\0\0\n5\xe2\x81\x61\xea\x1b\xdbG\x91\x91\xce[\x9c\x32\x34\xa4\xb2\xfe\xf8\x63\xbf\xe\x1c\x38\xa0\x98\x98\x18\x8d{b\xa4&L\x9c\xaa\xe4\xe4\x64\x45\x44\x44h\xe3\xc6M\xba|\xf9\xb2z\xf4\xe8!I\n\f\fT\x9d\xeb\xaak\xdd\xba\xcf\x15\x10\x10\xa0\x90\x90\x90\x42\ag3f<#___\xddx\xe3\r\xf2\xf3+\xaf\xbd{\xf7\xea\xc5W^\xd3\xfbK\xde\xb4;\xde-[\xb6\xe7\xfb\x87\xfa\x95k+,\x9c\xffJ\x99{2\xce\x88\a\x86i\xf9\x8aUy\x9e\x8as\xe1\xc2\x85|\xb7\xf\xf\v\xd3\xbfG\xdco\xd7\x31\x1c=\x98\xdb\xb1\x63W\xa1\xdb\xfc\xf5\xd7\xc1\x62\x1f\xc7U\xdf\x13\xce\xce\xff\x9c\xc7`\xff\xbaw\xaf\x42\x42\x42\xd4\xbcys\xb5ks\x8b\x1e\x1b=F#\x1f}X\xde\xde>Z\xf4\xf6\xdb\xba\x37\xb6\x97\x1a\x37\xce^[+\xa7\xe0\xbb\x66\xcd\x1a\x35k\xd6LQQQ\xaaP\xa1\xc2\x35\x8f\xd3\xa1\x43\a-^\xb2T#G\x8d\xd6\x80\xfe\xfd\x64\xb1X4\x7f\xc1\xebzr\xecH\x85\x84\xe4\xbf\x88{A\\\xf5w\xed\b\x9c\x3\nVR\xef\v\xcf\x91\x8f=1-( {\xd5\xf2K\x89\xc9\xaa\\)\xa0\xd8\xc1\x2\x65\xd1\xf9\x84$]\x99+9\x9f\x17\xe4\xcam\xc8-\0\x80\xa3\x15\xe7\xff\xa5\xa2\xf0\xf5\xf5)\xd2Sal\xf5\xd5W\x9b\xe5\xe1\xe1\xa1\xf6\xed\xdb\x17\xb8M\xadZ5\xf5\xc1\x87+\xf4\xcb\x9e=\xea\xd2\xb9\x93\x9a\x37o\xae\x90\xca\x15\xf5\xc9\xea\xb5Z\xbf\x61\x93\xa2\xa3\xa3\x34\xfb\xd9\x99\xd6\x45\x38M&\x93\x9a\x37o\xaa\r\x1b\x37\xea\x93\xd5kU\xa7\xf6uW\\\xcd\xcf_@@\x5\xed\xdf\x7f@k\xd6\xae\xd3\x86\x8d_\xaa\x42\x5\x7f=\xf7\xec\f\x9bg\x12\\\xc9\xd7\xd7[7\xb5h\xae\xew\xe6\xfd\x9e\xea\xd6\xad\xa3\x6\x31\x31\x8a\x89\x89*\xd1\x9f\xab\x33x{{+,\xbc\x8a\xc2\xc3\xc2\x34\x7f\xeeKj\xdc\xb8\x81\xb6n\xdbn\xbdm\xce\xc7\xdb[s^\x98\xa5\xc9O?%\x99,\xea\xdb\xf7n5\xb4qqkGzo\xe9\aj\xd3\xba\x95\x64\x32)\xeeT\x9c\xfe>~\xfc\x9a\x1f\x97\x93\x93U?\xa6\x9e\xda\xdf~[\x91\x8fY\x12\xef\tW\xcf\x7f\x8b\xc5\xa2\xb9\xf3\x16\xaaS\xc7;T\xff\x8a\xf5\xadr\x1f\xdfW\x91\xd5\xaa\xea\x8d\x37\xdf\x91,Y\xba\xf5\xd6[\xd5\xfe\xf6\xdb\x14\x7f\xfe\xbc\x96\xbe\xff\x81\xf6\xee\xdd\xabN\x9d:j\xd4\xa8\x91\xd6\x19wAA\x81\x8a\x89\xae\xa3\xc5K\xde\xd7\x8e\x1d?\xaa\x45\xf3\x66\x85\x16g|||\xd4\xb1\x63\a\x1d;zT\xcb>X\xae\xc3\x87\xe\xab\xff\xbd\xfd\x34p\xe0\0\xbb\v\t\xee\x9a\xff\x12\xe7\x80k)\xa9s\x80\xe9\xcf\xc3'-\xd5\xab\x65\xaf\\~\xfc\xe4YE\xd7\xe/r\x90@Y\xf6\xd7\x91\x38]\x99+9\x9f\x17\xe4\xcam\xc8-\0\x80\xa3\x15\xe7\xff%w\x95\x98\x98\xa8\xa3G\x8f\x16\xf8z\xf9\xf2\xe5U\xa7N\x9d\xd2\v\xc8\x8d\xdc\xd9\xb9\x87\xfe\xfa\x33\xfbjw\xbd\x98h}\xb9\xfeS'G$\xdd~Ggu\xeb\xdaY\xd7\x37iR\xe8\xb6\x95\x43*\xeb_\xd7\x37.\x85\xa8\xecG\xfe\xdb\xe6\xd4\xa9S:{\xf6l\x81\xafW\xa9R%\xd7\x62\xccp,\xce\x1%\xe7\xf8\xc9\xb3\xdc\x8a\x5\0\0\0\xf7p\xf4\xe8Qu\xeb\x19[\xe0\xebw\xf7\xea\xaa\x97_~\xb1\x14#r\x1fw\xdc\xd6N\x81\x15\xb2g/\xdf\xd4\xa2\x99\x93\xa3\xc9\x16Y\xbd\xba>\xff\x62\x83>\xff\x62\x43\xa1\xdb\xde|s\v\xc3\xe\xea`\x9b\xad\xdb\xb6\xe9\xa9\xa7g\x14\xf8\xfa\v\xcfMW\xdf\xd8\x82\xcf\xf(\x1e\xce\x1%\x8b\x19;\x80\x8d\x98\xb1\x3\0\x30\x12\x66\xec\0\x90\xc8\x7f\xc0\xdd\x1d?yV\xae\xb7\x84\x34\0\0\0\0\0\0$\x89\xc2\xe\0\0\0\0\0\x80\xab\xa2\xb0\x3\0\0\0\0\0\xe0\xa2(\xec\0\0\0\0\0\0\xb8(\x9e\x8a\x5\0\0\xe0\x66\x8e\x9f,\xf8\x91\xbfp-,\x88\v{\x91\xff\x65\a\xf9\x8f\x1c\xcc\xd8\x1\0\0\0\0\0pQ\xcc\xd8\x1\0\0p3\\\xe5\x5\xdc\x17\xf9\xf\x94=\x14v\0\0\0\xdc\f\xb7\x62\0\xae\xaf\xa8\x5\x1a\xf2\x1f(\x1b\xae<\aP\xd8\x1\0\0p3\\\xb1\a\xdc\x17\xf9\xf\x94=\xac\xb1\x3\0\0\0\0\0\xe0\xa2\x98\xb1\x3\0\0\0\xe4#==]'N\x9cPRb\xa2\x32\xcc\x19\xce\xe\xa7\xc8\xbc\xbd\xbcU! @\x11\x11\x11\xf2\xf1\xf1qv8\x80K \xff\xe1J(\xec\0\0\0\0WIOO\xd7\xfe\xfd\xfb\x95\x99ivv(\xc5\x96\x61\xcePBB\xbc.]\xba\xa4\xfa\xf5\xeb\x33\xb8\x3\nA\xfe\xc3\xd5p+\x16\0\0\0\x9c\xc2Y\x8b\xb8\x1e?y\xb6\xd0\x63\x9f\x38q\xc2\xa9\x83\xba\xd0\xb0\x1a\xe\xdfgf\xa6Y'N\x9cp\xf8~\x1d\xc9\x96\xdf\r\xca\x6\xf2\xbf`\xe4?\xec\x45\x61\a\0\0\0\xb8JRb\xa2\xb3\x43(\x11IIe\xf3\xfb\x2\x1c\x89\xfc\x87\xab\xa1\xb0\x3\0\0\0\\\xc5\x95\xd7\xd4\xb8\x96\x8c\x8c\xb2\xf9}\x1\x8e\x44\xfe\xc3\xd5P\xd8\x1\0\0\0\0\0pQ\x14v\0\0\0\0\a9\xfe\xcfI\x1d\xff\xe7\xa4\xb3\xc3\0\xe0\x4\xe4?\x9c\x85\xa7\x62\x1\0\0 \x8f\x15\x1f\xad\xd2\xae\xdd?\xdb\xbc\xfd-77W\x9f\xbb\xef*\xc1\x88\x8c\xef\xf8?'5e\xda,I\xd2\x8ciO\xabzd5'GTr^\x9d\xbb \xdf\x1l\xf3\x66\x37\xaa_\xdf>N\x88\xa8p\x8b\x97,\x93$\r\x1d\x32\xd0\xc9\x91\x18\x1f\xf9o?\xf2\x9f\xfcw&\n;\0\0\0\xc8\x63\xd7\xee\x9f\xf5\xf9\x17\x1b\x14U\xb7N\xa1\xdb&%%i\xd5'k\x94\x92\x9c\xaa\xfb\xee\xbb\xb7\x14\xa2\x33\x9e\x9c\x41\xdd\x85\v\x17%IS\xa6\xcd*\xd3\x83\xbb\xa3\xc7\x8e\xeb\xd0\xa1\xc3\xd6\xaf\xf7\x1f\x38 \xb3\x39S\x92\f;\xb0\xfb\xfa\xdbo%\x95\xdd\x81\x9d#\x91\xff\xf6!\xff\xc9\x7fg\xa3\xb0\x3\0\0\x80|E\xd5\xad\xa3ukW\xea\xfc\xf9\xf3\x5n\x13\x18\x18(OO/=1v\x82&M\x9d!In7\xb8;u\xea\x8c\xa6L\x9b%/O/\xd5\xaa\x99\xfd\x98\xe2\xa4\xa4\xcb\x9a\x32m\x96\x66\xcf\x9c\xaa\xb0\xb0*N\x8e\xd0\xf1^}\xf9\xf9\xff}>w\x81~\xfb}\x9f\xbc\xbc<\x9d\x18Q\xd9\x97\x92\x92\xa2~\xfd\a\xcb\xe4\xe1\xa1\x15\x1f,Q\xb9r\xe5J\xf4x\xe4\xbfm\xc8\x7f\xf2\xbf\xb4\\\xeb\x1c@a\a\0\0\0\x5:\x7f\xfe\xbc\x9a\xdd\xd4\xa6\xc0\xd7_}\xf9y\xdd\xd5\xab\x87^z\xf1\x39I\xd2\xa4\xa9\x33\xe4W\xbe\x9c[\xdd\x96\x11\x1c\\Q7\xfc\xebz\xc5\xf6\xe9\xa5w\x16/\x95$=9n\xb4V\xaeZ\xab\xe0\xe0\x8aN\x8e\xae\x64\xbd:w\x81^\x99\xfb\x9a\x1e\x7f\xec\x11m\xde\xb2\xdd\xd9\xe1\x94i~~~\x9a\xf9\xccT\xf5\xbe\xfb^\xcd\x98\x39[\xcf\xce\x9c^\xe2\xc7$\xff\vG\xfe\x93\xff\xa5\xe5Z\xe7\0\x16O\x6\0\0@\xb1yyy\xea\xa5\x17\x9f\xd3u\xb5j\xea\x87\x1d\xbb\x9c\x1dN\xa9\x88\x8b;\xa5\x94\x94T\xf9\xf8\xf8h\xd4\xa3#r]\x99\xf\v\xab\xa2Q\x8f\x8e\x90\x8f\x8f\x8f\xd2\xd3\xd3u\xea\xd4\x19'FZ2\xae\x1c\xd4\x8d~\xecQg\x87S\xa8\xf6\xed\xda\xa9}\xbbv\xce\xe\xa3X\x1a\x37j\xa8IO?\xa9\xf>\\\xe9\xecPr!\xff\xc9\x7f\xa3+\v\xf9/\x15|\xe`\xc6\xe\0\0\0\n\xe4\xe9\xe9\xa9\x88\x88\x88\x2_\xf7\xf7/o\xfd\xdc\xcb\xcbS\x15*T(\x8d\xb0\x9c.gM\x8d\xc6\x8d\x1ah\xcc\xe8G\xae\xb9\xed\x1bo-\xd1/{~-Skn\xb8\xda\xa0N\x92\x6\xe\xec\xe7\xec\x10\x1c\x62\xd0}\xfd\xf5\xc3\x8e\x9d\xa5r,\xf2?\x7f\xe4?\xf9\xefL\xf9\x9d\x3(\xec\0\0\0\xa0@\xc1\xc1\xc1\xfa\xfe\x9b\xcd\xa5~\xdc\x13'N\xe8\x9bo\x7f\xc8\xf7\xb5\xd6\xadn\xb9\xe6`\xb3\xa4\xe5\f\xea\xbc<\xbd\xd4\xbf\xdf=\x85n\x1f\xdb\xa7\x97~\xfbm\x9f\xc3\x16T={\xf6\x9c\xf6\xec\xfd=\xdf\xd7\xfe\xd5\xa4\x91\x42\x43\x43\x8a\xb5\xff\xc2\x14\x34\xa8\xab[\xb7\x8e\x61\a\xae\x66s\xa6\x36l\xda\xa4\v\xf1\x17u\xef\xbd\xb1.\xbd\x1e\x88\xc9\x64\xd2\x9c\xe7\x66\x96\xca\xb1\xc8\xff\xbc\xc8\x7f\xf2\xdf\xd9\xf2;\aP\xd8\x1\0\0\x80\xe1\x84\x87\x87k\xcf\xaf{\xb5|\xc5\xc7\xb9\xda\xfb\xdf\x1b\xab\xd8{z;)\xaa\xdcO\xbf\xa9U\xb3\x86uM\x8d\x1c\x7f\x1d\xcc~R\xcc\xac\xd9/\xe6j\xafP\xc1_G\x8f\xfd\xed\x90\xc1]\xe5\xca\xc1:t\xf0\xb0\xbe\xdc\xbc-W{\x87;oW\xfb\xdb\n^\xf\xc5\x11\xaeu\xa5\xfe\xca\x5U\x9d\x65\xf1\x92\x65\xd6\xa7\xdfH\xd9\xb7_\f\x1c\xd8O\xcb\x97\xaf\xb4.\xee[18H\xdd\xbbv\xd1\xb2\x65+\xb4\x65\xfbv\xeb\xb6mZ\xb5r\x99'\xe6\x4\x4\x6\x38;\x84\x12\x45\xfe\x17\x8c\xfc/\x98\xbb\xe4\xbf\x94\xf7\x1c@a\a\0\0\0\x36KKK\xd3\xdau_H\x92z\xf5\xe8*__\xdf\x12\x39\x8e\x87\x87\x87\x9e\x9d\x39M&\x93I\x1f.\xcf^K`@\xffX\xcd\x9c\x31U\x1e\x1e\xee\xbdL\xa4\x87\x87\x87\x1e\x1c\x31T2\x99\xf4\xe5W[%I\x1d;\xdc\xae\x11\xc3\x87\x94\xe8\xcf\xc6\x15o\xbf\xc8Q18\xc8\xfa\xf9\x85\xf8\x8bN\x8c\xc4\xb5\x91\xff\xceG\xfe\xdb\xcf\x1d\xf2\x9f\xc2\xe\0\0\0lv\xdf\xe0\xe1\xfaq\xe7nI\xd2\xea\xd5k\xb5\xe2\xc3\xf7\x64\x32\x99J\xe4X\x1e\x1e\x1e\x9a\xf5\xccT\x99L\x92L&\xcd\x9c>\xc5\xe9\x83\xba\xea\x91\xd5\x34\x63\xda\xd3\x9a\x32m\x96\x92\x92.\xeb\xc9q\xa3s-\x9a\x9as\xa5\xfe\xe9\xa7\xc6Z\xdbN\x9d:\xa3\xc9Sg\xa9\x62\xc5 \x87\xad\xb3\xe1\xe1\xe1\xa1\a\x1f\x18\x92\xfd\xb3\x91I#\x86\xfv\xd8\xcf\xe6\xd5\xb9\vt\xf4\xd8\xf1<\x8f\x34v\x85\x41\xdd\xd0!\x3\xf3\xbd\xea\xde\xb9\x63G\xcd\x9c~Q\x15\x83\x83\xd4\xb9\x63GI\xd9kn\xb8\xea\xba\x1b\x97.]R```\xa9\x1f\x97\xfc'\xff\xc9\x7f\x63\xb8\xfa\x1c\xe0\xde\xe5N\0\0\0\xd8\xec\x64\\\x9cuP'I;~\xdc\xa5\xb8S\xa7J\xf4\x98\x1e\x1e\x1e\x9a\x39\x63\xaa!\x6u9r\x6w\xe6L\xb3V\xaeZ[\xe8\xf6+W\xad\x95\x39\xd3\xec\xf0\xc5S=<<4b\xf8\x10\x87\xe\xea\xa4\xec\xdbM\xe\x1d:l\xfd\xdaU\x6u\xd7\xe2\xe5\xe5\xa9\xfb\xee\xbbW\xdd\xbbvq\xf9\xf5\x35,\x16\x8b\xc6O\x98\\\xea\xc7%\xff\xb3\x91\xff\xae\xa7,\xe5\xbf\x94\xff\x39\x80\x19;\0\0\0\xb0I\xe5\xe0`U\f\n\xd2\x85\x8b\xd9S\xd9+V\xac\xa8\xca\xc1\xc1%~\\\xa3\f\xe8\xaeT=\xb2\x9a\x66\xcf\x9c\xaa\xe0\xe0\x8a\x85n\xfb\xef\x11\x43\x14\x1f\x7f!\xd7\x95}G)\xe9\x9fMY\x18\xd4\xe5X\xb6l\x85$\xd7\x7f:\xce\xd2\xf7?\xd4\x86\x8d_\x96\xfaq\xc9\xff\xff!\xff]OY\xc9\x7f)\xffs\x80\xf1\xb2\x4\0\0\0\x86\xe4\xeb\xeb\xabw\xdfy]\xb7\xder\x93Z\xdez\xb3\x16\xbf\xf3z\x89\xad\xb1\xe1\n\xc2\xc2\xaa\xc8\xc7\xc7G\xe7\xce\x9f\xd7\xd4\xe9\xb3u\xe6\xccY\xebk\xa7O\x9f\xd1\xd4\xe9\xb3u\xee\xfcy\xf9\xf8\xf8\x94\xc8\xa0\xae\xa4\x95\xa5\x41\x9d$m\xd9\xbe=\xd7\x62\xa9\xaeh\xefo\xbfk\xe6\xac\xe7\x35\xa0\x7fl\xa9\x1f\x9b\xfc\xcf\x8d\xfcw-e!\xff\xa5\x82\xcf\x1\xcc\xd8\x1\0\0\x80\xcd\x9a\xdex\x83\x96\x7f\xb0\xc4\xd9\x61\x18Jjj\xba\xfe>\xfe\x8f\x9e\x9e \xea\xd7\xd7\xbe\xab\xf5\xee.gp\x97\xf3\xb9\xab*\xab\xbf\xfb\xfc\x1e\x83\x8c\xfc\x95\xd5\xf7@I\"\xff\x8d\xad\xac\xe7?\x85\x1d\0\0\0\xc0\x41\\y@\a\xa0x\xc8\x7f\x38\vO\xc5\x2\0\0\0\0\0pQ\x14v\0\0\0\0\0\0\\\x14\x85\x1d\0\0\0\xe0*\xde^\xde\xce\xe\xa1\x44x{\x97\xcd\xef\vp$\xf2\x1f\xae\x86\xc2\xe\0\0\0p\x95\n\x1\x1\xce\xe\xa1\x44T\xa8P6\xbf/\xc0\x91\xc8\x7f\xb8\x1a\x16O\x6\0\0\x80ST\xaf\x16j\xd8\xe3\x46\x44\x44\xe8\xd2\xa5K\xca\xcc\x34\x97\x42\x44y\x9d=\xf5\xb7\xc3\xf7\xe9\xe9\xe9\xa5\x88\x88\b\x87\xef\xd7\x91\x9c\xf5\x9e@\xe9#\xff\vF\xfe\xc3^\xcc\xd8\x1\0\0\0\xae\xe2\xe3\xe3\xa3\xfa\xf5\xeb\xabR\xa5`\x97\xbf}\xc1\xdb\xdb[\x95*\x5\xab~\xfd\xfa\xf2\xf1\xf1qv8\x80\xe1\x91\xffp5\xcc\xd8\x1\0\0\0\xf2\xe1\xe3\xe3\xa3\xeb\xae\xbb\xce\xd9\x61\0p\x2\xf2\x1f\xae\x84\x19;\0\0\0\0\0\0.\x8a\x19;\0\0\0\x90\xc5\"\x99\xb3\xcc\xca\x34g*3\xcb,\x8b\x45\xb2X,\xce\xe\vp;&\x93I&\x93\xe4\xe9\xe1%O/Oyyx\xc9\x64*\xd9\x63\x92\xff\x80q\x14\xe5\x1c@a\a\0\0\xc0\xcd\x99\x33\xcdJKKS\x16\x3\x39\xc0\xe9,\x16\x8b,\x16)++C\x19\xe6\fy\x98L\xf2\xf5\xf5\x95\x97g\xc9\f\xdd\xc8\x7f\xc0X\x8ar\xe\xe0V,\0\0\0\x37\x96\x96\x96\xa6\x94\xd4T\x6u\x80\x41\x65Y,JIMUZZ\x9a\xc3\xf7M\xfe\x3\xc6g\xcb\x39\x80\xc2\xe\0\0\x80\x9bJKKS\xba\x39\xc3\xd9\x61\0\xb0\x41\xba\x39\xc3\xa1\xc5\x1d\xf2\x1fp-\xd7:\aP\xd8\x1\0\0pC\xe6L3\x83:\xc0\xc5\xa4\x9b\x33\x64\xce\x34\x17{?\xe4?\xe0\x9a\n:\aP\xd8\x1\0\0p3\x16\x8b\x1cv\xe5\xff\x8f}\xbf\xab\x61L\x94\xce\x9e\x39\x93\xef\xeb\xdf}\xfb\xad\x1a\xc6\x44))11W\xfb\xb7\xdf|\xad\x86\x31Q\xbat\xe9R\x9e>\rc\xa2\x1c\x12\x1bP\x16\xa5\xa5\xa5\xa9\x38\x37N\x91\xff\x80k\xcb\xef\x1c\xc0\xe2\xc9\0\0\0n\xc6\x9c\x65.\xb5\x35\x35\xe2\xe3\xcfK\x92|\xcb\x95\xcb\xd5\xee_\xa1\x82$)))Q\x81\x81\x81y\xfa\x15\x34\xb8\xdbw\xe0\xa0\x83#\x4\\K\x96\xc5\"s\xa6Y\xde\x45\\L\x99\xfc\a\\[~\xe7\0\n;\0\0\0n&\xd3\x9cYj\xc7\n\n\n\x92$\xa5\xa4\xa4\xc8\xdb\xdb\xdb\xda\x9e\x92\x9c\x9c\xeb\xf5\xab\x31\x80\x3\n\x96i\xce,ra\x87\xfc\a\\\xdf\xd5\xe7\0\n;\0\0\0n&3\xab\xf8kt\xd8*4\xb4\x8a$\xe9\xf4\xa9S\xb9\xae\xcc\xc7\xc5\xc5)\"\"R\xfe\xfe\x15\xf2\xed\xb7i\xe3\x6\xeb\xe7\x1d;u.\xd9 \x1\x17\x93\x9d\xc3\xbe\xc5\xe8[:\xc8\x7f\xa0\x64\\}\xe\xa0\xb0\x3\0\0\xe0\x66J\xfa.\x8c\xe4\xe4\x64\x95/_^\x92\x14\x15\x1d\xad\x98\xfa\r\xb4y\xf3W\x8a\x8a\x8e\x96$\x99\xcd\x66\xad\xff\xe2s\r\x1a\x32\xa4\xc0}0\x98\x3\nV\x9c\x1c&\xff\x1\xd7wu\x1eS\xd8\x1\0\0p3\x96\x12\x1c\xd9\x1d>|H\xb1w\xdf\xa5\xf1\x13&\xaao\xbf{\xe5\xe5\xe5\xa5\xd1\x8f\x8f\xd1\xbfG\f\x97\xb7\xb7\x97\xea\xd7o\xa8-\x9b\xbf\xd2\xf9\xf3\xe7\xd5\xa5k\xf7\x12\x8b\x3(\xcb\x8a\x93\xc3\xe4?\xe0\xfa\xae\xce\x63\n;\0\0\0p\x18\x7f\xff\nj\xd8\xb0\x91\xc2\xc2\xc2\xadm\xad\xdb\xb4\xd5;\x8b\xdf\xd3\xaa\x8fWj\xed\x9a\xd5j\xdb\xf6\x36-zg\xb1\x82\x83\x83\v\xdc\xf\xb7\x62\0\xae\x87\xfc\a\x9c\x83\xc2\xe\0\0\0\x8a\xac\x41\xc3\x46\xb9\x16:\r\v\v\xd3\xd2\xf\x96\xe7\xd9\xee\xe6[n\xd5\xcd\xb7\xdcj\xf3~\x19\xcc\x1\xc6G\xfe\x3\xc6@a\a\0\0\0\x86\xc3\x15{\xc0}\x91\xff\x80}(\xec\0\0\0\xc0p\x18\xcc\x1\xee\x8b\xfc\a\xec\xe3\xe1\xec\0\0\0\0\0\0\0P4\xcc\xd8\x1\0\0\x80\xe1p+\x6\xe0\xbe\xc8\x7f\xc0>\x14v\0\0\0`8\f\xe6\0\xf7\x45\xfe\x3\xf6\xa1\xb0\x3\0\0\0\xc3Y\xb8`~\xae\xaf\x1f~t\xa4\x93\"\x1P\xda\xc8\x7f\xc0>\x14v\0\0\0`8\f\xe4\0\xf7\x45\xfe\x3\xf6\x61\xf1\x64\0\0\0\0\0\0\x17\xc5\x8c\x1d\0\0\0\x18\xe\x8b\xa7\x2\xee\x8b\xfc\a\xec\x43\x61\a\0\0\0\x86\xc3`\xep_\xe4?`\x1f\n;\0\0\0\x30\x1c\xae\xd8\x3\xee\x8b\xfc\a\xec\x43\x61\a\0\0\0\x86\xc3`\xep_\xe4?`\x1f\x16O\x6\0\0\0\0\0pQ\xcc\xd8\x1\0\0\x80]RSS\xf5\xe1\xb2\xf7\xb5y\xf3\x97\n\b\bT\xd7n\xdd\xd5\xbdGO\x99L\xa6\x2\xfb\xfc\xfa\xeb\x1e-[\xfa\x9e~\xfei\xb7j\xd7\xa9\xa3\xdew\xdf\xa3\x8e\x9d:\xcb\xc3#\xff\xeb\x8c\xdc\x8a\x1\x18\x13\xf9\xf\x18\xf\x85\x1d\0\0\0\xd8\xccl6\xeb\xa9'\xc7)))Q\xc3\x1fxP\xf1\xf1\xf1zf\xfaT%$$h\xf0\x90\xa1\xf9\xf6\xd9\xf7\xfb\xef\xea\xdf\xf7\x1e\x8d\x1e\x33V\xbd\xee\xea\xad?\xf\x1c\xd0\xa4\x89\x13\x94\x96\x96\xa6^w\xf5\xce\xb7\xf\x83\x39\xc0x\xc8\x7f\xc0\x98(\xec\0\0\0\xc0\x66;w\xfe\xa8o\xbf\xf9Z\x9b\x36oSpp\xb0$)((H\x13\xc6\x8fU\xb7\xee=T\xb9r\xe5<}\xb6n\xdd\xac[[\xb6\xd4\x3#\x1e\x94$\xb5l\xd5Z\x19\xe6\fm\xda\xb8\xa1\xc0\x81\x1dW\xec\x1\xe3!\xff\x1\x63\xa2\xb0\x3\0\0\0\x9bm\xdc\xb0^={\xdd\x65\x1d\xd4I\xd2\xad-[)33K\xbbw\xed\xccw\x10\xe6\xef_AqqqJII\x91\x9f\x9f\x9f$\xe9\xfc\xb9s\xaa\x1b\x15U\xe0q\x18\xcc\x1\xc6\x43\xfe\x3\xc6\xc4\xe2\xc9\0\0\0\xb0\xd9\xc1?\xffT\x8d\x9a\xb5r\xb5\xf9\xfb\xfb+\xba^\xb4N\xc5\xc5\xe5\xdb\xa7G\xcf\x9e\xf2+\xe7\xa7\x31\xa3Gi\xed\x9a\xd5zn\xf6,\x9d:uZ\x83\x87\xdc_\n\x11\x3p\x14\xf2\x1f\x30&f\xec\0\0\0\xc0&\x16\x8b\x45\xfb\xf7\xefW\x9f\xd8\xd8<\xaf\x85\x86VQ|B|\xbe\xfd\x42\x42\x42\x35j\xf4\x18\xfd{\xc4\x30}\xfd\x9f\xed\x92\xa4\x65\x1f\xaePHHH\x81\xc7j\x18\x93\xff\xd5\xfc}\a\xe\xda\x1f\x38\x80\x62#\xff\x1\xe3\xa2\xb0\x3\0\0\0\x9b\x98L&\xd5\xaeS[\x89\x89\x89y^KH\x88Whhh\xbe\xfd\xd6}\xbaVo\xbe\xbePo\xbd\xfd\xae\x1a\x35n\xa2\x1d?|\xaf\xd1\xa3\x46\xea\xae\xdew\xeb\xb1\xc7\xc7\xe4\xfb\x34\x1d\x6p\x80\xb1\x90\xff\x80qQ\xd8\x1\0\0\x80\xcd\xa2\xa3\xeb\xe9\xc8\x91#\xb9\xda\xd2\xd2\xd2t\xf8\xd0\x61\x85\x85\x85\xe7\xd9\xdel6k\xf6\xac\x99\x9a\x38i\xb2Z\xb6j-){\xfd\x8c\x80\x80\0=0l\xa8z\xf4\xec\xa5\xdau\xea\xe4\xe9\xc7\xe2\xa9\x80\xf1\x90\xff\x80\x31\xb1\xc6\xe\0\0\0lvg\x87\x8eZ\xb7v\xad\xce\x9e\x39\x63m\xfbi\xf7.IR\xf3\x16\x37Y\xdb\x92\x93\x93%e\xf\xecRRR\x94\x94\x94\x94k?U\xaaT\x95$e\x98\x33\xf2=N\xc7N\x9d\xad\x1f\0\x8c\x81\xfc\a\x8c\x89\x19;\0\0\0\xb0Y\xeb\xd6m\xd4\xb4Y3\x8d\x1b;F\x83\x87\fUrr\xb2^xn\xb6\x9e\x18\x37^AAA\x92\xa4\r\xeb\xbf\xd0\x93\xe3\x9e\xd0\a\xcbW\xaaq\x93&z\xe8\x91G\xf4\xe2\v\xcf)##C\xd1\xd1\xd1JII\xd5\xf2\xf\x97\xa9\xfd\x1d\x1dT\xa7N]'\x7fG\0lE\xfe\x3\xc6\x44\x61\a\0\0\0\x36\xf3\xf1\xf5\xd5\xdcy\v\xb4\x64\xc9\xbb\x9a?\xefU\x85\x87W\xd3\xc4I\x93s]Y\xf\t\tU\xe3&\xd7+00P\x92\x34l\xf8\b\xd5\xaau\x9d>]\xbb\x46\xef,zK\xd7\xd5\xae\xad;\xee\xec\xa0^w\xf5\x96\x97W\xfe\x7f\x8er+\x6`<\xe4?`L\xa6?\xf\x9f\xb4T\xaf\x96\xbd\xd0\xd5\xf1\xffo\xef\xce\xe3\xa2\xae\xf6?\x8e\xbf\xc7\x81\x1\x44@TL\xd9*MD\xb1[7\xcdV\x97J\xc1][\xd4Js\xcf\xee\xad,o\xb7\xac\xcc\xdc[\xbduK\xcd%7Ro.\xa9\x98\x9aK\xb9\x95\x65\xe5R\xda\xbdi\xb9\xfd\x32\xaf\xa0\xa0\x80\xb2\xcb\xc8\xfc\xfe \xe6\x32\x1\xc2\xc0\0_\x9a\xd7\xf3\xf1\xe0\xd1p\xe6{f>\x8e~\xbe\xdf\xce\xe7{\xce\x99\xf8$E4)\xba\x36\x12\x80t\xe4\x44\x82\n\xe7J\xc1\xe3\x92\x14>\x86\xdc\x2\0\xb8ZE\xaeKi\x19\xe9W<\xb6\xba\x45\x45\x36\x63\xf3T\xa0\x14~\xbeu$\x91\xff\x80\xbb*|\xe`\x8f\x1d\0\0\0\0\0\x80\x1a\x8a\xa5X\0\0\0\x30\x1c\x96\x62\0\xee\x8b\xfc\a\x9c\x43\x61\a\0\0\0\x86\xc3`\xep_\xe4?\xe0\x1c\n;\0\0\0\x30\x1c\xee\xd8\x3\xee\x8b\xfc\a\x9c\x43\x61\a\0\0\0\x86\xc3`\xep_\xe4?\xe0\x1c\x36O\x6\0\0\0\0\0\xa8\xa1\x98\xb1\x3\0\0\0\xc3\x99\x35s\x86\xc3\xef\x8f?9\xaa\x9a\"\x1P\xd5\xc8\x7f\xc0\x39\x14v\0\0\0`8\f\xe4\0\xf7\x45\xfe\x3\xce\xa1\xb0\x3\0\0\0\xc3\x61\xf3T\xc0}\x91\xff\x80s(\xec\0\0\0\xc0p\x18\xcc\x1\xee\x8b\xfc\a\x9c\xc3\xe6\xc9\0\0\0\0\0\0\x35\x14\x33v\0\0\0`8,\xc5\0\xdc\x17\xf9\xf\x38\x87\xc2\xe\0\0\0\f\x87\xc1\x1c\xe0\xbe\xc8\x7f\xc0\x39\x14v\0\0\0`8\xdc\xb1\a\xdc\x17\xf9\xf\x38\x87\xc2\xe\0\0\0\x9c\x92\x9d\x9d\xad\xf\x97.\xd1\xd6\xad\x9f\xca\xcf\xcf_\xdd{\xf4T\xcf^\xbd\x65\x32\x99\xae\xd8\xef\xf3\x9d;\xb5u\xeb\xa7\xfa\xf6\xeb\xaf\x15\x1c\x12\xa2N\x9d\xa3u\xff\x3}\xe5\xe3\xe3S\xe4X\x6s\x80\x31\x91\xff\x80\xf1P\xd8\x1\0\0@\x99Y\xadV\xbd\xf8\xfcsJOO\xd3\x88G\x1fSrr\xb2\xa6L\x9a\xa0\x94\x94\x14\r\x1e\x32\xb4\xc4~\xb3g\xbd\xa7U+\x97k\xc4\xc8\xc7\xd4\xb9s\xb4\xd2\xd2\xd2\xf4\xdd\xfe\xfd\xb2X,U\x18=\x80\x8a \xff\x1\x63\xa2\xb0\x3\0\0\x80\x32\xdb\xb3\xe7[}\xb9\xeb\vm\xd9\xba\x43\xf5\xea\xd5\x93$\x5\x4\x4\xe8\x85\x31\xcf\xaaG\xcf^\xaa_\xbf~\x91>\x87\xf\x1d\xd2\xdc\xd9\xb3\xf4\xc9\xe6-\n\t\t\xb5\xb7w\xef\xd1\xb3\xc4\xf7\x61)\x6`<\xe4?`L\x14v\0\0\0Pf\x9b\x37mT\xef>\xf7\xda\au\x92t\xfb\x1dw\xea\xf2\xe5<\xed\xdb\xbb\xa7\xd8\x41X\\\xdcj=4`\x80\xc3\xa0\xae\x34\f\xe6\0\xe3!\xff\x1\x63\xa2\xb0\x3\0\0\x80\x32;\xfa\xf3\xcf\xea\xda\xbd\x87\x43\x9b\xaf\xaf\xaf\"\x9aG\xe8LBB\xb1}\xe\xfd\xf8\xa3z\xf4\xec\xa5\r\xeb\xd7i\xe5\xf2\x65JNIV\xd7\xae\xdd\x35h\xc8P\xf9\xf9\xf9\x15\xdb'*\xb2Y\xb1\xed?\xfet\xb4\x62\x7f\0\0\xe5\x46\xfe\x3\xc6\x44\x61\a\0\0\0\x65\x62\xb3\xd9t\xf8\xf0\x61=\xd0\xaf_\x91\xe7\x82\x82\x1a*9%\xb9H{^^\x9e~8x@\xdf\x7f\xb7_}\xfb=\xa8\xe1\x8f\x8eT^^\x9e\xe6\xcc\x9e\xa5S\xa7~\xd5koL+v\xd3U\x6p\x80\xb1\x90\xff\x80qQ\xd8\x1\0\0@\x99\x98L&5i\xda\x44iiiE\x9eKIIVPPP\x91\xf6Z\xb5j)\xa0n]%\x9f?\xaf\t\x93&\xdb\aqA\r\x1b\xaa\xff\x3\xf7\xe9\xc9QO+4,\xac\xd2\x63\aP1\xe4?`\\\x14v\0\0\0Pf\x11\x11\xcdu\xe2\xc4\t\x87\xb6\x9c\x9c\x1c\x1d?v\\\x8d\x1a\x35.\xb6\xcf\x8d\x37\xfeY\xf5\xea\xd5w\xb8\x33\x7f\xd5U\x8d$I\xa9\xa9\xa9\xc5\xe\xec\xd8<\x15\x30\x1e\xf2\x1f\x30\xa6Z\xd5\x1d\0\0\0\0j\x8e\xce\xd1\x31Z\xb7v\xad\x92\x12\x13\xedm\xfb\xf7\xed\x95$\xdd\xdc\xf6\x16I\xf9\xcb/\xb2\xb2\xb2\xec\xcfG\xc7t\xd1\xce\x1d\xdb\x1d\xee\xf4\xfft\xf8\xb0$\xa9qpp\xb1\xef\x13\xd3\xa5\xab\xfd\a\x80\x31\x90\xff\x80\x31\x31\x63\a\0\0\0\x65\xd6\xae]{\xb5n\xd3\x46\xcf=\xfb\x8c\x6\xf\x19\xaa\xcc\xccL\xbd\xf9\xfak\xfa\xfbsc\x14\x10\x10 Iz\xfd\xd5\xa9\xda\xb6\xf5\x33\xc5\xad\xfb\x44\xfe\xfe\xfe\xba\xfb\x9eNZ\xba\x64\xb1\x9e\xfb\xfb\xdf\xd4\xb7_\x7fI\xd2\xdc\x39\xb3\x34\xfa\x99g\x8b\xfdzd\x89;\xf6\x80\x11\x91\xff\x80\x31Q\xd8\x1\0\0@\x99Y\xbc\xbc\xf4\xee\xf4\x99\x8a\x8d]\xa8\x19\xd3\xdfQ\xe3\xc6\xc1\x1a;\xee\x65\x87\xc1W\xf8\xd5\xd7(\xb2\x45KY,\x16I\xf9\xdf\x9a\x33\xe7\xfd\xf9Z\xb8`\x9e\xde\xfd\xe7\xdb\nj\xd8P\x3\x1f\x19\xac\xee=z\x96\xf8>\f\xe6\0\xe3!\xff\x1\x63\x32\xfd|<\xde\x16\x16\x9c\xbf\xd1\xd5\xa9\xf8$E4)~m$\xe0\xee\x8e\x9cHP\xe1\\)x\\\x92\xc2\xc7\x90[\0\0W\xab\xc8u)-#\xbd\xd2\xe3\xab\x88\xa8\xc8\x66|+\xeP\n?\xdf:\x92\xc8\x7f\xc0]\x15>\a0c\a\0\0\0\x86\xc3R\f\xc0}\x91\xff\x80s(\xec\0\0\0\xc0p\x18\xcc\x1\xee\x8b\xfc\a\x9c\x43\x61\a\0\0\0\x86\xc3\x1d{\xc0}\x91\xff\x80s(\xec\0\0\0\xc0p\x18\xcc\x1\xee\x8b\xfc\a\x9cS\xab\xba\x3\0\0\0\0\0\0@\xf9\x30\x63\a\0\0\0\x86\x33k\xe6\f\x87\xdf\x1f\x7frT5E\x2\xa0\xaa\x91\xff\x80s(\xec\0\0\0\xc0p\x18\xc8\x1\xee\x8b\xfc\a\x9c\xc3R,\0\0\0\0\0\x80\x1a\x8a\x19;\0\0\0\x30\x1c\xbe\x15\ap_\xe4?\xe0\x1c\n;\0\0\0\x30\x1c\x6s\x80\xfb\"\xff\x1\xe7P\xd8\x1\0\0\x80\xe1p\xc7\x1ep_\xe4?\xe0\x1c\n;\0\0\0\x30\x1c\x6s\x80\xfb\"\xff\x1\xe7\xb0y2\0\0\0\0\0@\r\xc5\x8c\x1d\0\0\0\x38\xe5\xec\xd9\x33\xfa`\xd1\"}\xb9\xeb\v\xb5\x8c\x8aR\xbf\xfe\xf\xe9\xa6\xd6\xad\xcb\xd4\xd7j\xb5\xea\xe9QO(//O\xb3\xe7\xce+\xf1\x38\x96\x62\0\xc6\x44\xfe\x3\xc6\xc3\x8c\x1d\0\0\0\x94Ybb\xa2\x86\xf\x1d\xac\xec\xecl=;\xe6y\x85\x84\x86j\xc8\xa0\x1\xda\xbfoo\x99\xfa\xaf\\\xb1\\;wl/\xf5\xb8\x98.]\xed?\0\x8c\x81\xfc\a\x8c\x89\x19;\0\0\0(\xb3\xb8\x35\xab\x14\x1e~\xb5^zy\xbc\xcc\x66\xb3\xdaw\xe8\xa8\x9c\xec\x1c\xcdzo\xa6\xe6/\x8c\x95\xc9\x64*\xb1\xefO\x87\xf\xeb\xbd\x99\xd3\xd5\xabw\x1f\xa5\xa6\xa6^\xf1}\xb8\x63\xf\x18\xf\xf9\xf\x18\x13\x33v\0\0\0P&V\xabU\v\xe7\xcfW\x8f\x9e\xbd\x64\x36\x9b\xed\xed\xd1\x31]\xf4\xcd\xd7\xbb\xf5\xeb\xc9\x93%\xf6\xcd\xc8\xc8\xd0\x84\xf1\xe3\x34~\xc2$EF\xb6(\xf5\xbd\xb8\x63\xf\x18\v\xf9\xf\x18\x17\x85\x1d\0\0\0\x94Ijj\x8a\xd2\xd3\xd3\xd4\xa8Qc\x87\xf6\xc6\x8d\xf3\x7f?w.\xa9\xc4\xbe\xef\xcf\x9d\xad\x66\x11\x11\x8a\x8e\xe9R\xa9\x31\x2\xa8\x1c\xe4?`\\,\xc5\x2\0\0@\x99\x14,\x9f\xf0\xf1\xf1qh\xaf\xed[[\x92t\xf1\xe2\xc5\x62\xfb\xed\xde\xfd\x95\x36\xac\xfbX+W\xc7]q\xa9\x46\x61Q\x91\xcd\x8am\xff\xf1\xa7\xa3\x65\r\x17\x80\v\x91\xff\x80qQ\xd8\x1\0\0@\x99\xf8\xf9\xf9I\x92\x32\x32\x33\x1c\xda\xb3\xb2\xb2%Iu\x3\x3\x8b\xf4\x39\x7f\xfe\x9c\xc6\x8f\x1b\xab\xc9S_U\xfd\xfa\r$I6\xd9J}/\x6p\x80\xb1\x90\xff\x80qQ\xd8\x1\0\0@\x99\x4\x6\xd6\x93\xd9lV\xfc\xe9\xd3R\x9b\x9b\xed\xedII\x89\x92\xa4\xa0\x6\x41\x45\xfa,\x98\x37O\t\xf1\xf1\x1a\x39\x62X\x91\xe7\xa2\"\x9b\xe9\x91\xc1\x43\xf4\xc2\x8b/\x15y\x8e\xcdS\x1\x63!\xff\x1\xe3\xa2\xb0\x3\0\0\x80\x32\xb1X,\x1a\x86\xdc\x2\0\xb8ZE\xaeKi\x19\xe9\x95\x1e_EDE6c\xf3T\xa0\x14~\xbeu$\x91\xff\x80\xbb*|\xe`)\x16\0\0\0\f\x87\xcdS\x1\xf7\x45\xfe\x3\xce\xa1\xb0\x3\0\0\0\xc3\x61\x30\a\xb8/\xf2\x1fp\xe{\xec\0\0\0\0\0\0\xd4P\xcc\xd8\x1\0\0\x80\xe1\xb0\x14\x3p_\xe4?\xe0\x1c\n;\0\0\0\x30\x1c\x6s\x80\xfb\"\xff\x1\xe7P\xd8\x1\0\0\x80\xe1\xcc\x9a\x39\xc3\xe1\xf7\xc7\x9f\x1cUM\x91\0\xa8j\xe4?\xe0\x1c\n;\0\0\0\x30\x1c\x6r\x80\xfb\"\xff\x1\xe7\xb0y2\0\0\0\0\0@\r\xc5\x8c\x1d\0\0\0\x18\xe\x9b\xa7\x2\xee\x8b\xfc\a\x9c\x43\x61\a\0\0\0\x86\xc3`\xep_\xe4?\xe0\x1c\n;\0\0\0\x30\x1c\xee\xd8\x3\xee\x8b\xfc\a\x9c\x43\x61\a\0\0\0\x86\xc3`\xep_\xe4?\xe0\x1c\x36O\x6\0\0\0\0\0\xa8\xa1\x98\xb1\x3\0\0\0\xa7\x9d={F\x1f,Z\xa4/w}\xa1\x96QQ\xea\xd7\xff!\xdd\xd4\xbau\xb1\xc7\xdal6}\xb9k\x97>\xfdt\xb3\xf6~\xfb\x8d\x42\x42\xc3t\xef}\xf7\xabk\xb7\xee\x32\x9b\xcd\xc5\xf6\x61)\x6`\\\xe4?`,\xcc\xd8\x1\0\0\x80S\x12\x13\x13\x35|\xe8`egg\xeb\xd9\x31\xcf+$4TC\x6\r\xd0\xfe}{\x8b=\xfe\xd3-\x9b\xf5\xc6\xeb\xaf\xa8U\xab\xeb\xf5\xdc\xf3/\xaay\xf3H=\xff\xdc\xdf\xf5\xf1\xda\xb8\x12\xdf#\xa6KW\xfb\xf\0\xe3 \xff\x1\xe3\x61\xc6\xe\0\0\0\x9c\x12\xb7\x66\x95\xc2\xc3\xaf\xd6K/\x8f\x97\xd9lV\xfb\xe\x1d\x95\x93\x9d\xa3Y\xef\xcd\xd4\xfc\x85\xb1\x32\x99L\xe\xc7\xdfv\xfb\x1dj\xd7\xbe\x83j\xd7\xae-I\xba\xa7SgyZ<\xb5\x62\xf9\x32\xddw\xff\x3\xd5\xf1G\0PN\xe4?`<\xcc\xd8\x1\0\0@\x99Y\xadV-\x9c?_=z\xf6rXF\x11\x1d\xd3\x45\xdf|\xbd[\xbf\x9e }\xb4\x38\x36V6\x9b\xad\xc4\xbe\x46]\x8a\x1\xa0l\xc8\x7f\xa0jP\xd8\x1\0\0@\xa5)Xn\x11\x14\x14\xe4\xd0\x1e\x16\x16\xaes\xe7\x92\x94\x96\x96V\x1d\x61\x1\xa8\x2\xe4?P5\xf8V,\0\0\0T\x9a\xe4\xe4\xf3\x92$/oo\x87v\xdf:u$I\xe9\xe9i\xf2\xf7\xf7/\xb6oq\x1b\x46\xfe\xf8\xd3Q\x17G\b\xa0\xb2\x90\xff@\xd5\xa0\xb0\x3\0\0\x80J\x13\x10\x10 I\xca\xca\xca\x92\xa7\xa7\xa7\xbd=+3\xd3\xe1\xf9\xb2*\xef\xb7\x97\xbc\x37sz\xb9\xfa\xb9:\x8e\xe2\x10[\xf9\xb8Sl5\x15\xf9_:#\xc7&\xb9\x36>b\xab<\x14v\0\0\0Pi\x82\x82\x1aJ\x92\xce\x9e\x39\xe3pg>!!A!!\xa1\xf2\xf5\xadS\xa4\xfw\xe5\x81?\x6\xf2\x1f\xa8\x1a\xec\xb1\x3\0\0\x80J\xd3,\"B\x91-Zj\xeb\xd6\xcf\xecmV\xabU\x1b?\xd9\xa0\x41\x43\x86T_`\0*\x1d\xf9\xfT\rf\xec\0\0\0\xa0\xd2xxxh\xf4\xdf\x9e\xd1_F\x8e\x90\xa7\xa7\x87Z\xb4\x88\xd2\xb6\xad\x9f\xe9\xfc\xf9\xf3\xea\xd6\xbdgu\x87\a\xa0\x12\x91\xff@\xd5`\xc6\xe\0\0\0*U\xbb\xf6\x1d\xb4`\xd1\a\xfa\xe9\xf0\x61\xbd\xf6\xea\x14\xf9\xf8\xf8h\xde\x82\x45\xaaW\xaf^u\x87\x6\xa0\x92\x91\xff@\xe5\x63\xc6\xe\0\0\0*\xdd\xad\xb7\xdd\xae[o\xbb\xbd\xba\xc3(\x95\xcd\x66\xd3\xa6M\x1b\xb5q\xc3z\x9d=sF\x9d\xa2\xa3\x35h\xf0P\xf9\xf8\xf8\x14{\xfc\xf9\xf3\xe7\xb5\xea\xa3\x15\xda\xf3\xed\xb7:\xfd\xdfSj\xd7\xbe\x83\x86\f\x1b\xae\x90\x90P\x97\xc7v\xf6\xec\x19}\xb0h\x91\xbe\xdc\xf5\x85ZFE\xa9_\xff\x87tS\xeb\xd6\x65\xeak\xb5Z\xf5\xf4\xa8'\x94\x97\x97\xa7\xd9s\xe7\x19\"\xb6\xdc\xdc\\\xc5\xadY\xa5\xafw\xef\xd6\xf\a\xf\xa8\x65T+\xf5\xe8\xd9K1]\xbaVklyyy\xfat\xcb\x66\xadY\xbdJ\xc7\x8f\x1d\xd5M\xad\xdbh\xe0\xa0\xc1\xba\xe1\x86\x1b]\x1a\x97;\xf9\xa3\xe6\x7fNN\x8e\x36\xac\xffX_\xee\xda\xa5\x1f\xe\x1e\xd0\r7\xfeY\x8f\f\x1a\xac?\xdfT\xb6\xbctFvv\xb6>\\\xba\x44[\xb7~*??\x7fu\xef\xd1S={\xf5\x96\xc9\x64*S\xff\x5\xf3\xdf\xd7\xdb\xff\x98\xa6o\xf7~\xa7:~~.\x8d\xcd\xd9\xcf\xad@rr\xb2V,\xfbP{\xf7\xeeQ\xfc\xe9\xff\xaa\xed\xad\xb7\xa9_\xbf\a\xd5\xea\xfa\xeb]\x1a\xdf\xc1\x83\a\xb4r\xc5r\x1d\xf8\xee;\xdd\xd1\xae\x9d\x86\xe\x1d\xae\xc6\xc1\xc1%\x1e\x9f\x91\x91\xae\x15\xcb\x97k\xebg[t!\xf5\x82\xdaw\xec\xa8G\x6\rVpp\x88K\xe3r%f\xec\0\0\0\0\xbfY\xb2\xf8\x3M{\xfd\x35\xc5t\xe9\xaaG\x1f\xfb\x8b\xb6o\xdb\xa6\xe7\x9f{V\x97/_.r\xac\xd5j\xd5\xc0\x87\xfb\xeb\\R\x92\x1e|\xe8\x61\r\x1b\x31R\x87\xe\x1d\xd2_G>\xaa\x8b\x17/\xba\x34\xae\xc4\xc4\x44\r\x1f:X\xd9\xd9\xd9zv\xcc\xf3\n\t\r\xd5\x90\x41\x3\xb4\x7f\xdf\xde\x32\xf5_\xb9\x62\xb9v\xee\xd8\xee\xd2\x98*\x12[ff\xa6\x9e\x19\xfd\x94\x36m\xdc\xa8\xe\x1d\xef\xd2\xc4\xc9\xaf\xa8]\xfb\xe:\x93\x90P\xed\xb1\xad^\xf5\x91\xa6\xbd\xf1\x9a\xbat\xed\xa6\xf1\x13\xa7(\xb0^==\xf2\xf0\x83\xfa\xf9\xe7\x9f\\\x1a\x1b\x8c\xc7\x99\xfc\x97\xa4\xb7\xdf\x9a\xa6\xad\x9f}\xa6\xbb\xee\xbeG\xcf\x8eyA&\x93I\x3\x1f~P\x87\xf\x1fri\\V\xabU/>\xff\x9c\xbe\xfe\xfa+\x8dx\xf4\x31u\x8e\x8e\xd1\x94I\x13\xb4\xf8\x83\xd8\x32\xf5?x\xf0\x80\xde\xfe\xc7\x34\x97\xc6T\x98\xb3\x9f\x9b$\x9d \xa4\xf8\x84x\xf5\xeb\xff\xa0^|\xe9\x65\x85\x87\x87+%%\xc5\xa5\xb1\xed\xdf\xb7W\x83\a\xeP\xd3\xa6\xd7i\xcc\vcu!5U\xc3\x86\xeRbbb\xb1\xc7\xdbl6M\x99\x34Q_}\xb9KC\x87\x8d\xd0\xa8\xa7G\xeb\xd4\xaf\xbf\xea\xaf\x8f=\xaa\xf4\xb4\x34\x97\xc6\xe6J\xcc\xd8\x1\0\0\0$\x9d;\x97\xa4\xb7\xff\x31M\xef/X\xa8\xb6mo\x91$\xb5h\xd9R]:\xdf\xa3\xfd\xfb\xf6\xaa\xed-\xb7:\x1c\xef\xe1\xe1\xa1\x85\xb1K\xd4\xb8qc{\xdb\x9d\xed\xda\xa9\xf3\xdd\x1d\xf5\xef\x1f\xe\xea\x8e;\xdb\xb9,\xb6\xb8\x35\xab\x14\x1e~\xb5^zy\xbc\xcc\x66\xb3\xdaw\xe8\xa8\x9c\xec\x1c\xcdzo\xa6\xe6/\x8c\xbd\xe2]\xfb\x9f\xe\x1f\xd6{3\xa7\xabW\xef>JMMuYL\x15\x89m\xd3\xc6\rJOO\xd7\xac\x39\xef\x97zW\xbf\xaa\x63[\xf6\xe1R\r\x1c\x34\x44\xf7\xdd\xff\x80$\xa9}\x87\xe:\xf4\xe3\x8f\xfa\xf6\x9bo\xd4\xbcyd\xa5\xc5\x8a\xea\xe5l\xfeK\xd2\xf0\x11#U\xbf~}\x99\xcd\x66IRtL\x17\xfdz\xf2\xa4vn\xdf\xae\x16-Z\xba,\xb6={\xbe\xd5\x97\xbb\xbe\xd0\x96\xad;\xecK\xd8\x2\x2\x2\xf4\xc2\x98g\xd5\xa3g/\xd5\xaf_\xbf\xc4\xbe\x17/^\xd4\xf8qc\xf5@\xdf\xfeZ\xf5\xd1\n\x97\xc5T\xa0<\x9f\x9b$\xcd\x99\x35S\xd1\xd1]4\xea\xe9\xd1\xf6<\xec\xd0\xf1.\x97\xc6\x96\x97\x97\xa7\x19\xd3\xdf\xd5SO\x8f\xd6\xb0\xe1#$I\xb7\xdcz\xab\x86\xe\x1a\xa8\xf5\xeb\xd6j\xf8\x88\x91\x45\xfa$&\x9e\xd5\xfau\x1f\xeb\x83%\xffR\x9b\x9b\xdbJ\x92nn\xdbV\xed\xef\xb8MG\x8e\x1c)\xf3,\xc9\xaa\xc6\x8c\x1d\0\0\0@\xd2\xee\xaf\xbeR\xfd\xfa\xf5tS\xa1\x65\x14\x61\x61\xe1\xea\x14\x1d\xa3m\xdb\xb6\x16\xdb\xa7pQG\x92\xea\xd6\r\x94$]\xba\x94\xeb\xb2\xb8\xacV\xab\x16\xce\x9f\xaf\x1e={\xd9\a\x90R\xfe \xf2\x9b\xafw\xeb\xd7\x93'K\xec\x9b\x91\x91\xa1\t\xe3\xc7i\xfc\x84I\x8a\x8cl\xe1\xb2\x98*\x12[^^\x9e\x66N\x9f\xae\x87\x1e\x1eP\xa9\x45\x9d\xf2~n\x81\x81\xf5\xf4\xdfS\xa7\x64\xb3\xd9$\xe5/\x19KMMQH\x88q\x97\x61\xa0\xe2\xca\x93\xff\r\x1b\x36t\xf8\xb7\x65\x36\x9b\xd5\xa8qc\xe5\xe4\xe4\xb8\x34\xb6\xcd\x9b\x36\xaaw\x9f{\x1d\xf6%\xba\xfd\x8e;u\xf9r\x9e\xf6\xed\xddSb?\x9b\xcd\xa6\x99\x33\xde\xd5m\xb7\xdf\xa1\x9e\xbd{\xbb\x34\xa6\x2\xe5\xf9\xdc~\xf9\xe5\xff\xb4\xee\xe3\xb5\xeas\xdf}e^JV\x1e\xc7\x8f\x1d\xd3\xde=\xdf\xea\xae\xbb\xef\xb1\xb7y{{\xabW\x9f>Z\x1c\x1bk\xcf\xf1\xc2\xbc\xbd\xbd%Ig\xce\x9c\xb1\xb7\xa5]\xcc\x9f\xa9\xd3\xf0\xaa\xab*-\xd6\x8a\x62\xc6\xe\0\0\0 \xe9\xf4\xe9\xd3\x8ah\x1e)\xf\xf\xc7\xff\x45n\x1e\xd1\\\a\xf\x1e(\xd3k\x1c;vT\x92\x14\xd1<\xc2\x65q\xa5\xa6\xa6(==M\x8d\x1a\x39\x16\x91\n\x8aJ\xe7\xce%\xe9\xeak\xae)\xb6\xef\xfbsg\xabYD\x84\xa2\x63\xbahq\xec\"\x97\xc5T\x91\xd8RRR\x94\x98xV\xfe\xfe\xfe\x9a\x37w\x8e\x36lX'??\x7f\xdd\xff@_\xf5\xea\xdd\xc7\x61\xa0\\\xd5\xb1I\xd2\xa8\xa7\x46\xeb\x89\xc7\x1f\x93\x87\xa7\x87\x9a\x37\x8f\xd4\xce\x1d;\xd4\xa9S\xb4\xcbg\x13\xc0X\\\x91\xff\x19\x19\xe9\xfa\xe6\xeb\xdd\xba\xf7\xbe\xfb]\x1a\xdb\xd1\x9f\x7fV\xd7\xee=\x1c\xda|}}\x15\xd1<\xe2\x8a\xcb\x17w\xee\xd8\xaeov\xef\xd6\xd2\x65+t\xf4\xc8\xcf.\x8d\xa9@y>\xb7\x84\xf8\xfc\x98\xad\xb9VM\x9d \xf5\xfb\xd9-\xb5}kKR\x89\xfb\xf9\xec\xde\xfd\x95\x36\xac\xfbX+W\xc7U\xda]\xf1\xf2\xc4\x96|\xfe\xbc$i\xf8\xd0\xc1z\xf2\xa9\xd1zq\xec\x38%$$\xe8\xcd\xd7_\x93\xd5jU\xdf~\xfd\xab-6Iju\xfd\xf5\x1a>b\xa4\xde\x9a\xf6\x86\xbd\xed\x85m;\x8b\f\\\xf1\xc7R\xd1\xfc\x97\xa4\x15\xcb\x97\xabYD\x84\xda\xb5\xef\xe0\xb2\xb8l6\x9b\xe\x1f>\xac\a\xfa\xf5+\xf2\\PPC%\xa7$\x17\xdb\xef\xcc\x99\x33\x1a\xff\xf2Kzw\xfa{E\x8a\x17\xaeT\x9e\xcf-))\xbf\xe0\x32\x65\xf2\x44\x45\xc7\xc4(\xbaKW\xed\xdf\xb7OC\x6\r\xd0\xcaUq\x8aj\xd5\xca%\xb1%'\xe7\x9fk\xbc~\x9b\x85S\xc0\xb7N\x1dIRzz\xd1\xc2\x8e$u\xed\xd6]_}\xf9\xa5^\x7fu\xaa$\xe9\xde\xfb\x1fP{\x17\xfe\x9dV\x6\xceN\0\0\0\x80\xa4\xfa\r\xea\xeb\xdf?\xfcP\xa4===]\xd7\\{m\xa9\xfd\x63\x17-\xd0\xc5\x8b\x17\x35|\xc4\xa3.\x8d\xcb\xef\xb7o\xb0\xc9\xc8\xccph\xcf\xca\xca\x96$\xd5\r\f,\xd2\xe7\xfc\xf9s\x1a?n\xac&O}U\xf5\xeb\x37\x90$\xd9Tt\xd9\x41u\xc4\xe6S;\xbf\xb0\xd2\xa3g/\xfd\xf5\xf1'\xec\xed\xb9\xb9\x97\x34o\xee\x1c=\xd0\xb7\x9fK\nQ\xe5\x89\xcd\x66\xb3\xe9\xd5\xa9St\xee\xdc\x39}\xb4:N\r\xaf\xbaJ\xeb>\xfeX\xdd\xba\x44\xeb\xad\x7f\xbe\xa3{:u\xaep\\0\xa6\x8a\xe6\xff\x9eo\xbf\xd1\xdc\xd9\xb3\xf4\xe1\xf2\x95\xf2\xf4\xf4tY\\&\x93IM\x9a\x36QZ1\x1b\xf7\xa6\xa4$\x17\x99\x8d\"\xe5\x17\x99\xdfx\xed\x15=\xfc\xf0@\xfb\x9e\x30\xae\xcf\xfe|\xe5\xf9\xdc|}}%I\xcf\x8dy^-\xa3\xf2\x8b\x38m\xdb\xde\xa2\xe3\xc7\x8ej\xd3\xc6O\\V\xd8)(8eee9\xfc\x9d\x64\x65\x66:<_XZZ\x9a\x86\xf\x19\xa4\xdb\xef\xbcS\x9fn\xdb\xa1\x9c\xec\x1c\x91\xf3\xcb\x9b\0\0\b\x8bIDAT\xc5\xc6.T\x9f\xde=4o\xfe\"]\xdb\xa4\x89Kbs5\xf6\xd8\x1\0\0\0$\x5\a\a\xeb\xf0\xe1\x43\xbat\xe9\x92\x43\xfb\xc9_~\xd1\xb5\xd7^\xf9\x7f\xe6\x37~\xb2\x41\x1f.]\xa2\x37\xa7\xbd\xe5\xf2\xaf\x12\xe\f\xac'\xb3\xd9\xac\xf8\xd3\xa7\x1d\xda\v\xeez\a5(:\xb0[0o\x9e\x12\xe2\xe3\x35r\xc4\x30\x45\x45\x36STd3M{\xe3u}\xf1\xf9NEE6\xd3\xeb\xaf\xbdRm\xb1\x15\xec\x13\xd2\xf1\xae\xbb\x1d\xda\x43\x42\x42u\xfa\xf4\x7f]\xb6?Iyb;v\xf4\xa8V,\xffPO\x8d\x1e\xad\x96Q\xad\xd4\xa0\x41\x90\x86\r\x1f\xa1\xbf<\xfe\xb8&Nx\xf9\x8a\xdf\xf2\x83\x9a\xad\"\xf9\x7f\xf4\xc8\x11==\xeaI\xbd\xfd\xcet5\xbd\xee:\x97\xc7\x16\x11\xd1\\'N\x9cph\xcb\xc9\xc9\xd1\xf1\x63\xc7\x8b,5\x94\xa4\xed\xdb\xb6\xea\xd3-\x9b\x35s\xc6\xbb\xf6\xfc\x1f<\xf0\x61I\xd2-7\xdf\xa4vw\x14\xbf\xa1qy\x94\xe7sk\xd0 \xbf\xd8\x1cX\xcfq\xd3\xe7\xa6M\xafSBB\xbc\xcb\x62\v\nj()\x7fVQa\t\t\t\n\t\t\x95\xafo\x9d\"}vl\xdf\xa6\xf8\x84x\x8dzj\xb4\x42\x42\x42\xd5\xa4iSM\x98\x38Yaa\xe1Z\xba\x64\xb1\xcb\x62s5\n;\0\0\0\x80\xa4[o\xbb]\xc9\xe7\xcfk\xef\x9e\xffmF\x9a\x94\x94\xa4O6\xac\xd7=\x9d\xff\x37S#\xf3\xb7\xbb\xbd\x5>\xdd\xb2Yo\xbf\x35M\xf3\x16\xc4*\xb8\x12\x36\xd8\xb5X,\x1a1\xc0/\x7f*\xd4\xc5\xb4L\xd5\xft\xed\x1d\x6\xe0\x8f\xe2|J\xba\n\xe7J\xc1\xe3\x92\x14>\x86\xdc\x2\0\xb8ZE\xaeK\x97r/]\xf1Xw\xe5\xef\xef/\x9b\xcd\xa6w\xdfy[\r\x1a\x34PBB\xbc\xde\x9a\xf6\xa6n\xfc\xf3\x9f\x35`\xe0#2\x99L:~\xfc\x98\xba\xc5tR\xdd\xba\x81j\xd5\xeazm\xd9\xbcI\xcf\x8c~JO=\xfd\x37\xf9\xf9\xf9)!!A\t\t\tJJJ\xd2U\x8d\x1a\xb9,\xb6\xb0\xb0\x30-\x98\x37O'O\x9e\x94\xc5\xe2\xa9m[\xb7j\xce\xac\x99\x9a\xf2\xeakj\xd4\xa8\x91\xb2\xb3\xb3\xd5\xbf\xef}\xfan\xff~E\xc7tQ``\xa0\x82\x1a\x36t\xf8IO\xcf\x90\x87\x87\x87\x86\xe\x1b\xa1\x80\x80\xbaU\x16\x9b$\xbd\xf6\xca\x14\xbd\x32\x65\x92\xee\xbd\xef\x1yyy)44Lo\xff\x63\x9a\xce%%\xca\x64\x32i\xef\xde=\x9a\x33{\x96^\x9e\x38I\xa1\xa1\x61\xd5\x16[\xc3\xab\xae\xd2\xe1\x43\x87\xb4\xee\xe3\x38\xf9\xfa\xfa\xea\xc2\x85T}\xff\xfdw\x9a\xf1\xee;\x1a\x36\x62\x84Z\xb7n\xe3\xb2\xd8*\xca\xcb\x62\x91\x44\xfe\xbbJy\xf2\xff\xd8\xd1\xa3\xea\xdd\xb3\x9b:u\x8e\xd6M\xad\xdb\xd8\xf3?!!A\x81\xf5\xea\xb9l_\xa6\xd0\x90P}\xf7\xdd~m\xd9\xb2Y\x1\x1\x1:\xf4\xe3\x8f\x9a >>E\xce\x9d\xf5\x2\xebi\xc3\xfa\xf5:p\xe0{y{{+)1I\xdb\xb7m\xd5\xbc\xb9\xb3\xf5\xe2\xd8q\x95R\xbc/\xaf\xc2\xe7\0\xf6\xd8\x1\0\0p3&\x93\xa9\xd8\xafy\x85\xf4\xf8\x13\xa3\xd4\xa8Qc\xad\x8d[\xa3\xec\xec,u\x8e\xee\xa2\x1\x3\x6\xaaV\xad\xfc\x89\xee\xbe\xbeu\x14\x15\xd5\xca\xbe\xfc\x61\xda\x9b\xafK\x92^\x9d:\xd9\xe1u\x9a\x45\x34\xd7\xdau\x1b\\\x16WXX\xb8\x62\x97\xfcK\x8b\x63\x17i\xea\x94I\xba\xa9u\x1b-^\xba\xcc>\v\xc7\xd3\xd3S\xcd\x9bG\xea\xda&M]\xf6\x9e\xae\x8aM\x92\xc2\xaf\xbe\x46\x91-Z\xca\xf2\xdb@\xe4\xba\x66\xcd\xb4\xe4\xc3\x65Z\xb2\xf8\x3M\x9e\x38\x41\xad\xae\xbf^3g\xcdV\xeb\x36\x37Wkl\x16\x8b\x45oL{KqkVk\xf5\xaa\x95\xfa\xe5\xff~Q\xab\xeb\xaf\xd7s\xcf\xbf\xa0\xbb\xef\xe9\xe4\xd2\xd8*\xa2\"{\x10\x91\xff%s6\xff\xd7\xc6\xad\xb1\xff\xb7\xe0q\x81m;w\xd9\x8b\x87\x15\x65\xf1\xf2\xd2\xbb\xd3g*6v\xa1\x66L\x7fG\x8d\x1b\ak\xec\xb8\x97\x15\xd3\xa5\xab\xfd\x98\x6\r\x82t\xfd\x9fn\xa8\xd4\x8d\x92K\xe2\xec\xe7&I\xdd\xbau\x97\x8f\xb7\xb7\xe2\xd6\xac\xd1\xb2\xf\x97\xea\x8e;\xdbk\xc5\xca\xd5j\xd8\xb0\xa1Kck\xd7\xbe\x83\x16,\xfa@\xab>Z\xa9\xb5qk\xd4\xa1\xc3]\x9a\xb7`\x91}I\xe8\xef\xcf\x9d\x8d\x83\x83\xb5\xe4_\xcb\xb4|\xd9\x87\x9a\xf5\xdeLe\xa4\xa7\xa9\xf5\xcdm\xb5l\xe5*\xfd\xe9O7\xb8\x34\xb6\x8a\xf8\xfd\x39\xc0\xf4\xf3\xf1x[Xp\xfe\xfa\xd2S\xf1I\x8ahRt\x8d\x1e\0\xe9\xc8\x89\x4\x15\xce\x95\x82\xc7%)|\f\xb9\x5\0p\xb5\x8a\\\x97\x32\xb2\x32\x94\x97\xc7\xc0\xe\xa8\xa9j\xd5\x32\xc9\xd7'\x7fV\x3\xf9\xf\xb8\x9f\xdf\x9f\x3\xd8\x63\a\0\0\xc0\xcd\x98k1i\x1b\xa8\xc9*\x92\xc3\xe4?P\xf3\xfd>\x8f)\xec\0\0\0\xb8\x19\xb3\x87\xb9\xba\x43\0P\x1\x15\xc9\x61\xf2\x1f\xa8\xf9~\x9f\xc7\x14v\0\0\0\xdc\x8cG-\xf\xd5\xaa\xc0\x1e\x1d\0\xaaO-\x93I\x1e\xe6\xf2\xcf\xba!\xff\x81\x9a\xad\xb8s\0\x85\x1d\0\0\0\x37\x63\x32I^^^\xd5\x1d\x6\x80r\xf0\xf2\xf2RE\xca\x32\xe4?P\xb3\x15w\xep(\xecX,\x9e\xca\xc9\xc9\xad\xc2\x90\x80\x9a!;'W^\x16\xcfr\xf7'\xb7\0\0\xaeT\xd1\xeb\x92$y\x98=d\xf1\xa8\xd8k\0\xa8Z\x16\xf\xcf\n\xcd\xd6)@\xfe\x3\x35SI\xe7\x80Z\x9e\x9e\x1e\xca\xcd\xb5J\x92|\xbc,\xba\x90\x96Y\xd5\xb1\x1\x86\x97\x93\x93+/\xef\xfc\x8b\xdf\xa5\\\xab,\x9e\xa5_P\xc9-\0@e\xa9\xe8u\xa9\x80\x97\x97\x17\x83;\xa0\x86\xb0xx\x16\x99iC\xfe\x3\xee\xe3J\xe7\x80Z\x16O\xf]\xfa-\xc9\xfd\xfdj\xeb\xc2\xc5,\x9dO\xb9(\xeb\xe5\xcb\xd5\x11+`(\xd9\x39\xb9\xba\x90\x96\xa9\xb3\xe7.(\xa0N\xfe\xd7\xc9\xe5^\xb2\xca\xd3R\xfa\x5\x94\xdc\x2\0\xb8\x9a\xab\xaeK\x85yyy\xc9\xc7\xdb\x9b=7\0\x83\xaa\x65\x32\xc9\xc7\xdb\xbb\xd8\xe5S\xe4?\xf0\xc7W\x96s\x80\xe9\\r\xba-\xfb\xd2%\xd5\v\xf0\xb3?\x99\x91\x95\xad\v\x17\x32u9\x8f\x1(\xdc\x9b\x97\xc5S\xde^\x16\xf9\xfb\xd5\xb6\xb7%\xa7\\\x94\x8f\x8f\xb7|\xbc-W\xec\x9b\x99\x95#r\v\0\xe0J\xae\xbe.\x15\x66\x93\x64\xbdl\xd5\x65\xeb\x65]\xce\xb3\xca\x66\x93l6\x9b+\xc3\aP\x6&\x93I&S\xfe\xd7\x19\x9b=\xcc\xf2\x30{\x94\xb8\xa7\xe\xf9\xf\xfc\xf1\x94\xe7\x1c\xe0Q\xdb\xc7K\xe9\x99Y\xca\xcc\xcaVm\x1foI\x92\xaf\x8f\xb7|\x7f{\f\xe0\x7f\x92S\xd3\x64\xcd\xcb+\xf5\xe2)I\xe4\x16\0\xa0\xb2U\xf4\xbaT\x98I\x92\xa7\xd9\x43\x9e\x66\xfIl\xac\n\x18\x1d\xf9\xf\xb8\xb7\xc2\xe7\0\xfI\xaa_\xd7O\xf1g\x93\xf3+C\x92<-\x9e\x32\xd7\xe2\v\xb3\0)\x7f\xdd\x62\xee%\xab\xb2/\xe5*\xef\xf2\x65\x35lP\xb7\xcc}\xc9-\0\x80\xabq]\x2\xdc\x17\xf9\xf\xb8\xb7\x92\xce\x1\xa6\xcc\xac\\\xfb\x1c\xbb\x94\vi\xb2^\xb6)\xf7R\xae.\xe7\xe5U[\xb0\x80\x91X<=\xe4i\xf1\x90\x8f\x97\x45>\xde\xe5\xbb\x83\x41n\x1\0\\\x85\xeb\x12\xe0\xbe\xc8\x7f\xc0\xbd\x95t\xe\xf8\x7f:nq\xb7\x13\x82QF\0\0\0\0IEND\xae\x42`\x82)" +screenshot_at=2026-10-10T20:20:15Z diff --git a/pxii_bec/bec_widgets/profiles/daily_setup.ini b/pxii_bec/bec_widgets/profiles/daily_setup.ini new file mode 100644 index 0000000..57fbe0e --- /dev/null +++ b/pxii_bec/bec_widgets/profiles/daily_setup.ini @@ -0,0 +1,457 @@ +[BECDockArea] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=false +baseSize=@Size(0 0) +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 23 1670 1505) +inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0) +layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0) +maximumSize=@Size(16777215 16777215) +minimumSize=@Size(0 0) +mode=creator +mouseTracking=false +sizeIncrement=@Size(0 0) +sizePolicy=@Variant(\0\0\0K\0\0\0U) +statusTip= +tabletTracking=false +toolTip= +toolTipDuration=-1 +whatsThis= +windowFilePath= +windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0) +windowModified=false +windowOpacity=1 +windowTitle=BEC - TestLayout4 +workspace_is_locked=false + +[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Info.dockWidgetScrollArea.qt_scrollarea_viewport.Info] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=true +baseSize=@Size(0 0) +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 0 816 1426) +html_text="\n\nStarting daily beamline setup
\n\n
✓ Machine current OK (401.8 mA)
\n✓ Beamline is not offline, (operation mode is attended)
\n✓ FE shutter is open
\n✓ Hutch shutter is open
\n\n
✓ SS Xray eye is OUT
\n✓ Cryostream temperature: 99.96 K
\n✓ Detector height: 62.0 mm
\n✓ Beamstop blocking beam: I2 = 8.76e-09
\n\n
✓ Beamline energy set to 12400 eV
\n\n
✓ Beam aligned
\nDisplacement: Beam X: -0.1 microns, Beam Y: -0.3 microns
\n\n
✓ Flux measured
\nIntensity at current transmission: 8.62e+11 ph/s
\nIntensity at 100% transmission: 8.53e+12 ph/s
\n\n
Total duration: 39.7 s
" +inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0) +layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0) +maximumSize=@Size(16777215 16777215) +minimumSize=@Size(640 310) +mouseTracking=false +plain_text="Starting daily beamline setup\n\n✓ Machine current OK (401.8 mA)\n✓ Beamline is not offline, (operation mode is attended)\n✓ FE shutter is open\n✓ Hutch shutter is open\n\n✓ SS Xray eye is OUT\n✓ Cryostream temperature: 99.96 K\n✓ Detector height: 62.0 mm\n✓ Beamstop blocking beam: I2 = 8.76e-09\n\n✓ Beamline energy set to 12400 eV\n\n✓ Beam aligned\nDisplacement: Beam X: -0.1 microns, Beam Y: -0.3 microns\n\n✓ Flux measured\nIntensity at current transmission: 8.62e+11 ph/s\nIntensity at 100% transmission: 8.53e+12 ph/s\n\nTotal duration: 39.7 s" +sizeIncrement=@Size(0 0) +sizePolicy=@Variant(\0\0\0K\0\0\0U) +statusTip= +tabletTracking=false +toolTip= +toolTipDuration=-1 +whatsThis= +windowFilePath= +windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0) +windowModified=false +windowOpacity=1 +windowTitle= + +[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_1.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_1] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=true +auto_range_x=true +auto_range_y=false +baseSize=@Size(0 0) +color_palette=plasma +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +curve_json=[] +enable_fps_monitor=false +enable_popups=true +enable_side_panel=false +enable_toolbar=true +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 0 575 341) +inner_axes=true +inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0) +invert_x=false +invert_y=false +layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0) +legend_label_size=9 +lock_aspect_ratio=false +max_dataset_size_mb=10 +maximumSize=@Size(16777215 16777215) +minimal_crosshair_precision=3 +minimumSize=@Size(384 200) +mouseTracking=false +outer_axes=false +signal_x=dcm_pitch +sizeIncrement=@Size(0 0) +sizePolicy=@Variant(\0\0\0K\0\0\0U) +skip_large_dataset_check=false +skip_large_dataset_warning=false +statusTip= +tabletTracking=false +title=Scan: Current +toolTip= +toolTipDuration=-1 +whatsThis= +windowFilePath= +windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0) +windowModified=false +windowOpacity=1 +windowTitle= +x_grid=false +x_label=dcm_pitch +x_limits=@Variant(\0\0\0\x1a\xc0\x1a\xb0\xb0)(\x17v\xc0\x15\xa0\xc4\x15n&N) +x_log=false +x_mode=dcm_pitch +y_grid=false +y_label=lu_bpmsum +y_limits=@Variant(\0\0\0\x1a\xc0g\xe2\xe0\x3|_\x2@\x9d\xf0\x41\x91k\xed@) +y_log=false + +[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_2.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_2] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=true +auto_range_x=true +auto_range_y=true +baseSize=@Size(0 0) +color_palette=plasma +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +curve_json=[] +enable_fps_monitor=false +enable_popups=true +enable_side_panel=false +enable_toolbar=true +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 0 575 304) +inner_axes=true +inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0) +invert_x=false +invert_y=false +layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0) +legend_label_size=9 +lock_aspect_ratio=false +max_dataset_size_mb=10 +maximumSize=@Size(16777215 16777215) +minimal_crosshair_precision=3 +minimumSize=@Size(384 200) +mouseTracking=false +outer_axes=false +signal_x= +sizeIncrement=@Size(0 0) +sizePolicy=@Variant(\0\0\0K\0\0\0U) +skip_large_dataset_check=false +skip_large_dataset_warning=false +statusTip= +tabletTracking=false +title= +toolTip= +toolTipDuration=-1 +whatsThis= +windowFilePath= +windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0) +windowModified=false +windowOpacity=1 +windowTitle= +x_grid=false +x_label= +x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0) +x_log=false +x_mode=auto +y_grid=false +y_label= +y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0) +y_log=false + +[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_3.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_3] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=true +auto_range_x=true +auto_range_y=true +baseSize=@Size(0 0) +color_palette=plasma +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +curve_json=[] +enable_fps_monitor=false +enable_popups=true +enable_side_panel=false +enable_toolbar=true +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 0 575 358) +inner_axes=true +inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0) +invert_x=false +invert_y=false +layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0) +legend_label_size=9 +lock_aspect_ratio=false +max_dataset_size_mb=10 +maximumSize=@Size(16777215 16777215) +minimal_crosshair_precision=3 +minimumSize=@Size(384 200) +mouseTracking=false +outer_axes=false +signal_x= +sizeIncrement=@Size(0 0) +sizePolicy=@Variant(\0\0\0K\0\0\0U) +skip_large_dataset_check=false +skip_large_dataset_warning=false +statusTip= +tabletTracking=false +title= +toolTip= +toolTipDuration=-1 +whatsThis= +windowFilePath= +windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0) +windowModified=false +windowOpacity=1 +windowTitle= +x_grid=false +x_label= +x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0) +x_log=false +x_mode=auto +y_grid=false +y_label= +y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0) +y_log=false + +[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Plot_4.dockWidgetScrollArea.qt_scrollarea_viewport.Plot_4] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=true +auto_range_x=true +auto_range_y=true +baseSize=@Size(0 0) +color_palette=plasma +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +curve_json=[] +enable_fps_monitor=false +enable_popups=true +enable_side_panel=false +enable_toolbar=true +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 0 575 294) +inner_axes=true +inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0) +invert_x=false +invert_y=false +layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0) +legend_label_size=9 +lock_aspect_ratio=false +max_dataset_size_mb=10 +maximumSize=@Size(16777215 16777215) +minimal_crosshair_precision=3 +minimumSize=@Size(384 200) +mouseTracking=false +outer_axes=false +signal_x= +sizeIncrement=@Size(0 0) +sizePolicy=@Variant(\0\0\0K\0\0\0U) +skip_large_dataset_check=false +skip_large_dataset_warning=false +statusTip= +tabletTracking=false +title= +toolTip= +toolTipDuration=-1 +whatsThis= +windowFilePath= +windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0) +windowModified=false +windowOpacity=1 +windowTitle= +x_grid=false +x_label= +x_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0) +x_log=false +x_mode=auto +y_grid=false +y_label= +y_limits=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf0\0\0\0\0\0\0) +y_log=false + +[BECDockArea.ads%3A%3ACDockManager.ads%3A%3ACDockSplitter.ads%3A%3ACDockSplitter.ads%3A%3ACDockAreaWidget.Progress.dockWidgetScrollArea.qt_scrollarea_viewport.Progress] +acceptDrops=false +accessibleDescription= +accessibleIdentifier= +accessibleName= +autoFillBackground=true +baseSize=@Size(0 0) +contextMenuPolicy=@Variant(\0\0\0\x7f\0\0\0\x16Qt::ContextMenuPolicy\0\0\0\0\x1) +cursor=@Variant(\0\0\0J\0\0) +enabled=true +focusPolicy=@Variant(\0\0\0\x7f\0\0\0\x10Qt::FocusPolicy\0\0\0\0\0) +geometry=@Rect(0 0 256 1416) +html_text="\n\n✓ Pre checks
\n✓ Set energy
\n✓ Move beam
\n– Align beamstop
\n– Align collimator
\n✓ Measure flux
" +inputMethodHints=@Variant(\0\0\0\x7f\0\0\0\x14Qt::InputMethodHint\0\0\0\0\0) +layoutDirection=@Variant(\0\0\0\x7f\0\0\0\x14Qt::LayoutDirection\0\0\0\0\0) +maximumSize=@Size(16777215 16777215) +minimumSize=@Size(256 310) +mouseTracking=false +plain_text=✓ Pre checks\n✓ Set energy\n✓ Move beam\n– Align beamstop\n– Align collimator\n✓ Measure flux +sizeIncrement=@Size(0 0) +sizePolicy=@Variant(\0\0\0K\0\0\0U) +statusTip= +tabletTracking=false +toolTip= +toolTipDuration=-1 +whatsThis= +windowFilePath= +windowModality=@Variant(\0\0\0\x7f\0\0\0\x13Qt::WindowModality\0\0\0\0\0) +windowModified=false +windowOpacity=1 +windowTitle= + +[BECDockArea.dockSettingsAction] +autoRepeat=true +checkable=false +checked=false +enabled=true +iconText=Dock settings +iconVisibleInMenu=true +menuRole=@Variant(\0\0\0\x7f\0\0\0\x12QAction::MenuRole\0\0\0\0\x1) +priority=@Variant(\0\0\0\x7f\0\0\0\x12QAction::Priority\0\0\0\0\x80) +shortcut= +shortcutContext=@Variant(\0\0\0\x7f\0\0\0\x14Qt::ShortcutContext\0\0\0\0\x1) +shortcutVisibleInContextMenu=true +statusTip= +text=Dock settings +toolTip=Dock settings +whatsThis= + +[Perspectives] +1\Name=BEC - TestLayout4 +1\State="@ByteArray(\0\0\x3:x\xda\x95\x92\xdfO\x83\x30\x10\xc7\xdf\xfd+.}\x9f@\xcb\x94%\xc0\xb2`\x96\xf8\xe2\x8f\xb0\xe9\xa3\x41\x38I#\xb4\xa6\xed\x16\x35\xfe\xf1\x16\xb6\x10\xa3\x65\x91\x87\xa6\xbd\xef]?\xed\xf7r\xf1\xf2\xbdm`\x8fJs)\x12\x12\x9c\xfb\x4P\x94\xb2\xe2\xa2N\xc8v\xb3\x9e\x45\x64\x99\xc6\xf7\x66U\xed\vQbu%\xcbW\x9b\xcb?\xb4\xc1\x16\x1e\x86\x8b\x4\xb6\x1a\xd5\x10[L&\x85)\xb8\xb0J\x97N\xe3!\x86u#\v\xd3?\xe0[=\x7fk\xb8\x31V\xbeU\x1cm\x89\xe9\x1_\x1d`'LB\xe8?kV\n\v\xd8\x14\xcf\xfds\x90\xed\x94\xc2.u\xa7\x64\xadPk[\xf1\xc8\xab\x1a\r\xdc\x14-\xfe\xd0!k\xa4\xc6\xaa\xfb\x8c\x97\xc6^\x87\x19\x85]\x8b\x17\xf9\x1b\xd4kNH\xce?Q\xa7t\x1e@D)\xc4\xde!\xb6\xfb\xd1\xcd\x98\xaf\xd9\xe0+<\xe1\xab\x91\xe6)\xf8\xe3\xea\xa0N\xf1\xd4_\xa1N\x10\x9d\xe\x62N\x10\x9b\xe\n\x9d\xa0\xf0T\xa7\xd9\xe5\x5\x30\xb6\0\xb6`\xc0\xe8\xc2\xdd\xf1^\t\xfc(\x80\xb9]\xae\x12o\x98T{\x1e\x99\xfc\xf4\xec\x1b\xd0\xbb\tD)" +size=1 + +[mainWindow] +DockingState="@ByteArray(\0\0\x3:x\xda\x95\x92\xdfO\x83\x30\x10\xc7\xdf\xfd+.}\x9f@\xcb\x94%\xc0\xb2`\x96\xf8\xe2\x8f\xb0\xe9\xa3\x41\x38I#\xb4\xa6\xed\x16\x35\xfe\xf1\x16\xb6\x10\xa3\x65\x91\x87\xa6\xbd\xef]?\xed\xf7r\xf1\xf2\xbdm`\x8fJs)\x12\x12\x9c\xfb\x4P\x94\xb2\xe2\xa2N\xc8v\xb3\x9e\x45\x64\x99\xc6\xf7\x66U\xed\vQbu%\xcbW\x9b\xcb?\xb4\xc1\x16\x1e\x86\x8b\x4\xb6\x1a\xd5\x10[L&\x85)\xb8\xb0J\x97N\xe3!\x86u#\v\xd3?\xe0[=\x7fk\xb8\x31V\xbeU\x1cm\x89\xe9\x1_\x1d`'LB\xe8?kV\n\v\xd8\x14\xcf\xfds\x90\xed\x94\xc2.u\xa7\x64\xadPk[\xf1\xc8\xab\x1a\r\xdc\x14-\xfe\xd0!k\xa4\xc6\xaa\xfb\x8c\x97\xc6^\x87\x19\x85]\x8b\x17\xf9\x1b\xd4kNH\xce?Q\xa7t\x1e@D)\xc4\xde!\xb6\xfb\xd1\xcd\x98\xaf\xd9\xe0+<\xe1\xab\x91\xe6)\xf8\xe3\xea\xa0N\xf1\xd4_\xa1N\x10\x9d\xe\x62N\x10\x9b\xe\n\x9d\xa0\xf0T\xa7\xd9\xe5\x5\x30\xb6\0\xb6`\xc0\xe8\xc2\xdd\xf1^\t\xfc(\x80\xb9]\xae\x12o\x98T{\x1e\x99\xfc\xf4\xec\x1b\xd0\xbb\tD)" +Geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x17\0\0\x6\x85\0\0\x5\xf7\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\xf\0\0\0\0\0\0\0\0\x17\0\0\x6\x85\0\0\x5\xf7) +State=@Variant(\0\0\0\x7f\0\0\0\tPyObject\0\0\0\0\xf\x80\x4\x95\x4\0\0\0\0\0\0\0\x43\0\x94.) + +[manifest] +widgets\1\closable=true +widgets\1\floatable=true +widgets\1\floating=false +widgets\1\floating_abs_h=0 +widgets\1\floating_abs_w=0 +widgets\1\floating_abs_x=0 +widgets\1\floating_abs_y=0 +widgets\1\floating_rel_h=0 +widgets\1\floating_rel_w=0 +widgets\1\floating_rel_x=0 +widgets\1\floating_rel_y=0 +widgets\1\floating_screen= +widgets\1\movable=true +widgets\1\object_name=Info +widgets\1\widget_class=TextBox +widgets\2\closable=true +widgets\2\floatable=true +widgets\2\floating=false +widgets\2\floating_abs_h=0 +widgets\2\floating_abs_w=0 +widgets\2\floating_abs_x=0 +widgets\2\floating_abs_y=0 +widgets\2\floating_rel_h=0 +widgets\2\floating_rel_w=0 +widgets\2\floating_rel_x=0 +widgets\2\floating_rel_y=0 +widgets\2\floating_screen= +widgets\2\movable=true +widgets\2\object_name=Plot_1 +widgets\2\widget_class=Waveform +widgets\3\closable=true +widgets\3\floatable=true +widgets\3\floating=false +widgets\3\floating_abs_h=0 +widgets\3\floating_abs_w=0 +widgets\3\floating_abs_x=0 +widgets\3\floating_abs_y=0 +widgets\3\floating_rel_h=0 +widgets\3\floating_rel_w=0 +widgets\3\floating_rel_x=0 +widgets\3\floating_rel_y=0 +widgets\3\floating_screen= +widgets\3\movable=true +widgets\3\object_name=Plot_2 +widgets\3\widget_class=Waveform +widgets\4\closable=true +widgets\4\floatable=true +widgets\4\floating=false +widgets\4\floating_abs_h=0 +widgets\4\floating_abs_w=0 +widgets\4\floating_abs_x=0 +widgets\4\floating_abs_y=0 +widgets\4\floating_rel_h=0 +widgets\4\floating_rel_w=0 +widgets\4\floating_rel_x=0 +widgets\4\floating_rel_y=0 +widgets\4\floating_screen= +widgets\4\movable=true +widgets\4\object_name=Plot_3 +widgets\4\widget_class=Waveform +widgets\5\closable=true +widgets\5\floatable=true +widgets\5\floating=false +widgets\5\floating_abs_h=0 +widgets\5\floating_abs_w=0 +widgets\5\floating_abs_x=0 +widgets\5\floating_abs_y=0 +widgets\5\floating_rel_h=0 +widgets\5\floating_rel_w=0 +widgets\5\floating_rel_x=0 +widgets\5\floating_rel_y=0 +widgets\5\floating_screen= +widgets\5\movable=true +widgets\5\object_name=Plot_4 +widgets\5\widget_class=Waveform +widgets\6\closable=true +widgets\6\floatable=true +widgets\6\floating=false +widgets\6\floating_abs_h=0 +widgets\6\floating_abs_w=0 +widgets\6\floating_abs_x=0 +widgets\6\floating_abs_y=0 +widgets\6\floating_rel_h=0 +widgets\6\floating_rel_w=0 +widgets\6\floating_rel_x=0 +widgets\6\floating_rel_y=0 +widgets\6\floating_screen= +widgets\6\movable=true +widgets\6\object_name=Progress +widgets\6\widget_class=TextBox +widgets\size=6 + +[profile] +created_at=2026-09-27T09:27:43Z +quick_select=true +screenshot="@ByteArray(\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x6\x86\0\0\x5\xe1\b\x6\0\0\0\xb7\x5(\x97\0\0\0\tpHYs\0\0\xe\xc4\0\0\xe\xc4\x1\x95+\xe\x1b\0\0 \0IDATx\x9c\xec\xddut\x14\xd7\xfb\xc7\xf1w\x1c\x12\x92\xe0n\xc5\xdd\x83\xb6Xp\xb7\xe0RZ\xac\xb8\x43)R\\\x8a\xbbK\xb1\xe0.-\x85\x1f-\x14)\x14)\xe\xa5XB\bNB\x2\x44v\x7f\x7f\xe4\xcb\x96\x94\x18\xc9\xc6\xe0\xf3:'\xe7$3w\xef}\xb2wv\xf6\xce<3w,\xfc_\x5\x1a\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91\x8f\x9e\x65|\a \"\"\"\"\"\"\"\"\"\"\"\"qC\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91O\x84\x12\x43\"\"\"\"\"\"\"\"\"\"\"\"\x9f\b%\x86\x12\x90{\xf7\x1fq\xef\xfe\xa3\xf8\xe\x43$\xca\xb4\xcd&N\xea\xb7O\x97\xfa^DD\xe4\xc3\xe8\xbbSDDD\x12\x13\x8d]$\xaa\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\xf9\x44(1$\"\"\"\"\"\"\"\"\"\"\"\xf2\x89\xb0\x8e\xef\0\x44\x44\x44\x44\x44\x44\x44\x12;?\xbf\xd7\xf8\xbc\xf4#(\xd8\x10\xdf\xa1\x88\x88\x88\x98\x95\xad\xad\rI\xeclqv\xb4\x8f\xefPD\xc4L\x94\x18\x12\x11\x11\x11\x11\x11\x11\x89\x1\xaf\x87OIjkC\xd6\xcci\xb0\xb6\xd2\xc4\x1c\"\"\xf2qy\xf3&\x90\x17>\xaf\xf0\xb8\xff\x98\xcc\x19S\xc7w8\"1r\xef\xfe#\xb2\x64L\x13\xdf\x61\xc4;%\x86\x44\x44\x44\x44\x44\x44\x44\xa2\xc9\xcf\xef\x35I\xecl\xc8\x90.E|\x87\"\"\"\x12+\xec\xeclH\x9b\xc6\x6+k\xf0\xf3\x7f\x83\x83\xbd]|\x87$\"1\xa4K\x99\x44\x44\x44\x44\x44\x44\x44\xa2\xc9\xe7\xa5\x1fiS;\xc7w\x18\"\"\xf2\t\xbb\xfe\x8fW\x9c\xb4\xe3\xec\xe4\xc0\v\x1f\xbf\x38iKDb\x97\x12\x43\"\"\"\"\"\"\"\xd1\x14\x14l\xd0\xf4q\"\"\xf2I\xb0\xb6\xb2\"\xd8\x10\x1c\xdf\x61\x88\x88\x19h\xf4*\"\"\"\"\"\"\"\"\"\"\xf2\x89\x33\x1a\x8d\x18\x8d\xc6\x38{\x9d\xc4\x1f=cHDDDDDDDDDD\xcc\xc2}\xc3\x66N\x9d>\x13\xe5\xf2\xe5\xca\xba\xd0\xaci\xe3X\x8cH\xa2\xc2h42m\xfal\x8c\x46#\x3\a\xf4\xc1`00x\xe8\b\xdc\x9a\x35\xa6l\x19\x97PeO\x9c<\xc5\xa6\xcd\xdb\x98\x34\x61\f\xd6\xd6VL\x9e\x32\x9d\x37\x1o\x18\x39\xfc[,,,\xcc\x1a\xd3\xac\x39\v\xb8w\xcf#\xd4\xf2,Y2\xd3\xa7\xd7\x37\x66m\xebS\xa3\xc4\x90\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x98\xc5\xa9\xd3g\xd8\xbdg\x1f\xb9s\xe5\x8c\xb4\xec\xcb\x97/\xd9\xbc\x65\x1b\xaf\xfc_\xd3\xae]\xabX\x89\xe7\xfa\xb5\x1b\x1c<\xfc+\xdft\xed\x14+\xf5G\xe6\xce\x9d{l\xd8\xb8\x19\xef\x87\x8f(X ?\xad[\xb9\x91$I\x92x\x89%*\xe6\xce_\x84\xd1h\xa4_\xdf^l\xde\xb2\r\x97R%\xdeK\f\xdd\xbe}\x87\xcd[\xb6\x31~\xecH\xa6\xcf\x98\xcd\x82\x45K\xe9\xf1M\x17\xb3\xc7\x32{\xee\x42\x66\xcc\x9c\x43\x81\xfc\xf9\xb0\xb2\xb2\x2\xc0`0\xb0y\xcb\xb6\x90\x18\xfb\xf4\x30{\x9bq-((\x18\x83!\x18[[\xdb\x38mW\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x31\x9b\xdc\xb9r\xb2s\xfb\x46\x9e\xe6\xd5\xeb\xd7\xb4j\xddV\x89\xba\xff\xf8X\xbf\x13&N\x9c\xc4\x8c\x19\x33\x63\xa5n\x11\x11\x11\xf9\xf8\x5\x4\x4\x90\x36\x63n\xf6\xff\xf4s\xa4\x65\x83\x82\x82\xf9\xea\xeb\xae\xacZ\xb5\x1a\0ooo\xd2\x66\xcc\xcd\xe9\xd3\x7f\xc6v\x98\x11\x32\x18\f<\x7f\xfe\xdc\xec\xc7\x62\xaf_\xbf\x61\xed\xda\xf5|\xdd\xa9\x1b\xc5J\x94\xa7S\xe7o\xf8\xe3\x8fSfm\xe3\x43\xfc\xf7\xfd\x17\x11\x91\xd8\xf1\x36\x39\xf4Y\xf6l\x1c?a\x9e\xfd\xfe\xd5\xab\xd7h\xd1\xe6K\x9e={Fi\x97\x92\xac^\xb3\x9e\x99\xb3\xe6\x86\xfaY\xef\xbe\x89\v\x17/a4\x1a\xcd\xd2\x66Xn\\\xff\x9bj\xaeUptr\x4\xa0l\x19\x17\xd2\xa7K\xc7\xdf\x37\xfe\x8e\xb5\x36\x63\x62\xe8\xb0\x91\xe4-P\x9c\xc5KWD\xf9\x35\x8b\x97\xae o\x81\xe2\f\x1d\x36\x32\xc6\xed[[[3y\xd2\x38\xd3O\xdf\xde\xdd\xc3\xbc\v\xc9\xc2\xc2\x82\xbe\xbd\xbb\x87*km\x9d\xf0'G\v\f\f\xa2{\xcf\xbe\x64\xc9\x92\x99\xbd{\xb6\x93 \xbe\xbe\x18\f\x6\xaa\xb9Va\xc2\xf8\xefI\x97\x36\xad\xd9\xda\x7f+S\xa6\f\x9c\xfe\xf3,\xc1\xc1\xc1XYYq\xeb\xf6\x1d\x1e=~L\xa6L\x19\xcd\xde\x96\x39\xb8\x35k\x8cK\xa9\x12\xa1\x96\x95*U\xf2\xbdr\xa5J\x95\x64\xf2\xc4\xb1\xa1\x96\x65\xcf\x9e-\xd6\xe2\xfa\xe9\xe7\x3\x1c\xf9\xfd\x38\0\x15?/O\x8d\xea\xd5\x62\xad\xad\xd8\xb4h\xc9\x32\xfc\xfc\xfc\x98\x33k\x1a\x36\x36\xd6\xd8;$% \xd0\xbc\x17\xda\x44\x95Y\x13\x43\xdb\xb7\xef\x64\xdc\xe8\x61\\\xbat\x99\x3\a\xe\xc4\xeaI\xc0\x14)\x92S\xb8pa\0\x8a\x17/NPP\x10\x33g\xcf\xa3\x65\xcb\x96\x1f\\\x97!\xd8\x80\x9f\xff+s\x87\x98`\xfd\xdf\xe1\xc3\xd4\xa9Y\x85\xea\xd5\xab\x31k\xf6<:u\xfa:V3\xaa\x85\n\x15\xc4\xc1\xc1\x1\x80J\x95*R\xach1\xdaw\xecJ\xb9\xb2\x65\x63t\x82\xbf|\xf9\xf2\x94/_\xde\\a\x2\xb0lY\xc8-\x92\xeb\xd7\xad\x89\xb5\a~\xf9\xbe\xf4\xd3\xddm\x1f(\xae\xb7\xd9\xc8\x4\x5\x5\x85JH\xda\xd8\xd8\x30~\xfc\xb8x\x8b'\xa1J\xac\xdf\t\x91\x89iR[DDD$\xaa\xac\xad\xadX\xbelQ|\x87\x11gz\xf6\xf8\x86\x34iR\x9b\xc6\xda\xf5\xea\xd6\xe5\xd6\xed\x6\xfc\xf4\xd3\x81xI\f}j\xef\xbf\x88\x88\xb9\xa5L\x99\x92\x63G~\x89\x97\xb6\xbbu\xf9\x9a\xd7\xaf^1c\xd6<\xbe\xea\xd8\x9e>\xbd\xbey\xaf\xcc\xeb\xd7\xaf\x39x\xe8\x30#F\x8d\xa3S\xe7\x1el\xdd\xbc\x1e\x1b\x1b\xf3\x9eo\xea\xf1M\x17:|\xd5\x95\xda\xf5\x9b\x90?O\x1e\xe\xffz\x84\x34\xa9S\xd3\xa4q\x3\xb3\xb6\x63.e\xcb\xb8P\xb6\x8cK\xa4\xe5r\xe5\xfc\x8c\\9?\x8b\x83\x88\x42\xee\x62r\xdf\xb0\x19\x97R%0\x1a\x61\xcd\x1awZ\xb5tc\xe2\xf8\xd1\x66o\xcb\xd3\xd3\x93#G\x8f\x87\xb9\xee\x8b\xcf\xcb\x45\x98\xe8\x8c\x8a\xcd\x9b\xb7\xd1\xa3{7\xd3vV\xa2XQf\xcfY\xc0\xb7\x43\x2\x62\xed\\tx\xcc\xb6\xa5{yy\xb1\x63\xf7O\f\x18\xd0\x8fL\x99\x32\xd1\xb3\xf7\0\xfa\xf7\xefg\xca\xf4\x1a\f\x6v\xef\xde\xcd\x86\r\x9bx\xe9\xe7G\xf6l\xa1\x33\x88\x91\xad\x8fL\xa6L\x99\xf0\xf7\x7fMp\xf0\xfbs\x19\x1a\x8d\x46~\xf9\xe5\x17\xd6\xaf\xdf\xc0\xcd\x7fnQ\xb5J%\xbau\xebJ\xbat\xe9\x38v\xec\x18\xdd{\r\0 [\x8e\xfc\x34mT\x97\xe9\xd3\xa7\xbeWGlo\x14q\xc5`0\xe0\xee\xbe\x91o\xbau\xa1X\xb1\x62\xf4\x1b\xf8\x1d\x17/^\xa4X\xb1\x62\xa6\x32\xe7\xce\x9d\x63\xf1\xe2%\\\xbdv\x83j\xaeU\xf0\xf4z\x18\xaa\x8e\xc8\xd6G\xa6\x62\xc5/(S\xaa(G\x8f\xfenJ\f\x9d?\x7f\x9e\x45\x8b\x16s\xfe\xc2%\xaa\xbbV\xa1G\x8f\xee\xd8\xda\xdaR\xae\x42\x65\xe6\xcc\x9aj\xba\xbb\xc6\xc7\xc7\a\x97\xb2_\xb0u\xd3:n\xfe\xf3\xf\xf3\xe6-\xe0\xa7\xfd{\x81\x90)\x19\x36l\xd8\xc0\x8e\x9d\xbb\xf1\xf6~D\xf5jU\x18\x32\x64\x30vvva\xd6\x9f&M\x9aPq\xf9\xfa\xfa\x32u\xc6 B\xbe\xbc\xb9\xe9\xd1\xbd+e\xca\x94\xc6\xc7\xc7\x97<\x5\x42N\x18\x35l\xda\xe\x80]\xdb\xd7\xe1R\xaa$\xe9\x33\xe7\x65\xc5\xd2\xd9\xd4\xadS\x1b\x80[\xb7nQ\xa6\x42\r\x8e\x1c\xde\x43\xde =pr\n\x99u\xe6\xe1\xc3G4k\xd1\x86\x39\xb3\xa6Q\xb4Ha\xb3\xb6\xfd\x31\xf8\xfd\xd8\t\xd6\xbbob\xe9\xa2\xb9T\xaf\x1er~\xf8\xe7\x3\xbf\xd0\xb9k/\xea\xd5\xadM\x85\xf2\xe6\xbd\b9C\x86\f\x9c;\xff\x17\xeb\xdd\x37\x85Z\xde\xbaUs\x9a\xbb\x35\x89Q\xdd\x41\x41\xc1\xdc\xbes\x97\"\x85\n\x98\x96\xd5\xad[\x9b\xc5KV0b\xd4X\xc6\x8e\x19\x89\xad\x8d\x8di\xdd\x9fg\xceR\xb8p\xa1P\xcb\xcc\xc9l\x89\xa1\xc3\x87\x7f\xe5\x8b\n.d\xcb\x96\x8d\x14)R\x10\x18\x18\xc4\x1f\xa7NQ\xb5J\x15\0\xb6n\xdd\xca\xd2\x65+\x19:d \xf6\xf6\xf6\xf4\xee\x33 \xd4\xeb#[\x1f\x1e\xa3\xd1\xc8\xe3\xc7\x8f\xd9\xbe}'_vh\x8dM\x18o\xd4\xae\xdd\xbb\x99?\x7f\x11\xdf\xe\x1d\x84\x83\x83\x3\x1b\x36l\xa2\xe3W\x9d\xd8\xbci\x3\x45\x8b\x16\xa5{\xd7\x8e\xcc_\xb4\x82_\xf\xed\xc3\xce.\xec\x81sln\x14q\xe9\xf2\xe5\xcb\\\xbc|\x9d\xb2\x65\xcb\x92\"E\n\xaaU\xfd\x9c\x83\a\xf\x99N\xb2_\xb9r\x85\x16\xad;0a\xec(:w\xee\xc4\xa9S\xa7\x1x;\xd3\x66\x64\xeb\xa3\xc2\xc2\xc2\x82\x42\x85\vq\xfd\xfa\r\0\xae_\xbfN\xc7\xaf\xbb\x32\x65\xd2x:u\xfa\x9a\xad[\xb7\xd1\x7f\xc0@V\xaeXN\xfb\xb6-\xd9\xbbw\xbf)1t\xfc\xf8q\n\x15\xc8K\x81\x2\x5\xb8\xf9\xcf?\xa1\xea\x9d:u\x1a\xf7\xee\xdd\x63\xf0\xa0\x1\x4\a\x1b\xb8s\xe7\x36vvv\x11\xd6\xff\xee]\x1f\xf7\xee\xdd\x3\x88\xf4\xe4\xeb\xf8\xf1\x13x\xfa\xf4\x19\xc3\xbe\x1d\x82\xbf\xbf?3g\xcd\xc1\xd3\xd3\x93\xd1\xa3\xbf\a\xe0\xf5\xeb\0&\xff\x30\x9bu\xab\x97\xd2\xacYS\xe6\xcd\x9b\xcf\xb4i\xd3\x19\x37n,\xd3\xa6N\xa1\x42\xc5\xea\xf4\xeb\xdd\x8d\x46\x8d\x1a\x92.}z\0\xfc\xfc_\xd3\xbb\xdfPfL\x1dO\xbdzu\xc8\x98\x31\x43\x84\xdb\xed\xdb\x83\x8e\x88h\x9b%J\xeb?Ts776n\xdaJ2\a\a\xe6\xce\x99\x89\xb3s\xe4\x83\xa6\x19\x33g\xe1u\xff>\x93&\x8e\xc3h4\xe2\xe1\xe1\x19\xee\xed\xd1\x1fK\xbf%\xe4\xef\x84\xc8l\xd9\xb2\x85\x65\xcbW\x85j\xdb\xcf\xffu\xb8\xe5\x9f=\xf7\xe5\xc8oG\xe9\xd3\xbb\x17^^\xf\xf8\xf6\xbbQ\xa4J\x95\x8a\x86\r\x1b\xb2\x7f\xff~\xa6\xcf\x98\xc3\xb4\xa9\x93qtL\x86\x87\x87\a)S\xa6\f\xb3\x9e\x8f\xa5\xef\x45\x44\x44$\xb4\x1f\x7f\\\xc3\xac\x39\v\x19>l\x10\x8eN\x8e\xfc\xf8\xe3\xdaP\xeb=< \x8c\x14)\x92\x3\xb0\x63\xe7n:ul\x17iR\xe8\xf4\xe9?i\xd9\xb6\x33\x33~\x18\x43\x8f\xee]\xf1\xf0\xf4$y\xf2\x90:\x1e=zL\xedzM\xe8\xd9\xbd\x33\x8d\x1a\x35\xe0\xdc\xd9\xf3\xd4o\xdc\x86\x83?o'\x7f\xbe|lZ\xbf\f\xb7V_\xf3\xed\xe0^T\xaf\xe6J\xd6\xacY\xa2\xfc~\xcc\x98\xbd\x84\xbe\xbd:3l\xe8@\xae]\xbf\x41\xb7\x9e\x3\xb1\xb0\xb4\xa0\x41\xfdz\xef\x95}\xf9\xf2%\xbf\x1d\x39\x41\xab\x16\xcd\"\xac\xf3\xd9\xb3\xe7\x34ukK\xcb\xe6M\x98\x33{*\xcf\x9f=\xe7\xd1\xe3\xc7\xd8\xd8\xd8\x10\x1cl\xe0\xec\xd9\xf3T\xaf\xee\xca\xd7_\x7f\xc9\xd5+W\xe9\xd8\xb9\xb7i\x1a\xbc\xe\xed\x9a\xb3\x63\xe7nSb\xe8\xd5\xabW\xacu\xdf\xc2\xa2\xf9\x33\xc2l\xeb\xd4\x9f\x17H\x95\x32\x5_w\xec\x80\xd7\x3/\xa6M\x9f\x87\xd1h\xa4\x7f\xbf>@H\x7f\xcf\x9e\xbb\xc8\xd4\xdfk\xd6\xbas\xf8\xc8\x1f|\xf5U\x87(\xbfG\"\"\xe6\x96\"\xb9\x33\xbdzt\xc1\xad\xe5\x97\xf8\xf8\x84N\xe\x39;9\xb1i\xc3\xca\x38I\n\xbdy\xf3\x86\xed;\xf7\0\xd0\xa8\x41\xddp\xcf\xc3\x9aS\xbf>=\xb0\xb0\xb0`\xd7\xae\xddt\xfe\xfaK\xec\xed\x93\xbeW\xa6X\xd1\xc2\x14+Z\x84\xd3\xa7\xcf\x9a=1\x4P\xa1|9*\x94/\xf7\xde\xf2\xc0\xc0 6m\xd9\xc6\x9d;\xf7\xd8\xb4\x65\x1b\xb9s\xe5\n3\xbeO\xd9\xa9S\xa7\xf9,{6SR\b\xa0\x46\xf5j\xe4\xcc\x91\x9dS\xa7N\x9b=1dii\xc9\x84q\xdf\x63\x61\x61\xc1\xba\xf5\x1b\x1h\xd3\xba\x39\xe3\xc6\x8c\xc2\xd2\xd2\xd2,m\x4\x1b\xff\x9dI\xca\xd6\xc6\x86\x5\xf3g\xd1\xad{o\xea\xd4mD\xa5\x8a_\x90\x34iR\xce_\xb8\xc8\xef\xbf\x1f\xe7\xc6\xd5\xf3\x66i3,fI\f\x19\f\x6\x86~7\x9a&\r\xebp\xf9\xf2\x65 \xe4\x99\x12\xf3\xe6-\xa0j\x95*\x18\f\x6&M\x99\xce\xd4)\x13\xa8\\\xb9\x32\0k\xd7\xac\xa4j\xf5z\xa6\xd7G\xb4>,?\xff\xf2\x1b\xd9r\xe4\x37\xfd\xdd\xb3\xfb\xd7\xf4\xe8\xde=\xcc\xd8&L\x98\xc2\xa4\x89\x63\xa9T\xa9\x12\0\x5\n\x14\xa0\x62\xe5j\x9c\x38q\x82\xaaU\xabR\xa8P!>\xcb\x9e\x99\xec\xd9\xb3\x87\xdb^\\l\x14qa\xd1\xa2%\x4\a\x1b\xf0\xf2\xf2\xc2\xcb\xcb\vg'gf\xcf[B\xcf\x9e=\xb0\xb3\xb3\xc3\xdd}\x3\xdd:w\xa4i\xd3\x90\x93\x90\xc5\x8b\x17g\xfc\xa4\xe9\xbc=\x1c\x89l}TYXX\xe0\xe4\x1cr\xb7\xc4\xfa\xf5\xee\xd4\xaa\xe1\x8a\x8bK)\0\xda\xb4iM\xad\xbaM\xb8w\xef\x1eu\xeb\xd6\xa1^\xc3\xe6\f\x1b\x36\x94T\xa9R\xb1s\xe7n\xda\xb6i\xf5\xde\x1\xd2\xbd{\xf7X\xb4\xf4G\x8e\x1d\xf9\xc5\x94\xd8y;mUD\xf5\xbf\xdb\xe7o\xaf\x42\x8b\xe8\x1\xaa\xb7o\xdf\x66\xd5\x9a\x8d\xfcq\xfc\xb0\xe9\xce\x9d\xd4\xa9SS\xbb^S\xbau\xebJ\x86\f\x19\0X\xbc`&\x15*T\0\x42\xeer\x1a\xf2\xed\b\xc6\x8c\x19M\xe6\xcc\x99I\x95\xd2\x99\x82\x5\v\xbc\xb7\xbd\xf5\xef\xfb\rM\x9a\x84\xbc\xafQ\xd9n#\xa3m6\x84\xb9\xb6\xd9\xb7R\xa7NM\xd5\xca\x15\xb1\xb3\xb3\x8bp\x9f\xf1\xae\x87\xde\xf\xb1\xb7w C\x86\f\xa4K\x97\x8e\xe2\xc5\x8b\x87[\xf6\x63\xe8\xb7\x84\xfc\x9d\x10\x95\xd8'\xff\x30\xe3\x83\xda\x6\x18\x37n,\x19\x33\x86|\xfeO\x9f>\xcd\xc9\x93\x7f\xd0\xb0\x61\x43\x9e={\x86\xa3\xa3\x3\xa9S\xa7\"g\xce\x9c\x14*T(\xdc:>\x86\xbe\x17\x11\x11\x91\xd0|||\x19;a*\x8b\x17\xcc\xa2j\xd5\xca\0\x94)\xed\x42\xae|\xff\xce\xd5_\xabVMj\xd5\xaai\xfa\xdb\xc6\xc6\x9a\x16m:\xf3\xf8\xf1\x13\xd2\xa4I\x1d\x61\xfd\x9f\x7f^\x1\xc7\x64\xf6\x1c?q\x82:\xb5k\xf1\xe0\x81\x37;v\x1f`\xe0\xc0\xbe\x91\xc6v\xed\xdau\xd2\xa6IA\x93&\x8dH\x9a\x34)e\xdeY\xb7\x61\xe3&\xca\x95)E\xb7\xae\x9d\x1(W\xb6\fg\xcf\x9dg\xff\xbe\x9f(\\\xa8 E\xff\xf7\x90\xe4\xb2\x65JS\xe8\x7fS\xbc\x45u\xba\xec\xd4\xa9\x92\x33\xec\xdb\xc1@\xc8T\xe3\xfe\xfe\xfeL\xf9\x61\x66\x98\x89\xa1U?\xae!\x7f\xde\x9c\xb8\xba\x46|\xfc\xe3\xe1\xe1\xc1\xc3G\xcfh\xdc\xa8\x1\x5\v\x16\b\xb5.I\x12;\xa6L\x9e`\xfa\xbbR\xc5/\xd8\xb5g?'N\xfe\x41\xb9re\xa9[\xa7\x36\xf5\x1b\xb7\xc1\xcb\xcb\x8b\f\x19\x32\xf0\xe7\x99\xb3XZZR\xa6L\xe9p\xdb\x9b\x37w\xa6\xe9\xee\x7fo\xefG\xb8o\xd8\x42\xff~}\xf0\xf5\xf5\x65\xf4\xb8\x1fX\xb6xN\xb8\xfd-\"\x12_\x8a\x17+\xc2\xe6\r\xabpk\xf1%/||\x80\x90\xa4\xd0\xe6\x8d\xab(Z$\xfc\x63Usj\xd7\xa1\x13'\xff\b\xb9`w\xeb\xd6\xed\xb8\xaf[\x15\xe9\x45\x10\xe6\xd0\xb7ww\xbat\xea\x18\x61\xd2%e\xca\x14 I\xa8\xed\x37U\xaa\x94\xf8\xf9\xbf\xc6`0\x84\xbb\xbd\x38\xd8'\xa1\xf0;'\x8c\xcd\xb5\xddj\x9b\xfd\xb0m6I\x12;^\xbe|\xf9\xde\xf2\xa0\xa0@\xd2\xa4N\x11\xed\xc1\xca\x88\x11\xc3\xd9\xb6m\x1b-Z\xb5%C\xfat\xb4n\xd5\x92:uj\x87\xbbsO\xec\xfd\x96\x90\xbf\x13\"\x13\xdd\xb6\xdf\xdd\x34\xd2\xa5O\xc7\xdf\x37n\x2\xd0\xa4iSlmm\xf9\xee\xbb\x11<~\xf2\x94v\xedZ\xd3\xb4I\x13\xd3-\xe3\xff\x95\xd8\xfb^DDDB\xf3\xf0\xf0\xc0\xc7\xd7\x9f\x2\x5\xfe\xbd\x80%I\x92$\xa1\xca\x18\x8d\x46\xe\x1f\xfe\x95_\xe\xfe\x1f\x17.\\\xe2\xc4\xa9\x90+C\xdf\xbc\t\xff\x8e\xe5\xb7\x92%K\xc6W_\xb6\x66\xf7\x9e}\xd4\xa9]\x8b\xdf\x8e\x1c\xe1\x8b\n\xa5\xc8\x13\xc6\xb4\xb5\xff\xf5\x45\xc5\xcfY\xb4\x64\x5u\xea\x35\xa1Y\xd3\x86T\xaf\xe6J\x9e\x9b~}{b4\xc2\x8c\x99sx\xf2\xf4\tU+W\x8c\xbc\x82h\xb2\xb4\xb4\x64\xdc\x98Q\xa6\xdf\xcd\xa5Y\xb3\xc6,]\xba\xfc\xbd;\xe6lmmi\xda\xa4\x11M\x9b\x34\" 0\x90\xba\xf5\x1a\xd3\xacYc\xb3\xb5\x1b\x16\xb3$\x86~\xfe\xf9g\x1a\xd5\xaf\xc5\xacY\xff\xdej\xed\xeb\xebK\xa9\x32\x9fs\xfc\xf8\tj\xd5\xaa\x89\x63\x32{\xee\xdc\xb9\x63z\xa6\xcc\xbb\xcf}pvv\x8ep}XjT\xabhz\xd0xD\x9c\x9d\x9dq\xb0O\x12\xaan___\x8e\x9f\x38M\x97\xce_\x9b\xca\x19\xa3xuSlm\x14q\xe1\xe4\xc9\x93\x38;%\xe3\xc4\xb1_C\rr;w\xe9jz0|\x8e\x1c\x9f\x99\xa6x{\xeb\xdd\xe7\xb1\x44\xb6>*\x8e\x1f?\xce?\xb7nS\xb5j\xc8\x94R\xb9r\xe5$O\x9e\xdc\x8c\x1b\x37\x36\xcc\xf2m\xdb\xb4\x62\xfb\x8e\x1d\xf8\xbf\xf2\xa7mk\xb7\x30\xa7\x61z{\x12\xf8\xd1\xa3G\xefM\x5\x17Y\xfdo\xa5J\x95\x8a\xf6m\xdc\xf8\x61\xeat\x8a\x15+\x1a\xe6\x89\xe5\xb7W\xecyzz\x92%K\xc8t\t7n\x84\xbc\x1f\x19>\xe0\x8b\xcc\x18\xc9 \xfd'C\xbe\x1d\x11jY\xb3\xa6\x8d\xcd\x9e\x18\xca\x9d'\x17\xa3G\x8d\xe0\xfb\x31\xe3Y\xba|\x15\x46\xa3\x11\x83\xc1\xc0\x98\xefG\x90;O.\xb3\xb6\xf5_\xb1qN\xa6k\xe7\xaf\xd9\xbf\xff\0#G\x8d\x65\xcc\xe8\x11\xefM\xa7\x18\x14\x14\xcc\xe0\xc1\xdf\x61g\x97\x84.\x9d\xbe\x32{\xfb\xef\x8aqb\xe8\xd5\xabW\xfc\xb8\x66=?L\x1e\x1fj\xb9\xa3\xa3#nM\x1a\xb0{\xf7n\xea\xd6\xad\xc3\x80~=\x99\x30q\nVVV\xa4N\x9d\x9a\x91\xa3\xfe\xbd\xeb\xc3\xca\xca*\xc2\xf5\x1f*U\xcaTx=x\xc4\xcd\x9b\x37\xc9\x9a\x35+\x83\a\xf6\x65\xdc\xf8\xc9XYY\x91.]:v\xef\xde\x43\xc9\x12\x45(]:\xe4\n\xa1\xd4\xa9Ss\xfb\xee}N\x9e\xfc\x83\x94)S\x92;w\xc4\x1bUb=Q\xb7s\xe7n\xda\xb4r{\xef\xca\xa7zu\xeb\xf0\xedw\xdf\xd3\xbf\x7f?\xdc\xdc\x9a\xe1\xd6\xb2=\xd9\xb3g\xa3p\xe1\xc2\\\xb8x1T\xd9\xc8\xd6\x87\xe5\xca\x95+$M\x9a\x94\x17/^\xf0\xd7_\x17\x98\xbfp)\xf3\xe6\xcc u\xea\x90$K\xeb\xd6\xad\xa8\xdb\xc0\x8d|\xf9\xf2Q\xae\\Y\xfc\xfc\xfcx\xfc\xf8\xb1\xe9\xa4y\x95*U\xe8\x37\xf0;~9t\x94\xad\x9b\xd6\x86\xd9\x46\x9e \xfa\xf6\xedO\xfb\xf6mqtt\xe4\xf2\xe5\xcb\xcc\x9b\xbf\x84m[6\x98\xca\x65\xc8\x90\x9e]\xbb\xf7r\xed\xda\x35\x1c\x1c\x1cLw\x8d\xbd\xf5\xdf}\xd0\xce\x9d\xbbH\x9b\x36\r\xe9\xd2\xa5\xe3\xc5\x8b\x17\x4\x6\x6\xe1\xe0\x10\xf6\x33\x86\xde\x95\x18\xfb-1|'\x14*T\x88\xe1\xa3&\xb0~\xbd;\xf9\xf3\xe7\x63\xfb\xf6\x1d\xa1\xdb\xee\xdf\xcblm\x1f;v\f\x1f\x1f\x1f\xb2\x66\xcdJpp0o\x2\x2p\x8e\xc2\0/1\xf6\xbd\x88\x88\x88\xbc/s\xe6\xccXYYr\xe6\xcc\x39\xd3\xac\x4\x81\x81\x41\xa1\xcal\xdf\xb1\x9b\x46\x8d\xeaQ\xf1\x8b\xcf\x1\xf8\xe7\x9f[@\xe8;\x92#R\xa8`\x1\\J\x16\x66\xe1\xa2%\x9c\x38y\x96%\x8b\xe6\x45\x39>\x1b\x1b\x1b\xca\x97/G\xf9\xf2\xe5pq)I\xfb\x8e=\xe8\xd3\xbb'E\n\x17\x62\xfb\xce}88$3=\xbb\xe8]o\x13O\x81\x81\x81\xa6\x65\x96\x96\x96\x64\xcd\x9c\x9e\xbf\xff\xbeiZ\x16\xf0\xcez\x80W\xaf_s\xf0\xff\x8e\x11\x10\x10`:Iv\xe1\xc2\x45>/W\x12\a\x87\x90\x31\xff\xb5k\xd7i\xd5\xfa+fM\x9f\x44\xe5\xca\x95\x42\xbd\xbeR\xa5\x8a<\xbc\x1f\xfa\xa2\xafwc*P ?\x5\n\xe4\xa7\x61\x83z\x94(]\x85\xf3\xe7/\0p\xeb\x8e'\x1d\xda\xb7#e\xca\x14\0\x4\a\x1b\xf8\xf9\xe0Q\xd3k\xabWw\xe5\xfb\xb1S\xd9\xbau;\x19\xd2\xa7\xa5H\xe1\xe8]=\x9f%K\xe4\xfd-\"\x92\x10\xc4\xd5]B\xef\xb2\xb3\xb3\x63\xf9\xb2\x5L\x9d\x36\v\v\v\v\x6\xe\xe8\x13'\xcf\x18:\xfa\xfbq\xfe\xba\xf0\xfe\xb9 \xa3\xd1\xc8\xc3\x87\x8f\x38|\xf8\x37<\xef\xdfg\xc2\xf8\x31\xe4\xc9\x9d\x33\xc6\xed\x1d\x39z\x9c\xc0\xa0 V\xadXl\xfan\xfb\xaf\xa7O\x9f\x32i\xf2\x34\xde\xbcy\xc3\x8f\xab\xd7\xd1\xb2\x45\x33\xe\xff\xfa\x1b\xff\xdc\xba\xc3\x82\x85K\xa9Z\xa5\x12\x9f\x65\xcf\x16\xe3X\xa2\x63\xca\xa4\xb1L\x9a\x30\x86)?Lg\xf1\xd2\x15QzM\x97N\x1d\x19<\xa8?\x96\x96\xb1\x33-`\x9b\xd6\xcd\xa9T\xb1\x2'N\xfe\x81\x85\x85\x5\x65\xcb\xb8\x44\xfa\x8c\xf8\x84\xca\xc6\xc6\x9aysf\xd0\xa3W?\xea\x35hJ\xa7N_Q\xa8`~\xac-\xad\xb8x\xf9\x32\v\x16.!I\x92\xa4\xcc\x9f;\x13\x1b\x1b\xb3\xdc\xd3\x13\xae\x18\xd7~\xf2\xe4I^\xbd~C\x99\x32\x65\xde[W\xbdz5\xdaw\xec\x86\x97\x97\x17\xed\xda\xb5\xc3\xc6\xc6\x96\xd9s\xe6\xe1\x98,\x19M\x9b\x34\xe6\x81\xf7\"S\xd9\xc8\xd6\x7f\x88R\xa5\x82\xf1P\xaf\0\0 \0IDATJR\xa5\xd2\xe7\xf4\xe8\xd9\x87\x5\xf3\xe7\xd0\xae][\x92\xda'e\xe1\xa2%\xbcx\xe1\x43\xcd\x9a\xd5X\xb8`\x9ei \xea\xe2R\x8a\x61\x43\xfa\xd1\x7f\xe0`\n\x15\xcc\xcf\xfcyscu\xfe\xbe\xf8\xe0\xed\xed\x1d\x32\xadS\x18\x89\x95\xb2\x65\xcb\xe1\xe7\xff\xda\xf4`\xf8U\xcb\x17\xb2\x64\xe9r~\\\xbd\x8e\xbaujQ\xdd\xf5\vS\xd9\x92%KF\xb8>,M\x9b\xb7\xc3\xca\xca\x92\x32.\xc5)Q\xa2\x18\xfb\xf6l\xf\xf5\xe1-T\xa8\x10\xbbwld\xf9\xf2\x95\xcc\x9d\xb7\x90\xb4iSS\xabV\r\xaaT\xa9\x82\x85\x85\x5)R\xa4\xa0L\xa9\xa2\x9c<}\x9e\x62\xc5\x8a\x86\xd9\x86\x8d\x8d\rsf\xcf\x64\xe1\xa2\x45t\xef\xd1\x9b\x64\xc9\x1c\xa8\xe6Z\x95\x37o\xde\x44Z\xff\xbbR\xa6L\xc9\xba\xb5\xab\xd9\xb2\x65\v\xbf\x1e\xfe\x95\x1fN\xcf$S\xc6\xf4|\xfeyy\xac\xac\xac\xb0\xb4\xb4\x64\xd2\xa4\x89,[\xb6\x9c\xef\x86\x8f\"Erg\x1a\x35n\x88[\xb3\x88\x1f\x86\xfa\xae\x91#F0a\xc2\x44\xbav\xeb\xc1\x88\xe1\xc3\xa8T)\xec\xdb\x1e#\xdbn{\xf7\xee\xc9w\xc3G\xf1\xd2\xf7%\xfd\xfa\x45>\x87xb\x13\x1f\xdb\xac\xad\xad-\v\x16\xcc\x63\xf5\xea\x35\xcc\x9a=\xf\x1f\x1f\x1f*\x94/\xcb\xae\x1d\x9b\xf9\xec\xb3\x7f\xaf\x8ch\xde\xbc\x39\xb7n\xdd\xa6\xe3W]\xe8\xd0\xbe\r]\xbbv\tU\xcf\x7f\xf7\x41o\xde\xbc\x66\xd1\xe2%\\\xber\x9d\xcf\xb2g\xe5\x87\xc9\xe3(]\xda\xbcWP$\x14\x89\xe1;\xa1x\xf1\xe2\xcc\x9a>\x89%K\x97\x61ggG\xcd\x1a\xd5I\x93:\xc5\xbfm\xb7m\x8b\x8d\xb5\x8d\xa9\xedR\xa5Jr\xfe\xc2\xd5h}/\x18\x8d\xb0g\xcf>\xfe \x1f\x90\"E\xe4\xfd-\"\xf2)+Y\xa2\x38\xeb\xd7\xae\x8c\xd3\x36\x7f;r\x94\xd5k\xd6\x87\xb9.C\xfat\x14)\\\x98%\v\xe7\x92'o\xe4\xd3\xb0\x46\x85\xcf\xff\x9e\xdf\xf4\xdd\xf0\xef\xdf[W\xaa\x64\t\xda\xb6mI\xb2\x64\xc9(R\xb8\x30\x45\x8a\x14\x61\xd4\xe8\xf1\x8c\xfc~\x1c\0\x35kT\xc7\xda\xda\x8a\x14\xc9\xa3\x37=\xbe\x39XZZ2u\xda\f\x16/]A\x97\xce_\xb1x\xc9\xf2\b\xcbw\xe9\xd4\x91\xc5KW`cc\xc3\xa0(<\xe3\x30\xba\x32g\xce\x44\xb3\xcc\xb1;\xb5Z\\\xc9\x96-\v\xdb\xb6\xb8\xb3x\xe9r\x16,X\xcc\xed;w\x81\x90g\r\xb9\xb9\x35\xa1K\xa7\xaf\x62=)\x4`\xe1\xff*0\xea\xf3!I\xac\xbaw\xff\x11\0Y2\xbe\xff\x9c\x1c\x91\x84H\xdbl\xe2\xa4~\xfb\x30g\xcf\x9e\xa5\x65\x9b/\xb9x\xfet\x94\x9e\x37\x94\x90\xa9\xef\x45\x44\x44>LT\xbe;\xef\xdd\x7f\x44\x9e\x1c\xe1O+\x1d\x14\x14\xc4\x9a\x35\xeb\xd8\xb8i+\xf6\xe\xf6\x34lP\x97\xbd\xfb~\xa6\x43\xfb\x36\xd4\xaaY\x83'O\x9e\x30u\xdaL\xf6\xed?H\xfe\xfc\xb9i\xee\xd6\x84\x41\x43\x46r\xf8\xe0\x1e\x32g\xceL\x8d\x9a\xf5i\xd1\xbc\t_\x7f\xdd\x11\0w\xf7\x8dL\x9f\x39\x17\xb7\xa6\x8d\x18\x34\xa8?\0\xb7o\xdf\xa1t\xf9j\xec\xda\xb6\x96\x32\x65JG\xe9\x7f\xfb\xf3\xccY\xd6\xaf\xdf\xc0\x89\x93\xa7\xf1\xf7\x7f\x85k\xd5\x8a\xf4\xec\xf1\r\xd9\xb2\x85<{\xf5\xc9\x93',\\\xb4\x94\x43\x87~\xc5\xff\xd5+*\x94/\xc3\x37\xdd:\x93\x33g\xc8\xd5\xd4\x97.]f\xcc\xd8\x89x\xde\xf7\x62\xe8\xe0\xfe\xd4\xabW\a???\xe6\xce[\xc0\x96\xad;\xc9\x97\x37\x37\xb5j\xd5`\xc2\xa4il\xd9\xb4\x86\xbcy\xf2\x30u\xea\f\xd6\xb9o\xa6n\x9d\x1a\xec\xd9\xfb\x33\x45\x8a\x14\xa4K\xa7\x8e\x94/_\xe\x80\xd1\xa3\xc7\x31o\xd1\xaa\x30\xe3=w\xfa\x37\x32\x66\f\xfb}\xf6\xf0\xf0\x64\xf5\x9a\xb5\x1c\xfe\xf5(\xf7<\xbcp)U\x8co\xbav\xa2l\xd9\x90\x8b\x95\xf6\xff\xf4\x33\x33g\xcd\xe3\xc5\v\x1f\x1a\xd4\xafMpp\xc8T\xf2\xc3\xbf\x1bj\xaa\xc3\xdd}#\xbd\xfb\x7f\xc7\xc9\xdf\xf\xf0\xd9g\xd9M\xcb\xdf}\xff\xf\x1d:L\xcb\xb6\x9d\xb9u\xe3\x1c\xe\xe\xe\0\xec\xdc\xb5\x9bN]\xfb\xf1\xc0\xe3\x1a\x96\x96\x96\xef\xf5w5\xd7*\x8c\x1c=\x85\xf5\xab\x17\xe1\xea\x1a\xfeT\xd2\"\"1q\xfd\x1f\xaf\b\xbf\x8b\xcc\xddVd\xc7\x94\x3\x6\rc\xf7\x9e}\xe4\xce\xf5\x61w\xe0\xdc\xf8\xfb&\xf5\xea\xd6\x66\xda\xf\x13\x62\x12\x62\xbc\xda\xb1k\xf?\xfe\xb8.\xccu\xe\xc9\x1cX4\x7fV\xa8\v\x1d~\xfb\xed(\xed\xbe\xec\xcc\xf8\x31\xa3h\xdb\x36\xe6\xcf\xf2\x8b\xc9q\xbf\xd1h\xe4\x87\xa9\x33\x99\xb7`1=\xbbw\xa5o\x9f\x9e\xe4\xca[\x98\xc9\x13\xc7\xd2\xb2\x45\xe8\x8b\xe2\xdd\x37lf\xc8\xb7#\xb8v\xf9,s\xe7-b\xce\xbc\x85\xf4\xec\xde\x95\x81\x3\xfa\x44\xfb\x19\xdd\x8b\x97,g\xfc\xc4\x1f(\\(zS\x1c^\xb8x\x89!\x83\xfb\xd3\xbd[\xe7\b\xcb\xdd\xbb\xff(A\x9d\x17\t\n\n\xb9\x88\xc5\xda:noTQb(\x1\xd1\t;Il\xb4\xcd&N\xea\xb7\x88y{?\xe4\xe0\xa1\x83\xe4\xcd\x93\x17KK\v\xe6\xce\x9b\xcf\x17\x9f\x7f\xce\x97_v\x88\xef\xd0\x62L}/\"\"\xf2\x61\xcc\x91\x18\x8a\v\xdb\xb6\xed`\xfc\xc4\xa9\x1c\xff\xfd\x10\x36\x36\x36\x18\f\x6.\\\xbc\x14\xe1k\x8a\x14.\x14\xed\x13\x37\xd1\x35u\xea\f.\\\xba\xcc\xaa\x15K\"/\xfc\x91\xf0\xf0\xf0\xa4\x44\xe9\xca\xfc\xfe\xeb\xbeH\xa7\xad\x17\x11\x89\xae\x84\x96\x18r\xdf\xb0\x99S\xa7\xcf\x44\xab~\x97R%\xdeKB|\xcc|}|\xf9~\xec\x44z\xf5\xec\x46\xf6\xff]\x9c\x11\x13\x31M\fM\x9b>\x1b\x80\x1\xfd{c0\x18\x18\xbf\x1d=F\xa6\f\xe9qskJ\x93&M>\x8a)F\xd5\xf7\"\"\"\x1f&1$\x86\x8c\x46#M\x9a\xb6\xa4j\xd5J\xf4\xea\xd9\x1d\x80\x80\x80\0\x32g\x8f\xf8j\xdb\xfbw\xaf`m\x1d\xfb\xd3\x94\xbc\xebSH\f]\xbbv\x9d\xa3\xbf\x1f#w\xee\\XYY\xb1j\xd5\x1a\x9c\x9c\x1c\xf9\x61\xca\xc4\x38O\xc4\x89\xc8\xa7#\xa1%\x86$\xfe\xc4\xf4\xb8\xdfh\fI\x15|\xe8wVt_\x17\x1f\x94\x18\n\x11\xb7\xa3@\x11\x11\x91\x4.K\x96\xccL\x9c\x98xo[\x17\x11\x11\x91O\xcb\xe5+W\xf8\xfd\xc4\x19&N\x18\x63Zfkk\xcb\xc3\xfb\x37\xe2\x31\xaaO\xdb\xa5K\x97Y\xb0p\x19\x99\x32\x65\xa0\x41\xfd:\xb4i\xdd\x32Q\x9c(\x13\x11\x11\x89\xee\xf7\x95\xbe\xe7\x12\x1f%\x86\x44\x44\x44\x44\x44\x44\x44\x12\xa9\x82\x5\n$\x9a$\xd0\xc0\x81\xfd\xe2;\x84X\x97\x37o\x1e\xa6O\x9b\x12\xdf\x61\x88\x88\x88\x88\x44\xc8\x32\xbe\x3\x10\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91\xb8\xa1\xc4\x90\x88\x88\x88\x88\x88\x88H4\xd9\xda\xda\xf0\xe6M`|\x87!\"\"\x12\xeb^\xbf\t\xc4\xce\xd6&\xbe\xc3\x10\x11\x33PbHDDDDDD$\x9a\x92\xda\xd9\xf2\xc2\xd7?\xbe\xc3\x10\x11\x91OX\x9e\x1c\x19\xe2\xa4\x9d\x37o\x2\xb1K\xa2\xc4\x90\xc8\xc7@\x89!\x11\x11\x11\x11\x11\x11\x91hrr\xb4\xe7\x85\xcf+\x9e<\xf3!(88\xbe\xc3\x11\x11\x11\x31\xbb\xd7o\x2y\xe1\xeb\x8f\xf7\xe3\x17\x38's\x88\xefpDb$K\xc6\x34\xf1\x1d\x42\x82`\x1d\xdf\x1\x88\x88\x88\x88\x88\x88\x88$f\x99\x33\xa6\xc6\xef\xd5k\xee\xdc{B\xb0\x41\xc9!\x11\x11\xf9\xb8\xd8\xd9\xda\x90\xc4\xceV'\xd4\x45>\"J\f\x89\x88\x88\x88\x88\x88\x88\xc4\x90\x43\xd2$8$M\x12\xdf\x61\x88\x88\x88\x88\x88\x44JS\xc9\x89\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88|\"\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\xf9\x44X\xf8\xbf\n4\xc6w\x10\"\"\"\"\"\"\"\"\"\"\"\"\x12\xfbt\xc7\x90\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\xc8'B\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91O\x84\x12\x43\"\"\"\"\"\"\"\"\"\"\"\"\x9f\b\xebw\xffx\xfa\xdc\x97`\x83\x81\xc0\x80 \x82\r\x86\xf8\x8aIDb\xc0\xc6\xc6\x1a[\x1bk\x92\xda\xd9\x91\x34\xa9m\xb4\xea\xd0\xbe@DDDDD\x12\x32\x1d\xf7\x88\x88\x88\x88\x44.\xbc\x31\x93\x85\xff\xab@\xe3\x9b\x80@\x1e>~N\xaa\x14NXZX`ck\x8d\x95\xa5n&\x12I\x8c\x2\x3\x83\b\b\f\xe2M` AA\xc1\xa4J\xee\x88\x95\x95U\x94^\xab}\x81\x88\x88\x88\x88\x88$\x6:\xee\x11\x11\x11\x11\x89\\xc&\v\xffW\x81\xc6{\xf7\x1f\x91%c\x9a\xf8\x8eQD\xcc\xcc\xff\xd5k\x9e<\xf3\x8d\xf2\xe7[\xfb\x2\x11\x11\x11\x11\x11Ilt\xdc#\"\"\"\x12\xb9w\xc7L\x16\x1e^O\x8dI\xecl\xb1Oj\x17\xdfq\x89H,\xf0\x7f\xf5\x86\x37\x1\x1\xa4pv\x8c\xb0\xdc\xd3\xe7\xbeh_ \"\"\"\"\"\x89\x91\x8e{DDDD\"\xf7v\xcc\x64\x19l0`ia\x11\xdf\xf1\x88H,\xb1\xb4\x80\xa0`c\xa4\xe5\xb4/\x10\x11\x11\x11\x11\x91\xc4J\xc7=\"\"\"\"\x91{;f\xb2\f\f\b\xc2\xc6\xd6:\xbe\xe3\x11\x91XbckC`@`\xa4\xe5\xb4/\x10\x11\x11\x11\x11\x91\xc4J\xc7=\"\"\"\"\x91{;f\xb2\f6\x18\xf4\x90\x45\x91\x8f\x98\x95\xa5%\xc1\x6\x43\xa4\xe5\xb4/\x10\x11\x11\x11\x11\x91\xc4J\xc7=\"\"\"\"\x91{;f\xd2hHDDDDDDDDDDD\xe4\x13\x11\xe3\xfb\xa7\x87\x8d\xf8\x9ekWo|\xd0k\xf2\xe6\xcb\xcd\x84\xb1\xdf\xc7\xb4i\x11I@\xb4/\x10\x11\x11\x11\x11\x11\x11\x11\x11\x11I\xf8\x62\x9c\x18\xbav\xf5\x6\xb9r~F\xa9R\xa5\xa2T\xfe\xf4\xe9\xd3\x1f|\xf2X>\rS~\x98\xc1\xc9?N\x3P\xa6t)\x6\xf\xea\x17\xcf\x11\xfdk\xd8\xf0Q\x9c\x38\xf1G\x94\xca\x66\xce\x92\x85\x1fW,\x8e\xe5\x88\x12\x1e\xed\vDDDDD\"\xa7\xe3\x1e\x11\x11\x11\x91\xc8i\xcc\x14\xbb\xcc\xf2\xc4\xc5R\xa5J\xe1\xd6\xacQ\x94\xcb\xff}\xf3V\x94\xcb\xe\x1e<\x94\r\x9bw\0\x90$\x89-\xe5\xcb\x94\xa2\x41\xc3\xfa\xd4\xab[\x17\x1b\x1b\x9b\xf\x8eU\x12\xae_\xfe\xef\x30\xd7\xae^\a\xc0\xd7\xef\x65\x82\xfa\xb0{=\xf0\xe6\xe6?\xb7\xe3;\x8c\x4/6\xf7\x5\x6\x83\x81\xcfr\x15\x64\xe6\xf4\x89\x34n\x14\xf5\x36\xfe\xfc\xf3\fs\xe7\xce\xc3\xeb\x81\x37_vhK\xcb\x96-\xa3\xfcZ\x11\x11\x11\x11\x11s\xd3q\xcf\xa7\xc5\xfb\xe1\x43\xac\xad\xacH\x95*U\x94\xcaGv\xe\xc4\xdb\xfb!\xa5\xcbUb\xdb\xe6\xb5\x94(Q\"Ju\x1a\f\x6|}}I\x9a\x34)\xb6\xb6\xb6Q\x8e\xdd\xc7\xc7\x87\x35k\xd7\x32\x7f\xc1R\xe\x1e\xd8G\xbati\xa3\xfcZ\x11\x11\x91\x98\xd2\x98)v\x99%1\xf4V\x8e\xdc\x85\"\\\xff\xcf\x8d\x8b\xd1\xaa\xd7\xb5r\x5\xbav\xedL`` W\xae^e\xe8\xb0Q\xdc\xbcy\x93\x81\x3\x6\x44\xab\xbe\xc4\xce\xd3\xd3\x93\xabWo\xe0\xeaZ9\xcc\xf5\a\xf\x1e&_\xbe\xdc\x64\xca\x94)n\x3\xfb@\xbb\xf6\xec\xe5\xcc\x99s|\xf5\x65\a\xce\x9c;\xc7\xadw\x92\x4\xb7n\xde\x62\xcb\xd6\xed\x94vqa\xd9\x8a\x95\x94,Y\x9c\xfau\xeb\xc4y\x8c\xc3\x86\x8f\xa2\xb9[3\0\xda\xb4iA\x9dZ5#,\x7f\xe6\xecy\xb6o\xdf\x11\xa3\x36?\x86\xfe\x8d\xad}\xc1\x87\xf2\xf4\xf4\xa4u\xbb\x8e|?\xe2[r\xe5\xca\x89\xbd\xbd}\xac\xb4\x91\xd8\xfbKDDDDb\x8f\x8e{\xc2\xf6)\x8c\xa3}}|i\xff\x65\x17\xaa\xbbVa\xe0\x80>Q~\x9d\xb9\xcf\x81\xf8\xfa\xfaR\xa4xY6\xae_I\x99\x32\x65\"-\xff\xea\xd5+v\xef\xde\xcd\xf\xd3\x66\xe2\xfd\xf0i\xb4\xda\x84O\xa3\x8f\x45\x44\xc4|4f\n[l}\x9f\x9a\x35\x31t\xfd\xcaysVg\x92>}:\xd3\xe0\xe5\xf3\xcf?'m\x9a\x34\xf4\xee\x37\x94V-[~\x92\x3\x88\xabWo\xd0\xbdW?f\xcd\x98\x42\xad\x9a\xd5\x43\xad\xdb\xff\xd3\x1\xfa\xf4\x1b\xcc\xfc\x39\x33\x12\xf4{\xe3\xef\xff\x8aq\xe3\xa6\xf0\xc0\xdb\x9b\xe5+V\xbf\xb7> 0\x90\xfe\x3\xbf\x35\xfd\xbdo\xdf\x1\\\xabT\xc1\xde>i\\\x86\xc9\x89\x13\x7f\xe0Z\xa5\n\0\x39s\xe4\xe0\xf3\n\xe5\",\xff\xe6\xf5\x9b\x18\x7f\xd8?\x86\xfe\x8d\xad}\xc1\x87\xfa\xfb\xef\x9b\xbc~\x1d@\xa3\x46\rI\x9a\x34v\xb6\x9d\x8f\xa1\xbf\x44\x44\x44\x44$v\xe8\xb8'|\x1f\xfb\x38: 0\x90\xae\xdd{\x93\x36Mj\xfa\xf4\xee\xf1\x41\xaf\x8d\xe8\x1c\x88\xb5u\xec\xcf\x9cr\xf1\xe2\x45\xdc\x37lb\xd2\x84\xb1\x38;'\xa7\x89[\x9bh\xd5\xf3\xb1\xf7\xb1\x88\x88\x98\x8f\xc6L\xe1\x8b\xad\xefS\xcb\x18\x45\xf5\x1f\xf5\x1a\x36\x8d\xf0\xc7\\\xde\xde.\xed\xe1\xe1\x89\xb7\xf7\x43\xb2\xe5\xc8\xcf\x91#G\x19\x32\x64(\x95*\xbbr\xf1\x62\xc8\xdd\b\x8f\x1f?f\xe2\xc4IT\xab^\x8b\x36m\xda\xb1\x65\xcbV\f\x6\x83\xa9\x1e\x83\xc1\xc0\xf6\xed;h\xdb\xae=\r\x1b\x35\x61\xe1\xc2\x45\xb4m\xd7\x9e\x3\a\xe\0\xf0\xeb\xaf\xbf\xd2\xa0\x61\x63~\xfd\xf5\x37\xbe\xee\xd4\x99Z\xb5\xeb\xe1\xe7\xe7\x87\xc1``\xeb\xd6\xad\xb4i\xd3\x8e\xea\x35j3k\xf6l|}}M\xf5\xde\xb8q\x83!C\x86R\xe1\x8b\xcaT\xaeZ\x9dQ\xa3\xbe'000\xd2uQ\xe5\xeaZ\x99Y3\xa6\xd0\xa7\xdf`\xf6\xfft\xc0\xb4\xfc\xed\x86\x30k\xc6\x94p3\x88\t\xc5\xe2%\xcbx\xe0\xed\xfd\xde\xf2\xe4\xc9\x93\x93\xdc\xd9\xf9\xbd\xe5\xf\xbc\xbdY\xb4\x64y\\\x84\x16\xef>\x86\xfe\x8d\x8b}\x81\xb7\xf7\x43r\xe7-\xcc\xe6-[\xe8\xdb\xb7?\x15\xbe\xa8\xcc\xb7\xdf\xe\xc3\xcb\xcb\v\x80\x9d\xbbv\xd1\xbe\x63W\0\xf2\x15,A\xb6\x1c\xf9\x39\x7f>$a\x15\xd9\xbe\xe1\x43|\f\xfd%\"\"\"\"\xb1\x43\xc7=\xe1\xfbX\xc6\xd1\x1\x81\x81\xfc~\xecx\xa8\x65\x6\x83\x81\x41\x83\x86\xf1\xec\xd9s\x16\xcc\x9b\x85\x8dM\xcc\xae\xc9}\xf7\x1cHX\x8c\x46#\xbf\xfc\xf2\v\x9d\xbbt\xa5ReW\x86\xf\x1f\x81\x87\x87\a\xf0\xef\xdd\x42\0\xcd[}I\xb6\x1c\xf9\x39u\xeat\x84\xed\x95*U\x8a\x8d\x1b\xd6S\xb5jUlm\xa3\x9f\x88\xfaX\xfaXDDb\x9f\xc6L\xe1\x8b\xad\xefS\xb3\xde\x31\x34}\xea$sV\x17\xae\x37o\xde\0\x90&Mj\xd3\xb2\xb6\x1d:3lH?\xca\x95+G\xd6\xacY\xf1\xf5\xf5\xa5\x65\xab\xb6|^\xa1\x1c\xdf\x8f\x1a\xce\xdd\xbbw\x19\x31j,O\x9f=\xa5s\xa7N\0\xac]\xb7\x8e\x5\v\x96\x30\x64p\x7f\x1c\x1d\x1dY\xef\xbe\x81#\xbf\x9f\xa2\x43\xfbv\xa6z\xcf_\xb8\xca\xe4)?\xd0\xb6mk\x92%K\x86\x83\x83\x3K\x96,\xe1\x97\x83\xffG\x8f\xee\xddx\xfd\xfa\rk\xd7\xad\xe7\xee\x9d\x31L\x9d:\x85\x17/^\xd0\xaaM\a\xdc\x9a\x36\x62\xfa\xd4)\xbcx\xf1\x9c\xc7\x8f\x1f\x63\x63\x63\xc3\xf3\xe7\xcf\xc3]\xf7\xa1j\xd5\xacn\xda f\xcd\x98\x2`\xfa\xfd\xbf\x99\xc3\x84\xc8\xc5\xa5\x14i\xd3\xa6\xe1\xe1\xc3G\xa6\x65\xbd{v\xa3_\xdf^\0\xfc\x30u&\xf3\x17.1\xad\xcb\x90>=e\xcb\xb8\x44Z\xaf\xa7\xa7'G\x8e\x1e\xfs\xdd\x17\x9f\x97K4W\"%\xf6\xfe\x8d\xab}A@`\x10\x3\x6\rg\xfe\x9ci\xd4\xa8Q\x8dU?\xae\xa1_\xff\x81\xac]\xf3#\xe5\xcb\x95\xa3{\xd7\x8e\xcc_\xb4\x82\xcd\x1bV\xe3\xe0`O\x96,Y\xa2\xb4o\xf8P\x89\xbd\xbf\x44\x44\x44\x44$v\xe8\xb8'b\x89}\x1c\x1d\x10\x18H\x8f\x9e\xfd\x39\xf0\xcb\x41\xa6N\x19O\xb3\xa6\x8d\x1\x98\x34\x65\x1a\xa7N\x9f\x61\xfbVw\x92%s\x88q;a\x9d\x3y\xd7\x96\xad[\x99>}6C\x87\xe\xc4\xd9\xc9\x89\x8d\x1b\x37\xd3\xa8Is\xf6\xef\xddI\x8a\x14)X\xb3j\tm;tf`\xbf\x1e\xb8\xbaV%s\xe6\xcc\x11\xb6gaa\x81\x95\x95U\x8c\xe3\x86\xc4\xdf\xc7\"\"\x12\x37\x34\x66\x8aXl|\x9f\x9a\x35\x31\x34\x7f\xfe\x92\xf7\x96\r\x1c\xd8\x87\xec\xd9\xb2\x9a\xa5~\xa3\xd1\xc8\x93'OX\xb1\x62%\xb5jT&[\xb6l<~\xfc\x4\x80\xfe}\xba\xd1\xb5k\x17S\xd9\xb5k\xd7\xe2\xec\xec\xc4\x88\x11\xc3M\x3\x1a{{\a\x6\r\x19Ns77,--\x99\x38i\x1a\v\xe6\xcd\xa4R\xa5J@\xc8U1\x85\x8b\xbd?\xdf\xee\xfcys\xc8\x9e=;\0\xcf\x9e=c\xe2\x94\x99l\xdb\xbc\x8e\xa2\x45\x8b\x2!\xb7y\xd7o\xd4\x82\xc1\x83\a\xf2\xe8\xd1\x63\x1e=~F\xfd\xfa\xf5(P\xa0@\xa8z<<<\xc3]\x17\x1d\xefn\x10@\xa2\x1aXU(_\x96\xfd{\xb6Q\xc2\xe5s\0\x92;;\xd3\xafo/,-Cnb\x1b\x38\xa0\xf\xab\xd7\xb9\xe3\xeb\x13r'\xd6\xfe\xbd\xdbH\x9e Tb\xed\x63\x11\x11\x89;\x1a\x33\x45\xce\xdc\xdf\xa7\x66M\f\xd5\xa8Y\xf5\xbd\x65\xc9\x9d\x9d\x62\\\xefZ\xf7\xad\xacu\xdfj\xfa\xbbY\xe3z\x8c\x1b;&\xd4\x15,oO\f\xbf\xf5\xd7_\x17\xa8P\xbe\\\xa8\x32%J\x14' 0\x88{\xf7<\xb0\xb6\xb6\xc2\xcf\xff\x35\xf9\xf2\xe5\x33\xadO\xf2\xbf\x13\xc7\xff\x95&\xcd\xbf\x83\xb9\xbbw\xef\x12\x1cl\xa0\x41\xe3\x96\xef\x95{\xf9\xf2%\xb9r\xe5\xa4N\xcd*\xb4m\xff\x15-\xdc\x9aP\xa5JeJ\x96,\x89\x95\x95U\x84\xeb$bQ\x9d\xe6\xcb\xd2\xd2\x92\t\xe3\xbe\xc7\xc2\xc2\x82u\xeb\x37\x2\xd0\xa6us\xc6\x8d\x19\x65\xda\x91H\xec\x8b\xad}AX\x1c\x1c\xfe\xbd\x2/k\xd6,\0\xf8\xf9\xbd\f\xb7|d\xfb\x86\xe8&\x86\x44\x44\x44\x44\x44\x62J\xc7=\x89\xc3\xdb\xa4\xd0\x85\v\x17\xd9\xe0\xfe#\xd9\xb3\x65%c\x86\xf4\f\x1e:\x1ckk\x1b\xd6\xfc\xb8\x94\xdc\xb9rD\xbb\xfe\xa8\x9c\x3y\xcb\xc3\xc3\x83g\xcf}\xc9\x9b\x37\xafiY\xd2$I\xa8\xe6Z\x99K\x17/G;\x6\x11\x11\x91\x84Lc\xa6\x98\x33[b(00\x88\x9a\xd5\xab\x85\xb9\xee\xedm\xcf\0\x41\x41\x1f\xf6<\x9d\xb7\x36\xae_\x89\xb5\xb5\r\x19\x32\x64 C\x86\xf4XXXDX\xfe\xd5\xab\xd7\x4\a\a\x87Zfm\x1d\xf2\xef\xda\xda\xda\x10\x10\x10\0@p\xf0\x87=W\xc4\xde>\xe4$\xf4\x92\x85\xb3(X\xb0`\xa8ui\xd3\xa6\xc5\xc6\xc6\x86\xf9\xf3\xe7q\xed\xda\x35~\xfd\xf5\x37\x86~;\x9c\x34iR\xb3\x64\xf1\x42\x9c\x9c\x9c\"\\\xf7\xa1\xde\x9dG\x10\x12\xd7\xed\xd8\xbf\x1f;A\xdf\xfe\x83M\x7f?\x7f\xf1\x82\xe9\x33\xe6\xd0\xbf_/\x8c\x46#?L\x9di\xca\0\x3\xd4\xae\xdb\x84\x19\xd3'S\xbe\xdc\xfbwt\xfd\x97\xa5\xa5%\xe3\xc7\x8e\xc2\xc2\x2\xb0\xb0`\xdc\xe8\x91\x89\xf2\x83\x9eX\xfb\x37\xb6\xf7\x5\x11\x89l\xbf\0\x91\xef\x1b\xa2+\xb1\xf6\x97\x88\x88\x88\x88\xc4\x1e\x1d\xf7\x44.\xb1\x8d\xa3\x43%\x85\xd6\xffH\xb6l!\x17\xa7\x35m\xd2\b+kklmlp)U2\xc6\xed\x44\xf5\x1c\xc8\xdbs\x1b\xff=AfgkG\x92$v1\x8e\xc3\x1c\x12[\x1f\x8b\x88H\xdc\xd3\x98)r\xe6\xfe>5Kb\xc8\xc3\xe3\x1e\xe5\xbf\xa8\x1aj\xe\xc0\x88\x94*Y\xe2\x83\xeao\xd3\xb2\te\xca\x44\xde\xc9\xef*X\xb0\0\xdb\xb6\xef\xa4O\x9f\xde\xd8\xda\xda\x2p\xf5\xeaU\x9c\x9d\x92\x91)S&\x2\x2\x2\xb0\xb2\xb2\xe4\xfc\xf9sd\xcc\x98\x1\x80\xa0\xa0\xa0H\xeb\xcd\x94)#\xa9R:\xe3\xe1\xe1\x41\x8d\x1a\x35\xc2,caaA\xbe|\xf9\xc8\x97/\x1f\xf5\xea\xd5\xa5\xfc\x17\xd5\xb8p\xe1\"\x15*\x94\x8fp\xdd\x87xwCx\xdb\xf9\xef\xce\x33\x98\xd0\aX\xa7N\x9d~o{\x99\x33o!\xab\xd7\xba\x83\xd1\xc8\xf3\x17/B\xad{\xe0\xed\xcd\xc9?NG\xe9\xc3\xe!\x1f\xf8qcF\x99~Ol\x12k\xff\xc6\xf6\xbe\xc0\x1c\"\xdb\x37\x44Gb\xed/\x11\x11\x11\x11\x89]:\xee\x89Xb\x1cG\xcf\x99\x33\x9f\x8b\x17/\x85J\n\xbd\xd5\xa8\x41=\xb3\xb4\xf1!\xe7@2g\xce\x8c\x95\x95%\xe7\xce\x9d#c\xc6\x8c\0\x4\a\a\xf3\xfb\xb1\x13\xefM\x91\x13\x18h\xfe\x8b\xf3\"\x93\x18\xfbXDD\xe2\x9e\xc6L\x11\x8b\x8d\xefS\xb3$\x86\x66\xcdY@\xef\x9e\xddh\xd7\xb6U\x94\xca\xdb\xd8\x44\xff\xaa\xfc\xa8j\xd2\xa4\x31\v\x16-e\xe8\xd0\x61\x34m\xda\x98g\xcf\x9e\x31\x61\xe2\xf\x8c\x1a\xf1-\xe\xe\xe\x38\x38\x38\x30\xa0o\xf\x86|;\x92\x97/_\x92\x31\x63\x46\xb6n\xdd\x1ei\xbd\xf6\xf6\xf6\f\x1f\x36\x98\x81\x43\x46`ccC\xf1\xe2%\xf0\xf5\xf5\xe5\xee\xdd;\xb4h\xd1\x82[\xb7n\xb1y\xf3\x16\\\\J\xe1\xec\xec\xcc\xe9?\xff\xc4\xca\xca\x92,Y2G\xb8\xee\x43\x1c )\0\xe7\xff\xfa\x8b\xd4\xa9S\x93\x35kV\x6\r\xe8\xc5\xd0\x61\xa3\xf0\xf7\xf7'S\xa6L\xec\xdf\xff\x13~~~4h\xd0\0\0'''r~\x96\x85\x9d;w\xe3\xe8\xe8H\xea\xd4\xa9\xe3\xe4\x61\xdb\x89\xb5\x8f\x45\x44$\xeei\xcc\x14\xbe\xd8\xfa>5Kb\xa8o\xef\xee\xf4\xed\xd3\xd3\x1cU\x99M\x9a\x34i\xd8\xb1m\x13\v\x16,d\xf0\xd0\xef(\x90?/cF\x8f\xa4Z5WS\x99\xae]\xbb\xe0\xe4\xec\xc4\xdau\x1bp\xb0OJ\x95*\x95\x61\xdbn\xd3\xb4R\xe1i\xdc\xb8\x31\xc9\x93'g\xc3\xc6M\xcc\x9a\xb3\x80\\9?\xa3n\x9dZ\0!w X\xc0\xf4\x19\xb3\xf0\xf0\xf4\xa2\x64\x89\xa2\xb8\xaf]A\xd6\xacY\xf1\xf4\xf4\fw\xdd\x87\xc8\x97/w\xb8\x9d]\xab\x66u\xe6\xcf\x99\x41\xbe|\xb9?\xa8\xce\xb8\x66o\x9f\x94\xe1\xc3\as\xf6\xccy:~\xd9\x9eS\xa7O3x\xe8p\x2\x3\x43\xee\xda\xb2\xb5\xb1\x61\xd2\xc4\x31\x94vqa\xf9\xcaU\x94(Q\x8c\xa4I\x93\xc6[\xbc\x45\n\x17\xe6\xaf\v\x17\x38\xfa\xfb\xb1H\xcb\x96-[:Fm%\xe6\xfeM\x88\xfb\x82\xff\x8a\xca\xbe\xe1\x43$\xe6\xfe\x12\x11\x11\x11\x91\xd8\xa5\xe3\x9e\xf0%\xd6q\xb4\xa3\x63\x32\x1c\x1d\x93\xc5\x63\xfb\x8eL\x9d<\x86\xd9s\x16\xf0\xfc\xd9s\xfa\xf5\xebK\x97\xce\x9dI\x99\"\x5\x9b\x36o\xe5\xe9\xd3g\xb8V\xad\x8c\xfb\xfa\x35$K\x16\x12\xa7\x85\x85\x5s\xe7\xcc\x64\xe2\xa4\xc9\f\x18\x38\x84\x1\xfd\xfb\xc4Ib(\xb1\xf6\xb1\x88\x88\xc4=\x8d\x99\xc2\x17[\xdf\xa7\x16\xd7n\xde\x37\x66\xc9\x98&\xda\x81\x1d \x11|\xfd\xfau\x8e\x1f?A\xae\\9\xb1\xb4\xb4\x62\xed\xdau\xb4n\xd1X\x3\xa0xR\xadJe\x9c\x92\x39\x2P\xa6t\xa9x\x8e&D\xe6,Y\xd8\xbdg\x1f\xbb\xf7\xec\x8b\xb4l\xd9\xb2\xa5\x13\xec\x87=.$\xe6}\x81\x88\x88\x88\x88H\\\xd1q\x8f\xc4\xb7\xdb\xb7oS\xaf\x61\xf3p\xd7\x37mT\x97\xe9\xd3\xa7\xc6\x61\x44\"\"\"\xef\xd3\x98)v\xc5\xf8\x8e\xa1\xc4\xec\xfa\xf5\xeb,[\xb6\x9c\xa3\xc7N\x90)Cz\xea\xd6\xad\x43\x8b\x16\xcdI\x92$I|\x87&bV\xbarNDDDDD>v:\xee\x11\x11\x11\x11\x89\x9cY\xee\x18J\xcc\xf2\xe4\xc9\xc3\xe4\xc9\x93\xe2;\f\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91\x38\x61\x19\xdf\x1\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88H\xdcPbHDDDDDDDDDDD\xe4\x13\xa1\xc4\x90\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\xc8'\"\xd4\x33\x86\xee\xdd\x7f\x14_qH\x2\xa3\x87q~\xda\xb4/HX\xf4y\x14\x11\x11\x11\x11\x31?\x1d\xf7$~:V\x12\x11\x11\x89\x1e\xdd\x31$\"\"\"\"\"\"\"\"\"\"\"\xf2\x89\bu\xc7\x90\xae\xb4\x10\x11\xd0\xbe@DDDDD>~:\xee\x11\x11\x11\x91O\x95\xa6\x92\x13\xf9\x88\x45\xf7@G\xfb\x2\x11\x11\x11\x11\x11I,t\xdc#\"\"\"\x12\xb9w\xc7La\xde\x31\xe4\xe7\xf7\x1a\x9f\x97~\x4\x5\x1b\xe2\x36\x32\x11I\x10\xb4/\x10\x11\x11\x11\x11\x91\x84\xca\xd6\xd6\x86$v\xb6\x38;\xda\xc7\xa8\x1e\xdd\x31$\"\"\"\x9f*\xeb\xff.\xf0z\xf8\x94\xa4\xb6\x36\x64\xcd\x9c\x6k+=\x82H$1{\xf5:(\xda\xaf\xd5\xbe@DDDDD\x12\xa2\x37o\x2y\xe1\xf3\n\x8f\xfb\x8f\xc9\x9c\x31u|\x87#\"\"\"\x92\xe8\x84J\f\xf9\xf9\xbd&\x89\x9d\r\x19\xd2\xa5\x88\xafxD$\x1\xd0\xbe@DDDDD\x12*;;\x1b\xd2\xa6\xb1\xc1\xca\x1a\xfc\xfc\xdf\xe0`o\x17\xdf!}\xd4\x2\x2\x2\xf0\xf4\xf4\xe4\xa5\xaf/\x81\x41\x81\xf1\x1dN\xb4\xd9X\xdb\x90\xcc\xd1\x91L\x99\x32\x61kk\x1b\xdf\xe1\x88\x88\x88\xc4\xabP\xb7\x1\xf8\xbc\xf4#mj\xe7\xf8\x8a\x45\x44\x12\b\xed\vDDDDD$\xa1svr\xe0\x85\x8f_|\x87\xf1Q\v\b\b\xe0\xca\x95+<{\xf6\x34Q'\x85\0\x2\x83\x2y\xf6\xec)W\xae\\! \xbe\xc3\x11\x11\x11\x89W\xa1\x12\x43\x41\xc1\x6M\x19%\"\xda\x17\x88\x88\x88\x88\x88H\x82gmeE\xb0!8\xbe\xc3\x88\xb1{\xf7\x1f\xc5[\xbb\x91\xb5\xed\xe9\xe9Ipp\xf4\xa7(\x8f\xa9\x34\xe9\xb3\x9a\xbd\xce\xe0\xe0 <==\xcd^\xaf\x39\x45\xa5o$aJ\xcc}\x97\x98\x63\x17\x91\xf\xa7\x33\xbf\"\"\"\"\"\"\"\"\xf2\x9e\x97\xbe\xbe\xf1\x1d\x42\xacx\xf9\xf2\xe3\xfc\xbf\x44\x44\x44\xa2J\x89!\x11\x11\x11\x11\x11\x11\x11\x11yOb\x9f>.<\x81\x81\x1f\xe7\xff%\"\"\x12UJ\f\x89\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88|\"\xac\xe3;\0\x11\x11\x11\x11\x11\x11\x11\x11\xf9x\xdc\xf3\xb8\xf@\x96\xcc\x19\xe3\x39\x12Ih\x2\x3\x43\x9eYec\x13;\xa7$\x1f=~\xcc\x83\a\xde\x14.T0Z\xaf\xbfp\xf1\x12\xe9\xd2\xa5%m\x9a\x34\x66\x8e,\xe6\xf6\xec\xdd\xf@\xdd:\xb5\xe2\x39\x92\xa8{\xfd\xfa\x35\xcbW\xae\xe\xb5\xec\xeb\x8e\xed\xb1\xb3\xb3\x8b\xa7\x88\x44\xe4-%\x86\x44\x44\x44\x44\x44\x44\x44\x44\xc2\xe0\xbe\x61\x33\xa7N\x9f\x89r\xf9re]h\xd6\xb4q,F\x94\xf0\xdd\xf3\xb8\xcf\xc8\xef\xc7\x3\x30\xe6\xfb\xef>\xea\xe4\xd0\xccYsMI\xb0w\xb9\x94*A\xcb\x16\xcd\xe2!\xa2\xc8\xadX\xb9\x6\x80\x8e_\xb6\x8d\xf3\xb6\x3\x3\x83\xe8\xd5g\0\xe\xe\xeL\xfb\x61\x42\xac\xb4\xe1\xed\xed\xcd\xd9\xb3g\xa3\x9d\x18:{\xf6,\xc5\x8a\x15M\x90\x89\xa1\xcd[\xb7\x3\x89+1t\xeb\xd6\x1d&O\x99\x8e\xad\x8d\r\0\x1\x81\x81T\xa9T\x91\xfc\xf9\xf3\xc6sd\xff\n\n\n\xe6\xe4\x1f\xa7\xa8P\xbel|\x87\"\x12\xa7\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\t\xc3\xa9\xd3g\xd8\xbdg\x1f\xb9s\xe5\x8c\xb4\xec\xcb\x97/\xd9\xbc\x65\x1b\xaf\xfc_\xd3\xae]\xab\x38\x88.\xe1y\x9b\x14z\xfe\xfc\x5\0#\xbf\x1f\xffQ'\x87n\xdf\xb9\xc7\xdf\x7f\xdf\x34\xfd}\xe5\xeaU\x82\x82\x82\x1\x12lb\xe8\xb7\xa3G\x81\xb8O\f\xbdM\n\xfdv\xe4(?\xae\\\x12\xa7mK\xdc\t\xe\xe\xc6\xca\xca\xca\xf4\xf7\xdf\xff\x84|>\xfe<\x15\xb2\xdd\x15.V\x86\xbf\xff\xb9\x19*1\xf4\xdf\xd7\xc4\xa5\xe0\xe0`\x6\f\x1c\x8aSr'%\x86\xe4\x93\xa3\xc4\x90\x88\x88\x88\x88\x88\x88\x88H8r\xe7\xca\xc9\xce\xed\x1by\xf2\xe4I\xb8\x65\x9c\x9c\x9c\xb0\xb2\xb2\x66\xc0\xc0\xa1\f\x1f\x35\x6\xe0\x93K\xe=x\xf0\x90\x91\xdf\x8f\xc7\xda\xca\x9a\xec\xd9\xb2\x2\xf0\xf2\xa5\x1f#\xbf\x1f\xcf\xc4q\xa3H\x9f>m n\xeaq\x11\x11\x11\x11\x11\x11\x11\x91\b ]:\x1ex{\xb3s\xf7^\x1a\xd6\xafk\xf6\x98\xf6\xed\xff\x99i\xd3g\xb1\x66\xf5r\xd2\xa7KgZ\x1e\x1c\x1c\xcc\xc0\xc1\xdf\xb1}\xe7n\xa6N\x19\x1f\xe3\xe9\xf9\xee\xfc\xe7\xee\x41\x1b\x1bk*V\xfc\x1c\b\xd9\xa6\xd6\xbbob\xce\xdc\x85\xdc\xf7\xf2\xc2\xce\xce\x8e\x8a\x15?g\xec\xe8\xe1\x64H\x9f>F\xed\x46\xc6h4\x12\x10\x10\x10\xe1\x33\x9d\x16.^\xc6\xe4)\xd3)[\xc6\x85U+\x97\x98\xa6\xfd\x93\x8f\x9f\x65lV\x1e\x1c\x1c\xcc\xabW\xaf\x62\xb3\t\x11I\0^\xbe|\xc9\xaaU\xabi\xd9\xaa=\x5\n\xbbP\xaf\x41S&M\xfe\x81\xdbw\xee\0\x10\x10\x10\xc0\xf3\xe7\xcf\x31\x18\f1n\xcb\xdf\xdf\x1ft\xa5!\x8c\0\0 \0IDAT\x1f\x1f\x9fP\xcb\x16.\\L\xf7\x9e}\xe2t\0\xd7\xed\x9b^\x8c\x1b?)Je\x8f\x1e\xfd\x9dz\r\x9a\xf2\xe8\xd1\x63\0\xa6N\x9d\x41\x87\x8e\x9d\xa3\xd5n\x8d\x9a\xf5Y\xb6lE\xb4^\x1b[\xfe\xfb\xff\xfc\xf7\xffMH|||\xf0\xf7\xf7\x8f\xef\x30\x44\x44\x44\x44\xe4#emm\xc5\xb4\xa9\x93\xf8,{6\x8e\x9f\x38\x15\xdf\xe1\xc4\t/\xaf\a\xbcz\xf5\x1a[[[z\xf7\xec\x12\xea\xce\xa0\xf4\xe9\xd3\xd2\xbbg\x17lmm\t\b\b\xe0\xc1\x83\x87\xf1\x18i\xecx7)\xd4\xb7O\xcf\xf8\xe'R\xae\x95+\xe3Z\xb9r\x9c\xb4u\xfd\xda\r\x9a\x34k\xc5\xb0\xef\x46R\xda\xa5$+\x96-\xc2`0\x12\x14\x18\xc8\xf6-\xee\xec\xdd\xb9\x95\xf4\xe9\xd3\xd2\xfe\xcbN\x9c:\xfd\xa7\xd9\xda\x35\x18\f\xacY\xbb\x8e\x35k\xd7\xf1\xf8q\xe4\xc7\xa5\x8f\x1f?6\x95\x37\xc7y\x8b\x98\x18\x35z<\xc5J\x96\xf\xf3\xe7\xc8\xd1\x63\x1c\x39z,\xdc\xf5\xa3\x46\x8f\x8f\xb7\xb8_\xbdz\xc5\xe4\xc9\xd3)S\xba\x14\xc7\x7f?\xc4\xf2%\v\xe8\xdb\xbb;\xbbvl\xc2\xadY#S\xb9\xc6\x8d\x1a\xb0\x65\xd3:\xfa\xf6\xe9\xc9\xf2%\v8\xfe\xfb!J\xbb\x94\x64\xd2\xa4i\xbc~\xfd\xda\xac\x31\xed\xdd\xf7\x13=z\xf5\xe7\xe6?\xb7i\xd1\xb2=^\xf\x1e\0!\xe7\xab\a\r\x19\xce\xb6\xed;\x99\x32y\xbcY\x12\xf8?\xfd|\x80\xaf:\x7f\x63\xfa\xe9\xd5w\x90i\xdd\x8c\x99s\xf8n\xc4hj\xd6te\xc5\xd2\x85\x8c\x1b;\x8a\xbfo\xfcM\xdd\xfa\xcdx\xfa\xf4i\x8c\xdb\xeO@@\0\xcd\x9a\xb7%o\x81\xe2\xcc_\x18\xfe\xf4\x8d+W\xae\xc1`0p\xec\xf8In\xdd\xbc\x15k\xf1H\xc2\x13k\x89\xa1\xa7O\x9fQ\xba\xbc+\a\xf\xfd\xf6\xde\xba+W\xae\x92\x36\x63n\xd3O\x85/\\\xf9n\xf8(\xd3I\xe4\xb8\x10\x9b'W\xf\x1d:L\xda\x8c\xb9\xf1\xf3\xf3\x8b\x95\xfa\x45\x12\x92\x80\x80\0z\xf7\x19\xc0\xbe\xfd\ah\xd3\xa6\x5\v\xe7M\xa7\xf3\xd7_\xe2\xe7\xe7\x8f!8d@\xf5\xe7\x9fg\xc8S\xc0\xe5\xbd\x84Nt\xac\\\xb5\x9aN\x9d\xbf\t\xb5\xcch\x4\xe3\xff\xb3w\xd7QUe_\0\xc7\xbf\xa4Hc\v\xb6\x82\x5\"6\x16\x88\x9d\xa8\b\x2v+v\x8b\x8e\x39\x98\x83\xad\x63+\x6vb\x8c\x1\x88\xdd\x81\xa8\xa8\x63\xa3\x18\x98\x18\x34\xfc\xfe@\x9f>\x1\x41\x4u\xfc\xed\xcfZ\xac\xc5\xbb\xf7\xdcs\xf6}<\xe0\xbd\xbb\xef\x39;\xfe\xe7\xde\xd5\xf3\x35\t\t?\xff\xae\xa3\x1f\xe9W>\xdf\xae\xddz\xe1\xb5r\xf5\xcf\xe\x43\b!\x84\x10\x42\xfc\xc7\xa8\xa9\xa9\x61\x62\x62\x92\xe2\x97\x8e\x8e\xb6\xa2\xad\xba\xba\x1a\xba\xba\xba?1\xda\x1f'\xe4\x41(#G\xff\xc9\x82\x45\xcbRm\xbbp\xb1\x17\xee\x7f\x8c'\xe4\x41\xe8\xf\x88\xec\xc7\xf8\xaf%\x85\0\xda\xb6u\xa6m[\xe7L\x1f'&&\x96~\x83\x86\x92#\xbb\x11\x8b\x17\xcd\x45\x45\x45\x85*\x95+\xb2\x62\xd9\x42Z\xb6LL\x14\x14/a\xc6\x8e\xad\x1b(\\\xa8 }\xfa\xe\xce\xf0\xc4\x80\xf8qN\x9f>K\xe8\xa3GD\xc7\xc4\xf0\xf8\xc9\x13j\xd7\xb6\x65\xe0\x80\xbehjhp\xe1\x42 \xc3\x86\x8f\x62\xd8\xf0Q\\\f\fBCC\x9d\x81\xfd{S\xbb\xb6-\x8f\x9f\xbbv\xf3\xe4ib\xc2\xbe\x42\xf9r\x14.Z8\xd3\xe2\x11\xbf\x9eL[Jn\x98\xfbX*\x96\xb7\xa2I\xe3\xfa)\xb6\x99;s\x12\xf9\xf3\xe7\xe3\xe5\xabW\xac]\xbb\x81:\xf5\x9a\xe1\xef\xbb\x8b\x2\xf9\xf3gVXB\x88\f\x16\x14t\x99]\xff\xf8s\xfet\0\xf9\xf2\x99(\xb6\xdb\xdb\x37\xfd\x61\x31\xf4\xea\xd5\xfd\x87\x8d\x95\x1e\x35jT\xa3\x46\x8dj?;\x8c\x1f\xe6\xff\xed|\x85\x10\x42\b!\xc4\xef/[\xb6l\x1c?\xe2\xfb\xc3\xc7}\xf8\xf0!G\x8e\x9eHv_\x8d\xea\xd6\x98\x98\x98$\xbb\xefG\by\x10\xaa\xa8)\xe4\xea\xec\x98j{\xa7V\xcd\t\n\xba\xc2\x98q\x13\x99\x30n\x14\xf9\xf3\x19\x7f\xd7\xf8\x61\x61\xcf\xb8x\xe9r\xb2\xfb\xca\x96\x31'g\xce\x1c\xdf\xd5\x7fjRJ\n\x15+V\xf4\xbb\xcf-\xb3\xc4\xc6\xc6\xf1\xcf\xbe}\xbcz\xf1\x1a\x17\x17\xa7L\xadsr0 \x80\xe0\xe0\xebl\xdd\xbc\x16\x3}\x3\xc5v\xeb*\x95\x94\xda\x65\xc9\x92\x85\xe9\x9eShj\xef\xc8\xb6\xed;qI\xc3k\xe9w6h`\x1f\xbatn\x9f\xec\xbe\x31\x63=\0\x98\x30\xfe\x8f\x64\xf7\x1b\x18\xfc\xbcZM665X\xbdr)\x3\x6\r\xa7\x61\xa3\x16lZ\xbf\x1a\xb3\xe2\xa6\\\xb8\x10\x88\x83S\x1b\xe2\xe2\xe2\0\xd8\xb2m\a[7\xaf\xc3\xb2\x8c\x5\x37\xae\xffK\xab\xd6\xed\xc8\x9aU\x8b\xb5kVd\xd8r\x82;w\xef\xa1\xff\x80\x61\xd8\xd9\xd9\xf2\xf7\xbc\x99hjh\xb0\x61\xdd*\x9c];`W\xa7\x31\x91\x91\x91L\x9d\xe2\x41k\xc7\x96\0\\\xber\x95\xfd\xfb}\x19\x34\xb0_\xba\xc7\xd4\xd3\xd7\x43O_/\xc9\xf6\xb3g\xcf\xa1\xa6\xaaJ\x9b\x36\xad\x93\xb4wl\xd5\x9c\x1d>\xbb\xd3=\xe6\xd7\xc4\xc6\xc6\xb1|\xf9*\xc5\xe3\x87\xf\x1f\xe1\xb3k7\xcd\x9a|Z\xae\xcfg\xd7n\xfa\xf\x18\x46s\xfb\xa6\x8c\x1b\xeb\x8e\xbe\x9e~\xa6\xd5y\x12\xbf\xa6LI\f\xed\xda\xbd\x8f\x33g\xces8`\xcfW\xdb\x95\xb5\xb2\xa4\xb8\x99\x19\0v\xb5l\xa9\xdf\xd0\x9e\xd5\xab\xd7\x32j\xe4\xf0\xcc\bK\b\x91\t>\xce\x8c{\xfd\xfa\xb5Rb\xe8\xa3S\xa7\xcf`\xef\xd0\xe\0\xb3R\x15\x1\xb8y\xed<\xf7\xef\xdfg\xe3\xa6\xcd\x9c \x84<\b\xa5\x95\x83=\xdd\xbavAK+\xe5uz\x85\x10\x42\b!\x84\xf8^y\xf3\xe6\xe5\x62\xe0%\xd6\xad\xdf\xa4\xb4\xdd\xd5\xc5\t\xa7\xf\x17\x35\x7f\x86\x8fI\xa1W\xaf^S\xa8`\x1\x45M\xa1\x8fn\xfc\x9bXkc\xe2\x64O\xa5\xed\xba\xba:\xdc\xbdw?C\x92\x43\xd9\xb3g\xe3\xe6\xbf\xb7\xd8\xef\xab\xfc\x19\xae^];j\xd7J\xb9\x1eTF\xf8\xdaL\xa1Y3\xa6\x66\xea\xd8i\xb1\xc2k\r\x87\x8f\x1eU<\xaemkK\xdb\xb6\xce\xac[\xb7\x91?\xc6N\0\xc0\x30\x9b\x1M\x1b\x37\x62\xcd\x9a\xf5\xf8\x5\x4(\xda\xd6\xac^\x9dN\x1d\xdb~w\f\xfb\xf6\xfb\x63\x66Z\x94rVeSm[\xc6\xc2\x9c\x82\x5\xf3s\xe4\xe8\xf1\xff\xfb\xc4\x90\x89\xb1\x31&\xc6\xc9\xff^\xe8\xe9'\xce\x44,U\xb2\xc4\x8f\f)\xcdj\xd6\xa8\xc6L\xcf\xc9\xb4\xef\xd4\x9d\x98\xb8\xc4\x9aM\xde\xeb\xd6+\x92\x42\x90x\xbd\x63\xed\xba\x8dX\x96\xb1 *&\x9a\xd7\xe1\xaf\x99?oF\x86'\x85j\xdb\xd5\x62\xfe\xbc\x19\x8az9\xc5\x8a\x16\x66\xfd\xda\x95\xb8\xb6\xe9\xc8\xf8\xb1\xa3pvrP\x1c\x33\xc2}\fV\xe5,3d\xfc/EFD\xa1\xa1\xa9\x81z2\xd7\x36\x34\xb3\x64\xe1\xcd\xdb\x8c_m*..\x8e\xc1\x43\x46\xe0\xb3k\xfsf{bgk\xc3\x98q\x1e\xf4\x1f\x30\f\x80\x66M\x1a+\x92\x42\xf6\xcd\x9a\xe0\x39mb\xb2\xd7^\xc4\xef/\xc3\x97\x92\x8b\x8e\x8e\x66\xec\x84\xc9\x8c\x1f\xe7\x8e\x81~\xda\x33\xd5Y\xb3\x66\xa5\xb6\x9d\r\x97>\xdc\xed\xe1\xe9\x39\x93)S\xff\xc2\xcbk\x15\xf5\x1b\x36\x63\xe8\x30w q\x9d\xd0M\x9b\xb6\xd0\xca\xc9\x95\x9a\xb6\xf5\x98>c\x16o\xde\xbcI\xb1_\x7f\xff\0\xbat\xedI\x19\xab*t\xee\xd2\x83\xc0\xc0K\x8a}\x81\x97\x82\x18=f<\xd6\xd5j\xd1\xae}g\xce\x9f\xbf\xa0tlH\xc8\x3\x86\x8f\x18\x45\xa5*5i\xdf\xa1\v\xa7N\x9dV\xda\xff\xf2\xe5K&O\x99\x86M\xad\xfa\xd4\xaa\xdd\x10O\xcf\x99\xc9\xae\x45z\xfc\xf8\t\xf2\xe6/\xce\xde\xbd\xfb\0\xb8~\xe3\x6\x83\x6\xf\xa3\x42\xa5\x1aXW\xab\xc5\xc8Qc\x14\x45\xf1\x84\xf8\xaf)[\xd6\x12+\xcb\x92t\xee\xea\xc6\xa6M[x\xf4\xe8\xb1\xd2\xfe\x92%\x8a\xe3>\xac/\0\x9b\xd6-\xc3\x7f\xffv\xb4\xb5\xb5y\xf0\xe0\x1\xfaz\xfa\f\x1c\xd0\x87?\xc7\xff\xc1\xe5\xcb\xc1\xf4\xeb?Xi\t\xb2\x19\xb3\x17s\xf2\xd4\x19\xbau\xed\x88\xbd}S\x9a\x35mL\xc5\xf2\x16\0\xf8\xef\xdf\xce\xb8q\xc9\xdf%s1\xe8\x1a\xa3\xc7M\xc5\xc2\xc2\x1c\x8f\t\xa3\xc9\x96\xcd\b'\x97\x8e\x8a\xd8^\xbdzE\x93\x66\x8e\xa8\xa8\xa8\x30\x65\xd2x\xca\x97\xb7\xe2\xcf\xc9\xb3\xb8u\xe7\x41\xb2\xfd]\xb8p\x91&\xf6\xce\x94+W\x96I\x1e\x63\xc9\xaa\x9d\x95\xa7\x61/\x15K\xe3\xa9\xa8\xa8r\xe1\x42 u\xeb\xd6\x66\xce\xaci\xd4\xb1\xb3\xa5S\xb7~\x9c\x38q2\xd5\xe7\xcf\xca\xaa,\xa5K\x16#\xe0\xe0\xa7\x65\x37\x83._\xe6\xf6\xdd\a\xd8\xd5\xb2M\xf6\xdc\xf6\xfb\x1d\xa5\x96mM<\xa7M$::\x86:\xf5\x9b\x13\x1a\xfa\bH\xbck\xae\x61\x93\x96\x14.\\\x88\xd9\xb3\xfe\xc2\xbaJe\x9a\xb6hC\xd0\xe5+\0\\\v\xbe\x46\xe9R\xa5\x98!\x9e\xc5\xcb\xbc\xd1PW\xc7}\xf8`\xecj\xd5\xc4\xad\xefp\xe\x1d>\x2$\xbeiq\xeb\xdd\x9fG\x8f\x1e\xe3\xe1\x31\x16WgGf\xcd\x9e\xcf\x86\x8d\x9b\x93\xf4u\xf6\xec\x39\x9c\xdbv\xa3~\xbd:\xacX:\x9f\xee\xdd:)\x12\x92\xa9\xf5\xf3\xf1\xf5R\xb1\xbc\x5\xfe\xfb\xb7\xd3\xec\x1b\n[\x1e\x39v\x96U\xab\xd7\xd1\xa1\x43[\x6\xe\xe8\xcd\n/o&NJ[\x8d)!\x84\x10\x42\b\xf1\xfb\x89\x8a\x8a\x62\xc3\xa6\xadl\xd8\xb4\x95\xa8\xa8\xa8L\x1bGUU\x95I\x1e\xe3puqRlk\xe3\xea\xc4\xc4?\xc7\xa2\xaa\x9a\xa9\x65\xa3\x7fy\xaa\xaa\xaa\xf4\xe8\xde\x89zu\xed\x14\xdb\xea\xd7\xb3\xa3G\xb7\x8e\x99\xfa\xdc\xfc\x17\x97\x8f\xfb\xc8\x30\xdb\xa7\x99;\xaf^\xbc\xce\xd4\xb1\x42\x42\x42(Z\xb4h\x9ag \x94(^\x82\xd0G\x8f\x32\x35&\xf1kJ\xc8\xa0\xbaN\xfb\xf\xf8\xd2\xaf\xffP\xea\xd4\xb6S\xcc\x14\xfa\\\xb1\xa2\x85\xf1\xf7\xdd\x83sk\xe5\x1bpc?$\xb1\xbe\xc7\xdau\x1b\xa9Z\xa3\x8e\xe2\xab\x61\xe3\xc4%\xea,\xca\x94\xe6\xdd\xbb\xf7\x1c:tDy\xcc\xd8\x38\xf6\xee=\x90\xa6\xc4\xe9\xb7HL\n\xb9\xe3\xb3k\xf\xb3gM\xc3\xbeic\xf4\xf4t\xf1\x9c\x36\x91\xe6\xf6M\xe9?`\x18\xd6\xd5\xec\x12\x93\x42M\x1b\x33\xfd\xafI\x92\x14\xfa?\x96\xe1\x33\x86\x16-\xf1\"\x7f>\x13\x9a\x37K\xfb\x5\xb7\x8f\xde\xbf\x7fO\xd1\xcf\xd6\x32\x9c\x31{1-\xed\x1b\xd0\xadkG\xf2\xe4\xc9\x93\xd8\xff\xa2\xa5\xec?\xe0G\xff~nDFF\xb2r\xf5Z\xee\xdd\x1b\xcb\xecY\xd3\x93\xfc\xb3\xd9\xbe\xc3\x87q\xe3\xa7\xf0\xc7\xc8!t\xee\xdc\x81\xbbw\xee\xa2\xae\x9ex\xca\x17\x83\xaeq1\xe8\x1a\x33\xa6\x8d\xc7\xd6\xa6\x6>;w\xe3\xe4\xd2\x91#\x1\xfb\xc8\x9b\x37\x8f\xe2\xe2j\x1f\xb7n4o\xde\x8c\x8b\x17\x2i\xda\xa2\r~\xfb\xb7\x63\x61^\x9a\xf7\xef\xdf\xe3\xd8\xba-\xe5\xac,\x99\x30n\x14\xd1\x31\x31\xdc\xbd{/\xc9\x9b\x8f+W\xae\xd2\xbeSO<\xa7\x8c\xa3\x41\x83\xfa\xbc|\xf9\n\a\xc7\xb6\x38;\xb5\x64\xee\x1cO^\xbd|E\xd8\xb3gh|\xf1\xc7J\x88\xff\n}}}6o\xf4\x66\xdf\xbe\x3,X\xb8\x94\xde\xfdG\xe0\xda\xda\x9e\xb6m\\(_\xbe\x1c\xfa\xfa\xfaT\xf9\x30[\xc5\xd2\xb2\f\x86\x86\x86\0\x34hP\x9f\x6\r>-5\xa9\xa1\xa1N\xeb\x36\xddx\xf6\xec\xb9\xd2\x94\xffysg*~o\x1\x1a\x37\xaa\x8f\x8evV\xcc\xcdK\xa7\x18S\xe9\x92\xc5\xa8\\\xa9<\xae.\x89Su\xcd\xcd\xcdY\xb7\xd1\x87\x8b\x17\x3\xc9\x9b\x37\xf[\xb6n\xc7\xd8\x38\xf\x1e\x7f\x8eS\xfc\x3\xf4\xf5\v\xe0\xc4\xc9\xb3\xc9\xf6\x37{\xee\xdf\f\xee\xdf\x93\x9e=\xba\x1`cS\x13\xcf\x99\v\xd1\xff\x90\xfc\xd6\xd2\xca\xc2\xb4\xa9\x93\x14\xedmj\xd6`\xe7\xee\xbd\x9c\x8a\xadMMN\x9e:\xcd\xa1#'\t\xbe|\x6mmm\xac\xabT&2*\x8a\xe5+V)~\x86\x1f]\xbf~\x83\\9\x8dh\xd9\xb2\x39Y\xb3\x66\xe5\xf3{\x8aR\xeb\xc7\xb4X1lkT\xc2\xd6\xb6\xa6\xe2\xf5\xf3-\x85\x45\xbd\x96/\xc6\xc8(\xf1\xf5\x9b\xcd\xc8\x88V\xce\x9d\xe9\xd1\xbdk\xb2\x33\xe5\x84\x10\x42\b!\xc4\xef\xad]\x87\xae\x9c:\x9d\xf8\xf9\x61\xeb\xd6\xed\xac_\xbb\x32\xd3\x96\xe0QUUe\xe2\x9f\x63QQ\x1TT\xf0\x18?\xe6\xa7'\x85\xf2\xe7\x33\x66\xc2\xb8Q\x8c\x19\x37\x91\xb7o\xdf\x31|\xe8\0\xf2\xe4\xc9\xa5\xd8\xffq\xa6\xd0(\xf7!\x8am\x8f\x1f?e\xf4\xd8\x89\x18\x1a\x1a\x64\xc8Rr\xf0!9\xd4\xad\x63\xe2s\x83\n\xdd\xbbv\xc8\xb0\xe7\x66\xd6\xecy\xdc\xbd\x17\xa2\x34\x3\xe8\xbf\x92\x14\xea\xd4\xb1m\xb2\xb3~\x1a\xd6\xaf\x8f\xc7\xf8\xd7\x18\x66\x33\xa0\x61\xfd\xc4\xcf\xe3\x99UsH]]\xfd\x9b\xea\fGD\xbcGC=\xd3*^\xfc\xe7\x44\xc7\xc4p\xf3\xe6-\xa5mo\xc2\xdf\x2p5\xf8\x9a\xd2\xf6\x62\xc5\x8a&I\x82\xfc\f\x1\x1\x87\x19\x34t$\x86\x6\x6h\xa8%\xfe,\xdb\xb8\x38\xb3u\xdbN\xc5\xac!uu5E\xa2;\x8b\x86&\x6\xfa\x6\f\x1a:\x92\x19\x9e\x93\xa9\xf9\x9dK\xd2\x1f\x39v\x82zuk3o\xce\f44\xd4\xb9v\xed:\xb1qq\x98\x97.\xc5\xb6\x1d;i\xd6\xa4\x11\xba\xba\x89\xab\xb8\x9c\x38y\x9a\x42\x85\n\x90\xf7\xc3\xf5\xe6\xefU\xb4h\x11\x9a\x35i\xa8x\xac\x95\x35+\x90\x38\x1b\xaeq\xa3\x6\f\x1c\xe2\xce\x9f\x13\xfe\xc0\xa6\x46u\x9e<}\x86\xe7\xf4Y\\\n\xbaLo\xb7\x8c)\x8d\x90\x90\x90@\xf8\x9bp\xc6\x8e\x9b\xc4\x8e\x9d\xbb\x99=k\x9a\xd2\xb2qjjj\xfc\x39~4[\xb7\xedP$`\xff\x9c\x30\x46\x92\x42\xff\xe7\x32\xf4/nDD\x4\xf3\x17,e\xbdw\xea\x45\a?\x17\x15\x15\xc5\xf9\xf3\x17\xf0^\xb7\x95-\x9b\x94\xa7\x1f\x7f~Q\xf8\xc5\x8b\x97L\x98\x34\x9d=;7bU6q\x8a_\x9e x\xf0\x80\xa7\x61/i\xd1\xbc\x19\xa5K\x97\xfa\xa6\xe7I\x88_\x95\x9e\x9e\x1e\xadZ\xb5\xa4\x45\v{\x82\x82.\xb3~\xc3&\x1a\x35sf\xd1\xdf\x9e\xb4hn\x9f\xec\x31\t\t\t\x4\x4\x1c\xc2\xd7\xef AAW8y&\x10\x80\xa8\xa8O\xc5&\x1b\xd6\xb7M\xf1\xf7\xebk4\xd4\xd5\x31-\xf6)a\x91;w.\xb2\x19\xe9\x13\xfe\x61vaP\xd0\x65ljTS\xfa\aX\xa7\xb6-7n\xdcL\xd2Wll,\xbe~Gh\xd7\xd6\x45i{K\xfb\x6J\x8f\x1f?~\xc2\xee\xdd{\b8t\x84\a\xf\x1fq%\xf8\x66\x92\xb5\x93SR\xb7Nm\x86\x8e\x18\xcf\xd5\xab\xc1\x98\x99\x99\xb2r\xcdz\x16-\x98\x9dl\xdb\xb2\x16%prl\xa1x\xac\xa9\xa9I\x83\xfau\xb8x1q6d``\x10;v\x1d`\x87\xb1\xa9\xd2q]:&\xfe\r\x8a\x88\x88`\xf7\xee\x7f\xf0\xf\x38\xc4\xad[w\xb8\x10\x18L\xd1\xc2\xf9\x14\xed\x34\xd4\xd5)V\xb4\x88\xe2\xf1\xc7\xa4G\x96\xcf\x96L\xfb\xb8\x84\xdc\xdbw\xef\xd3t~\0\xf5\xea(/\xe5P\xa1\xbc\x15/_\xbe\x4\xe0\xe6\xbf\x37\x89\x88\x8c\xa6P1\xe5\xa9\xdb:\xdaZI\xfa\xa9Q\xb3:\x8b\x96\xac\xa0Q\x93\x96\xb4r\xb0\xa7n\x9d\xda\x98\x99\x99~s?\xe9\xa1\xa9\xf9\xe9\x8d\xf6\xc7\xbf\xdf!!!\x92\x18\x12\x42\b!\x84\xf8?\x13\xfa\xe8\x91\")\x4p\xf2\xd4\x19\x1e=~\x8cq\xde\xbc\x99\x36\xa6\xaa\xaa*\x1e\x13\xc6*\xbe\xff\x15|\x9e\x1c\xda\xb8y;\xfd\xfa|\xfd\x2\xe7\xc6\xcd\xdb\x89\x8d\x8b\xcd\xb0\xa4\xd0G\xaa\xaa\xaat\xef\xdaQ\xf1}F\ty\x10\xaata\xfe\xbf\x92\x14\xfa\x1auu5\xda\xb5sI\xbd\x61\x6(V\xac(;|v\x13\x17\x17\x97\xea\xc5\xe7\xf8\xf8x\xae]\xbf\x41m;\xdb\x1f\x12\xdb\x7f\xc1\xd3'O\x15\xb3N\xbe\xf4\xe5\xf6\x63\x87}\x7f\xfa\xe7\xd2\x43\x87\x8e\xd0\xa1s\xf\xac\xac,Y0\x7f\x96\"\xe1\x62\x65\x65\xc9\x96\x8d\xde\xac[\xbf\x11\x15\x15\x15\\\\ZcY&q%\x18\xb3\xe2\xa6\xec\xfdg\x1bn}\x6\xd2\xae\x43WV\xadX\x8c\x8dM\x8dt\xc7P\xd7\xae\x16\xd6\xd6U\xd0\xd0P\xe7\xd5\xabW8\xb7\xe9\xc4\xbc\x39\xd3\x1\xf0\xd9\xb9\x9b\xabW\x82\x19\x35r\x18w\xee\xde\xa3S\x97\x9e\xec\xdd\xb3\xfd\xfbO\xfc\x83\xca\x95*P\xb9R\x85$\xdbUTT\x98:\xf9O\xc6\x8e\x9fH\x9f\xbe\x83\x15\xdb\xf3\xe5\x33\xa6\x64\xc9\xe2\x8c\x1a=\x81\xa2\x45\x8b\x62Z\xacH\x92\x63\xd3*::\x1a\x97\x36\x9d\x38{\xee<\xaa\xaa\xaaI\x92\x42\x1f\xe9\xe8hS\xa1|9\xce\x9e;O\xc5\n\xe5\x15I2\xf1\xff+\xdd\x89\xa1'O\xc2X\xed\xbd\x81>n]\x15\xb5)V\xad\xd9\x80\x65\x19s\xcaZZ\xa4\xa9\x8f\x1a\xb6\x9f^\xa4\xb9r\x1a\xb1p\xfet*W\xaa\xa8\xd8\xf6\xe5\x45\xe1{\xf7\xef\x13\x17\x17O\xfd\x46Ikn\xbc}\xfb\x16\xf8\x94\x18\n\ty\xc0\xe3'\xcf)Q\xb2x\xb2\x63kg\xcdJ\xc5\n\xe5\x14\x8f\xbf\xbcp\x9c\xda\xc5\xd5\v\x17\x2\xa9V\xb5\xcaW/Z\xd7\xae\xd7\x1c\x80~}{+\xee\x1c\x32\x35-F\xd3\x46\xb5qt\xee\x80\xab\xb3\x3uj\xd7\xa2\x62\xc5\n\x92\xa1\x15\xbf\x5\x35\x35\x35\xca\x96\xb5\xc4\xd2\xb2\f\x8f\x1e?a\xcb\x96\xed)&\x86\xbcV\xae\x66\xcd\x9a\xf5\x8c\x1d;\x92^=\xbbq\xe5J0\xed:\xb9\xf1\xd9Jr\x19\xea\xf3\xf\bQQ\xd1i\x9e*\x1c\x1f\x1fO\\|<\xf1\x9f\xad\x89\xfb\xa5\x17/^`\xdf\xa2\x35\xce\xad[2r\xe4\x30\xb2\x19\x19Q\xb6\x42M\xae]\xbb\x9e\xa6\x31\x8c\x8d\xf3\xe2\xe4\xd0\x18\x7f\xff\0\xde\xbcy\x83V\x96,T\xacP>\xc5\xf6_\xde\x89\xa8\xa9\xa9\xa9\xf8;lddH\xe9\x92\xc5X\xbdr\x89R\x1b-\xad\xc4\xbbU\xfa\xf6\x1b\x84\x86\x86\x6\xdd\xbbw!O\xee\\\xac\\\xb5\x86\x19\xb3\x17\xa7y\xac\xc4mi:\xad\xaf\xfa\xbc_]\xbd\xc4u\x92O\x9f\xf0UZw7\xb9\xb1\v\xe4\xcf\x8f\xdf\x81\xdd\x9c\x39s\x16?\xff\0\xea\x37jI\xbb\x36\xad\x18?n\xcc\x37\xf5\x93\xc4\x37\xbe\xee>\xbe\x9e\x34\xb3H\x8d!!\x84\x10\x42\x88\xff\x37\xd9\xb3\x65\xc3\xd0\xc0\x80W\xaf\x13\x97\xe2\x32\x34\x34${\xb6l\x99>\xee\xaf\x92\x10\xfa\\\xfe|\xc6L\xf6\x18K\xb6l\x86\xa9\xb6\xed\xd9\xbd#/^\xbcR\x9aY\x94Q2\xfb\xb9\xf9\x1d\x92\x42\x1f\xadY\xb3\x1e Sf\t}\xae\xb9}\x13V\xae\xf2\x66\xdd\xbaM\xa9\x8e\xb5q\xf3\x36\x9e>\r\xc3\xbeY\x93L\x8dId\x9e\xca\x95+bbl\x8c\xa6\x86\x6\xb9s\xe5\xc2\xd7\xef \x81\x81\x97\xe8\xd3\xbb'VV\x96XY}\xba\x81\x33**\x8ay\xf3\x17R\xd6\xd2\x12[\xdb\x1ah\xa8\xab\x63\x62\x62\x42\x95\x34\xde\\\x9b\x92\x9a\x35\xab+\xbe\x7f\xf5:\\q3\xeaG7o\xdf\x6\x12o\xec\x8d\x88\x88\xf8\xae\xb1\xbe\x85\x9e\x9e.3<'3x`\x1f\x82\xaf\xdd\xc0\xd0\xd0\x80\x32\x65,\x88\x8c\x88\xa0]\x87\xae\x38\xbbv`\xfd\xda\x95\xe9N\xe\xdd\xb9}\x97\xb3\xe7\xce\x3\x90+g\xce\x64\x93\x42\x90xmd\x9d\xf7\n\xfe\xbdy\v\xd3\x62i_\xe6Q\xfc\xbe\xd2\x9d\x18\xd2\xd1\xd1\x66\xdf~?\xae]\xbf\xc1\x92\x85\xb3IHH`\xf1R/\xe6\xcd\xfe+\xcd}\x8c\x1b=\x4\xab\xb2\x96\x18\x19\x19\x91?\x7f~tt\xb4\xbf>\xa6v\xe2\xfe\x95\xcb\xe6\x61\x61\xa1\xbc\x8cT\xee\xdc\xb9\x95\x1e\xbf{\xf7\xa1x\xd7\x37\\e\xfe\xfc\x8d\x44j\x17W_\xbcx\x99\xa4\x88\xfc\x97:\xb6s\xc4k\xf5&\x2\x3/)\x8a\xdekii\xb1t\xc9\x2\x82\x83\xafq0\xe0\x10\x83\x87\x8e$W\xce\x1c\xac\xf4Z\xa2X\x96J\x88\xff\x92\x84\x84\x84$\xffLTTT\xd0\xd7\xd3\xfd\x94\x38\xfd\xb0?6\xf6S2f\xfb\x8e]4o\xde\x84\x9a\x35\x12\xffq\xdf\xbe}\xe7\xf3\xa6)RA\x85\xf7\x11\x91_o\x94\ns\xf3Rl\xde\xb2\x83\xc1\x83\x6\xa0\xa9\xa9\t$&{\xdf\xbdO\xfa\xc6@SS\x93j\xd6\xe5\x39z\xf4\x38u\xeb\xd6Ql\xdf\xba\x63/\xfdzw\x1\xe0\xca\x95`\xee\xdc{H\x87\xf6\xed\xc8\x96\xcd\b\x80\xb8\xb8x\xf6\xfb\x1dM\xd2_J\x1cZ6g\xb8\xfb\x18\x1e\x86\x86\xd2\xa5S;E\\_\xba\x18t\x8dW\xafW\xd0\xa5K' 1qu\xec\xf8\tj\xd9\xda\0\x89\xd3\x94\xb7\xfb\xfc\x83\x8e\x8e\xae\x62\xd9\xb3\x8f\x9e?\x7f\x8e\xcfn_\xb6nZ\xa9\x98uy\xe5Jp\x9a\x63\xcc,\xa6\xc5\x8a\x1\x89wDU\xfa\xec\xe6\x80\x94hhhP\xb5\xaa\x35U\xabZS\xb1\x62y\xdaw\xeaM\xff~}\xd2\xd4\x8f\x8a\x8a*\xd1\xd1\xd1\x8a\xc7\xaa\xaa\xaa\x14\xc8\x97G\xe9N\xc0\xe8\x14j'\xdd\xbf\x1f\x42\xc9\xf\x45>o\xdc\xf8\x17M\ru\n\x16(\x90\xb6\x93\x14\x42\b!\x84\x10\xbf\x8d,Y\xb2\xb0|\xd9\x2<\xa7\xcf\x46\x45\x45\x85!\x83\xfb\x93\xe5\xff\xf8\x86\xa1\x8f\x89\x9eg\xcf\x9f\x33w\xde\x62z\xf7\xea\xaa\xd8\xf7\xe4\xc9S\xfe^\xb8\x8c\xbe}\xba\x93#{\xf6LI\ne\xb6\xdf))\x4\xe0\x17\x10\0\x64~b\xa8\x9cUY\\\x9c\x1d\x99\xe2\x39\x83\xb2Ve0Oa\xd5\x9c+W\x83\x99<\xf9/\x1cZ6O\xf3\xaa\x1b\xa9QUU\xc5\xd5%\xf1\xfc\xd2\xb2\nI\x8e\x1c\x39h\xdb&qE\xa1\xb5\xeb\xd6gH\f\xdf+o\xde<\\ \xabW.e\xe2\xa4id\xcf\x9e\xbe\x9f\xab\x86\x86:k\xd7,'&&\x16\r\r\xa9\xd3%\xd2\xee\xbb^-\xd9\xb3gc\xe9\xa2\x39\x38\x38\xb5\xa7\xb8\x99).\xad\x1d\x32*\xae\x64\xe9\xe8h3~\xcc\b\xfa\r\x1a\x89\x86\x86\x6\x15\xca\x97#\xfc\xcd\x1b\xee\xde\xbdG\x1bW\xe5\v\xb0\xb9s\xe7\xc6\xad{{F\x8d\x9e@||<&&\xc6\xdc\xba}\x9b\xe2\x66\x66\x94JCf\xf4k\x17W\x8b\x14)\x8c\x83\x43\v\xa6\xcf^\xc8\x84?'bo\xdf\x8c\x98\xe8h\xae\xdf\xf8\x97\xe\xed?ef555\x99\x32\xf9OZ\xbb\xb4\xa7w\xdf\x81x\xaf^\xce\xd3\xa7\x61\xac\xdf\xb0\x89\xca\x95+bhh\xc8\x99\xd3gPSS\xa5@\x81\x1f\x9f\xcd\x16\"#\x94\xb1\x30\xc7\xde\xbe)~~\a\xb9\x14t\x15\x1d\x1dm\xac\xabT\xc4\x7f\xff\xe\xc5\xec\x8a\x2\xf9\xf3\xb3|\xf1l\xa6\xcf\x9c\xcb\xee\x7f\xf6\xf1\xd7\xb4\x89\f\x1c\xd0\x97\xb8\xb8\x38\x46\x8e\x9a@\xc9\x92\xa6,\xfa\xdb\x93\xa1\xc3\xc7\xa4:^\x9d:\xb5\x19\x31\xb4\xf\xee#\xc7Q\xaa\xa4\x19\vJ\x97N\xf5\x98/\xe5\xce\x9d\x9b=;73{\xce<\x86\xe\x1fM\x9d\xda\x36\x38\x39\x34&8\xf8\x46\xb2\xedk\xd6\xa8\xce\x6\xef%,]\xe6\xc5\xce]{i\xdc\xb0\x1e\x3\xfav#>>\x1e\x80\"E\n\xb3j\xc5|f\xcd\x9e\xcf\x9e\x7f\xf6\xd3\xaciC\xc5l\xa2\xe4\x34\xb7o\xc6\xd1\xa3\xc7\x19<\xd4\x9d\x5\x7f\xcf\xc6\xb4X1\xb4\xb4\xb4\xe8\xd5\xad\x1d\x37n\xde\xa2h\xd1\x94\xa7\xf\x97\xb5(A\xb5jU\xf0\xd9\xb9\x9b\xbb\xf7\x42\xa8mg\xc3?\xbb\xb6\x90={b\x82\x42WW\x97m[\xd6\xb1p\xd1R\xc6\x8e\xf5\xe0}D\x4\xd5\xaaV\xa6\x42\x85rhhh\xe0\xb5|!S\xa6Mg\xc0\xc0\x11\xd8\xd4\xb4\xe6\xaf\xc9\x63X\xb8x\xf9\x37?\x87_;\x9f\xf4\x98\x34q\x2\xdek\xd7\xb3|\xc5*\xfe\xbdy\x87\n\xe5,\xe9\xd8!\xe9\x9d.\xd9\xb2\x65\x63\xdf\xbe\x3\xac\xf1\xde\xc0\xfb\xf7\x11\xd4\xb6\xab\xc9*\xaf%\xa8\xab\xab\xa5\xa9\x9f^=\xbb\xf1\xe2\xc5\vz\xf4\xec\x87\x63+{J\x95*\x89\x9b[\xf\xe2\x13\xe2\x99>s.%\x8a\x9b\x32k\xba\a\x93\xa6LO2v\x8b\xe6\x8d\x99\x32u\x6\x39rd\xa7G\xf7\xce\x38\xb7vL\xd7\xb9\n!\x84\x10\x42\x88\xff\x96\x7fo\xde\xa2I\xb3\xa4K\xda\xa7vL\xf1\xe2i\xbf\x11\xf6w\x90\xcf$\xaf\xa2\xe6\xd0\xdd{\xf7\x1\x30\x34\x34`\xc2\xb8Q\xe4\x33\xc9\xbc\xfaK\x99)66\xeuu5|\xfd\x2\xf0\xf5\v\0\x12k\xe7\xcc\x9a\x31\xf5\xe7\x6\xf6\x1f\xa1\xaf\xaf\xcf\x96M\xdeL\x9c\xfc\x17\x13'Mc\xe2\xa4i\xcc\x9a\x39\r\xad,Y\xe8\xe9\xd6\x1f\x80\x36\xaeN\x8c\x1d=\xf2\xffz\xd6\xdd\xef\x42\x45\x45\x85\r\xebV*\x95\xcb\xe8\xed\xd6\x8d\xbe\xfd\x86\x10\x1e\x1e\xe@\xf8\x9bp&\xf5\x1eKU\xeb\xca\0\xcc\x9e\xf5\x17qqq\x19\x92\x90\xdb\xb5\xe7\x1f\xdeG\xa4\xbd\x16rF\xea\xdc\xa9\x1d\x9d;\xb5K\xd7\xb1\xfa\xfa\xfaL\x9d\xe2\xf1\xdd\x31HRH|+\x95\xeb\xb7\x42\x13\xf2\x1b\xe7\x4 $4\f\xb3\"\xdf\xfe\xcfz\xd2\x94\x19\xcc_\xb0\x84\xc0sG\xd3t\xf7tp\xf0\x35lj7\xe5H\xc0\xee\x14g\fyz\xce$\xe8\xcaUV\xaeP^\xca-!!\x1_?\x7f\xd6\xad\xdb\xc8\xe9\xb3\x17\x30+V\x84\xa6M\x1b\xd1\xa9\x63\xfb$}DFF\xe2\xb5r5>>\xbby\x1a\xf6\x9cjU+\xd1\xb3G7J\x96,A\xbd\xfaMi\xed\xd4R\xb1\x1c\x13@)\x8b\x8a\x8c\x1d=\x9c\xd6N\x89o\xf8\x9e?\x7f\xce\xc2\x45K\xf1\xf7?\xa4\xb8\xb8\xda\xabg7\x8a\x16M,j\x1ft\xf9\n\xf3\xe7/\xe4\xf8\xc9\x33\x14*\x90\x8f\x46\x8d\xea\xd3\xbd[\x17\x2\x2\xe\xe3\xdc\xb6\x1bw\xfe\xbd\x88\x8e\x8e\xew\xef\xdd\xa3I3G\xea\xd6\xb6\x61@\xff\xbe\xac]\xb7\x9e\x80\x43G\ty\xf0\x88\x8a\x15\xca\xd2\xabGW\xaaT\xa9\x9c\xe6\xe7[\x88\xb4\x8a\x88L\\\xba-$4\x8c\x8f\xbf\xe7)\xf9\xbcMz\xff\x16\xfc\x97M\x9c\x34\x95\xf0\xf0p\xa6N\x99\xf8S\xc6\x8f\x8e\x8e\xa6z\xcd:\xb8\x8f\x18\x9c\x62]&\xfc\x64\x31>\0\0 \0IDAT\xf1s\xf8\xfb\a(\xfdM\x17\x42\b!\x84\x10\xbf\x8e\x1b\xb7\x1f)}\x8e\xf9\x96\xcf=i\xb1~\xc3\x66\xce\x9c=\x9f\xae\xd8*V(\x87s\xeb\xd4\x13J\xdf\x1aSF\t\t\r\x3\xf8\xea\xd8\xe7\xcf\x9f\xfb\xf6~\x1f\x84\x32\x66\\\xe2\xe7\xaa\t\xe3\x46\x91?\x9fq\xfa\x2\x4r\xe6)@\xd8\xe3\xfb\xe9>\xfek\xca\x95K\xb9\xae+\xa4\xfc\xb3\xcf\x9f\xcf\x38\xd3g\xf\xa5\xe5g\x93^+\xbc\xd6\0\xd0)\x95%\xa7\x32\xda\xbd{!\xf8\xfa\x1f\xa4\\YK\xd4\xd4\xd5\x38u\xfa,\xb5\xedl)R\xb8P\x86\x8es\xf9\xca\x15\xce\x9f\xbf@\xfbv\xe9;\xbfU\xab\xd7P\xb6\xac%e,\xd2V?\xfdK\x99\xf9\xb3\xeb\xd4\xb5'\0+\x96.\xcc\xf0\xbe!sb\xbf\x1a|\x8d\x86\x8d[\xa0\xf9\x61\x46VtL\f{wo\xa7\x64\n5\xe1\xbf\xc7\xae\xdd\xffp\xef~\b\xbd{u\xe7\xc5\x8b\x17\xcc\x9c\x33\x9f\xe\xed\xdaR\xacha\xa5\xdaZw\xee\xde\x63\xb9\xd7*\x6\xf6\xebM\xb6l\xd9\x98\xbf`1\x5\v\xe4\xa7I\xe3\x86\x19\x1e\x93\x10\xbf\xaa\x90\xd0\xb0\x8cI\f%$$\x10\x19\x19I\xd6\xacY3:F!\xc4w\x90\xc4P\xcaVx\xad\"\x9b\x91\x11\xc6\xc6y\xb9}\xfb\xe#FM`\xcf\xaeM\x94,Q\xe2\xa7\xc4s\xf8\xc8QZ\xbbv\xe1\xf2\xc5\xe3\x8a\xd9?\xe2\xd7 \x89!!\x84\x10\x42\x88_Wf'\x86~\x84\xdf-1\x4\x89\xc9!\xe0\xbb\x92\x42\xf0s\x13\x43?Sf&\x17~w\xcf\x9e=\xe3\xc9\xd3\xa7\x94.\x95|M\xa3\xd4\\\xb9z\x95\\\xb9r\x91\x33G\x8et\x1d\x9f\x99?\xbb\xbd\xfb\xe\0\xd0\xa0~\xdd\f\xef\x1b\x32'\xf6\xa8\xa8(V\xae\xf2V\xda\xd6\xa1}\x1b\x99!&\xc4O\x16\x12\x1a\xf6}K\xc9}\xa4\xa2\xa2\"I!!\xc4\x7f\x46\x42\x42\x2q\xb1\xb1,\xf7ZMH\xc8\x43\xaaW\xab\xcc.\x9f\r?-)\x4\xb0\x65\xcb\x36\\[7\x97\xa4\x90\x10\x42\b!\x84\x10\xe2?\xef{\x13\x42\x42\xa4W\x8e\x1c\x39\xc8\x91\xce\xa4\xe\x90\xee\x84\xd2\x8f\x90Y\t\xa1\xcc\x94%K\x16\xbaw\xeb\xfc\xb3\xc3\x10\x42$C\x16\x1f\x14\x42\xfc\xdfQQQ\xa1k\xd7\xcet\xed\xfa\xeb\xbc\x39\x99=+iM\x1b\xf1k\xb0\xb3\xb3\xe5i\xe8\xbf?;\f!\x84\x10\x42\b!\x84\x10\x42\b!2\x84\xea\xcf\xe@\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\x42\xfc\x18\x92\x18\x12\x42\b!\x84\x10\x42\b!\x84\x10Ih\xa8k\xfc\xec\x10\x32\x85\x86\xc6\xefy^B\b!DZIbH\b!\x84\x10\x42\b!\x84\x10\x42$\xa1\xab\xa7\xf7\xb3\x43\xc8\x14\xba\xba\xbf\xe7y\t!\x84\x10i%5\x86\x84\x10\x42\b!\x84\x10\x42\b!~\x92\xfc\xc6\x39\x7f\xd9qMLL\b\xf\xf'..\xf6\aD\x94T\xd8\xe3\xfb\x19\xde\xa7\x9a\x9a:&&&\x19\xdeoF\xfaY\xaf\t\xf1\xfd\xfe\xcb?\xbb\xffr\xec\x42\x88o'3\x86\x84\x10\x42\b!\x84\x10\x42\b!D\x12\x9a\x9a\x9a\x94,Y\x12#\xa3l\xff\xf9\xe5\xd7\x34\x34\x34\x30\x32\xca\x46\xc9\x92%\xd1\xd4\xd4\xfc\xd9\xe1\b!\x84\x10?U\xa6\xce\x18\x8a\x8b\x8b#::\x9a\xacY\xb3\x66\xe6\x30\x42\b!\x84\x10\x42\b!\x84\x10\"\x13hjjR\xb8p\xe1\x9f\x1d\x86\x10\x42\b!2P\xa6\xcd\x18z\xf1\xe2%\x95\xaa\xd6\xc6\xcf\xffp\xb2\xfb\x3/\x5\x31t\x98;\xd5k\xd6\xa1R\x95\x9at\xeb\xee\xc6\x96\xad\xdb\xd2\xd4w||<\xaf^\xbd\":::#C\x16\x42\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\xf8\xad\x65\xda\x8c\xa1\x61\xee\x63\xa9X\xde\x8a&\x8d\xeb'\xd9w\xec\xf8\tZ\xb5\xee\xc8\xe8\x91\x83h\xd4\xb0>\xb1qq\xdc\xbf\x1f\xc2\xa3G\x8f\xd3\xd4wxx8f\xa5*\xb2\x63\xcbj\xac\xad\xab\x64t\xe8\x42\b!\x84\x10\x42\b!\x84\xf8?\x94\x90\0\xb1\xf1\xb1\xc4\xc5\xc6\x11\x17\x1fKB\x2$$$\xfc\xec\xb0\x84\x10\x42\b!R\xa4\xa2\xa2\x82\x8a\n\xa8\xa9\xaa\xa3\xa6\xae\x86\xba\xaa:**_?&S\x12\x43\xbbv\xef\xe3\xcc\x99\xf3\x1c\xe\xd8\x93\xec\xfe%KW\xd0\xa7Wg\xdcz\xf5\xc8\x8c\xe1\x85\x10\x42\b!\x84\x10\x42\b!\xbeIl\\,QQQ\xc4K\"H\b!\x84\x10\xff!\t\t\t$$@||\f1\xb1\x31\xa8\xaa\xa8\x90%K\x16\xd4\xd5RN\xff\x64xb(::\x9a\xb1\x13&3~\x9c;\x6\xfa\xfa\xc9\xb6y\xf6\xec\x39\x6\xfaz$$$\xa0\x92\x42\xea\xea\xed\xdb\xb7,Y\xba\x9c]\xbb\xf6\xa2\xab\xa7\x8b\xab\x8b\x13\xad\x1cZ\xf0\xee\xdd{\xccJU\x4\xc0\xde\xa1\x1d\0;\xb7\xaf\xa5r\xa5\x8aI\xfa\x38u\xfa\fK\x97\xae\xe0\xc2\xc5 lm\xaa\xd1\xaf\xaf\x1b\x5\n\x14\0\xc0\xd3s&\xaf^\xbf\xc6\xd0\xd0\x90\x3\xbe\xfe\xa8\xab\xab\xd3\xa9\x63[\x1cZ\xb6P\xc4\x94R\fjjj \xbb\x38v\xfc\x34K\x16\xcd\xa5L\x19\v\xce\x9d;\xcf\xc2\x45K\xb9\x1a|\x9dzu\xed\x14u\x96\xfa\xf5\xed\x8d\x65\xb9\xaaL\x9d<\x16'\xc7V\x8a\x38\xc7\x8e\x9d\xc0\x9b\xb7o\x99\x31}Z\xfa\x9fx!\x84\x10\x42\b!\x84\x10\x42\xa4KTT\x14\xd1\xb1\x31?;\f!\x84\x10\x42\x88\xef\x16\x9f\x90@Dd$\x9a\xea\x1a\x64\xc9\x92%\xd9\x36\x19^ch\xd1\x12/\xf2\xe7\x33\xa1y\xb3\xc6)\xb6\xe9\xd4\xb1-\xeb\x36\xfa\xe0>r4g\xce\x9cMR+(..\xe\xb7\xde\xfdy\xf4\xe8\x31\x1e\x1e\x63quvd\xd6\xec\xf9l\xd8\xb8\x19mmm6\xad[\x6\x80\xfb\xb0\xbe\xf8\xef\xdfN\xc9\x12\xc5\x93\x8cq\xe2\xe4)\xba\xf5\xe8K\x93\xc6\r\x99\x31}2\xea\xea\xea\xb8\xb4\xe9\xc4\xeb\xd7\xe1\0\xc4'\xc4\xb3x\x99\x37\x1a\xea\xea\xb8\xf\x1f\x8c]\xad\x9a\xb8\xf5\x1d\xce\xa1\xc3GR\x8d\xe1s\x8e.](Z\xb4\b\xc3\x86\xf6\xa7P\xa1\x82\x9c?\x7f\x81&\xcd](_\xde\x8aI\x1e\x63\xc9\x9aU\x8b%\xcb\xd7\x12\x1e\x1e\x8e\xbe\xbe\x1e\x9d;\xba\xb2\x65\xcb\xe\xc5\xf1\xef\xde\xbd\xc3{\xfd\x16Z4\xb7O\xdf\x13.\x84\x10\x42\b!\x84\x10\x42\x88t\x93\xa4\x90\x10\x42\b!~G\xd1\xb1\x31\x44\x45\x45%\xbb/Cg\fEDD0\x7f\xc1R\xd6{/\xfbj;\x87\x96-(nf\xc6\xba\xf5\x1bi\xd6\xb2\r\x5\xf2\xe5\xa5\xb7[7\x9a\x36i\x84\x91\x91\x11'O\x9d\xe6\xd0\x91\x93\x4_>\x83\xb6\xb6\x36\xd6U*\x13\x19\x15\xc5\xf2\x15\xabpui\x8d\xa5\x65\x19\0\xaaT\xae\x84\xb9y\xe9\x64\xc7\xf0\x9c>\x8b\xc1\x3zco\xdf\x14\x80\xf2\xe5\xac\xb0,W\x95\xb3\xe7\xceQ\xdb\xae\x16\xaa*\xaa\xa8\xa9\xa9\xd2\xbf\x7f\x1f\0lmm8\xe0{\x90\xc3\x87\x8f\x62kS3\xd5\x18>\x1a\x36\xb8\x37\xbd\xddz*\x1e\xcf\x99\xb7\x80\xc1\xfd{\xd2\xb3G7\0llj\xe2\x39s!\xfa\x1f\x66O5m\xd2\x88\xb9\x7f/\xe7\xfe\xfd\xfb\x14(P\x80\x93\xa7N\xa3\xaf\xa7K\xa5J\x15\xd2\xf9\xac\v!\x84\x10\x42\b!\x84\x10\"=b\xe3\x62%)$\x84\x10\x42\x88\xdfVtlLb\xdd\xa1/\x96\x95Kwb\xe8\xc9\x93\x30V{o\xa0\x8f[W\xb4\xb4\xb4\0X\xb5\x66\x3\x96\x65\xcc)ki\x91\xea\xf1\xe6\xe6\xa5\x99\xe8\x31\x9e\x41\x3\xfbq\xf8\xf0Q&N\xf6\xc4{\xed\x6\xb6lZ\xcb\xcd\x7fo\x12\x11\x19M\xa1\x62\x96J\xc7\xe8hk\xa5)\xb6\xc8\xc8H\x8e\x1c;\xcb\x91\x63g\x19\xea>Ai_xx\xb8\xe2\xfbzuj*\xed\xabP\xde\x8a\x97/_\x2\xa4\x39\x6[\x9b\x1a\x8a\xef\x63\x63\x63\x39\x18p\x8cvm]\x94\xda\xb4\xb4o\xa0\xf8\xbeL\x19\v\xcaZ\x94\xe0\xc8\x91\x63\xb4iS\x80\xdd\xbb\xff\xa1s\xa7\xb6)N\xe9\x12\x42\b!\x84\x10\x42\b!D\xc6KH \xc5\xbbh\x85\x10\x42\b!~\x17QQQ\xa8i\xab\xf3yQ\x9ft'\x86tt\xb4\xd9\xb7\xdf\x8fk\xd7o\xb0\x64\xe1l\x12\x12\x12X\xbc\xd4\x8by\xb3\xff\xfa\xa6~\xb2g\xcfN\x8b\x16\xf6\xe4\xcbgBc{\x17\xae^\rFWO\x17\x80\xd3'|QWSS\xb4M\xa9\x1e\xd1\x97\x34\x35\x35QSS\xa5W\xf7\xet\xee\xd4^i\x9f\xa1\xa1\x61\x8a\xc7}\xde\x7fzb\x88\x8f\x8f':&\x96\xf8\xb8\xb8\x14\xdb\xa8\xaa\xaa\xd2\xa1\x43\x1b\x36n\xdaJ\xc3\x86\xf5Y\xb7q\a\x87\xf\xeeN\xf5\x9c\x84\x10\x42\b!\x84\x10\x42\b\x91qb\xe3\x63\x89OH\xf8\xd9\x61\b!\x84\x10\x42\x64\xaa\xf8\x84\x4\x62\xe3\x62\xd1\xf8l\xd6P\xbak\f\xe9\xea\xea\xb0\xde{\x19\x17\x3\x83X\xb4\xc4\x8b\x43\x87\x8f\xa1\xa3\xa3\x83u\x95\x8a\xa9\x1e\x9b\x90\xcc\x1b\xaf\xacY\xb3\x2\xa0\xa7\xa7\x87i\xb1\x62\0<}\xf2\x94|\xf9\xf2)\xbeLLL\x80O\xc9\x99\x98\x98\xe4\xa7{\xab\xaa\xaa\xd2\xbci}n\xde\xbc\x85\x89\x89\x89R\x1f\xba\xba\xbai:\xbf\xd4\x62H\x8e\xa6\xa6&\xd5\xac\xcbs\xf4\xe8q\xa5\xed[w\xecUz\\\xa7v-N\x9c\xba\xc0\xfc\xbf\x17Q\xb3Z%\xc5XB\b!\x84\x10\x42\b!\x84\xf8\x31\xe2\x62S\xbe\xa9S\b!\x84\x10\xe2w\xf2\xe5\xfb\x9e\xef\xaa\x31\x94={6\x96.\x9a\x83\x83S{\x8a\x9b\x99\xe2\xd2\xda!\xd5\x63\xe2\xe3\xe3qh\xe5\x82\x65\x19s,\xca\x98\x93\xcd\xc8\x88g\xcf\x9e\xb3\x64\xa9\x17\xad[5\xc1\xd4\xd4\x14uu5\xda\xb7q\xc0\xad\xcf \xc6\x8f\x1bI\xa1\x82\x5y\xf0\xe0!ZZY\xb0\xb1\xa9\x89\xbe\xbe>\xa6\x45\v\xb0m\xbb\xfz\xfa\xfa\xe4\xcc\x91\x9d|\xf9\xf2)\x8d\xd3\xaf\x9f\x1bvu\xed\x19;n\x2\xf6\xf6\xcdP\x1N\x9e:M\xd7.\x9d\xd0\xd4\xd4L5\xce\x32\x65,\xbe\x1a\x43J\xfa\xf5u\xa3U\xebN\x18\x18\x1aP\xa9RE\xae\\\xb9\n@\xecgI\xac\xdc\xb9s\xd3\xc6\xb9\x39s\xff^\xce\x92\x5\x33R\x8d\x45\b!\x84\x10\x42\b!\x84\x10\x19+.>\xf6g\x87 \x84\x10\x42\b\xf1\x43$\xbe\xef\xf9T\xce&\xdd\x33\x86>*kiA\x97N\xed\b\xbc\x14\x84\xa3\x83}\xaa\xed\x13\x12\x12\x18\x36t ***\xac\xf0ZC\xef~C\xd9\xb2u\a\x1d:\xb4\x61\xda\xd4I\xa8\xab'.\xdb\x36i\xe2\x4z\xbbuc\xf9\x8aU\xb8\xb4\xed\xcc\x86\x8d\x9b\x15\x33\x85TTTX\xbcp.\xa1\xa1\x8f\xe9\xdbo0\x17/^J2N\xc9\x12%8x\xc0\x87\xf0\xf0\x37\xf4\xe8\xd9\x8f\x11\xee\x63\b\xf\xf'222\xcd\xe7\xf6\xb5\x18RR\xb3\x46u6x/\xe1\xdc\xb9\v\x8c\x1e\xf3'o\xc2\xdfP\xael)\xb4u\xb4\x95\xda\xd5\xb6\xab\x85\xa6\x86:6\x9f\xd5(\x12\x42\b!\x84\x10\x42\b!\xc4\x8f!\xab\xc8\t!\x84\x10\xe2\xff\xc5\x97\xef{T\xae\xdf\nM\xc8o\x9c\x13\x80\x90\xd0\x30\xcc\x8a\xe4MG\xa7\tDFF*\x96\x83\x13\x9f\xc4\xc7\xc7S\xbbnc\xfa\xf6\xee\x41\xcb\x96\xcd\x15\xdbG\xb8\xff\x81\x8a\x8a\n\x93'\xfd\xf9\x13\xa3\x13\xbf\xbb\x88\xc8\xc4;\xe0\x42\x42\xc3\xf8\xf8{\x9e\x92\xcf\xdb\xa4\xf7o\x81\x10\x42\b!\x84\x10\x42\xfcH7n?R\xfa\x1c\xf3-\x9f{\xde\xbc{\x9b\xe9\xf1\t!\x84\x10\x42\xfc*\xf4t\x12\xcb\xec\x84\x84\x86}\xdfRr\x1f\xa9\xa8\xa8HR\xe8\x83\xb7o\xdf\xb2\xc2k\x15\xc5\xcd\xcc\x30\x34\x34 \xe0\xd0\x61\xe2\xe3\xe3\xa9[\xb7\xb6\xa2\xcd\xb3g\xcfX\xb9\x66\x13\x9b\xd6\xaf\xf8\x89\x91\n!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\xe2\xffM\x86$\x86\xc4'\xd1\xd1\x31\xbcy\xf3\x96\xc9S\xa7\x13\x17\x17G\xdd:\xb5\xd8\xb4q\rzzz\x8a\x36\xbe\xbe\xfe\xe4\xcc\x61\x44\xc5\n\xe5\x7f\x62\xa4\x42\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\xf8\x7f#\x89\xa1\f\x96-\x9b\x11#\xdd\x87\x31\xd2}X\x8am\x9c\x9d\x9dpvv\xfa\x81Q\t!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\x42\x80\xea\xcf\xe@\b\xf1\xfb\x8b\x8b\x8b#\"\"\xe2g\x87!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\xff\xf7$1$\x84\xc8T/^\xbc\xa4R\xd5\xda\xf8\xf9\x1fN\xb2/8\xf8\x1a\xb9\x8cM\xd9\xb9kw\x8a\xc7\xaf\xf0ZE.cS\xc2\xc2\x9e}w,\xf5\xea\x37\x65\xd9\xb2\x94k{\x1d=z\x8c&\xcd\x1c\x32\x64\xac\xff\xba\xf7\xef\xdf\x13\x1e\x1e\x9ej\xbb\xa7\x61\x61\xcc\x98\x39\x1bg\x97\xf6XW\xab\xc5\xb0\xe1#\t8\x94\xf4g=p\xd0P\x86\xesW\xdav\xe3\xc6\xbf\x94\xb2\xa8\x88\xc7\xc4)\xc4\xc7\xc7'9&!!\x81!CGp\xf5jp\x92}111\xb4k\xdf\x99\x36m;&\xd9w\xee\xdcy\xfa\xf\x18\x8cu\xb5Z\x8c\xfa\x63,\xf\x1e \x96\x8a\xe5\xadh\xd2\xb8~\x8amF\x8f\x99Httt\x92\xed\xe1\xe1\xe1\f\x1f\xf9gf\x86\xa7$!\x1\xb9\xf8\xfe\x81\xd7\xca\xd5t\xed\xd6\xeb\xabm\x2\x3/\xd1\xa0\x61sn\xdc\xb8\x89\x93\x63KF\xb9\xf\x45G[\x1b'\x97.xL\x9c\xf2\xd5\xe7\x32$\xe4\x1\xed:t\xc3\xbei\x3\x46\f\x1f\x82\xaaj\xd2\x7fGG\x8f\x1eg\xcb\xb6\xdd\xe4\xcc\x99\x33\xc9\xbeU\xab\xbd\xd9\xe7{$\xc9\xf6\x93'Oa\xdf\xb2\rff\xa6L\x18\xff\a/^\xbc\xc4\xc1\xb1\r\x8f\x1f?\x1 \xf8\xda\x35\xdc\xfa\xf4\xa7\x89\xbd\x33'N]H\xf5\xfc\x1a\x36mM\xe9R%\x99\x39}\x12\x35kV\xa7\xff@w6m\xda\xf2\xd5\xe3\xd2\xe3iX\x18\x1b\x36\xef\x2`\xff\xfe\x3J\xfbr\xe6\xcc\xc9\xa6-;9v\xfc\x44\x86\x8f+\x84\x10\x42\b!\x84\x10\"}\xde\xbd{\xc7\x86\xf5\xeb\xe8\xd1\xad\v5\xaaU\xa1\xad\xab\x33sf\xcf$$\xe4\xfe\xcf\xe\r\x80\xc8\xc8H6o\xda\xc8(\xf7\xe1\xd4\xb1\xb3\xc1\xd5\xd9\x11\xcfiS\xb9q\xe3\xfa\xcf\xe-Y111\xbc~\xfd:\xd3n\xc6\x14\x42(\x93\x1a\x43\x42\x88L\xb3k\xf7>\xce\x9c\x39\xcf\xe1\x80=_m\x17\xfa\x38\x8c\xfd\xfb}i\xd2\xa4\x91\xd2\xf6m\xdbvdfxI\xd4\xa8Q\x8d\x1a\x35\xaa\xfd\xd0\x31\xff\xab\"\"\"\x18<\xd4\x9d\x36\xae\x8e\f\x1c\xd0O\x91\xd8i\xd2\xa4\x11\xb6\xb6\x35qt\xe9\x42U\xeb*\xd8\xd9\xd9&9\xf6iX\x18\x9d\xba\xf4\xa0J\xe5\xf2\x8c\x1f\x37\x1au\xf5\xe4\xff\x15y\xad\\\x8d[\x8fN\xe4\xcc\x99\x43i\xfb\xe5\xcbW\xf8k\xfa\\\x9c\x1c\x1a\xf3\xf2\xe5+\xc5\xf6\xf8\xf8x\xa6N\x9b\xc1\x88\x61\xfd\xe8\xed\xd6\x13\x80\x1a\xd5\xab\xd1\xbc\x65k6m\xde\x42\x9f\xde\xbd\x98<\xf9/\xcc\xcdKq\xe6\x84?\x1e\x13\xa7|\xf5\x1c\xf7\xee\xdb\x8fm\x8dJ\xf4\xeb\xd7\x1b\x80Z\xb5l\x89\x89\x89\xc1g\xe7nZ\xb7vL\xe3\x33\x95\x36\x87\x2\xe\x63Z\xb4\0}zwg\xe4\x1f\x1e\f\x1f\x36\x4\x1d\x1d\x1d\0r\xe7\xce\x85[\xcfN\xac\\\xb9\x86\xea\xd5\xaa\x66\xe8\xb8\x42\b!\x84\x10\x42\b!\xbe]tt4#\xdd\x87\x13\x19\x11\x81\x43+G:\xeau\xe1\xf5\xebW\\\xbcx\x81\xf8\xb8\x9f\x9f\xd8x\x10\x12\xc2\x88\xe1\x43\xd1\xd0\xd0\xa0\x61\xa3\xc6\x34h\xd8\x88\xf7\xef\xdfs-8\x98W/_\xfe\xec\xf0\x92\x15x\xf1\x2\x1d\xda\xb5\xe1\xf8\xa9\xb3\x18\x18\x18\xfc\xecp\x84\xf8\xed\x65jb(..\x8e\xe8\xe8h\xb2\x66\xcd\x9a\x99\xc3\b!~A\xd1\xd1\xd1\x8c\x9d\x30\x99\xf1\xe3\xdc\x31\xd0\xd7\xffj\xdbv\xae-\x99\x39k\x1e\xf5\xea\xd5\x41SS\x13\x80\xf0\xf0\x37L\x9f\x35\x9f\xben\x9d\x99\xfb\xf7rE\xdb\x3\xbe~\xec\xd8\xb1\x93\xd3g\xce\x63\x64\x64H\v\xfb&t\xec\xd8\x1e---E\x1b\x7f\xff\0\xbc\xd7\xae\xe7\xcc\xb9\x8bT(gI\xff~\xbd\xb1\xb4,\x3@\xe0\xa5 F\x8f\x19\x8f\xaf_\0\xc5\x8a\x16\x66\xe0\x80\xbe\x94+g\xa5\x38\xce\xb9m7\xee\xfc{\x11\x1d\x1d\x1d<=g\xf2\xea\xf5k\f\r\r9\xe0\xeb\x8f\xba\xba:\x9d:\xb6\xc5\xa1\x65\vTTT\0x\xfb\xf6-K\x96.g\xd7\xae\xbd\xe8\xea\xe9\xe2\xea\xe2\x44+\x87\x16\xa8\xa9\xa9%9\xcf\x98\x98\x18\xd6\xae]\xcf\xe\x9f\xdd\xdc\xfy\x88]\xad\x1a\f\x19\x32\x90\xe7\xcf\x9e\x63S\xbb)gN\xf8Q\xb0`\x1\0|v\xee\xa2k\x8f\x81<\r\xfd\x17\0O\xcf\x99\xc4\xc6\xc5\x92'wn\xd6m\xd8L\x19\x8b\xd2\f\x19<\0\v\xab\xealZ\xb7\x8c\x1d>\xbb\x38v\xfc\x34K\x16\xcd\xa5L\x19\vBB\x1e\x30o\xfe\x2\xe\x6\x1c\xa1\x44qSz\xbb\xf5\xa0r\xe5J\x8a\xf3\x9c>s\xe.\xad[\xb1\xfb\x9f}\xdc\xbf\xff\x80V\xe\xf6\xf4\xe8\xde\x15mmm\x16-^\xca\xb8?=\x1\xc8\x65lJ]\xbbjx\xaf\xf1R:\x17_?\x7f\xee\x87\x84\xd2\xadk\xe7$\xb3}llj\xd2\xce\xb5%\xb3\x66\xcfK\x92\x18z\xfd:\x9c\x9e=\xfbR\xa8`\x1\xa6L\xf6P\xfc\xbc\xbf\xf4\xe0\xc1\x43v\xee\xf1S$e>z\xfb\xf6-\x83\x87\xba\x33m\xcaxB\x1f\x86r\xe4\xe8\xa7\x65\xd7\xae\xdf\xb8\xc1\xb1\x93\xe7\x99\x36m\xa2\x62\x9b\x96\x96\x16N\x8e-\x99\x31k>}z\xf7\x62\xd9\xd2\x85hhh$;\xe6\x97tuuy\x18\xfa\x98\xf7\xef\xdf\xa3\xad\xad\r@X\xd8\x33\x8a\x17\x37K\xb6\xbd\xa7\xe7L^\xbez\x85\x91\xa1!\xfb\xf\xf8\xa3\x99\x45\x93\x9e\xdd\xbbP\xb6l\x19\x96,Y\x8e\xdf\xc1\xc3\xe4\x33\x31\x66\xe0\x80>\x8a\x9f\xc5G\xeb\x37n\xa6\xadkklj\xd6\xe0\xdd\xfbH\xce\x9c\x39\x8b\xad\xad\x8d\x62\x7f\x83\xfa\xf5\xa8;\xcb\x81q\xf\x1f\x62\x62\x62\x92\xa6\xf8\x85\x10\x42\b!\x84\x10\x42\x64\x8e\xe0\xe0\xab\xf8\xee\xdf\x87\xaf\xff!\xf2\x1a\x1b+\xb6\x37h\xd8\xe8+G\xfd\x18\xb1\xb1\xb1L\xf4\x98\x80\x95U9\xfa\r\x18\xa8\xf4\x19\xb8~\x83\x86?12!\xc4\xaf$\xd3\x96\x92\xfb\x95\xea\x8a|+O\xcf\x99t\xe8\xd4\xed\x87\x8f+\xc4\xef\x64\xd1\x12/\xf2\xe7\x33\xa1y\xb3\xc6\xa9\xb6\xed\xd0\xbe-\x8f\x9e\x84q\xc0\xd7O\xb1m\xfb\xe\x1fJ\x98\x15\xa5^\xbd:Jm\xaf\x5_\xa3t\xa9RL\x9e\x34\x9e\x9e=\xba\x30g\xfe\x12\x96\xafX\xa9t\xdc\xa0!#i\xd8\xa0\x1e\v\xe6\xcf\xa4\xb6\x9d\xad\x62\x46\xca\xc5\xa0k\xac\xdf\xb4\x93\xe2\x66\xa6xL\x18M\xb6lF8\xb9t\xe4\xd1\xa3\xc7\xc9\xc6\x15\x9f\x10\xcf\xe2\x65\xdeh\xa8\xab\xe3>|0v\xb5j\xe2\xd6w8\x87\xe'.a\x16\x17\x17\x87[\xef\xfe \xfd\xd1\xd4\xd4\x64\xe6\x8ci_\xbdi\xe0\x63]\xa1\"\x85\v)m\x9f\x35{\x1e%K\x98\xd1\xb4I\xd2\xd7\xd5\x93\xf\xcb\xc5\xe5\xce\x95[i{\xa1\x82\x5y\x1a\xf6\x92\xf0\xf0\x37iN\n\x1\x38\xb6jI\xd6\xacZt\xeb\xee\xc6\x86\r\x9b\x18=f<\xa1\x8f\x1e\xd3\xb3g\xf2\xff\x1f\xe2\x13\xe2Y\xb2|-Y\xb4\xb2\x30\xd2}\b\xd6U*\xd1\xb9{\x7f\xcaU\xaa\x45\xe1\xc2\x85\x18?n\x14\xf9\xf2\x19\xe3\xe4\xd2\x89\xfb!!\x8a\xe3n\xde\xbc\xc5\x91\x63g\xb1\xb3\xb3\xc5\xd8\xd8\x98\xbav\xd5\xf8g\xef~\xa5\xbe\v\x7fx\x1e\xae\x6_Ks\xfc\x42\b!\x84\x10\x42\b!2\xc7\xfbw\xef\x1R\xad\xcd{\xfb\xd6-F\xff\x31\x92:v6tl\xdf\x96}{\xff\x1\xe0P@\0\xee\xc3\x87\xd2\xa0\xae\x1d\xad\x1d\x1dX\xb9\x62\x39\x91\x91\x91\0\x84=}JY\x8b\xd2\xec\xd8\xbe\x8d\x11\xc3\x86P\xafv-\xc6\x8d\x19\xcd\xe3\xc7\x9f\xae]\xac\xf5^C\x1f\xb7\x9e\x44\x45\x45%\x19\xf3\xf8\xb1\xa3\x9c?w\x8e\xae\xdd{|\xf5\x33\xf0\xe8?F\xe2\x39m\xaa\xd2\xb6\x1a\xd5\xaa\xb0k\xa7\xf\0G\x8f\x1c\xa6\xb5\xa3\x3\xc7\x8e\x1e\xa1w\xaf\x1e\xb4l\xde\x94w\xef\xde\xf1\xf7\xbc\xb9\xcc\x99=\x93\xf5\xeb\xd6\xd2\xda\xd1\x81\xf1\x63\xc7\0\x89K\xeb-Z\xf8\x37\xe-\xec\xe9\xd0\xce\x95\x1d\xdb\xb7\x11\x17\x17\x97\xa6s:\x7f\xee\x1c\x1d\xda\xb5\x1\xa0j\xe5\n\x94.a\xca\xdb\x37o\xbe\xfa\xdc\n!\xbeO\xa6\xcd\x18Jk]\x91\xfa\xf5\xea&\xb9\x63\xfcG\xd7\x15\x11\x42\x64\xac\x88\x88\b\xe6/X\xcaz\xef\x65ij\x9f-\x9b\x11\x43\x6\xf5I\x9c\x35T\xb7\xeQQQx\xce\x98\xcb\xdfs\xa7\xa3\xf6\xc5l\x94\xbe}\x95g\x90\xdc\xbau\x87\xdd{\xf6\xe1\xd6\xab\a\x11\x11\x11\x8c\x19\x37\t\xcf\xa9\x1e\x8a\x84R\xb5\xaa\xd6\x8a\xb6\x66\xc5\nb^\xba$m\xdb\xba\x2`nn\xce\xba\x8d>\\\xbc\x18H\xde\xbcy\x92\xc4\xa5\xaa\xa2\x8a\x9a\x9a*\xfd\xfb\xf7\x1\xc0\xd6\xd6\x86\x3\xbe\a9|\xf8(\xb6\x36\x35\x39y\xea\x34\x87\x8e\x9c$\xf8\xf2\x19\xb4\xb5\xb5\xb1\xaeR\x99\xc8\xa8(\x96\xafX\x85\xabKk\xa5\xbe\xae\\\xb9\xca\x92\xe5k\xb9p&@1\xe3\xa3\x66\x8d\xeaiz~>7o\xeeLE\xa2\xeb\xc9\x93\xc4\x44\xc8\xb0\xc1\xbd\x15K\xa7\x1\xcc\x9b\xbf\0\xeb\xca\x15\xe8\xd9#1\x81\x61]\xa5\x32\x17.\x6\xb2\xf7\x9f}X\x98\x97V\xb4\x9b?o\x16zzz\x1f\xfa\nc\xfd\x86-\f\x1a\xd8\x9f\xbcy\xf3\xd2\xb8Q}t\xb4\xb3\x62\xfeY\xfb\xcf\xdd\xbe{\x97 b\b.m\xbbs\xc0\xffX\xe2\x39l_K\xae\x64j\x1e\x41\xe2\xeb\x45SC\x9d\xbe}\xdc\0\xa8^\xbd:[\xb6\xfaP\xa5J\x5:vl\xf@9\xab\xb2\xac\xf2\xde\xc2\xf9\xf3\x17(\x90??\x90\x38\xfb\xaa\\\xd9R\x98\x99\x99\x2\xd0\xacY\x13\x6\xf\x1d\xcd\xa8\x91\xc3\x15\x89\x37}}}\xf2\xe4\xce\xce\xad[\xb7\xa9[\xa7v\x9a\xcf\x41\b!\x84\x10\x42\b!D\xc6\x33\xb7\xb0\xc0\xdc\xa2\f\x3\xfa\xf7\xa1\x97[\x1f\xaaT\xb1&Wn\xe5\xcf\xc8\xb7o\xdd\xa2\xb5\x63Kz\xf5\xeeK\xd3\xa6\xcdx\xf9\xf2\xa5\xe2\xf3\xfc\xbf\xff^\xa7x\x89\x12\x34j\xdc\x94\x37o\xdf\x30y\xe2\x9f\xc4'$\xd0\xa9s\x17\0\x62\x62\xa2\x19\x39\x62\x18\x33\x66\xcd\xc1\xaev\x1d\xd6z\xaf\xc1}\xf8P\x96.\xf7\x42MM\x8d[7o\x12t\xe9\x12QQQd\xc9\x92\x45i\xdc\xeb\xd7\xafS\xae|\xf9\fY\x8e\xedr\xd0%fL\xf7\xc4\xd9\xc5\x15\x1d]]\xc5\x92\xe7\x8b\x16\xfcM\xe3&Mi\xd7\xbe\x3\xb9r\xe5\"..\x8e\xe1\x43\a\x93+Wn\xdcG\xfd\xc1\x83\x90\x10\x16/\\@\\\\\x1c-\x1dZ\xa5zN\xa6\x66\x66\xf4\x1b\x30\x90\x39\xb3\x66\xb2\x64\xb9\x17\xd9\x8c\xb2\x91\xf5\xc3\xca\x1d\x42\x88\xcc\x91)\x89\xa1\xffZ]\x11!D\xfa=y\x12\xc6j\xef\r\xf4q\xeb\xaaX\xcem\xd5\x9a\rX\x96\x31\xa7\xac\xa5\x45\x9a\xfbqh\xd9\x2\xcf\x19\xf3\xf0\xf5\xf5\xe7\xf9\xf3\xe7\x14+R\x88\xaaU\xad\x39\x7f\xfe\x82R\xbb\x88\x88\bv\xef\xfe\a\xff\x80\x43\xdc\xbau\x87\v\x81\xc1\x14-\x9c\xf\x80\x90\x90\a<~\xf2\x9c\x12%\x8b';\x86v\xd6\xacT\xacPN\xf1\x38w\xee\\d3\xd2'\xfc+w\xa1\xd4\xabSS\xe9q\x85\xf2V\xbc\xfc\xb0\x1e\xef\xcd\x7fo\x12\x11\x19M\xa1\x62\x96Jmt\xb4\x93\xce\x2\xbav\xfd:\x85\n\xe4\xfd\xae\x65\xc0\x1a\xd6\xb7M\xb6\x1e\x8f\xadM\r\xa5\xc7\x81\x81\x41\xec\xd8u\x80\x1d\xc6\xa6J\xdb\xbbttVz\xfc\xf9\x12pf\xa6\xc5\xb8{\xff\x11\xf1\xf1\xf1I\x96\x86KN\xfe|&\x9c=w!\xc5\xfd/^\xbc@SC\x9d\x1c\x39>\xd5\a\xea\xd0\xb6\x15\xe6\xe6\xa5\x19:b<\x96\x65,\xa8Y\xb3\x46\x8a\xc7\xbf\xe\x7f\x8d\xa5\x45)\xc5\xe3\xb0\xb0g\f\x1c\xec\xce\xcc\xe9\x93\x14\x35\x87\x12\x12\x94\x8f\x31\x34\x34\x4\xe0\xfd\xfb\xf7Jo\x80\xdf\xbd\x7f\xaf\xb4?\xad\x36m\xda\xc2\x8cY\xf3\xd8\xe0\xbd\x4+\xab\xb2\x1c>|\x94\xce\xddz\xe3\xd2\xda\x81\x91\xee\xc3\x92MN\xd5\xb6\xfb\x94\xecSWW\xa3\x62\x5+\x8c\xf3\xe6Ul322\xa2pA\x13\xde|x\xcd\xc5\xc6\xc6\x31\x66\xfc\x34\xca\x95-\xc5\xe9\x33g\x81\xf\xcb\xb0\xc6\xc4r\xea\xd4i\xea\xd6\xfd\x34\x63\xce\xd2\xa2\x14\xaf_\xbf\xfe\xa6s\x10\x42\b!\x84\x10\x42\b\x91\xf1\xf4\xf4\xf4X\xb6\x62%\a\xfd\xfd\xf0Z\xb1\x1c\xf7\xe1\x43i\xe1\xd0\nGG'\xcaX\x96\x45\x45\x45\x85\x65K\x17\xd3\xb6]\a:w\xe9\x9a\xe4\xf8\xae\xddz(=\xbew\xe7\xe\xbe\a\xf6+\x12\x43\0K\x96\xad\xa0j\xb5\xc4\xcf\x98:::t\xef\xda\x99\xc7\x8f\x1f\x61\x62\x92\x8f\x91\x7f\x8c\x66\xf0\xd0\x61\x8a\x65\xcf?w\xfb\xd6Mr~\xb8Y3#\xcc\x98\x35\x87\x82\x5\v&\xd9>i\xca\x34\xc5\x35\x8a\xd3\xa7Oq\xe2\xf8\x31\x8e\x9e\x38M\xd6\xacY\xa9P\xa1\"\xd1\xd1Q\xac\xf3^\xa3H\f\xa5vN\xe5\xcbW\0\xa0tis\xa9\x31$\xc4\xf\x90\xe1\x89\xa1\xcc\xaa+\x2\x89K\v-Z\xbc\x94\x63\xc7OS\xd6\xd2\x9cn];Q\xb9r%\xc2\xc3\xc3\xb1(k\x8d\xe7\xd4\t8::(\xda\x8f\x1f\xef\xc1\xcbW\xaf\x98\x35\xd3\x93\xf8\xf8x\xb6l\xd9\xc6\x86M[x\xfa\xf4\x19\xf6\xcd\x1a\xd1\xbd[\x97\x14\xefZ\xf\n\xba\xca\x1f\xa3\xc7\xb1\xe7\x9f\x3\x98\x97.A\xe7N\xed\x95\xea=|\xad\xae\xc8\xe3\xc7O\xd8\xb8q3\x1\x87\x8ep\xf3\xf6]\xaaT*O\xdf>\xbd\xb0\xb0\x30\a\xbe\xaf\xe\x85\x10\xbf\x1a\x1d\x1dm\xf6\xed\xf7\xe3\xda\xf5\x1b,Y8\x9b\x84\x84\x4\x16/\xf5\x62\xde\xec\xbf\xbe\xa9\x1f\x3\x3}\x86\xe\xeeK\xcf\xde\x83\x88\x8b\x8b\xc7{\xd5\xa2\x64\x13\x14}\xfb\rBCC\x83\xee\xdd\xbb\x90'w.V\xaeZ\xc3\x8c\xd9\x8b\x81\xc4i\xcb@\xd2\x8c\xc1W\xa4%\t\xf2\xb9\xcf\x93\x1\xba\x1f\x66\xa2\x9c>\xe1\x8b\xfag5\x85\x92K\x18\xbc\t\x7f\x43|\xfc\xd7\xe3J \xedq\x7f\x8d\x91\x91!\xa5K\x16\x63\xf5\xca%J\xdb\xb5\xb4\xbeR\xef-i\xc8_eZ\xac\x18\xf3\x17\xac\xe0iXX\xb2\x33h\xce\x9d=\x8fm\xcd*If\x84\xb6o\xd7\x86\a\xf\x1e\xd2\xa1\xb3\x1b>\xdb\xd7+\xcd`\xfa\\BB\x2\x31\x31\xb1\x8a\xc7\xf3\xe6\xfd\xcd\x83\xd0\xa7\xb4n\x93t\x19\xb7\\\xc6\xa6\xf4\xe8\xda\x16\xa7\xf\x7f\xff\x43\x1f=Rz\x13\xf9\xf0\x61(\x5\xf2\xe5\x41WW7\xcd\xe7\x17\x13\x13\xc3\xa8\x31\x1eL\xfas4\xb5j\xd9\x2\x89\x33y\xf4\r\xf4qr\xe9\x82\x93\xa3\x3\xa6\xa6\xc5R\xed'\xb9\xd7\x82\xaa\xea\xa7m\x81\x81\x81\0\x9c\xbfx\x95\xa6\xcd]\x95\xda\xed\xde\xb3W)1\x14\x1d\x1d\x43\xc2\x37\xbc\xb6\x85\x10\x42\b!\x84\x10\x42\x64\x1e]]]\x9a\x36\xb3\xa7Q\xe3&\x4\a_e\xfb\xd6-\xb8:;\xf1\xd7\x8cY4h\xd0\x10\x7f??<&MN\xf6\xd8\xc8\xc8H\xe\xec\xdf\xc7\xb1\xa3G\xb8s\xe7\xe\x97\x83.Q\xa8Pa\xa5\x36\x1fg\xe7\0\xe4\xcb\x97\xb8\xe2\xc4\xc7\xeb\x1ejjj\xc9&\x85\0\xf2\xe6\x35\xe6\xe4\xc9\xe3\xc9\xeeK\x8f\x9c\xc9|\xe6\xb7\xab]G\xe9\xc6\xd5;\xb7o\x13\x19\x19I\x5\xab\x32J\xed\xbe\x8c\xf1k\xe7$\x84\xf8\xb1\x32\xbc\xc6Pf\xd5\x15\xb9r\xf5*\xf5\x1a\xb6\xa4T\xa9\x92\xcc\x98>\x99\"E\n\xd3\xb4\x45\x1bN\x9e<\x85\xbe\xbe>\x1d\xda\x39\xb1\xc3g\x97\xa2}DD\x4\xde\xeb\xb7`\xdf\xacIb\\\x8b\x96\xb2v\xdd\x46\xfa\xb8\xf5`\xe4\x88\xc1\x9c=w\x81Q\x7f\x8cM\xf6\"[Tt4\xf\x42\x9f\x92;WNfN\x9f\x8c\x85yi\x9c\\\xbbr\xf0`\0\x90z]\x91\xf0\xf0p\x9e?\x7f\x8e\xab\xab\x13sfN\xc5\xd0\xd0\0G\xe7\xe\x8azI\xe9\xad\x43!\xc4\xafHWW\x87\xf5\xde\xcb\xb8\x18\x18\xc4\xa2%^\x1c:|\f\x1d\x1d\x1d\xac\xabT\xfc\xe6\xbeZ\xb6hNDd4\xd1\x31\xb1T\xaf^-\xc9\xfe\xe7\xcf\x9f\xe3\xb3\xdb\x97\x36m\x9c\xb1*kI\xde\xbcy\xb9r%X\xb1\xdf\xd8\x38qfFp\xf0\xf5\xf4\x9f\xd0\x37\x30-\x96\x98\x18x\xfa\xe4)\xf9\xf2\xe5S|%7+\xa8@\x81\x2\xdc\x7f\xf0\x98\a\xf\x1e&\xd9\xf7\xf1\x8d\xd2\xfd\xfb\x9f~\xdf\x9f>y\x9a\xee\xb8\xcaX\x98\xf3\x30\xf4\x31::\xbaJq\xe5\xc8\x91=\xcd}\xa8\xa0\xc2\xfb\x88\xc8\x14\xf7\xd7\xabW\x17\xe3\xbc\x39Y\xf0\xf7\"bcc\x95\xf6]\xbc\x18\xc8\xdf\x8bW)\x96\xe0S\xeaWE\x85\x61\x43\a\xd1\xb0\x81\x1d\x1d:vO\xf1o\x9c\x9e\x9e\x1e\x97\xaf~\xaa\xa7\xd3\xb6\x9d+\a\xf6nU\xfa*kQ\x2\x80\x3{\xb7\xd2\xb9S\aJ\x94(\x8e\x45)S\xf6\xec\xd9\xab\x38.66\x96m\xdb}\xe8\xd1\xbdS\x9a\xce\xfb\xe3\x1b\xd2\xb8\xb8\x38\xde\xbf\x8f\xe4\xcd\xdb\xb7J\xfb\xf3|X\x1a :&:M\xfd\xa5\xe6\x9f\xbd\xfb\xa9U\xb3\nOC\xffU\xfa\x9a=\xc3\x83\r\x9bw*f\xa7\x1\x4]\xb9\x96\xea\x12|B\b!\x84\x10\x42\b!~,555\xcc\xcd-\x18\x35z,v\xb5\xeb\xb0\xcbg\a\xd1\xd1\xd1\x84\x87\xa7\xbc\xe2\xc3\xc8\x11\xc3\x38z\xe4\x30m\xdbu`\xce\xbc\xf9\xf4\xe8\xe5\xc6\xdd\xbbwR\x1e$\x99\x9b\xeSR\xcc\xd4\x94\xc0\x8b\x17\xb9\x7f\xff^\xaam3\xea\xe6\xc3\x8f\t\x9f\xbd\a\xfc\x38\xe0\x1f\xa0\xf8\xf2\xd9\xbd\x37\xe5\x83\xbe\xe1\x9c\x84\x10\x19/Cg\fef]\x91\xd9\xb3\xe7\x33\xa0owztO\x9c~Y\xb3\x46u^\xbdz\xc5\xac\xd9\xf3Y_\xa5\x32\x8d\x1b\x35\xa4i\x8b\x36 \xe5\xc9\x93\x87z\x8dZ1\xd2}x\x92:\x19/^\xbc\0>\xd5\x32\xb1\xb1\xa9\xc9\xbbw\xef\x98\xfa\xd7Lj\xd5\xb2M\xb5\xae\x88\x99\x99)\xe3\xc7\x8fQ\xf4W\xb2\x64I\xbcVo\xe2\xea\xd5\xab\xd8\xd8\xd4Lw\x1d\n!~U\xd9\xb3gc\xe9\xa2\x39\x38\x38\xb5\xa7\xb8\x99).\xad\x1dR?(\x19\x6\x6\xfa\x1c\x39\xb8\x9b\xacY\xb5P\xfbl\x6\xceG\xfa\xfa\xfa\x14.h\xc2\xf2\xe5+\x89\x8d\x8d%<<\x9c}\xbeG\x14\xfbs\xe7\xce\x8d[\xf7\xf6\x8c\x1a=\x81\xf8\xf8xLL\x8c\xb9u\xfb\x36\xc5\xcd\xcc(U\xaa\x64\xba\xcf/%e\xcaX\xd0\xbe\x8d\x3n}\x6\x31~\xdcH\n\x15,\xc8\x83\a\xf\xd1\xd2\xca\x82\x8d\x8d\xf2\x12tU\xabZS\xd6\xa2\x4\x83\x87\x8c\xa0_?7\xb4\xb5\xb5\xb9p\xe1\"\x8e\xadZbbbL\x95\x8a\x96\xcc\x99\xfb\x37\xef\xdf\xbd#::\x86\x91\x63\x92\xbf\xab(-\x9a\x37o\xc6\xe2\xa5^\xf4r\xebG\x9f>=100\xe0\xea\x95\xabT\xacX\x81\"E\n\xa7\xde\x1P\xb8pAN\x9f\xbd\xc4\x1_?\f\xf4\xf5\xa9TI9\xd1\xa7\xaf\xaf\xc7\xcc\x19S\xe9\xd4\xc5\x8d\xfb!\xfh\xd2\xb8!\xfa\x6\xfa\\\xb9|\x95i\xd3\xe7\x31~\xf4P*V(\x9fl\xdf\x1a\x1a\x1aL\x9d\xec\x41\x87\x8e\xdd\xe8\xd6\xbd\x37\xeb\xbc\xbd\xc8\x96-\x9bR\x9b\xfc\xf9\xf2\xf1\x34\xec%o\xdf\xbe\x45WWW\x91\x84S>\xcf&\xe4\xcc\x99\x1d\xcb\x32\x9f\x96,\x1c\xe9>\x4\x97v=\xd0\xd4\xd0\xc0\xc2\xc2\x9c=\xff\xec#,\xec\x39-\x9a\xdb\xa7z\xce\xdbw\xf8\xd0\xab\xcfP\xf6\xf8l\xc0\xca\xaa,\x83\a\xf6\x62\xdc\x84\xa9\x44GGS\xb2\x64\t\"\xdeG\xb0|\xc5*\x1a\x35\xa8\x85\x99\xa9i\xaa\xfd\xa5\xe6\xdd\xbb\xf7\xacZ\xb3\x81\x89\x13\xfeH\xb2\xafZUk\xe2\xe2\xe2\x39~\xe2$\x8d\x1b\x35\xe4\xed\xdb\xb7<{\xfe\x8a\xfc\xf9\xf3}\xf7h\xa0\xdb\xd7\0\0 \0IDAT\xb8\x42\b!\x84\x10\x42\b!\xbeOBBB\x92\x15\"TTT\xd0\xd3\xd3\x43M]\x1d---J\x9b\x9b\x13t\xe9\x12\xb5\xeb\xd4Uj\xf7\xf2\xc5\v\xf6\xed\xfd\x87\x15+Wcn\x91\xf8y\xf6\xfa\xb5k|\x8b\xf8\xf8x\xa2\xa2\xa2\x14\x35}?g[\xcb\x8e\xe2%J0{\xe6\f\xc6M\xf0H\xf1\x6\x43\x3}\x3.\x5^T\xda\xf6\xe2\xf9\xf3o\x8a\xe3\xa3\"E\x8b\x2\xf0,,\f\xabr\xc9_\vH\xd5\x87\xe7\xf3\xcb\x9bO\x85\x10\x99#\xdd\x33\x86\x9e<\t\xc3s\xc6<\"#?\xddQ\x9e\xde\xba\"\xa1\x8f\x9e\xe2\xeb\xeb\xcf\xf6\xed>\x8a\xba\"\x9f\x8b\x8d\x8d\xe3\x80\xdf\x61\xac\xac\x94\xebx\xd8\xd4\xac\xc1\xa1\xa3\xa7\x88\x8e\x8e\xa6\\9+\n\x17\x34\xe1\xd8\xf1\x13\0\xf8\x1e\xf0\xa3\x63{g\xb4\xb5\xb5\xb9w\xff>qq\xf1\xd4o\xd4\x8a\\\xc6\xa6\xe4\x32\x36\xa5^\xa3\xc4\xf5-\xdf~q78@\xde Js\xcc\0\xb5k\xdb\xb1y\xc3\n\x82._e\xd4\xe8\thg\xcd\xca\xc6\xf5\xab\xd3\x34[*W\xce\x9c\x94+[Z\xb1\f]\xdf>n\xcc\x9d\x35\x95#G\x8e\xe1\xd6g\x10\v\x17-\xa5n\x9dZ\xcc\x9d=\x1d\r\r\x8do\x8a+9'O\x9e\xe4\xd5\xeb\xb7\xd4\xa8Q=\xc9\xbe\x2\x5\nP\xa3Z\x5v\xeeL\xac\xd5\xf7\xf0\x61(@\x86$\xa4\x84\x10\x42\b!\x84\x10\x42|\x9f\xc3\x87\xe\xd1\xadKG\xbc\xd7\xac\xe6\xa0\xbf\x1f\x87\x2\x2\x98\x39\xc3\x93];}prJ\xac\xef\xdb\xad{O\x96/[\xc2\xba\xb5\xde\\\xbdz\x85#\x87\xfs(\xe0 z\xfa\xfa\x14(X\x10o\xef\x35\x1c?v\x94}{\xff!\xe0\xa0\xff\x37\x8d?e\x92\aM\x1a\xd6#<<<\xc9>mmm<&M\xe1\xca\xe5 \xda\x38;\xe1\xbd\x66\x35G\xe\x1f\xc6\xdf\xcf\x97\x85\v\xe6s\xf6\xec\x19\0*W\xb1\xe6\xdc\xb9\xb3,[\xba\x98\x13\xc7\x8f\x33g\xd6\xcct?\x1f\xa5J\x95\xc6\xd1\xc9\x99\xe1\x43\x87\xe0{`?\xd7\xaf]\xe3\xa0\xbf?\xc7\x8f\x1fKs\x1fy?\\\x17\xdd\xe9\xb3\x9d\xc0\xc0\x8b\xbc{\x97\xf4\x9a\xad\x10\"\xe3\xa8\\\xbf\x15\x9a\x90\xdf\x38q\xad\xc8\x90\xd0\x30\xcc\x8a\xe4M\xe5\x90\x44o\xdf\xbe\xa3\x45\xab\xb6\x14,\x98_QW\xa4\xa2\xb5\x1d\xf3\x66\xff\x95\xea\x12R\xc1\xc1\xd7\xf8\x1f{w\x1eWc\xf6\ap\xfc\xd3\"-hA(\xfbO!\x92\xa5\x15\xa5\x94\x12\xb2\x14\tc\xdf\x97\x30\x8c}7\x86\x41v\xd9\xb2\x66\xdf\x97\xb1\x65\x9bl3vBegF\x83\xc6\x92I\xb6\xa8\xfb\xfb\xa3qu\xb5\x87\x62|\xdf\xafW\xafW\xf7<\xe7\x39\xe7<\xe7>\xf7\xd0\x39\xf7\xf9\x9e:\xae^\x9c;\xf5+\xc5\x8b\x17g\xd9\xf2`\xc6\x8e\x9f\xac\xdcW\xa4N\x1d'\xce\x9c\x39K\x83\xc6~\x84\x87\xfd\x8e\xbe~\x1J\xfd\xcf\x92\x15K\x2UB\xcc\xed\xdbw\x80\xee\xbd\xbe\xe7\xfa\x95\vhjj0o\xfe\x42N\x9c\x38\xc5\xc2\x5s\xb1\xaa^\x93\xf5k\x97S\xad\xaa\x15\xd7\xae]\xa7\xb6s\x3V,\x99\x8b\xa5\xa5\xea~\x16\x45\x8a\x14I1\xc1\x17\x10\x30\x83K\xe1\x11\xacX\xf6~\x7f\x8e#G\x8f\xd1\xbc\x65G\xfe\xb8y\x91\xdd{\xf6\xd2\xb3\xcf\xe0T\xf7\x15\x31\x35\x35\xe5\xec\xb9\xf3\x34\xf7m\xc7\xf4\x80\tXU\xa9\x42\x9e \xf4\xf2U\xd2\xb7,\xee\xde{\xc8\xbb\xcfyZ\x92\xe7\xc9\xcaX\x90\x9c\x42\xa1\xe0\xd5\xabW\xa9~cE\x88\xacHLL\xa4\x41\xa3\x66\x34\xf7nB\x97.\x9dr\xbb\x39\xb9n\xe1\xa2\xc5l\xd9\xba\x83=\xbb\xb6\x65y_,!\x84\x10\x42\x88\xff\xb2k\xb7\xee\xab\xfc\x1d\x93\x95\xbf{\x9e\xc9\xa4\xa3\x10\"\x9b\x1e\xfe\xfd\x37G\x8e\x1c\xe6\xc8\x91\xc3\x44\x86\x87\xa3\xab\xa7\x87\xb5\xb5\x35\xbe~\xad\x30\x37O\xfa\xa2\xa3\x42\xa1\xe0\xe0\x81\xfdl\xdc\xb0\x9e+\x91\x91T\xb6\xb4\xc4\xb7\xa5\x1fu\x9c]\xb8v\xed*sf\xcd$\"\xfc\x32\xf6\x35kQ\xa5\x8a\x15\xc1\xcb\x97\xb1k\xef>\x1e\xfe\xfd\x37\xceN\xb5X\xb3n\x3VU\xab\x1\xf0\xc7\x1f\x7f\xd0\xc0\xc3\x8d\xad;vbn^\x9eU+\x83\xf9\xfd\xb7\xe3L\x9b\x31\vmm\xedT\xdb\xf8\x34&\x86\xcd\x9b\x37r\xe1\xfcy.\\8O\x99\xd2\x65\xb0\xb3w\xa0\x41\xc3\x46\x94)[\x16\x85\x42\xc1\xb6\xad[X\xb3j%y\xb5\xb5qu\xab\xc7\xf9s\xe7p\xf7\xf0\xa0\x91Wc\x8e\x1d=B\xf7\xae\x9d\x39}.Le\xaf\xa0ys\xe7\x10\x19\x19\xc1\x9c\xc0\xf9*\xf5\xc5\xc7\xc7\xb3y\xd3\x46\xf6\xef\v\xe1\xf6\xad[T\xa9Z\x15?\xbf\xd6\x38\xd4\xac\x99\xa9k\x2\xd8\xbf/\x84\xf9\xf3\xe6\xa2\xab\xab\xc7\x98\xb1\xe3\x31\x33\x37\xff\xe4\xef\x9d\x10\xdf\xb2\xfczI\xfbo\xdf\xbd\xf7\x30\xfb\xa1\xe4\xde\xed+\xe2\xd1\xd0\x87\x85\x41\xcb)o^\xee\xa3\xf6\x15\x19\x32\xfcG\x80T\xf7\x15\xd1\xd2\xd2\xa2\x96\x43\r\x8e\x1d?\xae\xb2\x30t\xee\xfcy\xdc\xdd\xea\xa0\xa9\x99\xb4\x38S\xaf\x9e+c\x7f\f`\xcb\x96m\x14+jL\x15\xcb\xca\0\x98\x9a\x9aR\xa8\xa0\x1w\xa3\xa2\xf0\xf4\xf4\xc8\xb0=\xff\xc4\xc6\xb2'$T%-\xec\x42\x18.N\xf6\xe8\xe8\xe8\xa8\xec+\xf2\x61x%\x80\xe3\xc7~\xa3\x9aU%e\xe8\xa2wOU\xbdJg\xbf\xe!\xfe\v\xd4\xd4\xd4\x64QH|\x12\xea\xea\xeat\xed\xd2\x81I?O\xa7U\xab\x96*\x1bT~k\xe2\xe2\xe2X\xb8h\x19#\x86\xff \x8b\x42\x42\b!\x84\x10\x42\b\xf1\x5(ll\x8cO\xf3\x16\xf8\x34o\x91\x66\x1e\x35\x35\x35\xdc\xea\xb9\xe3V\xcf=\xc5\x31s\xf3\xf2)\x16VZ\xfa\xb5R\x96\x1d~\xe5\xba\xca\xb1R\xa5J\xa9\xa4}\xd7\xb6\x1d\xdf\xb5m\x97n\x1b\r\f\r\xe9\xdc%\xedh\x1ejjj4\xf3\xf6\xa1\x99\xf7\xfb\xed\0:v\xea\xac\xfc\xbd\xb6\xa3S\x8av\0\xf4\xea\xe3\x9fjyZZZ\xb4j\xdd\x86V\xadS~\xc1=3\xd7\x4P\xcf\xdd\x83z\xee\x19\xcf\xdd\n!>\xdeG\xed\x31\x94S\xfb\x8a\0\xf4\xef\xd7\a\xef\x16\xed\x31\x34\x34\xc4\xce\xd6\x86\xf0\x88H\xe6\xce[\xca\xbe=[\x94y\xcc\xca\x95\xc3\xb1\x96\x35\xdf\xf\x1a\xcd\xa4\x1f\x87+\xcb\xd2\xd3\xd3\x65\xdc\xe8\xa1\xf4\x1d\x30\x9c \x13;[\x1b\xae]\xbf\xc1\xe4\x80\xb9l\xdd\xb4\x12\xc8x_\x91\xd2\xa5Kq\xec\xe7\x99\xacZ\xb5\x86\x32\x65\xcb\xb0}\xfb/I\xfd\x95\x85\x8d\xdf\x85\x10\xe2[\xe7\xd5\xa8!K\x97\xad\xe4\xe2\xa5\xcb\x38\xd8\xdb\xe5vsr\xcd\x85\xb0\x8b\x14-R\x18\xaf\x46\rs\xbb)B\b!\x84\x10\x42\b!\x84\x10\xe2?\xe0\xa3\x16\x86\xe0\xfd\xbe\"\x81\xf3\x83\b^6?\xe3\x13\xd2P\xbe|\xfa\x8f\x6\xd6\xaeU\x93-\x1bW\xb0x\xc9rV\xaf\xd9H\xad\x9a\xb6\xec\xf\xd9J\xc5\n\x15T\xf2\xb5\xf0i\xc6\xd1\xe3g\xa8[\xd7\x45%\xbdyso\f\f\rX\xbbv\x3\xd3\x66\xcc\xc5\xbc\\Y\xbc\xbc\x1a\xa4Z\x97\x81\xbe>\xdeM\xeas\xe7\xce\x1f\xacX\xb9\xe{\xdb\x1al\xdb\xbc\n\xeb\x64\x1b\xa9O\xfci<\xab\xd7\xac\x63\xe9\xb2`\xae\xdf\xb8\x8duu+:\xb4\xff\xe\x80\x6\r\xea\x33\x66\x64\x14\x81\xf3\x83\xd0\xd7/@\xebV\xbe\xb8\x38\xdd\xcdN\xb7\b!\xc4\x37KKK\x8b\x8d\xebW\xa9<\xb2\xfe-\xaa]\xab&\x1b\x37\xac\x41KK+\xb7\x9b\"\x84\x10\x42\b!\x84\x10\x42\b!\xfe\x3\xb2\xbd\xc7Pr\xb2\xaf\x88\x10_\xa6\x9c\xde\x63H\b!\x84\x10\x42\b!r\x92\xec\x31$\x84\x10\x42\b\x91\x39\xc9\xf7\x18\xfa$\x9b\x15\xc8\xbe\"B\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10_>\xd9\xc5Z\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\xe2\x1b!\vCB\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\xdf\bY\x18\x12\x42|v\t\t\t\xbc|\xf9\x32\xb7\x9b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\xdf \xc5\xa5\x64\xca\xa9S\xa7\xf9q\xc2\xa4\\\xe9\xeb\xac\x88\x8d\x8d\xe5\xc5\x8b\x17*i\xb9y\x9f|J\xf1\xf1\xf1\x18\x9b\x98\xb1\x37\x64_\x96\xcf\xfd\\\xf7LZ\x9f\x83\xd4\xde\x87\xcf\x61\xe5\xaa\xd5\x38\xd4r\xc9\xf6\xf9\xc9\xfbT\xa1P0n\xdc\x4N\xe7\xf2\x38*\x84\x10\x42\x88/_\xa5\nf\xb9\xdd\x4!\x84\x10\x42\xe4\x12Y\x18\x12\x42|V\x83\x87\x8d\xc1\xa6\x46\x35\x1a\x35\xf4H3O\xe0\xac\x9f\xf9\x65\xebj~\x9e\x38\x96\x2\x5\n\xd0\xa0\xb1\x1f\x17.\x84\xe5`+s\x97\x42\x1\x8a\xc4\xdc\x99\xec?{\xf6\x1c\xe6\x16\x36\xc4\xc6\xc6\x66\xbb\x8c\x84\x84\x4:w\xedI\x81\xfc\xf9\x99\x33k*\xee\xeen\xa8\xa9\x91\"M3O\x1e\x95\xf3\x14\n\x5\x8a\x8f\\\x90\xca\x8a\xc4\xc4\x44\x2\xa6\xcd\xc4\xc0@\x1f\x35\x35\xb5\x1c\xab\x37;\xbat\xed\xc9\xf2\xf\x16\"s\xf3>\xf9R|\xae{&\xad\xcf\x41j\xef\xc3\x97NMM\r}\x3}\x2\x2\x66~\xf4\x82\xaf\x10\x42\b!\x84\x10\x42\b!\xfe\x9b\x34s\xbb\x1\x42\x88\xff\xae\x9d\xbb\x42\x38}\xfa\x1cGBw\xa7\x9b\xaf\x8a\x95%\xe5\xcd\xcd\x1\xa8S\xc7\x89\xbd!\a9q\xe2$U\xabZ\xe5\x44\x33\x33\xa4\xa9\xa9\xc1\xd2%\v?[\xf9={v\xfble\xe7\x84G\x8f\x1es>,\x92I?\x8d\xa3z\xf5j\0\x44G\xff\x9d\"-\xec\xe2%\x95\xf3LMM\xd9\xbdk[\x8e\xb5\xf3\xc2\x85\x30\x42\x8f\x9e\x62\xf6\xac\xe9\x39V\xe7\xa7\xf4\xb5\xdf'\x9f\x42N\xdf\x33_\xab\x96\xbe\xcd\x99\x38y6a\x17/Q\xed\v\x19G\x85\x10\x42\b\xf1\x65\x9a\x37wN\x8a\xb4^}\xfcs\xa1%B\b!\x84\xc8I9\xfe\xc4\xd0\x9a\xb5\xeb\x31\x36\x31\x63\xce\xdcy)\x8e\xb9{x\xb1\x64\xc9\x32\xe5\xeb\xcf\x1d\x36' `\x6\xed;v\xfd,e\x7f\xe\x89\x89\x89<}\xfa\x94\xf8\xf8\xf8\xdcn\x8a\x10\x19\x8a\x8f\x8fg\xcc\xf8I\x8c\x1b;\f\xfd\x2\x5\x32}\xde\x8b\x17/x\xfc\xe4)\x15*VP\xa6\xc5\xc5\xc5\x31\x63\xe6l\\\xdd\x1a\xd0\xa4\x99/\xeb\x37l\"!!\x1\x80\a\xf\xa2\x99=;\x10o\x1f?\xaaT\xb3\xa7[\xf7\xde\\\xbatYy\xee\xa1\x43\xa1\x34\xf4\xf2&x\xe5j\xfcZ\xb5\xa3\xb6\x93\x1bs\x3\xe7\xf3\xf8\xf1\x63\x2\xe7-\xa0Qc\x1f<<\x1b\xb3n\xdd\x86t\xbf]\x9f||zW\xe6\xaaUkh\xd5\xa6=\xb5\x1c]\x99\x31s\xb6J\xc8\xa9\xc4\xc4\x44\x36n\xdcLs\xdf\xd6\x38\x39\xbb\x33m\xfaL\x9e={\x96j\xd9\x1f\x8e\x45W\xaf]c\xc0\xc0\xc1X\xdb:\xe2P\xcb\x85\xe1#F\xf3\xe6\xcd\x9bT\xcf\x1b\x39j,\x1\xd3\x66\xe2\xe1\xd9\x98\x86^\xdel\xda\xbc\x45\x65\xcc\x8c\x8f\x8fg\xf1\xe2\xa5\x34i\xe6\x8b\xab[\x3\xa6\xcf\x98\x45\\\\\x1c\0'O\x9d\xa6\x89O[\0\xcc-l061#66e\x1b\x15\n\x5!!\xfbi\xdf\xb1+v\xe\xce\f\x19:\x82\xbbw\xa3\0\xb8q\xe3&\x96\xd5j\x1P\xbf\x91/\xc6&fL\x99\x32-E\xda\xf2\xe5\xc1)\xca\xfd\x30\x64\xdf\xa7\xee\xd7\xf\xed\xd9\xbb\xf\xef&\xf5)Z\xb4\x88\x32\xed\xd1\xa3G\x8c\xffq\"\xb5\x9d\xdch\xee\xdb\x9a\r\x1b\x37\xa9\xdc\a\xee\x1e^\xacY\xbb\x9eQ\xa3\xc7\xe1P\xcb\x85\xce]z\x10\x16vQ\xa5\xdc\xbbw\xa3\x18\x32t\x4\xb6\xf6N\xb4k\xdf\x99\x93'O)\x8f\x1d:\x14\x8a\x87gc~\xfd\x35\x94\xb6\xed:\xe1\xe2\xea\xc9\xc3\x87\xfY\xbbn=m\xdbu\xa2J5{\x9a\xfb\xb6\x66\xd7\xae=\xcas\xda|\xd7\x81\xd0\xa3\xa7\x18\xfb\x63\0\xc6&f,\\\xb4\x18Hy\x9f\xa4\xf7\xde\xbe\xcb\x9f\xd1\xfd\x91\\@\xc0\fF\x8c\x1c\x43@\xc0\f\xdc=\xbch\xd4\xd8\x87\x9d;w\x13\x15\x15\xc5\x98\x31\xe3\xa9\xed\xe4\x86_\xabv*\xd7\x97\x99>T(\x14l\xd9\xb2\x8d\x96~m\xf1\xf0l\xcc\x8c\x99\xb3S\xd4\x9d^\x1f&\xf7\xe1=\xf3\xe6\xcd\x1b\x82W\xae\xa6q\x93\xe6T\xa8T\x3\xdf\x96m\xf8\xed\xb7\xdfS\x9c\x97\xde\x38\x91\xd6\xe7 \xad\xf7!\xa3{\xd0\xdd\xc3\x8b\x85\x8b\x16\x33l\xf8(\x1cj\xb9\xd0\xb6]'\xce\x9d;\xaf\xd2\x9e{\xf7\xee+\x8f\xf7\xff\xfe\a\xb6m\xdf\xa9r<\xa3:2\xea\xd3\x62\xc5\x8a\xd1\xac\xb1\a{\xf6\x84\xa4\xda\x8f\x42\b!\x84\x10\xef\xf4\xea\xe3\x9f\xe2G\b!\x84\x10\xff}9\xba\x30\xa4P(X\xb3v\x3\0\xabVo\xe0\xed\xdb\xb7\x19\xe4\x97\xb0\x39\xc9\xc5\xc6\xc6\x62na\xc3\xd9\xb3\xe7r\xbb)Bdha\xd0rJ\x14\x37\xa5i\xe3\x86\x19\xe6\x9d\x38i*K\x96,\xa3m\xbbN\x94\x35\xaf\x46\xc9\x12&\xd4\xaa\xe9\0$\x85)\xeb\xd5\xbb\x1f\xf7\xef?`\xc2\x84\x31\xb4\xf6k\xc1\xccY\x81\xac\xdf\xb0\tH\xfa\\<~\xfc\x98\xd6\xad}\x99=c2\x6\x6\xfa\xb4\xf0k\xcf\xc3\x87\x8f\x94\xe5\x9f>{\x89\xd0\xd0#t\xed\xd2\x81\xce\x9d\xda\x31{\xee\"*Z\xda\xf3\xec\xd9\x33\x6~\xefO\xa3\x6\x1e\xf4\x1d\x30\x82\x3\a\xe\x65\xfa\xfaN\x9f\xbd\xc4\xbe\xfd\a\xe9\xdc\xb1==\xbawbE\xf0:\x16,\fz\x7f\xfd\v\x17\xb3\x66\xed\x6\xfa\xf4\xea\xce\xf0\xa1\x3\x39s\xf6<#F\x8e\xc9p\xa1;&\xe6)>-\xbe\xc3\xc8\xc8\x88\x39\xb3\x3\x18=r(\x15*\x94'\xcf\aa\xd8\0\x12\x15\x89,Z\xb2\x9a<\x9a\x9a\f\x1b\x32\x90\xba.N\xf4\xf2\x1f\xc2\xe1#G\x81\xa4\x31w\xe8\xb0\x91\xec?\xf0+}\xfb\xf4`\xc0\xf7\xfel\xdf\xb1\x9b^\xbd\xfb\x91\x98\x98H\xc5\n\xe5\x19\x36\x38\xe9\xf\xbf\x8dk\x97ph\xdf\x36tuuS\xd4\xb3\x61\xe3\x66\x86\x8d\x18K\xd3&\x8d\x98\xf4\xd3X\x9e<\x89\xc1\xb3\x91\x37\x8f\x1e=\xc2\xd4\xd4\x84\xe0\x65\x81\0\xfc\x38v\b\x87\xf6m\xc3\xd7\xb7y\x8a\xb4\xfa\xf5\xd3\xe%\x98\x13\xfd\n\x10\xb2\xef \xd5\xabWU\xbe~\xf6\xec\x19M\xbd\xfdx\xfd\xfa\x35\x13'\x8c\xa1\xb1WC\x86\f\x1b\xc7\xa2\x7f\x17\0\0^\xbd~M\xff\x81#\xf9_\xd9\x32\xfc }J\xa3\xc6\xcd\x1\xf8y\xe2\x38j\xd4\xa8\xc6\xd1\xe3g\xb8y;J\xd9\xde\x8c\xea\xc8\xa8O\x1\xaaU\xb3\"d\xdf\xc1\f\xfbP\b!\x84\x10\x42\b!\x84\x10\xdf\x9e\x1c\r%w\xf5\xea\x35N\x9d\xb9\xc8\xb2\xa0\xd9t\xec\xda\x97K\x97\xc3\xd3\rq\"as\x84\xf8:\xbd|\xf9\x92\xc0\xf9\x8bY\xb7zI\xa6\xf2\xef\t\teOH\xa8\xf2u\xe4\xd5[l\xd8\xb8\x99\x36\xad\xfd\x38q\xf2\x14\x87\x8f\x9e \xf2\xf2ituuq\xb0\xb7\xe3\xd5\xeb\xd7,]\x16L\xebV-177c\xdc\xb8\xd1\xcas+V\xac\xc8\xf2\x95\x1b\x89\x88\x88\xa0N\x1d'e\xfa\xac\x99\x1\xe4\xcf\x9f\x1fHz\xca%h\xe9\x1a\x86\xe\x19\x4\x80\x8b\x8b\x33\xa1G\x8e\x11z\xf8\b\xee\xeen\x99\xbe\xce\xc0\xb9\x33\x95\x65\x46G?d\xdd\xfa\xcd\f\xf8\xbe\x1fO\x9e\xc4\x30~\xe2\x34v\xff\xb2\x41\x39\xc6\x15-Z\x14\xf7\x6\xcd\x19>l\x88\xca\x13+\x1f\x8a\x8a\x8a\xe2\xef\x87\x31\x34k\xda\x98J\x95,\xd2\xad_]M\x1d\r\ru\xfa\xf5\xeb\x3\x80\xb3s\x1d\xf6\x1f\xf8\x95#G\x8e\xe1\\\xc7\x89\xb0\xb0\x8b\xacZ\xbb\x95\x8b\xe7\x8e)\xeb\x34\x33+Gm\xe7\x6\x9c:u\x1a{{;\xec\xedl\x1\xb0\xb2\xaa\x82\x81\x81\x41\x8a:\xe2\xe2\xe2\x18\x33n\x12\xf3\xe6L\xa3n]g\0\x1c\x1c\xec\xa8\xeb\xd6\x80M\x9b\xb6\xd0\xa3G7\xe5\x35\xda\xdaXS\xb9r%\0tt\xb4S\xa4\x45\xff\xfdwF]\n|\x9e~\xfd\xe7\x9f\x7f\xb8r\xed\x36&\xc5\x8a)\xd3\xb6l\xdd\x8e\x81\x81>\xe3\xc7\x8d\x46\x43\x43\x3'@OO\x97~\xdf\xf\xc7\xcf\xcf\x17\x3\x3\x3\xb4\xf3\xe6\xa5{\x97\xef\xe8\xd0\xa1\x1d\0\x8e\x8e\xb5\x89\x8c\xbc\xca\xdau\x1b\x18\x31|\b\xeb\x37l\xc4\xc1\xce\x9a\x1e\xdd\x93\x9e\xe4q\xb0\xb7\xe3\xfc\x85\x30\xf6\xee\t\xc1\xf2\xdf\xeb\x6X\x1c\x14H\x99\x32\x65\x94\xaf\xa7L\x9e\xa8\xfc\xbd\x8e\x93#\xbf\xec\xda\xcb\x89\x93\xa7pp\xb0\xc7\xac\\9\x9c\x1dmqvvR\xf6\xdd\x87\x32\xf3\xde\x66t\x7f|H]M\x1d\xad<\x9a\xf8\xf7\xe9\x5@\xed\xda\xb5\xd9\xbc\x65\a\xf6\xf6\xd6\xca\xeb\xaf^\xad*\xc1\xab\x37s\xee\xdcyJ\x96(\x91\x61\x1f\xaa\xabk\xf0\xe3\xc4\0\x16\xcd\x9f\xa5\xbc\x7f\xeclm(W\xa1\x86\xb2\xde\xcc\xf6\x61j\xce\x9e\xbf@\xedZvx\xb8\xd7\x43MM\r\a\a\xfbT\xf3\x65\x34N\xa4\xf6\x39H\xed}\xc8\xcc=X\xa9\x62\x39\xeclk\xd0\xbaUK\0*W\xae\xcc\xda\r;\xb8p!\x8c\x62\xc5\x8a\xb2y\xcb\x36LL\x8a\x32\xe1\xc7\xb1hhh\0p\xe0`(\xbf\x9f\x38\x93\xa9:tuu3\xecS\0SS\x13\"\xaf\xde\"66\x96\x2YxjS\b!\x84\x10\x42\b!\x84\x10\xff}9\xba\x30\xb4\xff\xc0\x41\\\x9c\xec\xf1\xf4\xf4\xc0\xd2\xc2\x8c\x43\x87~Mwa( `\x6\x97\xc2#X\xb1,\xe9\xdb\xe2\x89\x89\x89l\xdd\xb6\x9d\xf5\xeb\x37\x11\xfb,\x8e\x46\r\xebs\xe4\xc8\x31:ujO}\xfw\xe\x1d\ne\xda\x8c\xd9\xb4j\xd9\x9c]{B\xf8\xf3\xcf(\x9a\xfb\x34\xa1{\xb7.\xa9~\v\x1e\xe0\xd2\xa5\bF\x8e\x1a\xcb\xee=\xfb\xa9\\\xa9\x2\x9d:\xb6\xc3\xd9\xb9\x8e\xf2x\\\\\x1c\x41\x8b\x97\xb2s\xe7^\xf2\xe5\xcfG\xebV\xbe\x34\xf7i\x86\x86\x86\x6\xf\x1e\x44\xb3\x61\xc3&B\xf\x1f\xe5\xc6\xad;\xd8\xdb\xd6\xc0\xbfOO,-+\x3(\xdb\xd3\xd2\xd7\x87\xdd\xbb\x43\x88\xfa\xeb\x1e~-}h\xe5\xe7\xcb\xba\xf5\x1b\xd9\xb3w?o\xde\xbc\xa1\x63\xfb\xef\xf0\xf5m\x8e\xba\xba\xba\xf2\xbc\xe5+Vr\xe6\xdc\x45J\x14/F\xebV\xbe\x34k\xda\x4s\v\x1b\0\x65\xc8\x9b_\xb6\xad\xc1\xce\xd6\x6\x85\x42\xc1\xbe}\aX\xb3n\x3W\xae\\\xc7\xb9N-\xfa\xf4\xeeI\x89\x12\xc5\x95\xe5\x5\xce_H\xebV\xbel\xdd\xba\x83\xbbQ\xf7h\xee\xd3\x84\xae]:\xa3\xad\x9d\xf7#\xdfU\xf1\xad\x8b\x8e~\xc8\xca\xd5\xeb\xe9\xd3\xab\v\xda\xdaI\x8b\x1\xc1\xab\xd6\x63U\xa5\x32U\xad,3U\xc6\xd1\xd0]\xca=\x86\x62\x62\x62\x98\x31s6\xdf\xff\x30\x8a:N\xb5\xb9q\xfd\x6/_\xc5S\xba\x9c\xeaX\xa1\xa7\xab\xad\xfc=<<\x82={\xf7\xf1\xfb\x89\x93\x9c;\x9f\x14\x1e\xea\xe5\xabW*\xf9\xdf}\xbe\0\xca\x97\x37\xe7\x7f\x65\x8a\xab\x1c\xafjU\x85\xbf\xfe\xba\x97\xc9\xabNY\xa6\xb9Y9\xee\xfcy\x9f\xc4\xc4\x44\xfe\xf8\xf3O\x12\x12\x12\xf1h\xd0<\xc5\x39I\xa1\xbe\xd2^\xc0\x30\x33+\x87W\x3WZ\xf8\xb5\xa7\xb5\x9f\xfn\xae.\xd8\xd8X+'\x90?\xe4\xee\xa6:\xc1o]\xa3\x1a\x31\x31\x31\0\\\xbb~\x1dK\v3\x95\x5\x13ss3L\x8a\x16\xe6\xe6\xcd[\xd8\xdb\xdb\x65x\x8dw\xa3\xa2x\x12\x13K\xc5\x64\xa1\xfdttt\xf0\xa8W\x97\x8b\x99x\xa2#;>G\xbf>\x7f\x9e\x14\x8e\xaeH\x11\x63\x65ZX\xd8\x45\x9c\x1ck\xaa\xf4m\x8d\x1a\xd5\x89\x7f\xf3\x96\xbbw\xa3\x94\v\x4\xa5K\x95Ti\x9bs\x1dG\x8e\x1d\xff\xed\xdf\x32.\xb1}\xe7~\xb6\x9b\x98\xa9\xd4\xd7\xb9\x83\x9f\xcakccc\x95\xd7\xf\x1e\x44\xb3k\xd7nB\xf\x1f%\xea\xaf\xfb\x84G\xde\xc0\xc1\xde\x36\xcd\xf6\x7f(\xb3\xefmz\xf7Gj\\\xeb\xd6V\xfe\xae\xa9\xa9\x81\x8du5\x95\xc5\x34\x43\x43\x43\xca\x94\x32U\x86\x35\xcb\xa8\xf\x35\x34\x34\x88}\xf6\x2\v\x8b\x8a\xca\xe3\xef\xc6\x89w2\xdb\x87\xa9\xf1m\xeeM\xb7\x9e\xfdy\xf0\xa0=^^\r\xa8W\xcf\x15\xe3\xc2\x85S\xcd\x9b\x99q\"#\x99\xb9\a\xf3hjbV\xee\x7f\xca\xf4\"E\x8c\x31\x32,@\xec\xbf}v\xe9\xd2\x65\xea\x38\xd6R\xe9\x33\x37Wg\xae]\xbb\x91\xa9:\x9e|0F\x86\x86T\xb5v\xe2\xca\x95\xab\x19\\\xc3{\xd9}o\xb3z\x9f\xa7\x96_]\xfd}ZF}\xf8nO\xbc\xf\xef\x9f\xe4\xb2\xd3\x87\xef\x38;\xd7\xe1\xec\xa9#\x1c\x39z\x8c\x90\x90\xfd\f\x19\x36\x8e\xc0\xd9Sh\xd2\xc4K%_v\xc6\x89\xd4\x64\xf7\x1eL\xbe\xd8\xf9\xfau \xe5\x13\x97\x17.]\xe1\xc2\xa5+\xca\x30g\n\x85\x82\x13'Nag\x97t/V\xb1\xac\xcc\xb6\x1d{\xd0\xd3\xcb\xa7\x1c_3\x12\x1e\x1e\xc9\xed?\xfe\xa2}\xbb\xb6\x18\x19\x19\x2\x90\x90\x90\xc8\xbe\x83\xc7\x94y\xd4\xd4\xd4\x95\x8b*\xa9\xc9\xd4{\x9b\x3\x32\xea\xc3\xd7\xaf\xe3\x93\xee\x9fs\x17\x30\x31\x31\x1\xe0\xcd\x1b\xd5{-;}\x98\\\xfe\xfc\xf9i\xd8\xc0\x93\x86\r<166f\xe9\xf2\x95)\x16\x86\x32\x1c'\xd2\xf8\x1c|\xf8>|\xecg\x1b\xa0re\v6m\xde\xce\xc0\x1\xef\xfb\xec\xfc\xf9\x30\x9e\xbfx\x99\xa9:\x8a\x17/\x9e\x61\x9f\x2<|\xf8\x10x\x7f\xef\v!\x84\x10\x42\xa4\x46\x16\x82\x84\x10\x42\x88oS\xb6\x16\x86\xe2\xe2\xe2\xb8{7*\xcd\xe3:::\x94.]J%m\xfe\xc2\xa4\x8d\xa8\xef\xfc\xf1'w\xfe\xf8\x93\xc4\x7f\xbf\xc9\xbau\xdb\x8eL-\f\xdd\xbd\x1b\xc5\xf3\x17\xaf\x32\f\x9d\x2i\x87!J\x9e\xeP\xachQ\xea\xd7S\r\xb3\xe3\xe8T\x9by\x8b\x82\x89\x8b\x8b\xcb\x95\x10V\x8eN\xb5Y\x18\xb4\x8c\x6\x8d\xbci\xee\xd3\x84zn\xae\xe9N\xf2\x65%\xcc\x93\x96\xd6\xfbo\xc0\xbf\xdb\xbb\xe4\xee\xdd\xbb\xb2\x30$>Z\xc1\x82\x46,^8\x1b\x1f\xdfv\x94\x37\x37\xa3UK\x9f,\x9d\x7f\xf9r8\xcf\x62\x9f\xa1P(x\xf6,\x8e\xf5\x1b\x36\xe1\xd5\xc0\x95\n\x15\xca\x93'O\x1e\xda\xb5\xf1\xa1W\x9f\x1\x8c\x1b;\x9c\xd2\xa5J\x11\x15\xf5\x17\xda\xday\xa9S\xc7\x89\xd2\xa5Kq\xec\xe7\x99\xacZ\xb5\x86\x32\x65\xcb\xb0}\xfb/Im*T0\xdb\xd7\xa3\xa3\x93\xf4\x8d\xfd\v\x17\xc2(\\\xb8\x30\xa5\x92\x85\x12\xcb\f==]\xc6\x8d\x1eJ\xdf\x1\xc3\xc9\x93'\xf\xd6\x35\xaa\x13\xfb\xec\x19w\xee\xfc\x41\x9b\xd6\xe9\x87\xc7\xbau\xeb\x36\xeb\xd6o\xc4\xce\xce\x6\x3\x3\x3N\x9f:\x8d\x86\x86\xba\xf2\t\xc1\xac\xb0\xb3\xb3\xc5\xd5\xa5&={\xf7\xe3\xfb~}\xd0\xd2\xca\xc3\xfc\x5\x41\xb4m\xed\xad\\h65M\x9aX\xde\xb8q\v\xb6\xb6\xd6\x94/o\xae|\x1a\x6\x92\x9e\xe0\x1a>\xa4\x1f\x3\a\x8d\xe4\xc5\xf3\x17\x98\x16\x37\x65\xf7\xee\xbd\xc4=\x7f\x81w\xb3&YjO\xfe\x7f\xcb=y\xea\x34\xf6v\xb6)\xc6\xe4\x8c\x64\xd4\xaf\x31\x31\x31\x94\xaf\x64\xcb\xb2\xc5\xb3i\xd8@\xf5\xf\\}}}\x8a\x16)H\xf4\x83heZ\x8b\xe6\xde\xcc\t\fb\xe0\xf\x43h\xd1\xc2\x87\x98'1\x8c\xfb\xf1g&\x8c\x1f\x81\x9e\x9e\x9e\xca\xf9\x33g\xcd\xa1\x46\xf5\xea\xfc\xf6\xfb\xef\x9c\xbbp\x99\xe9\xd3\xa7\0\xd0\xb4ic\x16-^N\xcf^}\xe9\xd3\xa7\a\xfa\xfa\xfa\x44\x84G`ccM\xd9\xb2\x65H\xcd\xbb>\xf\x9c\xb7\x80\xbau\x9d\xb9v\xed:\xa0\x1a:\xadre\vv\xef\xdeG\xadZ5\xd1\xd3\xd5U\xf9\xb7\xf\x32\xf7\xde\xe6\x84\x8c\xfaPOO\x8f\xa1?\xf8\x33`\xd0\b\xe2\xe2\xe2\x30\x31\x35\x61\xd3\xa6-*ed\xa7\xf\xdf\x99??\xe9\v\xf\x65\xca\x96\xe1M|<'N\x9e\xc6\xd6&\xe5\x17\x46\x32\x1a'\xd2\xfa\x1c\xa4\xf6>d\xf7\xb3\xfdNs\x9f\x66\xcc\x98\x35?\xa9\xcf\x9a{\xf3\xf8\xf1\x13V\xad\xdd\xaa<\x9e\xd1}ndd\x98\x61\x9f\x2\x44G\xff\x8dI\xd1\xc2\xe8\xebK\x18\x39!\x84\x10\x42\b!\x84\x10\x42\xa8\xca\xd6\xc2\xd0\xcd[\xb7\xa9W\xdf;\xcd\xe3-\x9b\x37\x62\xce\xec\x19\xca\xd7\xcf\x9e=c\xf7\xde_\x1\xf0j\xdaZ%\xef\xe2\x65k\x19=jD\x86{\xdd\xbc\xfb\x16oF\xa1SR\xc8 j\x8e\xda\a\x13\x93\xef\xc2\aihh\xe4J\b\xab\x92%Jpp\xff.N\x9f>\xc3\xc1\x43\xa1x4\xf0\xa6m\x9b\xe6\x8c\x1b;:\xe5\x89\x64?\xcc\xd3\xbb\tY\xad\xbc\xb2\xc7\x90\xf8\x34\xaaZY\xd2\xb9\x63[\x2\xe7\a\x11\xbcl~\x96\xce\xed\xd9g0\x90\xb4\xe8Z\xa3\xba%\xf5\xdd\xddh\xd9\xb2\x85\xf2\xf3\x38\xf1\xa7\xf1\xac^\xb3\x8e\xa5\xcb\x82\xb9~\xe3\x36\xd6\xd5\xad\xe8\xd0\xfe;\0\x1a\x34\xa8\xcf\x98\x91Q\x4\xce\xf\x42_\xbf\0\xad[\xf9\xe2\xe2t\xf7\xa3\xae\xa5@\x81\xfc\xcc\x9e\xfe\x13\xd3g\xce%&\xe6)\x83\x6\r\xc8r\x19\xcd\x9b{c`h\xc0\xda\xb5\x1b\x98\x36\x63.\xe6\xe5\xca\xe2\xe5\xd5 \xc3\xf3\xb4\xb4\xb4PS\x83)Sgp7\xea>6\xd6U\xd9\xba\x31\x38\xcb\x8bS\x90\x34\x8e-\x9c?\x87\x5\v\x83\x98\xf8s\0\x6\x6\xfa\x34\xf6j@\xdb\xef\xde\x8f\xc3%K\x94`\xe9\xa2YL\x9b\x31\x87]{B\x98:\xe5'*V\xa8\xa0RN\xcf\x1e\xdd\x31\x32\x32\x62\xdd\xfaM<~\x12\x43=7\x17\xb6lZ\xab\xb2\x80\x94\x19\x65\xca\x94\x66\xc4\x90~L\xfay\x1a\x3\xfa\xf7\xc1\xc5\xa5NF\xa7\xa4\x90^\xbf\xbe\xdbG\xc8\xc8\xd0\x30\xc5y\xea\xea\xea\xb8\xbb\x39s\xed\xfa\re\x9a\xb1\xb1\x31{wma\xce\xdcy\f\x18\x38\x8cJ\x95*\xf0\xf3\xc4q\xb8\xbb\xbb)\xf3T\xb5\xac@\x91\"\x85\xb9|9\x82\xe0\x95\xebpq\xae\xcd\x9e\x9d\x9b\x95\xfb\xd8\xe4\xcb\x97\x8f\xad\x9b\xd7\xb2`\xe1\x62\xc6\x8c\x99\xc0\x8b\x97/\xa9U\xd3\xek\xeb\xeai^C\xd9\xb2\x65\b^\x16\xc8\xccY\x81\xec\xde\xb3\x8f\xc6^\x9e\xf4\xed\xddY%O\xcf\x1e]y\xf2\xe4\t\xdd{\xf4\xa5\x45\xf3&)\x16\x86\x32\xf3\xde\xe6\x84\xcc\xf4\x61\xef\xde=\xd0\xd7/@\xf0\xca\x35\xe8\xea\xe9\xd2\xa4qC\x1e>z\xac<\x9e\x9d>|\xa7\x98IQ~\xf9\x65\x37g\xcf]D_??\x8d\xbd<\xe9\xd6\xb5s\x8a|\x19\x8d\x13i}\xeR{\x1f\xb2\xfb\xd9~\xa7H\x91\"\xec\xdd\xb5\x85Y\xb3\xe7\x32h\xc8(\xdc\\\xeb\x30y\xe2(\x16\x5\xe4\xea\xe8\x1f\0\0 \0IDAT-S\xe6\xc9\xa8\x8e\x8c\xfa\x14\xe0\xea\xd5k\xb8\xd6u\xcc\xf2\x2\xac\x10\x42\b!\x84\x10\x42\b!\xfe\xfb\xd4\xae\xde\xbc\xa7(a\x92\x34\xc1u\xf7\xde\x43\xcc\xcb\x16\xcb\xe0\x94\xac\xdb\x1b\xb2\x8f\x8e]\xfc\x89\xb8x\x2\xc3\x64\x13v\xe1\xe1\x11\xb8\xd4k\xc2\xb6M\xc1\xd4\xac\xe9\x80\xbb\x87\x17-}\xbd\xe9\xdc\xb9#\0\x1\x1\x33\xb8\x14\x1e\xc1\x8a\x65\x41\xc4\xc4\xc4`Q\xc5\x9e\xa0\xf9\x33h\xd4\xe8\xfd$`\x19\x33+\x82\x97\x5R\xdf\xc3\x9d\x43\x87\x42\xf1\xfb\xae+\xb7\xaf_P~\xdb{\xc7/;\xe9\xd2\xfd{\x1e\x44]M192j\xf4\x38\x16.^\xc5\xdf\xf7\xae+\xd3\xe6\xcc\t\xe4\xd8\xf1\x13\xac_\xb7\x92\x8b\x17/\xe1V\xdf\x9b\x9d\xdb\xd6\xa4\x1a\xc2j\xf6\xec@B\xf\x1f\x65\xcb\xe6u@Rh\x9a\x92\x65-\x99\x31u \xe7iI\x9e'\xbb\x63\x81\x42\xa1\xe0\xd5\xabW\x12\xbaH\xe4\x8a\xf0\x88\b\\\xdc\x9a\xf0\xdb\x91\xbd\x94+\xf7\xbf\x14\xc7\xf\x1e \xfe\xb9\xd0\x12!\x84\x10\x42\xe4\xa4\x1c\t%\xf7\xb9\x44\x45\xfd\x45u[g\x8e\x1f\xde\x83\x99Y\xb9\xdcn\xce\x17+\xb5\x90v\xe2\xdb\x90\xd3\xa1\xe4\x84\xf8\xd2%&&\xf2\xe6\xcd\x1b\xf2\xca\xfej\xe2?\xec\xd5\xab\xd7hi\xe5\x91\xfd\x85\x84\x10\x42|\x13$\x94\\\xf6I(9!\x84\x10\xe2\xdb\x92\xe3\xa1\xe4>\x95\xabW\xafq\xec\xf8o\x98\x99\x95\x43\x43\x43\x83\x15+V\xd1\xae\x8dO\xaa{I\b!\x84\x10\x1fRWW\x97\x45!\xf1\x9f\xa7\xad-\xf7\xb8\x10\x42\b!\x84\x10\x42\b!\xd2\xf6U-\f\x1\x84\x87G0\x7f\xc1\x12LM\x8b\xd1\xd8\xab\x1mZ\xfbI8 !\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\x42\x88L\xf8\xaa\x16\x86\xca\x97\x37g\xfa\xb4)\xb9\xdd\x8c\xafN\xdd\xba\xce\xfc}O\x1e\xf\x17\x42\b!\x84\x10\x42\b!\x84\x10\x42\b!\xbeu_\xd5\xc2\x90\x10\x42\b!\x84\x10\x42\b!\x84\xf8\x34\x42\xf6\xeeQy\xedQ\xdf\x33\x97Z\"\x84\x10\x42\x88\x9c$\vCB\x88\xcf.!!\x81\xf8\xf8xtttr\xbb)B\b!\x84\x10\x42\b!\xfe%\vAB\b!\xc4\xb7I=\xb7\x1b \x84\xf8o{\xf2$\x6\xdb\x9a\xae\x1c <|\xf8\xe8\x93\x96+\x84\x10\x42\b!\x84\x10\x42\b!\x84\xf8v\xe5\xf8\xc2\xd0\x9a\xb5\xeb\x31\x36\x31\x63\xce\xdcy)\x8e\xb9{x\xb1\x64\xc9\x32\xe5\xeb\x5\v\x16\xd1\xabO?\x14\nEN61SR\x9b\x64N\xde\xfe\xb7o\x13\xe8\xd4\xb9;+V\xac\xfc\xac\xedHm\x92Z\x88/\xc9\xe0\x61\x63\xb0\xa9Q\x8d\x46\r=\xd2\xcc\x33g\xc6\x44\xb6o^\xa9\xf2\x63]\xa3\x86\xf2x\x7f\xff\xae)\x8e\xf7\xee\xd5='\x9a\x9f\x42\x97\xae=Y\xfe\xc1\xe7\xfa\xec\xd9s\x98[\xd8\x10\x1b\x1b\xfbI\xebR(\xf8\"\xc7?!\x84\x10\x42\b!\x84\x10\x42\b!\xc4\xd7+GC\xc9)\x14\n\xd6\xac\xdd\0\xc0\xaa\xd5\x1b\xe8\xd9\xa3\x1b\x9a\x9ai7A\xa1\0\x45\xa2L\x8a\xa6\xa7K\xd7\x9e\x38;;\xd1\xabg\xeeL\x92\v\x91\x9e\x9d\xbb\x42\x38}\xfa\x1cGBw\xa7\x9b\xafj5+\xca\x9b\x9b\xa7H\x7f\xf7\x4\x8e\xb9y9\x1c\x1c\xec?K\x1b\xbf\x64\x8e\x8e\xb5pt\xac\x95\xdb\xcd\x10\x42\b!\x84\x10\x42\b!\x84\x10\x42\xfc\x87\xe4\xe8\x13\x43W\xaf^\xe3\xd4\x99\x8b,\v\x9a\xcd\xed?\xfe\xe2\xd2\xe5\xf0t\xf3\xf7\xec\xd9\x8d\xf9\xf3\x66\xa3\xa6\xa6\x96\x43-\xfct455X\xba\x64!\xed\xdb\xb7\xcd\xed\xa6\b\x91+\xe2\xe3\xe3\x19\x33~\x12\xe3\xc6\xe\x43\xbf@\x81\x1c\xab\xf7\xea\xb5k\f\x18\x38\x18k[G\x1cj\xb9\x30|\xc4h\xde\xbcy\xa3<\xbe\x37\x64?\xfe}\xbf\xc7\xda\xd6\x91\x1f\x6\r\xe5\xde\xbd\xfb\xca\x63\xdf\xf\x18\xc4\xb8q\x13T\xca\xb3\xb0\xb4\x61\xd3\xe6-\0\xb4\xf9\xae\x3\xa1GO1\xf6\xc7\0\x8cM\xccX\xb8h1'O\x9d\xa6\x89O\xd2\xe7\xdc\xdc\xc2\x6\x63\x13\x33\x62\x63\x9f\x1p\xf7n\x14\x43\x86\x8e\xc0\xd6\xde\x89v\xed;s\xf2\xe4)e\xb9\x87\xe\x85\xe2\xe1\xd9\x98_\x7f\r\xa5m\xbbN\xb8\xb8z\x12\x17\x17\xa7R\xf7\xa1\x43\xa1\x18\x9b\x98\xf1\xfc\xf9\xf3L][r\x11\x11\x91\xf4\xeb?\x10k[G\xbat\xed\xa9Rwtt4\xc5KUd\xf7\x9e\xbd\xf4\xf1\xef\x8f\x9d\x83\x33\xc3\x86\x8f\":\xfao\x95\x32\xd2k\x7f@\xc0\fF\x8e\x1aK\xc0\xb4\x99xx6\xa6\xa1\x97\x37\x9b\x36o\x91'\x9c\x84\x10\x42\b!\x84\xf8\x8a\xcc\x9b;'\xc5\x8f\x10\x42\b!\xfe\xfbrtah\xff\x81\x83\xb8\x38\xd9\xe3\xe9\xe9\x81\xa5\x85\x19\x87\xe\xfd\x9an\xfe\x80\x80\x19\xb4\xef\xd8U\xf9:11\x91\xcd[\xb6\xe2\xdb\xb2\r\xf5\x1b\x34\x61n\xe0||[\xb6\x61o\xc8> i\x12\xb5\xa1\x97\x37\xabV\xad\xa1U\x9b\xf6\xd4rte\xc6\xcc\xd9\xe9\x86Z\xbb~\xfd\x6\xdf\xf\x18\x44u\xebZ4\xf3n\xc9\x8e\x1d;\x95\xc7\xd2\x9bX\xcd\x8c\xe4\xa1\xe5\xdeM\xc4\xae[\xb7\x81\x9e\xbd\xfa\x62m\xeb\xc8\xb0\xe1\xa3\xb8\x7f\xff\x1[\xb6l\xa3}\xc7\xae\x38\xd4ra\xca\xd4i\xca\xc9\xe1\x97/_\xb2v\xddz\xda\xb6\xeb\x44\x95j\xf6\x34\xf7m\xcd\xae]{\x94\xe5\xa7\x36I\rIOf\x85\x84\xec\xa7}\xc7\xae\xd8\x39\x38\x33\x64\xe8\b\xee\xde\x8dR\x9e\x97\x99\ti!>\xd6\xc2\xa0\xe5\x94(nJ\xd3\xc6\r3\xcc{1\xec\x12'O\x9dV\xf9I\xbe_\xcf\x8d\x1b\x37S\x1c\x7f\xf4(\xe5\xbe;11O\xf1i\xf1\x1d\x46\x46\x46\xcc\x99\x1d\xc0\xe8\x91\x43\xa9P\xa1 \xc2\xb3\x91\x37\x65\xca\x94\x66\xd6\xcc\xa9\x38\xd8\xdb\xe1\xd5\xac\x8d\xca\x82\xf8\xf9\xb0H&\xfc\x34\x5wwW\xfa\xfa\xf7 _\xbe|i\xd6\x9d\x99k{'<\"\x2wOo,,*2}\xda$\xca\x96-\x83W\xb3\x36\x9c\x38qR\x99'\xfe\xcd[:t\xf6\xa7\x9e\x9b+\x13'\x8c\xe6\xd6\xad;\xb4n\xd3\x81W\xaf^\x3\x64\xd8\xfe\x44\x45\"\x8b\x96\xac&\x8f\xa6&\xc3\x86\f\xa4\xae\x8b\x13\xbd\xfc\x87p\xf8\xc8\xd1L\xf5\xa5\x10\x42\b!\x84\x10\"\xf7\xf5\xea\xe3\x9f\xe2G\b!\x84\x10\xff}9\x16J\xee\xcd\x9b\x37\xac\\\xb5\x8e\xc1?\xf4G]]\x1d__o\xe6/X\x8a\x7f\x9f^hiie\xaa\x8c\xe0\xe0U\xcc\x9e\xbb\x90\x91\xc3\a\x91\xbf@~V\xad^G\xe8\xd1St\xea\xd4^\x99\xe7\xf4\xd9K\x14\x34\x32\xa4s\xc7\xf6\xdc\x7fp\x9fi\xd3\x3Q(\x14\f\xf8\xbe_\x8a\xf2\xae_\xbf\x81\xbbg3~\x18\xd0\x1b\x1f\x9f\x66 \x8cz\xf5\\\xe9\xdc\xb9\x3W\"\xaf\xd0\xb1k_\xb6o^\x89\x83\x83=c\xc7\x8e\x64\xff!OljX2y\xd2\x8f\x14,h\x4\xc0\x86\x8d\x9b\x99 k\xd7m\xc0\xb3\x91\x37\xa1\awS\xa8P!\xe0\xfd\x84t\x87\xem\xc8\x97/_\xba\x13\xd2\x42\x64\xd5\xcb\x97/\t\x9c\xbf\x98u\xab\x97\x64*\x7f\xef~CS\xa4\x45\xdd\tW\x86\x9a\x9c>k\x11\xd3g-R9\xbeq\xed\x12\xea\xd4qR='*\x8a\xbf\x1f\xc6\xd0\xacic*U\xb2H\xb5\xaeU\xcb\xe7\xe3\xee\xee\x6@>==Z\xb6\xe9\xca\xbd\xfb\xf7(Y\xa2\x44\x86\xed\x34+W\xegG[\x9c\x9d\x9d\xa8\\\xb9\x92\x32\xdd\xde\xce\x16\0+\xab*\x18\x18\x18\0\xb0~\xc3\x46\x1c\xec\xac\xe9\xd1=iq\xdb\xc1\xde\x8e\xf3\x17\xc2\xd8\xbb'\x4\xcb\x64\xe7.\xe\n\xa4L\x99\x32\x19\xd6\x9d\x99k{g\xd6\xac@\xfa\xfbw\xa3{\xb7.\0\x38\x39\xd6\xe6\xe9\xd3\xa7\xcc\x9c\x15\xc8\xba\x64\xe3\xd7\x8a%s\xf1\xf4L\xda\xfb\xc9\xb2\x8a%\xd5\xad\x9d\x38|\xf8\b\x1e\x1e\xf5\x32l\xbf\xba\x9a:\x1a\x1a\xea\xf4\xeb\xd7\a\0g\xe7:\xec?\xf0+G\x8e\x1c\xc3\xf9\x83\xf7\x45\b!\x84\x10\x42\b!\x84\x10\x42\b\xf1\xe5\xc8\xb1\x85\xa1s\xe7\xces\xe7\xcf\xfb\xca\xfd\x32\x9c\x1ck3j\xec\x64\xc2\xc2.bcc\x9d\xe1\xf9\xcf\x9e=c\xdc\x84\xa9,Y4\x87\xbau\x9d\x1\xb0\xb3\xb5\xa1\\\x85\x1a)\xf2\x6\xce\x9dI\xfe\xfc\xf9\x1\x88\x8e~\xc8\xba\xf5\x9bS]\x18\x9a\x33w\x1e];\xb7\xa5w\xaf\x1e)\x8e\x65vb5\xab\x92Of\xab\xab\xa9\xd3\xb5\xe7\0\xc6\x8d\x1d\x45\x91\"\xc6\0<~\xfc\x84y\v\x96\x32t\xc8\xfhk\xe7\x65\xca\xe4\x89\xcas\xeb\x38\x39\xf2\xcb\xae\xbd\x9c\x38y\n\a\a\xfbT'\xa9\xe3\xe2\xe2\x18\x33n\x12\xf3\xe6LS\xf6\x93\x83\x83\x1du\xdd\x1a\xb0i\xd3\x16z\xf4\xe8\xa6,/\xb3\x13\xd2\x42\xa4':\xfa!+W\xaf\xa7O\xaf.hkk\x3\x10\xbcj=VU*S\xd5\xca\x32Se\x1c\r\xdd\x95\xee\x1e\x43\xf3\xe6L\xa6\xb9\x8fw\x86\xe5\x98\x99\x95\xc3\xab\x81+-\xfc\xda\xd3\xda\xcf\a7W\x17ll\xac\xd1\xd0\xd0P\xe6\x31\x32\x32T\xfe^\xaaT)\0\x9e\xc7=\xcfT;\xb3\",\xec\x12\xdbw\xeeg\xbb\x89\x99Jz\xe7\xe~*\xaf\x8d\x8d\x8d\x33U^f\xae\r\xe0\xed\xdb\x4\xf6\x1f \xa4\xa3\xa3\x43\xe9\xd2\xa5T\xd2\xe6/L\nsv\xe7\x8f?\xb9\xf3\xc7\x9f$&$\x85n\xda\xbamG\xa6\x16\x86\xee\xde\x8d\xe2\xf9\x8bWXXTT\xa6\xbd\x9b\x84\xfe\x90\xba\xfa\xfb\by\xe6\x66\xe5\xb8\xf3\xe7}\x12\x13\x13U\xd2\x13\x13\x13\xd9\xbb\xefWfM\xff\x39\xc5\xf9Y\x99X\xcd*===\xe5\xef\xef\xfa\xe8\xcd\x9b\xf7\xe5\x95\xfb_Y\x1e=~\xca\xdb\xb7o\xd1\xd2\xd2\xe2\xc1\x83hv\xed\xdaM\xe8\xe1\xa3\x44\xfdu\x9f\xf0\xc8\x1b\x38\xd8\xdb\xa6Y\xfe\xdd\xa8(\x9e\xc4\xc4R\xb1\x62\x5\x65\x9a\x8e\x8e\xe\x1e\xf5\xear\xf1\x83=\x9d\x32;!-Dz\xf4\xf4t\t\xd9w\x90+W\xaf\x11\xb4`\x16\n\x85\x82\x45\x8b\x97\x33w\xd6\xd4\x1co\x8b\xb6\xb6\x36\x8b\x83\xe6\x13\x19y\x85_C\xf\x33p\xd0p\x8c\v\x17\x62\xc5\xf2\xa0T\xf3\xa7\xb6}\xd9\xa7\xda#\xc7\xd0\xd0\x80J\x15\xcb\xb1r\x85j\xdd\xda\xda:\xd9*/\xbdk+\x90l\xf\xa7\xc4\xc4\x4^\xbd\x8e'!!Q\xe5\xfc \f\r\r\xb2y5\x1fV\x93\xfa\xb5\xbd{\x12\x13@KK\x8bZ\xe\x35\x38v\xfc\xb8\x32\x64\x1e\xc0\xb9\xf3\xe7qw\xab\x83\xa6\xe6\xfb\xf1k\xfd\x86M\xca\x85\xf9\xa7O\x9fr\xe6\xec\x45\xbe\xef\xef\xff\xd9\xda/\x84\x10\x42\b!\x84\x10\x42\b!\x84\xc8}\xd9Z\x18\xb2\xaa\x62\xc9\xdf\xf7\xaeg:\xff\xf1\xdf~GCC\x9d\x88\x8b'04|\x1f\xc6)<<\x2\x97zM8w\xee\x1c\x35k:\xa4[F\x89\x12\xc5\xd1\xd0P\xe7\xdc\xb9\v\x98\x98\x98\0\xf0\xe6\xcd\xdbt\xcfI\x8f\x8e\x8e\xeU-+p\xfe|\x18\r<\xeb\xab\x1c\xcb\xca\xc4\xea\xe7\x14\x1e\x1e\xc9\xed?\xfe\xa2}\xbb\xb6\xca\xf0W\t\t\x89\xec;xL\x99\xe7\xc3I\xea\x92\xef\xfa\xe9\xfc\x5LMM\x81\xa4'\xa0\x8e\x1d\xfb\r?\xbf\x16\x39\xd2n\xf1\xed)X\xd0\x88\xc5\vg\xe3\xe3\xdb\x8e\xf2\xe6\x66\xb4j\xe9\x93\xf1IYp\xe3\xc6MN\x9e:\xad\x92\x96OO/\xc5^;\xb7n\xdd\x66\xdd\xfa\x8d\xd8\xd9\xd9```\xc0\xe9S\xa7\xd1\xd0P\xa7\x64\xc9\x8c\xf7\xf\x2\xa8\xedX\x8b\xc0\x85+\x98\x33w\x1eVU,9\xfe\xdb\xef)\xf2T\xael\xc1\xee\xdd\xfb\xa8U\xab&z\xba\xbaXXT\xc4\xd4\x34iL\xda\xb8q\v\xb6\xb6\xd6\x94/oN\xd3\xa6\x8dY\xb4x9={\xf5\xa5O\x9f\x1e\xe8\xeb\xeb\x13\x11\x1e\x81\x8d\x8d\x35\x65\xcb\x66=\x84\x63V\xae\xad\x7f\xbf>x\xb7h\x8f\xa1\xa1!v\xb6\x36\x84GD2w\xdeR\xf6\xed\xd9\xa2\x92/x\xf5\x66\xac\xac,)U\xaa\x14+W\xae\xc1\xb1\x96-\xe\xff\x86\xca\xfc\xd4\xed\x17\x42\b!\x84\x10\x42|yB\xf6\xeeQy\xedQ\xdf\x33\x97Z\"\x84\x10\x42\x88\x9c\x94#{\fm\xdd\xba\x83\xd6-\x9b\xaa,\n\x1T\xacX\x1\xf3r\xa5\xd8\xbf\xff 5k:P\xb8pA.\x87G\x10\x11\x11\xa9\x12\x32\xe\xc0\xd0\xd0\x90\xa1?\xf8\x33`\xd0\b\xe2\xe2\xe2\x30\x31\x35\x61\xd3&\xd5I\xce\xac\xea\xd7\xb7\x17]z\xf4\xc7\xc4\xa4\x18\x35\xaaW\xe3\xe1\xa3G$&$P\xaf\x9e[\x86\x13\xab::\xba\0\\\xb8\x10\x46\xe1\xc2\x85)U\xaa\x64\xba\xed\xcf\x8ew\x93\xcd\x81\xf3\x16P\xb7\xae\x33\xd7\xae%-\xc6%\xdf\xe3#\xb5I\xea\xe1\x43\xfa\x31p\xd0H^<\x7f\x81iqSv\xef\xdeK\xdc\xf3\x17x7k\xf2\xd1m\x12\"-U\xad,\xe9\xdc\xb1-\x81\xf3\x83\b^6\xff\x93\x96=}\xd6\"\xa6\xcfZ\xa4\x92\xe6\xdd\xa4>\v\xe6\xcfQI\xd3\xd2\xd2\x42M\r\xa6L\x9d\xc1\xdd\xa8\xfb\xd8XWe\xeb\xc6`J\x95*Ittt\x86\xf5\xd4uqf\xf6\xf4\x9fX\xbct\x5!\xfb\xe\xd2\xc0\xd3\x9d\x6\xf5]T\xf2\xf4\xec\xd1\x95'O\x9e\xd0\xbdG_Z4o\x82\x85\x45\x45J\x96(\xc1\xd2\x45\xb3\x98\x36\x63\xe\xbb\xf6\x84\x30u\xcaOT\xacP\x81\xad\x9b\xd7\xb2`\xe1\x62\xc6\x8c\x99\xc0\x8b\x97/\xa9U\xd3\xek\xeb\xea\xd9\xea\x83\xf4\xae\xed\x43\xb5k\xd5\x64\xcb\xc6\x15,^\xb2\x9c\xd5k6R\xab\xa6-\xfb\x43\xb6R\xb1\x42\x5\x95|\xed\xda\xf8\xb0~\xc3\x16\x62\x63\x9f\xd1\xa8\xa1\a={tS\xeeY\x94/_\xbeO\xda~!\x84\x10\x42\b!\xc4\x97G\x16\x82\x84\x10\x42\x88o\x93\xda\xd5\x9b\xf7\x14%L\n\x3p\xf7\xde\x43\xcc\xcb\x16\xfb\xa4\x15\xdc\xbf\xff\0\xab\x1a\x8e\xac]\xb5\b\xd7\xba.)\x8e\xcf\x99;\x8fYs\x16r\xf1\xfc\xef\\\xb9r\x95\x81\x83\x86S\xb4\xa8\x31\xcb\x97.b\xce\x9cy\\\n\x8f`\xc5\xb2\xa4=.\xde\xbe}\xcb\xaaUk\xd8\xb0q\v\xbaz\xba\xb8\xb9\xba\x30z\xdc\x14\xd6\xae\\\x88\xabk]\xe\x1d\n\xc5\xef\xbb\xae\xdc\xbe~A\xb9\x97\xcf\x8e_v\xd2\xa5\xfb\xf7<\x88\xba\xaa\xb2\xc7\x10$\xed\xaf\xb1{\xcf^V\xae\\\xcb\xe5\x88+T\xb3\xaaL\xbb\xb6\xad\xa9W/\xe9)\xa1\x63\xc7\x7f\x63\xf1\x92\xe5\\\xbe\x1cI\xad\x9a\xb6\xf4\xe8\xd1Uebu\xdd\xba\rL\x9f\x39\x97\x16>M\x19\x34h\0\xe7\xce\x9dWi\xbfW\xe3\xe6\xb4\xf4\xf5\xa6s\xe7\x8e\x44GGcY\xad\x36\xbbw\xac\xc3\xda\xba\x6\0\x61\x17/Q\xaf\xbe\x37\xe7N\xfdJ\xf1\xe2\xc5\x1\xd8\x1b\xb2\x8fv\x1d{\x13u'\x1c---\xf6\x86\xec\x63\xe6\xac@\xfe\xf9'\x96\xc6^\x9e\xca\xf0v#G\f\x5\xe0\xd1\xa3G\xfc\x34q2\x87\x8f\xfc\x46\x8b\xe6M\x18\x36t0o\xdf&\xb0~\xc3\x46\x36m\xda\xca\xe3'1\xd4ss\xa1g\x8fn\x14*T\x10 \xd5~\x12\xffM/_%=Uw\xf7\xde\x43\xde}\xce\xd3\x92 :\"g\xa4\x36\x1e\t!\x84\x10\x42\b\xf1\x35\xbav\xeb\xbe\xca\xdf\x31Y\xf9\xbb\xe7\xd9\xf3\xb8\xcf\xde\xbe/Y\xa5\nf\x84_\xc9|4\x18!\x84\x10\x42|\xdd\xf2\xeb\xe5\x3\x92\xfe?\xf4\xd9\x17\x86>\xa7\xa8\xa8\xbf\xa8n\xeb\xcc\xf1\xc3{03\xcbx\xff\x10!\xbe\x35\x39\xbd\x30$\xbe\xe\xb2\x30$\x84\x10\x42\b!\xfe+da(\xfb\x64\x61H\b!\x84\xf8\xb6$_\x18\xca\x91Pr\x9f\xca\xd5\xab\xd7\x38v\xfc\x37\xcc\xcc\xca\xa1\xa1\xa1\xc1\x8a\x15\xabh\xd7\xc6\x87r\xe5\xfe\x97\xdbM\x13\x42\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\xf8\xe2}U\vC\0\xe1\xe1\x11\xcc_\xb0\x4S\xd3\x62\x34\xf6j@\x9b\xd6~\xa8\xa9\xa9\xe5v\xb3\x84\x10\xe2\xabQ\xa4H\x11\xfe\xbe'\xdf\f\x14\x42\b!\x84\x10\xe2[7o\xee\x9c\x14i\xbd\xfa\xf8\xe7\x42K\x84\x10\x42\b\x91\x93\xbe\xaa\x85\xa1\xf2\xe5\xcd\x99>mJn7C\b!\x84\x10\x42\b!\x84\x10\xe2\xab'\x8b@B\b!\xc4\xb7I=\xb7\x1b \x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\x42\b!r\x86,\f\t!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\x42|#daH\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\xe2\x1b\xf1Y\xf7\x18JHH >>\x1e\x1d\x1d\x9d\xcfY\x8d\x10\xe2\v'c\x81\x10\x42\b!\x84\x10\x42|yB\xf6\xeeQy\xedQ\xdf\x33\x97Z\"\x84\x10\x42\x88\x9c\xf4\xd9\x9e\x18z\xf2$\x6\xdb\x9a\xae\x1c \x87\xb4\xda\xbf|\xc5JBC\x8f\xb0\x61\xfd\xeaOZ\x9f\x42\x1\x8a\x44Y\x14\x12\x42\b!\x84\x10\"'$&&r\xe2\xc4\xef\x4\xce\x99\xcd\x85\xf3\xe7R\x1c\x7f\xfe\xfc\x39\r\x1by\xe1\xd7\xaa\x8dJ\xba\x81\x81\x1\x90\xb4\xa0\x34l\xc8 \xe2\xe2\x9e\xd1\xa5kw\x9e \xef\x45\n!\x84\x10\xe2\xab\xf1Y\x16\x86v\xee\n\xe1\xf4\xe9s\x1c\t\xdd\x9dn\xbe{\xf\x1e\xb2o\xdf\x1\x1a\x35j\xa0\x92\xbeu\xeb\xf6\xcf\xd1\xac\\\x15\x16v\t\xc7Zv8\xd7q\xca\xed\xa6\b\x91\x63\x32;\x16\x88\x9c\xd7\xb3g\xb7\xdcn\x82\x10\x42\b!\x84\x10\xdf\x8c\xd8\x7f\xfe\xe1\xe7\x9f&\xd0\xae\x43Gf\xcf\r\xc4\xa9\x96\x83\xca\xf1\xe7qq\x94\x33\x33\xa7z\x8d\x1a\xa9\x9e\x7f\xea\xd4I\x8e\x1d=B\xc8\x81_122\x2@__\x9f\xa1\x83\x7f\xa0\x91Wc\n\x16,\xc8\xa3G\xf\x99\x1e\x30\x95\x45K\x96\x62kk\a@E\v\v\xea\xd7s\xe5\xec\x99\xd3\xd8\xda}}_\xa0\x13\x42\b!\xc4\xe7\xf1\xc9\x43\xc9\xc5\xc7\xc7\x33\x66\xfc$\xc6\x8d\x1d\x86~\x81\x2\xe9\xe6m\xdb\xda\x9b\x19\x33\xe7\xaa\x84N\x8a\x8d}\xc6\xb4\x99\x81\xf8\xf7\xea\x94\"\xff\xc9S\xa7\xe9\xda\xad\x17\xd6\xb6\x8e\xfc\x30h(\x7f\xfe\xf9\xa7\xf2\xd8\xfe\x3\a\xe9\xe3\xdf\x1f[{'<<\x1b\xb3`\xc1\"^\xbdz\xa5<~\xf5\xda\x35\x6\f\x1c\x8c\xb5\xad#\xe\xb5\\\x18>b4o\xde\xbcQ\x86\xb2\xfa\xe3\x8f\xf7\x65\xed\xf8\x65'\xc6&f\xca\xd7\x1\x1\x33\xf8y\xf2T\x96/\xf\xc6\xc3\xb3\x31\x83\x6\xf\x3 ..\x8e\x19\x33g\xe3\xea\xd6\x80&\xcd|Y\xbf\x61\x13\t\t\t)\xda=l\xf8(\xa6L\v\xe4\x97\xdd\a161K3<\xd6\xf7\x3\x6\x31n\xdc\x4\x95\x34\vK\x1b\x36m\xde\x42\\\\\x1c\xaen\r\x18=f\x9c\xf2\xd8_\x7f\xfd\x45\xb9\xf2V\xacY\xbb>\xdd~\x16\"7de,\xc8\x8c\xf4>\x1f\xb1\xb1\xcf\x30\xb7\xb0\x1\xa0\x89O[\x8cM\xcc\x38y\xea\xb4\x32\xdf\xa1\x43\xa1t\xee\xd2\x83*\xd5\xec\xe9\xd4\xb9;aa\x17\x95\xc7\xc2.^b\xd4\xe8q8\xd4r\xa1m\xbbN\x9c;w>\xcd\x36\x1c:\x14J\xbb\xf6\x9d\xb1\xb0\xb4\xc1\xc3\xb3\x31+\x82W\xa9\x1c\xdf\x1b\xb2\x1f\xff\xbe\xdf+\xc7\xa8{\xf7\xee\x7fT\xfb\x17.Z\xcc\xd8\x1f\x3\b=z\nc\x13\x33\xda|\xd7\x41y\xee\xdd\xbbQ\f\x19:\x2[{'\xda\xb5\xef\xcc\xc9\x93\xa7\x94\xc7\xd2\x1a\xb3\x92\v\b\x98\x41\xfb\x8e]\x95\xaf\xd3\x1a#S\x13\x11\x11I\xbf\xfe\x3\xb1\xb6u\xa4K\xd7\x9e*uGGGS\xbcTEv\xef\xd9K\x1f\xff\xfe\xd8\x39\x38\x33l\xf8(\xa2\xa3\xffV)#\xbd\xf1< `\x6#G\x8d%`\xdaL<<\x1b\xd3\xd0\xcb\x9bM\x9b\xb7H\xd8;!\x84\x10\x42\b\xf1\xd5\x32\x30\x34\x64\xcb\xf6_h\xde\xc2\x97\xfc\xf9S\xfe}\xf4\xec\xd9\x33t\xd3\xd9\x93u\xef\x9e\xdd\x34i\xdaL\xb9(\x4P\xb3Vm\x12\x12\x12\x39s:\xe9\xff\xe3\xbf\x1d?N\xc1\x82\x46T\xaf\xfe~q\xa9\x44\x89\x92\xb8\xb9{p\xf0\xe0\x81Ox5B\b!\x84\xf8\xda}\xf2\x85\xa1\x85\x41\xcb)Q\xdc\x94\xa6\x8d\x1b\x66\x98\xb7}\xbb\xef\xb8\x1f\xfd\x90\xfd\a\xe*\xd3\xb6m\xdf\x41\x5\xf3\xff\xe1\xee\xee\xa6\x92\xf7\xf7\x13'\xe9\xda\xdd\x9f\x46\r=\x99>m\x12\x9a\x9a\x9a\xb4j\xd3\x91\x7f\xfeI\xda{\xe3J\xe4\x15*YX0i\xe2\x38zt\xef\xcc\xec\xc0 \x96.[\x1@L\xccS|Z|\x87\x91\x91\x11sf\a0z\xe4P*T(O\x9e z\x82\xc8\xcb\xa7\xd1\xd5\xd5\xc5\xc1\xde\x8eW\xaf_\xb3tY0\xad[\xb5T9\xaft\xa9R\xf8\x34k\xcc\x95\xab\xd7\xa8\\\xb9R\xb6\xeb\xafQ\xbd\x1a\x43~\xe8\xcd\x90\xa1\xa3\xe8\xda\xb9=\xbf\x9d\x38\xcd\xfe\xbd\xdb%N\xb0\xf8\xe2\x64u,\xe8\xddo\xe8G\xd5\xa7\xa9\xa9\x81\x95U\x15\0\xec\xedl\x95\x9f\xb3\x97/_2z\xec\x44\x2&OP.6\xd7\xaa\xf9>d\x83y\xb9RT\xaeT\x91\xef\xbek\r@\xe5\xca\x95Y\xbb\x61\a\x17.\x84Q\xacXQ\x95:\xae^\xbd\x86qaC\xbc\xbd\x9b\xa2\xa3\xa3\x83]*\xedX\xb5|\xbe\xb2\x9e|zz\xb4l\xd3\x95{\xf7\xefQ\xb2\x44\xfa{\x8a\xa5\xd5\xfe\x2\x5\n\xd0\xb0\x81\az\xba:*c\xc7\xfa\r\x1bq\xb0\xb3\xa6G\xf7\xa4'~\x1c\xec\xed\x38\x7f!\x8c\xbd{B\xb0L\x96/\xf9\x98\x95\x9e\xac\x8c\x91\xb3\x66\x5\xd2\xdf\xbf\x1b\xdd\xbbu\x1\xc0\xc9\xb1\x36O\x9f>e\xe6\xac@\xd6\xd9\xbf\xef\x95\x15K\xe6\xe2\xe9\x99\xb4\xaf\x94\x65\x15K\xaa[;q\xf8\xf0\x11<<\xea\x65\x38\x9e\xab\xab\xa9\xa3\xa1\xa1N\xbf~}\0pv\xae\xc3\xfe\x3\xbfr\xe4\xc8\x31\t\xc7)\x84\x10\x42\b!\xfe\x93Z\xb5n\x83\xa1\xa1!\x5\n\xe8\x13\x1d\xfd\x80\x95\xc1+8t\xf0\0\xcbV\xac\x44WW\x8f\xc8\xc8H\x9a\xfb\xfa\xa6\x38\xafpac\x9e\xc4$- E?x\x80\xbe\xbe~\x8a<\x5\xf4\v\x10u\xf7n\xaa\xf5V\xaa`\x96jz\xf8\x95\xeb\x1fq5B\b!\x84\xf8\xd2\x65{a(:\xfa!+W\xaf\xa7O\xaf.hkk\x3\x10\xbcj=VU*S\xd5\xca\x32\xd3\xe5\xf8x7#`\xfa\\\xe\x1c\x38\xc4\xe3\xc7\x8f)W\xb6\x34\x35k:\xa8\x84sz\xf5\xea\x15G\x8f\x9f\xe1\xe8\xf1\x33\f\x1a\x36^\xe5\xfc\xd8\xd8\xa4o\x98\xbf|\xf9\x92]\xbb\xf6p(\xf4\x30\x37o\xde\xe6|X\xa4\xf2)\x1d\x33\xb3rx5p\xa5\x85_{Z\xfb\xf9\xe0\xe6\xea\x82\x8d\x8du\x96\x16T<=\x9cU&Xo\\\xbf\xc1\xcbW\xf1\x94.g\xa5\x92OOW;\xd3\x65\x66G\x8f\xee\xdd\x98\x1c\x10\xc8\xa0\x61\xe3Y\xbf:\x88\"E\x8a|\xd6\xfa\x84\xc8\xc8\xa7\x18\v\x8e\x86\xee\xa2\xbc\xb9\xb9J\xda\xae\xdd{\xe8\xd8\xa5\xefG\xb5\xed\xee\xdd(\x1e\x44?\xa6\x42\xc5\xf2\xa9\x1e\xd7\xd5\xd1\xc1\xc6\xba\xba\xf2u\x91\"\xc6\x18\x19\x16 \xf6\xd9\xb3\x14y\x1d\x9dj\xb3\x30h\x19\r\x1ay\xd3\xdc\xa7\t\xf5\xdc\\17W\xfd#\xca\xc8\xc8P\xf9{\xa9R\xa5\0x\x1e\xf7\xfc\xa3\xae!5aa\x97\xd8\xbes?\xdbMT\xeb\xef\xdc\xc1O\xf9\xfb\x87\x63Vz2;F\xbe}\x9b\xc0\xfe\x83Gh\xe9\xeb\xa3\x92^\xc7\xc9\x91.=\xfa\xab\x84\x5-\\\xb8\x90\xf2w\xe3\xc2\x85\xa9Q\xdd\x92\x9b\xb7nej<\apwS]\0\xb2\xaeQ\x8d\x98\x98\x98L]\x8f\x10\x42\b!\x84\x10_\x9b\xe6-T\x17}\xacmlquv\xe4\xd8\xd1\xa3x\xd4\xf7\xa4\xec\xff\xca\xf2,\x95\xbfSbb\x9eP\xb8pa\0\n\x16*\xc8\xa5\x8b\x17S\xe4\x89\x8b\x8b\xa3t\x99\x32\xa9\xd6+\v@B\b!\xc4\xb7)\xdb\vCzz\xba\x84\xec;\xc8\x95\xab\xd7\bZ0\v\x85\x42\xc1\xa2\xc5\xcb\x99;kj\x96\xca\xd1\xd7/\xc0\xa0\x81\xfe\xf4\xe8=\x80\x84\x84\x44V\a/D\xfd\x83\xa7\x85\xb4\xb4\xb4\xd0\xd0P\xa7g\xb7\xf6t\xea\xd8N\xe5\x98\x81\x81\x1\0\xfe}\a\x90'O\x1e\xbau\xebL\xd1\"\xc6\xac\b^\xc5\xf4Y\x8b\0\xd0\xd6\xd6\x66q\xd0|\"#\xaf\xf0k\xe8\x61\x6\xe\x1a\x8eq\xe1\x42\xacX\x1e\xa4,GA\xd6\xf6\xae\xc8\x97?\x1f\0\xa7~?\x80\x66\xb2\xc9S55\xb5,\x95\xf3\xa1\x8c\xf6\xd0H\x1e\x82N;\x9d\xf8\xc3\x42\xe4\x94O5\x16\x64\x46V\xf7\x98y\xfe\xfc\xf9\xbb\x13\x33}\xce\x87\xe3\xcf;%K\x94\xe0\xe0\xfe]\x9c>}\x86\x83\x87\x42\xf1h\xe0M\xdb\x36\xcd\x19\x37vt\xaa\xf9S\x1b\n>\xd5\x1e\x39\x86\x86\x6T\xaaX\x8e\x95+\x82T\xd2\xb5\xb5\xb3\x37&\xa4\x37\x46\x16H\xb6?Tbb\x2\xaf^\xc7\x93\x90\x90\xa8r~\x9e vl\x15\x42\b!\x84\x10\xe2kR\xb4hQJ\x97.\xc3\xfd\xfb\xf7\0\x30\x37/\xcf\xad[\xb7T\xf2\xbc~\xfd\x9a\x9b\x37nR\xb4h1\0LLL\xd8\xb0~\x1d\xf1\xf1\xf1hii)\xf3\xfdq\xe7\xe\x65\xca\x94\xcd\xb9\xc6\v!\x84\x10\xe2\x8b\x97\xed=\x86\xf2\xe5\xd3\x63\xdd\xea%\\\b\xbb\xc4\xc2\xa0\xe5\x1c>r\x1c===\x1c\xecm\xb2\\\x96w\xb3\xa6\xbc|\x15O\xfc\x9b\xb7\xd4\xae]+e#\xd5\xd5i\xea\xe5\xc1\x8d\x1b\x37\x31\x35\x35\xa5x\xf1\xe2\xca\x9f|\xf9\xf2\xf1\xf8\xf1\x63v\xec:@\x9b\x36~T\xabjE\xb1\x62\xc5\b\xf\x8fT)CMM\r\v\x8b\x8a\xf4\xee\xd5\x83\xf5kWp\xfc\xc4\x39\xc2\xc2.\xa1\xab\xab\v\xc0\x9f\x7f\xbe\x7f\xac\xfa\xef\xf\x36IO\x8dY\xb9r\xca\xbc\xc9\xdb\x63jj\x9a\xc1\x99\xaa\x92O\x9e\x1a\xe8\xebs\xee|\x98\xca\xf1G\x8f\x9f\xaa\xbc^\xbbn\x1d\x66\xff+I\xe7\xe~\xfc\x30h8O\x9f\xaa\x1e\x17\"\xa7}\xca\xb1 =\x19}>\xde-\x1c\xbcy\xf3\x46\x99\x66\x62\x92\xf4\aRd\xe4\xd5O\xd2\x86 \x95\xf1\xa7P\xa1\x82\xd9\xb9,e\xfd\xa9\x8d\x91\xc9iiiQ\xcb\xa1\x6\xc7\x8e\x1fWI?w\xfe<\xeenu\xd0\xd4|\xbf\x30\x94|\xbf\xb5\xa7O\x9fr\xe6\xec\x45\xcc\xcd\xcd\x32\x1c\xcf\x85\x10\x42\b!\x84\xf8\xd6(\x14\n\x12\x13U\xbf|\xf5\xf8\xf1#\xee\xdc\xb9M\xe9\xd2IO\xfa\xd4s\xf7`\xc7\xb6m<\xfc\xfb\xfd|\xc5\xd9\x33\xa7\x1\xb0\xb1M\n\xe9l\xefP\x93'\x8f\x1fs\xfa\xd4)e\x9e\x87\xf\x1f\xb2k\xe7/\xb8\xd6\xab\xf7\xb9/C\b!\x84\x10_\x91\x8f\xda\x63\xa8`A#\x16/\x9c\x8d\x8fo;\xca\x9b\x9b\xd1\xaa\xa5O\xc6'\xa5\x42_\xbf\0G\x7f\xdd\x85\x8e\x8ev\x9a\xe1\xdd\xfa\xf6\xed\x45\xddzM\x18\x33v !>\x97O5\x16\xa4'\xa3\xcfG\x81\x2\x5\x30\xfb_I\xb6n\xdb\x41\xfe\x2\x5(\\\xa8 \xc5\x8b\x17\xa7W\xb7v\x8c\x18\x35\x9e\xc4\xc4\x44LMM\xb8y\xeb\x16\xe5\xcd\xcd\xb1\xb0\xa8\x98\xa5\xfa\xf7\x1f\x38\xc8\xcd\x9b\xb7\xa8\\\xc9\x2---\xe\x1e\xfc\x95\x8a\xe5\xcb\xa2\xafo\xc0\xe3\xc7\x8f>[\xfb\xcb\x94)\xc5\xa9\x33\x17\xd9\x7f\xe0 \xfa\x5\n`kkC\xd3\xa6\x8dY\xb4x9={\xf5\xa5O\x9f\x1e\xe8\xeb\xeb\x13\x11\x1e\x81\x8d\x8d\x35\x65\xcb\xa6\x1e\"\"=\xe9\x8d\x91\x1f\xea\xdf\xaf\xf\xde-\xda\x63hh\x88\x9d\xad\r\xe1\x11\x91\xcc\x9d\xb7\x94}{\xb6\xa8\xe4\v^\xbd\x19++KJ\x95*\xc5\xca\x95kp\xac\x65\x8b\xc3\xbf{\x10\xa5\x37\x9e'\xff\x66\xa3\x10\x42\b!\x84\x10\xdf\x82;\xb7o3r\xc4\x30\xbc}|(Z\xd4\x84\xb8\xb8g\xacY\xbd\x92\xda\x8eN\xd4\xac\x99\xf4\xe5YGG'jX[3\xe8\x87\x1\xb4\xef\xd0\x91\x17/^0\xe5\xe7I\f\x1c\x34X\xb9\xaf\x90\xa9iqz\xf6\xee\xc3\xd0!?0h\xf0P\n\x14(@\xf0\x8a\xe5\x34h\xd8\b+\xab\xaa\xb9y\x89\x42\b!\x84\xf8\xc2\x64\xfb\x89\xa1w\xaaZY\xd2\xb9\x63[\xc2.^\xa2\x85O\x93l\x97S\xbe\xbc\x39%K\x96L\xf3x\xc5\n\x15\xf8u\xff\xe\x62\x63\x9f\xd1\xbdG_\x86\xe\x1bMll,\xaf^\xbd\"O\x9e<,_\xba\x80\x84\xc4\x44\xfa\x7f?\x94\x83\a\x7f\x65\xea\xa4\xd1\xca=\x86\xb4\xb4\xb4PS\x83)Sg\xd0\xb6}7~?y\x9a\xad\x1b\x83)U\xaa$\x9a\x9a\x9a\x4\xce\x9d\x89I\xb1\xa2\x8c\x1c=\x81\x3\a\xf\x31i\xc2\x88L\xb5y\xe2O\xe3\xe9\xdd\xab+K\x97\x5\xd3\xea\xbbN\xac\xdf\xb0)K\xe1\x8e:vh\xcb?\xb1\xcf\x18\x37~\"111\xd4uqf\xf6\xf4\x9f\xd8\xbe\x63\x17S\x2\x66\xa2\xaf\xafO\x83\xfa.@RH\xac\xef\a\xe\xa1K\xc7\xd6\xd4\xaeU\x13]]]&O\xfa\x91\x85\x8bWq\xe8Ph\xa6\xeb\x14\xe2s\xf9TcAZ\xd2\xfb|@\xd2\x13/\x8b\x16\xcc\xe1\xde\xbd\a\xf8\xf7\x1d\xc8\x85\vI\xb1\xb5\x87\xe\x1d\x44\x97\xce\xed\x98\x33w>\x9d\xba\xf4\"4\xf4H\xb6\xc2\x92\x19\x19\x19q\xe3\xc6M\x86\xe\x1f\x43\x8f^\xfd\x1\b^\x1e\xa4\xf2\x94\xcc\xe7h\xbf\x9b\x9b+C\a\xfd\x9f\xbd\xbb\x8e\xaa\xfa\xfe\xe3\x38\xfe\x4\x5\xa4\x44\xc5@\xc4\x16\xbb\x45\x62\xce\xe\x14\x44\x31\x66\xe7l\xc4n\xdd\x66\xeb\xc2\xee\xc0\xee\xee\x9a\x39k\xb6\xdb\xec\xce\xa9(6\b\"\xf1\xfb\x83\xed\xfev\a(&\xdbx=\xce\xb9\xe7x?\xf9\xfe~\x11\xe\x97\xf7\xf7\xf3\xf9\xf8\xd3\xaf\xff &M\x9e\x46H\xc8\vlllX\xb3j\t\x85\n\x15`\xe0\xc0\x61\xb4m\xe7\xcf\xd1\x63\xc7\x89\x8e\x8e\x8ao\xfa\xd7z\xdd\xcf\xc8\xbf\xfb\xbc\xd4g\xac^1\x8f_\x7f;M\xe7\xae\xbd\x39}\xfa\f\xdb\xb7\xad\x89\x95hk\xd6\xb8\xe\xcb\x96\xaf\xe6\xab\xaf\x87\xe0\xec\x9c\x93\xa9S&\x18\x12\xff\xaf\xfby.\"\"\"\"\x92\xd4\xa4N\x93\x86\x9a\xbe\xb5\xd8\xb9\x63\a\xfd\xfb\xf6\x66\xd9\xd2%T\xaa\xec\xc9\x98q\xe3\x31\xff\x63;ys\v\v\xc6O\x98\x84K\xc9\x92L\x9c\x30\x8e\xcd\x9b\x36\xd2\xff\xab\xaf\xa9W\xbf\x81\xd1X~\x1d;\xd1\xa5kw\xd6\xaeY\xcd\x8c\xe9S)]\xa6,C\x86\xe\x8fw\xcb\xecm[\xb7\x18\xbd\x44\x44\x44$i0\xb9p\xe5Ntf\xc7\x98\x83\no\xddy@\xee\x1c\x19\xdfz\x90\xe8\xe8h\xc2\xc2\xc2\xb0\xd4\x99\x37\"\xff(\xa1\x61\x11@\xcc\xf7\xf6\x9f\xdf\xe7\xf1\xf9k\x1b\xfd,\x90w\x15\x18\x18H\xa1\x62\x9f\xb3y\xfdR\\\\J$v8\"\"\"\"\xf2\x1fw\xf1\xea]\xa3\xcf\x31o\xf3\xb9\xe7yH\xf0G\x8f\xef\x9f\xac@^g\xce\x9c\xbf\x94\xd8\x61\x88\x88\x88\xc8'bk\x1ds\x8c\xc3\xad;\xf\xde\x7f\xc5\x10\xc4<\xe9\xae?\x4\x8b\x88~\x16\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\xfc\xb3}\x90\xc4\x90\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\xfc\xf3%O\xec\0\x44\x44\xe4\xbf#C\x86\f\xdc\xbf\xa3\xed(DDDDDDDDD\xfe\xa9\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11I\x82\xa6L\x9a\x18\xab\xcc\xcf\xbfS\"D\"\"\"\"\x9f\x92\x12\x43\"\"\"\"\"\"\"\"I\x90\x92@\"\"\"I\x93\xce\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11I\"\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11I\"\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11I\"t\xc6\x90\x88\x88\x88\x88\x88\x88\x88H\x12\xb4m\xeb\x16\xa3\xf7\x9eU\xab%R$\"\"\"\xf2))1$\"\"\"\"\"\"\"\x92\x4)\x11$\"\"\x92\x34i+9\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91$B\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91$B\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91$B\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91$\"yb\a \"\"\"\"\"\"\"\"\x9f\xde\x94I\x13\x63\x95\xf9\xf9wJ\x84HDDD\xe4SRbHDDDDDDD$\tR\x12HDD$i\xd2Vr\"\"\"\"\"\"\"\"\"\"\"\"I\x84\x12\x43\"\"\"\"\"\"\"\"\"\"\"\"I\x84\x12\x43\"\"\"\"\"\"\"\"\"\"\"\"I\x84\xce\x18\x12\x11\x11\x11\x11\x11\x11\x11I\x82\xb6m\xdd\x62\xf4\xde\xb3j\xb5\x44\x8a\x44\x44\x44\x44>%%\x86\x44\x44\x44\x44\x44\x44\x44\x44\x92 %\x82\x44\x44\x44\x92&m%'\"\"\"\"\"\"\"\"\"\"\"\x92\x44h\xc5\x90\x88\x88\x88\x88\x88\x88\x88H\x2\x84\x84\x84\xf0\xfb\xef\xb7\x89x\xf5\xca\xa8\xdc\xda\xda\x86\xac\xd9\xb2%NP\"\"\"\"oI\x89!\x11\x11\x11\x11\x11\x11\x11\x91\x37\x38|\xe8\x10={t\xe5\xd1\xc3\x87\xb1\xea\xea\xd5o\xc8\xc0\xc1\x43\x12!*\x11\x11\x11\x91\xb7\xa7\xc4\x90\x88\x88\x88\x88\x88\x88\x88\xc8k\x84\x85\x85\xd1\xbbgw\xbc\xbc\xabS\xb3\xa6/\xa9R\xa7\x36\xaa\xb7\xb0\xb0H\xa4\xc8\xde\xcf\x94I\x13\x63\x95\xf9\xf9wJ\x84HDDD\xe4SRbHD>\xba\xc8\xc8H\xc2\xc3\xc3\xb1\xb4\xb4L\xecPDDDDDD\xdeZPP\x10\x41\x41\xfh\xda\xac\x5NNN\x89\x1d\xce\a\xa3$\x90\x88\x88H\xd2\x64\x9a\xd8\x1\x88\xc8\x7f\xdb\xa3G\x8fq\xfd\xac\";w\xed\x8d\xb3\xfe\xd7\xdfN\xd1\xabw?>/S\tW\xf7\x32\xb4i\xeb\xc7\xaa\xd5k\f\xf5w\xee\xdc\xe5\xbb\xefG\xe1\xedS\x9b\x82\x45\\\xa9\xdf\xa0)3\x3\x66\xf3\xec\xd9s\xa3qN\x9c\x38IzGg\xd6\xac]gT\xfe\xf0\xe1\x43\n\x17sg\xfc\xf8I\x1f\xfe\xe2\x12\xd1\xb4i3\xf0\xf3\xef\x42tt\xf4;\xf5?}\xfa\f\x83\x87\f\xa7\x8a\xa7\xf^\xde\xbe\f\x19:\x82K\x97.\x1b\xb5\x39y\xf2\x17\xd2;:s\xe3\xc6\xcdX\xfd'N\x9cL\xbd\xfa\x8d\xb9p\xf1\"\xe9\x1d\x9d_\xfb\xbav\xed\xda;\xc5(\"\"\"\"\xf2O\x91!C\x6\xac\xac\xac\x62\x9d-$\"\"\"\xf2o\xa4\x15\x43\"\xf2Q\xf5\xee\x37\x90\x92%\x8aQ\xdd\xdb\x33V\xdd\x81\x83?S\xb7~\v\xbe\xee\xdf\x1d\xafj\x9e\x44\x44\x46r\xf3\xe6-\xee\xde\xbd\a\xc0\xdd\xbbw\xa9\xe1[\x8f\x8a\x15\xca\xd0\xb5\xb3\x1f\x66\x66\x66\x4\x6\xde\xe7\xd8\xf1\x13XZ\xa6\x30\x1a\xabx\xf1\x62\xf4\xea\xd6\x81\x1_\xf\xa3\xd4g\x1e\xa4O\x9f\x1e\x80\x31\x63'\x90\xd1!=m\xda|\xf9\xf1/\xf6\x13\x8a\x8e\x86\xe8\xa8wK\n\xadX\xb1\x8a\xce\xdd\xfb\xd3\xb1}K\xbav\xedHHp\b?n\xdfI\xf9J>L\x9f\x32\x6o\xefj\t\x1e\xcb\x31\x63\x46\xd6\xadZ`x?z\xec\x4\xac,-\xe9\xd0\xbe\x8d\xa1,]\xbat\xef\x14\xa7\x88\x88\x88\x88\xc8?\x85\x99\x99\x19]\xbau\xc7\xbf\x63{z\xf5\xeeGTT\xa4Q}\x9a\x34i(R\xb4X\"E'\"\"\"\xf2v\x94\x18\x12\x91\x8f\x66\xe3\xa6m\x1c=z\x82\xbd{6\xc7Y?3`\xe\xfe\x1d\xbe\xc4\xaf\x43\xbb\x38\xeb\x37o\xd9\x86\xad\xad\r#G\f\xc5\xd4\xf4\xff\v\x1c\xeb\xd7\xff\"\xce\xf6\x1d:\xb4\x65\xe3\xe6m\x8c\x1a=\x8e\xef\xbf\x1b\xc1\xc1\x83?3s\xf6\x62\xb6m^\x89\x95\x95\xd5\xfb_\xd0?H\x87\xem\xdf\xa9\xdf\x95+W\xe9\xdc\xbd?\v\xe7N\xa5\x62\xc5\n\x86\xf2:uj1y\xf2T\xfc\xbb\xf4\xa6X\xb1\"8::&h<[[[<<\xdc\r\xef\x33.Y\x86\x8d\x8d\x8dQ\x99\x88\x88\x88\x88\xc8\x7f\x81\xa5\xa5\x15\xd7\xae^\xc5\xef/\xf\x41\xfd\xa9^\xfd\x86J\f\x89\x88\x88\xc8\xbf\x86\xb6\x92\x13\x91\x8f\"<<\x9c\x81\x43\x46\x32xP?\xecR\xa6\x8c\xb3MP\xd0\x43\xee\xdf\xbf\x1f\xefvh\xcf\x9f?\xe7\x41\xd0\x43^\xbe|\x99\xa0\x39mll\xf8\xfe\xdb\xa1\xcc]\xb0\x82M\x9b\xb6\xd0o\xc0 \xfa\xf5\xee\x44\xb1\xa2\x45\fmF\x8d\x1a\xcb\xb7\xdf\xfd\xc0\xdc\xb9\xf3\xf1\xacV\x83^\xbd\xfbq\xef^ \x13&L\xa6v\x9d\x6\x14.\xe6N\xdbv\x1d\x39u\xea\x34\0\xc7\x8e\x1d'\xbd\xa3\x33\xe7\xce\x9f\x37\x8c\x11\x11\x11I\xa9\xd2\x15Y\xbe\x62\x65\xac\x18\xa2\xa2\xa2X\xb1\x62\x15u\xeb\x35\xa2L\xb9*\x8c\x1e\x33\x8e\xe7\xcf\x63\xb6\xbdk\xde\xb2\r\xdd{\xf4\x36j\xbfq\xe3\x66\n\x17s',\xec\xe5k\xfb\xfe\xdd\xa8Qci\xde\xf2\xff\x1fH/\\\xbcH\xf7\x1e\xbdqq-\x8dG\xa9\xf2\xf4\x1f\xf0\r\xaf\xe2\xd8\xe6\x62\xde\xfc\x5T\xabR\x8e\n\x15\xca\x1b\x95\x9b\x9a\x9a\xd2\xaaUK\xd2\xa7\xb3g\xc5\x8a\xd5o\xba\xd5\"\"\"\"\"IJpp0C\a\xf\xa2k\xf7\x9e\xec\xd9{\x80\x93\xbf\x9d\x31z\r\xf8\xfa\x9b\xc4\xeQDDD$\xc1\x94\x18\x12\x91\x8f\x62\xfa\xcc\xb9\x64v\xca\x84o\r\xefx\xdb\xb4l\xd1\x84%\xcb\xd7\xd3\xaf\xff\xd7\x1c=z\x8c\xf0\xf0p\xa3zO\xcf\xca<\x7f\x1e\xc2\x97\xad\xdb\xb3}\xc7\xceX\xe7\n\xc5\xc5\xcd\xcd\x95N~_\xd2\xb2Mg\xae\\\xbdI\xdb\x36\xad\x63\xb5\x19\x33~\x6\x87\xe\x1f\xa5M\xeb\x16\xd4\xac\xe9\xc3\xb3g\xcfx\xf8\xf0!\x8d\x1a\xd5\x63\xc2\xd8\xefH\x95\xca\x8e/\x1a\x34\xe7\xc1\x83 \x8a\x15+J\x81|\xb9\xd8\xb3\xfb\xffg$\x9d:}\x9a\xab\xd7oS\xa1|\xb9\xd8\xd7==\x80\xc5K\x96\xe3\xef\xd7\x8e\xfe}{p\xec\xf8I\x6|5\x90\xe8\xe8h\x1a\xd6\xaf\xcb\x92\xe5\xebx\xfc\xf8\x89\xa1\xfd\xba\xf5\x1bi\xdd\xb2))RX\xbc\xb6\xef\xeb<~\xfc\x84:_4!M\x9a\x34L\x9c\x30\x8ao\xbe\xeaK\xde\xbcy033\x8b\xd5\xf6\xd0\xa1\x63\xb8\xbb\xbb\x62\x62\x62\x12\xab\xce\xca\xca\x8a\n\xe5Ks\xea\xf4\x99\xd7\xce'\"\"\"\"\x92\xd4<}\xfa\x84W\xaf\xc2\xf1\xa9Q\x93t\xe9\xd3\x63nnn\xf4J\x9e\xfc\xdf\xb9!\xcb\xb6\xad[\x8c^\"\"\"\x92\x34\xfc;\x7fs\x11\x91\x7f\xb4\xd0\xd0P&O\r`\xe9\xa2Y\xafmW\xa7v-\xf2\xe4\xce\xcd\x92\xa5\xcb\xa9Q\xbb\x31Y\x9c\x32\xd2\xd1\xaf\r>\xd5\xbdH\x9d:5\xf9\xf2\xe6\xe5\xe7\xfd;X\xb3v\x1d]\xba\xf5%44\f\xbfv-\xf9\xe2\x8b:d\xcb\x96\x35\xdeq?/\xe5\xc1\xc4)\xb3\xc9\x91=3\xd6\xd6qo!7i\xe2X\xa3\xfo\x83\a\xff\xff\t\xbf|\xf9\xf2\x31w\xc1\n\xce\x9e=K\xd9\xb2\x65h\xd1\xbc\x31\x33\x3\xe6\xd2\xb6m+\x92%K\xc6\x8e\xed;i\xd2\xb0\x36i\xd3\xa6\x35\x1a\xf3\xd1\xa3\xc7\f\x19\x31\x9a\xcd\x1b\x96\x1bV)988P\xc5\xab.\xfd\xfb\xf5\xe1\xf3\xcfKakc\xc5\xcf\x87\xe\xe1U\xad*\xf7\xee\x5\xb2n\xe3vz\xf6\xec\xfa\xc6\xbe\xe\xe\x19\xe2\xbd\xde\xdb\xb7os\xff\xc1\x63j\xf9\xd6\xa0@\x81\xfc\xf1\xb6{\xf5\xea\x15\xbf\x9c:O\xdb\x36\xa9\xe3m\x93)\x93#\a\xe\x1e\x8e\xb7^DDDD$)rp\xc8H\x1a{{\x9e=}\x8a\x83\x83\x43\x62\x87\xf3\xc1xVM\xf8\xf9\xa2\"\"\"\xf2\xdf\xa1\x15\x43\"\xf2^\x2\x3\x1f\x30j\xcc$\xc2\xc2\xc2\fe\xf3\x17.\xa3H\xe1\x82\x14-R\xe8\x8d\xfd\v\x16,\xc0\xf0\x61\x83\x39\xfd\xcb\x41\xfa\xf6\xee\xc6\x84\x89\xd3h\xd0\xa8\x39\xc1\xc1\xc1\0\x38:f\xa4\xa3_{\x8e\x1f\xd9\xcb\x9cY\x93\x39v\xfc$e+xq\xe1\xe2\xc5\x38\xc7\v\r\r\xe5\xbb\x1f\xc6\x2p\xfe\xe2\x35\x8e\x1e=\x16\xabM5\xcfr\xb1\x9e\xe8;s\xe6,\xa3\x46\x8f\xa3\xce\x17\rq/U1f\xac?\xae\xa9r\xa5\x8a\\\xbc|\x83\xb3g\xcf\xf1\xf2\xe5K\xe6-\\\x8a\xafo\x8dX\xe3\xde\xb8y\x93\xc8\xc8(<\xbd\xea\x92\xde\xd1\x99\xf4\x8e\xceT\xf1\xaa\v\xc4l=acc\xc3\x97-\x1a\xb1qS\xcc\x93x{\xf7\xed\xa3t)\x17r;;\xbf\xb1\xef\xeb\x38;\xe7\xc2\xc7\xab\"_4h\xce\xb0\xe1\xdfr\xe8\xd0\x61\"##c\xb5\x33\x33\x33#o\xee\xec\xdc\v\f\x8cw\xac\xfb\xf7\xefS\xa4p\x1\xa3\xb2h^\xbf\x62IDDDD\xe4\xbf.\"\"\x2;;;j\xd5\xac\xce\xecY\x1,Z\xb8\xc0\xe8\xb5{\xd7\xae\xc4\xeQDDD$\xc1\xb4\x62HD\xde\x8b\xb5\xb5\x15\xdb~\xdc\xc9\xf9\v\x17\x99\x39m<\xd1\xd1\xd1\xcc\b\x98\xcb\xa4\xf1?\xbc\xd5\x38\xf6\xf6\xf6\xd4\xaaU\x13'\xa7Lx\xd7l\xc8\xd9\xb3\xe7pu-i\xa8\xb7\xb4\xb4\xa4\\\xd9\x32\x14/V\x94\xfc\x85\xdc\xf8\xe9\xa7}\xe4\xc9\x9d;\xd6\x38\x1\x1\xb3y\xfa\xf4\x19\x97\xce\x1d\xe3\xbb\xefG\xd3\xb3\xf7\0\x36\xae_\x89\xad\xadm\xbcs\x1f?q\x92\xba\xf5\x9a\x31\x66\xd4\x30j\xd7\xaa\x89\x99\x99\x19%\xdc\xca\x13\x12\x12\x2\xc4$\xa7\xea\xd5\xf1\x66\xd7\xae=<\x7f\xfe\x9c\x14\x16\x16\x94t)\x11\xfb^X\xc5\xacN\x9a\x37k\x12\x85\n\x19'W2d\x88Y\xf1\xe3\xed\xed\x45\xc5*\xbe\f\x1e\xf8\x35\xcbW\xac\xa6I\xa3\x6\x98\x98\x98$\xa8o|R\xa4HA\xc0\xcc\xa9\x9c;w\x9e\xdd{~\xa2G\xaf\xfe\xa4O\x97\x96ysg\x92\xf2o\xe7;\xb9\x96,\xce\xee={\xf1\xeb\xd0\xeSS\xe3g\x3\xc2\xc3\xc3\xd9\xb7\xff\x10\r\x1b\xc4$\xa4R\xa6\x8c\xb9g\xcf\xe3\xd8\xc2\xef\xd9\xf3`2gvzm\\\"\"\"\"\"\xff\x15w\xef\xde!y\xf2\x98\xad\x9a\xb7n\xd9\x14\xab\xbeT\xa9\xd2\x94\xafP\xe1S\x87%\"\"\"\xf2N\x94\x18\x12\x91\xf7\x62\x63\x63\xcd\xd2\x45\xb3\xf0\xf4\xae\xc3\xf4\x99s\xc9\x93;\x17\xd6\xd6\xd6x\xb8\x97|c\xdf\xe8\xe8\xe8Xg\xddXZZ\x2`kk\x1bg\xbd\xb9\xb9\x5VV)\xb0\xb3\xb3\x8b\x35\xde\xa9S\xa7\x19:r\x1c\xcb\x97\xcc\xc2\xce\xce\x8e\x1e\xdd\xbb\xb0y\x8b\xf\x13'M\xa5\x7f\xbf\xde\xf1\xc6q`\xff\x41\x8a\x15)@-\xdf\x9a\0\x86\xd5Oa\xa1\xff_\x5U\xa7\xb6/}\xfa}\xc3\xefw\xee\xd0\xaa\x65S\xcc\xcd\xcd\x63\x8d\x93)S&\xd2\xda\xa7\xe2\xd6\xed\xdbT\xab\xe6\x19\xe7\\\x5\v\xe4\xa7\x64\x89\x42L\x9b>\x93\x43\x87O2s\xfa\xe4\x4\xf7}\x1d\x13\x13\x13\xf2\xe7\xcfG\xfe\xfc\xf9\xa8Y\xa3:\xc5]\xcb\xf3\xeb\xaf\xa7(]\xba\x94Q\xbb\xe6\xcd\x9aP\xd1\xb3\x16\xeb\xd6o0\\\xef\x9f\x96.[\xc1\xc3G\x8f\xa9[\xa7\x16\0NNN\xa4O\x97\x9a\xbd\xfb\xf6S\xa8PAC\xbb\xb0\xb0\x97\xec\xde\xb3\x97V_6{\xeb\x38\x45\x44\x44\x44\x44\xfe\x8d\xb2\x65\xcb\xce\xda\xf5\x1b\x13;\f\x11\x11\x11\x91\xf\x42\x89!\x11yo\xf6\xf6i\b\x98>\x81:\xf5\x9a\x91'\xb7\x33\r\xeb\xd7yc\x9f\xa8\xa8(\xea\xd4mH\x91\xc2\x5)T\xb8 iR\xa7&(\xe8!3\x3\xe6R\xbfnu\x9c\x9d\x9d\xf9\xfe\x87\xd1\xdc\xbe\xfd;\x1e\x1e\xee\x64H\x9f\x8e\xb0\x97/Y\xbbv\x3\xe\x19\xd2Q\xb1\x42y\xa3\xf1\xc2\xc2\xc2\xe8\xdb\xff\x1b\x9a\x35\xae\x43\xd9\x32\xa5\xff\x88\xcb\x9e\xef\x46\xe\xa6iK?*\x94/\x8b\xbb\xbb[\x9c\xb1\x64\xcb\x96\x95\xfd\xdf\x8e\x63\xe1\xc2\xc5\x64\xcf\x91\x9du\xeb\x36\xc4\xf4Okoh\xe3\xe1\xe1\xce\xf5\x9bw\x99\xbb`\x5?\xef\xdb\x16\xe7\x38\xd6\xd6V\f\xfe\xa6/\x9d\xbb\xf7\xc7\xcc\xcc\f\x97\x12\xc5y\xf6\xfc\x39\xd7\xaf\xdf\xa0q\xa3\x6@L\x2\xa7Y\xd3\x46t\xea\xda\x8f\x36_6\"u\xea\xd4\t\xee\x1b\x9f\xabW\xaf\xb1t\xd9\n\xdc\xdcJ\x92*U*\x8e\x1e\x39J\xb2\x64\xa6\x64\xc9\x92\x39V\xdb\x42\x85\n2lp_\xda\xf9\xf5\xe4\xd7_~\xc3\xdd\xc3\x8d\xe8\xa8h~\xda\xbb\x8f\xd5k7\x11\x30\x63\"i\xd2\xa4\x1\xc0\xc2\xc2\x82\x1f\xbe\x1dJ\xf3V\xfe<}\xfa\f\xd7\x92.\xbc\f\x7f\xc9\xf2\x15\xabIik\x1b+\xb1$\"\"\"\"\"\xff.S&M\x8cU\xe6\xe7\xdf)\x11\"\x11\x11\x11\x91OI\x89!\x11\xf9 \x8a\x16)D\xab\x96M\x99Y\xb3\x66\x89\xb3}\xdb\x36\xad(R\xb8\x10k\xd7m`\xd8\xf0\xefI\x9f.-nn.\xec\xda\xbe\x1''\xe3\xed\xe1\xaaU\xf3\x64\xc3\xda\xc5\xcc\x9b\xbf\x90\x95\xab\xd6\x91+g6*U\xaa@\xe3\x46\rI\x91\"\xc5\x1b\x63\x13\x11\x11\x11\x11\xf9/\b\v\v\xe3\xf7\xdb\xb7\xe3\xad\xb7\xb4\xb2\xc4\xd1\x31\xd3'\x8c\xe8\xc3P\x12HDD$i2\xb9p\xe5Ntf\xc7t\0\xdc\xba\xf3\x80\xdc\x39\x32&rH\"\xf2\xa1\x84\x86\x45\0\x31\xdf\xdb\x7f~\x9f\xc7\xe7\xafm\xde\xf5gAtt4aaa\x86\xed\xe0\xfeK\xc2\xc3\xc3\xf9\xbcL%\xfa\xf5\xed\xf1\xde+e\xd6\xacY\xc7\xf0\x91\xa3\xf8\xf9\xc0.\xcc\xcc\xcc>P\x84\"\"\"\"\"I\xcf\xc5\xabw\x8d>\xc7\xbc\xcd\xe7\x9e\xe7!\xc1\t\x9e\xe7\xca\xe5\xcb\xd4\xa8^-\xde\xfa/[\xb5\xa1G\xaf\xf8\xb7\xaf\xfe'*\x90\xd7\x99\x33\xe7/%v\x18\"\"\"\xf2\x89\xd8Z\xdb\0\x31\xbf\xfi\xc5\x90\x88|0&&&\xff\xc9\xa4\x10\xc0\xa1\xc3G\xb8\xf5{ eJ\x7f\xfe^\xe3\x44GG3\x7f\xc1\x62\x9a\x37k\xa8\xa4\x90\x88\x88\x88\x88\xc8\xbf\x84S\xe6\xccl\xde\xb6#V\xf9\x83\xfb\x81\x34o\xda\x18\xdfZ\xb5\x13!*\x11\x11\x11\x91w\xa3\xc4\x90\x88H\x2\xacZ\xb5\x86\x46\xf5}\xb1\xb7\xb7\x7fs\xe3\xd7\x38{\xee\x1c\a\xe\x9d`\xe4\x88!\x1f(2\x11\x11\x11\x11\x11\xf9\xd8,,,\xc8\x9a\x35k\xac\xf2\xacY\xb3\xd2\xa1\xa3?\x87\xf\x1f\"g\xae\\\x89\x10\x99\x88\x88\x88\xc8\xdbSbHD$\x1\xc6\x8f\x1b\xfd\x41\xc6)\x90??\xf7\xefh\xbb\x6\x11\x11\x11\x11\x91\xff\x8a\xbbw\xef\x12\x1e\x1e\x9e\xd8\x61\xbc\x93m[\xb7\x18\xbd\xf7\xac\x1a\xffvy\"\"\"\xf2\xdf\xa1\xc4\x90\x88\x88\x88\x88\x88\x88\x88\xc8k<}\xfa\x84\xa3G\x8e\x18\x95\x45\x46\x46r\xea\xb7\xdfX\xbbz\x15\xd3\x66\xccz\xe3\x18\x11\x11\x11\xec\xda\xb9\x83\xef\xbf\x1b\xc9\xa0\xc1\x43\xf9\xbct\x19\x43]`\xe0=\xe6\xcd\x99\xc3\xfe}{\xc9_\xa0\0\xf5\xea\x37\xa4x\x89\x12\x46\xfd\xc3\xc2\xc2X\xbcp\x1;v\xfc\x88\xadmJ\xbc\xab\xfb\xe0S\xa3&&&&\x86\x36\xd1\xd1\xd1l\xd9\xb2\x99\xcd\x1b\x37\x10x\xef\x1e\x95\xaaT\xa1Y\xf3\x96\xf1n\xf9\xad\x44\x90\x88\x88H\xd2\xa4\xc4\x90\x88\x88\x88\x88\x88\x88\x88\xc8k\x4=\b\xa2K\xa7\x8e\xb1\xca\xf3\xe7/\xc0\x88o\xbf\xe7\xf3\xd2\xa5\xe3\xed\x1b\x15\x15\xc5\xa1\x43?3y\xe2\x4~9y\"V\xfd\xfd\xfb\xf7i\xd5\xb2\x39\xae\xae\xee\xf4\xec\xdd\x87_\x7f\xfd\x85\x16\xcd\x1a\x33g\xde\x2J\xb8\x94\x4\x62\x92J\xfd\xfa\xf4\"8\xf8\x39\xad\xdb\xb4\xe3\xd1\xa3G\f\x1d<\x90\xc7\x8f\x1f\xd3\xbc\x45K\xc3X\v\xe6\xcf\x63\xce\xac\0\xba\xf7\xec\x85\x85\x85\x5\xb3\x2\x66r\xe6\xf4\x19\xc6\x8e\x9f@\xb2\x64\xc9>\xc0\x9d\x10\x11\x11\x91\xff\x2%\x86\x44\x44\x44\x44\x44\x44\x44\x44^#g\xae\\\x9c:{!V\xb9\xa9\xa9\xe9\x1b\xfb>{\xfa\x94o\x87\xf\xa3Y\x8b\x96L\x98\x34\x99\x32\xa5<\x8c\xea\xd7\xac^I\x96,Y\x19\xf0\xf5\x37$K\x96\x8c\x32\x65\xcb\xf1\x32\xec%S&O\"`\xf6\\LLL8r\xe4\x30\xfb\xf7\xed\x65\xdb\x8e\xdd\xa4I\x93\x6\0;;;\xfa\xf6\xeeIu\x9f\x1a\xd8\xdb\xdb\x13\x14\xf4\x80\x31\xa3~`\xc6\xac\xd9\xb8\xba\xba\x1\x90/\x7f~\xaaV\xae\xc8\xf1\x63Gqus\xff\0wBDDD\xfe\v\xde\xfc\x1b\x8c\x88\x88\x88\x88\x88\x88\x88H\x12\x17\x19\x19\x89\xa9\xa9\xa9\xe1\x15\x18\x18\xc8\xa1\x43?\xf3\xe4\xf1\xe3\xd7\xf6K\x95:5\xab\xd7m\xa0\xee\x17\xf5\xb0\xb5MiT\x17\x11\x11\xc1\xec\x80\0\xaa\xfb\xd4\x30Z\xd1S\xc5\xb3*\x87~>\xc8\xcd\x1b\x37\0\xd8\xba\x65\x33\x35}k\x19\x92\x42\0\x9f\x95\xfa\x9c\xc8\xc8(\x8e\x1d\x8d\xd9\xe2\xee\xe0\x81\x3\xd8\xdb\xa7\xa1x\xf1\xffoA\x97\x39s\x16*U\xf1\x64\xe7\xce\x1d\xef}\xfd\"\"\"\xf2\xdf\xa1\xc4\x90\x88|t\x91\x91\x91\x84\x86\x86&v\x18\"\"\"\"\"\"\xef$\"\"\x82\x1a\xd5\xabq\xea\xb7\xdf\0\xb8w\xef\x1e\xbe>\xde\xb4j\xd1\x8c\xc6\r\xeb\xf3\xe0\xc1\x83\xd7\xf6O\x9e<\xee\r[\x9e ((f\xdcK\x17.\x90%k6\xa3\x36\xd6\xd6\xd6\xe4\xce\x93\x9b{w\xef\x2\xf0\xfb\xef\xbf\x93;O\xdeXs\xe5\xc9\x9d\x87\xeb\xd7\xae%\xec\x42\x45\x44\x44$IPbHD>\xaaG\x8f\x1e\xe3\xfaYEv\xee\xda\x1bo\x9b\xb0\xb0\x30\x16.\\L\xe7.\xdd)\xeeR\n/o_\x6\xf\x1e\xc6\xb9s\xe7?a\xa4\xff\x17\x15\x15\xc5\x93'O\b\xf\xfO\x94\xf9\xdf\xc6\xbf)\xd6w\xf5\xe2\xc5\v\x9e={\x96\xd8\x61\0p\xfd\xc6\rz\xf7\xe9\x8f\xab{\x19\xda\xb4\xf5\x63\xd7\xae=\xb1\xda\xfc|\xe8\x30\xadZ\xb7\xc7\xd5\xbd\f\xbdz\xf7\xe3\xd2\xa5\xcb\xaf\x1d\xf3\xd9\xb3\xe7\x8c\x1e\x33\x8e\x8a\x95\xbc\xa8\xf3\x45\x43\xe6\xce\x9dODDd\xacv\xe7\xce\x9dg\xe0\xc0!\x94\xafX\x8dJU\xbc\x19>\xe2;\xee\xdc\xb9\x13g\xbb\xf4\x8e\xce\\\xb8x\xd1P\x16\x15\x15\xc5\xe0!\xc3)X\xc4\xf5\x8d\xf1\x88\x88\x88\x88Hl\xf7\x3\x3\xb9y\xe3\x6\xf6\xf6\xf6\0l\xdd\xb2\x89\xca\x9e\x9e\xec\xd9w\x90\x2\x5\v\xb2\xfd\xc7m\xef\x34\xee\x93'O\0\xb0\xb4\xb4\x34*\xb7\xb2\xb6\x2\xe0\xd9\xb3gDGGs\xee\xdc\x39\xac\xff(\xfb\xabt\xe9\xd2\xf3\xe8\xf1#\0\x2\xef\xdd\xc3\xce\xce.V\x9b\x94v)\xb9}\xebV\x9c\xf3\x17\xc8\xeb\x1c\xe7KDDD\xfe\xdb\x94\x18\x12\x91\x8f\xaaw\xbf\x81\x94,Q\x8c\xea\xde\x9eq\xd6\xdf\xb8q\x93\xba\xf5\x1a\xb3z\xcdz\\\\J\xf0\xc3wCi\xdf\xae\x35\x66\xe6\xe6<|\xf4\xe8\x13G\x1b\xe3\xd9\xb3g\xe4\xce_\x92\xe3\xc7\x63\x1f\f\xfbO\xf3o\x8a\xf5]\xcd\x9d\xb7\x80\xd6m:$v\x18\xdc\xbd{\x97\xaa^\xb5I\x97\x36-#G\f\xa6`\x81\xfc\x34h\xd2\x86\xcd[\xb6\x1a\xda\xfc\xf4\xd3^\x9a\xb7lO\xf9re\x18>\xf4\x1b\xa2\xa2\xa2\xf0\xf1\xad\xcf\x95+W\xe3\x1c\xf3\xd5\xabW\xb4i\xeb\xc7\xe5\xcbW\xe9\xdb\xb7\auj\xfb\x32\x66\xfc\x14\x46\x8c\xfc\xce\xa8\xdd\xce]\xbb\xa9\xea]\a[[[\xfa\xf4\xee\x46\xf7n\x9d\b\x7f\xf9\x92\x88\x88\x88\x37\xc6\x1d\x1d\x1d\xcd\xa4ISY\xb4\x64%K\x16\xcd\xc1\xd9\x39\xd7\xfb\xdd\b\x11\x11\x11\x91$(**\n\0\x1b[[\xa2\xa2\xa2X\xbdr%\xbe\xb5j\x93.]:\x8a\x16+\xce\xad[7\xdfi\\[[[\0\x42^\x84\x18\x95\x87\x86\x86\x1\x31\xdb\xd0\x99\x98\x98\x90#g\xe\x9e?\x7f\x1e\xab\xff\xe3\xc7\x8fH\x97.\x1d\0\xf6i\xedy\x14\xc7g\xa8\xe0\xe0`\xb2\x65\xcf\x1e\xe7\xfcg\xce_\x8a\xf3%\"\"\"\xffmq\xaf\x65\x16\x11\xf9\0\x36n\xda\xc6\xd1\xa3'\xd8\xbbgs\x9c\xf5\x11\x11\x11\xf4\x1f\xf0\r%]\x8a\xd3\xafo/\xcc\xcd\xcd\ru5jT\xffTa\x8a$\xc8\xe2%\xcb\xc8\x99#+\xbdzu\a\xa0\x62\x85\xf2XZY\xf2\xedwc\xa8T\xb1\x2\xe6\xe6\xe6\x8c\xfcn4\x1d\xda\xb5\xa4I\x93\x46\0\x94/_\x9e'O\x9e\x32\x7f\xfe\x42\x6\xf\xfe&\xd6\x98\a\xe\x1c\x64\xf7\xde\x43\x9c\xfe\xf5 \xe9\xff\xf8@\x9f+g\xe\xaa\xfb\x36\xa2i\x93\x46\x64\xcf\x9e\x8d\xe0\xe0`z\xf5\xfe\x8a\xe9S\xc7R\xd5\xb3\x8a\xa1\xafW\xb5\xaa\t\x8a{\xc1\xc2\xc5\x8c\x1e\x37\x85\x95\xcb\xe7S\xa8`\x81\xf7\xbb\t\"\"\"\"IT\xba\xf4\xe9I\x9b\x36\x1d\xfb\xf7\xef\xc3\xdc\xcc\x8c\x90\x90`\n\x16,\x4\xc0\xc3\x87\x41q\xae\xd4I\x88\xd4\xa9\xd3\x90,Y2\xee\xfc\xfe;\xb8\x94\x34\x94?xp?f\xde\xb4\x31\xbf#\xe6\xce\x9d\x87\xabW\x8d\x1f\x36z\xf9\xf2%W._1lC\xe7\xe8\xe8\xc8\xf2\x65K\t\xf\xf\x37\xfalu\xe3\xfau\xb2g\xcf\xf1N\xf1\x89\x88\x88\xc8\x7f\x93V\f\x89\xc8G\x11\x1e\x1e\xce\xc0!#\x19<\xa8\x1fv)S\xc6\xd9\x66\xcf\x9e\xbd\x1c>z\x92.\x9d;\x1a}p\xf9\xbb*\x9e>\xac\\\xb5\x9a\xe1#\xbe\xa3T\xe9\x8a\xcc\x9d\xb7\x80\xec\xb9\n\xb1|\xc5J\xa3v\x3\a\xe\xa1{\x8f\xde@\xcc*\x89m\xdb\xb6\xd3\xbc\x65\x1b\xdc<\xca\xd1\xa7\xef\0n\xdd\xbamh\xfb\xea\xd5+\xe6/XD\x8d\x9au\xc9[\xa0\x4\xf5\xea\x37\xe6\xe0\xc1\x9fy\xf6\xec\x39\xb9\xf3\xc7| \xabY\xa7)\xe9\x1d\x9d\x39|\xe4(\x81\x81\x81\xa4wt\xe6\xa7\x9f\xf6\xd2\xbdGo\xdc<\xca\xf1\xdbo\xa7\0\xb8u\xeb\x36}\xfa\xe\xc0\xd5\xbd\f\xcd\x9a\xb7\xe2\xf0\xe1#\x86y\xb6\xef\xd8\x89\x7f\xa7\xae\xb8\xba\x97\xc1\xb3Z\r\xa6M\x9b\x41XX\x98\xd1\xb5M\x9b\x36\x83\xbe\xfd\xbe\xc2\xcd\xa3\x1c\xcd[\xb6\xe1\xf4\xe9\x33\x1c=z\x8c\xae\xddz\xe2\xe2Z\x9a.]{p3\x8e\xad\x1f\xe2\x8b\x15\x62\x9eh\\\xb1\x62\x15u\xeb\x35\xa2L\xb9*\x8c\x1e\x33\xce\xe8\t\xc3w\x99w\xd4\xa8\xb1\x8c\xfc\xf6{&N\x9c\x8cg\xb5\x1a\xd4\xae\xd3\x80u\xeb\x36\x10\x1d\x1dmh\x13\x1c\x1c\xcc\xd8q\x13\xa8X\xc9\x8b\x9a\xb5\xea\xb1l\xf9J\"#c\xb6\x45\x8b\xef\x1e\xbe\xee\x1eM\x9f\x11\xc0\xa0\xa1\xa3\xd8\xb3\xef\b\xe9\x1d\x9di\xdc\xa4\x5\0\xdd\xba\xf7\x62\xf0\xe0\x61\x46\xf7#\x7f\xa1\x92\xac\\\xb5\xfa\xb5s\x1\x1c>r\x94\x36m\xfdpq-M\xcf^}\xb9y\xf3\xffOw\xce\x9a=\x97\x66\xcd[\x11\x16\xf6\x32\xd6\xfd>u\xfa,\x95+\x95\x37*\xabR\xa5\x12\xe7/^\xe3\xc2\x85\x8b\x84\x84\xbc\xe0\xc4/g)Q\xbc\x98\xa1>y\xf2\x64T\xabZ\x85\xa9\x33\x17\xc4\xb9\xdd\xdf\x95\xab\xd7pu)lH\n\x1\xb8\xb8\xc4\x1c\x16|\xf0\xe0\xcf\0\xec\xdc\xb9\x1b\v\vs*U\xac\x10\xab\xff\x9b\xac_\xbf\x91>\xfd\x87\xb0`\xdetJ\xba\x94xs\a\x11\x11\x11\x11\x89\x93\x85\x85\x5\xfd\xbf\xfa\x9a^\xdd\xbb\xd2\xa5SGZ\xb7mO\x8a\x14)\x88\x8a\x8a\x62\xe7\x8e\x1d\xe4\xcf\xffn\xf\xe0\x98\x9b\x9b\xd3\xbc\xe5\x97lX\xbf\x96W\xaf^\x19\xca\x7f\xda\xb3\x9br\xe5+\x90\xc9\xc9\t\x80\xcaU (\x2\xaf\x8du\xfa\xf4\0\x16/Y\x8e\xbf_;\xfa\xf7\xed\xc1\xb1\xe3'\x19\xf0\xd5@C\x12\xe7]\xe7\x1d;a&\xcf\x83\x43\xe8\xdf\xb7'U\xabV\xa6\xbd\x7fO6l\xdc\x4@dd$~\x1d\xbbp\xf7\xee=\x86\r\x1bH\xa3\x6_0n\xfc\x64\x96-7N\xe0\xfd\xfd\x1e\xbe\xee\x1e\xd5\xf0\xf1\xa6\x64\x89\x98'1w\xfd\xb8\x96\x41\x83\xbez\xe3\xff\x95\xd7\xcd\xf5\xf3\xa1\xc3\xb4i\xd7\x89\xea\xde\xd5\x18\x33z$\xc9\x93'\xa7\x61\xe3\x96<}\x1as\x86\xb4\xe4=\x98\0\0 \0IDAT\xd1\xc5\x8b\x97\x38\xf1\xcb)^\xbe\f\x8b\x35\x96\x63\x46\a\xae^5>\xb4\x37\xe8\x41\xcc\xff\xa7\xfb\xf\x1e`i\x99\x82\xb4\xf6\xa9\xf8\xfdo\xe7\xfel\xd8\xb4\x5\x88\x39o\xeb\xef\xec\xed\xd3p\xfd\xc6-BCC\re\x7f\xfe\xfb\xce\x9d\x98\x43\x84\xaf]\xbfN\x91\xc2\x5\x39q\xe2$-\xbelKq\x97Rt\xeb\xde\x8b\xeb\xd7o\xbc\xf6\xda\x37m\xda\x42\xeb\xf6\xdd\x98\x1b\x30\x89\x32\xa5?\x7fm[\x11\x11\x11\x11y3\xcf\xaa\xd5\xd8\xbek\xfk\xd7o\xa2\x41\xc3\x46\x86\xf2\x61\xc3GR\xe2/\xab}\xdeV\xbd\xfa\r\xb8|\xe9\x32\xc3\x86\f\xe6\xc0\xfe}\xcc\x99=\x8b\x99\xd3\xa7\xd1\xae\x83\x1f&&&\0\x94.]\x86\x12..\xf4\xea\xd9\x9d\xdd\xbbv\xb2i\xe3\x6\xfa\xf5\xe9M\x8f^\xbd\r\xab\x95\x32\x65r\xa2\x43G\x7f\xfa\xf6\xe9\xc9\xfauk\xd9\xb3{\x17}z\xf5\xc0\xcb\xbb:E\x8a\x14}\xbf\x8b\x17\x11\x11\x91\xff\x14m%'\"\x1f\\hh(\x93\xa7\x6\xb0t\xd1\xac\xd7\xb6\xbbx\xe9\x12\x19\x32\xa4O\xf0\xb8_\x7f\xd5\xcf\xf0o\x9f\xea^L\x9c\x32\x9b\x9b\x37o\x92%K\x16\xe\x1d>BJ[\x1b\\]]\b\xe\xe\x66\xe0\xe0\x91L\x99\x38\x9a\n\x15\xca\x1\xe0\xe1\xe1\x46\x85J^\xac\\\xb9\x9a\xf6\xed\xdbr\xfc\xe4/|^\xca\r\xcf*\x95\x31\x31\x31\xc1\xc3\xc3\xdd\x30v\x91\"\x85\x1pws\xa5\xe0\x1f[o\xfd\xf9\xc7\xfa\xde=:\xd2\xd1\xaf\xbd\xa1\xed\xa4\xc9S\xf1ps\xa1}\xbb\x36\x31\xf3\xb8\xbbq\xf2\x97_\xd9\xba\x65\x1b\x85\n\x16\xa0S\xa7\x8e\x46\xd7p\xe5\xca\x35\x36m\xde\x86_\x87v\0\x14\xc8\x97\vw7\x17\x1a\x34\xa8\a@\x8e\xec\xd9Y\xb3~\x1b\x33\xa7\x8e\xa1\x66M\x1f\0R\xa5JE\xad\xba\xcd\xb8y\xf3&9s\xe6\x34\x8c\x95 88dx\xe7y\xd3\xda\xa7\xa2\x7f\xbf\x98UYe\xcb\x96\xe1\xc5\x8b\x17|\xff\xc3\x38j\xf8T\xe7\xd0\xe1#\xfc\xb4\xef\x10\xe7N\x1f\xc5\xca\xca\n\xfw7\xc2^\xbe\x64\xf6\x9c\xf9\x34jX\xdf\x10\xf7\xdf\xef\xe1\xeb\xeeQ\xc6\x8c\x19\xf1\xf6\xf2\xc4\xda\xca\xd2p}o\xe3\xefs\x8d\x1a=\x8e\x1e];\x1a\xae\xb1\x44\xf1\x62\x14)\xfe\x19\xc7\x8e\x1f\xa7\x62\x85\xf2\x8c\x18>\x84o\xbe\x1e\x10\xe7\xc1\xbe\xb5|k\xe0]\xb3!\xb9s;\xe3R\xa2\x38\x17.\\d\xfd\xc6\x98m\x12\x9f?\x7f\x8e\xa9\xa9)\xdd\xbat`\xf8\xc8\xd1\x98\x9b\x9b\xe3\xe0\xe0\xc0\xd1\xa3\xc7\xd8\xb2m\xf\0!!\xc1@\x6\xa3\x31K\x7f^\nSSS\x6|5\x90/\xea\xd6\xe6^` \xabV\xad\x5\xe0\xf1\x1f\a\x11\xdf\xbcy\x8b\xd5\xeb\xb6\xf2\xf4\xd9\x33\xea\xd6\xf1\xe5\xcb\x96\xcdX\xbal\x5\xf5\x1a\x34\x65\xfb\xb6\r\xf1n[\xf2\xed\xf\x93\0pu}\xf7?R\x88\x88\x88\x88\x88\x31;\xbbT\x4\a\as\xee\xec\x19\x43\x99\xa9\xa9\tA\xf\x1e`mm\xfdNcf\xce\x9c\x85\xb9\v\x16\x31\x7f\xee\x1c\x86\r\x1dL\xf1\x12.\xcc_\xb8\x84\x2\x5\v\x1a\xda\x98[X0~\xc2$\xe6\xce\x9d\xcd\xc4\t\xe3\xc8\x98\xd1\x91\xfe_}\x8dg\xd5jFc\xf9u\xec\x84\x83\x43\x46\xd6\xaeYMXX(\x95\xabT\xa5q\xe3&\x98\x9a\xc6\xfd\\\xf0\xb6\xad[\x8c\xde\xff}<\x11\x11\x11\xf9oRbHD\xdeK`\xe0\x3\x16,Z\x86\xbf_kR\xa4H\x1\xc0\xfc\x85\xcb(R\xb8 E\x8b\x14zm\xdfL\x99\x1c\xd9\xb7\xef`\x82\xe6\x19\x39\xb4\xbf\xd1\xfb\xc2\x85\vQ\xb4P^\xf6\xed;@\xe3\xc6Y\xd8\xb4i\v_\xb6l\x82\x85\x85\x5W\xaf]\xe3\xd1\xe3g\xe4\xcb\x97\xd7\xd0\xde\xd2\xd2\x12\xcf\xca\x15\xf8\xed\x8f\x95<\xf5\xea\xd6\xa6m\x87\xae\xdc\xbb\xd7\x1c\x1f\x1f/*W\xaeh\xb4\x9dW|\xca\x95-m\xf4\xfe\xd7_O\xb1n\xe3v\xd6\x39:\x1b\x95\xb7j\xd1\0\x88I(m\xda\xb4\x85]{~\xe2\xca\x95k\x9c\xfc\xf5\x1c\x39\xb3;\x19\xda\x99%ON\xae\x9c\xff\xdf\xef\xdb\xc9)\x13\0\x16),\feY2g\x6 8\xe4\xc5\x1b\xe3\x3\xb8q\xf3&\x91\x91Qxz\xd5\x8dU\x17\x1c\x1c\x93\x9cx\xd7yK\xba\x18?iX\xa2xqF|7\x81'O\x9ep\xf9\xd2\x65\x42\xc3\xc2\xc9\x96\xab\x88Q\x1bk\xab\x14\x46\xef\xff~\xf\xdft\x8f\xde\xc7_\xe7\n\v\vc\xdf\x81\x63\xec;p\x8c^\xfd\x86\x18\xb5{\xf6,f\xc5P\xb2\x64\xc9\xe2L\n\x1\x94,\xe9\xc2\xf2\xc5\x1L\x9b>\x8b\xd9s\x16\xe2Y\xa5\x2#\x86\r\xa6tyo2d\x88I\xf8\xb4h\xde\x14s33f\xcc\x9c\x43hh\x18_\xd4\xa9\xc9\xf2\xc5\x1\xd4k\xd4\x9a\xb4i\xd3\xc6\x1a\xd3\xde\xde\x9e\xd5+\x16\x31n\xfc\x44:t\xecN\xf1\x62\x85\xe8\xda\xc5\x1f\v\v\v2\xff\xb1m\xc8\x9f\x89\x9f\x80\x19S\r\xb1\x95(^\x8c\x62.\x9f\xb3\xff\xc0\x41\xbc\xbd\xe2\xfe\xf0\xbe\x62\xc9,\x6\r\x19I\xd7\xee\xbd\x98\x36\x65\x2\x96\x96\x96os\xeb\x44\x44\x44\x44\xe4o\xe\x1f:D\xcf\x1e]y\xf4\xf0\x61\xac\xbaz\xf5\x1b\x32p\xf0\x90\x38z\x19\x33\x37\x37\xe7\xcc\xf9K\xb1\xca\xb3\x66\xcd\xca\xd7\x3\a\xbd\xb6\xaf\x8d\xad-\xfe\x9d\xba\xe0\xdf\xa9K\xbcmLMM\xa9\xfb\x45=\xea~Q\xef\x8d\xb1\x80\x12\x41\"\"\"I\x95\x12\x43\"\xf2^\xac\xad\xad\xd8\xf6\xe3N\xce_\xb8\xc8\xcci\xe3\x89\x8e\x8e\x66\x46\xc0\\&\x8d\xff\xe1\x8d}\xf3\xe6\xc9\xc3\xd8\t3\xb9v\xed:\xd9\xb3g{\xabyMMMi\xde\xbc\x31\xcbW\xac\xa6Z5O\x96,_\xc7\xde\xdd\x31[\x9a\x85\x87\xc7l}\x16\x15\x15i\xd4\xc7\xdc\xc2\x2\xcb?\x92W\xe5\xca\x95\xe5\xf8\x91\xbd\xec\xdd\xb7\x9fm\xdb\xb6\xd3\xa7\xdf`&O\xf8\xde\xb0\x92$\xa1R\xa7NE\x81|\xb9X0o\xa6Qy\x8a\x14\x31\x7f\x84\xef\xd4\xb9;fff\xb4m\xdb\n\x87\f\xe9\x99\x37\x7f!c\xc6\xcf\x88w\xbc?\xb7\x8a\x30.{\xab\x90\xb0\xb6\x8aI\x1e\xcc\x9b\x35\x89\x42\x85\x8cW\xd9\xfc\x99\xc0x\xd7y\xff~N\x8ei\xb2\x98'\xf\xcd\xcc\xcc\xb1\xb1\xb5\x1\xe0\xc8\xcf;H\x9e,\xd9k\xc7\xfe\xab\xb7\xbdG\x7f\xfa\xeb\xd9\x46\tannN\xb2\x64\xa6th\xdb\x9c/[63\xaaK\xc8v\x86\x10\xf3\xff\xa6\\\xb9\xb2\x86\xf7W\xae\\\x1 \x93\x63\xcc\x81\xbf\x66\x66\x66\x34o\xde\x94\xe6\xcd\x9b\x1a\xda\xac]\xb7\x9elY2\x92\x32\x9e\xb3\xb6r\xe5\xca\xc9\xa4\x89\xe3\f\xef_\xbdz\xc5\xa9\xd3g\xa9S\xc7\x17\0\xa7L\x8e$Kf\x8a\x95\xd5\xff\x13;\xd6\xd6\xd6\x64\xcf\x96\xd9\xb0\x95]\\\x1c\x32:\x10\x30\x63\x32>\xbe\xf5\x19\x34x\x18#\x86\xf!\xd9_\xbe.\"\"\"\"\x92paaa\xf4\xee\xd9\x1d/\xef\xea\xd4\xac\xe9K\xaa\xd4\xa9\x8d\xea-,,\xe2\xe9)\"\"\"\xf2\xcf\xa3\xc4\x90\x88\xbc\x17\x1b\x1bk\x96.\x9a\x85\xa7w\x1d\xa6\xcf\x9cK\x9e\xdc\xb9\xb0\xb6\xb6\xc6\xc3\xfd\xcd\xdbWU\xa9R\x89\x2\xf9r1b\xe4\xf7\x8c\x1e\xf5m\xbc\x7f\x38\x8fO\xa5\x8a\xe5\xe9\xd6\xf3k&O\x99N\x99R\xae\x38\xe7\xca\x5@\x96\xccN$Kf\xca\x89\x93\xbf\x90)S\xccJ\x98\x88\x88H\xf6\xef?H\x83\x6_\x18\xfa\xdb\xda\xda\xe2\xedU\ro\xafj\xa4O\x9f\x9e\xd9s\x17P\xb3\xa6\x8f!\x91\xf1\xf7\x33}\xe2R\xb8PA\xd6\xae\xdf\x82\xb5\xb5\r\xa9S\x1b'\x17\x1e>|\xc8\xfaM;X\xbd\x62\x9e\x61K\xb7\x33g\xce\xbd\xd5\x35\xbeI\\\xb1\x66\xca\x94\x89\xb4\xf6\xa9\xb8u\xfb\x36\xd5\xaay~\xb0\xb9\x42\xc3\xc2\xd8\xb9\xfb \xe1\xe1\xe1\x98\x9b\x9b\x3p\xea\xd4i>\xf7(\x81\xb5\xb5\x95\xe1\xfe\xdf\xf\xbc\x9f\xe0\xed\xcb\x12r\x8fL0\xe1\x45\xa8\xf1\x99?\xa9\xec\xec\x38~\xe2\x17\xa3\xb2\xa0\x87O^;\x97\xa9\xa9)\xbe>\x9e\\\xbe|\x85L\x99\x32\xc5\x99\xb0\x8a\x8a\x8a\xe2\xe5\xcb\x97\tZ]\x13\x1d\x1d\xcd\xd2\x65+iT\xbf&Y\xb2\x64\x89\xb3Mhh(s\xe6.\xa4G\xf7\xce\x86\xf9\x42\x42\x42^\xbb\xcd\xc8\x8e\x1d\xbb\0([&f\xb5\xd3\xe7\x9f\x97\"22\x8a_~\xfd\xcdp\x8f\xee\xdd\v\xe4\xe4\xaf\xe7\x18\xd0?\xfbkc\xcc\x99\x33\a\xf3\xe6L\xa3\x46\xad\x46\x38\x38\x64\xa0[\xd7\xceo\xbc.\x11\x11\x11\x11\x89-((\x88\xa0\xa0\a4m\xd6\x2'\xa7\xf\xb3\xba]DDD$\xb1(1$\"\xef\xcd\xde>\r\x1\xd3'P\xa7^3\xf2\xe4v\xa6\x61\xfd:\t\xeagmm\xcd\xf8\xb1\xdf\xd3\xbamG\xbc\xaa\xd7\xa6\x65\xf3\xc6\x64\xcb\x9e\x8dW\xe1\xe1\x9c=w\x1e\xf\xfw<\xdc\xdd\xe2\xed\x9f!C\x6\x1a\x37\xf0\x65\xe2\x94\xd9\xcc\x9c:\xc6P\x9e:uj\xfa\xf7\xe9\x42\x8f^_\xf1\"\xe4\x5\x99\x9c\x32\xb1y\xf3V\x82\x43^P\xbbVM\0\xa6N\x9d\x41\xea\xd4\xa9\xc8\x9e#;\xaf\xc2\xc3\x39t\xf8(\xae%K\0\x90\x32\x65J\x9csfa\xcd\xda\xf5\xd8\xa6LI\xba\xb4\xf6\x98\x99\x99\xc5\x19\x83\xafo\rf\x4\xcc\xa5\x83_g\xfc\xfd\xdb\x63gg\xc7\xd9\x33g)Y\xd2\x85\xcc\x99\x9d\xc8\x9e\x35\x13\xb3g\xcf#\"\"\x82g\xcf\x9e\xb1m\xc7\xbe\x4\xde\xd5\x84\x89+V'''\x6\x7f\xd3\x97\xce\xdd\xfb\x63\x66\x66\x86K\x89\xe2<{\xfe\x9c\xeb\xd7o\xd0\xb8Q\x83w\x9e\xcb\xc2\"&\x19\xd4\xaf\xff\xd7x{U\xe3^` #\xbf\x1bg8K\xaap\xe1\x42\x34k\\\a?\xff\xee\f\x1e\xd4\x9flY\xb3r\xfb\xf6\xef\xa4HaA\xd9\xb2\x65\xe2\x8d\xffM\xf7({\xf6\xac\x1c\x39\xf6\x1b\xdbw\xec\xc4.eJ\\]K\xf2y\xe9RL\x9e>\x8f\x89\x93\xa6P\xa4p!\xe\x1c\xfc\x39\x41\xd7\xd0\xb9\xb3\x1f\x15*\xd7\x64\xe0\xa0!\xd4\xacY\x3\x13\xe0\xd0\xe1#\xb4n\xd5\x12sss\xbe\xfaz\x10\x9b\xb7\xec\xe0\xa7\xdd[\xb1\xb3\x33NT\xee\xdc\xb9\x8bK\x97\xaf\x90'\xb7\x33!!/\xd8\xb9k7G\x8e\x9e`\xd1\x82\xd9\x86\x36\xd3\xa6\xcf\xc4\xce.%\x19\x33\x66$\xe8\x41\x10\x8b\x97,'U*;j\xf8x\x3p\xf1\xe2%*W\xf5\x65\xc8\xc0\xbe\x34o\xde\x94\xeb\xd7o\xb0h\xf1RJ\xba\x94\xc0\xc4\x4~;u\x9a\t\x93\x66\x32w\xd6\x64\x43\xf2(O\x9e\xdc\xb4j\xd1\x80\x36m\xfd\xe9\xdb\xbb\x1b\xf6\xf6iX\xbe\x62\x35\x15\xcb\x7f\xf6\xda\xef\x8f?\x95t)A\xc0\xb4q\xb4l\xd3\x99\x8c\xe\xe\x86s\xa5\x44\x44\x44\x44$\xe1\x32\x64\xc8\x80\x95\x95\x15\x11\txxLDDD\xe4\x9fN\x89!\x11\xf9 \x8a\x16)D\xab\x96M\x99zL\xe5J\xe5Y\xbdr\t661\xdb\x9d\x65tt`\xc3\x86\xcd\x1c?\xf1\x1bvv\xb6\xd4\xf0\xa9\x46\xdb\x36\xad\x80\x98U83\xa6Md\xc8\xd0\x91t\xea\xdc\x83\xbe\xbd\xbbS\xf2\x8f\xa4\xd1\xdf\xd9\xd8\xd8\xb0\x66\xd5\x12\xa6M\xf`\xe0\xc0\x61\xbc\b\r\xa5\xd4gn\xb8\xb8\x14\xc7\xcc\xcc\x8c\xb9\xb3\xa7\xf1\xed\xf7\xa3\xe9\xda\xad/e\xcbx\xf0\xc3\xc8o\x98\x36\x63v\x9c\x63\xbd\x8b\xb8\x62urr\xa2n\xdd\xda\xa4J\x9d\x8a%K\x96\x33z\xec$r\xe7\xca\x81\x8f\x8f\xd7{\xcd\x65jb\x8a\x93\x63z\xac\xac\xac\xe8\xd9{\0\x85\v\x17`\xc9\xc2\0<<\xdc\rmF\f\x1f\xc2\xa2\xc5K\x99=g>\x97._\xc3\xa5x\x11Z4o\x12\xef\x98\t\xb9G\x95*U\xa4o/\x7f\xfa\xf5\x1f\x44\xfe|\xb9\x99Z\xa0\0\x15\xca\x97\x63\xc2\x98\xe1\x4\xcc\x9e\xc7\xb6\x1fw\xe2U\xad\n^U\xcb\xbf\xf1\x1a\xf2\xe5\xcd\xcb\xee\xed\xeb\x99\x36}&\xed\xdaw&M\xeaTT\xa8P\x86\xb0\xb0\x30\xcc\xcd\xcd\xc9\x91=\x1b\x85\n\xe6\x35$\xc1\xfe*\xa5\x9d\x1dg\xce\x9c\x65\xc6\xcc\xb9\x64\xcf\x9e\x5\xfw7\xd6\xf\xe8\x8b\xbd\xfd\xff\xff\x9f\xa6O\x97\x8e\xd5k\xd6\xf1\xdb\xe9s\x94,Q\x94\x9a\x35\xab\xd3\xb0\x41=\xc3\n+\x1b\x1b\x1b\x8a\x14\xca\x87\x63&G \xe6L\xa3\x88\x88\b\x86\x8f\xfc\x1SSSJ\x7f\xee\xce\xd6\xcd\xab\xc8\x97\x37\xaf\xd1\xdc\x43\x6\x7f\x43\x8e\x1c\xd9\x99\xbf`1/BC\xf1\xf6\xf2\xa4\xd5\x97-\xe3MX\xfe\x9d\xb7w5\x86\r\xeeK\xe7\xee\x3H\x9f>=\x15*\x94KP?\x11\x11\x11\x11\x89\x61\x66\x66\x46\x97n\xdd\xf1\xef\xd8\x9e^\xbd\xfb\xc5\xda\xb6:M\x9a\x34\x14)Z,\x91\xa2{wS&M\x8cU\xe6\xe7\xdf)\x11\"\x11\x11\x11\x91O\xc9\xe4\xc2\x95;\xd1\x99\x1d\x63\xe\\\xbfu\xe7\x1\xb9sdL\xe4\x90\x44\xe4\x43\t\r\x8b\0\x62\xbe\xb7\xff\xfc>\x8f\xcf_\xdb\xbc\xeb\xcf\x82\xe8\xe8h\xc2\xc2\xc2>\xe9!\xf7}\xfb}\x85\x89\x89\t#G\f\xfd\x64s&U\xa3\x46\x8d\xe5\xd4\x99\xb3\xcc\x9b\x33\xf3\xcd\x8d\x45\x44\x44\x44\x44>\x81\x8bW\xef\x1a}\x8ey\x9b\xcf=\xcf\x43\x82\xdfj\xaeU+W\xf0\xcdW\xfd\xe3\xac\xabW\xbf!\x3\a\xfy\xab\xf1\x12[\x81\xbc\xce\x9c\x39\x7f)\xb1\xc3\x10\x11\x11\x91O\xc4\xd6:\xe6\x81\xf9[w\x1eh\xc5\x90\x88|8&&&\x9f\x34)\x14\x14\x14\xc4\xbc\x85+X\xb1t\xce'\x9bSDDDDD\x92\x9e\xe0\xe0`\x86\xe\x1e\x44\xd7\xee=\xf1\xf5\xad\x85]*\xe3\xf3\x45MMM\x13)2\x11\x11\x11\x91\xb7\xa7\xc4\x90\x88\xfck\xed\xd8\xb1\x8btiSS\xd2%\xeem\xde\x44\x44\x44\x44\x44\x44>\x84\xa7O\x9f\xf0\xeaU8>5j\x92.}\xfa\xc4\xeGDDD\xe4\xbd(1$\"\xffZ\r\x1a\xd4\xa3\x41\x83z\x89\x1d\x46\x92\xd1\xb3g\xb7\xc4\xe\x41\x44\x44\x44\x44$Q88d$\x8d\xbd=\xcf\x9e>\xc5\xc1\xc1!\xb1\xc3\x11\x11\x11\x11y/J\f\x89\x88\x88\x88\x88\x88\x88\x88\xbc\x46\x44\x44\x4vvv\xd4\xaaY\x9d\x1e\xbd\xfa`aaaT\xef\xe8\x98\x89\xf2\x15*$Rt\xefn\xdb\xd6-F\xef=\xabVK\xa4HDDD\xe4SRbHDDDDDDD\xe4\x35\xee\xde\xbd\x43\xf2\xe4\x66\0l\xdd\xb2)V}\xa9R\xa5\xff\x95\x89!%\x82\x44\x44\x44\x92&%\x86\x44\x44\x44\x44\x44\x44\x44\x44^#[\xb6\xec\xac]\xbf\x31\xb1\xc3\x10\x11\x11\x11\xf9 \x94\x18\x12\x11\x11\x11\x11\x11\x11\x11y\x83\xe8\xe8h\x8e\x1f;\xca\x96\xcd\x9b\xb9|\xf9\"\x99\x32\x39\xe1\xea\xe6N\xd5j^\xa4H\x91\"\xb1\xc3\x13\x11\x11\x11I0\xd3\xc4\xe@D\xfe\xfb\"##\t\r\rM\xec\x30\x44\x44\x44\x44\x44\x44\xde\xd9\x8a\xe5\xcbh\xde\xb4\x31!!\xc1\x94\xafP\x91\xccY\xb2\x32w\xcel:\xfb\xfb\x11\x16\x16\x96\xd8\xe1\x89\x88\x88\x88$\x98\x12\x43\"\xf2Q=z\xf4\x18\xd7\xcf*\xb2s\xd7\xdeXu\xe7\xce\x9d'\xbd\xa3\xb3\xe1U\xb4\xf8g\xf8\xf9wa\xe1\xc2\xc5\x84\x85\xbd|\xaby^\xbcx\xc1\xb3g\xcf>T\xd8\x84\x87\x87\xf3\xe4\xc9\x13\xa2\xa2\xa2>\xd8\x98\x7f\x1a\x35j,\xcd[\xb6y\xe7\xfe\xfb\xf7\x1f\xa0z\x8d: u\xa9P\xbe\x34-\x9a\x35\xe1\xd1\xe3\xc7,[\xbe\x8a\x46\x8d[\xb2i\xc3j\xec\xecR\xc6\x1a/\"\"\x82\x8e\xfe]y\xfe\xfc\x39\x9d;u (\xe8!\xbd\xfb\r\xe2\xe1\xa3G\xb4o\xf7\xee\x89\x34\x11\x11\x11\x11\x91\xf7\xf5\xe4\xc9\x63\"##qs\xf7\x30*O\x91\"\x5\x1e\x1e\x9fq\xf1\xc2\x85\x44\x8a\xec\xfdL\x99\x34\x31V\x99\x9f\x7f\xa7\x44\x88\x44\x44\x44\x44>%%\x86\x44\xe4\xa3\xd9\xb8i\x1bG\x8f\x9e`\xef\x9e\xcd\xafmW\xb4X\x11\xf2\xe4\xcemx_\xa7\xb6/_\xd4o\xca\xe8\x31\xe3\xf9\xee\xdb\xe1\x1f;\xcc\x7f\x9d\xd2\xa5KQ\xbat\xa9\xc4\xe\x83\xd1\x63\xc6S\xdd\xdb\x93\xbe}zabb\x2@\xe5\xca\x95\f\xf5\xabW.\"S\xa6L\x86\xf7\x15\xca\x97\xa5\xb8kyN\x9c\x38\x41\xf9\xf2\xe5\x62\x8dw\xe0\xc0\x41v\xed\x39\xc0\xd1\x43{H\x9b\xd6\x1e\x80\xd4\xa9S\xe3\xd7\xa9'u\xeb\xd4\"m\xda\xb4\x1f\xf7\x82\x44\x44\x44\x44\x44\xe2\xe1\xe0\x90\x91\x8c\x8e\x8e\xdc\xbd{\a{{{Cytt4\xfb\xf7\xef\xc5\xcb\xdb'\x11\xa3{wJ\x2\x89\x88\x88$MJ\f\x89\xc8G\x11\x1e\x1e\xce\xc0!#\x19<\xa8\x1fv)c\xaf\xey\x9d\xb4i\xd3\xd2\xa7w7\x9a\xb5\xecH'\x7f?\x9c\x9c\x32\x11\x15\x15\xc5\xaaUkX\xb6\x62\x15\xf7\xef\aQ\xb3\x86\x17m\xdb\xb4\xc2\xd6\xd6\x96\xe9\x33\x2\x18\x34t\x14\0\xe9\x1d\x9d\xa9\\\xa1\x14\x8b\x16\xce\x5\xe0\xd6\xad\xdbL\x9a<\x95\xdd{\xf6\x91\x37\x8f\x33\x1d\xfd\xda\xe1\xe6\xe6j\x98\xeb\xd2\xa5\xcbL\x99:\x9d\x9f\xf6\x1e$k\x16'Z\xb6hJ\x6\x87\f\xd4\xac\xd3\x14\x80\xdc\xf9K\x2p\xf9\xfc\tR\xa6\xb4%<<\x9c\xf9\xf3\x17\xb2\x61\xd3V\x82\x9f\a\xe3\xed\xedI\xdb\x36\xad\xb0\xb1\xb1\x1\x62\xb6\x89\x8b\x88\x8c\xc0!C\x6\x96,[I\xe1\x42\x5\xf8\xe1\xfb\x91\xb1\xae\xf1\xf6\xad\xdf\x19?~\x12[\xb6m'Y\xb2\x64\xb4l\xd1\x84:\xb5k\x19\x12,\xc1\xc1\xc1\xcc\f\x98\xcd\xc6\x8d[\xb1\xb1\xb5\xa1Q\xc3z\xd4\xadS\x8b\x64\xc9\x92\xb1k\xd7\x1e\x1a\x34i\xc3\xb5K\xbf`mm\r\xc4\xac\xf8\x99\x36=\x80\xb3\xe7.P\xa5r\x5\xc2\xc3\xc3\xb1\xb4\xb4\xe4\xab\x1}\rsn\xdd\xb6\x9dy\xf3\x17\xf2\xf3\xa1\x63\x94+[\x8a\xee\xdd\xba\xe0\xe8\x98\x91\xc3G\x8e\xc6y\xbd!!!\xf8u\xec\x42G\xbfvT\xaaT\xc1(\xfe+W\xae\xb2|\xd5&\xe\x1f\xd8n\x88\xf9\xef\xfe\x9a\x14\x82\x98$\xf@x\xf8\xab\x38\xdb\xaf[\xbf\x91\xfa_\xd4\x34$\x85\0\xca\x96-Mdd\x14\a\xf\x1e\xa2\x46\x8d\xea\x46\xed\x3\x3\x3)\xe1Z\x8eQ\xdf\r\xe6\xa7\xbd\xfb\x39z\xec$\x95+\x95\xa3s\xa7\x8e\xfc\xfc\xf3!\xd6m\xd8\xc4\xc5\x8b\x97\xa9\xe5[\x1d\xbf\xe\xed\f_\xa3*\x9e>\xd4\xae\xe5\xc3\xf5\x1b\x37\xd9\xbdg?y\xf3:\xd3\xabGWBCCY\xb4x)\xfb\xf\x1c\xa6\xd4g\xae\xf4\xe8\xd1\x95,\x99\x33\xc7\x19\xab\x88\x88\x88\x88$-\xaf^\xbd\"O\x9e\xbc\xd4\xaf[\x9b\xde}\xfa\x91\xdc\xcc\x8c;\xbf\xff\xce\xdc\x39\xb3\0(^\xdc\x85\x45\v\x17\0\xe0\xe8\x98\x89\xf2\x15*\xbcn8\x11\x11\x11\x91\x44\xa5\x33\x86\x44\xe4\xa3\x98>s.\x99\x9d\x32\xe1[\xc3\xfb\x9d\xfa\xe7\xcf\x97\x17\x80\xdb\xb7o\xc7\x8c\x37=\x80\xc5K\x96\xe3\xef\xd7\x8e\xfe}{p\xec\xf8I\x6|5\x90\xe8\xe8hj\xf8xS\xb2\x44!\0v\xfd\xb8\x96\x41\x83\xbe\x2\xe0\xc1\x83 \xaaU\xafM\xf6\xec\xd9\x18?\xee\a<\xdc\xdd\xf0\xa9\xd5\x98S\xa7\xcf\0\x31I\xa1*\xd5j\x91+WN&\x8c\xff\x81\x96-\x9a\x62\x66\x66\x46\xbe\xbcy\xe8\xd7;\xe6\xc9\xb9\x15Kf\xb1\xeb\xc7\xb5XYY\x11\x1d\x1dM\xdf~_\xb1}\xc7n:\xfb\xb7\xa7{\xb7N\xac[\xbf\x19\xbf\x8e]\x8c\xce\xe6\x19\x33~\x6\x87\xe\x1f\xa5M\xeb\x16\xd4\xac\x19\xfb\xc9\xc1\xa8\xe8(N\x9d\xbd\x44\x44\x64\x4}{w\xa7\x42\xf9\x32\xf8u\xea\xc3O{\xf7\x1\x10\x19\x19\x89_\xc7.\xdc\xbd{\x8f\x61\xc3\x6\xd2\xa8\xc1\x17\x8c\x1b?\x99\x65\xcbW\xc6y\xafN\x9c\x38Iu\xdf\x86\x94(Q\x8c\x11\xc3\x6\x62i\x99\x82\x99\xb3\x17\xc7:si\xc2\xe4YT\xaeT\x91\x81\xdf\xf4\xe5\xca\x95k\xf8w\xea\x46\x44\x44\x64\xbc\xd7\xfb\xec\xd9\x33\x8e\x1e\xff-\xces\x81~\xff\xfdw f\xfb\xb7\xbe\xfd\xbe\xa2\xb8K)\x9a\x36\xfb\x92\x83\a\x7f\x8e\xf7kz\xe1\xc2\x45\0\xf2\xe5\xcf\x1bg\xfd\xd9s\x17\xc8\x9e=\x9bQ\x99\x8d\x8d\r\xf9\xf3\xe6\xe2\xce\x9d;q\xf6\t\x7f\x15\x41\xe7\xee\x3\xf0\xf6\xaa\xca\x80\xfe=9q\xf2W\x8a\x94(\xcd\x8f\xdbw\xd2\xb8\x61}:wj\xcf\xcaU\xeb\x98\x30q\x8a\xa1\xcf/\xa7\xce\xf3\xcd\x90\x1f(Z\xa4\x30\xc3\x86~M\n\v\v*T\xf1\xc5\xbb\x66\x43\xca\x96-\xcd\xe0\x41\xfd\xb9{\xf7\x1e\xed\xdbw\xe2\xd5\xab\xb8\x93X\"\"\"\"\x92\xb4\xdc\xbd{\x87\a\xf\xee\x93\xcb\xd9\x99M\x9b\x36\xb0n\xedj\x8e\x1c>\x4\x80\x83\x83\x3\a\xe\xec\x63\xdd\xda\xd5\xac[\xbb\x9a\xdf~\xfd%\x91\xa3\x15\x11\x11\x11y=\xad\x18\x12\x91\xf.44\x94\xc9S\x3X\xbah\xd6;\x8f\xf1\xe7\x39\x37O\x9e>\xe5\xd1\xa3\xc7\f\x19\x31\x9a\xcd\x1b\x96S\xach\x11 \xe6\xc3W\x15\xaf\xba\xf4\xef\xd7\x87\x8c\x19\x33\xe2\xed\xe5\x89\xb5\x95%\x5\v\x16\x30\x8c\xb1l\xf9\n<\xdc\\\f\xe7\xd3x\xb8\xbbq\xf2\x97_\xd9\xba\x65\x1b\x85\n\x16`\xe2\xa4)\xb4i\xd5\x94\x8e~\xed\x63\xcd\xef\xfe\xc7\xaa\xa2\"E\n\x1b\x62\xf9\xe5\x97_Y\xb8\x64\r\xbf\x9d\xd8\x8f\x83\x43\x6\0\x9c\x9ds\xf1y9/\x8e\x1c\x39\x8a\xbb\xbb\x9b\xa1\xff\xa4\x89\x63I\x9e<\xee\x1f\xb1\xa6&19\xf9\x1e\xdd\xbb\x2P\xae\\Y\xb6\xef\xd8\xcd\xde\xbd\xfb)W\xb6\f\x87\xe\x1f\xe1\xa7}\x87\x38w\xfa(VVVx\xb8\xbb\x11\xf6\xf2%\xb3\xe7\xcc\xa7Q\xc3\xfa\xb1\xc6\x9b\x30i*=\xba\xb4\x37\\g\xd9\xb2\x65\x18\x35v\x1a)\xff\xb6Rk\xe1\xdc\xa9T\xa9\x12\xb3\xd5\x9b\x8d\xb5\x35\xf5\x1b\xb7\xe1\xce\xdd;d\xc9\x9c\x39\xce\xeb\xcd\x93'7gO\x1d!eJ\xdbXs\xde\v\f\x4\xa0O\xdf\xaf\xa8^\xbd\x1a>>\xde\x1c:t\x18\xdf\xba\xcd\xd8\xbe\x65\x15\x45\x8a\x14\x36j\x1f\x19\x19\xc9\x98\xb1\x13\xe8\xda\xa9M\x9c\xabp\xa2\xa3\xa3\x39}\xe6\"M\x1b[\xc7\xaa\xcb\x90!\x1d\x41\xf\x1f\xc5y/!&\x99U\xb6l\x19 \xe6\xde\xb6\xe9\xd0\x9d\xc1\x83\xbe&C\x86\x98\xf3\xa9\x1e>|\xc4\x94i\xb3\xe9\xdb\xa7'\xa6\xa6\xa6\x14\xc8\x97\vw7\x17\x1a\x34\xa8\a@\x8e\xec\xd9Y\xb3~\x1b\x33\xa7\x8e\x31$\xf2R\xa5JE\xad\xba\xcd\xb8y\xf3&9s\xe6\x8cwn\x11\x11\x11\x11I\x1a\xb2\x65\xcb\xce\xf2\x95k\x12;\f\x11\x11\x11\x91\xf\x42\x89!\x11y/\x81\x81\xfX\xb0h\x19\xfe~\xadI\x91\"\x5\0\xf3\x17.\xa3H\xe1\x82\x14-R\xe8\x9d\xc7}\xf2\xf4)\0\x99\x9d\x9c\xb8q\xf3&\x91\x91Qxz\xd5\x8d\xd5.88\x18\xc8\x10\xe7\x18\xbf\xfez\x8au\x1b\xb7\xb3\xce\xd1\xd9\xa8\xbcU\x8b\x6\x44\x45\x45\xb1\xf5\xc7\xdd\x8c\x1f\xf3m\x82\x63\xbax\xe9\x12\x85\xf2;\x1b\x92\x42\0\xb9s;\xe3\xe8\x90\x8e+W\xae\x1a\x12\x43\xd5<\xcb\xc5\x9b\x14\xfaS5\xcfrF\xef]J\x14\xe3\xf1\xe3\xc7\0\\\xbet\x99\xd0\xb0p\xb2\xe5*b\xd4\xc6\xda*E\xacq\"\"\"\xd8\xbd\xe7\0M\x9b\x34\x34*\xaf]\xb3j\xac\xb6i\xd2\xa4\x36\xfc;k\xd6\xac\0\x84\x4\x87\xbc\x36\xce\xb8\x92\x42\x80\x61[\xb6\x81\x3\aP\xa4p\xcc\xd7\xb9\xd4g\x1e\\\xb8p\x89\xb5k\xd7\xc7J\fM\x99:\x9d'O\x9f\xe1\xdf\xb1\x43\x9c\xe3\x99\x98\x98\xe0\x9c+\x1b\xcf\x9e=\x8fU\xf7\xf0\xe1#C\x92'.\x7fn\xa7\a\x90-[\xccu\xbdz\x15n(\xcb\x95\x33\aA\xf\x9f\x10\x11\x11\x81\xb9\xb9\x39\x66\xc9\x93\x93+g\xe\x43\xbd\x93S\xcc\x96w\x16),\fe\x7f&\xaf\x82\x43^\xc4;\xaf\x88\x88\x88\x88\xc8\xbf\xdd\xb6\xad[\x8c\xde{V\xad\x96H\x91\x88\x88\x88\xc8\xa7\xa4\xc4\x90\x88\xbc\x17kk+\xb6\xfd\xb8\x93\xf3\x17.2s\xdax\xa2\xa3\xa3\x99\x11\x30\x97I\xe3\x7fx\xafq\xcf\x9f\xbb\x80\x65\ns2gv\xe2\xde\xbd\x98\xd5)\xf3\x66M\xa2P\xa1\x2\x46\xed\x32\x64\x88;)\x4\x90:u*\n\xe4\xcb\xc5\x82y3\x8d\xcaS\xa4\xb0\xe4\xe5\xcb\x97 u\"\xd3\xa6\xcf\x64\xc4\xb7\xa3H\x95\xca\x8e\x1a>^4m\xd2\xe8}o_,#\x86\xf\x61\xd1\xe2\xa5\xcc\x9e\x33\x9fK\x97\xaf\xe1R\xbc\b-\x9a\x37\x89\xb3m\x99\xd2\x9f\xb3l\xd1L\x2\x66\xcd\x65\xc3\xc6\xadxW\xab\x42\xf1\xa2\xf9\xb1\xb2\xb6J\xf0|q]\xaf]J;\x8a\x14\xca\x87\xe3\x1fI\xa3\xbf\xab\xe5[\x13KKK\x96.[\xc9\xec\xb9\v)_\xae\x34\xdb\x36\xaf\x31\x9c\xc1\x34h\xf0H\0\xfa}=\xc2\xa8_\xbe<9\xf8i\xf7\x36\xd2\xa7KG\xf1\xa2\x5\xb0\xb3\xb3\x3\xc0\xc2\xc2\x82\xd9\x1\xd3\x99\x36}\x6\xdf}?\x16\xa7L\x19\x19\x31\xec\x1bj\xf8TO\xf0u\x88\x88\x88\x88\x88|\f\x81\x81\xf7\b\xe~N\xe5*\x9e\x46\x9fS\xac\xad\xad\xa9P\xb1\x12\xe7\xce\x9dUbHDDD\xfe\x35L.\\\xb9\x13\x9d\xd9\x31\xe6\xac\x88[w\x1e\x90;G\x2\xcfq\x10\x91\x7f\xbc\xd0\xb0\x98m\xc1n\xddy\xc0\x9f\xdf\xe7\xf1\xf9k\x9bw\xfdY\x10\x1d\x1dMXX\x18\x96\x96\x96o\x1f\xac|0QQQT\xac\xecM\xa7\x8e\xed\xa8]\xdb\x37\xb1\xc3\x11\x11\x11\x11\x11\xf9h.^\xbdk\xf4\x39\xe6m>\xf7<\xf\tN\xf0\xa3\xba\xde=\xbb\x93\xbf@\x1Z\xb4l\xf5\x96\xd1'\xae\x2y\x9d\xe9\xe8\xdf\x39V\xb9\x9f\x7f\xa7\x44\x88\x46\x44\x44\x44>6[\xeb\x98s\xcdo\xddy\xa0\x15\x43\"\xf2\xe1\x98\x98\x98()\x94\b\x82\x83\x83\x99\x33w>yr\xe7&U*;\xf6\xfc\xb4\x97\xa8\xa8(*W\xae\x98\xd8\xa1\x89\x88\x88\x88\x88\xfck\x5\x5\x5\xb1m\xeb\x16\xc3\xfb\x17/^P\xa7V\r\xaa\xfb\xd4\xa0p\x91\xa2\x44\x44\x44\xf0\xfd\xb7\x31\xab\xe3}k\xd5N\xac\x30\xdf\x8b\x92@\"\"\"I\x93\x12\x43\"\"\xffr\xe1\xe1\xafx\xfe<\x98\x91\xdf\x8d&22\x92\xca\x95\xca\xb3\x62\xf9\x42lmm\x13;4\x11\x11\x11\x11\x91\x7f\xad\xe0\xe0\xe7\xac[\xbb\xda\xf0\xbe@\xc1\x82\x9c\x39}\x9a\x8d\x1b\xd6s\xed\xdaU\xa3\xb6G\x8f\x1c\xe1\xb3R\x9f\x7f\xea\x10\x45\x44\x44\x44\xde\x89\x12\x43\"\"\xffri\xd2\xa4\xa6\x7f\xbf\xde\xf4\xef\xd7;\xb1\x43\x11\x11\x11\x11\x11\xf9\xcf\xc8\x96-;\xcbW\xaeIp\xfb=\xbbwq\xfb\xf6-\x9a\x34m\xfe\x11\xa3\x12\x11\x11\x11y\x7f\xa6\x89\x1d\x80\x88\x88\x88\x88\x88\x88\x88\xc8\xbf\xdd\x83\a\xf\xb8r\xf9Jb\x87!\"\"\"\xf2\x46J\f\x89\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88$\x11\xdaJNDDDDDDD$\t\xda\xb6u\x8b\xd1{\xcf\xaa\xd5\x12)\x12\x11\x11\x11\xf9\x94\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11I\x82\x94\b\x12\x11\x11I\x9a\xb4\x95\x9c\x88|t\x91\x91\x91\x84\x86\x86&v\x18\"\"\"\"\"\"\"\"\"\"I\x9e\x12\x43\"\xf2Q=z\xf4\x18\xd7\xcf*\xb2s\xd7\xdeXu\xe7\xce\x9d'\xbd\xa3\xb3\xe1\xe5\xe6Q\x8e\xce]\xbas\xec\xd8\xf1\x44\x88\x34\xe1\x9e={\xc6\x8b\x17/>\xea\x1c\xbbv\xed!\xbd\xa3\x33!!!\xf1\xb6\xa9\xe2\xe9\xc3\xacYs>\xc8|\x81\x81\x81\xa4wt\x8e\xf3\xdeGDD\xf2\x65\xabv\xcc\x9b\xb7\xe0\x83\xcc\x15\x97Q\xa3\xc6\xd2\xbc\x65\x9b\x8f\x36\xfe\x87\x16\x15\x15\x45zGgV\xaeZ\r@X\xd8K\x16-ZB\xab\xd6\xed)Z\xfc\x33Z\xb7\xe9\xc0\x91#G?\xd8|\xc1\xc1\xc1L\x9e\x32\r/o_ \x9a\x8d\x9b\xb6q\xf4\xe8\t\xf6\xee\xd9\xfc\xdav\x85\x8b\x14\"O\xee\xdc\0\x94-[\x86\xad\xdbvr\xe8\xd0\xe1\x7flb(\xa9I\x9e<\x19\xb3gMO\xec\x30\xfe\xd1\xfc;v ]\xba\xb4$K\x96\f\x80\xea\xde\xde\\\xbb^\x83m\xdb\xb6\xbfwb\xe8\xde\xbd{\xac\\\xbd\x99u\xab\x16\xe0\xe1\xe1\xe\xc0g\x9fyP\xa0\x88\a\xe7\xce\x9f\xc7\xcd\xb5\xa4Q{\x1b\x1b\x1b\x43\xbb?\x9d\x39{\x16\x80z_\xd4\x1\xe0\xd4\xa9\xd3\x8c\x1d?\x9d\x83\xfb\x7f$K\xe6\xcc\x86v\xb5k\xfb\xbeW\xac\0\a\xe\x1c\x64\xd7\x9e\x3\x1c=\xb4\x87\xb4i\xed\x1H\x9d:5~\x9dzR\xb7N-\xd2\xa6M\xcb\xe2%\xcb\xc8\x99#+\xbdzu\a\xa0\x62\x85\xf2XZY\xf2\xedwc\xa8T\xb1\x2\xe6\xe6\xe6\xef\x1d\x87\x88\x88\x88\xc8\xa7V\xb6l9\\]\xdd\x12;\x8c\xb7\x32\x65\xd2\xc4Xe~\xfe\x9d\x12!\x12\x11\x11\x11\xf9\x94\x94\x18\x12\x91\x8f\"<<\x9c\x81\x43\x46\x32xP?\xecR\xa6Lp\xbf\x17/^\xf0\xf0\xd1\x13\xf2\xe6\xcbk(\v\xe\xe\x66\x66\xc0l6n\xdc\x8a\x8d\xad\r\x8d\x1a\xd6\xa3n\x9dZ$K\x96\x8c{\xf7\x2Y\xbe|%{~\xda\xc7\xe5\xab\xd7qw-A'\xff\xe\x14*T\x10\x88\xd9\x92m\xf4\xd8\t\xd4\xafW\x87\xcd\x9b\xb7q\xfb\xf7;4\xa8_\x87\x86\r\xea\xb1t\xd9\n\xb6l\xdd\xce\xabW\xafh\xd9\xbc\t\xf5\xea\xd5\x35\xac\xa6\xd8\xb5k\xfs\xe7-\xe0\xd8\x89\xdf\xc8\xec\x94\x91\x46\r\xeb\xd1\xbcY\x13\x1a\x37i\xc1\x9e}G\xd8\xb3\xef\b\x83\x86\x8e\x62\xe8\xa0>\xb4k\xdb\x9a\xe8\xe8h~\xfcq\a\x8b\x97.\xe7\xfc\xf9K\x94+[\n\xff\x8e\x1d\xc8\x9c\xd9\xc9\x30\xde\xe4\xa9\xd3i\xd4\xb0\x1ek\xd6\xac\xe7\xd6\xed;\xd4\xadS\x93\x36\xad[\x91\"E\xfc+4\xc6\x8d\x9f\xc4\x96\xad\xdbI\x95\xca\x8e/\xea\xd6\xa2q\xa3\x6$O\x1e\xff\x8f\xee\xb3g\xcf\x31}F\0\a\xe\x1e\xa1h\x91\x82\xb4i\xdd\x12\x37\x37WC\xfd\xabW\xafX\xbcx)\xeb\xd6o\xe2\xe6\xad\xff\xb1w\xdfQQ\x1dm\x1c\xc7\xbf\xa0\xa8\x88\x82\x88\x5\xc1\x86\n\xf6XP\xec\x62\x5{CE%j\xec\xbd\xf7\xae\x89\xbd\xc4\x12{\xef\xb1G\xa3Q1j\xb0\xf7\xf6*\x96\x44Ml(*h(\x8aHy\xff n\xdc\x80\x11+F~\x9fs8\x87\x9d;3\xf7\xb9\xc3]`\xf7\xd9\x99\xb9\x43\xa5\x8a\xe5\xe8\xdb\xb7W\xac~\xfc\xfc\xfc\xf0h\xe4\x45\xad\x9a\xd5\x18<\xa8?\xee\xd5\xea\xe0\xd9\xb8\x1m\xda\xb4\xc2\xdf\xdf\x1fg\x97\nL\x99\xf4\r\xfb\xf6\x1f\xe0\xf8\xf1\xd3Tp-C\xef^=\xb0\xb3\xcb\x64\xe8\xe3\xd4\xa9\xd3\xcc\x9d\xb7\x90\x8b\x97\xae\xe0V\xb5\x12\xe1\xe1\xe1\x98\x9b\x9b\x33t\xc8\xc0\x38\x63?\x7f\xfe\"C\x87\x8d\x64\xfb\x8e\x9f)\x90?\xf\xad[\xb5\xa0\x42\x5\xd7x\xdd\a\x17.\xf8\xb2n\xfd\x6\x8e\x1e=\xc9\x9f\x41\xc1\xb8\xbbU\xa4K\xe7Nd\xcc\x98\x1\x88Y\xaa\xee\xd1\xe3\xc7X\xa7I\xc3\xae\x9f\xf7\x92,y2:\xb6oC\xe1\xc2_\xb0`\xc1\x62\xf6\xfc\xb2\x9f\xcc\xf6v\xf4\xea\xd9\xd5\x30^G\x8e\x1e\x63\xcc\xd8\x89|7}2\xe\xe\xe\xaf\x1cs\x88\x99\xa5\xf3\xb2\xa4I\x93`oo\xc7\xb3g\xcf\x62\xd5=y\xf2\x14\x35\xea\x34ye_\xf7\xfd~3z\x9c\"\x85\x39\0w\xfc\xfc\feAA\x7f\x2\x90\xe9\x1f\xe7}\x95\r\xeb\x37\xe1^\xa5\x1cy\xffz^\xadY\xbb\x9e\xd6_51J\n\xfdSTT\x14\x1b\x37\xfe\xc0\xda\xf5\x1b\xb9\x7f\xff!u\xeb\xd4\xa0}\xbb\x36\xa4N\x9d\xfa\x95m\0\xb6\xfc\xb8\r\xcf\x46u\rI!\0W\xd7rDFFq\xf8\xf0Q\xea\xd4\xa9\xc5\xf9\v\x17\xa9Z\xa5\xa2Q;7\xb7*\f\x1d\x31\x9e+W~5<\x7f\x45\x44\x44\x44>\x15\x61\x61\x61\xdcy\xc5R\xbe\0\xe6)\xcd\xb1\xb3\xb3\xff\x88\x11\xbd\x1fJ\x2\x89\x88\x88$NJ\f\x89\xc8\a1o\xc1R\xb2\x64\xb6\xa7^\x9d\x9a\xaf\xad;v\xdc$\xca\x97-\x8d\xcf\xbe\x3x\xef>@\xde\xdc\x39(S\xba\x14\0\x91\x91\x91t\xee\xd2\x3[\xdb\x8c\x8c\x1e=\x82\x9b\x37n2m\xfa,\"##i\xd6\xd4\x93\xa0\xa0 \x2\x2\x2h\xd6\xac\x31\xe9ll\xd8\xbe\xc3\x9b\x46MZr\xc0\xc7\x9b\xf4\xe9\xd3\x1p\xe2\xd4y2fHO\xbb\xb6_q\xf3\xd6m\xc6M\x98\xca\xd7\x63\xbe\xa5w\x8f\xf6\xf4\xe9\xd5\x8d\v\x17|\xe9\xde{\bi\xd3\xa6\xc5\xcd\xad\n'O\x9e\xa2\xc9\x97\xed\x98:\xe9k\xbat\xee\xc0\xed;wH\x93&\r\0#G\xe\xe5\xe7\xbd\xd5)\xee\\\x90\t\xe3\xbe\xc1\xc6&-\0\xeb\xd6od\xc2\xc4\xa9\f\x1b\xda\x1f\xab\xe6V|\xbf\x66\x1d\xd5k5\xc0g\xcfv\xd2\xa5\x8b\x89\xe3\xc0\xa1\x93\x44\x44\x44\xd2\xb5K\aBCC\xf9\xfa\x9b\t\xdc\xbf\xff\x80o\xbe\x1e\xf1\xca\xb1\xf9\xed\xea\x35\x46\x8d\x1c\xc2\xbd{\xfe\x8c\x18\x35\x8e\a\xf\x1e\xd2\xb7O\xcf\x38\xeb\xfa^\xbc\x88{u\xf\x86\r\xe9\x83\x87G}\xe\x1e }\xda\x64\xc3L\x87\xabW\xaf\xb1`\xf1j\x6\xe\xe8\a@\xc5\x8a\x15\xf0\xd9\x7f\x10\x9f}\xfbqs\xab\xc2\x95+\xbf\x92!\xbd\x35\r\x1a\xd4\xc3\xdc\xdc\x9c\x97\x17\x83p\xcc\x95\x8b\n\xe5\\\xa8P\xa1<\x5\xfeZ\",$$\x84\x11\xa3\xc6\x31\xfb\xbb)T\xaaT\x1\x80R\xa5JP\xa9J\r6l\xd8\x44\xc7\x8e\xed\r\xed\x97.\x9e\x8f\xb5uL\x92)\xad\xb5\x35\r\x9b\xb4\xa6\x43\xfb\xb6\x64\xcel\xfc\xe9\xc2h\xa2\x1\x98\x31m\xb2\xe1\x8d\xfa\x34VV\xb4j\xd7\x9d\x16\xcd\x9b\x91!C\x86X\xe3\x38}\xfa,zvkO\x87\xf6m\x1(_\xae,\x8f\x1f?f\xda\xf4Y\xac)Y\x2_\xdf\x8b,X\xbc\x9a\x33'|\xb0\xb7\xb7\x37\xd4\x1\f\x89\xa1\xe0\xe0`\xbau\xefM\xbat6\x8c\x19=\n33\xb3W\xfe\xdc\xd6}\xbf\x88\n\x7f\x8dq*\v\v<\xbd\xda\xe1w\xd7\x8f\xacY\xb2\x30\x63\xe6\x1c\xfa\xf4\xe8h\xd8S\xc6\xd5\xb5<\x93\xa7\xce\x35\\\xcb?\x5\x6\x6\x2\xd0\xad[\x17\x43\xfd\xd0\xd0P&L\x9aJ\xc5\x8a\x15^{\x1fT\xab\xe6N\xb5j\x7f\xef\x63\x65\x66\x96\x14O\xafv<|\x18@\xfa\xf4\xe9\x30\x35\x31%\x99YR\xbau\xed\f@\xd9\xb2\x65\xd9\xb8\xe9GJ\x96,\xc6W_\xb5\0\xa0h\x91\xc2,_\xb5\x91\xd3\xa7\xcf\x90\x35K\x16\x1a\x34\xa8G\x95*\x95\x63\xed\xe1\x13\x1f\xcb\x96\xaf$o\xee\x9cT\xae\\)\xd6\x31\x1b\x1b\x1b\xa3{3>\xea\xd5\xab\xc3/\xfb\xe\x30t\xc4x\0\x9ay\xd6\x8d\xb3\xef\xb8\xfc\xf4\xd3v\xb2\x64\xb6\xa5l\xd9\xd2@\xccL\xa0Sg.p\xfc\xe4\xffh\xe1\xe5\x41\xb7\xae\x1d\x89\x8c\x8a\x62\xea\xb4\x99\xfc~\xe3\x6\xb3\xbe\x9b\xc6\xa3G\x8f\xf9z\xec\x14\xb6o]G\x91\xbf\x96t\xb4\xb5\xb5\xc5\xad\x46\x43\x6\xf\x1a\x10k\x86\xd4\v\xd1\xd1\xd1\\\xf0\xfd\x95\xe6^\x16\xb1\x8e\x65\xcc\x98\x9e\x87\x1\x31?\xe7\xfa\xf5\xeaP\xb3nS\x9c\x9c\x1c)\xe6\\\x94+W~\xe5\xc7m1KN\x6\a\a\xbf\xd1\xd8\x88\x88\x88\x88|\f\x99\xb3\x64\x61\xbb\xf7\xeeX\xe5\xf\xee\xfb\xd3\xb2\xb9\x17\xf5\xea\x37H\x80\xa8\x44\x44\x44\x44\xde\x8e\x12\x43\"\xf2N\xfc\xfd\x1f\xb0\x62\xd5Z\xbavnK\x8a\x14)\0X\xber-\x85\xbe(@\xe1\x42\x5\xe3\xd5\xc7\x1\x9f\x9f\f{\f=z\xf4\x88\xa9\xd3\x66\xd0\xab\xef\x30\\\xcb\x97\xe5\xeaoWy\x1a\x16N\xf6\\\xc6\xfb\rY\xa4La\xf8\xde\xd7\xf7\";v\xee\xe2\xc8\xd1\x63\x9c>s\x1\x80\xa7\x61\x61\x46\xf5_,\x11\a\x90;\xb7\x13\x39\x1d\x32\x1b\x1d/\\\xe8\v\xee\xdc\x89\x99\xcdP\xae|Y\xe6-XB\x8dZ\rh\xe8Q\x97\xaaU*\xe3\xe4\xe4\xf8\xca\xf8o\xdd\xbeM\xe0\xa3 \xc3\x32]\0\xe6\xe6\xe6\xb8W\xad\xc4\xff.\xf8\x1a\xd5M\x96\xec\xef\x44K\xfe\xfc\xf9\x62\xda\xdf\xba\x15+1dB\xcc\x8c\x8c\x17{\xd6\0\x38;\x17\x5\xe0\xc6\x8d\x9b\xb1\x12\x43\x11\x11\x91\xfc\xbcg?\x9e\x8d=\x8c\xca]\xcb\x97\xa3m\xc7\x9e\x84\x87\x87s\xf9\xca\x15\xb2g\xcd\x64H\n\xc5\xc5\xd3+&\x91s\xf9\xc2\x31\xcc\xcd\xcd_Y\xf\x62\x92\x41/d\xcb\x96\r\x80\xd0\x90P\"\"\"\xf8\xc5\xe7\x10\xcd\xbfljT\xbf\x41\xddj\xaf\xec+\x93\xad-\xd5\xaa\x1a'K\xca\x95/\xcb\xec\xf9\xcb\t\t\ty\xed}\x10\x1d\x1d\x8d\x8f\xcf>v\xef\xf9\x85\xf3\xe7}9z\xe2\x1c\0\xcf\x9e\xfd}\x1fT\xaeT\xd6\xf0}\xd2\xa4I(^\xac\bv\x99\xfe^\xfa\xce\xda\xda\x1a\x87l\xf6\x46\x89\x89\xb7I\n\x1d \xb8\xd7h@s\xaf\x86\x8c\x1a\x39<\xee\x65\xd5\xc2\x9f\x3\x10\x15\x15iT\x9e,yr\xccS\xa4\x88U\xff\x85\x17\xc9\xaa\x64\xc9_\xbd\xc7\xd0\xcb^\xec-\x94\x34\x8e\x64\x43TT$a\xcf\xc2\x89\x8c\x8c\x32*733#E\xf2\x64\x98\x9a&!8(\x98\xa8\xa8\xe8\x7f=G\xeb\x96\x9e,^\xb6\x96\xad[\x7f\xa2\x65\xcb\xe6\xf1\x8a\v\x8c\xc7\x34**\x8a\xf0\xe7\x11\x44\x45\x46\xbe\xba\x41\\}\xbc\x94\xbc{\x11;\xc4$\xc7^w\x1f,]\xb6\x82\x95+\xd7\x30\x62\xc4`:ul\x87\xaf\xef%\x9a\xb7\xeaL\xf4\xbf\\n\\?KS\xd3W/\x91\x16\x1f\x97._\xa6u\xdb.,\x9c\x37\xc3\x90\xec\xfc\xa7\x37\xdd\x63h\xa7\xf7.n\xdf\xb9\xc7\xc0\x1}\r\xf7\xc0\xc4\t\xe3h\xec\xe9\xc5\xc2\x85K\x98\x30~\xcc+\xfb\xda\x7f\xe0 w\xfc\xfc\xa9Q\xdd\xdd\xa8\xbcx\xb1\xc2\xa4\xb3Ik4\x6\x99\xfeJ\x92\x5>z\x84\x45\xca\x94\0,[4\x93\x82\x5\xf3\x1b\xb5\xcd\x98\x31#\x87\xf\x1f\xa1Q\xd3\x36\x46\xe5\x87\xf7\xef$W\xae\x9c\xe4\xcd\xeb\xc4oW\xaf\x1a\x1d\v\v{\xc6\xafW\x7f\x37\xda\x83\xaa\x42\x5W\xa3=\xa4\xae]\xbb\x6\x80\xfdKuDDDD\xfe\v\xee\xde\xbdKxxxB\x87\xf1V\xbcw\xee\x30z\xec^\xed\xd5\xcb\xe5\x89\x88\x88\xc8\xe7\x43\x89!\x11y'\xa9RY\xb0\x66\xd5\"\xdckz0o\xc1Rr;\xe5\xc2\xc2\xc2\x82R%\x8b\xbfu\x9f/\x12&666\xa4M\x1b\xb3\x87\xcf}\xff\xfb\xb8\xb8\xc4\xee\xf3\xd0\xc1\xc3\x14)\x94\x9f\xfa\xf5\xea\x2\x31\x9b\xc2\x2\x84=\r\x8bU\xf7M\x98\x99\x99Q\xbat)J\x97.E\xf1\xe2\xce\xb4h\xd5\x85\x1e\xdd\xbb\x62\x63\x63\x83\x89\x89\xa9\xd1\v\xbf\xacY2\x93$\x89)\xa7\xcf\x9c\x35\xcc\xc6\x89\x88\x88\xe4\xe0\xc1\xc3\x34ib\xbc\xa7\xce\xcd\x9b\xb7\f3\x8b~\xfd\xf5\x37\x92\x99%%[\x1c\xfb\xc4\xbcXJ\xee\xf9\xf3\xe7\x86\xb2\xcb\x97/c\x9e\"Y\x9c\xf5\x93%KF\x99R\xce\x1c }\xf9\xaa\xfb`\xf3\x96m\xd4\xabW\xcb\xb0\x34\xde\x8b\xfdk\xfe\x65+\x9cx\t\r\r\xc5\xc2\"\xf6\xb2hq\xb9r\xe5W\x9a\x36k\xcd\xf4o\xc7\x1b%<\xfe\xc9\xc1\xe1\xcd\xf6\x18z\xf6\xec\x19O\x9f\x86\x11\x16\x16\x46\xaaT1\t\xb2\xa4I\x93\xe0\xe0\x90\xcdp\xbf\xc7\x15ktt4\x8b\x97,\xa7}\xdb\xe6\x86}\xae^\xa8]\xb3:#\xbf\x19\xcf\x88\xa0 \xc3\xf2~\x17|cf\xb7\x65\xc9l\x8f\xb9yJ\xd2\xd9\xa4\xe1\xd6\xed\xdbT\xffGR\tb\x96\xfa\xfbg\x2\xeb\xef\xbek\xd0\xae\x63O\x6\xf4\xef\x63\x98\xfds\xf4\xd8\x31\0\xc3\xde\x61\xff\x14\x1d\x1d\xcd\x9a\xb5\x1bh\xe6Y7^\xfb&\x89\x88\x88\x88|l\x7f\xfe\xf9\x98\x13\xc7\x8f\x1b\x95\x45\x46\x46r\xfe\x7f\xff\x63\xf3\xa6\x8d\xcc\x9d\x1f\xff\xff\xef\xe2\x32\x61\xfcX\x96/]\x12\xab|\x8f\xcf\x1lmm\x81\x98\xd7:\xabW\xae`\xf7\xee]\xa4NmI\xcdZ\xb5\xa9]\xa7\xae\xd1\x87}\xa2\xa3\xa3\xd9\xb1\x63;\xdb\xb7m\xc5\xff\xde=\xaa\xb8\xb9\xd1\xa2\x65\xabW\xae\x6\xa0\x44\x90\x88\x88H\xe2\xa4\xc4\x90\x88\xbc\x33\x1b\x9b\xb4,\x9c\x37\x3\x8f\xc6-\xc8\xed\xe4HSO\x8f\xd7\x37z\xc9\x85\v\xbe\x4\a\x5\x13\x1d\x1dMpp\bk\xd7m\xa0v\x8d\xca\xe4\xc9\x93\x1b\x33\x33\x33Zxy\xd0\xb9koF\x8d\x1cL\xf6l\xd9\xb8}\xfb\xe)R$\xc7\xd5\xb5<\xd9\xb3g\xe3\xe0\xf8i\xac\\\xb9\x1a\x87\x1c\xel\xd9\xb2\x35&\xa6t6o}=?\xef\xde\xc3\xb5k\xd7)\x90?\x1f\xc9\x92%c\xcf\x9e_\xc8\x9b;\aVV1{\x3\x15(\x90\x8f\xed\xdbwQ\xa6Li,R\xa6$_\xbe\xbc\f\x1e\xd0\x83>\xfd\x86\xf2$\xf4\t\xf6\x99\xed\xd9\xbe}'!\xa1OhP\xbf\xaeQ\xdf_\xb5\xee\xc8\xd0!\xfdH\x9e,9c\xc6Mb\xf0\xc0\x9e\xa4\xfb\x97X;v\xeaN\xbbv\xadx\xf2\xe4\t\xa3\xc7Lb\xe8\xe0>\xa4Mk\r@\xfa\xf4\x36\\\xf0\xbd\xc8\xc5\x8b\x97\xc8\x97//={t\xa5\x41\xa3\x96X[[S\xc2\xa5\x38\xbe\x17/1s\xf6\x62v\xed\xd8\x4@\xe9\xd2\xa5(\\0\xf}\xfa\xe\xa4{\xf7\xce\xa4L\x99\x92\x33g\xce\xd2\xa8\xa1\xf1z\xe8\xad[\x7f\xc5\xb5\xeb\xbf\xd3\xb6\x43w~\xda\xba\xfe_\x97*{\x95\xee\xdd:\xd3\xd0\xb3\x15Vi\xacpq)\x8e\xaf\xef\x45\0\"^Jt\xbd,\xfa\xaf\xa9=S\xbe\x9d\x46\t\x97\xe2\xfc\xfa\xdbU&L\x9e\xc9\xf\x1bV\0\xf0\xc5\x17\x5\xff\xf5>(X \x1fk\xd6n$g\xce\x1c\xa4\x34\x37\xa7q\xb3\xb6o\x1c\xf3?m\xde\xf2#\x9d\xba\xf6\x63\xfb\x8fk)R\xa4\xf0\xbf\xd6\xbd|\xf9\n\xe5+\xd5\xa2I\xa3\xda\xa4\xb5I\xcb\xb1\xe3'\f\xc7\xbe(X\xc0\xe8\x85\xf8\x9b\xee\x31T\xb1\x42\x5\xac\xac\xbe\xa3S\xe7\xee\x34k\xeaI\xea\xd4\xa9\xf0\xbdx\x89\x15\xab\x37\xb1\x65\xe3\x8aW\xc6\xea\xeb{\x91=\xbf\x1c\x66\xf8\xd0\x41\xb1\xfa\xacV\xcd\x8d\x5\x8b\x96\xd2\xa1S7Z|\xd9\x8ch\xa2\x99\x36m\x16\x43\a\xf6\x34$\x91\x46\r\x1fH\xf7\xde\x83\x31\x33\x33\xa3\x98sQ\x82\x82\x83\xf9\xe3\x8f\x1bx5{\xf5l'\x80J\x95*P\xb2\x44\x11:v\xeaN\x87\xemx\x12\xfa\x84\xe1\xa3\xc6\x32|h\x7f\xd2\xa4\x89y\xe\xed\xd9\xb3\x97\xdf\xae^#\xb7\x93#\xa1\xa1O\xd8\xb3\xf7\x17\x8e\x9f\x38\xcd\xaa\x15\x8b\xe3=.\"\"\"\"\x1f\xd3\xc3\a\xf\xe9\xf1\xd7~\x98/\xcb\x97/?c\xc7O\xa4l\xb9\x37\xff@\xd5\xcb\x42\x43\x43\xa9Y\xab\x36M\x9az\x19\x95\xbf\xf8\xff)\"\"\x82\x41\x3\xfa\x11\x12\x12L\xdbv\x1d\b\f\f\xe4\x9bQ#x\xf4\xe8\x11-\xbfje\xa8\xbf\x62\xf9\x32\x96,ZH\xef\xbe\xfdH\x9e<9\x8b\x16.\xc0\xf7\x82/S\xa7\xcf\x30Z\xa6ZDDD\x12\x37%\x86\x44\xe4\xbd(\\\xa8 mZ5g\xd6\x9c\x5,_2\xe7\x8d\xdav\xea\xda\x1f\x88\xd9/\xc6\xb9hA\xaa\xb9U\xc1\xd3\xb3\x91\x61)\xb1\xb1\x63\xbe\x66\xd5\xea\x35,^\xb2\x9c\xdf\xae\xfeN\xb1\xa2\x85\xf8\xaa\xe5\x97\0\xd4\xa8Q\x8d\x11\x43o3k\xce\x2\xac\xac,i\xd6\xb4\x31\x15\xcb\xdfz\xa7kI\x9b\x36-\xde\xde?\xb3r\xd5Z\x9e l0\xbf\xff~\x83\xf6\x1d\xba\xb1q\xfd\xaa\x37\x1e\xc3\xf2\xe5\xca\xb2v\xd5\x2\x16.Z\xca\xd6m;\xa9Y\xdd\x8d\xa2\x85\xf3\x91\xd2\"e\x9c\xf5\xd3XY\xd1\xa0n5\xfe\xf8\xe3\x6\xcbV\xac\xa1\xa4\x8b\x33\x9b\x37\xae\xa4X1gC\x9d\x7f\xbb\xfz\xf5\xec\x46\x64\x64$\x83\x87|M\xde\xbc\x8e\xcc\x9b=\x99~\x3\x86\xbfq\xdc/\xcb\x90>=E\v\xe7\xc7\xca\xca\xea\xb5u\xd7\xae]\xf\xc0\x9a\xf5[Y\xb3~\xab\xd1\xb1\xb3'\xf7\xbfv\xbf\xa6\x7f\x93\x39\xb3=[7\xaf\x63\xe9\xd2\xe5L\x9e\x32\x9d\xe0\x90\x10J\x95,\xce\xcem\xeb(Z\xb4\xc8+c]\xbf~#\xeeU\xca\x19\xed}\xf5\x42\xaaT\xa9\xf8~\xd5Rf\xce\x9a\xcb\x98q\x93\xb0\xb5\xcd@\xdb\xb6-iP\xbf\xbe\xa1N\xc3\x86\rHc\x9d\x86\xef\xbf_\xc7\x94\xa9\x33q\xca\x95\x83\xda\xb5k\xbc\x36\xde\xe4\xc9\x93\xb3x\xe1<\xe6\xce\x9b\xcf\x84\x89S\xc9l\x9f\x89\xb1\xa3\x87S\xa7v-C\x1dK++|}/2\x7f\xc1R\x1c\x1c\xb2R\xaa\x64\t~\x1c\x32\x10\x1b\x9b\xb7O\xe8\x8a\x88\x88\x88|H9s\xe5\xe2\xfc\xc5+\xb1\xca_\xacv\x10\xfe\xecY\xbc\x97\x88\x8eKhH\b\xb9\x1c\x9d(\xea\xec\x1c\xe7\xf1\xe3\xc7\x8fq\xf0\xc0~\xbcw\xff\x62XU\xc1\xca\xca\x8a\x81\xfd\xfbR\xabv\x1dlllx\xf8\xf0\x1\xdfN\x9e\xc4\xfc\x45\x8bqq)\x1@\xde|\xf9\xa8V\xb5\x32\xa7N\x9e\xc0\xa5\x44\xc9\xb7\x8eODDD>/&W\xae\xf9\x45g\xb1K\xf\xc0-\xbf\a8\xe5\xd0\xda\xfe\"\x9f\x8b\xa7\x61\x11@\xccs\xfb\xc5\xf3\xfcU^\xae\xf3\xb6\xbf\v\xa2\xa3\xa3\t\v\v{\xa7\x37\xc1?W{\xf7\xfa\xd0\xe4\xcbv\xfc\xfe\xdb\xd9x/M\xf6\x39\x89\x8a\x8a\xa2r\xd5\x9at\xeb\xd2\x81\x6\r\xea%t8\"\"\"\"\xf2\x99\xf8\xf5\xfa]\xa3\xd7\x31o\xf2\xba'84\xe4\xbd\xc4\xb0\x65\xf3\xf<~\xfc\xd8h\xe6\xce\x9bj\xdf\xb6\x35\x65\xca\x94\xa5\x65\xab\xd6q\x1e\x1f>l\b\xc9\xcc\xcc\x18:|\xa4\xa1,44\x94\x32%]\x98\x30i2\xee\xd5\xaa\xf3\xe3\x96\xcdL\x9f:\x5\xef\xdd\xbf\x18\xf6\xa6\x4\xe8\xd1\xbd+\xb6\xb6\xb6\f\x1a<\xd4\xa8\xcf\xfcy\x1c\xf1\xbd\x1c\xf7\xf2\xc0\"\"\"\xf2\xf9Im\x11\xf3\x1\xf6[~\xf\x34\x63HD\xde\x1f\x13\x13\x13%\x85\x4\x80\x90\x90\x10\x96,]Nn''\xd2\xa4\xb1\xc2g\xdf~\xa2\xa2\xa2\xa8Z\xb5rB\x87&\"\"\"\"\x12/\xf\x1f>\xc4{\xe7\x8e\x7f\xad\x13\x1d\x1d\xc5\xde={^9\xd3'\xbe\x2\x2\x2\x98\x38\x61\x1c\xcb\x97-\xc1\xde>3\xa5\xcb\x96\xa5\xb1gS\xc3\xec\xa0\xdf\xae\\\xa1z\xcdZFm,,,p\xca\xed\xc4\xbd\xbbw\x1\xb8s\xe7\xeN\xb9\xf3\x18%\x85\0r;\xe5\xe6\xdc\xb9\xb3q\x9e\x37\x7f\x1e\xc7\x38\xcb\x95\x30\x12\x11\x11\xf9\xbc)1$\"\"\xef]x\xf8s\x82\x83\x43\x18\x37\x61\n\x91\x91\x91T\xadR\x91\xf5\xebV\x92:u\xea\x84\xeMDDDD$^BB\x82\xd9\xb2y\xd3k\xeb\x39:\xe5\xc6\xd3\xb3\xe9;\x9d\xabi3/\xac\xad\xad\xb1\xb4\xb4\xc2\xdf\xff\x1e+\x96/c\xef\x9e\xdd,Y\xb6\x82\x94)-\xb8t\xe9\x12\r\x1b\x37\x8e\xd5.}\xfa\f\x4>\n\x4\xc0\xff\xde\xbd\x38\x97\x41\xb6\xb4\xb2\xe4\xf6\xad\xb8\x97\xdbV\x2HDD$qRbHD\xe4#\xa8T\xa9\x2\xf7\xfd\x12\xcf\x8b\xae\xb4i\xad\x19<\xa8?\x83\a\xf5O\xe8PDDDDD\xdeJ\xf6\xec\xe\xac\xdb\xf0\xc3G9W\xc3\x46\xc6I\x9f\x62\xc5]\xa8\\\xa1\x1c\a\xf\x1c\xc0\xbdZur\xe4\xcc\x41ppp\xacv\x8f\x1e\x5\x92>}\xcc\xd2x6\xe9l8\xff\xbf\xff\xc5\xaa\x13\x12\x12\x42v\a\x87\xf\x13\xb8\x88\x88\x88\xfc'\x99&t\0\"\"\"\"\"\"\"\"\xf2\x37[[[\xb2gw\xe0\xee]?\0\x9c\x9crs\xfd\xfau\xa3:\xcf\x9e=\xe3\xda\xd5k\xd8\xda\xc6\xec\xfkgg\xc7\xa5K\x17\t\xf\xf\x37\xaaw\xe3\x8f?pp\xc8\xf1q\x2\x17\x11\x11\x91\xff\x4%\x86\x44\x44\x44\x44\x44\x44\x44\x44\x12Htt4QQQFe\x1\x1\xf\xf9\xe3\x8f\xdf\xc9\x9e=f\xa6OU7w~\xdc\xbc\x99\a\xf7\xef\x1b\xea\x9c:y\x2\x80\xe2.%\0(Y\xaa\x34\x81\x1\x1\x9c\x38~\xdcP\xe7\xc1\x83\a\xfc\xb4m+\x95\xabV\xfd\xd0\x97!\"\"\"\xff!ZJNDDDDDDD$\x81\xfc\xf1\xfb\xef\f\x1d\x32\x88\x6\x1e\x1e\xd8\xda\xda\x11\x12\x12\xcc\xeaU+([\xae<\xa5K\x97\x1\xa0\\\xb9\xf2\x38\x17+F\xbf\xbe\xbdi\xf9U+\x9e x|\x9f\xb2\xfcy\x1c\xf1\xbd\xfc[B\x87!\"\"\"\x1fIj\x8bT@\xcc\xff\x43\xda\x63HDDDDDDDDDDD$\x91PbHDDDDDDDDDDD$\x91PbHDDDDDDDDDDD$\x91H\x9a\xd0\x1\x88\x88\x88\x88\x88\x88\x88\x88\xc8\xc7\x37{\xe6w\xb1\xca:w\xed\x96\0\x91\x88\x88\x88\xc8\xc7\xa4\xc4\x90\x88\x88\x88\x88\x88\x88\x88H\"\xa4$\x90\x88\x88H\xe2\xa4\xa5\xe4\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x12\t%\x86\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x12\t%\x86\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x12\t\xed\x31$\"\"\"\"\"\"\"\x92\by\xef\xdc\x61\xf4\xd8\xbdZ\xf5\x4\x8a\x44\x44\x44\x44>&%\x86\x44\x44\x44\x44\x44\x44\x44\x44\x12!%\x82\x44\x44\x44\x12'-%'\"\"\"\"\"\"\"\"\"\"\"\x92H(1$\"\"\"\"\"\"\"\"\"\"\"\x92H(1$\"\"\"\"\"\"\"\"\"\"\"\x92H(1$\"\"\"\"\"\"\"\"\"\"\"\x92H$M\xe8\0\x44\x44\x44\x44\x44\x44\x44\x44\xe4\xe3\x9b=\xf3\xbbXe\x9d\xbbvK\x80HDDD\xe4\x63RbHDDDDDDD$\x11R\x12HDD$q\xd2Rr\"\"\"\"\"\"\"\"\"\"\"\"\x89\x84\x12\x43\"\xf2\xc1\x45\x46\x46\xf2\xf4\xe9\xd3\x84\xe\x43\x44\x44\x44\x44\x44\x44\x44\x44\x44$\xd1SbHD>\xa8\xc0\xc0G\xb8\x94\xae\xcc\x9e\xbd\xfb\x63\x1d\xbbt\xe9\x32\x19\xec\x1c\r_%JU\xa0{\x8f\xde\x9c \x7fJ\f\x89\xc8\a\xd5\x7f\xd0\b\x8a;\x17\xa1VM\xf7W\xd6\x99\x35}<[\x7fX\xc5\xf8\xb1#\xb1\xb4\xb4\xa4\x46\x9d&\x9c={\xee#F)\ti\xe9\xb2\x15\xb4m\xd7\xe9_\xeb\xb4m\xd7\x89\xa5\xef\x90\x98\xbbt\xf9\x32\x9d\xbb\xf6\xa0V\xdd&\x1c\x39v\xc6P~\xfd\xfa\xef\xd4\xa8\xd5\x88\xb4i\xd3\xd2\xb7O\xfj\xd5\xac\xc6\xe2\xa5\xab\x18:ld\xac\xa4\xe\xc0\xa9S\xa7\xf9\x66\xec\xd4X\xe5\x11\x11\x11t\xe9\xda\x93\xfd\xfb\xf\xd2\xbd['j\xd5\xac\x46\xff\x41#\x99\x37\x7f\xa1Q\xbd\xf9\v\x16\x31\x62\xd4\x38\xea\xd4\xaeI\x8f\xee\x9d\xd9\xe9\xbd\x9b\xce]{\x12\x11\x11\xf9\x46\xd7\x93\x31\x63\x46\xea\xd7qg\xe3\xa6-\xb1\x8e\xdd\xbcu\v\x9f\x3\xc7q\xabZ\xf9\x8d\xfa\x14\x11\x11\x11\x91\xc4\xc7{\xe7\xe\xa3/\x11\x11\x11I\x1c\x92&t\0\"\xf2\xf9\xda\xf6\x93\x37'N\x9c\x66\xbf\xcf\xf6\x7f\xad\xf7\x45\xa1\x82\xe4vr\x2\xc0\xd5\xb5<;\xbd\xf7p\xf4\xe8\x31\n\x17.\xf4\x31\xc2|\xad\xa4I\x93\xb0x\xd1\xbc\x84\xe\x43\xdeRtt4\xe3\xc6M\xa2@\x81|\x9c\x38\xb2\x97\xd1\x63\xc6\x1b\x8e\x65\xcf\x9e\x8d\xc3\a~&S&[\0\xaa\xb9\xbb\xe1\x94\xdb\x91\x16\xad\xba\x30x\xd0\0\x32\x66\xcc`\xa8\xfb\xe7\x9f\x41\xf4\xea\x33\x90\xe6\xcd\x1a\xb0\x62\xf5&\xa3s\x1c:t\x98\xbd>\x87\x38q\xd4\x87t\xe9l\0\xb0\xb6\xb6\xa6s\xb7\xbe\x34\xf4\xa8O\xbat\xe9\xb8\x7f\xff>\xdf\x8c\x99\xc2\xda\xef\x17S\xa6t)\0\n\x16,\x80K\xa9*\x1c=v\x8c\xb2\x65J\xbf\xd1u\xd5\xab[\x9b\x96m\xbar\xe3\xc6M\xb2\x65\xcbj(?p\xe0\x10\xe\xd9\xec)T\xe8\x8b\x37\x1b(\x11\x11\x11\x11It\xdc\xabUO\xe8\x10\x44\x44\x44$\x1h\xc6\x90\x88|\x10\xe1\xe1\xe1\x8c\xf8z\x1c\xa3\x46\xe\xc2\xca\xd2\x32\xde\xed\x9e \xb8W\xaf\xc3/\xbf\xf8\xd0\xbc\x45k*V\xaeNHH\b\x10\x33\x3\xa6]\xfb\xce\x94)W\x99Q_\x8f\x61\xc8\xd0\x11\x8c\x1e\x33\x9e\xa0\xa0`\x1cr\x15\x64\xdd\xfa\rFq\x8e\x18\xf1\x35\xbd\xfb\xf4\x8f\x15\x7f@@\0\x13&N\xa6\x62\xe5\xea|Q\xa4$\x1d:v\xe5\xd6\xad\xdb\xaf\xbd\xbey\xf3\x17\x32\xf2\x9b\xc9\xf8\x1c\x38N\x6;G\xbc\xbe\xfc*V\xdf^_~\x85\xcf\x81\xe3\x8c\xfc\x66\x32\x19\xec\x1c\x8d\x66\xe1\\\xbcx\x89\x1e=\xfbP\xcc\xa5\x1cm\xdbu\xe2\xd8\xb1\xe3\xb1\xda\x9b\x98\x98\xb0h\xe1\\\xfa\xf7\xeb\x43\xe6\xcc\xf6\x46\xc7LMM\rI\xa1\x17\xd2\xd9\xc4$v\x9e?\x7fn(\x8b\x8e\x8e\x66\xe2\xa4)\xb8\x96/C\xc3\x86\rb\x9d\x63\xcb\x8f\xdb\xf0lT\xd7\x90\x14\x2pu-Gdd\x14\x87\xf\x1f\x5\xc0g\xdf~\xd2\xd9XS\xc2\xa5\xb8\xa1N\xf6l\xd9\xa8U\xbd\x12;w\xee\x8a\xd5'\xfc\xfb}T\xbatI\x92\x99%\xe5\xe0\xa1\xc3\x46m6n\xdcL\xf3/=133\x8b\xb3O\x11\x11\x11\x11\x11\x11\x11\x11I\xdc\x94\x18\x12\x91\xf\x62\xde\x82\xa5\x64\xc9lO\xbd:5_[w\xec\xb8I,Z\xb4\x84\xe6-Z\x93\xc3\xa9\bY\xb3\xd8\x19\x66TDFF\xd2\xb9K\xf\xee\xde\xbd\xc7\xe8\xf2\x39&_\0\0 \0IDAT\xd1#h\xd6\xa4\x11\xd3\xa6\xcf\x62\xed\xba\x98\x84\x45PP\x10\x1\x1\x1\x34k\xd6\x98\x19S'\x90&\x8d\x15\x8d\x9a\xb4\xe4\xc1\x83\x87\x86\xfeO\x9c:\x8f\x8f\xcf~\xda\xb5\xfd\x8a\x36\xad[0c\xe6|\xf2\x16,Ipp0}zu\xa3V\rw\xba\xf7\x1e\xc2\xee\xdd{\xe3}}'N\x9dg\xd7\xcf{h\xd3\xaa%\x1d;\xb4\x66\xd9\xf2\x35\xcc\x9d\xb7\xe0\xef\xeb\x9f\xb7\x90\xd5\xdf\xaf\xa3k\xe7\xe\f\x1e\xd8\x87\x93\xa7\xce\x30\x64\xe8\x88\x38\x97';r\xf4\x18\xed:t\xa3V\xcd\xea|;e\x1cI\x93&\xa5\xa9W+\xfe\xfc\x33\x66\xdf\x9d\xa8\xe8(\xe6/Z\x85Y\xd2\xa4\f\x1a\xd0\x87J\x15\xcb\xd3\xb9\xdb\0\xf6\xed?\x10\xaf\x31\x2\x38s\xee\x12\xa3\xc7L\xc4\xcd\xad\x32\xdd\xbbu$U\xaaT\x9c>}\x86Z\xf5\x9a\xe2\xec\\\x84\xb1\xa3G`n\x9e\x82\x5\x8bW\x13\x14\x14\x84\xa5\x65jZ\x7f\xd5\x8c\x8d\x1b\xff^\xaa,44\x94Uk6R\xbf^\xddX\xd7\xd0\xbb\xef@.]\xfe\x95\x91\xc3\a1c\xea\x4\x9c\x9d\x8b`ee\xf5\xda\xeb\xabS\xbb&\xc5\x9d\v\x2\xb0w\xd7\x66\x46\x8e\x1c\x1a\xab\xef\x17\x65\xc5\x9d\v\xb2w\xd7\x66\xea\xd4\x8e\xb9\xa7|/^\xc4\xadz\x3\xf2\xe5\xcb\xcb\xb7S\xc6\x91#\x87\x3\xb5\xeb{q\xf4\xe8\xb1X}\xbcI\x92\xe4\xfc\x5_\xf2\xe7\xcd\x65\x94\x30\xf2\xde\xf5\x33\xfb\xf6\x1f\xa2o\x9f\x9e\x98\xc4\xd1\xe6\xe2\xa5+88d7*K\x95*\x15\xf9\xf2\xe4\xc2\xcf\xcf\xf\x80[\xb7n\x93?\x9f\x13I\x93\x1aO\xd6\xcd\x97\x37\xfW\xaf^\x8f\x33\x96\x7f\xbb\x8f\xac\xac\xac\xf8\xb2\x99\a\x9b~\xf8\xfbg\xf4\xc7\x8d\x1b\x1c \xfd\xfd\x1f\xb0\x66\xed\x46z\xf7\xea\x41`\xe0#\xbe\x1e;\x85\xed[\xd7Q\xe4\xaf\xe5\xf0lmmq\xab\xd1\x90\xc1\x83\x6`k\x9b\xd1\xa8\x9f\xc9S\xa6\xd1\xa7g\x17\xea\xd6\xad\r\x80s\xd1\"\x14*Z\x9a\x93\xa7NQ\xb9RELMLI\x92\xc4\x94\x1e=\xba\x2P\xa1\x82+?\xef\xfe\x85\xfd\xfb\xfR\xc1\xb5\xfck\xc7\xe8\x85\x85\vf\xe1\xe0\xe0`x L\xffv\xb4\x61\xcc+Tp\x8d\xf7\xf5\xd5\xac\xe1\x8e\x45Js\n\x14\xc8\x1f\xe7\x38;\xe6\xca\x45\x85r.T\xa8P\xde\xa8\xce\xf4\xe9\xb3\xe8\xd9\xad=\x1d\xda\xb7\x5\xa0|\xb9\xb2<~\xfc\x98i\xd3g\xb1\xa6\x64\x89\xd7\xff\0\xe3\xf0\xe0\xc1\x43&L\x9a\xce\x8c\xa9\x13H\x92$\t\0~~w\xe9\xddw\bK\x16\xcd\x36$\xbb^\x16\x1d\x1d\xcd\x5\xdf_i\xee\x65\x11\xebX\xc6\x8c\xe9y\x18\x10\b\xc0\xdd\xbb\xf7\xb0J\x13\xbb\xbdU\x1a+n\xdc\xbc\x15\xab<>\xf7Q\x8d\xea\xee\x34l\xd2\x9a\x9b\xb7n\x91\x35K\x16\xe\x1c\x38H\xd1\xc2\xf9\xc8\x93;\xf7[]\xbf\x88\x88\x88\x88\x88\x88\x88\x88|\xfe\x94\x18\x12\x91w\xe2\xef\xff\x80\x15\xab\xd6\xd2\xb5s[R\xa4H\x1\xc0\xf2\x95k)\xf4\x45\x1\n\x17*\x18\xaf>\xe\xf8\xfc\x64\xd8\x63\xe8\xd1\xa3GL\x9d\x36\x83^}\x87\xe1Z\xbe,W\x7f\xbb\xca\xd3\xb0p\xb2\xe7\x32\xdeo\xc8\"e\n\xc3\xf7\xbe\xbe\x17\xd9\xb1s\x17G\x8e\x1e\xe3\xf4\x99\x98\x65\xe4\x9e\x86\x85\x19\xd5\x37\x35\xfd{\x82\x64\xee\xdcN\xe4t\xc8lt\xbcp\xa1/\xb8s\xc7/\x9eW\x1d\xbbO'\xc7\\\xfcq\xf3.QQQ\xdc\xb8y\x93\xc8\xc8(\xdck4\x8c\xd5&f\t\xb7\xbf\x13\x43\x61\x61\x61\x1c\x38t\x92\x3\x87N\xd2o\xd0\xd7\x46u\x83\x82\x82\f\xdf\xbbU)ot\xac\x98s\x11\x1e=z\x4\x10\xaf\x31\x2\xc8\x90\xe1\xef\xfdr\"\"\"\xf8\xc5\xe7\x10\xcd\xbfljT\xa7\x41\xddj\x86\xef\xbf\xf8\xa2 \x85\v\xe6\xe1\xc0\x81\x43xye\xe5\xa7\x9fv\xd0\xba\xd5\x97$O\x9e\xdc\xa8\x8d\x99\x99\x19\xc3\x6\xf5\xa4w\xbf\xe1\x1c?~\x92\xaaU+S\xc1\xb5<)S\xa6\x8c\xf7\xf5\xbd\xa9\x88\x88H~\xde\xb3\x1f\xcf\xc6\x1e\x46\xe5\xae\xe5\xcb\xd1\xb6\x63O\xc2\xc3\xc3I\x96,\xd9\x1b\xf5\x19\x16\xf6\x8c\x1\x3\x87\xd0\xc8\xa3\xeU\xaaT2\x9cg\xd8\xf0Q\xb4\xfe\xca\xcb\xb0\x4\xdc?\xe7|\x99\x98\x98\xe0\x98+;AA\xb1\x97\n\f\b\b4\xecS\x94>}:N\x9f>\x17\xabNpp0\xb9r:\xc4*\x8f\xcf}T\xbcx1\xd2Z[r\xe8\xd0\x61\xb2\x36\xf1\x64\xc3\xc6-4k\xda\x18\x13\x93\xb8\xe6\x35\x89\x88\x88\x88\x88\x18\x9b=\xf3\xbbXe\x9d\xbbvK\x80HDDD\xe4\x63RbHD\xde\x89\x85\x45J\xbcw\xed\xe1\xf2\x95_Y0w:\xd1\xd1\xd1\xcc_\xb8\x94\x99\xd3'\xbdU\x7f\xd6\xd6\xd6\xb4o\xd7\x86\xb9\vVr\xf5\xea\x35R\xa5N\x5\xc0\xf1#\xbbI\xfa\xd7\f\xe\xc0\xf0\xc6\xf7\xa9\xd3gh\xd8\xb8\x5\xdfN\x1eM\x83\xfau133\xc3\xb9\x44\x45\x42\x43\x43_y\x8e\xb8\xde\x33\x7f\xe7\x37\xd2_jn\x91\x32%\0\xcb\x16\xcd\xa4`A\xe3Y0\x19\x33\x1a\xcf\x16J\x96,\x19I\x92\x98\xd2\xa9}KZ\xb7jat,M\x9a\x34\xaf>\xddK\xf1\xben\x8c\xe2\x12\x15\x15\x45\xf8\xf3\b\xa2\xfe\xda\x87(.\xa6\xa6\xa6\xb4l\xe9\xc5\xba\xf5\x9b\xa8^\xdd\x9d\xef\xd7ma\xff/?\xc5Y\xb7[\xb7.xx4\xe0\x17\x9f},^\xb2\x9c\xc1\x43\xbe\xe6\xfb\xd5\x8b\xc9\xed\xe4\xf4V\xd7\xf7:QQ\x91\x84=\v'2\xd2x_(333R$O\x86\xa9i\x92W\xb4\x8c[dd$c\xc6\x8e\xe7\xf9\xf3\xe7\f\x1e\xd4\xdf\x90\xf4\xdb\xb9\xd3\x9b\xad\xdb\xf7\xb0u\xfb\x1e&N\x99\x65\xd4&W\x9e\xa2\xa4\xb3I\xc3\xc5\xf3'\xc8\x9b\xd7\x89\xdf\xae^5:\x1e\x16\xf6\x8c_\xaf\xfe\x8e\x9d]&\0\x32\xdb\xdb\xb3l\xc5\xdaXI\xab\xeb\xd7\x7f'W\xce\x1c\xb1\x62\x8a\xcf}dnnN\x8b/=\xf9\xe1\x87\x1f)\xe1\xe2\xc2\x91\x63g\xf8n\xc6\x94\x37\xbav\x11\x11\x11\x11I\xbc\x94\x4\x12\x11\x11I\x9c\xb4\xc7\x90\x88\xbc\x93T\xa9,X\xb3j\x11g\xcf\x9dg\xde\x82\xa5\xec\xdb\x7f\b\v\v\vJ\x95,\xfe\xd6}\xbexS\xde\xc6\xc6\x6\xc7\\\xb9\0\xb8\xef\x7f\x9f\xcc\x99\x33\x1b\xbe\xec\xed\xed\x1\x38t\xf0\x30\x45\n\xe5\xa7~\xbd\xba\xe4\xc8\xe1@\xfa\xf4\xe9\0\b{\x1a\x16w\xe7\x1f\x81\xbd\xbd=\xe9l\xd2p\xeb\xf6m\xa3\x98\x33g\xce\x1ck\xaf\x1bSSS\xea\xd5v\xe7\xea\xd5k\xd8\xdb\xdb\x1b\xd5M\x95*U\xbc\xce\xf7\xba\x31\x8aK\xb2\x64\xc9(S\xca\x99\x83\a\xf\x1b\x95o\xda\xb2\xd3\xe8q\x95\xca\x15\x39r\xec\f\xb3\x66\xcf\xa3|\x19\x17\xc3\xb9\xe2\x62g\x97\t\xaf\x66MX\xb3z9\x19\xd2\xdb\xf0\xf3\xae=\xf1\xba>\x13Lx\xf2\x9a\x9f\x97\x89\x89)\xe1\xe1\xe1\xb1\xe3?t\xc8\xa8\xde\xe9\x33gp\xab\xe2J\xd2\xa4\xf1O\fEFF2v\xdc\x44\xae_\xff\x9d\x99\xdfM\xc3\xdc\xdc\xdcp\xcc\xd9\xb9(?\xef\xdc\x64\xf4\xd5\xbfwg\0\xd6\x7f\xbf\x88\xb5\xab\x97\0P\xbb\x66\r\xd6m\xd8\x8a\xbf\xbf\xbf\xa1\xed\xd1\x63\x31{\x1d\xbd\xd8/\xab\\\xf9\xb2<\fx\xcc\xe1\xc3G\fu\xfc\xfd\xef\xb3q\xf3\xej\xd4\xf8{\xa6\xd6\v\xf1\xbd\x8f\xdc\xdd\xaa\xe0s\xe0\x38s\xe7-\xc0\xadrY\xb2\x66\xc9\x12\xefk\x17\x11\x11\x11\x11\x11\x11\x11\x91\xc4G3\x86\x44\xe4\x9d\xd9\xd8\xa4\x65\xe1\xbc\x19x4nAn'G\x9azz\xbc\xbe\xd1K.\\\xf0%8(\x98\xe8\xe8h\x82\x83\x43X\xbbn\x3\xb5kT&O\x9e\xdc\x98\x99\x99\xd1\xc2\xcb\x83\xce]{3j\xe4`\xb2g\xcb\xc6\xed\xdbwH\x91\"9\xae\xae\xe5\xc9\x9e=\x1b\a\xc7Oc\xe5\xca\xd5\x38\xe4p`\xcb\x96\xad\x31\x31\xa5\xb3y\xeb\xeb\x31\x37\x8f\x99\xa9q\xf6\xec\x39\xd2\xa7OO\xb6lY\xdf\xa8\xbd\x85\x45JF\r\x1fH\xf7\xde\x83\x31\x33\x33\xa3\x98sQ\x82\x82\x83\xf9\xe3\x8f\x1bx5k\x12\xab~\xf7\xee\x9d\xa9T\xb5.#F~M\xdd\xbau0\x1\x8e\x1e;N\xdb\x36\xad\xe2\xb5\x1c\xda\x17_\x14\xfc\xd7\x31z\x95\xee\xdd:\xd3\xd0\xb3\x15Vi\xacpq)\x8e\xaf\xef\x45\0\"\x9e?7\xd4\xc9\x98\x31#^M\xea\xf1\xdd\xec\xc5,\x98\xf3m\x9c\xfd\x44\x44\x44\x30l\xf8(\xca\x94.E\xa6L\xb6\xdc\xbf\xff\x80\x8b\x97\xaf\xd2\xabg\xaex]\x9f\x83\x43\x36\x8e\x9f\xfc\x1f?\xef\xde\x83\x95\xa5%..\xb1\x93\x8a\x5\n\xe4\x63\xfb\xf6]\x94)S\x1a\x8b\x94)\xc9\x97//={t\xa5\x41\xa3\x96X[[S\xc2\xa5\x38\xbe\x17/1s\xf6\x62v\xed\xd8\xf4\xda\x31{!f\xa6\xd0\x4\x66\xceY\xc2\xf2\xc5\x33\xb9|\xe5\x8a\xe1\x98M\xda\xb4\xe4\xca\x95\x93L\x99l\x8d\xda<\t\r\x85ogS\xa4H\x11,-c\xf6\x98\xaaT\xa9\x2%K\x14\xa1\x63\xa7\xeet\xe8\xd0\x86'\xa1O\x18>j,\xc3\x87\xf6\x37\xcc\x8c\xca\x9a%\v}{u\xa4s\xb7\xbe\x8c\x1a>\x10+++\xe6-XD\xfd\xba\xd5pv.\x1a+\xb6\xf8\xdeG\x85\n}A\xf6\xac\x99X\xba\x62=\xf3\x66O\x8e\xf7\xb5\x8b\x88\x88\x88\x88\x88\x88\x88H\xe2\xa4\xc4\x90\x88\xbc\x17\x85\v\x15\xa4M\xab\xe6\xcc\x9a\xb3\x80\xe5K\xe6\xbcQ\xdbN]\xfb\x3\x31{\xe2\x38\x17-H5\xb7*xz62\xcc\x8a\x18;\xe6kV\xad^\xc3\xe2%\xcb\xf9\xed\xea\xef\x14+Z\x88\xafZ~\t@\x8d\x1a\xd5\x18\x31\xf4\x36\xb3\xe6,\xc0\xca\xca\x92\x66M\x1bS\xb1\xfc\xadw\xba\x16K\xcb\xd4\xcc\xf8v\f\xdfN\x9b\xc9\xa3G\x8f\xe9\xd7\xaf\xf7\x1b\xf7\xd1\xb0\x61\x3\xd2X\xa7\xe1\xfb\xef\xd7\x31\x65\xeaL\x9cr\xe5\xa0v\xed\x1aq\xd6\xcd\x9b'\xf\xbf\xfc\xfc#s\xe7-\xa0\x43\xc7\xee\xa4\xb5NC\xa5J\xe5\t\v\v\x8b\xf7>9\xff\x36\x46\xafR\xbe\\Y\xd6\xaeZ\xc0\xc2\x45K\xd9\xbam'5\xab\xbbQ\xb4p>RZ\xa4\x34\xaaW\xb9RE\xd6o\xdc\x86\xabk\xb9\x38\xfb\t\xf\xf'{\xf6l,Y\xb6\x2\xdf\x8b\xbf\x92+gv\xa6L\xfa\x86j\xd5\xdc\xe2u}U\xaaTf`\xbf\xae\f\x1a<\x92|y\x9d\x98\x93??\x16\xff\x88\xa1S\xc7v\x4\x6\x6\xd2\xa1\x63w\x1a\x35\xacK\xbe|y)[\xa6\x34\x9b\xd6/c\xe1\xa2\xa5\xacZ\xbd\x9e\x32\xa5]\xf8\xd9\xfb\a\xf2\xe6\xc9\x13\xaf\x31\x3\xb8}\xfb\xe\x33\xe7\xc4\xcc\xfai\xd1\xba\xab\xd1\xb1\xde=\xda\x33p@\xbfx\xf5\x93 e\xf9\xf3\x38\xe2{\xf9\xb7\x84\xe\x43\x44\x44\x44>\x92\xd4\x16\x31\xdb:\xdc\xf2{\xa0\x19\x43\"\xf2\xfe\x98\x98\x98()\xf4\x1f\x12\x12\x12\xc2\x92\xa5\xcb\xc9\xed\xe4\x44\x9a\x34V\xf8\xec\xdbOTT\x14U\xabV6\xd4y\xf8\xf0!\xcbV\xaeg\xfd\x9a%\t\x18\xa9\x88\x88\x88\x88\x88|\b\xde;w\x18=v\xafV=\x81\"\x11\x11\x11\x91\x8fI\x89!\x11\x91\x44*<\xfc\x39\xc1\xc1!\x8c\x9b\x30\x85\xc8\xc8H\xaaV\xa9\xc8\xfau+I\x9d:\xb5\xa1\xce\xee\xdd{I\x9f\xce\x9a\xe2\xc5\x9c\x13\x30R\x11\x11\x11\x11\x11\xf9\x10\x94\b\x12\x11\x11I\x9c\x94\x18\x12\x11I\xa4\xd2\xa6\xb5\x66\xf0\xa0\xfe\f\x1e\xd4\xff\x95u\x9a\x34iL\x93&\x8d?bT\"\"\"\"\"\"\"\"\"\xf2!\xc5\xbd\xdb\xb5\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88|v\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11I$\xb4\x94\x9c\x88\x88\x88\x88\x88\x88\x88H\"4{\xe6w\xb1\xca:w\xed\x96\0\x91\x88\x88\x88\xc8\xc7\xa4\xc4\x90\x88\x88\x88\x88\x88\x88\x88H\"\xa4$\x90\x88\x88H\xe2\xa4\xa5\xe4\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x12\t%\x86\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x12\t%\x86\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x12\t\xed\x31$\"\"\"\"\"\"\"\x92\by\xef\xdc\x61\xf4\xd8\xbdZ\xf5\x4\x8a\x44\x44\x44\x44>&%\x86\x44\x44\x44\x44\x44\x44\x44\x44>\x3\xd1\xd1\xd1\xec\xd8\xb1\x9d\xed\xdb\xb6\xe2\x7f\xef\x1eU\xdc\xdch\xd1\xb2\x15\xe6\xe6\xe6q\xd6W\"HDD$qRbHDDDDDDD\xe4\x33\xb0\x62\xf9\x32\x96,ZH\xef\xbe\xfdH\x9e<9\x8b\x16.\xc0\xf7\x82/S\xa7\xcf I\x92$\t\x1d\x9e\x88\x88\x88|\"\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\xf9\x8f{\xf8\xf0\x1\xdfN\x9e\xc4\xfc\x45\x8bqq)\x1@\xde|\xf9\xa8V\xb5\x32\xa7N\x9e\xc0\xa5\x44\xc9\x4\x8ePDDD>\x15\xa6\t\x1d\x80\x88\x88\x88\x88\x88\x88\x88\x88\xbc\x9b\xc3\x87\xe\x61\x63\x93\x96\xa2\x45\x9d\reY\xb2\x64\xa5\x8a\x9b;{\xf6\xecN\xc0\xc8\x44\x44\x44\xe4S\xa3\x19\x43\"\"\"\"\"\"\"\"\xffqw\xee\xdc\xc1)w\x1e\x92&5~\xab'\xb7Sn\xce\x9d;\x1bg\x9b\xfcy\x1c\xe3,\xf7\xbd\xfc\xdb{\x8fODDD>\x1dJ\f\x89\x88\x88\x88\x88\x88\x88\x88\xfc\xc7\xf9\xdf\xbb\x87\x95\x95U\xacrK+Kn\xdf\xba\x15g\x1b%\x80\x44\x44\x44\x12'-%'\"\"\"\"\"\"\"\xf2\x1fg\x93\xce\x86\xc0\xc0\xc0X\xe5!!!dwpH\x80\x88\x44\x44\x44\xe4S\xa5\xc4\x90\x88\x88\x88\x88\x88\x88\x88\xc8\x7f\x9c\x9d\x9d\x1d\x97.]$<<\xdc\xa8\xfc\xc6\x1f\x7f\xe0\xe0\x90#\x81\xa2\x12\x11\x11\x91O\x91\x12\x43\"\"\"\"\"\"\"\"\xffq%K\x95&0 \x80\x13\xc7\x8f\x1b\xca\x1e 5\xda\x63HDDDDDDD\xe4?\xce\xde>3\x9d\xbate\xe0\x80\xbe\xf4\xeb?\x10KKK\x96/[J\x8d\x9a\xb5(T\xa8pB\x87'\"\"\"\x9f\x10%\x86\x44\x44\x44\x44\x44\x44\x44\x44>\x3\x9d\xbbt\xc3\xd6\x36\x13\x9b\x7f\xd8\x44X\xd8S\xaa\xbaU\xc3\xcb\xebKLM\xe3^0\xc6{\xe7\xe\xa3\xc7\xee\xd5\xaa\x7f\x8c\x30\x45\x44\x44$\x81)1$\"\"\"\"\"\"\"\xf2\x19\x30\x35\x35\xa5\x61\xa3\xc6\x34l\xd4\x38^\xf5\x95\b\x12\x11\x11I\x9c\xb4\xc7\x90\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88H\"\xa1\xc4\x90\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88H\"\xa1\xc4\x90\x88|p\x91\x91\x91<}\xfa\x34\xa1\xc3\x10\x11\x11\x11\x11\x11\x11\x11\x11\x11I\xf4\x94\x18\x12\x91\xf*0\xf0\x11.\xa5+\xb3g\xef\xfeX\xc7.]\xbaL\x6;G\xc3W\x89R\x15\xe8\xde\xa3\x37'O\x9eJ\x80H\xdf\x8e\xbf\xbf?\x19\xec\x1c\r1\xfb\xf9\xf9Q\xb3v\x3N\x9c\x38\x99\xa0q\xadX\xb9\x8aRe*&h\f\"\"\"\"\"\xf2i\x9b=\xf3\xbbX_\"\"\"\xf2\xf9K\x9a\xd0\x1\x88\xc8\xe7\xad\xff\xa0\x11\x14w.B\xad\x9a\xee\xaf\xac\x33k\xfax\xb2\x66\xcd\xc2\x93'O\xd8\xb3\xd7\x87\x1au\x9a\xb0k\xfb\x6\n\x17.\xf4\x11#}?\xa2\xa3\xa3\x89\x8e\x8aJ\xe8\x30\x44\x44\x44\x44\x44\x44^\xabs\xd7n\t\x1d\x82\x88\x88\x88$\0%\x86\x44\xe4\x83\xd9\xf6\x93\x37'N\x9c\x66\xbf\xcf\xf6\x7f\xad\xf7\x45\xa1\x82\xe4vr\x2\xc0\xd5\xb5<;\xbd\xf7p\xf4\xe8\xb1\xff\x64\x62\xc8\xde\xde\x9e\xed?mN\xe8\x30\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\xe2\xa4\xc4\x90\x88|\x10\xe1\xe1\xe1\x8c\xf8z\x1c\xa3\x46\xe\xc2\xca\xd2\x32\xde\xed\x9e m\x12\xa5J\x96\xa0v}/\xce_\xf0}\xe9\x1c\r\x1\f\xe7\x38p\xe8\xa4\xd1\x39\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44@3\x86\x44\xe4\x3x\xfa\xf4)\xb3\xe6,d\xcd\xaa\x45\xf1\xaa\xbf\xc3\xdb\x87\x1d\xde>\x86\xc7\x97\xae\\g\xdd\xfa\x8dx5k\xc2\xd1\x63\xc7\xd9w\xe0(\x97.\x9c e\xca\x94\x94*Y\x82\xb0g\xcfX\xbc\x64\x39\xcd\x9az\xe2\xe4\xe4\xc8\xa8Q\xc3\rm\xf3\xe6\xcd\xcb\xd2\x15\xeb\xb9x\xf1\"\xae\xae\xe5\r\xe5\xd3\xa7M&u\xea\xd4\0\\\xbdz\x8d\x5\x8bW3p@?\0*V\xac\x80\xcf\xfe\x83\xf8\xec\xdb\x8f\x9b[\x15\xa3\xd8R\xa4H\xce\xc4\tc\r\x8f]\xcb\x97\x63\xebO;9z\xec\x38\xa5J\x95|\xed\xb5m\xdc\xb4\x19;;[F\x7f\x33\x92$I\x92\0\xb0{\x8f\xfG\x8e\x9e\x34\xd4\xc9\x9f\x37\x17%\\\x9ci\xd6\xd4\x13\x80\x2\x5\n\xf0\xfd\xba\x1f\x39{\xf6\x1c\x99\x32\xd9\xb2v\xddzJ\x95(F\xc7\xe\xed\0(U\xb2\x4g\xce\x9e\x63\xe7\xeo\n\x16\xc8\x1f\xafs\x88\x88\x88\x88\x88\x88\xfc\x93\xf7\xce\x1d\x46\x8f\xdd\xab\xc5\xbd\x32\xc2\xfb\x94?\x8f#\xbe\x97\x7f\xfb\xe0\xe7\xf9\\i\xfc\xde\x9e\xc6\xee\xddh\xfc\xde\x9e\xc6\xee\xddh\xfc>\f\xcd\x18\x12\x91w\xe2\xef\xff\x80\xc9\xdf\xce$,,\xccP\xb6|\xe5Z\n}Q\x80\xc2\x85\n\xc6\xab\x8f\x3>?q\xdf\xef\x37\xee\xfb\xfd\xc6\x15\xdf\xe3tl\xf7%\xbd\xfa\xe\xe3\xf6\xed\xdb\\\xfd\xed*O\xc3\xc2\xc9\x9e\xab\x10\x19\xec\x1c\xc9`\xe7H\xbf\x81\xa3\xb8v\xfd\xa6\xa1\xbd\xaf\xef\x45&O\x99\x86G\xa3\xa6\x94,S\x19\x80\xa7/\xc5\x3\x18-\x11\x97;\xb7\x13\x39\x1d\x32\x1b\x1d/\\\xe8\v\x2\x3\x1f\xc5\x19\xdf\xbd{\xfe\x86\x19M\x95\xaa\xd4\xe0\xc4\xa9\xf3\x84\x86>\x89\xd7\xb5\x9d?\x7f\x1\xd7re\f\t\x1b\x80*\x95+`\x93\x36\x8d\xe1\xb1Y\xd2\xa4\x38\xe6\xcaix\x9c\x31\x63\x6\xd2Z[\x12\x14\x1c\f\xc0\xb9s\xe7\xd9\xb2\xedg\xc3\xf5g\xb0sd\xf3\xd6]\x4>z\x14\xefs\x88\x88\x88\x88\x88\x88\xfc\x93{\xb5\xea\x46_\x2\xb3g~\x97\xd0!\xfcgi\xec\xde\x8d\xc6\xef\xedi\xec\xde\x8d\xc6\xef\xdd\xfcW\xc7O\x89!\x11y'\x16\x16)\xf1\xde\xb5\x87\xae=\xfa\x13\x1d\x1dMTT\x14\xf3\x17.\xa5g\xf7No\xd5\x9f\xb5\xb5\x35\xed\xdb\xb5\x1\x62\x66\xf6\xa4J\x9d\n\x80\xe3Gvs\xfa\xf8/\x86\xaf\x83\xfbv\x2p\xea\xf4\x19j\xd5\xf5$gN\a&M\x18\xcb\xfe_b>\xf1\x16\x1a\x1a\xfa\xcas\x98\x98\xc4U\x16G!\x10\x18\x18H\xdd\xfa\x9e\x4\x5\a3xp\x7f\xd6\xac^J\x92$\xa6\\\xbe|%^\xd7\xf3\xecY8\x11\x91\x11\xf1\xaa\xfb\xb2\x97\x13Y\xd6\xd6i\xc8\x9f\x37\x97\xd1\xf5\x9f>\xfe\v}z\xf7|\xa7s\x88\x88\x88\x88\x88\x88\xfc\xd3?g\x11\xbd\xef\xe3\t}~\xc5\xf7\xea\xe3\x9frl\xef\xe3\xf8\xeb(\xbe\xcf\x37\xbeO9\xb6\x8fq~\xc5\xa7{/.J\f\x89\xc8;I\x95\xca\x82\x35\xab\x16q\xf6\xdcy\xe6-X\xca\xbe\xfd\x87\xb0\xb0\xb0\xa0T\xc9\xe2o\xdd\xe7\x8b\xa4\x88\x8d\x8d\r\x8e\xb9r\x1p\xdf\xff>\x99\x33g6|\xd9\xdb\xdb\x3p\xe8\xe0\x61\x8a\x14\xcaO\xfdzu\xc9\x91\xc3\x81\xf4\xe9\xd3\x1\x10\xf6\x34,\xee\xce\xdf\x90\xaf\xef%~\xbfq\x87\x96-\x9a\x93\x37O\x1e\x32\x66\xccHdd\x14\xbb\xf6\x1c\x8cW\xfb\x2\x5\xf2\xb1\xeb\xe7_\b\xf\xf\x37\x94\x9d\x39s\x8e\xd0'O\xe3\x1d\xc3\x17\x5\vp\xc7\xef\x1e\x16\x16\xa9\x8c\xc6 ]:\x9b\xf7v\xe\x11\x11\x11\x11\x11\x11\x11\x11\x11I\x1c\xb4\xc7\x90\x88\xbc\x33\x1b\x9b\xb4,\x9c\x37\x3\x8f\xc6-\xc8\xed\xe4HSO\x8f\x37j\x7f\xe1\x82/\xc1\x41\xc1\x44GG\x13\x1c\x1c\xc2\xdau\x1b\xa8]\xa3\x32y\xf2\xe4\xc6\xcc\xcc\x8c\x16^\x1et\xee\xda\x9bQ#\a\x93=[6n\xdf\xbe\x43\x8a\x14\xc9qu-O\xf6\xec\xd9\x38\x38~\x1a+W\xae\xc6!\x87\x3[\xb6l\x8d\x89\xe9\xaf\xa4\xc9\xbb\xb2\xb7\xb7\x3`\xd6\xec\xb9T\xaaT\x81_\x7f\x8dY\xd3\xb4\xcdWM\0\x30\x37O\t\xc0\xd9\xb3\xe7H\x9f>=)R$7j\xdf\xd0\xa3>\xd3\xbf\x9bG\x9f\xbe\x3h\xd4\xb0\x1\x1\x1\x81\xac\xfc\xfe\x87\x37\x8a\xa1^\xbd:\xcc_\xb8\x94N\x9d\xbb\xd3\xb5kG\xac\xac\xac\xb8\xe8{\x91\xe2\xc5\x8b\x91#\x87\x3\r=\xea\x33u\xfa\x9cw:\x87\x88\x88\x88\x88\x88\x88\x88\x88\x88$\xe\x9a\x31$\"\xef\x45\xe1\x42\x5i\xd3\xaa\x39\xe7\xfew\x9e\x46\x1eu\xdf\xa8m\xa7\xae\xfd\xa9Q\xa7\t\x8d\x9b\xb6\x62\xf6\xdc\xf9\x14/V\x94iS'aff\x6\xc0\xd8\x31_\xd3\xa5s;\x16/YN\xd3/[\xb3v\xdd\x6\xc3\xd2o5jTc\xc4\xd0>\xcc\x9a\xb3\x80oF\x8f\xa7@\x81\xfcT,_\xf2\xbd]W\x8e\x1c\xe,_2\x8b\x43\x87\x8f\xd2\xb7\xdf`\xee\xdd\xbbG\xf7.m\xb0\xb0\xb0\0\xc0\xd2\x32\x35\x33\xbe\x1d\xc3\xfc\x85KY\xb7nC\xac\xf6\x19\x33\x66\x64\xfb\xd6\x98\xf2~\x3\x86q\xf2\xd4i\x1a{\xd4\xa4`>\xc7x\xc7\x90*U*~\xd8\xf8=\x5\v\xe6g\xc4\x88\xd1\xb4\xef\xd0\x95\x13'O\x11\x1d\x1d\x65\x38\xc7\xce\x9f\x36\x19\x9d\x63\xc2\xd8\x61\xb1\xf6Q\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x31\xb9r\xcd/:\x8b]z\0n\xf9=\xc0)G\xa6\x4\xeID\xde\x97\xa7\x61\x31\xfb\xce\xdc\xf2{\xc0\x8b\xe7\xf9\xab\xbc\\\xe7m\x7f\x17\x44GG\x13\x16\x16\x86\xb9\xb9\xf9\x9b\a\x9b\x88\x8c\x19;\x81\xa0\xa0 &\x8c\x1f\x93\xd0\xa1\x88\x88\x88\x88\x88\xfc\xa7\xfdz\xfd\xae\xd1\xeb\x98\x37y\xdd\x13\x1c\x1a\xf2\xc1\xe3\xfb\x94\xe5\xcf\x13\xff\xf\xab\x89\x88\x88\xc8\x7f\x8b\xef\xe5\xdf\x62\x95\xa5\xb6\x88\xd9\xcb\xfd\x96\xdf\x3-%'\"\xef\x8f\x89\x89\x89\x92\x42qX\xb2t9i\xad\xad\xb1\xb3\xcb\xc4\xf5\xeb\xbf\xb3p\xf1J\xb6o[\x9f\xd0\x61\x89\x88\x88\x88\x88H\"\x16\xd7\x1b\x46\"\"\"\x92\x38(1$\"\xf2\x1\x45GG\x13\x19\x11\xc1\xe2\xa5+\xb8u\xeb\xe\x65\xcb\x94`\xdb\x8fk\xc9\x9b'OB\x87&\"\"\"\"\"\"\"\"\"\x89\x90\x12\x43\"\"\x1f\x90\x89\x89\tm\xdb\xb6\xa6m\xdb\xd6\t\x1d\x8a\x88\x88\x88\x88\x88\x88\x88\x88\x88\b\xa6\t\x1d\x80\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88|\x1c\x9a\x31$\"\"\"\"\"\"\"\"\xef\xdd\xf3\xe7\xcf\xf9\x61\xd3\x6\x8e\x1c>\xcc\xff\xce\x9d%_\xfe\x2\xd4\xaa]\a\xf7j\xd5_\xd9\xe6\xd7_\xaf\xb0y\xd3&\x8e\x1e=L\x12\xd3$\x94)[\x8e&M\x9b\x61\x9b)\xd3G\x8c\xfc\xd3\xf0\xb6\x63\x11\x11\x11\x41\x8fn]\x88\x8a\x8a\x62\xce\xbc\x5\x1f)\xdaOO|\xc7/::\x9a\x83\a\xe\xb0k\xd7NN\x1c;\x8a}\xe6,\xd4o\xe0\x41\xf5\x1a\x35I\x92$I\x2\x45\x9f\xb0\xde\xf4\xde\xf3\xf7\xbf\xc7\xb2%K8x`?\xf9\xf2\xe7\xa7\xb1gS\x8a:;\x7f\xe4\xa8\x13\xde\xcd\x9b\x37\xa8\xeeV%Vy\x87N\x9d\xe9\xde\xa3W\x9cm\xfc\xfc\xee\xb0|\xd9R\xe\xec\xdb\x87\xa5\xa5%n\xd5\xaa\xd3\xd8\xd3\x13\v\x8bT\x1f:\xdcO\xce\x84\xf1\x63Y\xbetI\xac\xf2=>\a\xb0\xb5\xb5\x8d\xb3\xcd\xdb\xfc\x9d\x91\x18J\f\x89\x88\x88\x88\x88\x88\x88\x88\xc8{\xf5\xe4\xc9\x13\x6\xf4\xeb\x43HH\bu\xeb\xd5\xa7\x81G#\xee\xde\xf5\xe3\xde\xdd\xbb\xafls`\xff~zv\xef\x42\x9b\xb6\xed\xe9\xd6\xbd'QQQ\x9c:y\x92\x88\xc8\xc8\x8f\x18\xf9\xa7\xe1]\xc6\x62\xdd\xda\x35\xf8\xfc\xb2\x97\xf2\xae\x15>|\xa0\x9f\xa8\x37\x19\xbf]\xde;\xf9n\xc6\x34\x9a\xb7\xf8\x8a\n\x15*r\xea\xe4I\x6\xf4\xeb\x43xx8\r<\x1a&@\xf4\t\xebM\xef\xbd\xfb\xf7\xef\xd3\xa6UK\\\\J\xd2\xb7\xff\0\xce\x9d;\xcbW-\xbcX\xb2l\x5\xce\xc5\x8a\x7f\xe4\xe8\x13\xd6\xb3\xb0g\0|;m\x6\xe9\xd3g0\x94[\xa7\xb5\x8e\xb3\xfe\x9f\x7f>\xa6}\xdb\xd6\x14+\xe6\xc2\xc0\xc1\x43\xf0\xf7\xf7g\xe5\x8a\xe5\\\xbbv\x95\xd1\x63\xc6}\x94\x98?%\xa1\xa1\xa1\xd4\xacU\x9b&M\xbd\x8c\xca\xd3\xa4I\x13g\xfd\xb7\xf9;#\x7fSbHDDDDDDDD\xde\xab\x1d\xdb\xb7\x11\x12\x12\xc2\xec\xb9\xf3\x31\x37\x37\x7fm\xfd\xd0\xd0\x10\x46\x8d\x1c\xc6\xe4o\xa7Q\xb1ReCy\xe5*U?d\x98\x9f\xa4w\x19\x8b\xcb\x97.1k\xe6\f\xea\xd4\xad\xc7\xe3\xc7\x8f?d\x98\x9f\xac\x37\x1d\xbfR\xa5\xcbP\xae\xbc+)S\xa6\x34\xd4\x33Kf\xc6\xda\x35\xdf'\xba\xc4\xd0\xdb\xdc{?l\xda@\xd6\xac\xd9\x18\x32l8I\x92$\xa1\xbck\x5\x9e\x85=c\xf6\xac\x99,\\\xbc\x14\x13\x13\x93\x8f\x11\xfa'\xe1\xd9\xb3\x98\xc4\x90s\xb1\x62\xa4K\x97\xfe\xb5\xf5\xcf\x9d=\xcb\xef\xd7\xaf\xb3\xea\xfbuXYY\x1`goO\xbb\xd6_1p\xe0`R\xa5N\xfd\x41\xe3\xfd\xd4\x84\x86\x84\x90\xcb\xd1)\xde\xb3\xcd\xde\xf4\xef\x8c\x18\xd3\x1e\x43\"\xf2\xcez\xf5\xeeG\x6;G2\xd8\x39\x92)Kn\xea\x37\xf0\x64\xd4\xa8\xd1\\\xbat\xd9\xa8\xde\xc1\x83\x87\xa8U\xc7\x83\a\xf\x1e\xbe\xf3\x39\xfd\xfd\xfd\xc9`\xe7\xc8\xc9\x93\xa7\xde\xb9\xafOUxx8\x8f\x1f?&***^\xf5\xa3\xa2\xa2\f?\x87\fv\x8e\xe4+X\x9c/\x9b\xb7\x62\xcb\x96\xad\xf1\xee\xe3\x43;}\xfa\f\x19\xec\x1c\xf9\x61\xf3\x16\xa3\xf2\x80\x80\0\xbe(R\x92\xe9\xd3g\xbe\xf3\x39N\x9d:M\x8f\x9e}(U\xa6\"C\x86\x8e\xe0\xf6\xed;\xffZ\xff\xf9\xf3\xe7l\xdd\xf6\x13\x45\x8b\x95\x61\xef^\x9fw>\xff\v~~~\xd4\xac\xdd\x80\x13'N\xbe\xb7>?\xa6\x97\x9f\xd7\xd9r\xe4\xa7~\x3O\xe6\xcd_HPPpB\x87\x6\xc0\x83\a\xf\xc9W\xb0\x38S\xbe\x9d\x16\xeb\xd8\xe1\xc3G\xc8`\xe7\xc8\xb9\xff\x9d\x7f\xa7s\xbc\xc9\xbd\xf4\xf4\xe9Sv\xec\xf0\xa6{\x8f\xde\x94*S\x11\x37\xf7\xdaL\x9d\x36\x83G\x8f\xde\xdf\x8b\xf1\x88\x88HZ\xb7\xe9\xc0\xb2\x65+\xde[\x9f\"\"\"\"\x1f\x42TT\x14\x33g\xcc\xa0i3\xafx\xbfYw`\xff~\x92'KN\xb9\xf2\xae\x1f\x38\xbaO\xdf\xdb\x8e\x45hh(#\x86\xf\x65\xf8\x88Q\xe4\xc9\x93\xf7\x3\x45\xf7\xe9{\xd3\xf1\xb3\xb4\xb4\x34$\x85^\xc8\x90!#\xa1\xa1!\x1f\"\xbcO\xda\x9b\x8e]DD\x4\x8b\x17.\xa4V\xed:F\xcb\xee\xb9\xb9W\xe3\xe8\x91\xc3\xdc\xbcq\xe3\x43\x85\xfaI\n{\x16\x6@\xb2\x64\xc9\xe3U\xdf\xdc<\xe6\xbe{\xf8\xe0\x81\xa1\xec\xcf\xc7\x8f\xc9\xe5\xe8HJ\v\x8b\xf7\x1f\xe0'.88\x98\x94\xf1\xfc\x9b\xf1\x36\x7fg\xc4\x98\x12\x43\"\xf2^\xb8U.\xcb\x96\x8d+X\xbf\x66\t^\xcd \x1d_\x8f\x18\xc4\x84\xc9\xb3\xb8v\xed\x9a\xa1\xfc\xf9\xf3\xe7\x8c\x19\x37\x89N\xed\x9aS\xe8\x8b\x82o\xdd\xff\x9b\xdcK\0\xb7o\xdf\x61\xce\xdc\x5\x14/\xee\xcc\x98oF\xd0\xb4i#vz\xef\xa6[\xf7^DD$\xbe\xa5ODDD$q{\xf4\xe8\x11\xf7\xef\xfb\x63ii\xc9\x82ys\xa9[\xbb\x6_6k\xc2\xf\x9b\x36\x12\xf9\x8a\xe5\xa8n\xde\xb8\x41\xfe\x2\x5\x38\xff\xbfst\xef\xda\x85*\x95\\\x19\x36t0\xb7n\xde\xfc\xc8\xd1'\xbc\xb7\x1d\x8b\xf9\xf3\xe6\xe0\xe8\xe4\x84\x9b{\xb5\x8f\x14\xe9\xa7\xe9}\xdcK\xa7N\x9e\xa0R\xe5\xd8{\xc5|\xee\xdet\xec\x1e?~DHH0\xb6\xb6\xc6{\xf\x65\xfak/\xa2\x87\xf\x1f\xc4\xd5\xec\xb3\xf5,,&1\xd4\xd8\xa3\x1eU*\xb9\xd2\xb7wO\x8e\x1c>\xfc\xca\xf7\xc2\x8a\x14-J}\x8f\x86t\xef\xda\x99\x8d\x1b\xd6\x31\x7f\xee\x1cV,_\xca\xb8\xf1\x13\x31\x35M|o\xdb\a\x4\x4\x30q\xc2\x38*W(G\v\xaf\xa6\xcc\x9d\x33\x8b\xc0\xc0\xc0\x38\xeb\xbe\xcd\xdf\x19\x31\xa6\xa5\xe4\x44\xe4\xbd\xc8\x94\xc9\x96R\xa5J\x1a\x1e{x\xd4\xc7\xc5\xa5\x18}\a\x8c\xa0x1g\x9c\x9c\x1c)W\xae\f\xe5\xca\x95I\xc0(\x13\x87\\\xb9rR\xc2%f\x1d\xdfr\xe5\xcap\xf3\xe6-\xb6o\xf7\xa6\x45s\xaf\xd7\xb4\xfc\x38:uj\xcf\xb6\xed\xdeL\x9e\x32\x8d\x89\x13\xc6r\xf8\xf0\x11\x16,^\x8d\xf7\xf6\r\xb1>\xa5\xf5&\xa2\xa2\xa2\x98\x30\xf1[\x6\xf6\xefN\x97\xce\x1d\x1(W\xb6\f\xf5\x1ax\xb2~\xc3\x46\xbau\xedlT\xff\xf1\xe3?\x19\x32\xeck:\xb6o\xcd\xd2\xc5\xf3\xc9_\xa8\xd4;]\xd7?\xd9\xdb\xdb\xb3\xfd\xa7\xcd\xef\xb5\xcf\x8f\xcd\xd6\x36\xa3\xe1^\x2H\x96,\x19m;\xf4\x62\xe2\x84 \xac\xac,\x13\x30\xb2\x18u\xeb\xd6\x66\xf5\xf7\xeb\x98\x38i*s\xe7|\x87\x89\x89\t[\xb7\xfe\xc4oW\x7fg\xc9\xa2\xb9o\xdd\xef\x9b\xdeK\x10\xf3\xbc\xdb\xb2y\xbd\xd1\x32\t\xa5K\x95\xa4\\\xc5\x9a\xdc\xb8\xf1\a9s\xe6|\xebx^H\x9a\x34\t\x8b\x17\xcd{\xe7~DDDD>\xb4\xc0\x80\0\0\xda\xb4jI\xd7\xee=\x19\x34x(w\xef\xde\x65\xe2\xf8qDDD\xd0\xa8\xb1g\xac\x36\xb7\xef\xdc\xe6\xa7m[\t\n\n\xa2V\xed:4\xf3\xf2\x62\xf3\xf\x9bh\xd7\x12l]9\0\0 \0IDAT\xe6+\xd6m\xdc\x8c\xa5\x65\xc2\xff\xff\xf9\xb1\xbc\xcdX\x1c>|\x88m?na\xdd\xc6\x1f\x12\xd5\xd2]qy\xd7{\xe9\xc4\xf1\xe3\xec\xdd\xb3\x87\xed\xde\xbb>N\xc0\x9f\x90\x37\x1d\xbb\x17\xcb\x15\xfes\xc6\x46J\x8b\x98\xd7\xf6o\xfa\x41\xd7\xff\xba\xf4\xe9\x33\x30v\xfc\x44\x32\x64\xc8HTT$'O\x9c\xa0m\xeb\x96L\x9c\xfc-5k\xd5\x8eU?i\xd2\xa4\xb4m\xdb\x9e\x9a\x1b\xdd\x18>t\b\0_\x8f\x1e\x8bS\xee<\x1f;\xf4OB\xd3\x66^X[[cii\x85\xbf\xff=V,_\xc6\xde=\xbbY\xb2l\x5\x16\x16\xa9\x8c\xea\xbe\xcd\xdf\x19\x31\xa6\xc4\x90\x88|\x10&&&4\xf1l\xcc\xcaUkY\xbf\x61\x13\x43\x6\xf`\xef^\x1f\x9a|\xd9\x8e\xdf\x7f;\x8b\x85\x85\x5\x1\x1\x1,\\\xb4\x84\x9d\xde{\b\b|D\xa9\x12\xc5\x18:d Y\xb2\x64\x66\xf2\xe4\xa9<\x8fxN*\v\v\xb6m\xf7\xc6\"eJZ\xb6\xf0\xa2N\x9dZq\xfe\x93\xfb\xf4\xe9S6o\xf9\x91\xed\xdb\xbd\x39w\xfe\"N\x8e\x39h\xd5\xb2\x39\x35kV7\xd4y\xf4\xe8\x11s\xe7-`\xa7\xf7\x1eLMM\xa9Y\xdd\x8d\xde\xbd{`jj\xca\xad[\xb7\x99\x39k\xe\xbf\xf8\x1c OnG\xbat\xee@\x89\x12.\0\xec\xdd\xeb\xc3\x94\xa9\x33\xf0l\xec\xc1\xf6\xed\xde\xdc\xbe\xe3G\x13O\xf\x9a\x36i\xcc\x9a\xb5\xeb\xd9\xb1\xf3g\x9e?\x7fN\xab\x96_\xd2\xb8qC\xc3\xa7:BBBX\xb0p1\xdb\xb6\xed$U\xeaT4k\xda\x98\x86\x1e\xf5I\x92$\t\xfe\xfe\xfe\x38\xbbT`\xca\xa4o\xd8\xb7\xff\0\xc7\x8f\x9f\xa6\x82k\x19z\xf7\xea\x81\x9d]&\x8e\x1d?A]\x8f\xe6\0\x38\xe5\x8byc\xfe\xea\xe5\xd3\xf8^\xbc\xc8\x98\xb1\x13\xf9n\xfa\x64\x1c\x1c\x1c\xe2\xf5\xb3\xb8s\xc7\xf\x17\x17\xe3\xf5Y\x8f\x1d?\xc1\xc2\x85K8s\xf6<\x15\\\xcb\xd0\xbd[g\xb2\x66\xcd\xfa\xdaq|\x11\xf7\xe4\t\xa3\xd8\xb7\xff 'N\x9e\xa1j\x95\nt\xef\xd6\x85#G\x8e\xb2\x65\xebO\xfc\xfa\x7f\xf6\xee:,\x8a\xf5\v\xe0\xf8w\x81\xa5U\x10\x4T\x14\v\v[D0Q\x14\xbb\xc0\xee\xee\xee\xee\xc4\xee.\xec\x8e{\xed\xc2\xb8\xf7zm\xc4\xee@\x14\x13\x11\xa5w\x7f\x7fp]]YB\x5\xfd\xdd\xeb\xf9<\x8f\xcf\xc3\xce\xbc\x33s\xe6uvvw\xce\xbcgn\xdd\xa1^\xdd\x9at\xed\xd2\tss\xf3x\xf1\x98\x9b\x9b\xe3\x33y\x1c\xb5\xea\x35\xa3|\xb9\xb2\xf8L\x9b\xc5\x90\x81=(Z\xa4\xb0\xa6\xcd\xf2\x15\xab\x38~\xfc$K\x16/\xc0\xd8\x38yC\xb0o\xde\xba\xc5\x1f\xa7/\xe0\xe3\x33\x41\x33\xcd\xd8\xd8\x98\x86\r\xbc\x98\x31k>\xdd\xbbu\xd1:v\xd2\xa7\xb7\xe4\xd8\x91}(\x95J\xa2\xa2\xa2\x12]\xf7\xb7\x1c\x3\xc1\xc1\xc1\x14,Z\x86\xbd\xbb\x37\xe2\xec\x1c\xd7\xff\xb7o\xdf\x61\xc1\xc2\xc5\x1c?\xf1'\xeY\xedi\xd3\xba\x5\xb5k\xd7\x64\xda\xb4\x99\xc4\xc4\xc6`gk\xcb\x86M[)T\xd0\x89\xa9>\x93P\xab\xd5\x1c \x8c\x1e\x39\x18\x1b\x9b\xb8m\xfc\x88\x63\t\xd0y^\xfaX_\xda\xd4\x34~\t\x80o=\xafxV\xa9\x45\xa3\x86^\xb4k\xd7\x6H\xf8\xbc\xe6\xe7w\x82)Sg0x`_V\xac\xf4%\xf0\xc9S~\xdb\xb5\x5sss\xae]\xbb\xce\xe2%\xcb\xf8\xe3\xcf\x33\x14)\\\x80\xe\xed\xdbh\xfe\xcf\x92:7\x1\x89\x9e\xbb\x85\x10\x42\b\xf1k\t\r\r\xe5\xd9\x33\xed\x87|g\xcd\xea\x80\xc9?\xdf\x45k\xd6\xaaM\x97\xae\xdd\x34\xf3\xa2\xa3\xa3X\xbax\x11\xf5\x1b\x34\x8c\xf7\xfd)]\xda\xb8\xe7k\xcc\x98\x35G\xf3]\xb6P\xe1\"x\xb8\x97\xe3\xcc\xdf\xa7\xa9T\xd9\x33\x35w\xe5\x87\x8b\x8e\x8e\xe6\xfe\xfd{Z\xd3\x32Xg\xc0\x32}\xfa\xaf\xee\x8bW\xaf^2r\xf8P\xc6\x8e\x9f\x88\x95\x95\x35\0j\xfe\xfb\xd5:\xee\xdf\xbbGtL\xb4\xe6\xb5\x99\x99\x19\x99\x33\xdb\x7f\xd7\xb1\xf4\xec\xe9SF\f\x1b\xcc\x64\x9f\xa9\x64\xca\x94\x39uw\xe0'I\xc9\x63/\xcd?\xcf\xc0y\xff\xe1\xbd\xd6\xf4\xf0\xf0\xb8\x91\x33\x16\x96\x96\xa9\xb2\xf?Sb\xfd\x97;O\x1er\xe7\xc9\xa3\x99^\xbaLY\x14z\n\xa6\xf9L\xa1Z\xf5\x1a\xf1\x46\x1\xdd\xbcy\x83\xe6M\x1a\x31~\xe2\x64\xdc+T\xe4\xee\x9d\xdb\xcc\x9d\x33\x8b\x3\xfb\xf7\x31s\xf6\x9cx\xc9\x90\xff\x82g\xcf\x9e\x11\x1a\xfaV\xf3Z\x81\x2\xc7\xdc\xb9\x1\xa8\xdf\xa0\xa1V[\xe7\x12.x\xb8\x97\xe5\xd4\xc9\x93T\xa9ZMk\xde\xb7|\xce\bm\x92\x18\x12\x42\xa4\x1a\xa5RI)\xb7\x92\x4\x4\\\xd5\x39\xbfo\xff\xc1(\x14\nF\x8f\x1c\x82Z\xad\xe6\xd6\xed;\x9a\x87\xed\x1\xcc\x9c\xb3\x94\xde=:0tp\x7fn\xde\xbaM\xe7\xee\xfdQ\xe8)\xa8]\xab\x66\xbcu)\x14z\\\xbc\xe8O\xe5\xca\x1e\xb4k\xd7\x9a\x1b\xd7o\xd0\xa6\x43Ovm[\x83\x9b\x9b+\x1f>|\xa0\x41\xa3\xe6\x14+Z\x98\xb1\xa3\x87\x11\x15\x1d\xcd\x83\a\xf\xd1\xd3\xd3\xe3\xc5\x8b\x97T\xab\xe9\x45\xf7\xae\x1d\xa8[\xb7\x36\x97.\xfaS\xab^3\x8e\x1c\xdcI\xc1\x2N\0\x9c=\x1f\x80\xadM\x6:\xb4o\xcd\xa3\xc7\x81L\x9a\x32\x93\xb1\x13\x66\xd0\xb7WG\xfa\xf5\xe9\xc1\x95+W\xe9\xd9w\x18\xe9\xd3\xa7\xc7\xd3\xb3\x12\xb1\xb1\xb1t\xed\xd6\v;;[\xc6\x8f\x1f\xc5\xa3\x87\x8f\x98\x35{>\xb1\xb1\xb1\x34m\x12w\xd7\x42Tt\f=z\xf\x61\xd9\xe2\x99T\xab\xea\xc9\x8a\x15\xbet\xef\xd1\x87\xcd\x9b\xd6\x91/o\x1e\x86\f\xec\xc1$\x9f\xb9l\xd9\xb0\x1c+++LMMy\x1a\xf4\x94\xf3\x17\xaf\xf0\xfa\xf5\x9b\x4\x13\x43]{\f\xe2m\xc8[\x1e>z\xc4\xa2\xa5k\x1\xf0\x99\xf2\xe9\x2\xf7_\xa7\xff\xa6S\x97^\x8c\x1b=\x8c\x16-\x9a\xb2w\xef~\x9a\x34k\xc3\xde\xdfw`dd\x94h?~\x8c\xbbg\xdf\x61\xacX2\x1bOO\xf\x16-^N\xe1\xe2\x65\xf1\xaaS\x95\x66M\x1a\xf1\xea\xf5+f\xce\x9aOLL,C\x87\f\xd4\x19\x63\xc9\x92.\xf4\xe8\xda\x96\x36\x1dzb\xa8\x34\xa0\x63\x87\xf6Z\xf3o\xdd\xba\xcd\x85K\x1\x44\x46\x46$\xfb\x62~\xf0?%\xbelml\xb5\xa6gsp\xe0\xf9\x8b\x37\x84\x86\xbe\x8b\x37\xca\xe5k\x92#_{\f|\xe9\xf6\xed;xV\xabG\xff\xbe\xdd\xf0\xf6\xae\xc7\xebW\xaf\xb5\xb6?c\xf6\x12\xbc\xeaT\xa5\x43\xfb\xd6\xd8\xd9\xd9\x1\xb0y\xcb\x36\xa6\xf8\xcc\x64\xc4\xf0\x81\xa4k\x91\x8e\r\x1b\x37S\xad\xa6\x17~G\xf6\x62mm\xad\x89\xcb*\xbd%\xed\xda\xb4\xe2\xe9\xb3\xa7L\x9f\x31\x1f\xb5ZM\xdf>\xbdx\xf3&\x4\xef\x6\xcdi\xdc\xd0\x8b\xb9s\xa6\x11\xf2&\x84\x17/_&k\xbf\xa3\xa3\xa3Y\xb7q'y\xf3\xe4\xe6\x43x8\xe3&\xce\x4`\xef\xee\x8d\x9a/WI\xbdw\x2\x3\x3I\x9b&-}zwG__\x9f\x45\x8b\x97\xd1\xb3W?6n\xf0\x45\xa1Pp)\xe0\x6\x97\x2n0g\xc6\x4<<*\xb0u\xeb\xe*z\xd6\x5`\xf1\x82iT\xae\xec\xc1\xea\xd5k\xe9\xdc\xb9\a\xbbvn\xd1\x19w\xe1\xc2\x85\xe8\xd6\xb9\x35\x63\xc7O\xa6\x62\x85\xf2\x64\xcah\x83\xb7W]\xcd\xfc\x1fu,}\xf4\xf8q O\x9e<\xe1\xf1\xe3@\xe6\xce_\xcc\x84\xb1\x43\xc8\x98\xd1Ng\xdb\xef=\xa6\x12;\xaf\x1\\\xf4\xbf\xce\xf8\t>\xb4n\xdd\fsss\xcc\xcd\xcd\xb9z\xed\x1aU\xaay3bX?\xbc\xbd\xebq\xea\xd4\x9f\xd4\xaa\xd7\x8c\xdd\xdb\xd7\xe2\xeaZ\x12H\xfc\xdc\x64`\xa0\x9f\xe4\xb9[\b!\x84\x10\xbf\x8e+W\x2\xe8\xd0\xb6\xb5\xd6\xb4\xdf\xf7\x1d\xc0\xd6\x36\xee\xfb\x8f{\x85\x8aZ\xf3\x32g\xb6\xe7\xc9\x93@\"##166\xd6\x9ag\x97\x31#\xfa\xfa\xfaZ#\xfLMM\xc9\xea\xe0\xc0\xab\x7f\xee\f\xff/\t\r}K\xbd\xda\xda\xbfm\xa7\xce\x98\x45\xf5\xea\x35\xbe\xba/\x96/]\xca\xd3\xa0 :\xb6\x8f_\x9a\xdb)\xaf#-Z\xb5\x66\xf0\x90\x61)\xbf\x13?\xd9\xf0\x61\x43\xb8t\xf1\x82\xe6u\xd3\x66\xcd\x19\x36\x62\xd4\x37\x1fKo\xdf\xbe\x65`\xff\xbe\xd4\xf5\xf2\xa6j\xb5\xea\xa9\x1a\xfb\xcf\x94\x92\xc7\x9e\xa5\x65z\xf4\xf5\xf5\tz\xf2\x4\x9c?U\x9bx\xf1\"\xaeT{\x6\xeb\f\xa9\xb4\x17?Ob\xfd\xa7K\xc1\x82\x85X\xbcp\x1\x61\x61\x61\xf1\x46\\\xad[\xbb\x86\x1a\x35kS\xcf\xcb\x1b\x88K\x84L\x9f\x39\x9b\xf2\x65J\xe1w\xec\x98\xceQF\xffv\xbbvng\xce\xac\x99\x9a\xd7\xa6\xa6\xa6\x9c\xbd\xe0\xaf\xb3\xad\x9d\x9d\x1d\xd9\xb2\x65\xe7\xe9\xd3\xa0x\xf3\xd2\xa7O\xf|\xdd\xe7\x8c\xd0&\x89!!D\xaa\xb2\xb5\xb5\x61\xff\x81\xc3\xf1\xa6GGG\xb3\xef\x80\x1f\xb3g\x8c\xa7|\xf9r\0\xb8\xbbk?\xdc\xd0\xda\xca\x42\x93X(_\xbe\x1c\x1f>|\xc0g\xea,\x9d\x89!cc#|\xa6L\xd4\xbc._\xae,\xbf\xed\xd9\xcf\xe9\xbf\xcf\xe0\xe6\xe6\xca\xae\xdd\xbf\xa1\xaf\xaf\xcf\xc4\tc10\xd0>\xf5m\xda\xbc\x5\xb7\x92\xcet\xee\xd4\x1\0\x37\xd7\x92\\\xbc\xe4\xcf\xfe}\a4\x89!\x80\xd9\xb3\xa6i\xee\x86\xb9s\xe7.KW\xacg\xf0\xa0\x1\0T\xa8\xe0\x8e\xdf\x89S\xf8\x1d?\x81\xa7g%N\xff}\x86\xe3'Os\xfd\xcaYLMMqs-IDd$+V\xfaj\x12\x43\0\x9b\x37,\xc7\xfd\x9f\xfd\x37\x37\x33\xa3Q\xb3\xe\x4=\r\"k\x96,\xb8\xfes\a\x7f\xe1\xc2\x85\xb0\xb0\xb0\0\xc0\xcb\xab.\x95*yh\x8d\xd8\xd0\x65\xc8\x88\x89Z\xaf'M\x9e\xca\x94\xc9\x13\x31\x30\xd0g\xda\xf4Y\xf4\xeb\xdd\x8d:u\xe2\xbe`\x14/V\x94\xc2\xc5Jq\xee\xfcy<*VH\xb4\x1f?\xda\xb2\x61\xb9\xe6\xffMO\xa1G\x87.}\x19\x33z\x84\x66$\xc8\xabW\xafY\xb0h\x5\x83\a\xf5O\xb0.n\x99\xd2n\xcc]\xb0\x82\x1c\xd9\xb3`f\xa6]Bn\xe2\x84\xb1\x8c\x1c\x31,\xde\xf4\xc4\xbc|\x19\xf7%\xd5\xc4\x44\xfb\x83?M\x9a\xb8;l\xde\xbd\xfb\xfe\xf2g_s\f|i\xee\xbc\x5th\xd7\x42S\x9aL\x97ysgj\x8e\xcf\xb0\xb0\x30\x46\x8d\x99\xc4\x82\xb9\xd3\xa9X\xd1\x1d\0\x37\xb7\x92T\xacT\x9d\xad[\xb7\xd3\xb9sG\xcdr\xf3\xe7\xcd\xd2\xc4\x15\x1c\xfc\x82\x8d\x9b\xb6\xd1\xb7O/\x2\x3\x3y\xfe\xe2\r\xf5\xea\xd6\xc6\xc9)\xffW\xed\xeb\xc7\xe7\xe2|y,\r\x1f\x39\x96\xb5\xbe\xcb\xb1\xb6\xb6N\xf2\xbdS\xb5j\x15\xaaV\xad\xa2YV\xa9\x34\xa0Q\xb3\xe\xbc|\xf9\x8a\f\x19\xacq\xca\x97\v\xd7\x92\xce\x34n\x1cwWP\x8e\xec\xd9\xd9\xb1\xfb\0K\x17\xce\xd0\x1c\x9f\x16\x16\x16\xd4\xab\xdf\x92G\x8f\x1e%X\x8e\xad[\xd7\xce\xac\xf2\xdd\xc8\xe5+K\xd9\xbd}-FF\x9f\x12@?\xfaX:x\xf0\x90V\x9f\xd9g\xce\x8cZ\xadN\xf0N\xa5\xef\x39\xa6\x12;\xaf}\xb4l\xe9|\xad$\xf2\xec\xd9\xf3\xe9\xdd\xa3#\x9d:\xc6%c\xcb\x95-CHH\b\xb3\x66\xcfg\xe3?\x89!H\xf8\xdc\x94\xd1\xce.\xc9s\xb7\x10\x42\b!~\x1d\xa5J\x95\xe6\xea\x8d\xdb:\xe7\x35h\xd8\x18\xbf\x63G\xa9R\xb5\x9a\xe6\x37\xc1\xa5\x8b\x17)^\xdcYs\xb1\xee\xc3\x87\xf\x9aQ\t%]]\x89\x8d\x8d\xe5\xea\x95+\x14(\x18\xf7\xac\xc8\xe7\xcf\x9fs%\xe0\x32}\xfa\xf6\xfb\x1{\xf3\x63YYY'\xd8w\xc9\xe9\v\x95JEdd$&&&4h\xd8\x88\x9a\xb5\xb4/ \x8f\x1e\x35\x82\xabW\xae\xb0\x65\xdb\xe\xcc\xd3$\xfe\xfb\xf1\xdfj\xdd\x86M:\xa7\x7fm\xff\x41\\Rh@\xbf>8\xbb\xb8\xd0\xb1S\x97\x1f\xb3\x3?\xc9\xf7\x1e{\x91\x91\x91\x18\x18\x18\xa0\xaf\xaf\x8f\xa1\xa1!\xad\xda\xb4\xe5\xb7\xdd;\xa9V\xbd\x86\xe6\x66\xbe\xe3~\xc7p\xafP\x91\xcc\xf6\xff\xbd\xaa\x2\x89\xf5_ll,\xfa\xfa\xfaZ\xd3n\xdd\xbaI\xce\x9c\xb9\x34I\xa1\xcf\xcf{\x11\xe1\xe1\xc4\xc6\xc6j\xfd\x66\xb4\xb0\x88+\xa5\x96Te\x93\x7f\xabN\x9d\xbb\xd2\xa9s\xfc\xf2\xecj\xb5\x1a\xb5Z\xadu\r\xe9\xd5\xab\x97 g\xcf\x9e\xa3\x44\tg\xcd|}}\xfd\x4/\xe4\xdf\xbes\x87\x98\xe8\x98O\xb1\x98\x9b\x91\x35K\x16M\xf2\xec\xc3\x87\xfZ\xa3\x17\xde\x7f\xf8\0\xa0\x99\xff=\xbe\xe6\x18\xf8\x9cJ\xa5\x62\xff\xc1\x63\xcc\x9e\x31\x39\xc1uW\xab\xe2\xaeu|>\xe\f\xe4\xf5\x9bP\xf2\xe5\xfbT[\xd8\xc4\xc4\x84*\x95+r\xf9\x8a\xf6(\xbc\xcf\xe3\xca\xed\x98\x8b\a\x8f\x9e\xa2R\xa9pt\xcc\x45\xad\xea\x1e\x34h\xdc\x8a\xa6\x8d\xbd\xa9\xe4Q\x81\x12%\x9c\xe3}Q\xd5\xc5\xc4\xc4\x98V\xcd\xeb\x33\xd5g\x12\x10\x97\xcc\xbd\x1cp\x85\x46MZ\xb3h\xf1\x32\x86\xf\x1b\x9c\xe4{G\xadV\xe3\xe7w\x9c\xc3G\x8e\x11\x10p\x95\xd3g\xe3\xee\x2\x8a\x8c\x8c++\xa0\x34\x30 W\xce\x1c\x9a\xe5\xec\xed\xe3J5\x18}6\xb2\xe7\x63\t\xb9\xb0\xf7\x1f\x12\x8c\xd5\xda\xda\x8an]\xda\xb1o\xdf\x41\xcd\xa8\x97\x8f\x12;\x96\x82\x82\x9e\xf2\xf6\xed\xa7!\xec( _\xde\xbc\xdfu,\xb5k\xd7\x86\xb6m[\x13\x1a\xfa\xe?\xbf\xe3\xb4j\xd7\x1d\xdf\x95\xf3\xa9ZEw\xb9\x8ao=\xa6 \xf1\xf3\xdaG\x1fK\xea\x41\\\xb2\xef\xd0\x91\x13\x34j\xe8\xad\xd5\xa6|\xb9\xb2\xb4\xef\xdc[\xeb\x87GB\xe7\xa6\xe4\x9c\xbb\x85\x10\x42\b!\0\x9a\xb7hI\xb3&\x8d\x98 l\b^\xde\xde\xd8\xd9\x65\",\xec\x1d\xeb\xd7\xad\xa1L\xd9r\x94*\x15\xf7\xbc\xf2\xcf\xdf\xb7i\xd3\xa6M\xf2sF$N\x12\x43\x42\x88T\x13\x13\x13\xc3\x9f\x7f\xfdM}\xaf::\xe7\xf7\xe8\xd1\roo/\x8e\xf9\x1dg\xc5J_\x86\xe\x1b\xcb\x86\xf5+\xc8\x97\x37\xee\x42\xf8\x97wG\xe8\xe9\xc7]@U*\r5\xcf\xee\xf8\xe8\xf5\xeb\xd7\xd4\xa9\xd7\x88\xc6\x8d\xbc\x18:t \xe9--)\xe2\\\x8e\x1b\x37n\xfe\x33\xff\x8dV2\xe3s\x96\x96\x16\x38\xe5\xcb\xc5\x9a\xd5K\xb5\xa6\x1b\x1b\x9b\xe8l\xf\xa0\xeb\xbb\xcd\xe7_x\xcc\xff\x19Yp\xe6\xaf\xc3\x18|v\x11>\xb1/E\xa9\xf1}\xc9\xc4\xc4\x84\x86\r\xeb\x33g\xde\"\xae^\xbd\x86g\xe5J\xe8\xeb\xeb\xd1\xa5\x63+\xda\xb6i\xa9\xd5\xd6\xc2\xc2\"\xc9~Lv\xe0I\xec\xcc\xb2\x65+x\xfb\x36\x94\xdb\xd7\xcf\x31\xc5g:\xfd\a\xe\xe3\xf7\xdd[5#'\x12\xd3\xbb\xcf@\xce\x9e\xf\xd0\xbcn\xd7\xba\x31\x93&\x8e\xd3\x8cV\nz\xfaT\xeb\x62\xfe\x93'Ad\xb5\xb7\xd3\xf9\xbc\xa3\xef\x91\xd4\x31\xf0\xb9\xc8\xc8HB\xde\x86}U\x9d\xef\xa8\xa8\xb8Z\xd9*U\xac\xd6tC##L\x12\xbb\xf3\xe5\xb3\x10\x8c\x8d\x8dY\xb6t!\xd7\xaf\xdf\xe0\x98\xdfq\xfa\r\x18\x8aM\x6kV\xafZ\xfa\xd5\xf\xefU*\x95\x14/V\x94\xd6-\x9bp\xea\x8f\xbf\x80\xa4\xdf;\xabV\xaf\x61\xed\xda\x8d\x8c\x1a\x35\x94.\x9d;p\xf5\xeauZ\xb4\xe9\x8a:\x81n\xd0\xd5\x7f\xc9}_\x18\x19*16\xf9\xba;\x82\x36m\xde\xc2$\x9fO_\x18\xcdL\x8d\xb9\x7f'\xe0\xbb\x8f%\x85\x42\x41\xbati\xa9S\xa7\x16~\xc7O\xf0\xfb\xef{\x13L\fi/\xa7{]\tI\xec\xbc\xa6\x8bJ\x15KDd\x14\xb1\xb1*\xad\xe9J\xa5\x12\x63#C\xf4\xf4t'\f\xbf\f!\xa9s\xb7\x10\x42\b!\x4@.GG\xd6\xac\xdf\xc0\x1a\xdf\xd5\x8c\x1d=\x8a\x2\x5\v2o\xc1\x42\x8a\xffSn\xca\xcc\xcc\x1c'\xa7\x2\xd8\xd9\x65\xd4,3h\xc8\x30\x1c\xb2\x65\x63\xcb\xa6\x8d\x84\x87\x87S\xc9\xd3\x93\x66\xcdZ$z#\xcc\x7fUR}\x91\xd5!\x1by\xf3\xe5\xd7y#\x9e\xf8\xba\xfe;u\xf2\x4W\x2.\x3\xd0\xba\x65\x33\xad\xf5,X\xb4\x94\xf2\xee\xee?:\xfc\x9f*\xb1\xbeS(\x14\xe4\xc9\x93\x97\xec\x39>Us\xc8\x92%+\xab\xd6\xac\xc3w\xd5J\xc6\x8f\x1b\x43\xb1\xe2\xce\xf8\xae\xdd\x80S\x81_/)Y\xadz\r\xf6\xed\xdb\xcb\xe2\x85\vx\xf7.\x94\xe2%\\\xd8\xb8y\x1b\x5\v\x15\x2\xe2\x9f\xf7J\x95*\xcd\xda\r\x9b\xd8\xb2i#cG\x8f\"]\xbat\xb8\x95.\xcd\xaa\x35k\xb5n\xf2\xfb\x15X\xa6OO\x9d\xba\xf5\x38r\xf8\x30W\xaf\\!g\xae\\T\xaa\\\x5/oo\f\xff\xa9\n\xf2\xe5y/\xa9\xcf\x19\x91\xb8_\xef\x93U\b\xf1\xc3l\xdb\xb6\x83\xd7\xaf\xdfP\xbf\xbeW\x82m2e\xcaH\xb3\xa6\x8di\xd4\xb0>\xd5k\xd4\xe3\xd0\xc1#\xe4\xcb\x9b\x97\xf0\x88\b\x8e\x1c\xfb\x93\xa8\xa8(\xcd\t? \xe0\ne\xdc\x8a\x63\x66\x66JX\xd8;\xad\xf5\\\xbdz\x9d\xfb\xf\x9f\xd0\xaa\x65\v\xd2\xa7\x8f{\xb8\x61l\xac\x8a\x83GN\x1\x90\x37On\xe\x1e:JLLL\xbc\x1f\x15\x85\n\x16`\xe7\xee}\x98\x99\x99\x63i\xf9\xfd\xa3J\0\x1cs\xe5\x2\xe0y\xf0s\\\\\xbe\xf1\x3\xe9\x9f\xab\xb1\x31\x31\x31Z\x93\xdf\xbf\x7f\xffU\x17\x83\x1\f\r\r\xb1\xb3\xb5\x45OO\x8f\xba\xb5\xaap\xe7\xce]2g\xce\x1c\xef\xa2\xf3\xc9\x93\x7f$\xda\x8f)! \xe0\n\xe3&\xcd\x62\xf3\x86\xe5\xa4K\x97\x8e~}{\xb1w_-\xe6\xce[\xa8)\x1d\xf8\xe5\xb0\xfe\xcf\xed\xf9m\xbb\xce\xf5\xe6\xcd\x9b\x87\x82\xf9\x1d\xd9\xbbw\xbf\xe6\x2uLL\f;v\xee\xa6S\xc7\x36\x9av\x11\x11\x91(\x95\x6\xc9\x1a\x35\x93RLLL(R0/\x17/\xfaS\xbdZ\xd5\x64-\x93\x35\x8b=\xfa\xfaz\\\xb8x\x89\xcc\x99\xe3\x46\xd2\xc4\xc4\xc4r\xea\xd4\x9f\x34n\xdc \xd9\xdbV(\x14\xe4\xcf\x9f\x8f\xfc\xf9\xf3Q\xa7vM\x8a\xb9T\xc0\xdf?\x80\xb2\x65K\x7f\xd3\xbe\xe8\xeb\xeb\x91#G6 \xe9\xf7\xce\xce]\xbfS\xb7nM\xca\x95-\x3\xc0\xbd{\xf7\xff\x89\xe9\x9b\x36\xfdM\x12;\x96\xfa\xf4\xeeI\x9f\xde=\xe3M\xff\x96\x63I\xd7\xb9\x45\xadV\xf3\xfaM\b9\xb2gK\xd1}\xd2\xc4\x99\xc8yM\x17\x43\x43\x43J\xbb\x15\xe7\xd4\x1f\x7fh\x95\xa6\xbbp\xf1\"\x9e\x95\xca\x63`\x90\xfc\xf7\x44\x42\xe7n!\x84\x10\x42\x88\xcf\xe5\xce\x9d\x87q\xe3'\xea\x9cggg\x87\xef\xba\rZ\xd3\f\f\fh\xde\xa2\x15\xcd[\xb4\xfa\x11\xe1\xfd_K\xaa/\x9a\xb7hI\xf3\x16-u\xce\x3h\xd3\xb6\x1dm\xda\xb6K\xad\xf0\xfe\xef}M\xffU\xaa\xec\x99`i\xb0_Qb}\xa7\xaf\xaf\x8f\xcf\xb4\x19\xf1\xa6;880b\xd4\xe8\x1f\x10\xdd\xff\xb7\xa2\xc5\x8aS\xb4X\xf1\x4\xe7\xeb:\xef\x15-Z\x8c\xa2\x45\x8b\xa5vh\xff\xf7,,,h\xd8\xa8\x31\r\x1b\x35N\xb0\x8d\xae\xf3^b\x9f\x33\"q\x92\x18\x12\x42\xa4\x88g\xcf\x82\xf9\xfb\xccY\xd4*\x15\xcf\x9f\xbf\xe0\xe4\xa9?8t\xf8\x38K\x16\xcd\xd6Yv)&&\x86\x11#\xc7P\xba\x94\x1b\x19\x33\xda\xf1\xfc\xf9\v\xae\xdd\xb8\x43\x9f\xdeq\t\x15#\xa3\xb8\x64\xd0\x90\xa1#\xa8Q\xbd\x1a\xcf\x82\x83\x99\x34\x65\x16\x1b\xd7-\a\xc0\xc4$\xael\xd1\xa5K\xfe\x64\xc8\x90\x81\xcc\x99\x33\x1\x30\x7f\xc1\"*Vt\xe7\xd6\xad\xb8/u\x1fKZy{\xd7\x63\xfa\xec\x45\x8c\x1d\x37\x81:uj\x13\x1d\x15\xc5\xcd[\xb7i\xd5\xb2\x39u\xeb\xd6\x66\xc9\xb2Ut\xe9\xda\x93\xee\xdd;\x93.]:\xae]\xbd\x46\x89\x12\xce\xe4\xc8\x91\x9doQ\xa8PAZ6\xf3\xa6k\xf7\xbe\x8c\x19=\x94l\xe\xe\x4\x6>\xc1\xd8\xd8H\xf3\\\x8e\xa4|\xdc\xa7-[\xb6\xe3\xe2\xe2L\x9e<\xb9\x39|\xe4(]\xba\xf`\xef\xeeM\x14-ZD\xe7r\xf7\xee\xdd\xe7\xdc\xb9\xf3\xa8\x81\xc8\x88\b\xfe\xf8\xf3/\xde\xbd\v\xa3R%\xf\0z\xf6\xecJ\xc5\xcau\x18\x35z,u\xea\xd4\x46\x1\x9c\xfe\xfb\f\xed\xdb\xb5I\xb2\x1f\xbfWDD\x4\x83\x87\x8e\xa4\x65\x33o\xca\x97\x8b\x1b\x16mee\xc5\x94Ich\xd1\xa6+\x15+\x94\xc7\xd5\xb5$\xc3G\x8c\x66\xef\xbe\xc3\x1c?\xb6?\xd9\xcf\x5R*\x95\f\x1d\xd2\x9f&-:a\xa8TR\xb0`\x1\xf6\xee;\xc0\x8b\x17\xaf\xa8W\xb7\x8e\x66\xfb\x9eUk\x93\x37\x8f#K\x16\xcfO\x91}J\xae^=\xbb\xd2\xbeso2e\xcaH\xf1\x62\x45y\xf1\xf2%\xaa\xd8X*W\x8e\xff\xec\x18\0KKK\x86\xe\xea\x45\xbf\x1\xc3\xf9\xf0\xfe\x3\x99\xed\x33\xb3w\xef~\xc2\xde\x7f\xc0\xab\x9e\xeeQx_\xbaw\xef>\x1b\x37m\xa1\x64\xc9\x12XXXp\xf6\xccY\xf4\xf5\xf5\xc8\x9a\x35\xae<\x9bw\x83&\x14*\xe0\xc4\xa8Q\xc3u.\x1f\x1c\xfc\x9cs\xe7\xce\x3\x10\x1d\x13\xc3\xbd{\xf7Y\xb4\x64\x35\x9b\xd6\xaf\0H\xf2\xbdS\xb0@~6n\xda\x46\xce\x9c\x39\x30\x35\x31\xa1\x61\xd3\xf6_\xdbm\xdf\xedG\x1dK\a\xe\x1c\x62\xe5\xea\x35\xd4\xaaQ\x8dL\x99\x32\xa2R\xa9\xf1;~\x82?\xfe<\xc3\xf0\xa1\x83Re\xdf\x12;\xaf%\xa4w\xaf\xeex5h\x85\xa5\xa5%%]Jp\xf5\xdau\xe6-X\xc1\xc1}\xba\x13\xae_J\xea\xdc-\x84\x10\x42\b!\x84\x10\x42\x88\xff\x7f\x92\x18\x12\x42\xa4\x88\x3\x87Or\xe0\xf0I\xccL\x8d)W\xd6\x95\xe2\x45\x8bp\xf8\xe0oX[[\xe9l\x1f\x15\x15\x45\xb6l\xe\xac\\\xbd\x86\xab\xd7n\x91+g6\xa6O\x1dG\xd5\xaaq\xe5\x96\xf4\x14z\xd8g\xb2\xc1\xd4\xd4\x94\xfe\x3\x87Q\xa8\x90\x13\x1b\xd6.\xc3\xcd\xcd\x15\x88{\xce\xce\x9c\x19\x13\x98\x31k\x1eo\xde\x84\x30`@_|W\xceg\xd6\xec\xf9\xec\xddw\x90\xda\xb5\xaa\xd1\xb3\xdb\xa7\xbb\xa3\xb2g\xcf\xc6\xc1}\xdb\x99?\x7f\x11m\xdau![V{\xaaW\xaf\x82J\xa5\xc2\xdc\xdc\x9c\x1d\xdb\x36\xb0h\xf1\x32\x46\x8d\x1a\xcf\x87\xf0pJ\x97*\x89\xb3\xf3\xf7\xdd\xb1\x31q\xc2X\xd6\xad\xdf\xc8\x8a\x95\xbe\xdc\xbes\x1f\xe7\x62\x85i\xdd*\xe1\v\xb6_\xca\x9a%\v+\x96\xcc\x66\xfa\xcc\xb9\xec\xd9w\x80\xa9>\x13\xb0\xc9\x90\x81\x62\x45\x9c\xb4\xca[}i\xda\xcc\x45L\x9b\xb9\b}}=\n\x17\xccK\x99\xd2n\xec\xdc\xbeQS\x1e+_\xde\xbc\x1c;\xb4\x9b\x45\x8b\x97\xd2\xa9sO\xd2[ZP\xb1\x62\x39\"\"\"\xc8\x91#{\xa2\xfd\xf8\xbdV\xac\\\xcd\xfd\a\x8fY\xb9|\x91\xd6h%O\xcfJ4iX\x9b\xfe\x3\x87\xb1\xf7\xf7\xed\xe4\xc8\x9e\x8d\x82\x5\xf2j\x12\x84\xc9\xe5\xe1Q\x91\xad\x9bV\xb2v\xed\x6\x36n\xdeNe\xfw6o\\\xa3\x39\xe\r\f\x94\xe4\xcf\x97\aG\xc7\x9cI\xac)\xe5U\xaf^\x95\x65\x8bg\xb1\x66\xcd\x6\xa6\xcf\x9cG\xd1\xc2\x5h\xd9\xa2i\xa2\xcbt\xe9\xdc\x89\xf4\xe9\xd3\xb3q\xd3V^\xbd~C\xe5J\x15\xd8\xbeuC\xb2\xcb\xe2\x19\x1a\x1a\xa2P\x80\xcf\xd4\x99<\xe|J\t\xe7\"\xec\xd8\xe2\x8b\x83\x43V\0\x9e={\x8eGE\xf7\x4\x97\xdf\x7f\xe8\x4\xfb\xf\x9d\0\xc0\x31gVJ8\x17\x65\xe7\xb6u\x9a\xa4\x64R\xef\x9d>\xbd{\x10\x1b\x1b\xcb\xd0\x61\x63\xc9\x97\xcf\x91\xc5\v\xa6\x31`\xd0\xc8\x64\xc5\x9eR~\xd4\xb1\xe4\xec\\\x9c\xd7o^s\xe4\xe8q._\xbe\x8a\xb5UzJ\x97*\xc9\xa1\xfd\xbb\xc8\x9e=[\x8a\xee\xd3G\xd9\xb3'|^KH\x99\xd2\xa5\xd8\xbe\x65\x35\xcb\x96\xaf\x62\xdd\xfa-\x94.\xe5\xc2\xa1\x3;\x92=\xda'\xa9s\xb7\x10\x42\b!\x84\x10\x42\b!\xfe\xff)n\xde\rRg\xc9\x14\xf7\x10\xb5\xc7\x41/\xc8\x9d#c\x12\x8b\b!\xfe-\xc2#\xe2J\x90=\xez\xc1\xc7\xf7yB>o\xf3\xffp.\x98\x36m&\x1W\xaf\xb1z\xe5\xd2\xa4\x1b\v!\xbeZLL\f\xd9r\x16\x64\xee\xec\xc9\x9aQ0B\b!\x84\x10\xff\x36\xb7\xee=\xd5\xfa\x1d\xf3\x35\xbf{\xde\xbd\xfK\xf5\xf8\x84\x10\x42\b!\xfe_\xa4\x31\x8b\xbb\xd1\xf8q\xd0\v\xf4~r,B\b!\x84\xf8\t\x1e=zLTt\fE\x8b\xe8.I(\x84\x10\x42\b!\x84\x10\x42\b!\xfe\x9b$1$\x84\x10\x42\xfc\x82\"\"\"\x18\xd4\xbf\x9b\xa6\xac\x9c\x10\x42\b!\x84\x10\x42\b!\x84\xf8\x35\xc8\x33\x86\x84\x10\xff\x97\xfa\xf7\xef\xf3\xb3\x43\x10\xe2?-\x7f\xfe|\xe4\xcf\x9f\xefg\x87!\x84\x10\x42\b!\x84\x10\x42\b!~0\x19\x31$\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\x42\b\xf1\x8b\x90\xc4\x90\x10\x42\b!\x84\x10\x42\b!\x84\x10\x42\b!\xc4/B\x12\x43\x42\b!\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\xbf\bI\f\t!\x84\x10\x42\b!\x84\x10\x42\b!D*\xbbv\xf5\nNy\x1d\t\nz\xf2\xb3\x43\xd1\xe9\xef\xd3\xa7i\xde\xb4\x31\xaf^\xbd\x4 ::\x9a\xb7o\xdf\xa2R\xa9\x92\xb5\xfc\x8b\xe7\xcfq\xca\xeb\x88\xff\xa5\x8b\xa9\x19\xa6\x10\"\x5HbH\b!\x84\x10\x42\b!\x84\x10\x42\b!~qj\xd4\xa8\xd5j\xcdk\xffK\x17)U\xd2\x99w\xef\xde\xfd\xc4\xa8\x84\x10\xa9\xc1\xe0g\a \x84\x10\x42\b!\x84\x10\x42\b!\x84\x10\xe2\xe7ruu\xc3\xd5\xd5\xedg\x87!\x84\xf8\x1$1$\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10),<<\x9c\xb5k|9\xb8\x7f\x1f\x36\xb6\xb6\xa4K\x97.^\x9b{w\xef\xb2r\xe5r\xfe\xfa\xf3\xf\xec\xed\xb3\xd0\xa4i3\xaaT\xad\xc6\x82ys\ty\x1b\x82\x45:\v\xfc\xfc\x8e\x62hhD\xab\xd6mp*P\x80\xb5\xbe\xbe\x9c:y\x82\x8c\x99\x32\xd1\xb1s\x17\x8a\x17wNV<\r\xeb\xd7\xa3q\x93\x66\xdc\xbau\x93\x93\xc7\x8f\x93;O\x1e\xdaw\xe8\x84S\x81\x2\0\x9c:y\x82N\x1d\xdaq\xf6\x82?7\xae_\xa7U\x8b\x66\0\x94*\x19\xb7\xfe\xbf\xcf^\xc0\xf\x1f<\x88\xd7\xd6\x31wnz\xf6\xee\x3\xc0\xd2\x15\xab\xd8\xb6\x63\x37&\xa6\xa6\0\xf8L\x99\xc4\xfe}{i\xd5\xba\rc\xc7O \xb3}f\x8c\x8d\x8d\x35\xcb.[\xb2\x98\xf2\xee\x15\xe8?p\x10\xf\x1e\xdcg\xc8\xa0\x1\xc4\xc6\xc6~C/\n!R\x8b\x8c\x18\x12\x42\b!\x84\x10\x42\b!\x84\x10\x42\x88\x14t\xf9\xb2?\a\xf6\xef\xe3\xf0\xb1\x13\xd8\xd8\xd8\0\xa0\xa7\xa7G\x9f^\x9f\x46\xd6,_\xb6\x84\xe6-Z\xd1\xb6]\xfbx\xcb\xeb)\xf4P*\ri\xd7\xbe#\0\xaenn\xfc\xfe\xfbn\x9c\x9dK\xd0\xb8IS\0\n\x16*\xc4\x96\xcd\x1b\xb9\xec\xefO\xe6\xcc\xf6I\xc6\x64\x64\x64\x44\x8bV\xad\x35\xcb\xbb\xba\xbaq\xfb\xd6-vl\xdf\x46\xef\xbe\xfd\xb4\xda\xa6I\x93\x46\x33\x12\xc9\xc9\xa9\x80\x66\xb4\xd3\xcd\x1b\x37X\xb7\xc6\x97\xc3\xc7N\x90\x31\x63\xc6\x7f\x62+\x5@\xf8\x87\xf\0\xcc_\xb8\x18\xf7\n\x15\x1\x30\x33\x33\xa3\x63\xfb\xb6<{\xf6\x34Y1\n!~\f\x19\x31$\x84\x10\x42\b!\x84\x10\x42\b!\x84\x10)\xe8\xfe\xbd{\xe4\xc9\x93W\x93\x14\x2\xb0\xb7\xff\x94\x18Q\xa9T\x1c=r\x84\x2\x5\v&\xb8\x8e\xb2\xe5\xcai\xfe\xd6\xd7\xd7\xa7h\xd1\x62\xd8~V\x92\xcd\xc2\xc2\x82\xac\xe\xe\x84\x85\x85%;\xae,Y\xb2j\xfe\xd6\xd3\xd3\xa3T\xe9\x32\\\xbd\x1a\x90\xec\xe5o\xdf\xbe\x45\x96,Y4I!],--5\x7f\xdb\xdbg\x1\xe0\xfd\xfb\xf7\xc9\xde\x86\x10\"\xf5IbH\b!\x84\x10\x42\b!\x84\x10\x42\b!RPLL\fQ\xd1Q\t\xce\x8f\x8a\x8a\"4\xf4\xedW\xadS\xa1P\xc4\x9b\xa6\xa7\xf8\xba\xcb\xbb\x31\x31\x31Z\xaf\xf5\xf5\xf4\x30\x35\x33O\xf6\xf2\x61\x61\x61\xa8T\xea\xe4oPG\xcc\x42\x88\x9fO\x12\x43\x42\b!\x84\x10\x42\b!\x84\x10\x42\b\x91\x82\x1c\x1c\xb2q\xe7\xf6m\x1e?z\xa4\x99\xf6\xea\xd5+\xcd\xdf\xc6\xc6\xc6\x38\x15(@\xc0\xe5\xcb?,\xa6\xabW\xae\xe0\x33y\xa2\xe6\xb5Z\xad\xe6\xdc\xb9\xb3\x14*TH\xf7\x2\xff$u>O&\xd9\xdb\xdb\xf3\xe4I O\x83\x82R5V!D\xea\x92g\f\t!\x84\x10\x42\b!\x84\x10\x42\b!D\n*V\xbc\x38\xa5J\x97\xa6\x7f\xbf>t\xee\xd2\r===\xbav\xee\xa0\xd5\xa6\x43\xc7\xce\xf4\xeb\xd3\v[;;\n\x17)\xc2\xab\x97\xafP\xa9\x62)\xef^!Uc[\xb2h!\x85\x8a\x14\xe1\xec\x99\xbf\t\b\xb8\xcc\xd8\xf1\x13u\xb6\xfbX.\xee\xb7\xdd;)Z\xac\x38\xb9r\xe5\xa2\x84KI\x9c\n\x14`\xd4\xc8\xe1\xb4\xef\xd8\tS\x13S\x2\x2\xfc\xa9U\xbbn\xaa\xc6,\x84HY2bH\b!\x84\x10\x42\b!\x84\x10\xbf\x1c]%\x99\x84\x10\"\xa5\xe8\xeb\xeb\x33m\xc6l\\\xdd\xdc\x98>m\n{~\xdf\xcd\xd4\xe9\x33\x31\x35\x35\xd5\xb4\xa9T\xd9\x93\x19\xb3\xe6\xe0w\xec(]:v`\xe3\x86u\xa9\x1a\x93S\x81\x2\xb8W\xa8\xc8\x8d\x1b\xd7\x19>t0/_\xbc\x64\xc3\xc6-X[[\xebl\x9f\x39\xb3=\xb3\xe6\xcc\x63\xf7\xae\x9dL\x9d\x32\x99\xa0'A\x18\x19\x19\xb1`\xd1\x12r\xe6\xca\xc5\x98\x91#\x18\x39\x62(O\x9f>%:*\xe1\xb2yB\x88\x9f\xef\xcb\xef=\x8a\x9bw\x83\xd4Y2e\0\xe0q\xd0\vr\xe7H\xf8\xc1\x61\x42\x88\x7f\x97\xf0\x88\xb8\xa1\xbe\x8f\x83^\xf0\xf1}\x9e\x90\xcf\xdb\xc8\xb9@\b!\x84\x10\x42\b\xf1op\xeb\xdeS\xad\xdf\x31_\xf3\xbb\xe7}\xf8\xfb\xaf{N\x86\x10\x42\xfc\x1f\xbb\x7f\xfd\xbe\n\xf0\0\0 \0IDAT\xef\x1e\xe1\xe1\x1f\x12\x9c\xef\x90-\x1bmZ\xb5\xa0N]/\x9a\x35o\xf1\x3#\x13\x42\xfc?\xd0\xd3S`fb\x6\xc4}\x1f\x92RrB\b!\x84\x10\x42\b!\x84\xf8\xe5\xe8\xeb\x19\xa0RE\xff\xec\x30\x84\x10\"E,\\0\x8f=\xbf\xff\x96\xe0\xfcm;v\xff\xc0h\x84\x10\xffo\xf4\xf5\xb4SA\x92\x18\x12\x42\b!\x84\x10\x42\b!\xc4/G\xdf@\x9f\xe8\x18I\f\t!\xfe\x1b|\xa6\xcd\xc0g\xda\x8c\x9f\x1d\x86\x10\xe2\xff\x94\xbe\x81\xbe\xd6kI\f\t!\x84\x10\x42\b!\x84\x10\xe2\x97\x63\xa0g\x80\x9e\x42\x81J-\xe5\xe4\x84\x10\xbf\x86\xcd[w\xfc\xec\x10\x84\x10?\x81\x9e\x42\x81\x81\xbev*H\xef'\xc5\"\x84\x10\x42\b!\x84\x10\x42\b\xf1\xd3(\x14`dd\xf4\xb3\xc3\x10\x42\b!\x84HUFFF(\xbe\x98&\x89!!\x84\x10\x42\b!\x84\x10\x42\xfc\x92\f\xf4\r04P\xfe\xec\x30\x84\x10\x42\b!R\x85\xa1\x81\x32\xdeh!\x90\xc4\x90\x10\x42\b!\x84\x10\x42\b!~\x11J\xa5\x1\xd1\xd1\x31Z\xd3\x8c\x8c\x8c$9$\x84\x10\x42\x88\xff\x1c\x43\x3\x65\xbc\xd1\xd1Q\xd1\x31\x18*\r$1$\x84H}\xb1\xb1\xb1\x84\x87\x87\xff\xec\x30\x84\x10\x42\b!\x84\x10\xbf\x38\x43\xa5\x1Q_$\x86 .9dbl\x8c\x9e\xe2\xcb\x42+B\b!\x84\x10\xff.z\n\x5&\xc6\xc6:K\xe6\x46G\xc5\xa0\x34\x94\xc4\x90\x10\"\x95\xbd~\xfd\x6\x97R\x1e\x1c\x39z\"\xde\xbc\xeb\xd7o`\x93\xc9Q\xe7\xbf\xdd\xbf\xfdNpp06\x99\x1c\x39w\xee\xfcO\x88\xfc\xbfk\xcd\xdau\xb8\x95\xae\xf0\xb3\xc3\x10\x42\b!\x84\x10\xe2\x87\x33\x36\x32$2:Z\xe7<\x3}\x3LM\xcd\x30\x36\x36\x46i\xa0\x44OO\x81\x42\x12\x45\x42\b!\x84\xf8?\xa7P(\xd0\xd3S\xa0\x34Pbll\x8c\xa9\xa9\x99\xce\xf2q\0\x91QQ\x98\x18\x19\xa1{\xae\x10\x42\xa4\x90\x81\x43\x46Q\xa2xQj\xd6\xa8\x92`\x9b\xb9\x33'\x92\x35k\x16\xadi\xe\xe\xe\xa9\x1d\x9a\x10\x42\b!\x84\x10\xe2\x17\x63jbD\xd8\x87p>\x84G`jb\x1co\xbe\x2P\xea\x1b\xa0\xd4\x37\0\xe2\xdf\x65+\x84\x10\x42\b\xf1o\xf5:\xe4\x1d\x31*\x15&\xc6\x86\x92\x18\x12\x42\xa4\x9e\xdf\xf7\x1c\xe0\xec\xd9\v\x9c\xf0\xdb\x9bh\xbb\"E\v\x93'w\xeex\xd3\x83\x83\x83S+4!\x84\x10\x42\b!\xc4/\xca\xca\"\rA\xc1\xafQ(\x14q\x89 C%\xfazRPE\b!\x84\x10\xff=Q\xd1\x31\x44G\xc5\x10\x11\x15\x8d*6\x16\x1bk\v\0I\f\t!RGTT\x14\xa3\xc6Nb\xcc\xe8!\xa4K\x9b\x36\x45\xd6\xa9R\xa9\xb0\xb3\xcf\xc3\xca\x65s\xa8Q\xbd\x1a\0\xf7\xef\xdf\xa7\x64iON\xfa\xed\x1\x35\xb8W\xaa\xc5\x92\x85\x33\xa8U\xb3\x6\0G\x8e\x1e\xa3I\xf3\x8e\x1c\x39\xb0\x83\x82\x5\vh\xd6\x15\x1c\x1cLq\x17w\xa6M\x19\xc3\xf1\x13\xa7\x38{\xee\"\x95+\xb9\xd3\xb3G7\xfe\xfa\xeb\x34\xbb~\xdb\xc3\xad[w\xa8W\xb7&]\xbbt\xc2\xdc\xdc\\\x13\xc3\xb6m;\xd8\xb4\x65\x1b\xcf\x9f\xbf\xa4N\xed\xeat\xec\xd0\x8e\x34i\xd2\x10\x1e\x1e\xce\xce]\xbb\xd9\xbb\xf7\0\xfe\x1\xd7\xc8\xed\x98\x83\x36\xadZP\xa3\x46\\\xac\xd1\xd1\xd1l\xd8\xb8\x99\xad[wp\xeb\xce}\n\x15\xc8K\xef^\xdd)U\xca\x8dM\x9b\xb7\x32\xc5g&\x17\xce\xfd\xa1\x89q\xc4\xc8\x31\x44\x44\x44\x30\xd5g\x12\0\x9eUj\xd1\xb1\x63\x1bn\xde\xbc\xcd\xde}\a\xe9\xd9\xa3\v\x8d\x1a\xd6\xe7\xf1\xe3@\xe6\xcd_\xc8\x31\xbf\x93\xe4\xcd\xe3H\xb7\xae\x9d(Y\xd2\x45\xb3\x9e\xa0\xa0\xa7\xcc\x9d\xb7\0\xbf\xe3\xa7(\xe9R\x9c\xc7\x81OR\xe4\xff\x43\b!\x84\x10\x42\x88\x7f#}}}\xb2\x64\xca\xc0\x9b\xb7\xef\x88\x89U\x13\x1d\x12\x46\xacJ\xf5\xb3\xc3\x12\x42\b!\x84Hq\x86J\x3\x94\x86\x6\x98\x9a\x18\x62\x62\xfci4\xb4$\x86\x84\x10\xa9\x62\xf1\xd2Ud\xb1\xcfL\xdd\xda\x35\x92l{\xd9?\x80\x90\x90\xb7Z\xd3J8\x17\xff\xeam\xe6\xc9\x93\x9b\tc\x87\x32h\xc8h\\J\x94\xc0\xd0P\xc9\xa0\xc1#\x99v\xed\x31\x88\x1e]\xdb\xd2\xbf_O\n89\xf1\xe2\xc5K\xaa\xd5\xf4\xa2{\xd7\xe\xd4\xad[\x9bK\x17\xfd\xa9U\xaf\x19G\xe\xee\xa4`\x1'BBB\xa8Y\xbb>U<+2y\xe2\x18\x1e=~\xcc\xfaM\xbb\xbe\xbao\x85\x10\x42\b!\x84\xf8\xaf\xb1L\x97\xe6g\x87 \x84\x10\x42\b\xf1SHbH\b\x91\xe2\xc2\xc3\xc3\x99\xbfp\x19\x1b\xd7-OV\xfbn\xbd\x6\xc7\x9b\x16\xf8\xe0\xea\x37m\xbby\xb3&\x1c\x38p\x98\xc9S\xa6\x62\x66\x66\x46\xfe|\xb9i\xd1\xbci\x82\xed\xb7lXN\xf9\xf2\xe5\0\xd0S\xe8\xd1\xa1K_\xc6\x8c\x1e\x81\xad\xad\r\0\xaf^\xbd\x66\xc1\xa2\x15\f\x1e\xd4\x9f\x90\x90\xb7\x8c\x9d\x38\x9d\xbd\xbfm\xa6h\x91\xc2\0\xd8\xd9\xd9\xe1Y\xbd>C\x87\f\xc2\xce\xce\x16\x9f)\x13\x35\xeb._\xae,\xbf\xed\xd9\xcf\xe9\xbf\xcf\xe0\xe6\xe6\xca\xf9\x8b\x97(S\xba$U<+\xa3P(pss\xfd\xa6}\x1c\x31|\x88\xe6\xefy\xf3\x17\xe2V\xd2\x99\xce\x9d:\0\xe0\xe6Z\x92\x8b\x97\xfc\xd9\xbf\xef\0\x5\v8\xb1m\xfbN2e\xb2\x63\xfc\xb8\xd1\xe8\xeb\xeb\x3p\xf8\x88\x1f\x7f\x9d>\xf7M\xdb\x16\x42\b!\x84\x10\x42\b!\x84\x10\x42\xfc\xbbIbH\b\xf1]\x82\x83_\xb0\x66\xdd&\xbawm\x8f\xb1q\xdc\xc3[}\xd7n\xa2p\xa1\x2\x14)\\0Y\xeb\x38\xe9\xb7G\xe7\x33\x86\xbe\x85\xa1\xa1!\x13\xc6\x8f\xa6T\xb9\xaa\0\\8\xe3\x87R\xa9L\xb0\xbd\x99\x99\x99\xe6\xefl\xd9\x1c\0\x88\x8e\x8e\xd2L\xcb\x95\x33\a/_\x85\x10\x13\x13\xc3\xc3G\x8f\x88\x8dUQ\xa5z\xfdx\xeb\t\v\v\x3ly\xf6,\x98={\xf6\xe2w\xfc$\x81O\x9er\xf5\xfa\x1d\xdc\\\xe3\xca\xba\x35\xac\xef\x45\xc7.\xbdy\xf6\xac\x15\xb5jU\xa7re\xfl2d\xf8\xaa\xfd\x9b\x34n\xa8\xd6k\x7f\xff\0v\xfd~\x88]\x99\x1c\xb5\xa6\xb7k\xdd\x18\x80\x80\x80+\x94/[Z\x93\x14\x2\xa8\xe4\xe1\xce\xad[w\xbej\xbb\x42\b!\x84\x10\x42\b!\x84\x10\x42\x88\xff\x6I\f\t!\xbe\x8b\x99\x99)\a\xe\x1e\xe1\xc6\xcd[,]4\x1b\xb5Z\xcd\x92\x65\xab\x98\x37{j\xeamT\x9d\xf8l\v\x8bt\x9a\xbf\r\r\x13N\n\xc5\xa3P$:\xcd\xcc\xd4\x14\x80\xd5\xcb\xe7Q\xb0\xa0\x93V3[[[^\xbf~M\x9dz\x8dh\xdc\xc8\x8b\xa1\x43\a\x92\xde\xd2\x92\"\xce\xe5\xb8q\xe3&\0\xee\xee\xe5\x39\x7f\xe6\x4'N\x9e\xe2\xc0\x81\x43\f\x1a\x32\x86\xf9s|\xa8S\xa7\x16\0*U\x12;\xa6\x83\xa5\xa5\x5N\xf9r\xb1\x66\xf5R\xad\xe9\xc6\xc6&\0\x44\x46\x46\x11\x13\x1b\xf3\xd5\xeb\x15\x42\b!\x84\x10\x42\b!\x84\x10\x42\xfc\x37\xe9\xfd\xec\0\x84\x10\xffn\xe6\xe6\x66l\\\xb7\x9cK\xfe\x1,^\xba\x8a\xe3'\xfe\xc0\xcc\xcc\f7\xd7\x12)\xbe-===\xb2\xda\xdbq\xe7\xce]\xcd\xb4\xa8\xe8h\xad\x36*\x95\x8a\x31\x63'P\xa7\x66\x65\xdc\xcb\xba\x30~\xc2\x64T)\xf4 \xd9\xcc\x99\x33\x63me\xc1\xe3\xc0@\xec\xed\xed\xb5\xfe)\x95J\xae^\xbd\xce\xfd\x87Oh\xd5\xb2\x5\xf9\xf2\xe6\xc5\xd6\xd6\x96\xd8X\x15\a\x8f\x9c\xd2\xac#M\x9a\x34\xd4\xa8^\x8d\x39\xb3g\xd0\xb9\x63+V\xacZ\x3\xc4\xf5\x63\xd0\xb3\x17\xbc|\xf9J\xd3\xd6\xdf? \xc9\x98\n\x15,\xc0\x93\xa0g\x98\x99\x99k\xc5\x63mm\x5@\x81\x2\xf9\x39x\xe8\x18QQ\x9f\x46\x41]\xbc\xe8\xcf\xfb\xf\xe1)\xd2'B\b!\x84\x10\x42\b!\x84\x10\x42\x88\x7f\x17\x19\x31$\x84\xf8nVV\xe9Y\xb6x\xe\xde\r[\x92'\xb7#M\x1ay\xa7\xc8zML\xe2\x46\xe8\\\xba\xe4O\x86\f\x19pp\xc8J\xa3\x6\xf5X\xb3n\x13vv\xb6X[[\xd1\xa4\x45'\xad\x65\xb6n\xdb\xce\x91\x63\xa7\x38v\xf8w\xc2\xc2\xc2(_\xb1&\x95<*R\xbbv\xcd\xef\x8e\xc7\xcc\xcc\x94\x31#\a\xd3\xb3\xefP\x94J%\xce\xc5\x8b\x11\xfa\xee\x1d\xf\x1e<\xa4Y\xd3\xc6\x64\xce\x9c\t\x80\xf9\v\x16Q\xb1\xa2;\xb7n\xdd\x6>\x95u[\xb8p\t\x96\x96\x16\x64\xcf\x91\x9d\xe8\xa8(N\xff}\x16\x97\x12\xc5\x1(Z\xa4\x30&\xc6\x86L\x9e\x32\x95\x9a\x35\xab\xf3\xf0\xe1#N\x9f\xf5\xc7\xce\xce\x36\xd1\x98\xea\xd6\xad\xcd\x92\x65\xab\xe8\xd2\xb5'\xdd\xbbw&]\xbat\\\xbbz\x8d\x12%\x9c\xc9\x91#;\xf5\xbd\xeb\x31s\xf6\x42\xfa\xf5\x1f\x44\x83\xfa^\xbcz\xf5\x9a\xb5\x1bv|w_\b!\x84\x10\x42\b!\x84\x10\x42\b!\xfe\x9d\x64\xc4\x90\x10\"E\x14)\\\x90vmZ\xe0\x7f\x39\x80\x6\xdeuRd\x9di\xd3\xa6\x61\xce\x8c\t,Y\xb6\x8a\xcd\x9b\xb7\x2\xd0\xb5k'\x1a\xd4\xaf\xc3\xf4\x99sY\xed\xbb\x8eY\xd3\xc7\x63\x93\xc1\x12\x80;w\xee\x32`\xd0(&O\x1c\x85\xad\xad-9s\xe6\x64\xc2\xb8\x61\xf4\x1f\x34\x82\xc0\xc0')\x12S\xfd\xfa^\xf8\xae\\\xc0\xc9\x93\x7f\xd0\xa4y[\xa6O\x9f\xad\x19\x8d\x93#Gv|W\xce\xe7\x8f?O\xd3\x7f\xc0P\x9e={F\xcfn\xed\x34\xcf\x31\xca\x98\xc9\x8e\x43\x87\x8f\xd2\xa9s/\x86\x8d\x18K\x5\xf7\xb2\xf4\xe9\xdd\x3\x80L\x99\x32\xb1y\xe3*\x1e=z\xcc\xb0\xe1\x63\xb8\x7f\xef>}zv ]\xba\xb4\x89\xc6\x63nn\xce\x8em\x1b(X\xd0\x89Q\xa3\xc6\xd3\xb1Sw\xce\x9e;\x8fZ\x1d\x37J\xca\xd6\xd6\x96\xfd{\xb6\x3\x30`\xd0\b\xce\x9d\xbf\xc0\x94\x89#\xc8\x99\xdd>E\xfa\x43\b!\x84\x10\x42\b!\x84\x10\x42\b\xf1\xef\xa2\xb8y7H\x9d%S\xdc\xc3\xcf\x1f\a\xbd w\x8e\x8c?9$!DJ\t\x8f\x88{\xb6\xcc\xe3\xa0\x17||\x9f'\xe4\xf3\x36\xdfz.P\xab\xd5\x44\x44\x44`bb\xf2\xf5\xc1\n!\x84\x10\x42\b!\xc4W\xbau\xef\xa9\xd6\xef\x98\xa4~\xf7\b!\x84\x10\x42\b)%'\x84HA\n\x85\x42\x92\x42\x42\b!\x84\x10\x42\x88\x7f\x85\xd7!\xef\x88U\xa9\x88\x8e\x8a!6\x85\x9eK*\x84\x10\x42\b\xf1\xff\x44\xa9\x34\xc0Pi\x80\x89\x91\x11&&\x86\x9a\xe9\x92\x18\x12\x42\b!\x84\x10\x42\b!\xc4/#2*\x9a\xe7/C\xb0\xb2L\x8b\x9e\x42\x81\xd2\xc2\0}=\xa9\xb4/\x84\x10\x42\x88\xff\x9e\xe8\xe8\x18\xa2\xa2\x63\b\x8f\x8a\xe4\xdd\x87\xfXY\xa4\x41___\x12\x43\x42\b!\x84\x10\x42\b!\x84\xf8u<\x7f\x19\"%\xe7\x84\x10\x42\b\xf1KP*\rP*\r0\xc3\x98\xf\xe1\x11\x4\x5\xbf&K\xa6\f\x92\x18\x12\x42\b!\x84\x10\x42\b!\xc4\xaf\xe1u\xc8;\xac,\xd3\xfe\xec\x30\x84\x10\x42\b!~8S\x13\x63@\xc1\x9b\xb7\xef\x90\xb1\xd2\x42\b!\x84\x10\x42\b!\x84\xf8%\xc4\xaaT\xe8)\x14?;\f!\x84\x10\x42\x88\x9f\x42O\x1\x31\xb1jI\f\t!\x84\x10\x42\b!\x84\x10\xe2\xd7\x10\x1d\x15\x83\xd2P\x8a\xa7\b!\x84\x10\xe2\xd7\xa4\x34T\x12\x1d\x15-\x89!!\x84\x10\x42\b!\x84\x10\x42\xfc\x1a\x62U*\xf4\xf5\xe4R\x88\x10\x42\b!~M\xfazzq#\xa8\x7fv B\x88\x7f\xbf>}\a0`\xe0\x90\x64\xb7W\xa9T\x84\x84\x84\x10\x15\x15\x95\x8aQi[\xb4h\t]\xbb\xf7\x42\xadV\x3\x10\x1a\x1a\xca\x87\xf\x1fRe[?c\xffRSTT\x14!!!\xa8T\xaa\x4\xdb\xa4\x66\x7f\xa6\xb6/\x8f\x8do\x11\x13\x13K\xdbv\x9dX\xbdzM\nF\x96\xb8\xb0\xb0\x30\xe6/XD\xf5\x1auq+]\x81\x91\xa3\xc6\x10\x18\x18\x98\xe4r\x87\xe\x1f\xa1O\xdf\x1\x38\xbb\x94\xa5\x9eW#\x96-[\xc1\x87\xf\x1fP\xab\xd5\x1c\x39z\x8c>}\a\xe0\xe2Z\x8e\xfa\r\x9b\xb2m\xfb\xe\x62\x63\x63S4\xee\xd0\xd0P\xe6\xce\x9dO\xae<\x85\t\xe\xe\xd6L\x8f\x8e\x8e\xe6\xb7\xdf\xf7P\xcc\xb9\x34G\x8f\xfa}\xf3\xfa=\xab\xd4\x62\xf9\xf2\x95I\xb6\xbbs\xe7.6\x99\x1c\xb9{\xf7\xee\x37oK\b!\x84\x10\x42\b!\x84\x10\xe2\xdfH\x12\x43\x42\x88\x1f.44\x94\xdc\xf9Kp\xfe\xfc\x85\x1f\xb6M\xb5\x1a\xd4\xaaO\x17\xfe\xdbw\xe8\xc2\xaaT\xba\x88\xff\x33\xf6/5\x9d?\x7f\x81\xdc\xf9K\x10\x1a\x1a\x9a`\x9b\xd4\xec\xcf\xd4\xf6\xe5\xb1\xf1o\xa0V\xab\x19\x38x\x18\xc7\xfcN\xd0\xb5KG\x6\xf\xec\xcb\x83\a\x8fh\xda\xbc-\xa1\xa1\xef\x12\\n\xfa\x8cY\f\x18\x38\x82\x82\x5\v0y\xe2\x18Z4o\xc2\xed;w144\xe2\xb7\xdf\xf6\x30r\xd4x\x8a\x14.\xc4\x98Q\xc3p\xca\x97\x97.\xdd\a\xb2i\xf3\xd6\x14\x89\x39<<\x9c\x8d\x1b\x37S\xa6\xbc'\xe3&\xcd\"\xf4]\\\"Q\xa5Rq\xfc\xf8\t\xeaz5\xa2]\xc7\xde\x4\x6=O\x91\xed%\xe5\xea\xd5k\xd8\xd9Z\x91-[\xb6\x1f\xb2=!\x84\x10\x42\b!\x84\x10\x42\x88\xff\x17RXW\b\xf1K\xe8\xd2\xa5\xe3\xcf\xe\x41\xfc\x9fJ\x89\x63\xc3\xc0@\x9f\x15\xcb\x17\xa7@4\xc9\xf3\xec\xd9\x33\xb6n\xdf\xcb\xaemkpss\x5\xa0T)7\x9c\n\xbbq\xfd\xc6\rJ\xba\x94\x88\xb7L@\xc0\x15\x66\xce^\xcc\x9f\xa7\xe\x92\x35K\x16\xcdt/\xaf\xba\0\x94/_\xe\xf\x8f\n\x98\x99\x99\x1P\xadZ\x15\x94\x86\x86\xac\xf6]G\xd3&\x8d\xbe*\xbe\xc5K\x96q\xed\xdauf\xcf\x9a\xae\x99v\xf9r\0k\xd7ob\xfa\xd4\tXXXP\xa3vc\0\x42\x42\xde\x32l\xc4X:wl\xcb\xaa\x15Kp*\xec\xf6u\x9d\xf1\x8d\xce\x9d\xbf@\xcd\xea\x9e\xe8\xeb\xeb\xff\x90\xed\t!\x84\x10\x42\b!\x84\x10\"\xf9|\xa6\xce\xe4\xef\x33\xe7\0(\xe9\xe2\xcc\xc0\x1}~rD\x9f\f\x1d>\x8a\xd3\xa7\xcf$\xab\xad}\x96,\xf8\xae\\\x92\xca\x11}=\x19\x31$\x84Hq\x9eUj\xb1x\xc9\x32\x86\f\x1d\x81[\xe9\n\xb4h\xd9\x96\v\x17.\x2\x10\x1a\xfa\x8e\xdc\xf9\xe3.Z\xd7\xf1n\x81M&G\xfe>s\x16\x88+\x8d\x35s\xd6\x1c<*U\xa7N\xbd\x86l\xda\xbcUS\xc6*88\x18{\x87|l\xda\xbc\x95\xae\xdd{\xe1\xecR\x96\xfe\x3\x6\x13\x14\xf4T\xb3\xddW\xaf^1\xc5g\x1a\x15<\xaaQ\xa8\xa8+\x9d:w\xe7\xf1\xe3\xb8\xd2Z\xd3\xa6\xcd\xa4U\x9b\xe\0\x34k\xde\x1a\xbf\x93g\x18=n\x1a\x36\x99\x1cY\xbc\x64\x19\xcb\x97\xaf\xa4@a\x17\"##5\xeb{\xf0\xe0!6\x99\x1c\xb9~\xe3\x86\xd6\xfe={\x16\xcc\x9c\x39\xf3\xf1\xf2nL\xa1\xa2\xaet\xec\xd4\x8d\x80\x80+I\xee\xdf\x97\x8e\x1e\xf5\xa3]\xfb\xce\x14*\xeaJ\xdbv\x9d\xf0\xf7\xbf\x8cJ\xa5\xc2&\x93#{\xf6\xee\xd3\xb4\xbb\x7f\xff>6\x99\x1c\xb9y\xeb\x96\x66\xb9*\xd5js\xec\x98\x1f-Z\xb6\xa5\x82G5\xc2\xc2\xc2\xf0\xacR\x8b\xad\xdb\xb6\x33\x61\xe2\x14J\x97\xf5\xd0\x8c\xf4\xf8\x9e~\xfd\xfb\xccY\xeax\xb7\0 w\xfe\x12\xd8\x64r\x8c\x37\"EW\x7f~\xec\xf3\xc9S\xa6\xb2j\x95/U\xaa\xd5\x66\xc0\xc0!\x84\x87\x87\xb3\x61\xe3&Z\xb4lK\xa1\xa2\xae\xd4o\xd8\x94={>\xed\xeb\xd1\xa3~\xd4\xa8\xe5\xc5\xda\xb5\xebi\xd2\xac\x15\xa5\xcbz0s\xd6\x1c\xad\x32u7o\xdd\xa2o\xbf\x81\x38\xbb\x94\xc5\xadt\x5\x86\xe\x1bItt\xb4\xe6\xd8[\xb4h\t\x83\x87\f\xa7\xa4\x9b;\xad\xdat\xe0\xca\x95\xab\x9c={\x8e\xde}\xfa\xe3\xecR\x96^\xbd\xfb\xf1\xe8\xf1\x63\xcd\xfa>?6\x92Z\x7fR\xdb\xfe\xbc\x84\xd9\xcb\x97/\x19;n\"e\xcaU\xa2~\xc3\xa6l\xde\xb2U\xab\x1c_b\xef\x13\x80\xbfN\xffM\xcd\xda\xde\xdc\xbf\x7f?\xde\xb1\x63ll\x2\xc0\x93\xa0 \xcd\xb4\xd0\xd0\xb7\0\x64\xb4\xb3\x8d\xd7\x1e`\xe3\xa6-\xb4m\xddX+)\xf4\xb9t\xe9\xd2j\x92\x42\x1f\x65\xb4\xb3%,\xec\xbd\xe6\xb5J\xa5\x62\xcb\x96m\xd4o\xd8\x94r\xee\x9eL\x9f\x31\x8bw\xef\xe2\x8fP\x8a\x8d\x8d%2R\xbb\x94\xa2\x8bK\tv\xed\xd8L\xe5J\x1e\x18\x1a\x1aj\xa6\xa7Oo\xc9\xb1#\xfbh\xde\xbc)\xe9\xd2\xa5\xd5\x19\xdbGG\x8f\xfa\xe1\xdd\xa0\t\xdb\xb6\xef\xa0y\x8b\x36\x94\xafP\x85\xb9\xf3\x16\x10\x11\x11\xa9\xd5\xce\xffr\0#F\x8e\xd1\xd9\xaf\x1f\xf7\x63\xdf\xfe\xc3\xb8\xb8\x38\x3qe\xec|\xd7\xac\xa3v\x9d\xfa\xe4u*N\xc3\x46\xcd\xf8\xf3\xcf\xbf\x12\x8d\x45\b!\x84\x10\"9\x82\x9f?\xe7\xd5\xabW\xc9j\xabR\xa9p\xc8\x91O\xf3\xcf\xd9\xa5\x14={\xf6\xe6\xcc\x99O\x17\x9e\x8e\x1f?\x8e\x43\x8e|\xbc\x7f\xff>\x91\x35i\x8b\x8a\x8a\xe2\xed\xdb\xb7\x89\x96\x86\xfe\xd2\xcd\x9b\x37\x19;n<5j\xd6\xa6\x66\xad\xba,X\xb0@\xe7\xf7>!\x84\x10\"\xb5\x1c>\xe6\xc7\xb9\xf3\x17\x38w\xfe\x2\x87\x8f\xf9\xfd\xecp\xb4<}\x16\xcc\xdd{\xf\x92\xf5/\xf0\xb3kP\xffOd\xc4\x90\x10\"\xc5]\n\xb8\xc1\xa5\x80\x1b\xcc\x9a>\x9eJ\x1e\x15\xd8\xfd\xdb\x1e\x1a\x36i\xcdI\xbf\x3\x64\xc8\x90\x81-\x1b\x96\xd3\xa0I;\x86\f\xec\x41\xe5J\x1e\x64\xcd\x9a\x85\xd8\xd8X\xbav\xeb\x85\x9d\x9d-\xe3\xc7\x8f\xe2\xd1\xc3G\xcc\x9a=\x9f\xd8\xd8X\xcdh\x85\xa8\xe8\x18z\xf4\x1e\xc2\xb2\xc5\x33\xa9V\xd5\x93\x15+|\xe9\xde\xa3\xf\x9b\x37\xad\xc3\xc0@\x9f\xbe\xfd\a\xa3P(\x18=r\bj\xb5\x9a[\xb7\xef\x90.]\xbax\xf1\x8d\x1e=\x9c\x43G\xabQ\xa2xA\xa6L\x1a\x87\x95Uzbbb\x19\x32\x62\"\x17.^\xc2\xcd\xb5$\0\xc7\x8f\x9f\xa0\xb4k1\xf2\xe6\xc9\xa3\xb5|hh(\xaf^\xbd\xa2i\xd3\x86X[Y\xb1w\xdf\x1\x1a\x34n\xc5I\xbf\x3XZZ\xea\xdc\xbf/\xed\xdc\xb5\x9b\xd1\x63&3|h\x7f\xda\xb6m\xc5\x83\xfb\xf\x30\x30H\xfe)\xf9\xa2\xffu\xc6O\xf0\xa1u\xeb\x66\x98\x9b\x9b\x63nn\xe@\xd7\x1e\x83\xe8\xd1\xb5-\xfd\xfb\xf5\xa4\x80\x93\xd3w\xf7k\xbe\xbcy\x18\x32\xb0\a\x93|\xe6\xb2\x65\xc3r\xac\xac\xac\x30\x35\x35M\xb2??\x9a\x31{\t^u\xaa\xd2\xa1}k\xec\xec\xecP(\xf4\xb8x\xd1\x9f\xca\x95=h\xd7\xae\x35\x37\xae\xdf\xa0M\x87\x9eZ#_\xce\x9e\xf\xc0*\xbd%\xed\xda\xb4\xe2\xe9\xb3\xa7L\x9f\x31\x1f\xb5ZM\xdf>\xbdx\xf3&\x4\xef\x6\xcdi\xdc\xd0\x8b\xb9s\xa6\x11\xf2&\x84\x17/_\xa2T*\xb5\x8e\xbd\x39\x33&\xe0\xe1Q\x81\xad[wP\xd1\x33nD\xcc\xe2\x5\xd3\xa8\\\xd9\x83\xd5\xab\xd7\xd2\xb9s\xfv\xed\xdc\xa2Y\xee\xa3\xc4\xd6\x9f\xd4\xb6?\xf7\xee\xdd;\xeaz5\xa6|\xb9\xd2L\x1c?\x8a\a\xf\x1f\x31h\xc8\x18^\xbfzM\xe7\xce\x1d\xb5\x62\xd5\xf5>\xc9\x98\xd1\x8e\xa7\x41O9\x7f\xf1\n\xaf_\xbf!{\xf6\xecZ\xeb\xb7\xb4\xb4`\xea\xa4\x91\xf4\xee;\x8c\xd7\xaf\xdf\xa0P(\xd8\xb1\x63\x37\x8b\xe7O#k\xd6\xac:\x8f\x19\xff\xcbW\xa8\xefU\x87\xad\xdb\xb6\xe3\xeb\xbb\x9eW\xaf\xdfP\xb7v\r:ujO\xda\xb4\xba\x13\x32\x7f\x9d>C\xd5*\x95\x34\xaf\x17/^\xc6\xc1\x43G\xe8\xd5\xb3+\x11\x11\x11\xac^\xb3\x9e\x87\xfG1{\xd6t\x14\n\x85\xceu|\xa4P(\x12\x1c\x9d\xa3\xab\xf\x13r\xf2\x8fs\xc4\xc4\xc4\xd2\xbd['\xde\xbf\x7f\xcf\xd8qSx\xfe\xfc\x5\xe3\xc6\x8e\x2>\xf5\xeb\f\x9f\x31\xb8\x97/\x1b\xaf_\x1\x1e=~\xcc\xa3\xc0g\x14,\xe0\x4\x80\xaf\xefZ\x16.^\xc1\xf8q#H\x97\x36-w\xef\xde#}\xfa\xf4\t\xc6 \x84\x10\x42\b\x91\x1c\xef\x42\xdf\xd1\xb2uG*{T\xa0\x7f\xbf^\xc9^\xae{\x97v\x94+W\x96\xf\x1f>p\xf2\xe4)\x1a\x34n\xc5\xca\x65\xf3\xa9X\xb1\xe2\x37\xc5q\xf1\xe2\x45\x1a\x36i\xcd\xe5\x8b\xa7u\xfe>\xfa\xd2\xfd\xfb\xf7\xa9\xe7\xdd\x98\xae\x9d\xdb\xd3\xbbW\xfn\xdf\xbe\x8d\xef\x9a\r\xdc\xbb\xf7\x80\xa9S\xa7$\xf9\xbd\xefsO\x9e<\xe1\xc6\x8d\xdbxx\xb8\xeb\x9c\x7f\xe4\x88\x1fy\xf3:\x92\x39s\xe6\x64\xafS\b!\xc4\x7f\xd3o{\xf6r\xe1\xc2%\xda\xb6n\xc5\x85K\x97\xb8\x7f\xf7\xd3\x8d\xb2\xf7\xef\xdeg\xdb\xf6\x9d\xb8\x94(\xc1\xf2\x95\xab(^\xbc(\xb5jT\xff\xe1\x31\xe\x1d>\x8a\x86\r\xea\x3\xd0\xacY#\xaaW\xad\x92h\xfb\v\x17\xfd\xd9\xb9s\xd7wm3\xb5>K%1$\x84HqN\xf9rQ\xd2\xa5\xb8&\xf1P\xa0@\x1\x36l\xde\xcd\xa5K\xfeT\xabV\x85\xc2\x85\v\x1\xe0Z\xd2\x85\x2\xff\\\x98\xfd\xe3\xcf\xbf\x38~\xf2\x34\xd7\xaf\x9c\xc5\xd4\xd4\x14\x37\xd7\x92\x44\x44\x46\xb2\x62\xa5\xafV\x19\xab\xcd\x1b\x96\xe3^\xbe\x1c\0\xe6\x66\x66\x34j\xd6\x81\xa0\xa7\x41\x64\xb4\xb3\x63\xdf\x1?f\xcf\x18O\xf9\x7f\xe6\xbb\xbb\x97\xd7\x19\x9f\x63\xae\\\xb8\x97u\xc1\xdd\xbd\x9c\x66\xfb\0ukyr\xf0\xe0\x61\xdc\\K\xa2V\xabY\xbfq\v\x1d\xda\xb7\x8e\xf7\xc3'wnG\xc6\x8c\x19\xa9y\x9d/_>V\xad\xd9\xc2\xb5k\xd7(_\xbe\x9c\xce\xfd\xfb\\xx8#GOd\xda\x94\xf1xz\xc6]t/]*\xae|\xd6\xd7\xdc\xc5\xb7l\xe9\xfcx\t\x3\x80\x11\xc3\x87h\xfe\xfe\xde~\xcd\x9a%\v\xae%]\0(\\\xb8\x10\x16\x16\x16\xf1\xb6\x97P\x7f~4o\xeeL\xad\xa4\x97\xcf\x94\x89\x9a\xbf\xcb\x97+\xcbo{\xf6s\xfa\xef\x33\x9a\xc4\x10\xc0\xfcy\xb3H\x93&\r\0\xc1\xc1/\xd8\xb8i\x1b}\xfb\xf4\"00\x90\xe7/\xdeP\xafnm\x9c\x9c\xf2\xc7\xdb\x96S\xbe\\\xb8\x96t\xa6q\xe3\x86\0\xe4\xc8\x9e\x9d\x1d\xbb\xf\xb0t\xe1\f\xea\xd4\xa9\x5\x80\x85\x85\x5\xf5\xea\xb7\xe4\xd1\xa3G\xe4\xcc\x99Sk\xf9\xc4\xd6\x9f\xd4\xb6?\xb7}\xc7.,,\xd2\x31v\xccH\xf4\xf5\xf5)\a\x98\x99\x99\xd2\xab\xcfP\x1a\x37n\x88\x85\x85\x45\xa2\xef\x93\x8c\x19\xed\xf0\xf2\xaaK\xa5J\x1e\xa4M\x9b\x46\xe7\x36\xea\xd6\xad\xcd\xb1\xe3'\x19>j2\0M\x1b\xd5\xc1\xc3\x43\xf7\xc5\x2\x95J\xc5\xf9\x8bW8s\xee\x32-\x9by\xd3\xa3{gbU*f\xce\x9a\xc7\xfd\x87\xf\x99?wV\xbc\xe3\xfc\xcf?\xff\x62\xff\x41?N\xffq\b\x80\xd7\xaf\xdf\x30v\xe2t\xf6\xfe\xb6\x99\xa2\x45\n\x3`gg\x87g\xf5\xfa\f\x1d\x32\x88={\xf6\x32\x64\xc4\x44\xadul\xdf\xe5\b@\xab\xe6\xf5\x99\xea\x33)\xd1>\xfb\x1a\xabV,\xc1\xd2\x32\xeeXLoiI\xfd\xc6m\xe9\xd4\xb1=\xf6\xf6\x99\xc9\x9d\xcb\x81\x2N\xf9h\xde\xbc)\x10\xbf_\x1\xae]\xbb\xae\xf5|\xa1\xf3\x17/Q\xa6tI\xaaxVF\xa1Ph\x1d\x8b\x42\b!\x84\x10\xdf\"*:\x9aN]{b\x93\xc1\x9a^=\xbb}\xd5\xb2\xb9\x1csQ\xb2\x64\xdc\xcdj\x15*T **\x8a\x89\x93|\xbe\x39\x31\xf4\xb5\x1c\x1c\x1c\x38zx\x1fvvq\xdf\x9d*W\xae\x8c\xa3\xa3#\xed;\xf5\x64\xe0\xc0\xfe\xd8\xd8\xd8${]7n\xdc\xa6k\x8f>\xcc\x9e\xe9\x43\xd5*\x95\xb5\xe6\xed?p\x88^}\x6\xb2`\xeeLI\f\t!\xc4/\xee\xc3\x87p\xc6\x8f\xf7\xe1Yp0+V\xc6\x7f\x86uTt4}\xfb\x7f\xba\xde\xb5o\xdf!<*T\xc0\xd4\xd4\xe4G\x86\xc9\xe9\xd3g\xf0\xa8P\x1\x80\x9c\x39rP\xa6t\xe2\xe5\xf0##\"\xbf;1\x94Z\x9f\xa5\x92\x18\x12\x42\xa4\x38\xa5\x81\x1\x8e\xb9>]p\xb7\xb5\xb5!\xbd\x65ZB\x13)=p\xe7\xf6\x1d\xc2#\xa2\xc8\x96\xab\xb0\xd6t3Sc\xad\xd7\xe6\x9f\x95\xbarpp\0\xe0}\xd8{\x94J%#\x86\xf4\xa6\xef\x80\x91\x9c\x39s\x8e\xca\x95=p/_.\xde\xe8\x96\xc4\x34h\xe0\x45\xb7\x1e\xfd\x19\x38\xa0/\xf\x1e>\xe4\xf2\x95\x9bTH \xb9t\xf5\xea\x35\xf6\xed?\xc8_\xa7\xff\xe6\xc2\xc5\xb8\x32r\xe1\x11\x11\xc9\xda\xce\xe3\xc7\x81<\v~E\xde|y\x92n\x9c\b]?\xc8&\x8d\x1b\xaa\xf5\xfa{\xfb\xf5{U\xab\xe2\x1eo$\xd4\xb3g\xc1\xec\xd9\xb3\x17\xbf\xe3'\t|\xf2\x94\xab\xd7\xef\xe0\xe6\xea\xa2\xd5\x46O\xefS\xa5\xd3\xdc\x8e\xb9x\xf0\xe8)*\x95\nG\xc7\\\xd4\xaa\xee\x41\x83\xc6\xadh\xda\xd8\x9bJ\x1e\x15(Q\xc2Y3\x12\x45i`@\xae\x9c\x39\x34\xcb\xda\xdb\xc7}(\x1a\x19\x1bi\xa6},\xa5\x16\xf6\xfeSy\xba\x8f\x12[\x7fR\xdb\xfe\x9c\xbf\xff\x65\xca\x95-\xa5\x35\xafx\xf1\x62\x44\x45\xc7\xf0\xf8q \x16\x16\x16\xc9z\x9f$\x94\x14\n\r\r\xc5\xbb\x41S\xdc\xcb\x97\xe5\xdc\xdf#\x88\x8c\x88\x64\xe1\xa2%\xb8W\xac\xca\xa6\x8d\xabq\xcc\x95+^\x7fZZ\xa4\xe5\xe5\xab\x10\xa6\xfaL\xd2$\x81\xeclm\xf1\xac^\x9f\x41\x3\xfa\xe1\xe0\xf0i\xa4QPP\x10\xbd\xfb\xe\x62\xfe\x1c\x1f\xec\xed\xed\x1x\xf8\xe8\x11\xb1\xb1*\xaaT\xaf\x1f/\x9e\xb0\xb0\x30\xdc\xdd\xcb\xb3\x65\x43\xdc\xfe\x34h\xd2\xe\x80-\x1b\x96\x3`ii\xa9s?\xbe\x95\xa1\xe1\xa7\x11\x46\x1f\x93t\x8f\x1f?\xc6\xde>3\xa6&&\x94p.\xa6\x99\xaf\xab_\xcf\x9d\xd3~\xbeP\xc3\xfa^t\xec\xd2\x9bg\xcfZQ\xabVu*W\xf6\xc0&C\x86\x14\x8dY\b!\x84\x10\xffMQ\xd1\xd1\x9c={Ns\xa3\x17\xc4\xdd\x94\x33`\xc0P\xde\xbc\ta\xcb\xa6\xb5(\x95\xdfw\xe9\xa5l\xd9\x32\xacY\xbf\x95\xb7o\xdf\xea\x8e!*\x8au\xeb\xd7\xb3o\xef~\xc2\xde\xbf\xa7jUO\xda\xb6i\x83\xb9\xb9\x39g\xcf\x9e\xa3\x61\x93\xd6\0\x14*\x1aw\xf3\xcb\x15\xff\x33\x9a\x9b\xb0t\xd1\xd3\xd3\xd3$\x85>\xb2\xb2\xb2\x2\xd0\x94QN.\xf\xfwf\xcf\xf4\xa1W\x9f\x81Z\x17\xb4>^\xc8\x9a=\xd3'\xc1;\xa0\x85\x10\x42\xfc:\x96,]\xce\xb3\xe0\xe0x\xd3-,,@\xad&\xe4\x8b\xcf\xc0g\xc1\xc1,^\xba\x82>\xbd\xbe\xee\xe6\x8b\x7f\xa3\xd4\xfa,\x95\xc4\x90\x10\xe2\x87\xf8\xfc\x42\xbf.\xe6i\xe2J\xa1\x9d\xf9\xeb\x30\x6\x9f]LO\xacL\xc1\x97\xb3z\xf4\xe8\x86\xb7\xb7\x17\xc7\xfc\x8e\xb3\x62\xa5/C\x87\x8d\x65\xc3\xfa\x15\xe4\xcb\x9b\x37Y1\x96)]\n\x3\x3\x3\xce\x9e;O@\xc0\x15Z5o\xa0\xf9\x1\xf4\xb9\xf3\x17.R\xbf\x61KfL\x1b\x8fW\xbd:(\x95J\x8a\x97\xac\x90\xec:\xdf\x9avju\xc2\x8d\x12\x99\xf5\x35R\xa2_S\xd2\xeb\xd7\xaf\xa9S\xaf\x11\x8d\x1by1t\xe8@\xd2[ZR\xc4\xb9\x1c\x37n\xdcLx\xa1\xcf\xe2\x31\x36\x36\x66\xd9\xd2\x85\\\xbf~\x83\x63~\xc7\xe9\x37`(6\x19\xacY\xbdj\xa9\xcerh\xba\xf6\x33\xb1\xfdKj\xfd\xc9\xdd\xf6\x87\xf\xe1\xc4\xc4\xc4jMS\xfe\x93 K\xaclZR\xef\x93\x8f\xf6\x1f\x38H\xe0\x93g\f\x1e\xd4_\x93x\xf3\x99\x32\x89\x86\x8d\x9a\xb1l\xd9J\xa6L\x9e\x10o\x99\x12\xce\x45\xb0\xb6J\xaf\xd5'\x19\x33\x66\x4\xe0\xf5\x9b\x37\x9a\xc4PHH\b\x9d\xbb\xf4\xa4q#o\xcd(+\0\xb3\x7f\x92\xac\xab\x97\xcf\xa3`A\xed\x91\x61\xb6\xb6\xb6(\x95Jr\xfe\x93\x94\x1b=\xa2?\x97/_\xd1\x8c\xdeKM\x1f\xfb\xcc\xd0\xc8(\xc9\x36\0j\xb5\x9a\x83\x87\x8e\x32\xe0\xb3r.\xee\xee\xe5\x39\x7f\xe6\x4'N\x9e\xe2\xc0\x81\x43\f\x1a\x32\x86\xf9s|\xb4\xf6_\b!\x84\x10\xe2KQ\xd1\xd1t\xeb\xde\x97\x43\x87\x8f\x30\xcdg\x2\xf5\xbd\xeb\x1\x30\xd9g:g\xcf]`\xe7\xf6\x8d\x98\x9b\x9b%\xb1\x96\xa4\x45\x44\x44\x90\xc1\xdaRg2G\xadV3b\xc4H\x82\x9e>\xa5K\x97NDDF2k\xd6\x1c._\xe`\xc9\xe2\x45\xe4\xc9\x93\x9b\xfe}\xba\x31m\xe6|\xd6\xae^\x8a\x95U\xfa\xaf\xbay\xee\xa3\xabW\xaf\x92/O\xcex\t\xa3\xe4\xa8Z\xa5\xb2\xd6\x5- \xde\xc5-!\x84\x10\xbf\xb6\x12%\x9c\xb1\xb1\xc9\xc0\xf3\xe7/4\xd3zv\xefL\x9f\xde=\0\x98:m\x16\v\x16-\xd5\xcc\xcbhg\x87k\xc9\x12I\xae\xf7\xc9\x93'\x9c<\xa5\xfb\x19\xc2\x65\xcb\xb8\xfdkF\xac\xa6\xc6g\xa9$\x86\x84\x10?\xdc\xc7\v\xd3\x9f\xdfm\xf6q\x84\xc3\xf3\xe0\xe7\xb8\xb8$}bOH\xa6L\x19i\xd6\xb4\x31\x8d\x1a\xd6\xa7z\x8dz\x1c:xDgbH\xa1\xd0#**Jk\x9a\x89\x89\tm[7c\xf7\xee\xdf\xf9\xe3\xcf\xbf\x99\x31}\xb2\xcem\xfcq\xeaO\x8a\x16v\xa2^\xdd:@\xdc\xf\x35\x80\x88\xf0\x88\x4\xf7\xef\xcb\x18\x1\xae_\xbf\x19\xefy0zzzd\xb5\xb7\xe3\xce\x9d\xbb\x9aiQ_yW\xde\xe7R\xa4_\xff\xd9\x9f\x98\x98\x98\x44\x9a\xc4\xefO]\xae^\xbd\xce\xfd\x87Oh\xd5\xb2\x5\xe9\xd3\xc7\x8d\"\x89\x8dUq\xf0\xc8\xa9\xaf\bGA\xfe\xfc\xf9\xc8\x9f?\x1fuj\xd7\xa4\x98K\x5\xfc\xfd\x3([\xb6t\xb2\xd7\xf1\xad\xebO\xee\xb6\v\x16tb\xeb\xb6]\xf4\xef\xd7\x1b\x43\x43\x43\0\xae]\xbf\x81\x45:s\xb2\x64\xb1Ov,\xef\xdf\xbf\xc7\xcc,\xfe\xc5\x84\xc8\xc8H\xc2\xc3#\x88\x88\x88\xd0<_\xca\xc0@\x9f\xec\xd9\x1d\x34\xc7\xe3\x97\xcb\xd7\xaaQ\x8d\xd1\xe3&3*4T\x93\xc8\xbar\xf5*\0Y\xfe\x19Y\x15\x12\x12\x42\xa7\xce=(U\xaa$\xbd{\xf5\xd0\xda\x66\xe6\xcc\x99\xb1\xb6\xb2\xe0q` \xd5\xaa%^C7\xb5=z\xf4\x98|\xf9\xe2\xde\xd7\xb7n\xdd\xc6Pi\x80\x43\x2\xcfV\xfaRPP\x10\xb7\xee<\x8cW\xf6\x30M\x9a\x34\xd4\xa8^\x8d\x1a\xd5\xab\x61\x63\x63\xc3\x8aUk$1$\x84\x10\x42\x88\x4}L\n]\xbe\x1c@\xbf\xbe=\x19\x38x\x4\0\xa1\xa1\x61l\xdc\xb8\x8dm[\xd7\x63\x63\xf3}#\x90\x63\x63\x63y\xf4\xe8\x11+V\xae\xa6K\xa7\xf6:o\"\n\b\b`\xe3\x96]\x9c\xf9\xcb\xf[[[\0r\xe5\xcc\x45\xa5*\xb5\x38w\xee\x1c...\x9a\xdf\x1\x85\n\x15L\xd6\x33\x86\xbe\xf4\xf2\xe5K\xa6\xcf\x9c\xcb\x34\x9fI\t>32)\x9f_\xd0\x2$)$\x84\x10\x42K\xe9R\xae\xec\xdf\xb3\x83\x62%\xca\0`\x91.\x1d}z\xf7\xd0|\xf6\xf5\xef\xd7\x8b\x35\xeb\x37\xf2.4\xae\x1a\xc8\xfe\xbd;t>\xee\xe0K\x19\x33\x66\xe4\x92\xff\x65\x36l\xdc\xa2\x35\xbdi\x93\x86\x34l\xe0\x95\xc2{\x91\xbaR\xfa\xb3T\x12\x43\x42\x88\x1f.m\xda\xb4\x38\xe6\xcc\xca\x8e\x9d\xbbI\x93\x36-\x19\xac\xad(T\xa8 -\x9by\xd3\xb5{_\xc6\x8c\x1eJ6\a\a\x2\x3\x9f`ll\x94\xacQ\a111\x8c\x18\x39\x86\xd2\xa5\xdc\xc8\x98\xd1\x8e\xe7\xcf_p\xed\xc6\x1d\xfa\xf4\xce\xa5\xb3}\x81\x2\xf9\xd9\xbb\xf7 \xa5K\x97\xc2\xcc\xd4\x94\xfc\xf9\xf3\x1P\xa3zU\xca{\xc4]\fv.^L\xe7\xb2\xd9\xb2\x39pj\xf2,\xd6\xae]O\xf6\x1c\xd9\xd9\xb5\xeb\x37\0\xac\xac\xad\x12\xdc\xbf\x8f\xe5\xb8 ntE\xd7\x8e-\x19\x36\x62,*\x95\x8a\xcc\x99\x33q\xf7\xde=\xf2\xe4\xceM\xfe\xfc\xf9h\xd4\xa0\x1ek\xd6m\xc2\xce\xce\x16kk+\x9a\xb4\xe8\x94\xfc\xce\xfd\xc2\xf7\xf6+@\xe6\xcc\x99\0\xd8\xb2\x65;..\xce\xe4\xc9\x93[\x93\x8c\xf8(\xa1\xfeLh]\xf3\x17,\xa2\x62\x45wn\xdd\xba\r@\xbb\xd6\x8d\x93\x15\xcb\xbd{\xf7\xd9\xb8i\v%K\x96\xc0\xc2\xc2\x82\xb3g\xce\xa2\xaf\xafG\xd6\xacY\x92\xb5\xfc\xf7\xac\xffk\xb6\xdd\xa0\xbe\x17s\xe7/\xa5_\xff\x41\x34h\xe0\xcd\x9b\xd7o\x18\x33n2\xe3\xc7\xe\xd3\x99\xe8\xd1\x65\xe7\xae\xddt\xe9>\x80\xbd\xbb\x37Q\xb4h\x11\xady\x15\xdc\xddI\x97n.]\xba\xf6\xa4i\x93\x46\xa4Ic\xce\xd5k\xd7Y\xb3~;\xbb\xb6\xad\xd1\xb9|\xd5\xaa\x9e,]\xbe\x8aN]z\xd0\xb2yS\xd4\xa8\x99\x35k>\xc3\a\xf7\xc6\xda\xda\x9a\x90\x90\x10\x1a\x35i\xc9\x45\xff\xeb\xf4\xea\xd9\x95\xb3\xe7\xcek\xb6\x97=\x9b\x3\x36\x36\x36\x8c\x19\x39\x98\x9e}\x87\xa2T*q.^\x8c\xd0w\xefx\xf0\xe0!\xcd\x9aj\xff\xffU\xad\xe2I\xd9\x32)\x93\xa8\xd3\xa5u\xdb\xce\f\x1f\x36\0#C#&L\x9a\xca\xd0\xc1\xbd\xb1\xb6\x8e?3\x8fU\xb5\0\0 \0IDAT\xbaO\x97k\xd7\xae\x93\xc9.\x3\xd9\xb2\x39h\xa6-\\\x18\xf7\xcc\xa2\xec\x39\xb2\x13\x1d\x15\xc5\xe9\xbf\xcf\xe2R\xa2xj\x85/\x84\x10\x42\x88\x7f\xb9\x8fI\xa1\x80\x80+l\xda\xe8K6\x87\xac\x64\xcah\xc7\xc0\xc1\xc3\x31\x30P\xb2\xd6w\x19\x8e\xb9r$\xbd\xa2\x4\xf4\xee;\x84\xde}?=Ga@\xdf\xee\xb4h\xd1\\g\xdb\xdb\xb7\xef\xe0\x94/\x97&)\x4q\xe5\x91\x33\xdaZs\xef\xde=\\\\\\t.\x97\\\x91\x91\x91\f\x1b>\x2\xaf\xba\xb5\xa8X\xb1\xc2w\xadK\b!\x84H)\xc9}F\xb7\x9e\x9e\x1e\x13\xc7\x8f\x46\xa1P\xb0~\xc3\x66\0\x9a\x35m\xc8\xf8\xb1\xa3\x92]\xb5\xe5\xbfJ\x12\x43\x42\x88\x1fN\xa1P\xb0\x64\xd1\\\xc6\x8e\x9b\x44\x8f\x9e\xfd\x18<\xb0/\xf6\xf6\xf6L\x9c\x30\x96u\xeb\x37\xb2\x62\xa5/\xb7\xef\xdc\xc7\xb9XaZ\xb7\xd2\xfd\x3\xe8KQQQd\xcb\xe6\xc0\xca\xd5k\xb8z\xed\x16\xb9rfc\xfa\xd4qT\xad\xea\xa9\xb3}\x97\xce\x1dx\xfd\xfa\x35\x9d:\xf7\xa4\x41\xfd:\x9a\x44\x46\xde\xbcy\xc8joG\xfbv-\x13,\xf9U\xbdzUF\r\xf\x64\xfe\xc2\xa5\xa4K\x97\x96\xa6M\x1aR\xa1\xdc\xe3$\xf7\xefs\x83\a\xf\xc0.\xa3\x1ds\xe7-\xe4\xf9\x8bW\x94.\xe5\x42\xde \x13\xe2\x8d\xc2J\xa8?\xbf\x94#Gv|W\xceg\xd6\xec\xf9\xec\xddw\x90\xda\xb5\xaa\xd1\xb3[\xbb\x64\xc7\x62hh\x88\x42\x1>Sg\xf2\x38\xf0)%\x9c\x8b\xb0\x63\x8b\xaf\xd6\xf3q\xbeGb\xeb\xf\f|\x92\xecm\xdb\xd8\xd8\xb0\x7f\xcfv\xe6\xce[@\xdf~Cpr\xca\xcb\xe4\x89\x63\xf0\xf4\xac\x94\xecXl2d\xa0X\x11'\x9dwu\xda\xdbg\xe6\xb7\x9d\x9bY\xb5\xca\x97i\xd3g\xf3.,\f7\xd7\x12\xec\xff}3\xc5\x8a\x15\xd5\xb9\xbc\xb9\xb9\x39\x1b\xd6\xad\x62\xde\xfc\x45L\x98\x34\x15;;\x1b\xda\xb7o\x85W\xbd\xb8\x92'\x7f\xfc\xf9\x17\x17\xfd\xaf\x3P\xb7~K\xad\xed\xad\xf3]D\xe5J\x1e\xd4\xaf\xef\x85\x85\xa5\x5\x1b\x36lf\xfa\xccy\xe4\xce\x95\x83Z\xb5\xaa\xc7\x8b/G\x8e\xec\xc9\xde\xcfoQ\xafn\r&O\x99\x81\xb5\xb5\x15\x9d:\xb6\xa5q\xa3\x6\xc9^\xf6\xc2\xc5K\xd4\xa8^Y\xebn\xd7\x8c\x99\xec\xf8\xed\xb7\xbd\x9c\xbfp\x99t\xe9\xd2P\xbbV5:vH\xfeq)\x84\x10\x42\x88\xff\xb1w\xdfQU\x1cm\x1c\xc7\xbfT\x1b\x2vD\xec\x62\xc7\xde+\xf6\xd8{\xef\xb1\xc4\x8e\xbd\xc7\xde\xbbQ\x13{W\xd4\xd8{\x8f\x1a\x13\xbb\x46\x8d]c|U\xc0\x8e\xa0\x80\xd4\xf7\xf\xf4\xc6+ET\x10\x95\xdf\xe7\x1c\xcf\xb9;3\xbb\xf3\xec\xdd\xe5\n\xfb\xdc\x99\x89;\x8c\x92\x42\xae\xcbI\x9f>\xf4KB\xf5\xeb\xd5\xc1\xcc\xdc\x1cK\v\v\n\x17\xfa\xb4/\x98\x94.Y\x98\xee\xdd\xba\x92\x30\x61\x42\x1c\x1c\x1c\"]\xaf\xf1\x95\xff+\xfc\xfd\xc3\xce\x30`e\x95\xc8\x30r\xfd\x63\x5\x5\x5\x31q\xe2$\x2\x3\x3\xe9\xd7\xbf\xdf'=@{{\x1d\x4\xd0Tr\"\"b\xec\x8f?\x8f\xd3\xb3w\x7f\xc3\xb6\xe7\xf3\xe7L\x9b>\x8b\xde\xbd\xba\x13\x12\x12\xc2\xe4)3\f\xa3\x85\0\xaaV\xaf\xc7\xf4i\x13)Q\xbc\xe8{\x8fmjj\xca\xd8\xd1\xc3\x43'\xc4\x31\x31\x61\xcc\xc8\x61_eR(\xba\xff/5\xb9v\xcb-$\xad}\xe8\xf0\xe6\xbbn\x8f\xc8\x9a)u\xb4\x5+\"\xb1\xcb\xd7/t\xea\xaf\xbbn\x8fx\xf3s\x1e\x91\xb7\xdb\xc4\xe5\xcf\x82\x1b\x37oR\xb2LU\xfe<\xb2\x9b,Y2\xc7v8\"\xf2\x96\x83\a\xf\xd1\xa4\x45\an\xdf\xf8+\xca#\xaf\xdeU\xb1ru\xbaw\xed\xa4i\xe2\x44\x44\x44\xbe\x11\xd7\xffq7\xfa;\xe6\x43\xfe\xee\xf9\x18S\xa7\xcd\x64\xfd\x86-\xacY\xbd\xcc\x90\x14\x8a.\xc1\xc1\xc1\x64\xcc\x92\x8b\x19\xd3\xc6S\xb7N\x9dp\xdb\x1c>|\x98Vm;q\xf9\xe2i\x12%J\xc4\xf1\xe3\xc7i\xdc\xac-\x87\xf\xee\"C\x86\f\0\xb8\xbb\xbbS\xac\x64y\xb6oY\x87\x93\x93\x13'N\x9c\xa4Q\xd3\xd6\x9c\x39\xf9;\xc9\x93'\x8fR,AAAL\x9e<\x85k\xd7\xae\x33s\xe6\xf4p\xd7\xf3\x8c\xaa\xb7\x1f\x64\x85\xb7`\xb6\x92\x43\"\"2c\xe6l\xa6\xcf\x9c\x13\xa6\xdc\xd6\xd6\x16\x42\x42\xf0|\xfe\xde\x8c\x32\xfa\x94\xa4P\xf9\x8aU\x19\x32h\0+]\xd7P\xaa\x64\t\xda\xb5m\x15i\xfb\x3\a\xe\x31v\xfc\x44\xe\xee\xdf\xf5\xd1}B\xf4\xff_z\xd7\xed\x91\x46\f\x89\x88\xbcm\xe7\x8e\xdd\x94.YHI!\x91o\xd0\x83\a\xf\xb8\xf0\xf7\xf5\x30\xeb\v\x89\x88\x88\x88\x44U\xc7\xe\xedh\xdc\xa8\x1\xe\xe\xb1\xb3Xu\xc2\x84\xa1_\x8e\x39}\xfa\f\xb9r\xe5\xa4p\xe1\xc2\x38\x97)\x8eK\xcf\xdet\xef\xd6\x5\v\vK\x16,\\H\xd3\x46uprr\x2\xc0\xde>t:\xe7M\x9b\x36Q\xa8P!\x1c\x1d\x1d\xc3L\r\xfd\xb6\xa0\xa0 &M\x9a\xcc\xdc\x5\xcbX0\xf7'\xae]\xbbn\xa8K\x9a\x34\t\x99\x33G\xfdo\xa5\x3\a\xe\x85\xfb\xd0\xea\xedu\x12~\x9e\x35\x9d\n\x15\x9c?\xe4m\x10\x11\x91oL\xc7\xe\xedp]\xb3\x1e\x8f\a\xf\x8c\xca===\xc3m\x9f\xda\xce\x8eN\x1d\xbf\xff\xa0>\xa2{\x94\xd0\xf1\xe3\xa7\xde\xdb\xe6\xcd\x12\n\x9f\"\xa6\xfe/UbHD\xe4\x35___\x16,^\xce\xf0\xa1\x3\x62;\x14\x11\x89\x1\xc9\x92%\xe7\xe6\xd5\xb3$N\x1c\xf1\x83\x10\x11\x11\x11\x91\xc8$Nl\x15\xab\xbfK\xe4\xcb\x97\x97vm\x9b\x33l\xf8H\x86\f\x1eH\xe5\xca\x95\x98\xf5\xd3\f\x16.\\\xc4\xe4)\xd3\xb0\xb1\xb6\xa6z\xf5j4m\xfa\xdf\x1a\x90i\xd3:0w\xce\x34\x66\xfe\x34\x87\xdd{\xf6\x31n\xech\xb2\xbd\x9e\xc6:<\xf7\xef\xdfg\xee\x82\x65\0t\xe8\xd4\xc3\xa8\xae{\xd7\xf6\xf4\xed\xd3'\xca\xf1\x66\xcf\xee\x18\xe1\xc3\xaa\xef\xaaT\xe2\xe7Y\xd3\xc9\x9e\xdd\x31\xca\xc7\x13\x11\x91oS\xc2\x84\t\x18:\xb4?\xe7\xce\x9e\xa7m\x9bV\x9c:}\x9a\xfe\x3\x87\x12\x10\x10:\x1b\x92\xa5\x85\x5\x13\xc6\x8f\xa2H\xe1\xc2,^\xba\x8c\x2\x5\xf2\x91 A\x82X\x8b\x37\x8f\x93\x13\x17.^\xe4\xe8\x1f\x7f\xbe\xb7m\xb1\x62\x9f\xb6\xde_L\xfd_\xaa\xa9\xe4\x44\xbe\x61\x9aJNDDDDD\xbe\x65\x9f{*\xb9o\x81\x87\x87\a\x8f\x1e=\x8a\xb0>e\xca\x94\xa4J\x95\xea\x33\x46$\"\"\x12V\xa5\xaa\xb5\xb8~-t\xc4M\xb6\xecY\xd9\xbbsK,G\x14:\x95\\\x8d\xeaU\xc9\x9b'\xcf{\xdb&K\x9e\x8c|y\x9d>CT\x1fNS\xc9\x89\x88\x88\x88\x88\x88\x88\x88\xc4!\a\x7f\xfb\x8d\x41\x43\x46\x45X?i\xc2H\x1a\x37j\xf4\x19#\x12\x11\x11\t\xab\x62\x39g\xac\xad\x12\x3P\xb4H\xa1X\x8e&\x94\x43\xda\xb4l\xdf\xb1\x8b\xed;\xde\xbf\x66P\xb1\x62\x45\xbe\xd8\xc4\x10h*9\x11\x11\x11\x11\x11\x11\x11\x91\x38\xa3Y\xd3\xa6\x34k\xda\x34\xb6\xc3\x10\x11\x11\x89\xd4\x80\xfe\xbd\x63;\x84\x30\x96/\x99\x1f\xdb!D\x9b\xe8]qIDDDDDDDDDDDD\xbeXJ\f\x89\xc8'\xeb\xd5\xbb\x1f\xfd\xfa\xf\x8ar\xfb\xe0\xe0`<==\xf1\xf7\xf7\x8f\xc1\xa8\x8c\xcd\x9d;\x9f.\xdd\\\b\t\t\x1\xc0\xcb\xcb\v\x1f\x1f\x9f\x18\xe9+\xaa\xe7w\xe6\xec\x39j\xd7m\xc4\x94)\xd3\x8d\xca\x43\x42\x42\xd8\xb4y\v\xadZ\xb7\xa3\x62\xe5\xeaL\x9f\xf1S\xb8\xb1\x9e\x39s\x16\x97\x9e}(^\xb2\x1c\x43\x86\xe\xe7\xde\xbd\xfb\x46\xf5\xcf\x9e=c\xe0\xa0\xa1\x14/Y\x8ei\xd3g\x1a\xc5\xf3\xf2\xa5\xf\x45\x8b;\xe3\xba\x66\xed{\xcf\xc7\xc7\xc7\a//\xaf\xf7\xb6\xfb\x12\x1d=\xfa\a5j\xd5\xe7\xd1\xa3\xc7\x1f}\x8c\xc0\xc0 \xbeo\xf7\x3\xcb\x96\xad\x88\xc6\xc8\"\xf7\xe2\xc5\v\xe6\xfc<\x97j\xd5\xebP\xbc\x64\x39\x86\r\x1f\xc9\xbd{\xf7\"l\xbfm\xfb\xeR\xda;\x86\xf9\xb7o\xff\x1\0n\xde\xbc\xc5\xb4\xe9\x33i\xd4\xb8\x39y\xf2\x17\xa3]\xfbNQZ \xf1\x43yyy1k\xd6\x1c\xb2\x64\xcb\xcb\x83\a\xf\x80\xd0\xfb\xf9\xc0\xc1\xdf\xe8\xd5\xbb\x1f\x45\x8a\x95\xa1\x41\xa3\x66l\xd8\xb8\x89\xa0\xa0\xa0\x8f\xea\xe3\xc1\x83\a\xa4\xb4w\xe4\xf4\xe9\x33\xefm\xbbi\xf3\x16\xf2\xe4/\xf6\xd1}\x89\x88\x88\x88\x88\x88\x88\x88|\x8b\x94\x18\x12\x91\xcf\xce\xcb\xcb\x8b\xac\x39\vs\xe6\xcc\xd9\xcf\xd6gH\b\x84\x4\x87\x18\xb6\xdbw\xe8\xcc\xd2\x18z\xd0\xff\xbe\xf3\xbbr\xf5*]\xba\xb9P\xa3v\x13\x8e\x9d\x38\x17\xa6~\xfe\x82\x45\f\x1f\x39\x9eZ5\xab\xe3\xd2\xa3\v\xbb\xf7\xec\xa7K\xb7\x9e\x4\x6\xfe\xf7p\xfb\xf8\xf1\x13\xd4\xae\xd7\x9c\xacY\x1d\x19\x35r(O\x9f>\xa3~\xc3\xe6xx<0\xb4\x19=f<\xaf^\xbd\x62\xc6\xf4I\xec\xdc\xb5\x97u\xeb\xd6\x1b\xea\x36m\xda\x8c\xb9\xb9\x19uj\xd7z\xef\xf9,]\xb6\x82\xf6\x1d:\x7f\xc8[\xf0\xc5\b\t\xc1\x90\f\xfcZ\x84\x84\x84\xd0\x7f\xe0\x10~;t\x84.\x9d;2\xb0\x7fo\xfe\xfd\xf7\x7f\x34k\xf1=^^\xde\xe1\xee\xe3\xeb\xeb\x8b]\xaa\x64l\xdb\xbc\xda\xe8_\xde<\xa1s\xd9.Y\xba\x1co\xef\x17\xb4n\xd5\x82\x89\xe3\x46\x92&Mj\xea\x35l\xcd\x1f\x7f\x1e\x8b\x96\x98}}}Y\xb3\x66\x1d\xa5\xcaVf\xf4\xf8\x19xy\xff\x97\xc8\xdc\xb6m\a\xc3\x86\x8f!_\xde<\x8c\x1c>\x84\\9\xb2\xd3\xb9[\x7f\xd6\xbeu?\xc6\x94\xd3\xa7\xcfR\xa3Ze\xcc\xcc\xcc\x62\xbc/\x11\x11\x11\x11\x11\x11\x11\x91\xaf\x85\xd6\x18\x12\x91\x38\xa1s\xe7\x8e\xb1\x1d\x2\x10\xfa\xd0\x7f\xfc\xf8\xc9\xe4\xce\x9d\x93S\xc7\xe\x32\x66\xec\x4\xa3\xfa\x87\xf\x1f\x32z\xecT\xd6\xba.\xa6\x64\x89\xe2\0\x38\x39\xe5\xa6H\xf1\x8a\x1c?q\x82R%K\x10\x1c\x1c\xcc\xc4I\xd3\x18\xd8\xbf\a]\xbbt\x2\xa0t\xa9\x92\xd4\xa9\xd7\x98_\xd7o\xa0{\xb7.<{\xe6\xc9J\xd7M\xec\xdd\xb9\x9e|\xf9\xf2\xd2\xaa\x65\x33\xd6\xfd\xba\x91\x16-\x9a\xf1\xfc\xf9s&L\x9e\xc1\x84\xb1#H\x90 \xc1g\x7f\xf>\xa7\xd2\xa5KR\xbat\xc9O:\x86\xb9\xb9\x19\x8b\x17\xcd\x8b\xa6\x88\xde\xcf\xc3\xc3\x83\xf5\x1bw\xb2\x65\xc3\n\x8a\x17/\x6@\x89\x12\xc5\xc9\x95\xb7\x38W\xae^\xa5h\x91\xc2\x61\xf6\xf1\xf5\xf1\xc5>u\xaap\xeb\0\x46\x8f\x1a\x8e\xa9\xe9\x7f\xdf\x5\xa9Z\xb5\n>>\xbe\xec\xd8\xb1\xcbp\x9f\x45\xd5\xf1\xe3'\xf8\xbe\x43\x37\xfe:\xf3\a\x96\x96\x96\0\\\xb8p\x91\x95\xab\xd7\x32u\xf2Xlmm\xa9^\xab\x89\xa1}\xd9\xb2\x65\xa8P\xa1\x1c\x89\x12%2\xf4mai\xc9\xb2\xe5\xabh\xd6\xb4\xf1\a\xf5\xfd!\x82\x83\x83\xd9\xb5{?\xc3~\x1c\x10\x63}\x88\x88\x88\x88\x88\x88\x88\x88|\x8d\x94\x18\x12\x91hW\xb9JM\xea\xd7\xaf\xcd\xbf\xff\xde\xe1\xd0\xe1\xa3\x64\xc9\x9c\x91^=\xbbS\xa0@~\xbc\xbc\xbc\xc9\x9a\x33\xf4\xe1u\xed\xfa-\x1\xd8\xb6y5E\x8b\x14\xe6\xc5\x8b\x17,X\xb8\x98\xed\xdbwc\x95\xd8\x8a\x66M\x1b\xd1\xa0~]\xcc\xcc\xccx\xf0\xe0\x1\x5\x8b\x38\x33u\xf2h\xe\x1f\xf9\x9d\x93'\xcf\xe2\\\xb6$\xbd{\xb9`o\x9f\x1a\x80'O\x9e\xb0p\xd1\x12v\xef\x39\xc0\x93\xa7\xcf(^\xb4\x10\x43\x87\f$mZ\a\xa6L\x99\xce\xc5K\x97Y\xb6\x64\x1\xcd[\xb4\xe1\xd0\xef'9\xf4\xfbIF\x8c\x9e\xc2\xe8\x11\x3\x30\x37\x33\x63\xfaO\xbfp\xe6\xe4\xef\xc4\x8b\x17\xf\x80\x7f\xff\xbd\x43\x91\x12\x15\x39|p\x1b\x39\xb2g7\x9c\x9f\x87\xc7\x3\xd6\xad[\xcf\xa1\xc3\xbfs\xf3\x9f\x7f)V\xa4 \xdd\xbbu\xc6\xc9)w\xa4\xe7\a`bb\xc2\xa2\x85s\xb1\xb0\xb0\b\xf7\xbd;t\xf8\b\xc9\x93%1z\xc0\x9f!}zjT-\xcf\xee\xdd{)U\xb2\x4\xd7\xae_\xe7\x8f\xe3g\x99\x34i\xac\xa1M\xfc\xf8\xf1i\xd4\xb0\x1e\xd3\x66\xcc\xa1[\xd7\xcexz>\x3 \x91U\xe8\xc3x[\x1b\x1b._\xbd\x1\xc0\x9a\xb5\xbf\x92\xce\xc1\x9e*U*\xbd\xf7Z\xce\x9b\xbf\x90\x11\xa3\xa7\0\x90\xd2\xde\x91J\xe5K\xb2j\xe5R\xa6L\x99N`P v\xa9R\xe1\xbav=y\x9cr1j\xe4\x30\x36o\xd9\xca\xce\x9d{8\x7f\xf1\x32Y\x1d\x33\xd1\xb6uK\xaaW\xaf\n\x10-\xd7\xf0\x99\xa7'Ilm\xd9\xbb\xef \x96\xf1,\xe9\xd4\xb1\x1d\xf9\xf2\xe5\x61\xc1\x82\xc5\x1c\xf8\xed\b\xei\xec\xe9\xd5\xb3\x1b\x45\x8b\x16\x1\xe0\xe0\xc1\x43\x34i\xd1\x81\xdb\x37\xfe\"Q\xa2\x44\\\xbb~\x9dy\xf3\x16r\xe4\xf7\x63XX\x98S\xce\xb9\x34#G\xfc\x88\x85\x85\x45\xa4u\x95\xab\xd4\xa4q\xa3z\xb4k\xd7\x16\0\x7f\x7f\x7f\x96/_\xc9\xb6\x1d\xbby\xe1\xfd\x82\xea\xd5\xab\xd0\xb1\x43;\xac\xac\xac\0\x98\x32\x65:\x9e\xcf\x9f\x63kk\xcb\xbe\xfd\a177\xa7m\x9b\x16\xd4\xafW\x17\x13\x13\x13\xdc\xdd=\xe8\xd2\xd5\x85\xae]~\xa0\x62\xc5\xf2\x46\xefy\xfc\xf8\xa1\xc9\xba\xfbnn\x86\x32/\xaf\xe7\0\xa4\xb6K\x15\xeeu\xf2\xf1\xf1\xc5\xd6\xc6&\xc2\xeb\xf8vR\bB\x13\x94>\xbe\xbe\xa4L\x99\xc2P\x16\x1c\x1c\xcc\x86\r\x9bX\xfb\xeb\x6\x1e>|L\xedZ\xd5\xe8\xd8\xa1\x1d\x89\x13'\xe\xb3\xef\xe3'\x9e\x46\x65\x45\x8a\x14\x66\xcb\xa6u\x98\x99\x99q\xfe\xc2\x45\xa3:\x1b\x1b\xeb\x30\xf1\xa4\xb6K\xc5\x8b\x17/\xc3\x8d\xb5r\x95\x9a\xb4i\xd3\x82+W\xae\xb2\xff\xc0!r\xe6\xc8\x46\x8f\xee]\xc8\x9b\x37\x8fQ\xbb\xdd{\xf6\xb1l\xf9J\x8e\x1d?\x1d\xe6>\x2\xb8s\xe7\x7f\xdcs{\x88S\xee\\@\xe4\xf7\x96\x88\x88\x88\xc4Mw\xdd\x1e\xc5v\b\x12\r\xd2\xda\xa7x\x7f#\x11\x11\x11\x31\xa2\xa9\xe4\x44$\xda\xfdu\xf1*?\x8e\x98\x88\x93Sn\xc6\x8c\xfa\x91\xa4I\x93\xd0\xa8i\x1b\xdc\xdd=H\x98\x30!\xbf\xba.\x2`P\xff\xee\x1c\xdc\xbb\x99\x1c\xd9\xb3\x11\x14\x14\x44\x97\xae.\xb8\xbb{0f\xccp\x9a\x35i\xc8\x8c\x99s\x8c\xa6\x9b\xf2\xf\b\xa4{\xcf\x41|W\xa5\x12\xc3\x87\r\xe4\xd6\xad\xdbt\xeb\xde\xcb\x30\xc5Z\xef\xbe\x3\xb9r\xf5:#\x86\r\xe2\xa7\xe9\x13)X0?6\xe1<,\x1f\x31\x62(\0\x85\v:qp\xef\x66j\xd5\xacN\xe5\xca\x95x\xf8\xe8\x19g\xcf\xfd\x65hw\xf8\xf0\x11J\x16+@\xf6l\xd9\x8c\xf6\xf7\xf2\xf2\xe2\xc9\x93'4k\xd6\x88\x9f\xa6O\xc4\xd6\xd6\x86\x86MZ\xf3\xe8\xd1\xe3\b\xcf\xefm\x11%\x85\0\xee\xde\xbdG\xae\x9cY177\xce\xdb\xe7\xcc\x91\x9d\x9b\x37\xff\x1\xe0\xc1\xeb\xe9\xe2R\xa5\x34N\x12\x64H\x9f\x9e\x87\x8f\x9e\xe1\xe5\xe5M\x92$I\0p\xbb\x1f\x9a\\\xb8{\xef\x1e\xf9\xf2\xe6\xe2\xf1\xe3\xc7L\x9e:\x8b\xfe\xfd{\xf3\xc7\x9f\xc7\xa8Q\xab>\x8d\x1a\x37\xf\xf3\x30\xff\x8dZ5\xabS\xb8`\xe8td\a\xf7n6\xbcw\0\xd3\x66\xce\xe7\xf8\x89Sth\xdf\x86\xda\xb5kbbb\xca\xb9s\xe7\xa9T\xa9\x2?\xcd\x98\x44\xc5\xf2\xce\xb4\xed\xd0\x83\x63\xc7\x8e\x1b\xf6\xf9\x94k\x18\x1c\x12\xcc\x82\xc5\xab\x89\x17?\x1e\x83\a\xf5\xa5x\xb1\"|\xdf\xd1\x85\x2\x45\xca\x91\x31\x63\x6\x46\x8e\x18\x82\x83\x83=\x8d\x9a\xb6\xe5\x7fw\xef\x86\x39\x97g\xcf<\xa9\xdf\xb0\x5I\x93&e\xd6OS\x18\x36t \xd9\xb3g\xc3\xc2\xc2\"\xd2\xbaw\x85\x84\x84\x30p\xd0P\xf6\xed\xff\x8d\x1e\xdd:\xd1\xbbWw\xb6l\xddI\x97\xae.\x4\a\a\x1b\x62\x9d\xbfh\x15\x16\xe6\xe6\f\x1a\xd0\x87\xf2\xe5\xca\xd0\xa5\xfb\0\xe\x1f\xf9\x1d\b\xbd\x87N\x9d\xb9\x10n\x9cI\x92\xd8\x32y\xfc\x30z\xf6\x1e\xc2\xfc\x5\x8bX\xb0p1\xdd{\xf4\x61\xde\x9c)\xa4K\x97.\xdc\xeb\xf4\xd2\xc7\x87\x83\x87\x8fQ\xaaLE\xca\x38Wf\xe0\xa0\xa1\\\xbf~\xc3\xa8M``\x10\xa7N\x9f\xe1\xd0\xa1\xc3\f\x1f\x31\x8aK\x97\xae\xd2\xb2\x45\x33\x43\xfd\xbcy\vY\xed\xba\x8en]~`\xf0\xc0>\x9c>s\x8e!C\x87Gi*>\x13\x13\x93\xf\x9a\xae\xed\xd8\xf1\x93|W\xa5\x62\xb8u~\xaf^\xd1\xb3\xcfP2g\xca\xc8\x84q#\xb1\xb3K\xc5w5\x1a\xf2\xcf?\xb7\x8d\xda\xfd\x34g\x11\x95*V\b\xf7>\x2\xb8|\xf9\nv\xa9\x92\x91!C\x6 \xea\x9f\xf\"\"\"\"\"\"\"\"\xdf:\x8d\x18\x12\x91h\x97+G\x16\x8a\x16)h\x98&*w\xee\xdc\xb8\xae\xdb\xca_\x7f\x9d\xa7j\xd5*\x86o\xfe\x17+Z\x84\xdc\xaf\xbf\xcd\xff\xc7\x9f\xc7\x38\xfc\xfbq\xae\xfc}\x8a\x84\t\x13R\xbcXQ\xfc^\xbd\x62\xf1\x92\xe5\x46\xd3M\xads]\x84s\xd9\x32\0X%JD\xe3\xe6\x1dpsw#\xb5\x9d\x1d\xbb\xf6\x1c\x62\xe6\xb4\x31\x94}]\xef\xec\\6\xdc\xf8\x1c\xb3\x64\xc1\xb9t\x11\x9c\x9d\xcb\x18\xfa\a\xa8S\xb3\x32{\xf7\xee\xa7x\xb1\xa2\x84\x84\x84\xb0z\xcd\xafth\xdf\x6\x13\x13\x13\xa3\xfd\xb3\x66ud\xe4\xc8\x61\x86\xed\x1c\x39r\xb0t\xc5\xaf\\\xbe|\x99\xb2\x65\xcb\x84{~Q\xe5\xee\xee\x81\x8dm\xd8\x87\xd5\x36\xb6\x36\xdc\xf9_h\x12\xe1\xf1\xe3'\0$H\x10\xdf\xa8M\xe2\xc4\xa1\xa3U\xbc\xbd\xbdppp\xa0\x45\xd3\xba\xacY\xbb\x9e\x84\x89\x12\xb1i\xf3\x36:ul\xc7\xf2\x15\xab(\\(\x1f\xe9\xd2\xa6\xa5X\xa9\xca,\x9a?\x83\xfb\xf7\xee\xd3\xbc\x65;\x8e\x1d=\x10\x66tH\xea\xd4\xa9\xa9^\xad\n\x89\x12&\b\xf7\\f\xcf\x9an\x94\xc4\x9a\x34q\x9c\xe1u\xd9\x32\xa5\xd9\xb6\x63\x37\xc7O\x9c\x34L\x89\x6\x1f\x7f\rMML\xb1\xb4\x30\xa7{\xb7.\0\x94*U\x8a\r\x1b\xb7R\xacX!\xda\xb4i\x5@\x81\xfc\xf9X\xbej\x3g\xcf\x9e#]\xda\xb4\x46\xb1\xde\xbbw\x8f\x87\x8f\x9eQ\xb7N-r\xe5\xca\x19\xe5\xbaw\x9d?\x7f\x81\x95\xae\x9b\xb8p\xf6(v\xafG\xf0\x38:f\xa1\x94s5N\x9e \xea\xd4\xa9\xc5o\x87\x7fg\xe8\xf0\xd0\xa9\x6\x9b\x35\xaeM\x85\n\xe5\xc3m\v\x90?\x7f^\xe6\xfd<\x85\x94)S\xe2\xed\xed\xcd\xc6\x8d[(_\xa9\x16\a\xf6n![\xb6\xac\0\xbcz\xe5g4\xc5[\x93\x86\x35\x31\x35\rM\xe6<}\xfa\x8cQ\xe3\xa6\xb2s\xdb:\xf2\xe7\xcb\v\x80\x9d\x9d\x1d\x95\xab\x35`\xf0\xa0\x1\xdc\xbbw\x8fjo\xed\v\xe0\x90\xe1\xbf\xfb\xe1\xa1\x9bq\x12*2\x7f\xfey\x8c\xdd{\xfq\xfc\x8f}\xe1\xd6\xc7\x8f\x17\x8f\x1f\xda\xb7\x30\\\xd3\xd2\xa5Kq\xe5\xca\x35\\\xd7\xac\x63\xc8\xe0\xff\xa6\x85[\xb9\xf4\x17*W\xeM.\xbd}\x1f\xbd\xb9\xee\xa7\xcf\xfc\xb7\xbeP@@@\x94?\x1f\x44\x44\x44$\xee\xd0H\x13\x11\x11\x11\x89\xab\x94\x18\x12\x91hgan\x8e\x63\x96\xcc\x86\xedT\xa9R\x92\x34\x89\x35^\xde\xde\x11\xees\xf3\xc6M|\xfd\xfc\xc9\x90%\xafQy\xa2\x84\xc6\xc9\xf\xab\xd7\xeb\x94\0\xa4O\x9f\x1e\x80\x97/^baa\xc1\x8f\x83z\xd2\xbb\xdf\x30N\x9e \x88\x88\x88\xc8\xb7GS\xc9\x89\x88\x88H\\\xf2\xf6\x97\x62\x94\x18\x12\x91\xcf\xe2\xdd\x35N\xde\x65\xf5z\xb4\xcb\xc9\x63\xfb\x31\x7f\xeb\x61\xfc\xbb\xa3u\xde\xf6nU\xf7\xee]\xa9_\xbf\x1e\xbf\x1d:\xcc\xe2%\xcb\x19 \xb5k\xd7\x8c\xb4m@`\xa0\xd1\xb6\xa9\x99\xa9\xe1\xbe\xe\xcf\xbbo\xed\xfd\xfb\xf7\xb9q\xeb\x7f\x38\xe5\xcem(\xfb\xd4\xcf\a\x11\x11\x11\xf9\xf6h\xc4\x90\x88\x88\x88\xc4UZcHD>\xbb\x37\xf\xc8\x3\x2\x2\feoFA<|\xf0\x10\a\a\a\xc3\xbf\x34i\xd2|\xd0\xb1\xed\xedS\xd3\xbcY\x13\xd6\xac^N\xca\x14\xc9\xd8\xb7\xf7@\x4\x31\x98\xe2\xff\xce\xc3\xfd\x4\t\x12\xf0}\x9b\xe6l\xdd\xba\x9d\x95\xab\xd6\x46\xf8\xf0\xfa\x8f\xa3\x7f\x92?o.\xea\xd6\xa9M\xa6L\x19I\x91\"9\0~\xbe~\x11\x9e_T\x95.S\x8a\xc7O<\xf9\xf3\xcf\x63\x86\xb2\a\xf\x1e\xb2\x61\xf3.\xaaU\xfb\xe\x80\xec\xd9\xb3\xe1\x94\xd3\x91\x9d;w\x1b\xda\x4\x6\x6\xb2i\xf3V~\xe8\xd8\x36\xdc\xe3\xde\xbe}\x9b\xd9\xbf,\xa1\xc7\xebi\xd8\x92'Of\x98\x92.00\b\xcf\xe7\xde\xe1&\xc1\0L0\xc1\xc7\xf7\xfd\xa3\xa1.]\xba\xc2\xed;\xf7i\xdd\xaa%9\xb2g'U\xaaT\x4\x5\x5\xb3\xf7\xc0\xd1\xa8\x9d\xfckQ\xbd\x86\x1f\xc3\xc4\xc4\x84\x9c\x39s\xd0\xb5K'\xd6\xba.\xe3\x8f\xe3g9\x7f\xfe\xe2{\xeb\xde\x96\x39S&\xae\xdf\xbc\xc3\xed\xdb\xff\x1a\xca\xdc\xdc\xdc\xb9~\xf3\xeY\xb3:F9\x96\x88\x12\x89\xaf^\xbd\xc2\xd7\xd7\xf\xbf\xb7\x46\xa0\x99\x9b\x9b\x91\x31\x63z\xa3\xb2\xb7\xf7\xf\n\n2:F``\x10\x7f\x9d\xbf@\xde\xbcN\xaf\xb7\x8d\x13-\x10:\x12\b\xc0\xc6:1i\xd2\xa4!y2[\xee\xde\xbbg\xf4\xf3\xe7\xe0\xe0\x10\xe9\x9aXQ\xe5\xe9\xe9\xc9\xf\x9d\xbaS\xa2\x44Qz\xbat\x8f\xb4\xed_\x17\xaf\x32l\xe4$\xc3vHH\b\xc7\x8f\x9f$\x7f\xfe\xbc\x91\xec\x65\xec\xf2\xe5\xab\xd8\xdb\xa5 C\x86\xf4\x46\xe5\x31yo\x89\x88\x88\x88\x88\x88\x88\x88|-4bHD>;kkk\x1c\x33\xa7\x63\xd3\xe6\xad$\xb6\xb6&E\xf2\x64\xe4\xc9\xe3\x44\xab\xe6\xf5\xe9\xd2\xad\x37#G\f&C\xfa\xf4\xdc\xbbw\x9f\xf8\xf1\xe3\x19\x46*D&00\x90\x1f\x87\x8d\xa4\x64\x89\xe2\xa4Nm\xc7\xc3\x87\x8f\xb8|\xf5&\xbdz\x86\x9dv\v w\xee\x9c\xec\xdc\xb9\x97\x92%K\x90(aBr\xe6\f\x1d=S\xbd\xdaw\x94\xad\x10\x9a\x10*T\xb0@\xb8\xfb\x66\xc8\x90\x9e\xa3\x13\x66\xb0r\xe5j2f\xca\xc8\x96-\xdb\0H\x96 \xd7\xaf\xdf\xa0\xd2wu\x18\x35| \xad[\xb7\x34\xaa+\xe7\xec\x8c\x8d\xcd,:w\xe9\x41\xb3\xa6\x8dI\x9c\xd8\x8aK\x97\xaf\xb0\x62\xf5\x46\xb6lX\x1\xc0\xe6-[\xe9\xdc\xad\x1f;\xb7\xae%w\xee\\\xd4\xa8U\x9f\xda\xb5\xaa\xe3\xe8\x98\x5\x42\x42\xd8\xb1s7\x97\xaf\xdc`\xc6\xb4\xc9\x4\a\aS\xe5\xbbZ8;\x97\xc6\xc9)\x17\x36\xd6\xd6\xb8\xb9{\xf0\xf3/\v\xe8\xdc\xa1%i\xd3\xa6\xc5\xc4\xc4\x84\x91\xc3\x6\xd2\xa3\xf7`,,,(T\xb0\0^\xde\xde\xfc\xfb\xef\x1d\x9a\x37\x33\xbe~\x8e\x8e\x8el\xd9\xb0\"\xcc\x34\x82\x11\xf1\xf4\xf4\xa4q\xd3V\x9c;\x7f\x5\x97\x1e]8u\xfa\x8c\xa1.c\x86\xf4\xa4L\x99\x32\xdc\xfd\x66\xcc\x9c\x45\xc1\x2\x5\xf8\xf3\xd8\x31\xce\xfe\xf5\x37\xd3\xa6M\n\xb7]x\xce\x9c=K\xf5j\x95\fS\x1\xc6\xf4\xbd%\"\"\"\xf2-\xf3\xf7\xf7\xe7\xfe\xfd\xfb\xbc\xf0\xf6& \xf0\xc3\xbf\xfc\xf6\xa5\xb0\x30\xb7\xc0*q\xe8\x97\xa2>d\xe4\xbb\x88\x88\xc8\xb7H\x89!\x11\xf9\xecLLL\x98?w\x16\xa3\x46\x8f\xa7{\x8f>\f\xec\xdf\x1b\a\a\a\xc6\x8d\x1d\xc5\xaa\xd5kX\xbc\x64\x39\x37n\xde\xa6P\x81\xbc\xb4i\xdd\"J\xc7\xf4\xf7\xf7'C\x86\xf4,Y\xb6\x82K\x97\xaf\x93%s\x6\xa6N\x1e\xcdw\xdfU\xe\xb7}\xe7N\x1dx\xfa\xf4)?t\xea\x41\xc3\x6\xb5\r\x89\xa1\xec\xd9\xb3\x91\xce\xc1\x8e\xf6\xedZE8R\xa2Z\xb5\xef\x18>\xf4\x1es~Y\x80\x8d\x8d\x35\xcd\x9a\x36\xa2\\\x99\xbb\xef=\xbf\xa8\xea\xdb\xa7\x17\xf6\xa9S\xb3\x66\xddz|}|\xa9Q\xa3*\xed\xbeoc4\x1d_\x85\n\xe5Y\xbfv\t+W\xba\xb2\x66\xdd\x46*Upf\xdd\x9a\x15$O\x1ev\xd4\xcf\xe5\xcbWX\xb1z\x3'\xfe\xdco(\xcb\x9e=\x1b\xcb\x16\xcd\x66\xfa\xcc\x39\xd8X'f\xd5\x8a\x45\x61\xa6L{\xa3\x62\xc5\n\f\xec\xd7\x8d\x41\x83G\x90\x33GV~\xc9\x95+\xdcv\x99\x32\x65\x64\xf9\x92\x39\xcc\x98\x39\x87\x9d\xbb\xf6R\xab\x66Uztm\x17\xe5\xf3\xfe\xd0k\xf8\xa1,--11\x81I\x93\xa7s\xf7\x9e;\x85\v\xe5\x63\xd3\xaf\xcbI\x9f>\x1d\xf7\xee\xdd\x8f\xb0\xee]fff\xcc\xfb\x65\x16s\xe7-`\xdc\x84)\xd8\xda\xdaP\xab\x66\x35Z\xb6h\x16\xe5X\xac\xac\xac\xc8\xeb\x94\x3\xfb\xd7\xc9\xb4\xb7\x39\x38\xa4\x61\xdb\xe6u,]\xba\x9c)Sg\xe2\xfd\xe2\x5\xc5\x8b\x15\x66\xf7\xf6u\x14(\x90\x1f\x80\x94)RP _.lll\b\t\t\xc1\xa5G\x17\xb6m\xdb\xc9\xd2\x65\xab\xb0\xb5\xb1\xa1T\xa9\xe2\xec\xdd\xb5\x19\a\x87\x34\x4\a\a3f\xf4\x30v\xed\xde\xc3\x82\x85K\xb9\xf3\xbf{\x14\xc8\xe7\x44\xbf\xbe.T\xab\xfa\x9d\x61\x84[\x83\x6\xf5\xb0Mb\x8b\xab\xeb:\xa6N\x9fM\xd6,\x99\xa8Y\xb3Z\x98\xf8\x92'O\x16\xee}\x16\x91?\xfe<\xc6\xb9\xf3W\0\xa8\xd3\xa0\x95Q\xdd\xaa\xe5s\xa9T\xb1\x82QY>\xa7\xec\xa4J\x95\x82\xbf\xff\xbe\xcc\xf2\x15k(\xe7\\\x8a]\xdb\x37\x90\x32\x45\xd4\xa7z\xd9\xbf\xff\x10=\xbaw6l\xc7\xf4\xbd%\"\"\"\xf2\xad\xf2\xf7\xf7\xe7\xca\x95+\x4\x5\x85\x1d\x81\xfe\xb5\t\b\f\xe0\xd9\xb3\xa7xyy\x91#G\xe%\x87\x44\x44$N3\xb9v\xcb-\xe4\xcd\xbc\xbaw\xdd\x1e\x91\x35S\xea\xf7\xec\"\"_\v_\xbf\xd0_\xde\xef\xba=z\xef\xfc\xd9o\xb7\x89\xcb\x9f\x5\x37n\xde\xa4\x64\x99\xaa\xfcyd7Y\xb2\x64\x8e\xedpD\xe2\x9c\xcaUj\xd2\xb8Q=\xda\xb5\v\x7fZ\xc4\xf7\xf1\xf0x@\x9e\x2\xa5\x38\xf6\xfb\x1e\x32\xbf^\x97KDDD\xbe]\xd7\xffq7\xfa;\xe6\x43\xfe\xee\xf9R\xc4VLw\xdd\x1e\x1\x91\xaf\xb5t\xfb\xf6m\x9e={\xfa\xb9\x42\n#\x85]:\x1ey\xfc/\xda\x8f\x9b$IR2f\xcc\x18\xed\xc7\x8d.Q\xb9\x36\xf2\x65\xfa\x9a\xaf\xdd\xd7\x1c\xbb\x88|\x98\xbbn\x8f\xb4\xc6\x90\x88\xc8\xdbv\xee\xd8M\xe9\x92\x85\x94\x14\x12\xf9J]\xbe|%\xdc\xf5\x85\x44\x44\x44\x44\xe4\xc3\xbd\xf0\xf6\x8e\xed\x10\x62\xc4\x8b\x17\xdf\xe6y\x89\x88\x88\x44\x95\x12\x43\"\"\xaf\xf9\xfa\xfa\xb2`\xf1r\x9a\x34j\x10\xdb\xa1\x88\xc8G*Y\xb2\x38G\x8f\xec\x35\xac/$\"\"\"\"\x1f\xefk^S(2\x1\x1\xdf\xe6y\x89\x88\x88\x44\x95\xd6\x18\x12\x11y-A\x82\x4\xfc}\xfe\x64l\x87!\x12\xa7\xed\xdd\xb3\xed\x93\xf6\x8f\x17/\x1e\xf1\xe2\xc5\x8b\xa6hDDDDDDDD\xbe=J\f\x89\x88\x88\x88\x88\x88\x88\x88H\xb4\xb9{\xcf\r\x80\xb4\xe\xf6\xb1\x1c\x89|i\x2\x2\x42\xd7\x42\xb6\xb0\x88\x99G\x92\x8f\x1e?\xc6\xc3\xe3\x1N\xb9s}\xd4\xfe\x17\xff\xbe\x44\xaaT)I\x99\xe2\xcb[gg\xc7\xce\xdd\0T\xaf\xf6],G\x12u~~~,^\xba\xc2\xa8\xac]\xdbV\xfa\x32\x9f\xc8\x17@\x89!\x11\x11\x11\x11\x11\x11\x11\x91p\xacY\xbb\x9eS\xa7\xcf\x46\xb9}\xf1\x62\x85iP\xbfn\fF\xf4\xe5\xbb{\xcf\x8d\x61#\xc6\x2\x30j\xc4\x90o:94c\xe6lC\x12\xecm\x85\v\x15\xa0I\xe3/s\x8a\xf2%KW\x2\xd0\xb6M\x8b\xcf\xdew@@ \xdd]\xfa\x90(Q\"\xa6N\x1e\x17#} t\xb0\xa1\xcd\xa8\x91\x43X\xb2t%\x8d\x9b\xb6\x2\xc0.U*<\x1e<`\xeb\xf6\x9d\xd4\xaeY=\xda\x63\xda\xb5{/S\xa7\xcd\x64\xe5\x8a\xc5\xd8\xa5Je(\xf\n\n\xa2o\xff!l\xde\xba\x9d)\x93\xc6~\xf2\xf4|w\xde\x19=haaN\x99\x32\xa5\x80\xd0{\xcau\xcd\xaf\xcc\x9a=\x17\x37ww\xe2\xc5\x8bG\x99\x32\xa5\x18=r(\xa9\xed\xec>\xa9\xdf\xf7\t\t\t\xc1\xdf\xdf?\xd2\x35\x9d\xe6\xce_\xc4\xc4I\xd3(V\xb4\x30\xcb\x96.0L\xfb'\xdf>%\x86\x44\x44\x44\x44\x44\x44\x44\x44\xa2\x81\xb9\xb9\x19S\xa7L\xe0\xfc\x85\x8b\x1c;~*N$\x86\xdc\xdd=\xb0\xb5\xb5%A\x82\xf8\xf4\xe8\xd6\xd1\xa8\xce\xce.\xa5\xa1\xcc\xdf\xdf\x9f\xa7O=\xbf\xb9\x91\x43o'\x85z\xbat\xfb\xe2\x13\x43\x15\x9c\x9d?[_\xd7\xaf\xdd\xa0\x61\xd3Vd\xcf\xe6\xc8\x9a\xd5\xcbX\xb2h\x1em\xbe\xff\x81\xc0\x80\0\x36oX\xc3\xb5\xab\xd7q\xe9\xd3\x9fVm\xda\xe3\xbaj)\x85\v\x15\x8c\x96~\x83\x83\x83Y\xb9j5\0\x35\xaaW#\xc5{\xd6\vz\xfc\xf8\x31\xdbw\xec\x8c\x96\xbe?\xd5\xf0\x91\x63Y\xbf\x61S\xa4m\xf2\x15,\x11ny\x83\xfaucl\xed\xa6\xf7\xf1\xf5\xf5\x65\xe2\xc4i\x14-R\x88\x35\xab\x97\xf1\xdboG\xb8p\xf1\"]\xbbv2J4\xd4\xadS\x8b\x1a\xd5\xab\x31\xfb\xe7y\xe4\xc9\x9d\x8br\xe5\xca\xd0\xb8i+&L\x98J\x95J\x15\x88\x1f?~\xb4\xc5\xb4s\xd7\x1e\xba\xf5\xe8\x43HH\b\x8d\x9b\xb4\x62\x8d\xeb\x32R\xdb\xd9\x11\x14\x14\x44\xbf\x1\x43\xd9\xb4y+\x93&\x8e\x8d\x96\xcf\xe9={\xf7\x31v\xfc\x64\xc3\xb6\xad\xad-\xe7\xcf\x1e\x3`\xfa\x8cY\xcc\x9a\x33\x8f\xd6\xad\x9aQ\xa6T)\x1e?}\xca\xcf?\xcf\xa3z\xcd\x6\xec\xdf\xb3\x95\xa4I\x93~r\xff\xe1\xf1\xf7\xf7\xa7i\xf3\xb6\x9c\x39{\x8e\xfe\xfdz\xd1\xa5S\x87p\xdb-]\xba\x92\xe0\xe0`\xfe GX\xb1\xee\xcd\x9a\x42N\xb9s\xd2\xbbg\xd7H\xdb\xce\x9d\xbf\x94s\x7f\x9d\xff\xa6\xd6\x1cz7)\xf4\x35h\xd1\xa2\xc9g\xe9' \x90\x1e\xbd\xfb\x91 \xa7i\xd3\x46\x31\xba\xce\xc9o\x87\xeq\xe5\xca\x35\x36\xae_\x8d\x8d\xb5\x8d\xa1\xbcx\xb1\"F\xed\xe2\xc5\x8b\xc7\xd4)\x13\xa8Y\xbb!\x9b\x36o\xa3i\x14\xee\xa5oY\xef^\xddh\xf7}\xabp\xeb\x86\r\x1f\x3\xc0\xa8\x91\x43\xc3\xad\xb7\xb1\x89\xbd\xb5\x9a\xca\x96-\xcd\x8a\x65\v\xe9\xd9{\0U\xab\xd5\xe5\xd7\x35+\xc8\x9a\xcd\x91s\xe7\xceS\xbfQs\x82\x82\x82\0\xd8\xb0i\v\x1b\xd7\xbb\x92\x37\x8f\x13\xd7\xaf\xdd\xa0\x41\xe3\x96$H\x10\x9f\xd5+\x97\x44\xdbt\x82\xdbv\xec\xc4\xa5g\x7f\xca\x97w\xe6\xe7\xd9\xd3\xb1\xb4\xb0`\xad\xebr\x9a\x34kM\xf9\x8a\xd5\xf1\xf3\xf3\x63\xe2\x84\x31\x34nX\xf\x80\xbf/]f\xef\xde\xfd\xf4\xee\xd5\xe3\xa3\xfbLl\x9d\x98\xc4\xd6\x89\xc3\x94\x9f>}\x6\x33SS\x9a\x37o\x1c\xa6}\xc3\x6u\xd8\xb2u\xc7G\xf7\x19\x99\xc0\xc0 \x16/^n\xd8\xbe\x7f\xdf\x9d\xad\xdbwP\xab\xc6\x7f\xd3\xf5m\xdd\xbe\x3\x97\x9e\xfd\xa9S\xbb\x86\xf\xc2:\xb1u\x8c\xad\xf3$_&%\x86\x44\x44\x44\x44\x44\x44\x44\x44\xbe@\xa9S\xa7\xe6\xaf\xf3\x17p]\xf3\xabQy\xb3\xa6\x8dh\xf4\xfa\xa1\x66lx\x93\x14\xf2\xf4|N\x86\xf4\xe9\fk\n\xbdq\xfd\x46\xe8Z\x1b\x63\xc7O1*\xb7\xb2J\xc4\xbfw\xfe\x17-\xc9\xa1\x64\xc9\x92r\xf3\xc6-\xf6\xee\xff\xcd\xa8\xbcr\xa5\xf2T(\x17\xf1zP\xd1!\xb2\x91\x42\x33\xa6M\x8c\xd1\xbe\xa3\x62\xc9\xd2\x95\x1c\x39z\xd4\xb0]\xc1\xd9\x99\x16-\x9a\xe0\xea\xba\x8e\xa1\xc3G\x1`\x9b\xd4\x86\x9a\xd5\xab\xb1r\xe5\x1a\xe\x1c:dh[\xa6T)\xa3\x91\r\x1fk\xcf\xde\x83\x64u\xccL\x81\xfc\xf9\xde\xdb\x36\x8fSn\xd2\xa7O\xcb\xefG\xff\x8c\xf3\x89\xa1\x34\xf6\xf6\xa4\xb1\xf\xff\xe7\"\xb1u\xe8H\xc4\x9c\x39\xb2\x7f\xce\x90\xa2\xacL\xe9\x92L\x9f\x32\x9eVm;\x12\x10\x14\xba\x66\xd3*\xd7\x35\x86\xa4\x10\x84&,V\xbb\xae#o\x1e'^\x5\xf8\xf3\xdc\xeb\x39sfO\x8b\xf6\xa4P\x85\xf2\xe5\x98\x33{\x9a\x61\x14P\x96\xcc\x19Y\xb3z\x19\xcd\x9a\xb7\x61\xe4\xf0!4iT\xdf\xb0\xcf\xc0\x41\xc3\xc8_ o\xb4\xf4\xff.?\xdfWXXZ`n\x16\x36\tk\x19/\x1e\xde/^F{\x9f\x41\x41\x41\xf4\xe9;\x90\xad\xdbw\xf2\xd3\xcc)\x94w.\xcb\xb0\x11\x63p\xe9\xd9\x1f\x80Z5\xaa\x1b\x92\x42\xb5k\xd5`\xca\xa4\xb1\x98\x85\x13\x9f|\xfb\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\xf9\0\xaf^\xbd\x62\xf3\xeboz\xd7\xa9U=\xd2\x85\xbd?\x85\xa9\xa9)\xe3\xc6\x8c\xc0\xc4\xc4\x84\xd5\xae\xa1S15o\xd6\x88\x31\xa3\x86\x63jj\x1a#}~-LMM\xf9\xa1\x63[01a\xef\xbe\x83\0T\xa9\\\x9e\x8e\xed\xdb\xc4\xe8{\xf3\x35N\x1f\xf7\x86m\xd2\xff\x46\xeex>}\x1e\xa3}\xdd\xbd{\x97\xcc\x99\x33Gy\x4\x42\xf6l\xd9qsw\x8f\xd1\x98\xe4\xcb\x14\x12\x1c\x1c-\xc7\xd9\xbbo?=\\\xfaQ\xa9\x62\x5\xe6\xcc\x9a\x86\x85\x85\xf1\x63\xef,\x99\x33rp\xffN\xac\xac\x12\x19\x95\a\xbeNb}\x8a\xd5\xae\xeb\x98\xfd\xf3|\xc3\xb6\x8dubv\xed\xd8\x84S\x9e\\\xbc|\xe9\xc3\xe1\xc3\xbfS\xae\\\xd9\xff\xfa\f\fb\xf7\xee}QJ\x9c~\x88\xd0\xa4\xd0 \xb6n\xdf\xc9\xcc\x19\x93\f#\x84\xa6L\x1a\v\x80K\xcf\xfe\x8c\x1f?\x15\x8f\a\xf\xa8]\xb3:S'\x8fSR(\xeSbHDDDDDDD\xe4\x3\xb4l\xdd\x9e\x13'O\x3\xb0q\xe3\x66\xd6\xac^\x16\x63S\xf0\x98\x9a\x9a\x32v\xf4pLL\0\x13\x13\xc6\x8c\x1c\x16\xebI\xa1\xb4\xe\xf6\x8c\x1a\x31\x84\x61#\xc6\xf2\xe2\xc5K\x6\xf4\xeb\x89\x9d]JC\xfd\x9b\x91\x42\x43\x6\xf5\x35\x94yx<\xe4\xc7\xe1\x63\xb1\xb5\xb5\x89\xb6u\x86LMM\xf9\xa1\x43\x9b\xd0\xf7\x6\x13:\xb6o\x1dm\xef\xcd\x8c\x99\xb3\xf9\xf7\xce]\xa3\x11@_KR\xa8m\x9b\x16\xe1\x8e\xfa\xa9Z\xa5\ncF>\xc7\x36\xa9\rU\xab\x84\xae\x87\xd2\xa2\x45\x93\x18Yw\xc8\xdc\xdc\x1c//\xaf(\xb7\xf7\xf5\xf5\xc1\xc2\\\x8f)\xdf\xf0\xf\b\xe0\xe6\xcd[Fe\xde^/\0\xb8|\xe5\xaaQy\x96,\x99?i}\x9c\xe8r\xe8\xd0\x11z\xf7\x1b\x8c\xad\x8d\r\x16\x66\xa1\xd7\xb2y\xd3&l\xdc\xb4\xcd\x30j\xc8\xdc\xdc\x8c\x66M\x1b\x1\x10\xcf\xc2\x12\x1bk\x1bz\xf7\x1b\xcc\xb4)\xe3?y}\xa1\xdf\xff\x38\x46\xe5J\x15\x98\xfdShR\xe8\xea\xd5k\x4\x6\x5\x91;WN6m\xd9\x46\xad\x1a\xd5\fI\xa1\x63\xc7O\x92!C:R\xdb\xd9}R\x9fod\xce\x9c\x89Z5\xaa\x1a\xb6\xe3'H\0\x84\x8e\x86\xab^\xed;z\xf5\x1d\xc4\xe8QC)[\xba\x14\xf\x1e>f\xca\xd4\x19\\\xb8\xf8\x37]\xbbt\x8c\x96\xfe\x43\x42\x42\xf0\xf2\xf6\x62\xf8\x88ql\xd9\xb6\xc3()\x4\xa1\xeb\xe4\x8d\x1e\xf9#\x1b\x37m1$`G\x8f\x1a\xa6\xa4P\x1c\xa7O\\\x11\x11\x11\x11\x11\x11\x11\x91(rsw7$\x85\0\x8e\x9f\x38\x85\xbb\x87\a\xf6\xa9S\xc7X\x9f\xa6\xa6\xa6\x8c\x19\x35\xdc\xf0\xfaK\xf0vrh\xdd\xfa\xcd\xf4\xe8\x16\xf9\x3\xceu\xeb\x37\x13\x18\x14\x18mI\xa1\x37LMM\xe9\xd8\xbe\x8d\xe1ut\xb9{\xcf\xcd\xe8\xc1\xfc\xd7\x92\x14\x8a\x8c\xb9\xb9\x19-[6\xfd,}e\xc9\x92\x99-[w\x10\x14\x14\xf4\xde\x87\xcf\xc1\xc1\xc1\\\xbdv\x9d\n\xe5\x9d?Kl_\x83\x87\xf\x1eR\xb5z\xddp\xeb\xde-\xff\xe3\xc8~\x1c\x1c\x62o\xbd\x31\x80\xc3\x87\x7f\xa7\xf5\xf7?\x90?\x7f^~\x99\x33\xc3\x90p\xc9\x9f?/\x1b\xd6\xad\xc2u\xcd:LLLh\xda\xb4\x31y\xf3\x38\x1\x90\x35\x9b#\xbbwm\xa2K\xb7^\xb4l\xdd\x9e\xe5K\xe6S\xb6l\xe9\x8f\x8e\xa1R\xf9r\x14/^\f\v\vs<==i\xd2\xbc-\xb3\x7f\x9a\n\xc0\xd6m;\xb8|\xe9\nC\x6\xf7\xe7\xf6\xbfwh\xdb\xae\x13\xbbwn\xfe\xf4\x13\x7f\xadh\x91\x42\x14-R(L\xb9\x89\x89\t\x13\xc7\x8f\x66\xf8\xc8\xb1t\xeb\xde\xc7P\xee\xe0`O\x8e\x1c\xd9\x18\xf2\xe3(2g\xce\x8c\x63\x96L\x1f\xdd\xb7\xbf\xbf?M\x9b\xb7\xe5\xf4\x99\xb3\x98\x9a\x9a\x86I\n\xbd\x91(QB\n\x15,\xc0\xe9\x33g)\\\xa8`\x98\x91S\x12\xf7(1$\"\"\"\"\"\"\"\x12\x45\xc9\x92&\xc5\xd6\xc6\x6\xcf\xe7\xa1Sq\xd9\xda\xda\x92,i\xd2\x18\xef\xf7KI\b\xbd-\xad\x83=\xe3\xc7\f'iR\xdb\xf7\xb6\xed\xd4\xb1\rO\x9fz\x1a\x8d,\x8a.1\xfd\xde|\vI\xa1\x37V\xae\\\x3\x10#\xa3\x84\xdeV\xa7v\r\x96-_\x85\xab\xeb\xaf\xef\xedk\xdd\xfaM<|\xf8\x88\xda\xb5j\xc4hL\x12s\x8a\x16-L\x1a{{,-,H\x95\x32%\xfb\xf\xfc\xc6\xf9\xf3\x17\xe8\xd6\xb5\x13\xf9\xf3\xe7%\x7f\xfe\xff\xd6\xf0y\xf5\xea\x15\xb3\xe7\xcc%_\xde\xbc\x38;\x97\xc6\xc2\xdc\x9c\x34i\xd2P\xacX\x91O\x8a\xa1L\x99R\x86\xd7\x9e\xcf\xbdx\xf6\xec\x99Q\xfd\xcd\x7f\xfe\x1\xc0\xc3\xe3\x1\xbe\xbe\xbe\x9f\xd4\xd7\x87H\x9c\xd8\x8aiS\xc6\xd3\xa7W7\xae\\\xbd\x8e\xad\xad\ry\xf2\x38\xe1\xe7\xebK\xcb\xd6\xedi\xd2\xac\x35kV/\xfb\xe8\xe4\xd0\xed\x7f\xfe\xe5\xf4\x99\xb3\0\xa4L\x91\"\xdc\xa4\x10\x84&\xa9\\W-\xe1\xc6\xcd[8f\x89\xfa\x34\x8f\xf2\xedRbHDDDDDDD$\x8a\xe2\xc5\x8b\xc7\xe2\x45\xbf\x30\x65\xeaLLLL\xe8\xdb\xc7%\xc6\xd6\x18\xfa\x1a\xbcI\xf4<~\xf2\x84Y\xb3\xe7\xd3\xb5s{C\xdd\x83\a\xf\xf9y\xee\"\xbaw\xebH\xf2\x64\xc9\x62$)\x14\xd3\xbe\xa5\xa4\x10\xc0\x81\x43\x87\x80\x98O\f\x15\xc8\x9f\x8f\xa6M\x1a\x32\x61\xca\x34\xf2\xe5\xcf\x43\xee\\9\xc3mw\xe9\xf2\x15\xc6\x8f\x9fL\xfdzu(\xfe\x89\x89\x81\x37LMMi\xd6\x34\xf4\xfc\xcc\xa3\x30=]\xf2\xe4\xc9i\xd1\xbc\x19\0\xab]\xd7\x44K\f\x9f*uj;\xfe:\xf3\xa7QYw\x97\xd0\xa9\x19g\xcd\x9c\x62Tnmm\xfd\xd9\xe2\x8aH\xfc\xf8\xf1\x19\x30\xa0\x37=\\\xfaR\xbc\x64y<\x1e<\0`\xc7\xce\xddt\xec\xd8\x9e&\x8d\xea\x3\xb0\x66\xedz\xe6/X\xc4\xad\x7f\xfe\x5\xc0.U*<\x1e<`\xd6OS\xa2\xe5s\xf4\xce\x9d\xbb\xa4O\x9f\xf6\x93\x8f\xf3\xa1\xce_\xb8\xc8\x89\x13\xa7\"\xac\x8f\x1f/>\xadZ5#M\x9a\xff\x46vYZX\xb0\x62\xd9\x42\x43rh\xdd\x9a\x15\x64\xce\x94\xe1\x83\xfb\xce\x94\x39\x13%K\x14\xe7\xd8\xf1\x13\xb4\tg\n\xc9\xb7YZZ\x92+g\x8e\xf\xee\x43\xbeMJ\f\x89\x88\x88\x88\x88\x88\x88\x88|\x80\x82\x5\xf2\xe3\xbajil\x87\xf1\x45\xf1\xf3\xf3\xe7\x7fw\xef\x31\xe4\xc7\x31\x86)\x8a\x86\xe\x1bK`P ~~\xfe\xb1\x1c\xdd\xc7\xb9r\xf5*\x17\xff\xbe\xf4\xcd$\x85>\xb7\xc1\x3\xfbr\xe9\xd2\x15\xea\xd6oJ\xbf\xbe=\xa9]\xab:\xa9R\x86&\a\x1f<|\xc8\xf6\x1d\xbb\x99\x38i\x1a\x99\x33\x65\xe4\xc7!\xfd\xa3\xad_\x13\x13\x13,>`\xcd\x9d\xb7\xdb\x7f)\xa3(\xcc\xcc\xccH\x92$\x89Q\x99\x85\x65h\x8c\xef\x96\x7f)j\xd5\xa8\xc6\x8a\x15\xae\x38\xa4\xb1\xa7\x63\xc7\xef\xf1\xf2\xf2\x66\xf8\xc8\xb1\x8c\x19\x37\xd1\x90\x18\x1a;n2\xf6iR\xe3\xbaj)66\xd6\xcc\x9f\xbf\x18\x37wwjV\xaf\xf6\xc9\xfd\x9f\x38y\x9a\x89\x93\xa6\xb1q\xfd\xeaO>\xd6\x87:s\xe6/\xa6\xcf\x9c\x1d\x61}\x12\xdb$\xb4j\xd5,L\xb9\xb5\xb5\x35+\x96-d\xec\xb8I$K\xf6q\xd7\xd5\xc2\xc2\x9c\xd5+\x17\x13\x10\x10\x88\x85\x85\x1e\xf5K\xd4\xe9n\x11\x11\x11\x11\x11\x11\x11\x11\x89\xc0\x8d\x9b\xb7\xa8Q\xab\xc1\a\xef\x93-[\xd6\x18\x8a\xe8\xcb\xe4\x90&\xb5\x61\xcd\xa1\x7f\xef\xfc\xf\0[[\x1b\x46\x8d\x18\x82\x43\x9a\x98[\x7f)&\x5\x6\x6\x61nn\xc6\xfe\x3\x87\xd8\x7f\xe0\x10\x10\xbav\xce\x8ci\x13\x63\x37\xb0\xaf\x84\xb5\xb5\x35\x1b~]\xc5\xd8\xf1\x93\x19;n\x12\x63\xc7Mb\xc6\xf4I\xc4\x8f\x17\x8fN]\\\0h\xde\xac\x11\xc3\x7f\x1c\x1c\xa7G\xdd}+LLLX\xeb\xba\xcchM\xa9\xae]:\xd0\xbdG_\xbc\xbc\xbc\0\xf0\xf2\xf6\x62\\\xd7\xe1\x94(^\x14\x80\x99\x33&\x13\x14\x14\x14-\t\xb9\xed;w\xe1\xe3\xeb\xf3\xc9\xc7\xf9\x18\xdf\xb7m\xc9\xf7m[~\xd4\xbe\xd6\xd6\xd6L\x9c\x30\xe6\x93\x63PRH>\x94\xee\x18\x11\x11\x11\x11\x11\x11\x11\x91p\x14.T\xe0\xa3\xf6\xcb\x96-\xebG\xef\xfb\x35K\xeb`oH\xe\x1\x8c\x1a\x31\x84\xb4\xe\xf6\xb1\x1c\xd5\xc7\x89\xe8\xfa}\xad\xe7\xf3\x46\x99R\xa5\xde\xdf(\x1aYZZ2r\xf8\x10\xbeo\xd3\x8a\xfd\a\x7f#C\xbat\x98\x99\x9b\x31t\xc8\0*\x94w&S\xc6\f\x9f\x35\x1e\x89Yo'\x85\0\xb2\x64\xce\f@\xc1\xc2\xff\xddwY2e\x8et\x9f\x8fU\xb4p!\xecR\xa5\x2\xc0:\xb1\x15\xadZ5\xc3\xce\xce\xe\x80\n\xce\xce\x86vvv\xa9h\xd5\xaa\x19\xd6\x89\xad\0\xa8Y\xa3\x1a\xe9\xd3}\xfe\xe9\xe7\x44\x62\x9b\xc9\xb5[n!i\xedS\0p\xd7\xed\x11Y3}\x9d\xdf\xe2\x10\x91\xb0|\xfd\x2\x81\xd0\x9f\xed\x37?\xe7\x11y\xbb\x8d>\vDDDDD\xe4kp\xfd\x1fw\xa3\xbf\x63>\xe4\xef\x9e/El\xc5t\xd7\xed\x11@\xa4}\x9f={\xe6\xe3\x8e}\xcf-\xf4\xd8\x9f\x98\x44Ia\x97\x8eG\x1e\xff\xfb\xa4\x63\x44\xa4@\x81\x82\x31r\xdc\xe8\x10\x95k#\xe1{\xfc\xf8\x31\xf\x1e>$W\xce\xf0\xd7\x34z\x9fK\x97/\x93\x32\x65JR$O\xfeQ\xfb\xc7\xe4\xb5\xdb\xbdg\x1f\0\xdfU\xa9\x14\xed\xc7\x86\x98\x89\xfd\xd5\xabW,[\xbe\xca\xa8\xacu\xab\xe6\x1a!&\x12\xcb\xee\xba=\xd2\x88!\x11\x11\x11\x11\x11\x11\x11\x11\x89>_\xfb\xa8\x1a\xf9z%O\x9e\x9c\xe4\x1f\x99\xd4\x1>:\xa1\xf4\x39\xc4TB(&\xc5\x8b\x17\x8f\x8e\x1d\xbe\x8f\xed\x30\x44$\x1c\xa6\xb1\x1d\x80\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88|\x1eJ\f\x89\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\xc4\x11J\f\x89\xc8'Ii\xef\x18\xe9\xbf\xad\xdb\xb6G\xe9\x38>>>xyy}P\xdf\x95\xab\xd4\x64\xd1\xa2%Qn\xbf\x62\xe5*\x8a\x97,\xf7\x41}|\f///|||\f\xdb\x81\x81\x41|\xdf\xee\a\x96-[\x11\xe3}C\xe8\x9c\xca\xcbW\xac\xe2\xfbv?\x90\xaf@\t\x1a\x34j\xc6\xdau\xeb\t\b\b0jw\xec\xf8\t\xda\xb5\xef\x44\x91\x62\x65\xe8\xd7\x7f\x10\x37n\xdc\x8c\xf0\x98\x19\xb3\x38\x45x\x8d\xaf]\xbb\x1e\xd3\xa7$\"\"\"\"\"\xb1\xc0\xc2\xdc\"\xb6\x43\x88\x11\x16\x16\xdf\xe6y\x89\x88\x88\x44\x95\xd6\x18\x12\x91O\xb2\x65\xc3\x7f\xc9\x8e\xbd{\xf7\xb3`\xf1*~]\xf3_\xb2&}\xfa\xf4Q:\xce\xd2\x65+8t\xe8\b\xeb\xd6\xaez\x7f\xe3/\\\xfb\xe\x9dqv.C\x97\xce?\xc4J\xffG\x8e\x1c\xe5\xcf?\x8fS\xbd\xfaw4o\xd6\x98K\x97\xae\x30r\xf4\x44\x1e?~L\xd7.\x9d\0\x38|\xf8\b\x1d:\xb9\x30lH?\x9a\x34n\xc0\xee=\xfb\xa8Y\xa7\x31;\xb6\xfeJ\xe6\xcc\x99\xc2\x1cs\xf5\xca\x85\x10\x12\x62T\xd6\xb5{\x1f\xee\xb9=\f\xb7\xbd\x88\x88\x88\x88\x88|\xfd\xac\x12'\xe6\xd9\xb3\xa7\xb1\x1d\x46\xb4\xb3\xb2J\x1c\xdb!\x88\x88\x88\xc4*%\x86\x44\xe4\x93\x14/^\xcc\xf0\xfa\xf6\xbfw\xb0\xb0\x30\x37*\x13\x30\x37\x37\x63\xf1\xa2y\x9f\xad\xbf:ujQ\xaf^\x1d\xc3v\x85\n\xe5\xb1\xb7O\xcd\x88\xd1\x13\xe8\xdc\xa9#\xa6\xa6\xa6\x8c\x9f\x38\x95\xce?\xb4\xa5\x45\x8b\x66\0\x94+W\xeO\xcf\xe7,_\xbe\x92\x91#\x87\x85\x39\x66\xf1\x62\x45\x8d\xb6}}}\t\xe\xe\x61\xd6\x8c\xf1\x98\x9b\xeb\xbf\x12\x11\x11\x11\x11\x91\x8f\x95\xd6>\xc5\x17\xdbo\x9a\x34i\xf0\xf2\xf2\"((\xf0\x33\x44\x14\xd6#\x8f\xff\x45\xfb\x31\xcd\xcc\xccI\x93&M\xb4\x1f\x37:\xc5\xd6=!\x9f\xeek\xbev_s\xec\"\xf2\xe1\x34\x95\x9c\x88|\x16\x8f\x1f?f\xd4\xe8q\x94*S\x91\x6\x8d\x9a\xb1\xee\xd7\xf5\x4\a\a\x3\x30o\xfe\x42\x46\x8c\x9e\xc2\xa1\xdfO\x92\xd2\xde\x91\xe6-\xda\0\xb0o\xff\x1\xbau\xefI\x91\x62\x65\xa8R\xb5\x16s\xe7\xce\xc7\xcf\xcf/\xca}\xba\xb9\xb9\x33h\xf0\x8f\x14/Y\x8e\x9e\xbd\xfa\xb2y\xcb\x7f\xd3\xda\x5\a\a\x93\xd2\xde\x91\x1d;w\x19\xcan\xdf\xbe\x1d:5\xda\xf5\xd0\xa9\xd1\xa6L\x99\xce\x84\x89\x93Y\xbat9U\xaa\xd6\xa2_\xff\x41\xf8\xfa\xfa\xe2\xba\x66--[}O\x9e\xfc\xc5h\xd0\xa8\x19;v\xfcw\x8c\xe6-\xdap\xe8\xf7\x93\x8c\x18=\x85\x94\xf6\x8e\xcc\x9b\xbf\x10\b;\xed\x9d\xbf\xbf?\v\x17.\xa6v\xdd\x46T\xa8X\x8di\xd3g\xf2\xe2\xc5\vC\xfd\x94)\xd3\x19\xfa\xe3\b\xa6L\x9d\x41\x95\xaa\xb5\xa8^\xb3\x1e\xeb\x37l$\xe4\xf5\xa8\x1dww\xf\xea\xd6k\xcc\xfe\xfd\a\xc3\x9c\xb7\xa9i\xd8\x8fv???R\xa5H\x8e\xa9\xa9)/_\xfap\xf6\xaf\xcb\x14,\x90\xdfPonnF\xd5\xef*\xf3\xcb\x82\x15\xf8\xfb\xfb\xbf\xf7\xbd=\xf8\xdb!\x9e{yS\xa5r\xc5p\xeb\xaf]\xbfN\xef>\xfd)T\xa4\x34\xc5K\x96\x63\xf0\x90\x61\x61\xa6\xb2\x13\x11\x11\x11\x11\x91/\x9b\xa5\xa5%9r\xe4 I\x92\xa4_\xfd\xf4k\x16\x16\x16$I\x92\x94\x1c\x39r`ii\x19\xdb\xe1\x88\x88\x88\xc4*}\xcd[Db\x9c\xb7\xb7\x37u\xea\x35\xa1l\x99\x92\x8c\x1b\x33\x9c\x7f\xef\xfc\x8f\x1\x83\x46\xf2\xf4\xc9S:u\xeaH\xad\x9a\xd5\xd9\xbam'\xa7\xce\\\xe4\xe0\xde\xcd\xc4\x8b\x1f\xf\x80\xabW\xae\x92+gN\xea\xd6\xad\x8d\x97\x97\x17\x43~\x1c\x43pHH\x94\xa6h\xf3\xf4\xf4\xa4\x46\xad\x6T\xa9\\\x9e\t\xe3\x46\xf2\xbf\xbbwY\xbdv\xcb\a\xc7>m\xe6|\xea\xd5\xfe\x8e\xe\xed\xdb`gg\x87\x89\x89)\xe7\xce\x9d\xa7R\xa5\n\xb4k\xd7\x86\xabW\xae\xd2\xb6\x43\xf\xb6lXA\xf1\xe2\xc5\x18\x31\x62(\xfb\xeV\xa5pA'&\x8e\x1fM\xb2\x64I\xc3\x1c\x33$$\x84\x81\x83\x86r\xff\xbe;=\xbau\xc2\xcf\xef\x15\x93\xa6\xcc\xe0\xaf\xbf.\xb0t\xc9\x2LMM\t\xe\tf\xfe\xa2U\f\x19\xe0\xc2\xa0\x1}8s\xf6\x1c]\xba\xf y\xf2\xe4\x38\x97-\x83\x97\x97\x17\xa7\xce\\\xe0\x7fw\xef\x46\x18\xfb\xa5\xcb\x97y\xf6\xcc\x93\xcb\x97\xaf\x30\xe3\xa7\xb9,Z0\x1b\x80\x4\t\xe2\x93<\x99-\xf7\xdd\xdc\x8c\xdao{\x9d\xe0z\xfa\xf4\x19vv\xa9\" \xbe/\xf1\xf3\xf3# 0\x80\xe0\xe0\x10%\x85\x44\x44\x44\xe4\x8b\x17\x12\x12\x42pp\b\x1\x81\x1\xf8\xf9\xf9\xe1\xe3\xfb\xf2\xbd\xcf\x45\x95\x18\x12\x91\x18\xe7\xe4\x94\x8b}\xfb\x7f\xc3\xff\xad\x64\xc8\xe5+W\xb1\xb5\xb1\"m\xda\xd0\x11@&\x98\xe0\xe3\xebg\xa8\x7f\xf2\xe4\t[w\xec\xa7y\xf3&\xe4\xcf\x97\x97\xd4\xa9Ss\xe9\xd2\x95(\xf7\x99;wN\xf6\xee\x33\xee\xf3\xdc\xb9\xf3\xbc\xf4\xf1\x5\x42\xa7SK\xe7`\xc7\xcd\x9b\xb7\f\xf5\xfe\x1\x1\xef=\xee\xa5KW\xb8}\xe7>\xad[\xb5$G\xf6\xec\xa4J\x95\x8a\xa0\xa0`\xf6\x1e\x38jhcbbj\xd4\xef\xbb\x32g\xca\xc4\xf5\x9bw\xb8}\xfb_C\x99\x9b\x9b;\xd7o\xde!kV\xc7(\x9f\xe3\xcb\x97/\xc3-\xf\f\f\xfb\xc1\xef\xeb\xeb\xc7K\x1f?\x92$\x89xt\xd6\x92\xa5+\xe9\xd3\xbb\x87!\x1\xe5\xe7\xf7\x8a\xa0 \xe3\x84\xde\xd6\xad\xdb\xc9\x95#\v\xc5\x8a\x46>B\xca\xc4\xc4\x84\x9c\x39s\xd0\xb5K'\xd6\xba.\xe3\x8f\xe3g9\x7f\xfe\x62TNKDDDD\xe4\xb3{\xf5\xea\x15\xbe~~\x4+\x11$\"\"\"_\xb9\xe0\x90\x10|\xfd\xfcx\xf5\xeaU\x84m4\x95\x9c\x88\xc4\xb8\x86\r\xea\x31k\xce\x2\xfa\xf4\x1d@\xc3\x86\xf5y\xf6\xf4\x19#GO`\xcc\xa8!$J\x94\b\x80\x8c\x19\xd3s\xf2\xf4\x5\xf6\xed?\x80\x8d\xb5\x35\xf9\xf3\xe7#c\xfa\x34,^\xbc\x8c\xc0\xc0@\xbc\xbc\xbc\xd8\xb3\xffw\xa3\xe3\xa6H\x91\x8c\xbf/]\xe6\xf2\xe5+\xe4\xcc\x99\xc3\xa8\xae\x41\xfd\xbaL\x9f\xf9Kh\x9f\r\xea\xf1\xe4\xc9SV\xban2j\xd3\xb8\x61]V\xacZ\x8b\x9d]*\x92'OF\xd3\x96\xef_\xbb(M\x1a{\0\xe6\xfc<\x97\xf2\xe5\x9d\xb9~\xfd\x6\0\xed\xda\x34\x31\xb4\xc9\x9d;';w\xee\xa5\x64\xc9\x12$J\x98\x30LlE\x8b\x16\xa1\x42\xb9\x12t\xee\xea\x42/\x97nXZZ\xf0\xcb\xdc\x5\xb4lV\x8f\xbcy\xf3\x44\xe9=\xbd~\xfd\x6\x95\xbe\xab\xc3\xa8\xe1\x3i\xdd\xba\xa5Q\xdd\x98\x31\xe3y\xe6\xe9I\x89\x12\xc5I\x91<9\xde\xde\xde\xacY\xb7\x9e\xc2\x5\x9c(]\xaa$\0s\xe7-\xc0\xc6\xc6\x9a\xd4\xa9S\xf3\xf8\xd1\x63V\xbb\xae\xc3\xd6\xd6\x86Z5\xab\x3\xe0\xe7\xe7G\xe5\xefj\x91=\x9b#\xf3\xe7\xcd\x1\xc0\xc7\xc7\x87\x9f\xe7-f\xc8\xa0\xbe\x61\xa6\xd7{\xdb?\xff\xdc\x66\xcd\xda_)Z\xb4\x30\xb6\xb6\xb6\x9c:y\n33S\xd2\xa5K\x1b\xa5s\x13\x11\x11\x11\x11\xf9\x9c^\xbdz\x85\x7f\xe0\xfb\xbf$&\"\"\"\xf2\x35y\xf3\xfbM\xbcx\xf1\xc2\xd4i\xc4\x90\x88\xc4\xb8\x94)S\xb2{\xc7\x46,--\xe9\xddg\x10\x1b\x37oe\xc2\xb8\x91\x34j\xd8\xc0\xd0\xa6\x62\xc5\n\f\xec\xd7\x8d\x41\x83G0{\xce\\\xfc\xfd\x3X\xbax.A\xc1\xc1\xf4\xec\x35\x90\x3\a~c\xf2\xf8\x61\x46k\f\xf5\xe9\xed\xc2_\xe7\xff\x66\xf4\xd8\ta2\xe0\xa9R\xa5\x62\xf7\x8e\x8d\0\xf4\x1b\xf0#\xa7\xcf\x9c\x65\xe2\xb8\x1f\x8d\xf6\xef\xd2\xe5\a\x1a\x36\xa8\xcd\xd4\xe9\xb3X\xb6|\x15\x33\xa6\x8e!e\x8a$\x91\x9eK\xa6L\x19Y\xbe\x64\xe\x7f\xfcy\x9c\xbe\xfd\x6\xe3\xe1\xe1\x41\x8f\xae\xed\f\t.\x80\xce\x9d:\x90+Wv~\xe8\xd4\x83-[\xb7\x85\x39\x86\x99\x99\x19\xf3~\x99\x45\xf9re\x18\x37\x61\n3~\xfa\x99*U*1~\xdc\xe8(\xbf\xa7VVV\xe4u\xca\x81\xfd\xeb\x44\xd5\xdb\x9a\x36mL\xc6\x8c\x19\xd8\xb8q\v\xdd\\\xfa\xb1l\xf9*\xca\x96.\xc9\xb2\xa5\vI\x9c\x38t]\xa2\x94)R\xb0\x63\xc7nz\xf4\xec\xcf\xae\xdd{\xa9]\xbb\x6\v\xe6\xcd!A\x82\x4\0\x98\x9b[\x90\x33G6\xb2\x65\xfbo\x4\xd3\xc1\x83\x87\xf0\xf6~I\x95\xca\x15#\x8d\xcd\xd2\xd2\x12\x13\x13\x98\x34y:-[w\xe4\xd8\x89Sl\xfau9\xe9\xd3\xa7\x8b\xf2\xf9\x89\x88\x88\x88\x88|\xe\x81\x41\x81J\n\x89\x88\x88\xc8\x37\xcb?0 \xdci\xe5L\xae\xddr\vIk\x9f\x2\x80\xbbn\x8f\xc8\x9a)\xf5\xe7\x8eMDb\x88\xaf_\xe8\xf\xfd]\xb7G\xbc\xf9\x39\x8f\xc8\xdbm\xf4Y \"\"\"\"\"_\x83\xeb\xff\xb8\x1b\xfd\x1d\xf3!\x7f\xf7\x84\x84\x80\x8f\xefKM\x1f'\"\"\"\xdf\x34S\x13\x13\x12&L\xc4\x9b\xd5\xcb\xef\xba=\xd2\x88!\x11\x11\x11\x11\x11\x11\x11\x89{\x2\x83\x3\x95\x14\x12\x11\x11\x91o^pHH\x98QCJ\f\x89\x88\x88\x88\x88\x88\x88H\x9c\x13\x14\x18\x14\xdb!\x88\x88\x88\x88|\x16\xef\xfe\xde\xa3\xc4\x90\x88\x88\x88\x88\x88\x88\x88\xc4\x39\x41\xc1\x61\xe7\xdb\x17\x11\x11\x11\xf9\x16\xbd\xfb{\x8f\x12\x43\"\"\"\"\"\"\"\x12\xe7h\x16\x39\x11\x11\x11\x89+\xde\xfd\xbdG\x89!\x11\x11\x11\x11\x11\x11\x11\x89sB\x94\x19\x12\x11\x11\x91\x38\xe2\xdd\xdf{\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x89#\x94\x18\x12\x11\x11\x11\x11\x11\x11\x11\xf9H\xde\xde\xde,\\0\x8f\xa2\x85\n\xf0\xe8\xe1\xc3H\xdb\x9e?\xff\x17\x43\x6\xf\xa4\xfaw\x95\x19\x37v4\xeenn\x9f)J\x11\x11\x11\x91\xff(1$\"\"\"\"\"\"\"\xf2\x81|}}\xd9\xb4q\x3\xb5\xaaWe\xfa\xd4)\xbcx\xe1\x1di\xfb\x33\xa7O\xd1\xba\x45s2g\xce\x42\xff\x81\x83y\xee\xe9\xc9\xf7m[\xf1\xf0=\xc9$\x11\x11\x11\x91\xe8\xa6\xc4\x90\x88\x88\x88\x88\x88\x88\x88\xc8\a\xba|\xf9\x12\x1b\xd6\xff\xca\x88QcX\xe5\xba.\xd2\xb6\xc1\xc1\xc1\xcc\xfai&=\\z\xf2}\xbb\xf6\x94uvf\xe4\xe8\xb1\xd8\xda\xd8\xb2m\xeb\xe6\xcf\x14\xb1\x88\x88\x88H(%\x86\x44\x44\x44\x44\x44\x44\x44\x44>P\x81\x2\x5Y\xb6\x62\x15\x65\x9d\x9d\xb1\xb4\xb4\x88\xb4\xed\xad\x9b\x37\x39u\xf2\x4\xe5\xcaW0\x94\xc5\x8f\x1f\x9fZu\xea\xb0|\xe9RBBBb:\\\x11\x11\x11\x11\x3%\x86\x44\x44\x44\x44\x44\x44\x44\x44>\x90\x89\x89\tfffQj\xfb\x66\xba\xb8\x14)R\x18\x95\xa7M\x9b\x8e\xc7\x8f\x1f\xe1\xed\x1dv\x1a\xba\\\xd9\x1d?=H\x11\x11\x11\x91p\x98\xc7v\0\"\"\"\"\"\"\"\"\xdf\xb2\xa7O\x9f\0\x10/~|\xa3\xf2\x44VV\0\xbcx\xe1\x8d\xb5\xb5u\x98\xfd\"J\xe]\xbaz#\x9a#\x14\x11\x11\x91\xb8\x44\x89!\x11\x11\x11\x11\x11\x11\x11\x91\x18\x64\x63\x63\x3\x80\xaf\xaf/\x16\x16\xffM;\xe7\xeb\xe3\x63\xbbL7\x9e\0\0 \0IDATT\xff.%\x80\x44\x44\x44$&h*9\x11\x11\x11\x11\x11\x11\x11\x91\x18\x94\"EJ\0\x1exx\x18\x95\xbb\xbb\xbb\x93&\x8d\x3\x89\x12Y\xc5\x46X\"\"\"\x12G)1$\"\"\"\"\"\"\"\x12\xcd|^\x8f\x6\x2p\xcc\x9a\x95\xec\x39r\xb2\x7f\xff>CY`` ;wl\xa7U\x9b\x36\xb1\x10\x9d\x88\x88\x88\xc4\x65\x9aJNDDDDDDD$\x1a\xdd\xbau\x93\x46\xf5\xeb\xd2\x7f\xe0`\x1a\x37i\x8a\xb9\xb9\x39={\xf5\xa6S\xc7\xf6XX\x98\x93#G.\xe\xec\xdf\xc7\x93'O\xa8V\xbd\x66\x84\xc7\xd9\xb3{\x97\xe1u\x95\xef\xaa~\x8e\xd0\x45\x44\x44$\xePbHDDDDDDD$\x1a%JdE\xae\\\xb9\xb1\xb3Km(+]\xa6,\x8b\x96,c\xfd\xaf\xeb\xd8\xbci#e\xcb\x96\x63\xc1\xa2%$M\x9a\x34\xc2\xe3(\x19$\"\"\"1A\x89!\x11\x11\x11\x11\x11\x11\x11\x91O\x90\x33Wn.]\xbd\x61\xd8\xb6\xb3\xb3\x63\xf9*\xd7\x30\xed\x8a\x15/A\xb1\xe2%>gh\"\"\"\"ah\x8d!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91\x38\x42#\x86\x44\x44\x44\x44\x44\x44\x44\x44\xbe@ZcHDDDb\x82\x12\x43\"\"\"\"\"\"\"\"_ %\x83\x44\x44\x44$&h*9\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91\x38\x42\x89!\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x91\x38\x42S\xc9\x89\x88\x88\x88\x88\x88\x88\x88|\x81\xb4\xc6\x90\x88\x88\x88\xc4\x4%\x86\x44\x44\x44\x44\x44\x44\x44\x44\xbe@J\x6\x89\x88\x88HL\xd0Tr\"\"\"\"\"\"\"\"\"\"\"\"q\x84\x12\x43\"\"\"\"\"\"\"\"\"\"\"\"q\x84\xa6\x92\x13\x11\x11\x11\x11\x11\x11\x11\xf9\x2i\x8d!\x11\x11\x11\x89\tJ\f\x89\x88\x88\x88\x88\x88\x88\x88|\x81\x94\f\x12\x11\x11\x91\x98\xa0\xa9\xe4\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\xe2\b%\x86\x44\x44\x44\x44\x44\x44\xfe\xcf\xde}\x87YU\x9d{\0\xfe\rS\0\x91\"M\x10\xd0X(\x8a\x9a\xc4\xde\x1b*`\xaf`\vv\x93\x1b{7v\x8d&\xb6h\x8c\xc6\xd8\xc1^b!F\x5,\xd1\x44ob\xc4\x1a\xf5\xda\x8d^\xa5\xaa\x80Re\x86\x99\xfb\a\xd7\x89#\x83\x32\xca\x61\x6\xce\xfb>\xf\xcfs\xce\xda{\x9d\xfd\x1d\x36\x33\xc3\xcco\xd6\xb7\0\0\0\x8a\x84Vr\0\0\0\0M\xd0UW^Q\xe7\xf9\xcf\x8f\x38\xb2\x91*\x1\0\x96$\x82!\0\0\0\x80&H\x10\x4\0\x14\x82Vr\0\0\0\0\0\0\x45\x42\x30\x4\0\0\0\0\0P$\xb4\x92\x3\0\0\0h\x82\x46\x8d\x1cQ\xfb\xb8\xff\x80\x81\x8dX\t\0\xb0$\x11\f\x1\0\0\0\x34\x41\xc2 \0\xa0\x10\xb4\x92\x3\0\0\0\0\0(\x12\x82!\0\0\0\0\0\x80\"\xa1\x95\x1c\0\0\0@\x13\x64\x8f!\0\xa0\x10\x4\x43\0\0\0\0M\x90\x30\b\0(\x4\xad\xe4\0\0\0\0\0\0\x8a\x84`\b\0\0\0\0\0\xa0H\b\x86\0\0\0\0\0\0\x8a\x84=\x86\0\0\0\0\x9a\xa0Q#G\xd4>\xb6\xdf\x10\0\xb0\xb0\b\x86\0\0\0\0\x9a a\x10\0P\bZ\xc9\x1\0\0\0\0\0\x14\t+\x86\0\0\0\0\x1ah\xd6\xacY\xb9\xfd\xd6[\xf2\xd8\x63\x8f\xa4u\xeb\x36\xd9~\x87\x1d\xb3\xe3N;\xa7\xa4\xa4\x64\xbes^~\xf9\xa5\xdcz\xf3My\xe1\xf9\xe7\xb2\xd2\xca+g\xb7\xdd\xf7L\xff\x1\x3\xd3\xac\x99\xdf\xdb\x5\0\x16\x1d\xc1\x10\0\0\0@\x3TUU\xe5\x17'\x9f\x98i\xd3\xa6\xe6\x90\x43\x7f\x9aI\x93&\xe5\x97\xe7\x9c\x95\xc9\x93'g\xff\x3\xe\xacw\xcek\xaf\xbe\x9a}\x6\xef\x99\x63\x8e;!\xbb\xec\xba[\xde|\xe3\x8d\x9c~\xea)\xf9\xe2\x8b/\xb2\xcb\xae\xbb\xd5;\xc7\x1e\x43\0@!\b\x86\0\0\0\0\x1a\xe0\xd9g\xff\x99\xa7\x9f\xfa[F=\xf6\x44\xda\xb7o\x9f$i\xdb\xb6mN9\xe9\x84\xec\xb0\xe3N\xe9\xd0\xa1\xc3 \x99\xc7\x1e{$\xff\xfc\xc7?\xb2\\\xb7n\xd9z\x9bm\xb3\xfb\x1e{\xa6\x65\xcb\x96\xf3\x9ck\x8f!\0\xa0\x10\x4\x43\0\0\0\0\rPUU\x95_\x9c|b\xa6M\x9b\x9a\x43\xe\xfdi&M\x9a\x94_\x9esV&O\x9e\x9c\xfd\xf\x38p\xbe\xf3\xfep\xd5\xefs\xcf\xddw\xe6\x90\xc3~\x9am\xb6\xd9\x36S\xa7N\xcd\v\xcf?\x9f\x8a\x8a\x8az\xcf\x17\x6\x1\0\x85 \x18\x2\0\0\0h\x80g\x9f\xfdg\x9e~\xeao\x19\xf5\xd8\x13i\xdf\xbe}\x92\xa4m\xdb\xb6\x39\xe5\xa4\x13\xb2\xc3\x8e;\xa5\x43\x87\xe\xf3\xccy\xfd\x7f\xfe'\xd7\xfc\xe1\xaa<4rT\xbau\xeb^;\xbe\xfd\xe;.\xb2\xba\x1\0\x12{\f\x1\0\0\0\x34\xc8\xc8\x11\xfg\xe7]v\xad\r\x85\x92\x64\xa3\x8d\x37\xc9\x9c\x39\xd5yn\xf4\xb3\xf5\xce\xb9\xff\xfe{\xb3\xf7\xbe\xfb\xd6\t\x85\0\0\x1a\x83\x15\x43\0\0\0\0\r\xf0\xf6\x9bof\xe0\xf6;\xd4\x19k\xd5\xaaUz\xf5\xee\x95\xf1\xe3\xc6\xd5;\xe7\x7f^{-;\xec\xb8S\x1e\xfc\xf3\x3\xb9\xfb\xce;2i\xf2\xa4\f\x1c\xb8}\x86\x1cp`Z\xb7n]\xef\x9c\xbe}z\xd6;\xfe\xda\x1bo\x7f\xbf\x37\0\0\x14\x35\xc1\x10\0\0\0\xc0\x2\xaa\xa9\xa9\xc9\xeb\xaf\xbf\x9e=\x6\r\x9a\xe7X\xa7N\x9d\x33i\xf2\xa4y\xc6\xab\xab\xab\xf3\xaf\x97_\xca\x8b/<\x9f=\a\xed\x95\x83\xf=,\xd5\xd5\xd5\xb9\xfa\xfW\xe5\xc3\xf\xff\x37\xbf\xbe\xf0\xe2\x94\x94\x94\xcc\x33O\0\x4\0\x14\x82`\b\0\0\0`\x1\x95\x94\x94\x64\xa5\x95W\xca\xd4\xa9S\xe7\x39\x36y\xf2\xa4t\xea\xd4i\x9e\xf1\x66\xcd\x9a\xa5m\xbbv\x99\xf4\xe9\xa7\x39\xeb\x9cskC\xa0N\x9d;g\xf0\x1e\xbb\xe5\x88#\x8fN\xf7\x1e=\n^;\0@\"\x18\x2\0\0\0h\x90^\xbdz\xe7\xbd\xf7\xde\xab\x33\xf6\xc5\x17_\xe4\xddw\xdeM\x97.]\xeb\x9d\xf3\xa3\x1f\xfd\x38\xed\xdbw\xa8\xb3\x32h\xd9\x65\xbb$I\xa6L\x99\"\x18\x2\0\x16\x99\x66\x8d]\0\0\0\0\xc0\xe2\x64\x9bm\xfb\xe7\x81\xe1\xc3\xf3\xf1\xc4\x89\xb5\x63\xcf?7:I\xb2\xeez\xeb'\x99\xdb>n\xe6\xcc\x99\xb5\xc7\xb7\xed? O>\xf1\x97:+\x8d\xdex\xfd\xf5$I\xd7\xe5\x96\xab\xf7:\xa3\x46\x8e\xa8\xfd\x3\0\xb0\xb0X1\x4\0\0\0\xd0\0\x9bn\xbaY\xd6^g\x9d\x9cx\xc2q\xd9\xff\x80\x3\x33\x63\xc6\x8c\\t\xc1\xafs\xfc\x89'\xa5m\xdb\xb6I\x92\v~u^\x1e\x7f\xec\xd1\xdc\xff\xc0\x43i\xd3\xa6M\xb6\xea\xb7un\xbd\xe5\xe6\x9cx\xfc\xb1\xd9s\xd0\xe0$\xc9\x35W_\x95\x63\x8e;!\x1d:t\xa8\xf7:\xfd\a\f\\d\xef\t\0(\x1e\x82!\0\0\0\x80\x6\xa8h\xde<\x97\xff\xee\xca\f\x1bvc\xae\xf8\xddo\xd3\xb5\xebr9\xf5\xf4\x33\xea\x4\x39\xcb\xaf\xf0\x83\xf4Yu\xb5TTT$IZ\xb5j\x95\xab\xaf\xbd>7\xdep].\xbf\xec\xd2t\xea\xdc\x39\xfb\xfd\x64\xffl\xbf\xc3\x8e\x8d\xf5\x36\0\x80\"U\xf2\xe6\xbb\x63kz,7wc\xc4\xf\xc7~\x9c^+\xd5\xdf\v\x17X\xfc\xcc\x9cU\x95\x64\xee\xc7\xf6\x97\x1f\xe7\xf3\xf3\xd5s|.\0\0\0\x16\ao\xbd\x37\xae\xce\xf7\x31\r\xf9\xbeg\xea\xf4i\x5\xaf\xef\xfb\xe8\xdb\xa7g^{\xe3\xed\xc6.\x3\0XB\xb4n\xb5t\x92\xb9\xff\x1f\xb2\xc7\x10\0\0\0\0\0@\x91\xd0J\xe\0\0\0\xa0\t\x1a\x35rD\xed\x63\xfb\r\x1\0\v\x8b`\b\0\0\0\xa0\t\x12\x6\x1\0\x85\xa0\x95\x1c\0\0\0\0\0@\x91\x10\f\x1\0\0\0\0\0\x14\t\xad\xe4\0\0\0\0\x9a {\f\x1\0\x85 \x18\x2\0\0\0h\x82\x84\x41\0@!h%\a\0\0\0\0\0P$\x4\x43\0\0\0\0\0\0\x45\x42+9\0\0\0\x80&\xc8\x1e\x43\0@!\b\x86\0\0\0\0\x9a a\x10\0P\bZ\xc9\x1\0\0\0\0\0\x14\t\xc1\x10\0\0\0\0\0@\x91\xd0J\xe\0\0\0\xa0\t\xba\xea\xca+\xea<\xff\xf9\x11G6R%\0\xc0\x92\x44\x30\x4\0\0\0\xd0\x4\t\x82\0\x80\x42\xd0J\xe\0\0\0\0\0\xa0H\b\x86\0\0\0\0\0\0\x8a\x84Vr\0\0\0\0M\xd0\xa8\x91#j\x1f\xf7\x1f\x30\xb0\x11+\x1\0\x96$\x82!\0\0\0\x80&H\x18\x4\0\x14\x82Vr\0\0\0\0\0\0\x45\x42\x30\x4\0\0\0\0\0P$\xb4\x92\x3\0\0\0h\x82\xec\x31\x4\0\x14\x82`\b\0\0\0\xa0\t\x12\x6\x1\0\x85\xa0\x95\x1c\0\0\0\0\0@\x91\x10\f\x1\0\0\0\0\0\x14\t\xad\xe4\0\0\0\0\x9a {\f\x1\0\x85 \x18\x2\0\0\0h\x82\x84\x41\0@!h%\a\0\0\0\0\0P$\x4\x43\0\0\0\0\0\0\x45\x42+9\0\0\0\x80\x6\x9a\x30\x61|n\x1a:4O?\xf5\xb7\xac\xd6\xb7o\x6\r\xde;k\xad\xbd\xf6\x2\xcd\xad\xaa\xaa\xca\xd1G\x1e\x9e\xea\xea\xea\xfc\xe1\x9a\xeb\n\\)\0@]V\f\x1\0\0\0\x34\xc0\xc4\x89\x13s\xf0\x81\xfbg\xd6\xacY9\xe1\xa4\x93\xd3\xad{\xf7\x1c\x30\x64\xdf<\xff\xdc\xe8\x5\x9a\x7f\xf7]w\xe6\xc9'\xfe\xf2\xad\xe7\x8d\x1a\x39\xa2\xf6\xf\0\xc0\xc2\x62\xc5\x10\0\0\0@\x3\xdc\x7f\xdf=Y~\xf9\x15r\xda\x19g\xa6\xb4\xb4\x34\x9bm\xbe\x45\xbe\x98\xf5\x45\xae\xfa\xfd\x95\xb9\xfe\xc6\x61)))\x99\xef\xdc\x37^\x7f=\xbf\xbf\xf2w\xd9i\xe7]2e\xca\x94o\xbcN\xff\x1\x3\x17v\xe9\0\0V\f\x1\0\0\0,\xa8\xaa\xaa\xaa\xdcx\xfd\xf5\xd9\x61\xc7\x9dRZZZ;\xbem\xff\x1y\xe6\x1f\x7f\xcf\xff~\xf0\xc1|\xe7N\x9f>=g\x9dyz\xce<\xeb\x9c\xf4\xe9\xb3\xea\xa2(\x17\0`\x1e\x82!\0\0\0\x80\x5\x34\x65\xca\xe4L\x9b\x36\x35]\xbat\xad\x33\xde\xb5\xeb\xdc\xe7\x9f|\xf2\xf1|\xe7^{\xcd\x1f\xd2\xb3W\xafl\xdb\x7f@Ak\x4\0\xf8&Z\xc9\x1\0\0\0,\xa0/\xdb\xbf\xb5l\xd9\xb2\xce\xf8R\xad\x96J\x92|\xfe\xf9\xe7\xf5\xce\xfb\xfb\xdf\xff;\xf>\xf0\xa7\xdc}\xef\xfd\xdf\xd8j\xee\xab\xfa\xf6\xe9Y\xef\xf8ko\xbc\xbd\xa0\xe5\x2\0\xcc\x43\x30\x4\0\0\0\xb0\x80Z\xb7n\x9d$\x99>cz\x9d\xf1\x99\x33g%I\xda-\xb3\xcc\xfd\xf4\x93\x9cy\xfa\xa9\x39\xf7\xbc_\xa5\x43\x87\x8eI\x92\x9a\xd4|\xeb\xb5\x4@\0@!\b\x86\0\0\0\0\x16\xd0\x32\xcb\xb4Oiii\xc6\x8e\x19\x93\xac\xb3n\xed\xf8\xc7\x1fOL\x92t\xea\xd8i\x9e\x39\x37\\w]\xc6\x8d\x1d\x9b\xc3\xe\x39h\x9e\x63}\xfb\xf4\xccO\xf6? \xa7\xfc\xe2\xb4\xc2\x15\r\0\xf0\x15\x82!\0\0\0\x80\x5TQQ\x91\xfd\xf<(\x7f~`x\x6n\xb7}\xca\xcb\xcb\x93$\x7f}\xf2\x89l\xb1\xe5V\xe9\xd6\xbd{\x92\xe4\x8b/\xbeHYYYJKK\xb3\xe7\xa0\xc1\xd9\x61\xc7\x1d\xeb\xbc\xce\xd9g\x9d\x91\xd7^}5\x7f\xbc\xf7\xfe,\xfd\xff\xab\x90\0\0\x16\x5\xc1\x10\0\0\0@\x3\f\x1a\xbcW\x86\xec\xbbO\xce;\xf7\x9cl\xdb\xbf\x7f\xdez\xeb\xad\\w\xcd\xd5\x19z\xf3\xad)))\xc9\xacY\xb3\x32x\xcf\xdd\xd2\xb3g\xaf\\r\xe9o\xb3\xe2J+\xcd\xf3\x1a\x3\xb7\xdb!\x1d:t\xccj}W\x9f\xefuF\x8d\x1cQ\xfb\xb8\xff\x80\x81\x5y/\0@\xf1\x11\f\x1\0\0\0\x34@\x8f\x1e\xcbg\xd8-\xb7\xe5\xe6\x61\x43s\xde/\xcf\xc9Zk\xaf\x93\x9bo\xbd#}W\x9f\x1b\xf2\x94\x97\x97\xa7w\xef>Yq\xa5\x95\xbf\xd7u\x84\x41\0@!\b\x86\0\0\0\0\x1ah\x85\x15V\xc8\x19g\x9d]\xef\xb1\xd2\xd2\xd2\\t\xc9\xa5\xdf\x38\xff\xc0\x83\xe\xce\x81\a\x1d\\\x80\xca\0\0\xbeY\xb3\xc6.\0\0\0\0\0\0\x80\x45\xc3\x8a!\0\0\0\x80&\xc8\x1e\x43\0@!\b\x86\0\0\0\0\x9a a\x10\0P\bZ\xc9\x1\0\0\0\0\0\x14\t\xc1\x10\0\0\0\0\0@\x91\xd0J\xe\0\0\0\xa0\t\xb2\xc7\x10\0P\b\x82!\0\0\0\x80&H\x18\x4\0\x14\x82Vr\0\0\0\0\0\0\x45\x42\x30\x4\0\0\0\0\0P$\xb4\x92\x3\0\0\0h\x82\xec\x31\x4\0\x14\x82`\b\0\0\0\xa0\t\x12\x6\x1\0\x85\xa0\x95\x1c\0\0\0\0\0@\x91\x10\f\x1\0\0\0\0\0\x14\t\xad\xe4\0\0\0\0\x9a\xa0\xab\xae\xbc\xa2\xce\xf3\x9f\x1fqd#U\x2\0,I\x4\x43\0\0\0\0M\x90 \b\0(\x4\xad\xe4\0\0\0\0\0\0\x8a\x84`\b\0\0\0\0\0\xa0H\b\x86\0\0\0\0\0\0\x8a\x84=\x86\0\0\0\0\x9a\xa0Q#G\xd4>\xee?``#V\x2\0,I\x4\x43\0\0\0\0M\x90\x30\b\0(\x4\xad\xe4\0\0\0\0\0\0\x8a\x84`\b\0\0\0\0\0\xa0Hh%\a\0\0\0\xd0\x4\xd9\x63\b\0(\x4\xc1\x10\0\0\0@\x13$\f\x2\0\nA+9\0\0\0\0\0\x80\"!\x18\x2\0\0\0\0\0(\x12Z\xc9\x1\0\0\0\x34\x41\xf6\x18\x2\0\nA0\x4\0\0\0\xd0\x4\t\x83\0\x80\x42\xd0J\xe\0\0\0\0\0\xa0HX1\x4\0\0\0\xf0\x1dL\x98\x30>7\r\x1d\x9a\xa7\x9f\xfa[V\xeb\xdb\x37\x83\x6\xef\x9d\xb5\xd6^\xbb\xdeskjj\xf2\xf4SO\xe5\x91GFf\xf4?\x9fI\xb7\xee=\xb2\xebn\xbbg\xe0v\xdb\xa7\xb4\xb4t\x11W\xe\0\x14\x33+\x86\0\0\0\0\x1ah\xe2\xc4\x89\x39\xf8\xc0\xfd\x33k\xd6\xac\x9cp\xd2\xc9\xe9\xd6\xbd{\xe\x18\xb2o\x9e\x7fnt\xbd\xe7?2jd.\xbc\xe0\xfc\xac\xbe\xfa\x1a\x39\xf1\xe4_\xa4w\xef>9\xf9\xc4\xe3\xf3\xa7\xe1\xf7\xcf\xf7\x1a\xa3\x46\x8e\xa8\xfd\x3\0\xb0\xb0X1\x4\0\0\0\xd0@\xf7\xdfwO\x96_~\x85\x9cv\xc6\x99)--\xcd\x66\x9bo\x91/f}\x91\xab~\x7f\x65\xae\xbfqXJJJ\xea\x9c\xbf\xe1\x46\x1bg\xd3\xcd\x36\xcfRK-\x95$\xe9\xb7\xf5\x36)\xaf(\xcf]w\xde\x91\xddv\xdf\xa3\xdek\xd8\x63\b\0(\x4+\x86\0\0\0\0\x1a\xa0\xaa\xaa*7^\x7f}v\xd8q\xa7:m\xe0\xb6\xed? \xcf\xfc\xe3\xef\xf9\xdf\xf>\x98gN\x9b\x36mjC\xa1/u\xee\xbcl\xa6O\x9fV\xf0z\x1\0\xbeJ0\x4\0\0\0\xd0\0S\xa6L\xce\xb4iS\xd3\xa5K\xd7:\xe3]\xbb\xce}\xfe\xc9'\x1f/\xd0\xeb<\xff\xdc\xe8l\xd5o\xeb\x85^\x1f\0\xc0\x37\xd1J\xe\0\0\0\xa0\x1\xa6L\x99\x92$i\xd9\xb2\x65\x9d\xf1\xa5Z\xcd]\x11\xf4\xf9\xe7\x9f\x7f\xebk\x8c~\xf6\xd9\xfc\xe5\xf1\xc7\xf3\xf0\xa8G\xe6{N\xdf>=\xeb\x1d\x7f\xed\x8d\xb7\x17\xb4T\0\x80y\b\x86\0\0\0\0\x1a\xa0u\xeb\xd6I\x92\xe9\x33\xa6\xd7\x19\x9f\x39sV\x92\xa4\xdd\x32\xcb|\xe3\xfc\xf1\xe3\xc6\xe5\x8c\xd3N\xc9\x5\x17]\x9c\xe5\x96\xeb\x36\xdf\xf3\x4@\0@!h%\a\0\0\0\xd0\0\xcb,\xd3>\xa5\xa5\xa5\x19;fL\x9d\xf1\x8f?\x9e\x98$\xe9\xd4\xb1\xd3|\xe7~\xf6\xd9g9\xe9\x84\xe3\xb2\xcbn\xbbg\xc0\xc0\xed\nZ'\0@}\x4\x43\0\0\0\0\rPQQ\x91\xfd\xf<(\x7f~`x*++k\xc7\xff\xfa\xe4\x13\xd9\x62\xcb\xad\xd2\xad{\xf7$Iuuuf\xce\x9cY{\xfc\xb3\xcf>\xcb\x89\xc7\x1f\x9bu\xd6[/\x87\xfd\xf4\xbf\x16y\xdd\0\0\x89Vr\0\0\0\0\r6h\xf0^\x19\xb2\xef>9\xef\xdcs\xb2m\xff\xfey\xeb\xad\xb7r\xdd\x35Wg\xe8\xcd\xb7\xa6\xa4\xa4$Ir\xc1\xaf\xce\xcb\xe3\x8f=\x9a\xfb\x1fx(5559\xec\x90\x83\xf2\xea+\xff\xca\xa1\x87\xfd,/\xbd\xf8\x62\xedk-\xbf\xc2\xf2\xe9X\xcf*\xa3Q#G\xd4>\xee?``\xe1\xdf\x14\0P\x14\x4\x43\0\0\0\0\r\xd4\xa3\xc7\xf2\x19v\xcbm\xb9y\xd8\xd0\x9c\xf7\xcbs\xb2\xd6\xda\xeb\xe4\xe6[\xefH\xdf\xd5W\xaf=g\xf9\x15~\x90>\xab\xae\x96\x8a\x8a\x8a<\xfd\xd4\xdf\xf2\xea+\xffJ\x92\x1c\x30\x64\xdf:\xafu\xd5\xd5\xd7\x65\xf3-\xb6\x98\xe7\x1a\xc2 \0\xa0\x10\x4\x43\0\0\0\0\xdf\xc1\n+\xac\x90\x33\xce:{\xbe\xc7\xf7\xfb\xc9\x90\xec\xf7\x93!I\x92\xad\xb7\xd9\x36\xaf\xbd\xf1\xf6\"\xaa\f\0`\xfe\xec\x31\x4\0\0\0\0\0P$\xac\x18\x2\0\0\0h\x82\xec\x31\x4\0\x14\x82`\b\0\0\0\xa0\t\x12\x6\x1\0\x85\xa0\x95\x1c\0\0\0\0\0@\x91\x10\f\x1\0\0\0\0\0\x14\t\xc1\x10\0\0\0\0\0@\x91\xb0\xc7\x10\0\0\0@\x13\x34j\xe4\x88\xda\xc7\xf6\x1b\x2\0\x16\x16\xc1\x10\0\0\0@\x13$\f\x2\0\nA+9\0\0\0\0\0\x80\"!\x18\x2\0\0\0\0\0(\x12Z\xc9\x1\0\0\0\x34\x41\xf6\x18\x2\0\nA0\x4\0\0\0\xd0\x4\t\x83\0\x80\x42\xd0J\xe\0\0\0\0\0\xa0H\b\x86\0\0\0\0\0\0\x8a\x84Vr\0\0\0\0M\xd0UW^Q\xe7\xf9\xcf\x8f\x38\xb2\x91*\x1\0\x96$\x82!\0\0\0\x80&H\x10\x4\0\x14\x82Vr\0\0\0\0\0\0\x45\x42\x30\x4\0\0\0\0\0P$\xb4\x92\x3\0\0\0h\x82\x46\x8d\x1cQ\xfb\xb8\xff\x80\x81\x8dX\t\0\xb0$\x11\f\x1\0\0\0\x34\x41\xc2 \0\xa0\x10\xb4\x92\x3\0\0\0\0\0(\x12\x82!\0\0\0\0\0\x80\"\xa1\x95\x1c\0\0\0@\x13\x64\x8f!\0\xa0\x10\x4\x43\0\0\0\0M\x90\x30\b\0(\x4\xad\xe4\0\0\0\0\0\0\x8a\x84`\b\0\0\0\0\0\xa0Hh%\a\0\0\0\xd0\x4\xd9\x63\b\0(\x4\xc1\x10\0\0\0@\x13$\f\x2\0\nA+9\0\0\0\0\0\x80\"!\x18\x2\0\0\0\0\0(\x12\x82!\0\0\0\x80\x45\xe0\xe5\x97_\xcai\xa7\x9e\x92\xed\al\x9b_\x9d\xff\xcb\x8c\x1b;\xf6\x1b\xcf\xef\xdb\xa7gF\x8d\x1cQg\xaf!\x9a\x96\xbe}z6v\t,\0\xf7\xa9\xe9s\x8f\x16\xf\xee\xd3\xe2\x61\x41\xee\x93`\b\0\0\0\xa0\xc0\x9e\x7fnt\xf6\xdfo\xdf\xac\xbc\xf2*9\xe9\x94S\xf3\xd9\x94)9\xe8\xc0!\x99\x38q\xe2\x37\xce\xeb?`\xe0\x12\xb3\xd7\xd0UW^\xd1\xd8%\xb0\0\xdc\xa7\xc5\x83\xfb\xd4\xf4\xb9G\x8b\x87\x62\xbdO\x82!\0\0\0\x80\x2\xaa\xae\xae\xce\x15\xbf\xbbs\xc6\x8c:\xc7\x17T}a\xd1\xe2\xe2\xf7W\xfe\xae\xb1KX\xe8\x16\xe7\xfb\x31?\xee\xd3\xe2\x61I\xbbO\xee\xd1\xe2\xc1}Z2\b\x86\0\0\0\0\n\xa8S\xa7\xceI\x92\t\xe3\xc7\xd7Y\x19\x34n\xdc\xb8t\xeb\xd6=\xadZ-=\xcf\x1c\xab\x82\0\x80\x42\xb1\xc7\x10\0\0\0@\x1\xf5\xec\xd5+}V]-\x8f=\xf6h\xedXUUU\x1e~\xe8\xc1\f9\xe0\x80\xc6+\f\0(JV\f\x1\0\0\0\x14PYYY\x8e\x39\xf6\xb8\xfc\xec\xb0\x43R^^\x96UW\xed\x9b\xc7\x1f{4\x9f~\xfai\xb6\xdb~\xc7\xc6.\xf\0(2V\f\x1\0\0\0\x14\xd8\xa6\x9bm\x9e\x1b\x86\xde\x94\x37^\x7f=\xbf\xfe\xd5/\xd3\xb2\x65\xcb\\w\xc3\xd0\xb4o\xdf\xbe\xb1K\x3\0\x8a\x8c\x15\x43\0\0\0\0\x8b\xc0\x6\x1bn\x94\r6\xdc\xa8\xb1\xcb\xa0\x1&L\x18\x9f\x9b\x86\xe\xcd\xd3O\xfd-\xab\xf5\xed\x9b\x41\x83\xf7\xceZk\xaf]\xef\xb9\x35\x35\x35y\xfa\xa9\xa7\xf2\xc8##3\xfa\x9f\xcf\xa4[\xf7\x1e\xd9u\xb7\xdd\x33p\xbb\xedSZZ\xba\x88+/\x1e\r\xb9G\xf5\xb9\xe1\xfaks\xe9%\x17\xe7\x9f\xa3_\xc8\xd2\xad[\x17\xb0\xd2\xe2\xf6\xf2\xcb/\xe5\xee\xbb\xee\xccK/\xbc\x90\x8d\x37\xdd\x34\a\x1exp\xba.\xb7\xdc\x37\xce\x99\x34iR\xee\xba\xe3\xf6\x8c\x1e\xfdl\xc6\x8e\xf9(\xebm\xb0\x61\x6\r\xda+\xab\xaf\xb1\xc6\"\xaa\xba\xb8\xd4\xd4\xd4\x64\xc4\x88\x87\xf3\xf0\x83\x7f\xce\x84\xf1\xe3\xb3\xf5\xb6\xdb\x66\xc8\xfe\a\xa6\x65\xcb\x96\xf3\x9d\x33v\xec\x98\xdc|\xd3\xb0<\xf5\xd7\xbf\xa6M\x9b\x36\xd9v\xc0\xc0\f\x1a<\xb8\xde\xbd\xf3hZ\xac\x18\x2\0\0\0\x80\xaf\x99\x38qb\xe>p\xff\xcc\x9a\x35+'\x9ctr\xbau\xef\x9e\x3\x86\xec\x9b\xe7\x9f\x1b]\xef\xf9\x8f\x8c\x1a\x99\v/8?\xab\xaf\xbe\x46N<\xf9\x17\xe9\xdd\xbbON>\xf1\xf8\xfci\xf8\xfd\x8b\xb8\xf2\xe2\xd1\xd0{\xf4u/\xbf\xfcR.\xbd\xe4\xe2\x2W\xc9\xf3\xcf\x8d\xce\xfe\xfb\xed\x9b\x95W^%'\x9drj>\x9b\x32%\a\x1d\x38$\x13'N\x9c\xef\x9c\xf>\xf8 C\xf6\xdb;c\xc7\x8d\xcd\xa0\xc1{\xe5\x17\xa7\x9d\x91\xe5\x97_>\x93'O^\x84\x95\x17\x97[n\xbe)\x17_\xf0\xeb\xf4\x1f\x30\x30\x87\xfe\xf4g\xf9\xcb\xe3\x8f\xe7\xe4\x13O\xc8\x9c\x39s\xea=\xff\xb3\xcf\xa6\xe4\xb0\x43\xe\xca\xac\x99\xb3r\xca\xa9\xa7\x65\xf7=\a\xe5O\xc3\xef\xcf\xaf\x7fu\xfe\"\xae\x9c\xef\xc2\x8a!\0\0\0\0\xf8\x9a\xfb\xef\xbb'\xcb/\xbf\x42N;\xe3\xcc\x94\x96\x96\x66\xb3\xcd\xb7\xc8\x17\xb3\xbe\xc8U\xbf\xbf\x32\xd7\xdf\x38,%%%u\xce\xdfp\xa3\x8d\xb3\xe9\x66\x9bg\xa9\xa5\x96J\x92\xf4\xdbz\x9b\x94W\x94\xe7\xae;\xef\xc8n\xbb\xef\xd1\x18oa\x89\xd7\xd0{\xf4U\x9f\x7f\xfey\xce<\xfd\xd4\xec\xb1\xe7\xe0\xdc\xf3\xc7\xbb\x16\x61\xd5\xc5\xa5\xba\xba:W\xfc\xee\xf2\x1cu\xf4\x31\x39\xe8\xe0\x43\x92$\xebo\xb0\x41\xe\x1c\xb2_\xfe\xfc\xc0\xf0\x1c|\xc8\x61\xf5\xce\xbb\xfa\xaa+\xb3\xed\xb6\x3r\xe4\xd1\xc7\xd4\xde\xc7\xcd\xb7\xd8r\x91\xd5]l>\xf9\xe4\xe3\\z\xc9\xc5\xb9\xf6\x86\x1b\xb3\xdez\xeb'IV]m\xb5\f\xd8\xa6_\x9e\x7fnt\xd6[\x7f\x83y\xe6\xbc\xfc\xd2K\xf9\xf7{\xef\xe5\xb6;\xeeN\xdb\xb6m\x93$\xcbu\xeb\x96\x43\xf: \xa7\x9cr\xaa\x15xM\x9c\x15\x43\0\0\0\0\xf0\x15UUU\xb9\xf1\xfa\xeb\xb3\xc3\x8e;\xd5i\x3\xb7m\xff\x1y\xe6\x1f\x7f\xcf\xff~\xf0\xc1 \xfexn\x98\xf4\xcbs\xcf\xce\xca\xab\xac\x92_]pQV_c\xcd\x1c\x30\x64\xdf\xbc\xf6\xea\xab\x5\xae\xb8\x38M\x18?\xbe\xb6\x1d\xdcW\xb5i\xdb&\x1f}\xf8\x61\xbds\xca\xca\xcar\xc8!\x87\xe5\xfd\xf7\xff\x9d\x33O?-\x97\xff\xf6\xd2\xec\xbe\xc7\xa0\xf4\xea\xdd\xa7\xd0\xe5\xb2\x10\xd8\x63\b\0\0\0\0\xbe\xa2\xf5\xff\xef\x8d\x31}\xc6\xf4:\xe3\x33g\xceJ\x92\xb4[f\x99o\x9c?~\xdc\xb8\x9cq\xda)\xb9\xe0\xa2\x8b\xb3\xdcr\xdd\nSd\x91\xfb.\xf7h\xce\x9c\x39\xb9\xf0\xd7\xe7g\x9f}\xf6\xcbZk\xcfm\x99\x35o#3\x16\xa6/\xc3\x86\x99\x33g\xa6\xbc\xbc\xbcv|\xe6\x8c\x19u\x8e\x7fU\xab\xffoCv\xe2I'g\xb5\xbe\xab'I\xd6[o\xfd\xbc\xfb\xce\xdb\x19\xf1\xf0\x43\xe9\xbb\xfa\xea\x85.\xbb\xe8t\xe8\xd8!\xaf\xfc\xeb_\xf3\x8cO\x9b\x36-?Xq\xc5z\xe7\xbc\xf9\xe6\x1b\xd9o\xef\xc1\x39\xefW\x17\x64\x8b-\xb7\xca\xbb\xef\xbc\x9d+~\xf7\xdb\x8c\x1a\x39\"\x97]\xfe\xbb\xb4j\xb5t\xa1\xcb\xe6{\xb0\x62\b\0\0\0\0\xbe\x62\x99\x65\xda\xa7\xb4\xb4\x34\x63\xc7\x8c\xa9\x33\xfe\xe5J\x86N\x1d;\xd5\x37-I\xf2\xd9g\x9f\xe5\xa4\x13\x8e\xcb.\xbb\xed\x9e\x1\x3\xb7+h\x9d\xc5\xec\xbb\xdc\xa3\xbf<\xfeX\x1e\x19\x35\x32W^qy\xfa\xf6\xe9\x99\xbe}zf\xff\xfd\xe6\xae\xe8Z\x7f\xdd\xb5\xb2\xe9\xc6\x1b\x14\xbe\xf0\"\xd3\xa9S\xe7$sW\xa4|\xd5\xb8q\xe3\xd2\xad[\xf7z\xc3\x83\x8e\x1d;&I\x96i\xdf\xa1\xce\xf8\xca+\xaf\x92q\xe3\xc6\x16\xa8\xd2\xe2\xb6\xdcr\xcb\xe5\xf5\xd7\xff'\xb3g\xcf\xae\x33\xfe\xc1\xfb\xefg\xc5\x15W\xaaw\xcem\xb7\xde\x92\xedw\xd8)\xbb\xee\xb6{\x96Yf\x99\xac\xb3\xeez\xf9\xcd\x65\x97\xe7\xbf\x9f~*O>\xf1\xc4\xa2(\x9b\xef\x41\x30\x4\0\0\0\0_QQQ\x91\xfd\xf<(\x7f~`x*++k\xc7\xff\xfa\xe4\x13\xd9\x62\xcb\xad\xd2\xad{\xf7$Iuuuf\xce\x9cY{\xfc\xb3\xcf>\xcb\x89\xc7\x1f\x9bu\xd6[/\x87\xfd\xf4\xbf\x16y\xdd\xc5\xe4\xbb\xdc\xa3\x1f\xfe\xf0G\xf9\xe3\xbd\xf7\xd7\xf9s\xf8\x11G%I\xae\xbbqX\xae\xbd\xee\xc6\x45\xff\x46\x96p={\xf5J\x9fUW\xcb\x63\x8f=Z;VUU\x95\x87\x1fz0C\xe\x38\xa0v\xec\x8b/\xbe\xc8\x9c\x39s\x92$\xbd\xfb\xac\x9a\x1e=z\xe4o\x7f}\xb2\xf6xMMM\x9e|\xf2\x89\xf4\xe9\xb3\xea\xa2*\xbd\xa8l\xb0\xe1\x46\x99\xf4\xe9\xa7u\xf6q\xfa\xf8\xe3\x8f\xf3\xd0\x83\x7fN\xbfm\xb6\xa9\x1d\x9b\xf1\xff+\xbd\x92\x64\xd6\xcc\x99\x99:\xf5\xf3\xd4\xd4\xfcg\xdd]\xbbv\xcb\xa4M\x9b\xb6\xf3\x4L4=Z\xc9\x1\0\0\0\xc0\xd7\f\x1a\xbcW\x86\xec\xbbO\xce;\xf7\x9cl\xdb\xbf\x7f\xdez\xeb\xad\\w\xcd\xd5\x19z\xf3\xad)))I\x92\\\xf0\xab\xf3\xf2\xf8\x63\x8f\xe6\xfe\a\x1eJMMM\xe;\xe4\xa0\xbc\xfa\xca\xbfr\xe8\x61?\xcbK/\xbeX\xfbZ\xcb\xaf\xb0|:~\xc3*#\xbe\x9b\x86\xde\xa3\xce\xcb.\x9b\xce\xcb.[\xe7\x35\x66\xcc\x98\x91\xdf_\x99\xac\xb9\xc6\x9aY\xfa\xff\xdb\xd3\xb1\xf0\x94\x95\x95\xe5\x98\x63\x8f\xcb\xcf\xe;$\xe5\xe5\x65Yu\xd5\xbey\xfc\xb1G\xf3\xe9\xa7\x9f\x66\xbb\xedwL\x92\xcc\x9a\x35+\x83\xf7\xdc-={\xf6\xca%\x97\xfe\x36-Z\xb4\xc8Q\xc7\x1e\x9f\x13\x8f;&\xb3\x66\xceL\xcf\xde\xbd\xf3\xd2\v/\xe4\xa3\x8f>\xcc\xce\xbb\xee\xd6\xc8\xefh\xc9\xd4\xad[\xf7\xfc\xd7\xe1G\xe4\x94\x93O\xc8\x89'\x9d\x92\x36m\xda\xe4\xe6\x9b\x86\x65\xbb\xedw\xc8\xf\x7f\xf8\xa3$\xc9\xbb\xef\xbe\x93\x41\xbb\xef\x9a\x93N\xe1\x99\xd3\0\0 \0IDATN95\x83\xf7\xda;\xbb\xec\xb6{\xe=\xe8\x80t\xea\xdc\x39\x9bl\xb2i\x9a\x35k\x96'\xfe\xf2xZ\xb7n\x9d\x8d\x37\xd9\xb4\x91\xdf\x11\xdf\x46\x30\x4\0\0\0\x14\x9d\x92\x92\x92:\xbf\xe5\f_\xd7\xa3\xc7\xf2\x19v\xcbm\xb9y\xd8\xd0\x9c\xf7\xcbs\xb2\xd6\xda\xeb\xe4\xe6[\xef\xa8\xb3\xbf\xc9\xf2+\xfc }V]-\x15\x15\x15y\xfa\xa9\xbf\xe5\xd5W\xe6\xee\xd1q\xc0\x90}\xeb\xbc\xd6UW_\x97\xcd\xb7\xd8\x62Q\x96_\x14\x1az\x8fh\x1c\x9bn\xb6yn\x18zS\xee\xf9\xe3\xdd\x19~\xff}\xd9|\xf3-s\xdd\rC\xd3\xbe}\xfb$Iyyyz\xf7\xee\x93\x15WZ\xb9v\xcev\xdbm\x9f\x96-Z\xe4\xfe\xfb\xee\xcb\x1d\xb7\xdf\x9a\x8d\x37\xd9,w\xdd}o:w\xee\xdcXoc\x89\xf7\xf3\xc3\x8fL\x97.]3\xfc\xfe\xfb\x32k\xd6\xccl\xb3\xed\x80\xec\xbb\xef~i\xd6ln\xd3\xb1V\xad\x96N\xdf\xbe\xab\xa7K\x97\xaeI\x92\x8d\x36\xda\x38\xb7\xdeqW\xfex\xd7\x9d\x39\xf7\xec\xb3\xd2\xb6m\xdbl\xb8\xf1\xc6\x19v\xcb\xad\xeeS\x13\xf4\x65X^\xfb\xfc\xcdw\xc7\xd6\xf4Xn\xeeo,|8\xf6\xe3\xf4Z\xa9kc\xd4\x5\x14\xc0\xccYUI\xe6~l\x7f\xf9q>?_=\xc7\xe7\x2\0\0`q\xf0\xd6{\xe3\xea|\x1f\xd3\x90\xef{\xa6\xcf\x9c\x9e\xeaj\xc1\x10\0\xb0\xe4k\xd6\xac$\xadZ\xb6J2\xf7\xff\x43\xf6\x18\x2\0\0\0\x8aNi3MT\0\x80\xe2\xf0\xf5\xff\xf7\b\x86\0\0\0\x80\xa2SZV\xda\xd8%\0\0,\x12_\xff\x7f\x8f`\b\0\0\0(:e\xcd\xca\xd2\xeck\xfd\xf6\x1\0\x96\x34\xcdJJRVj\xc5\x10\0\0\0P\xe4JJ\x92\xe6\xcd\x9b\x37v\x19\0\0\x5\xd5\xbcy\xf3|\xfdWa\x4\x43\0\0\0@Q*+-KEYyc\x97\x1\0P\x10\x15\x65\xe5\xf3\xac\x16J\x4\x43\0\0\0@\x91(//KeeU\x9d\xb1\xe6\xcd\x9b\v\x87\0\x80%NEY\xf9<\xab\xa3gWV\xa5\xa2\xbcL0\x4\0\0\0\x14\x87\x8a\xf2\xb2\xcc\xfeZ0\x94\xcc\r\x87Z\xb6ha\xcf!\0`\xb1\xd7\xac\xa4$-[\xb4\xa8\xb7\x65n\xe5\xec\xaa\x94W\x94\x65\xde\x35\x44\0\0\0\0K\xa0\x16\xcd+2k\xf6\xec\xb4J\x8by\x8e\x95\x95\x96\xa5t\xa9\xb2T\xcd\xa9\xca\x9c\xaa\x39\x99S]\x95\x9a\x9a\xa4\xa6\xa6\xa6\x11*\x5\0X0%%%))IJ\x9b\x95\xa5\xb4\xac\x34\x65\xa5\x65\xf3\xec)\xf4\xa5/f\xcfN\xcb\x96-\x4\x43\0\0\0@qX\xaa\x65\xf3L\x9b\x31\x33\x33\x66\xce\xcaR-\xe7\r\x87J\x92\x94\x97\x96\xa5\xbc\xb4,\xc9\xbc\xbf\x65\v\0\xb0\xb8\x9a\x34\x65j\xaa\xaa\xab\xd3\xb2\x45\x85`\b\0\0\0(\x1e\x1d\xda\xb5\xce\xd8\t\x93\xe6\xfevm\x92\xf2\x8a\xf2\x94\x36\xd3i\x1f\0X\xf2\xcc\xae\xacJ\xe5\xec\xaa\xcc\x9a]\x99\xea\x39s\xd2\xb9\x63\xbb$\x11\f\x1\0\0\0\xc5\xa3\xb4\xb4\x34=\x96\xeb\x94\xc9\x9fMM\xd5\x9c\x9aTN\x99\x96\x39\xd5\xd5\x8d]\x16\0\xc0\x42WQ^\x96\xf2\x8a\xb2,\xd5\xb2\"-[\xfcg5\xb4`\b\0\0\0(:\xcb\xb4m\xdd\xd8%\0\0\x34\nk\xa5\x1\0\0\0\0\0\x8a\x84`\b\0\0\0\0\0\xa0H\b\x86\0\0\0\0\0\0\x8a\x84`\b\0\0\0\0\0\xa0H\b\x86\0\0\0\0\0\0\x8a\x84`\b\0\0\0\0\0\xa0H\b\x86\0\0\0\0\0\0\x8a\x44Yc\x17\0\0\0\0\xb0\xa8M\x9a\x32\x35s\xaa\xabS9\xbb*s\xaa\xab\x1b\xbb\x1c\0\x80\x85\xae\xbc\xbc,\x15\xe5\x65i\xd9\xbcyZ\xb6\xac\xa8\x1d\x17\f\x1\0\0\0\x45\xe3\x8b\xd9\x95\x99\xf8\xc9\x94tX\xa6M\x9a\x95\x94\xa4\xbc]YJ\x9bi\xa8\x2\0,y*+\xab\x32\xbb\xb2*3g\x7f\x91\xa9\x33\x66\xa4\x43\xbb\xd6)--\x15\f\x1\0\0\0\xc5\x63\xe2'S\xd2\x63\xb9N\x8d]\x6\0@\xc1\x95\x97\x97\xa5\xbc\xbc,\xad\xd2\"3f\xce\xca\xd8\t\x93\xd2\x63\xb9N\x82!\0\0\0\xa0\x38L\x9a\x32\x35\x1d\x96i\xd3\xd8\x65\0\0,rK\xb5l\x91\xa4$\x93?\x9b\x1ak\xa5\x1\0\0\x80\xa2\x30\xa7\xba:\xcdJJ\x1a\xbb\f\0\x80\x46\xd1\xac$\xa9\x9aS#\x18\x2\0\0\0\x8a\x43\xe5\xec\xaa\x94Wh\x9e\x2\0\x14\xa7\xf2\x8a\xf2T\xce\xae\x14\f\x1\0\0\0\xc5\x61NuuJ\x9b\xf9Q\b\0P\x9cJ\x9b\x35\x9b\xbb\x82\xba\xb1\v\x1\0\0\0\0\0`\xd1\x10\f\x1\0\0\0\0\0\x14\t\x8du\x1\0\0\0\0\x80&\xe3\xa2\x8b/\xcb?\x9f}.I\xb2\xfez\xeb\xe4\xa4\x13\x8fm\xe4\x8a\xfe\xe3\xd4\xd3\xcf\xca\x33\xcf<\xbb@\xe7v\xef\xd1#7\xf\xbd\xb6\xc0\x15\x35\x9c`\b\0\0\0\xa0\0&L\x9c\x98\xb2\xd2\xd2t\xe8\xd0\x61\x81\xce?\xe9\xa4Sr\xd7=\x7fJ\x92\xb4hQ\x91\x8d\xd6_';\xed\xbc\x63v\xd8~\xfb\x94\x97\x97g\xc2\x84\x89Yo\xc3\xcds\xff=\xb7\x65\xad\xb5\xd6Z\xa0\xd7\xac\xae\xae\xce\xd4\xa9S\xd3\xb2\x65\xcbTTT,\xd0\x9cw\xdf}7\xf=\xfcp\x9e}vt\xdez\xfb\xdd\xac\xfd\xe3\x1f\x66\xc8\x90\x9f\x64\xc3\r7\\\xa0\xf9\0\xf0}=\xf6\xc4\x93y\xf3\x8d\xb7\x92$S\xa7OkR\xc1\xd0\xb8\xf1\x13\xf2\xee{\xef\x37v\x19\xdf\x8b`\b\0\0\0`!\x9b\xfa\xf9\xd4\f9\xe0\xb0l\xd3o\xcb\x9cp\xfc\xd1\v<\xaf\xdf\x16\x1b\xe7\xa7?=4\x95\x95\x95y\xfd\x8d\x37r\xca\xa9g\xe5\xddw\xdf\xcd\t\xc7\x1f\xff\xdd\xea\x98:5k\xfex\x83\xdc}\xc7\xb0\xac\xbf\xfe\xfa\v4\xe7\x96[nMEEE\xf6\xddw\x9f\x94\x36k\x96g\xfe\xf9l\xf6\xda\xf7\xa0\xdcy\xdb\xd0l\xb8\xe1\x6\r\xba\xfe\x98\x31\x63\xf2\xc6\x1bo\xa7_\xbf-\xea=\xfe\xf8\xe3O\xa6O\x9f\x9e\xe9\xd6\xad[\x83^\x17\x80%\xcb\x9f\x1fz8/\xbc\xf0R\xe:`\xff\xbc\xf0\xd2K\xf9\xf7\xbb\xff\xae=\xf6\xefw\xff\x9d{\xef\x1b\x9e\xf5\xd6]77\f\x1d\x96\xb5\xd7\xfeqv\xdc~\xbb\x45^\xe3\xa9\xa7\x9f\x95\x41{\xee\x91$\xd9w\xdf\xc1\xd9n@\xffo<\xff\x85\x17_\xce\xf0\xe1\x7f\xfa^\xd7,\xd4\xd7Q\xc1\x10\0\0\0\xc0\x42\x34\xbb\xb2\x32?\xfd\xf9Q\xe9\xdc\xa9\x63\x8e>\xea\xf0\x6\xcd\xed\xd2\x65\xd9\xda\0g\x93M6I\xe7N\x9dr\xd4\xb1\xa7\x64\xef\xbd\xf6JYYy!\xca\x9d\xc7\x99g\x9e\x91\x66\xcd\xfe\xb3-\xf5\xb6\xdbn\x9b\x99\x33\x66\x64\xe4\xc8\x91\r\xe\x86\xdex\xe3\xed\xfc\xfc\xc8\x63s\xf9\x65\x17\x65@\xffm\xea\x1c\x1b\x39\xea\xd1\x1c}\xecI\xb9\xea\x8a\xcb\x4\x43\0\x45l\xc6\x8c\x99\x39\xef\xbc\x8b\x32~\xc2\x84\xdc\x38\xf4\x96y\x8e\xcf\xae\xac\xccq'\xfc\xa2\xf6\xf9\x88\x11\x8f\xa6\xdf\x96[f\xa9\xa5Z.\xca\x32\xf3\xcc\x33\xcf\xa6\xdf\x96[&IV^i\xa5l\xb2\xf1\x37\xaf\xa4\xfd\x62\xd6\x17\xdf;\x18*\xd4\xd7\xd1\x66\xdf~\n\0\0\0\0_7\xbb\xb2\x32\xff\xfd\xf7\x7f\xd4\x19\xab\xae\xae\xce\x89'\x9e\x9a\xc9\x93\xa7\xe4\xf\xbf\xbf<\xe5\xe5\xdf\xefwr\xbfl\x19\xf7\xd1Gc\xea=^SS\x93\xc7\x1e{,\x87\x1e\xf6\xd3l\xbe\x45\xbf\x9c~\xfa\x19\xf9\xe8\xa3\x8f\x92\xfcg\xb5P\x92\f\xda\xfb\x80\xac\xb0\xd2\xaa\x19=\xfa\xb9o\xbd\xe6WC\xa1/\xaf\x31s\xe6\xac\xb4m\xdb\xb6\xc1\xf5\xf7\xeb\xb7\x45.\xbf\xec\xa2\x1c}\xecI\x19\x39\xea\xd1\xda\xf1/\x7f\x98u\xf9\x65\x17\xcd\xf7\xb7\xa0\x1(\xe\xd7^wC\xc6O\x98\x30\xcfx\xbbv\xed\xd2\xae\x9e\xaf=\xe3'L\xc8\x35\xd7\xdd\xb8(Jkt\x85\xfa:j\xc5\x10\0\0\0@\x3\xcd\xae\xac\xcc\xe1G\x1c\x97G\x1f{<\x97\\t~\xf6\xd8}\xd7$\xc9\x5\x17\xfd&\xa3\x9f{!\xc3\xef\xbb\x33K/\xdd\xea{_\xe7\x8b/\xbeH\x92t\xea\xd4\xb1\xde\xe3\xf7\xdew_.\xbd\xf4w9\xe5\x94\x13\xd2\xb6M\x9b\xdc}\xf7=\xd9\x65\xb7\x41\x19\xf9\xf0\x3Yf\x99\x65r\xebM\xd7\x65\xbf\xfd\xf\xcd\t\xc7\x1e\x9e~\xfd\xb6J\xf7\xee\xdd\x17\xe8\xbas\xe6\xcc\xc9K/\xbd\x9c\xe9\xd3\xa7\xe5\xc9\xbf\xfemn[\xbbSN\xfaN\xef\x61@\xffmj\x7f\xa8u\xf9\x65\x17%I\xed\xe3\xaf\xff\xf6\x33\0\xc5g\xddu\xd7I\xe7\xce\x9d\x32q\xe2\xc7\xb5\x63G\x1d\xf1\xb3\x1c{\xcc\x91I\x92\x8b/\xf9m\xae\xba\xfa\xba\xda\x63]\xbbt\xc9\x6\xeb\xaf\xfb\xad\xaf;f\xcc\x98<\xf5\xf4?\xea=\xb6\xe9&\x1b.6\xabU\v\xf1uT0\x4\0\0\0\xd0\0_\x86\x42\xff\xfa\xd7+9\xfe\xb8\xa3r\xd2)g$I>\xff|Z\xee\xbc\xf3\xde\xdc{\xcf\xed\xe9\xdc\xb9\xd3\xf7\xba\x46MMM>\xfd\xf4\xd3\f\x1d:,\x3\xb6\xdd\"+\xac\xb0\x42>\xf9\xe4\xd3:\xe7L\x9f>=\xe7\x9d\x7f\x61.\xbf\xec\xe2l\xbe\xf9\xe6I\x92\xf5\xd6_?\x3\xb7\xdb\x31\xf7\xf\x1f\x9e\x43\xf\x39$k\xae\xb9\xc6\xdc\xf1\xf5\xd6\xcdj\xab\xad\xb6\xc0\xd7\x9f\x35kVv\xdbs\xdf\xda\xe7{\xec\xba\xc3<+\x89\x1a\xe2\xab?\xd4J\"\x14\x2\xa0\xd6\xc6\x1bm\x90\x91\xf\xdd\x9f\xb5\xd6\xdd$I\xd2\xaem\xdb\x1c{\xcc\x91\xb5_wN8\xfe\xe8\xdcr\xfb\x9d\x99\xfa\xf9\xd4$\xc9\xc8\x87\xefO\xbbv\xed\xbe\xf5u\xbbv\xed\x9a\x97^\xfeW\xee\xb8\xf3\x8fu\xc6\xf7\xd9{P\x6\xed\xb9\xdb\x42~\x17\x85\xb5\xb0\xbf\x8e\n\x86\0\0\0\0\x16\xd0\x97\xa1\xd0+\xaf\xbc\x9a\xbb\xee\xbc\x39?Xa\xf9,\xd7\xb5KN:\xe5\xf4\x94\x95\x95\xe7\xd6\x9b\xafO\xcfUV\xfa\xce\xaf\x7f\xdb\x9d\xf7\xe5\xb6;\xef\xab}\xbe\xc7\xae;\xe4\xbc_\x9e\x9b\xd2\xd2\xd2y\xce\xfd\xe8\xa3\x8f\x32y\xca\xd4\xf4\xee\xdd\xbbv\xac\x65\x8b\x16\xd9\xba\xdf\x16y\xed\xd5\xff\xf9\xce\x35$I\xabV\xad\xf2\xc1{\xafg\xf6\xec\xd9\x19\x33\x66L.\xbe\xf8\x92\xfc\xfc\xf0#s\xdb\xad\x37\xa7y\xf3\xe6\xdf\xeb\xb5\x1\xe0\xfb\xa8\xae\xae^\xa0\xf3\x9a\x35k\x96_\x9dwvJJJr\xfb\x1dw'I\xf6\xddgP\xce;\xf7\xac\xef\xf5\xcb\xeK\x2\xc1\x10\0\0\0\xc0\x2\xa8\x13\n\xddqsVX\xa1G\x92\x64\xf7\xddvIiYY*\xca\xcb\xb3\xee:k\x7f\xef\xeb\xdc}\xc7\xb0\x94\x95\x95\xa7k\xd7\xae\xe9\xda\xb5KJJJ\xea\xafg\xf6\xec$\xf3\xfe\x80\xacyE\xf3\xb4h\xb1p\xc2\x9b\x8a\x8a\x8a\xac\xb8\xe2\x8a\x39\xea\xa8#\xd3\x7f\xbb]\xf3\xce;\xef\xa4o\xdf\xbe\r~\x9d\xaf\xee\x85\x90h%\a\xc0\x7f\xfc\xf7\xdf\x9f\xc9\x31\xc7\xfd\xa7]\xe9\x94\xcf>\xcb\xa5\x97]\x91\xe3\x8e=2555\xb9\xf8\x92\xdf\xd6\xae\x16J\x92\x81\xdb\xef\x96\xcb.\xbd\x30\x1bm\xb8\xfe\xb7\xbev\xb3\x66\xcdr\xfe/\xcfJII\x92\x92\x92\x9cw\xce\x99\x8b\x65(\xb4\xb0\xbf\x8e\n\x86\0\0\0\0\x16\xc0\x15W\\\x95W_}\xadN(\xf4\xa5]v\xda\x61\xa1\\c\xdf\xbdv\xcb\xfa\xeb\x7f\xfb\xf\xba\x92\xa4{\xf7\xee)-m\x96\x97^z)\xcb-\xb7\\\x92\xb9{\x3\xfd\xf7\xdf\x9f\x99\xa7\x45Nee\xe5\x2\xd7PUU\x95\xb2\xb2\xba?2\x9a>}z\x92\xa4M\x9b\x36\v\xfc:_\xfa\xea\xf\xb3\xbe\xfc\x1\xd6W\xf7J\x10\xe\x1\x14\xb7\xd1\xa3\x9f\xab\xb3\xbfP\x92\\\xf1\xfb\xabs\xcbmw&55\x99\xf2\xd9gu\x8e\x8d\x9f\x30!\xff|\xf6\xb9\x5\n\x86\x92\xb9\xe1\xd0y\xe7\x9eU\xfbxqS\x88\xaf\xa3\x82!\0\0\0\x80\x5p\xd8\xa1\ag\xf0\xa0=\xd2\xbd{\xe3lV\xbd\xd4R-\x93$/\xff\xeb_\xe9\xd8\xb1\x63\x96_~\xf9\x9cx\xfc\x91\x39\xe5\xd4\xb3\x32\x63\xc6\x8ct\xeb\xd6-#G\x8e\xca\xf4\xe9\xd3\xb3\xd3N;%\x99\x1b\xe4\xac\xbc\x62\x8f<\xf0\xc0\x83i\xdd\xbau:v\xec\xf8\x8d\x9bmWWWg\xa7\x9dw\xcd\x66\x9bn\x92\xbe}\xfb\xa6M\x9b\x36\x19?~\\\xae\xb9\xf6\x86\x1cr\xd0~\xe9\xde\xbd{\x83j~\xfc\xf1'\xeb\xfd\xc1\xd5W\xf7J\xb8\xea\x8a\xcb\xd2\xaf\xdf\x16\r\xff\v\x1`\x89p\xd8\xa1\a\xe7\x8e;\xef\xc9\xf8\t\x13\xea\x8cO\x99\x32\xa5\xde\xf3\xbbv\xe9\x92\x9f\x1dvP\x83\xae\xb1\xb0\x3\xa1g\x9e\x19\xfd\xad\xe7\xbc\xf5\xd6\xdb\xdf\xfb:\x85\xfa:Zz\xe4\xd1\xc7\x9f\xdd\xb6u\xab$\xc9\xe7Sg\xa4\xc3\x32\xad\xbfw\xb1@\xd3PU5\xb7\x9d\xc0\xe7Sg\xe4\xcb\x8f\xf3\xf9\xf9\xea\x39>\x17\0\0\0\x8b\x83O'O\xab\xf3}LC\xbe\xef\xf9.\x9a\x37\xaf\xf8N+f\x16\xd4\xa3\x8f>\x96\x66\xcd\x9a\xa5_\xbf~\xf3\xb9~\xf3t_n\xd9\\}\xcd\rIMu6\xdcp\x83\xac\xf5\xe3\x1f\xa7\x63\x87v\xb9\xf7\xbe\xe1yx\xc4\xa8\xf4\xea\xd5\x33\xbf\xfe\xd5y\xb5\x9br\x97\x94\x94\x64\xddu\xd7\xce\x88\x91#s\xef}\xc3\xb3\xf2J+\xa6g\xcf\x9e\xf3\xad\xa1\xa6\xa6&={\xae\x92\xb7\xde~;#G\x8e\xca\x1f\xef\xb9?3fL\xcf\x1\xfb\xf\xc9\xfe\xfb\xf\x99g%\xd1\xb7i\xde\xbc<\xeb\xaf\xb7n\xb6\xdd\x66\xde\xf7\xb4\xca*+g\xb5>}\xd2\xa7O\xcf\x82\xfe\xbd\x2\xd0\xb4\x95\x97\x97\xa7K\xd7\xce\xe9\xda\xa5K\xae\xb8\xfc\x37Yc\x8d\xd5\xf2\x97'\x9e\xacm\x95ZQ^\x9e\x8b/:?g\x9c\xf6\x8b\xa4\xa4&\x83\a\xef\x9e\xbe\xab\xad\xb6\xc8\xeb\xbc\xe9\xe6\xdb\xb2\xd9\xa6\x9b$%%\x19\x37~\\\xfe\xf7\xc3\xf\xbf\xf1\xcf\xf4\x19\x33\xb2j\x9f\xde\xe9\xb7\xd5\x96\xdf\xf9\x9a\x85\xf8:\xfa\xf9\xd4\x19)y\xf3\xdd\xb1\x35=\x96\xeb\x94$\xf9p\xec\xc7\xe9\xb5R\xd7\xef\\$\xd0\xb4\xcc\x9cU\x95\x64\xee\xc7\xf6\x97\x1f\xe7\xf3\xf3\xd5s|.\0\0\0\x16\ao\xbd\x37\xae\xce\xf7\x31\r\xf9\xbe\xa7XM\x9d:5\xef\xbf\xff\xfe|\x8f/\xb5\xd4RYy\xe5\x95\x17]A\0P\x8fm\x6\xee\x94\xb7\xde\x9c\xbb\xe2\xa6w\x9f^y\xe4\xe1?5rE\xc9V[\xf\xcc\xe\xdb\xf\xcc\xf\xd7\\\xf3[\xcf\xed\xd0\xb1\x43~\xf4\xc3\x35\x16\x41U\r\xf7\xe1\xd8\x8f\xb5\x92\x3\0\0\0(\x16\xef\xbf\xff~v\xd8y\xd0|\x8f\xef\xbe\xcb\xf6\xb9\xf4\xd2K\x16\x61\x45\0\x30\xaf\xad\xb7\xdc\"m\x96\x9e\xdb\xd1h\xfd\xf5\xd6i\xe4j\xe6\xea\xde\xa3G\x1e|hD\x1e|h\xc4\xb7\x9e\xbb\xc1\x6\xeb\x35\xd9`(\xb1\xc7\x10\0\0\0@\xd1Xc\x8d\x35\xf2\xc1{\xaf\x37v\x19\0\xf0\x8dN>\xe9\xb8\xc6.a\x1e\x37\xf\xbd\xb6\xb1KXh\x16\xee\x8eK\0\0\0\0\0\0\x34Y\x82!\0\0\0\0\0\x80\"!\x18\x2\0\0\0\0\0(\x12\x82!\0\0\0\0\0\x80\"Q\xd6\xd8\x5\0\0\0\0,j\xdb\\\\\xd9\xd8%\xb0\x90;:\x1bo\xb4\x41\x63\x97\x2\x8b\x94`\b\0\0\0\xa0\x1e\xa3\x9f{!\xf>4\"=WY\xf9[\xcf\x9d\x36mZ\xee\xb9\xf7\xfe\xcc\x9c\x31+?\xf9\xc9\xde\x8b\xa0\xba\xa6\xe7\xcbPh\xca\x94\xcf\x92$g\x9e}\xfe\x12\x1d\xe\xbd\xff\xc1\x87y\xe7\x9dwk\x9f\xbf\xfe\xc6\x1b\xa9\xaa\x9a\x93$M6\x18\xfa\xdb\xd3O'Y\xf4\xc1\xd0\x97\xa1\xd0\xdf\x9ez:7\xf\xbbn\x91^\x9b\x45g\xce\x9c\x39)--\xad}\xfe\xce{s?>\x9e\x1f=\xf7\xdf\xdd\x1a?Z?\xef\xbc\xf7n\x9d`\xe8\xebs\x16\xa5\x39s\xe6\xe4\xf8\x13NI\x9bvm\x4\x43\x14\x1d\xc1\x10\0\0\0\xc0|\xf4\\e\xe5<0\xfc\xee|\xfa\xe9\xa7\xf3=\xa7M\x9b\x36)--\xcb\xf1'\x9c\x92\xd3\xcf:7I\x8a.\x1c\x1a?~b\xce<\xfb\xfc\x94\x95\x96\xe5\a+,\x9f$\x99\x36mz\xce<\xfb\xfc\xfc\xfa\xbc\xb3\xd2\xa5K\xe7\x46\xaep\xe1\xfb\xed\xa5\x17\xfe\xe7\xf1\xe5W\xe6\x95W_KYY\xe3\xfc\x80\xbb\xa9;\xf9\x17gd\xc4\xc8GRVV\x9a\xff:\xfc\x98\xf4\xe8\xde=[m\xb5y\x86\xec\xb7w\xda\xb4i\xd3\xd8\xe5\xb1\x10TWWg\xd0^C\xd2m\xb9\xae\x39\xec\xb0\x83\x32\x63\xc6\xcc\xfc\xe1\xf\xd7\xa7u\x9b\xd6\xb5\xf7\xb8M\xeb\x36\xb9\xea\xaa\xeb\xd2\xa9\x63\xa7\xb4n\xbdt\xae\xb9\xe6\x86\x8c\x1d\x37>\x7f\xbc\xeb\x96\x94\x94\x94\x14\xa4\xae\xca\xca\xaaz[\x17\xce\r\x85~\x91?\xfd\xf9\xa1\xfc\xfe\x8aK\vr\xed\xaf\x9b\xf2\xd9gY\xba\xd5\xd2M\xee\xf3\xc4\xfc\xfe\x8eX\xb2\xb9\xe3\0\0\0\0\xdf\xe0\xd3O?\xcd:\xebo6\xdf\xe3\xbf\xbd\xf4\xc2\xec\xba\xcbN\xf9\xcd%\x17$IN?\xeb\xdc\xb4\\\xaa\x45Q\xb5\x95k\xdf\xbe]~\xfc\xa3\x1f\x66\xd0\x1e\xbb\xe4\x86\xa1\x37'IN>\xf1\x98\xdc}\xcf\xf0\xb4o\xdf\xae\x91\xab+\xac\xdf^~e.\xbb\xfc\xf7\x39\xf6\xe8\xc3\xf3\xd8\xe3O6v9M\xca\xbb\xef\xbd\x9f$\x19 \xbds\xd6\xe9\xa7\xd6\x9es\xee\x39\xa7\x65\xe8\xb0[3x\xef!I\x92.\xcb.\x9b\xf1\x13&\xe4\x81\a\x1f\xce\xce;n\xbf\xd0k\x1a\x31\xf2\x91\xfc\xe6\xd2\xcbs\xeb-7\xa6\xcb\xb2\xcb\xd6\x8e\xcf\x99\x33''\x9ctZ\x86?\xf0`.\xb9\xe8\xfc\xef\xdd\x9e\xef\x83\xaf\xad\x1e,//\xcb\x66\x9bm\x92\x64\xee\xbf\xa9;\xee\xfc\x63\xae\xb8\xf2\xea\x8c\x1d\x37.\xcd\x9b\x37\xcf\x66\x9bm\x92_\x9esz\xbav\xe9\xf2\xbd\xae\xfbmjjj2{\xf6\xeco\xdc\xd3\xe9\xeako\xc8\x85\x17]\x9a\r\xd6_77\r\xbb\xae\xb6\xed\x1fK>\xc1\x10\0\0\0\xc0\x42PVV\x9a\xdf\\rA^\xfe\xd7+\xf9\xc7\x33\xa3\x8b\"\x18\x1a\x37n|\xda\xb5k\x97\x96-[\xe4\xa8#\xe\xabs\xacK\x97\xce\xb5\x63\xb3g\xcf\xce\xa4IS\x96\xb8\x95\x43_\r\x85\x8e\x39\xfa\x88&\x1f\f\xf5\xdb\x62\x8b\x45v\xad\xb7\xde|;{\xee=$}z\xf7\xcc\x9d\xb7\xdf\x94\xa1\x37\\\x93\x3\xe\xfai\xaa*+3\xfc\xde;\xf3\xe6\x1bo\xe5\xe8\xe3O\xca\x90\x3\xe\xc9\x1d\xb7\r\xcb\xba\xeb\xac\xbdP\xae[]]\x9d[o\xbb=I\xb2\xc3\xf6\xdb\xa5\xd3\xb7\xec\x17\xf4\xc9'\x9f\xe4\xc1\x87\x1e^(\xd7\xfe\xbe\xce:\xe7\xfc\xdcs\xef\xfd\xdfx\xce\x8f\xd6\xde\xa8\xde\xf1=v\xdf\xb5`{7}\x9b\x99\x33g\xe6\xc2\v/\xcd\xfa\xeb\xad\x93;o\xbf)O<\xf1\xb7\xfc\xeb\x95Wr\xf8\xe1?\xab\x13\x34\xec\xba\xcbN\xd9\x61\xfb\xedr\xe5U\xd7\x64\xcd\xd5\xfb\x66\xcb-7\xcb\xe0\xbd\x87\xe4\x82\v~\x93\xfe\xdb\xf4K\x8b\x16-\x16ZM\xf\x8f\x18\x95#\x8e:>555\x19\xbc\xd7\x90\xdcy\xc7M\xe9\xda\xa5K\xe6\xcc\x99\x93\x13O>=\xf7\xf\x7f \x17]x\xfe\x42\xf9<=\xea\x91Gs\xfe\xaf/\xae}\xde\xae]\xbb\xbc\xfc\xc2?\x92$\x97\xfd\xf6\x8a\\\xf1\xfbk\xb2\xff\x90}\xb2\xd9&\x9b\xe4\x93I\x93r\xd5U\xd7\x64\xfb\x1d\xf7\xc8\x63\xa3\x1eH\xfb\xf6\xed\xbf\xf7\xf5\xeb\x33{\xf6\xec\xec\xbd\xef\x81y\xfe\x85\x17s\xd2\x89\xc7\xe6\xe7?;\xb4\xde\xf3\x86\r\xbb\x35\xd5\xd5\xd5\xf9\xfb?\xfe\x99\x7f\xbf\xfb\xef\xf4\xee\xd3\xab \xf5\xd0\xf4\b\x86\0\0\0\0\xbe\x41iii\xbau\xeb\x36\xdf\xe3\xadZ-U\xfb\xb8\xac\xac\x34K/\xbd\xf4\xa2(\xab\xd1}\xb9\xa7\xd0\x1a\xab\xaf\x96\xe3\x8e\x39\xfc\x1b\xcf\xbd\xfa\xda\x61y\xf1\xa5\x97\x97\xa8=\x87\xbe\x1e\n-\xe\xf6\xdbo\xaf\x45r\x9d\xca\xca\xaa\x1cu\xdc\x89\xe9\xd8\x61\x99\\{\xcd\x15)))\xc9\x6\xeb\xaf\x9b\xa1\x37\\]{N\xef>\xbd\xf2\xa7\xfb\xee\xca\xe;\xed\x9e#\x8e<>\x7f}b\xe4\x42\r\x6Xt\x9e}\xf6\xb9\x8c\x1d\x37.\xcbv\xe9\x9c\xf1\x13&\xa4_\xbf-\xd2\xaf\xdf\x16I\x92\x17_|9w\xdcyw\x92\x64\x9f}\xf6\xca\x8f~\xb8\x46\x8e=z\xee\xe7\x8b\xb1\xe3\xc6\xa5\xb2\xaa*\xe3\xc6\x8f\xcf\xb3\xa3\x9f\xcf\x66\x9bn\xbcP\xeay\xe8\xe1\x91\x39\xf2\xe8\x13\xb2\xd5\x96\x9b\xe7\xf8\x63\x8f\xca~\xfb\x1f\x92\xc1{\xf\xc9\x1d\xb7\r\xcb\xa5\x97]\x99{\xef\x1b\x9e\x8b.\x83\xf6\x98\x1b\n\xcd\xae\xac\xfc^+e\xf6\x1e\xbcg\xb6\x1b\xd8\xbf\xf6yI\xb3\xb9\xab\xd4\xde\xff\xe0\x7fs\xe5U\xd7\xe6\xcc\xd3\x7fQg_\xaf\x81\xdbn\x9d\xfe\xdb\xed\x92\v/\xbe,\x17\xfe\xfa\x97\xdf\xf9\xba\xdf\xe4\xf5\x37\xde\xccs\xcf\xbf\x90$\xb9\xfd\x8e\xbb\xea\r\x86\x1ex\xf0\xa1L\x98\x38\x31I\xb2\xce\xdake\xc5\x95W,H-4M\x82!\0\0\0\x80o\xd0\xbe}\xfb\xfc\xfd\xa9\xc7\x16\xf9u\xc7\x8c\x19\x93\xa7\x9e\xfeG\xbd\xc7\x36\xdd\x64\xc3o\f\xab\n\xed\xcbP\xa8\xac\xb4,\xfb\xec\xb5\xe7\xb7\x9e?h\x8f]\xf2\xca+\xaf\xe5\xcc\xb3\xcf_(\xe1\xd0\xc7\x1f\x7f\x92\x97\xfe\xf5j\xbd\xc7~\xb4\xe6\xea\xe9\xd4\xa9\xe3\xf7z\xfdo3\xbfPh\x95UVn\xb2\xc1WU\xd5\x9c\x8c\x18\x35*S&}\x96\xbd\xf7\x1eT\xd0}N\x9ex\xf2\xc9\xbc\xfe\xfa\x9b\xb9\xef\x9e\xdb\xd3\xb6M\xdb\xda\xf1\r7X\xaf\xcey\xcd\x9b\x37\xcfo.\xb9 ;\xee\xbcg\xee\x1f\xfe\xe7\xec\xbd\0\xff\x96\x96\x64\xc7\x1d{D\xe>hH\xbd\xc7\xce<\xeb\xbc$\xc9\xb9\xe7\x9c^\xef\xf1\xb6m\x1bo\xaf\xa6\xcd\x37\xdf\x34\xb7\xdct}\x8e\x39\xee\xe4\f\xdcn\xd7\xfc\xf1\xce[\xd2\xabw\xcf\xbc\xf8\xe2\xcb\xd9}\xd0\xbe\x99\x33gN\x92\xe4\xde\xfb\xff\x94\xfb\xee\xb9#?\\s\x8d\xbc\xf5\xe6\xdb\xd9\x63\xf0O\xd2\xb2\x65\x8b\xdc~\xeb\xd0\x85\xd6N\xf0\xcf\xf=\x9c\xa3\x8f\x39)[m\xb5\x45\xae\xba\xf2\xb2T\x94\x97\xe7\xae;n\xce^\xfb\xec\x9f\xad\xb6\xde>\xb3\x66\xcd\xca\x85\x17\x9c\x97\xc1{\xee\x96$y\xf5\xb5\xff\xc9#\x8f\xfc\x1f{w\x1e\xa6UY\xff\xf\xfc=\xcc\x80\x1a\xb2\x83\xb1\xbb\xa0\x88\xa2\x96K\xae\xb9+\x8b\xfbR\xb8\x86\xa2\x46}\xcb-sKs_33\xb7\xac\xd4\xdc\x15\x33Ksc0\\\xca\x36\x45\xfbi\xdfL\xcb%\xcd\xaf\x80\xa0\x88\x80\xe\xc8\xc0\xfc\xfe \x1f\x19g0\x6\xe6\x61\x6\xce\xebu]^\xd7y\xee\xe7\xdc\xe7|\x1e\xce\xcc\\0o\xef\xfb\x33>'|\xeb\xd8%\xbeg\x87\x8e\x1d\xd2\xa1\x63\x87\x6\xe3O?\xfdL*\xdb\xb4\xc9!\x87\x1c\xd0\xe0\xfc/\x7fi\x9f\xfc\xfa\xbe\a\x97\xf8\x9e\x9f\xa6\xb6v^n\xb8\xe1\x96\xd2\xeb\x37\xdf\x9c\x94\xfb\x1ex0{\xed\xf1\xf1v}\xf7=\xf0`\x8e;\xfe\xe4\xec\xb3\xf7\x9e\x39\xfb\xac\xef\xa4\x63\x87\x8e\x65\xeb\xf3\x44\xeb$\x18\x2\0\0\0h\x85z\xf5\xea\x95g\x9f\xfbk\xc6\xdc\xf9\x8bz\xe3\a\x1f\x34\"#\xfe\xf3K\xcd\x96\xf0Q(4}\xfa{Yc\xf5\xfe\xa5\x9e\x42\x1f\xf9\xe7K\vzm\\p\xd1\xa5\xf5\xc6W]\xb5}^{\xfd\xdf\xcd\x12\xeu\xeb\xd6\x35/\xbf\xf4J\x1e\x1e\xffX\xbd\xf1!\xbb\xee\x94\x9dw\\t?\xa8\xe6\xf0i+\x85.\xbf\xec{e\xbd\xf7\xe2\xb8\xf1\xa6\xdb\xf2\xbb\xdf\xff\xbe\xf4z\xe7\x1dv\xc8\xa1\x87\x1e\x98\x31\x63\xee\xcaw\xcf:7I\xd2\xb9k\xa7\xec\xb9\xfbn\xb9\xed\xb6;\xf3\xc8\xe3\x8f\x97\xce\xdd\xee\x8b_\xac\xb7\xb2\x61I\x8d{\xf8\xd1\f\\g@6\xd9\xf8\xf3\xff\xf5\xdc\x8d\x36\xdc \xab\xaf\xde/O\xfc\xfe\x8f\x85\xf\x86\xfa\xf4\xee\x9d>\xbd\x1b\xff\xbe\xe8\xd0q\xc1J\xc4\xf5\xd7\x1b\xb4,KZl\xdbm\xbbM~x\xe9\x45\x19\x39jt\xe6\xce[\xd0\xb3\xe9\xf6\x31w\x96\x42\xa1\x64\x41`q\xc7\x98\xbb\xf2\xb9\x8d\x36\xcc\x9c\xb9\x1f\xe6\xbd\x19\xef\xe5GW_\xd6\xec\xa1\xd0\xce;\xed\x98\x1f]}Yi\x15\xd0\xda\x3\xd6\xcc\x9dw\xdc\x9c\x83\xf\x39<\xe7\x9cuz\xe\x1c\xb1\x7fi\xce\xa9\xdf\x39\x33\x1bo\xf2\xb9\x66\xb9\xff'\xcd\xae\x99\x93\xb6\xed\xda\xa6\xaa\xb2\x61\b\xdbn\xa5\x95\x32s\xd6\xfb\xcd~\xcfy\xf3\xe6\xe5\xdb'\x9e\x9a\xfb\x1ex(W^qiv\xda\x61\xfb\x9cy\xf6\xf9\x39\xee\xf8\x93\x93${\xed\xb1{)\x14\xda{\xaf=r\xe9%\x17\xa4\xb2\x91\xfaX\xf1\t\x86\0\0\0\0\x9a`\xce\x9c\x39\xb9\xf7?\xff\xa7\xf7>{\xed\xfe\xa9\x8d\xbd\x97\x46\x9b\x36mr\xe1\xf9g\xa7\xa2\xa2\"w\x8cY\xb0\x15\xd3!\a\x8f\xc8\xf9\xe7\x9e\x95\x36m\xda\x94\xe5\x9e\xcb\x8b\x36m\xda\xe4k\xa3G%\x15\x15y\xf8\x37\x8f&I\x86\xe\xd9)\xa3\x8f:\xbc\xac\x7f\x36\xcb\xe3\xf6q\x1f\xe9\xdc\xf5\xe3\x95;\xd3\xa7\xbdW\xd6{\xbd\xf1\xc6\x1b\x19\x30`\xc0\x62\xaf@\x18\xb4\xee\xa0L\x9c\x34\xa9\xac\x35\xd1:\xd5\xcd\x9f\xdf,\xd7y\xf8\x37\xe3s\xecq'e\xd7]v\xce\x8f\xae\xba,m\xdb\xd6\xff\xb5\xf7\xda\x3\xd6\xcc\xa3\xe3\x1f\xca\xaa\xab\xb6\xaf\x37^\xfb\x9f\x10ki\xdc\x31\xe6\xae\\}\xcd\xb5\xa5\xd7\x9d:v\xc8\xd8\a\xef\xc9\x86\x1b\r\xce\xfb\xef\x7f\x90\xdf\xfe\xf6\x89\xec\xb8\xe3\xf6\x1f\xdf\xb3v^\xaa\xab\x7f\xb3X\xc1iS,\b\x85\xbe\x93\xfb\x1ex(W\\~Ii\x85\xd0\xa5\x97\\\x90$9\xee\xf8\x93s\xd1\x45?\xc8\xe4\xb7\xde\xca\xde{\xee\x9e\x1f|\xff\x42\xa1P\x81\t\x86\0\0\0\0\x9a\xe0+\x87\x1d\x95'\x9fz:I\xf2\xab_\xdd\x9b;\xef\xb8\xb9l[\xf0\xb4i\xd3&\x17\x9cwV**\x92TT\xe4\xfcs\xcel\xf1P\xa8_\xdf\xde\x39\xf7\xec\xd3s\xe6\xd9\x17\x64\xd6\xac\xf7s\xcaI\xc7\xa7g\xcf\xd5J\xef\x7f\xb4R\xe8\xf4\xef\x9cX\x1a\x9b \x9c;7/\xbf\xfcJ\xbd\xb1\x99\x33\x66%I\xfe\xfe\xc2\x8b\xf5\xc6\xd7^{\xc0R\xf5\xc7i.\x8f?\xfe\xbb\x9cp\xd2i\xe9\xdc\xa9S\xdaV.x\x96\x87\x1ct`~u\xcf\xfd\xa5UCUU\x95\x39\xf8\xa0\x11I\x92\x95\xda\xb6K\xa7\x8e\x9dr\xc2I\xa7\xe5\xb2K/Z\xea\xfe\x42O\xfc\xe1O\x19\xb2\xeb\xce\xb9\xfa\xca\x5\xa1\xd0\x8b/\xfe#\xb5\xf3\xe6\x65\x83\xc1\xeb\xe7\x9e_\xdf\x9f\xbd\xf6\xd8\xad\x14\n\xfd\xe9\xcfOe\x8d\x35\xfa\xa7W\xcf\x9eKu\xcf\x8f\f\x18\xb0V\xf6\xda\x63x\xe9\xf5\xca\xab\xac\x92\x64\xc1j\xb8\xddw\x1b\x96o\x9d\xf8\x9d\x9cw\xeew\xb3\xfd\xb6_\xcc[S\xde\xce\xa5?\xb8<\x7f\xfd\xdf\xbf\xe5\x9b\xdf\x18\xdd,\xf7\xaf\xab\xab\xcb\x8c\x99\x33r\xd6\xd9\x17\xe6\xd7\xf7?X/\x14J\x16\xf4\xc9;\xef\x9c\x33\xf2\xab{~]\n`\xcf;\xf7L\xa1P\xc1\xf9\x89\v\0\0\0\xb0\x98&N\x9aT\n\x85\x92\xe4\xcfON\xc8\xa4\xc9\x93\xd3\xbbW\xaf\xb2\xdd\xb3M\x9b\x36\x39\xff\xdc\xb3J\xc7\xad\xc1\xc2\xe1\xd0]w\xdf\x9b\x63\x8f\xfe\xf4_p\xdeu\xf7\xbd\xa9\x9dW\xdbl\xa1\xd0G\xda\xb4i\x93\xd1G\x1d^:n.o\xfc\xdf\xc4z\xbf\x98_^B\xa1OSUU\x99\xaf|\xe5\xa0\x65r\xaf\xb5\xd7\x1e\x90_\xdf\xf7`\xe6\xcd\x9b\xf7_\x7f\xf9<\x7f\xfe\xfc\xbc\xf8\x8f\x7f\x66\xe7\x9dvX&\xb5-\xf\xa6\xbc\x35%\xc3w\xdf\xb7\xd1\xf7>9\xfe\x87\xdf\x8dO\xdf\xbe-\xd7o,I~\xfb\xdb'r\xd8\x11_\xcb\xc6\x1b\x7f.?\xfe\xd1\xe5\xa5\xc0\x65\xe3\x8d?\x97_\xdeu{\xc6\xdcyW***r\xd0\x41\a\xe4s\x1bm\x98$\x19\xb8\xee:\xa9\x1e{O\xbeq\xf4\xb7\xf2\x95\xc3\x8e\xca-7^\x9b\xed\xb7\xdfv\x89k\xd8u\xa7\x1d\xb3\xd5V[\xa6m\xdb\xaaL\x9f>=\a\x1e\x32*W_\xf9\x83$\xc9}\xf7?\x98\xbf?\xff\x42N?\xed\xe4\xfc\xeb\xb5\xd7\x33\xea\xc8\xaf\xa7\xfa\xa1{\x97\xfe\x83\xff\xc7\x16\x9bo\x96-6\xdf\xac\xc1xEEE\xbew\xd1y9\xeb\x9c\vr\xf4\x31\xdf.\x8d\xf7\xed\xdb;\xeb\xad\xb7nN?\xe3\xdc\f\x18\x30 \xeb\xac\xbd\xd6\x12\xdf\xfb\xc3\xf?\xcc\x41\x87\x8c\xca\xd3\xcf\xfc%m\xda\xb4i\x10\n}\xa4}\xfb\xcf\x64\xb3M7\xc9\xd3\xcf\xfc%_\xd8l\xd3\x6+\xa7(\x1e\xc1\x10\0\0\0\xc0\x62\xea\xd6\xb5k:w\xea\x94\xe9\xef-\xd8\x8a\xabs\xe7\xce\xe9\xd6\xb5k\xd9\xef\xdbZ\x2\xa1\x85\xf5\xeb\xdb;\x17\x9d\x7fV\xbav\xed\xfc_\xcf\xfd\xfa\xe8\xc3\x33m\xda\xf4z+\x8b\x9aK\xb9\xfflV\x84P\xe8#\xb7\xddvg\x92\x94\x65\x95\xd0\xc2\xf6\xd9{\x8f\xdc|\xcb\xed\x19\x33\xe6\x17\xff\xf5^w\xdd}O\xa6L\x99\x9a\xbd\xf7\xda\xa3\xac\x35Q>[l\xf1\x85\xf4\xe9\xdd;\xed\xda\xb6\xcdgW[-\xe3\x1fy,\xcf=\xf7\xd7\x1c\xfd\xcd\xafg\xe3\x8d?\x97\x8d\x37\xfe\xb8\x87\xcf\x9c\x39sr\xf5\x8f~\x92\xcf\x7f\xees\xd9\x61\x87m\xd3\xb6\xaa*}\xfa\xf4\xc9\x96[n\xbeT5l\xb7\xdd\x17K\xc7\xd3\xdf\x9b\x91w\xdf}\xb7\xde\xfb/\xbf\xfaj\x92\x64\xf2\xe4\xb7RSS\xb3T\xf7j\x8a\xe\x1dV\xcd\x65\x97^\x94o\x7f\xeb\xe8\xbc\xf0\xe2?\xd3\xb9s\xa7l\xb4\xd1\x86\x99]S\x93\xaf\x1cvT\xe<\xf8\xb0\xdcy\xc7\xcdK\x1c\xe\xfd\xeb\xd5\xd7\xf2\xf4\x33\x7fI\x92\xac\xd6\xa3G\xa3\xa1P\xb2 \xa4\x1as\xfb\x8dy\xe9\xe5W\xb2\xce\xda\x8b\xbf\xcd#+.\xc1\x10\0\0\0\xc0\x62Zi\xa5\x95r\xc3\xcf~\x9cK\x7fpE***r\xe2\xb7\x8f+[\x8f\xa1\xe5\xc1GA\xcf\xdb\xef\xbc\x93\xab\xae\xbe\x36\xdf\xfc\x9f\xa3J\xef\xbd\xf5\xd6\x94\\\xf3\x93\x9f\xe5\x98\xa3G\xa7{\xb7ne\t\x85\xcamE\n\x85\x92\xe4\x91\xc7\x1fOR\xfe`h\x93\x8d?\x9f\x83\xe\xfcr.\xbe\xf4\xb2|~\xe3\x8d\xb2\xc1\xe0\xf5\x1b=\xef\xf9\xbf\xbf\x90\x8b.\xfa~\xf6\xdfo\x9fl\xb5\x94\xc1\xc0G\xda\xb4i\x93\x83\xfZ\xf0\xf9\xaa\x16\x63{\xba\xee\xdd\xbb\xe7\xd0\x43\xeN\x92\xdc\x31\xe6\xce\x66\xa9\x61i\xf5\xea\xd5\x33\xcf>\xf3\xc7zc\xbf\a\xf8\xb7\0\0 \0IDAT\xc7\x1c\xb7`k\xc6\xab\xae\xb8\xb4\xdex\xc7\x8e\x1d\x97Y]\x8b\xb2\xf2\xca+\xe7\x94SN\xc8\xb1\xc7\x9d\x98\xad\xb6\xd9)\x93\xdfz+I\xf2\xe0\x43\xd5\x19=\xfa\xa8\x1c\x38\x62\xff$\xc9\x9d?\xbf;\xd7^\xf7\xb3\xbc\xf2\xeakI\x92\x9e\x9f\xfdl&\xbf\xf5V\xae\xba\xf2\xd2\x66\xf9\x39\xfa\xfa\xebod\xf5\xd5\xfb-\xf5u\x9a\xea\xb9\xbf\xfeo\x9e|r\xc2\"\xdf_y\xa5\x95\x33r\xe4\xc1\xe9\xd3\xe7\xe3\x95]\xed\xda\xb6\xcd\xad\x37__\n\x87\xee\xba\xf3\xd6\fXk\x8d&\xdf{\xad\x1ke\x9b\xad\xb7\xca\x9f\xfe\xfc\x64\xeod\v\xc9\x85\xb5k\xd7.\x83\xd7_\xaf\xc9\xf7`\xc5$\x18\x2\0\0\0h\x82M7\xd9\x38\x63n\xbf\xa9\xa5\xcbhUf\xcf\xfe\x30\xff~\xe3\xffr\xfa\x19\xe7\x97\xb6(\xfa\xee\x99\x17\xa4v^mf\xcf\xfe\xb0\x85\xab[2/\xbc\xf8\x62\xfe\xf7o\xcf\xaf\x30\xa1\xd0\xb2v\xda\xa9'\xe6\xf9\xe7_\xc8\xbe\xfb\x1f\x94\x93N<>{\xef\xb5{>\xbb\xda\x82p\xf0\xad)S\xf2\xc0\x83\xd5\xf9\xde%\x97\x65\xc0Zk\xe6\x8c\xd3On\xb6\xfbVTT\xa4m\x13z\xee,|~kYEQYY\x99.]\xba\xd4\x1bk\xdbnA\x8d\x9f\x1co-\xf6\xda\x63\xb7\xdcz\xeb\x98\xf4\xed\xd3;\xa3G\x1f\x91\x19\x33\x66\xe6\xacs.\xc8\xf9\x17~\xaf\x14\f]p\xe1\xf7\xd3\xbbO\xaf\x8c\xb9\xfd\xa6t\xea\xd4\x31\xd7^{C&N\x9a\x94=w\xdfm\xa9\xef\xff\xe4SO\xe7{\x97\\\x96_\xdd}\xc7R_\xab\xa9\x9ey\xe6\xd9\xfc\xf0\x8a\xab\x17\xf9~\x97\xce]2r\xe4\xc1\r\xc6;v\xec\x98[o\xbe>\x17\\xI\xbau[\xb2\xe7\xda\xb6mU\xee\xb8\xed\x86\xcc\x9d[\x9b\xb6m\xfd\xaa\x9f\xc5\xe7\xab\x5\0\0\0`\x11^z\xf9\x95\xec\xb1\xd7\x97\x9a \xf5\xde\x7f\xf9\xcb\x33Kv\xed\xff\x9b\xb8\xe0\xdaK\x19\xa2\xf4\xe8\xd9?S'\xff{\xa9\xae\xb1(\x9bl\xb2iY\xae\xdb\x1c\x16\xe7\xd9\xd0\xb8\xb7\xdf~;oM\x99\x92\xc1\xeb\x37\xde\xd3\xe8\xbfy\xfe\xef\x7f\xcfj\xab\xad\x96\x1e\xdd\xbb/\xd1\xfcr>\xbb\xeaq\xbfI\x92\f\x1b\xbak\xb3_;)O\xeds\xe6\xcc\xc9\xcd\xb7\xdc^o\xec\xb0\x91\x87X!\x6-\xec\x8d\x89S\xad\x18\x2\0\0\0\xa0\xf9,\xef\xabjX~u\xef\xde=\xdd\x97\x30\xd4I\xb2\xc4\x81\xd2\xb2P\xae@\xa8\x9cVZi\xa5\x8c\xfe\xea\x11-]\x6\xd0\x88\x36-]\0\0\0\0\0\0\0\xcb\x86`\b\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\x34\xd0\xb6\xaamK\x97P\x16m\xdb\xae\x98\x9f\v\0\x16\x97`\b\0\0\0\x80\x6V\xed\xd0\xa1\xa5K(\x8bUW]1?\x17\0,\xae\xaa\x96.\0\0\0\0\xa0\xa8\xfa\xf5\xee\xd1j\xef\xdb\xa7O\x9f\xcc\x98\x31#\xf3\xe6\xd5.\x83\x8a\x1a\x9a:\xf9\xdf\xcd~\xcd\xca\xca\xaa\xf4\xe9\xd3\xa7\xd9\xaf\xdb\x9cZ\xeak\x82\xa5\xb7\xbb\xe5\xb9v\xa0\xe9\xac\x18\x2\0\0\0\xa0\x81v\xed\xda\x65\xbd\xf5\xd6K\x97.]\x97\xfb\xed\xd7\xda\xb6m\x9b.]\xba\x66\xbd\xf5\xd6K\xbbv\xedZ\xba\x1c\0hQV\f\x1\0\0\0\xd0\xa8v\xed\xda\x65\xcd\x35\xd7l\xe9\x32\0\x80\x66\x64\xc5\x10\0\0\0\0\0@AX1\x4\0\0\0\x90\xa4\xae.\xa9\x9d_\x9by\xb5\xf3\x32o~m\xea\xea\x92\xba\xba\xba\x96.\v\0`\x91***RQ\x91T\xb6\xa9JeUe\xaa\xdaT\xa5\xa2\xe2\xd3\xe7\b\x86\0\0\0\x80\xc2\xab\x9dW\x9b\x39s\xe6\x64\xbe \b\0X\x8e\xd4\xd5\xd5\xa5\xae.\x99?\x7fn\xe6\xd6\xceM\x9b\x8a\x8a\xac\xb4\xd2J\xa9\xaa\\t\xfc\x63+9\0\0\0\xa0\xd0\xe6\xcc\x99\x93\x9a\xd9\xb3\x85\x42\0\xc0ro~]]jf\xcf\xce\x9c\x39s\x16y\x8e`\b\0\0\0(\xac\x39s\xe6\xe4\xc3\xda\xb9-]\x6\0@\xb3\xfa\xb0v\xee\"\xc3!\xc1\x10\0\0\0PH\xb5\xf3j\x85\x42\0\xc0\n\xeb\xc3\xda\xb9\xa9\x9dW\xdb`\\0\x4\0\0\0\x14N]]>u\x8b\x15\0\x80\x15\xc1\x9c\x39s\xf2\xc9\xcdr\x5\x43\0\0\0@\xe1\xd4\xce\xaf\xd5S\b\0X\xe1\xcd\xaf\xabk\xb0jH0\x4\0\0\0\x14\xce\xbc\xday-]\x2\0\xc0\x32\xf1\xc9\xbf\xf7\b\x86\0\0\0\x80\xc2\x99\x37\xbf\xe1~\xfb\0\0+\xa2O\xfe\xbdG0\x4\0\0\0\x14\x8e]\xe4\0\x80\xa2\xf8\xe4\xdf{\x4\x43\0\0\0@\xe1\xd4I\x86\0\x80\x82\xf8\xe4\xdf{\x4\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB0\x4\0\0\0\xb0\x84\x66\xce\x9c\x99\xeb\xaf\xfbi\xb6\xd8l\x93L\x9d\x32\xe5S\xcf}\xee\xb9gs\xfai\xa7\x66\xf7\x61\x43r\xe1\x5\xe7\x65\xd2\xc4\x89\xcb\xa8J\0\x80\x8f\t\x86\0\0\0\0\x9a\xa8\xa6\xa6&\xf7\xfc\xea\x97\xd9k\xf7\xe1\xf9\xe1\xf.\xcd\xacY3?\xf5\xfcg\x9e\x9e\x90\xc3\xe=$\x3\x6\xac\x9d\x93O=-\xefM\x9f\x9e#F\x8d\xcc\x94\xff\x12&\x1\0\x34\x37\xc1\x10\0\0\0@\x13\xfd\xfd\xef\xcf\xe7\x97w\xff\"g\x9f{~n\x1fs\xd7\xa7\x9e;\x7f\xfe\xfc\\u\xe5\x15\x39\xf6\xb8\xe3s\xc4\x91Ge\xfb\x1dv\xc8\x39\xe7]\x90\xce\x9d:\xe7\xfe\xfb\xee]F\x15\x3\0, \x18\x2\0\0\0h\xa2M6\xd9\x34\x37\xdfz{\xb6\xdf\x61\x87\xb4k\xd7\xf6S\xcf}\xe5\xe5\x97\x33\xe1\xa9'\xb3\xe3N;\x97\xc6V^y\xe5\xec\xb5\xcf>\xb9\xe5\xa6\x9bRWWW\xeer\x1\0J\x4\x43\0\0\0\0MTQQ\x91\xca\xca\xca\xc5:\xf7\xa3\xed\xe2z\xf4\xe8Qo\xbc_\xbf\xfey\xfb\xed\xa9\x99\x39\xb3\xe1\x36t\x83\a\xad\xb3\xf4\x45\x2\0\x34\xa2\xaa\xa5\v\0\0\0\0X\x91M\x9b\xf6N\x92\x64\xa5\x95W\xae\x37\xde~\xd5U\x93$\xb3\x66\xcdL\xc7\x8e\x1d\x1b\xcc[T8\xf4\xfc\x8b/5s\x85\0@\x91\b\x86\0\0\0\0\xca\xa8S\xa7NI\x92\x9a\x9a\x9a\xb4m\xfb\xf1\xb6s5\x1f|P\xef\xfdO\x12\0\x1\0\xe5`+9\0\0\0\x80\x32\xea\xd1\x63\xb5$\xc9[\x93'\xd7\x1b\x9f\x34iR\xfa\xf4\xe9\x9b\xf6\xedWm\x89\xb2\0\x80\x82\x12\f\x1\0\0\0\x34\xb3\xf\xfe\xb3\x1a(I\xd6\x19\x38\x30\x83\xd6[?\xe3\xc7\xff\xa6\x34V[[\x9b\x87\x1e| #\xf?\xbc\x5\xaa\x3\0\x8a\xccVr\0\0\0\0\xcd\xe8\x95W^\xce\x88\xfd\xf7\xcd\xc9\xa7\x9e\x96\x3\xe<(UUU9\xfe['\xe4\xeb\xa3\x8fJ\xdb\xb6UYo\xbd\xc1yd\xfco\xf2\xce;\xef\x64\xb7\xdd\xf7l\xe9r\x1\x80\x82\x11\f\x1\0\0\0\x34\xa3\xf6\xedW\xcd\xe0\xc1\x1b\xa4g\xcf^\xa5\xb1m\xb7\xdb>?\xbb\xf1\xe6\xdc\xfd\x8b\xbbr\xef=\xbf\xca\xf6\xdb\xef\x98\xeb~vc\xbav\xed\xba\xc8\xeb\x8c\xab\x1e[:\x1e:lxYk\x6\0\x8a\x43\x30\x4\0\0\0\xb0\x14\xd6\x1f\xbc\x41\x9e\x7f\xf1\xa5\xd2\xeb\x9e={\xe6\x96\xdb\xc7\x34\x38o\xcb\xad\xb6\xce\x96[m\xbd\xd8\xd7\x15\x6\x1\0\xe5\xa0\xc7\x10\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10z\f\x1\0\0\0\xb4\x42\xe3\xaa\xc7\x96\x8e\xf5\x1b\x2\0\x9a\x8b`\b\0\0\0\xa0\x15\x12\x6\x1\0\xe5`+9\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \xf4\x18\x2\0\0\0h\x85\xc6U\x8f-\x1d\xeb\x37\x4\0\x34\x17\xc1\x10\0\0\0@+$\f\x2\0\xca\xc1Vr\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\xe8\x31\x4\0\0\0\xd0\n\x8d\xab\x1e[:\xd6o\b\0h.\x82!\0\0\0\x80VH\x18\x4\0\x94\x83\xad\xe4\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x44UK\x17\0\0\0\0@C\xd7\\}U\xbd\xd7\xdf\x38\xfa\x98\x16\xaa\x4\0X\x91\b\x86\0\0\0\0Z!A\x10\0P\xe\xb6\x92\x3\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB\x8f!\0\0\0\x80Vh\\\xf5\xd8\xd2\xf1\xd0\x61\xc3[\xb0\x12\0`E\"\x18\x2\0\0\0h\x85\x84\x41\0@9\xd8J\xe\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b=\x86\0\0\0\0Z\xa1q\xd5\x63K\xc7\xfa\r\x1\0\xcd\x45\x30\x4\0\0\0\xd0\n\t\x83\0\x80r\xb0\x95\x1c\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10z\f\x1\0\0\0\xb4\x42\xe3\xaa\xc7\x96\x8e\xf5\x1b\x2\0\x9a\x8b`\b\0\0\0\xa0\x15\x12\x6\x1\0\xe5`+9\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \xf4\x18\x2\0\0\0h\x85\xc6U\x8f-\x1d\xeb\x37\x4\0\x34\x17\xc1\x10\0\0\0@\x13\xcd\x9e=;w\xdcvk\xc6\x8f\x7f\x38\x1d:t\xcc\xee{\xec\x99=\xf7\xda;\x15\x15\x15\x8b\x9c\xf3\xdcs\xcf\xe6\xb6[n\xce_\x9ey:k\r\x18\x90\xfd\xf6\xffr\x86\xe\x1b\x9e\x36m\x1a\xdf\xd0\x45\x18\x4\0\x94\x83`\b\0\0\0\xa0\tjkk\xf3\x9dSN\xca\xacY3s\xd4W\xbf\x96i\xd3\xa6\xe5\xbcs\xce\xca\xbb\xef\xbe\x9b\xc3\xe\x1f\xd5\xe8\x9c\xe7\xff\xf6\xb7\x1c|\xc0\x97s\xfc\t'f\x9f}\xf7\xcb?^|1\xdf=\xed\xd4\xcc\x99\x33'\xfb\xec\xbb\xdf\x32\xfe\x4\0@\x91\t\x86\0\0\0\0\x9a\xe0\xa9\xa7\x9e\xcc\xef\x9f\xf8]\xc6\x8d\x7f,]\xbbvM\x92t\xea\xd4)\xa7\x9e|b\xf6\xd8s\xaft\xeb\xd6\xad\xc1\x9cG\x1f\x1d\x9f\xad\xb7\xd9&_\x1d\xfd\xb5$\xc9\x36_\xdc\x36sk\xe7\x66\\\xf5X\xc1\x10\0\xb0L5\xbeV\x19\0\0\0\x80\x46U\x8f}({\xef\xb3o)\x14J\x92\xad\xb7\xf9\x62\xe6\xcd\x9b\x9f\xa7'<\xd5\xe8\x9c\xf6\xedW\xcd\xa4I\x93RSSS\x1a{\xe7\xed\xb7\xb3\xf6:\xeb\x94\xbd^\0\x80\x85\t\x86\0\0\0\0\x9a\xe0\xa5\x7f\xfc#\xfdW_\xa3\xdeX\xfb\xf6\xed\x33p\xdd\x81\x99 2\xbf\xfb\xed\xe3I\x92\xdb\xee\xb8\x33\xdd\xbbw_\xe4\xbd\x6\xfj|5\xd1\xf3/\xbe\xd4\xf4\xc2\x1\0\xfe\x43\x30\x4\0\0\0\xb0\x98***\xb2\xd6\x80\xb5\x32s\xe6\xcc\x6\xef\xbd\xfb\xee\xb4\xf4\xe8\xd1\xa3\xd1y\xf7\xfd\xfa\xde\xfc\xf4\xc7\xd7\xe4\xda\xebo\xc8\x6\x1bn\x94?\xff\xe9\x8f\x39\xfe\xd8\x63\xb2\xef~\xfb\xe7\xb8o\x9d\x90\x8a\x8a\x8a\x6s\x4@\0@9\b\x86\0\0\0\0\x9a`\xe0\xc0u\xf3\xea\xab\xaf\xd6\x1b\x9b\x33gN^y\xf9\x95\xf4\xec\xd9\xab\xc1\xf9\xb5\xb5\xb5\xb9\xe8\x82\xf3s\xdaw\xcf\xc8\x36_\xdc\x36I2t\xd8\xf0t\xe8\xd0!_=rT\xf6\xda{\x9f\xac\x35`\xc0\x32\xa9\x1d\0@\x8f!\0\0\0\x80&\xd8u\xc8\xd0\xdcw\xef\xbd\x99:eJi\xec\x99\xa7'$I\xbe\xb0\xf9\x16\xa5\xb1\xf>\xf8 \xc9\x82`\xa8\xa6\xa6&\xb3\x66\xcd\xaaw\x9d\xd5V\xfbl\x92\x64n\xed\xdcr\x97\f\0Pb\xc5\x10\0\0\0@\x13l\xbb\xedv\xd9t\xb3\xcdr\xd2\x89'\xe4\xb0\xc3G\xe5\x83\xf>\xc8%\x17_\x94o\x9ftr:u\xea\x94$\x19\xfb\xd0\x83\x39\xe5\xa4o\xe7\xf6\x31we\xc3\x8d\x36\xca\xff|\xf3\x9b\xb9\xf4\x92\x8b\x33w\xee\xdc\f\x1c\x38\x30\x35\x35\xb3\x33\xe6\x8e\xdb\xb2\xf3.C2`\xc0\xda-\xfc\x89\0\x80\"\x11\f\x1\0\0\0\x34\x41\xbb\x95V\xca\x15W^\x9d\x9bn\xba!W]yyz\xf5\xea\x9d\xd3\xbe{F\x86\xe\x1b^:\xa7{\xf7\x1e\xd9p\xa3\xcf\xa5\x63\xc7\x8eI\x92#\x8f\x1a\x9d\x35\xd6X3\xbf\xbe\xf7\x9e\xfc\xec\xbak\xb3\xe6Zke\x97]\x87\x64\x9f}\xf7KUU\xe3\xbf\x9e\x19W=\xb6t\xbc\xf0\xb5\x1\0\x96\x46\xc5?^\x99X\xd7\xaf\xf7\x82\xc6\x88oL\x9c\x9a\x81k5\xdc\v\x17X>\xd5\xcc\xaeM\xb2\xe0{\xfb\xa3\xef\xf3\x45Y\xf8\x1c?\v\0\0\x80\xe5\xc1?_\x9dT\xef\xdf\x31M\xf9w\xcf\xcc\xf7g}\xea\xb9-m\xf0\xa0u\xf2\xfc\x8b/\xb5t\x19\0\xc0\n\xa2\x43\xfbU\x93,\xf8\xfb\x90\x1e\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A4\xde\xdd\x10\0\0\0\x80\x16\x35\xaezl\xe9x\xe8\xb0\xe1-X\t\0\xb0\"\x11\f\x1\0\0\0\xb4\x42\xc2 \0\xa0\x1cl%\a\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84\x1e\x43\0\0\0\0\xad\xd0\xb8\xea\xb1\xa5\x63\xfd\x86\0\x80\xe6\"\x18\x2\0\0\0h\x85\x84\x41\0@9\xd8J\xe\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@AT\xb5t\x1\0\0\0\0\x34\x34\xaezl\xe9x\xe8\xb0\xe1-X\t\0\xb0\"\x11\f\x1\0\0\0\xb4\x42\xc2 \0\xa0\x1cl%\a\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84\x1e\x43\0\0\0\0\xad\xd0\x35W_U\xef\xf5\x37\x8e>\xa6\x85*\x1\0V$\x82!\0\0\0\x80VH\x10\x4\0\x94\x83\xad\xe4\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\xd0\x63\b\0\0\0\xa0\x15\x1aW=\xb6t }\xb2\xcb\xae\x43\xb2\xff\x97\xbe\x9cUVY\xa5\xc1\xb9\xe3\xaa\xc7\x96\x8e\x87\xe\x1b\xde\xec\x9f\x1\0(&\xc1\x10\0\0\0@\x13\xd4\xd6\xd6\xe6;\xa7\x9c\x94Y\xb3\x66\xe6\xa8\xaf~-\xd3\xa6M\xcby\xe7\x9c\x95w\xdf}7\x87\x1d>j\x91\xf3~|\xcd\x8fr\xf7]w\xe6\xa8\xd1_\xcb\xae\xbb\xe\xc9\xcc\x99\x33\xf3\x97g\x9eI\xbbv\xed\x1a=_\x18\x4\0\x94\x83`\b\0\0\0\xa0\t\x9ez\xea\xc9\xfc\xfe\x89\xdf\x65\xdc\xf8\xc7\xd2\xb5k\xd7$I\xa7N\x9dr\xea\xc9'f\x8f=\xf7J\xb7n\xdd\x1a\xccy\xe1\xef\x7f\xcfO\x7f|M\x1e\xac\x1e\x97>}\xfa\x96\xc6w\xdf\x63\xcf\x65V7\0@\xa2\xc7\x10\0\0\0@\x93T\x8f}({\xef\xb3o)\x14J\x92\xad\xb7\xf9\x62\xe6\xcd\x9b\x9f\xa7'<\xd5\xe8\x9c{\xee\xf9\x65\xe:\xe4\x90z\xa1\x10\0@K\x10\f\x1\0\0\0\x34\xc1K\xff\xf8G\xfa\xaf\xbe\x46\xbd\xb1\xf6\xed\xdbg\xe0\xba\x3\x33y\xd2\xa4\x46\xe7\xfc\xfd\xf9\xe7\xb3\xfa\xeak\xe4\x81\xfb\xef\xcb\xc8\x43\xe\xca\x1e\xbb\r\xcd\x8f\xae\xba\x32\x33g\xce\\\x6\x15\x3\0|\xccVr\0\0\0\0\x8b\xa9\xae\xae./\xbc\xf0\x42\xbe\x34\x62\x44\x83\xf7z\xf4X-\xd3\xde\x9d\xd6`|\xfe\xfc\xf9\xf9\xebs\xcf\xe6\xff\xfd\xe5\x99|y\xc4\x81\x39\xf2\xab\xa3\x33\x7f\xfe\xfc\xfc\xe4\xc7\xd7\xe4\x8d\x37\xfe\x9d\x8b\xbe\xf7\xfdTTT4\x98\x37x\xd0:\x8d\xd6\xf0\xfc\x8b/-\xfd\a\x1\0\nK0\x4\0\0\0\xb0\x98***\xb2\xd6\x80\xb5\x1a]\xe9\xf3\xee\xbb\xd3\xd2\xa3G\x8f\x6\xe3m\xda\xb4I\xa7\xce\x9d\x33\xed\x9dwr\xd6\x39\xe7\x96\x42\xa0\x1e\xab\xad\x96\x3\xbe\xb4_\x8e>\xe6\xb8\xf4\xed\xd7\xaf\xc1<\x1\x10\0P\xe\x82!\0\0\0\x80&\x18\x38p\xdd\xbc\xfa\xea\xab\xf5\xc6\xe6\xcc\x99\x93W^~%={\xf6jt\xce\xe7?\xbfq\xbav\xedVoe\xd0g?\xdb\x33I2}\xfa\xf4\x46\x83!\0\x80r\xd0\x63\b\0\0\0\xa0\tv\x1d\x32\x34\xf7\xdd{o\xa6N\x99R\x1a{\xe6\xe9\tI\x92/l\xbe\x45\x92\x5\xdb\xc7\xd5\xd4\xd4\x94\xde\x1f\x32tX\x1e\x7f\xec\xd1z+\x8d^|\xe1\x85$I\xaf\xde\xbd\x97\x45\xd9\0\0I\x4\x43\0\0\0\0M\xb2\xed\xb6\xdb\x65\xd3\xcd\x36\xcbI'\x9e\x90\xc7\x1e}$\xf>p\x7f\xbes\xca\xc9\xf9\xf6I'\xa7S\xa7NI\x92\x8b/{\f\x1f\x92\x19\x33\x66$Iv\xday\x97\xf4\xec\xd5+'}\xfb[yd\xfco\xf2\xc8\xf8\xdf\xe4\xaa+\x7f\x98\xe3O81\xdd\xbauk\xc9\x8f\x3\0\x14\x8c\xad\xe4\0\0\0\0\x9a\xa0\xddJ+\xe5\x8a+\xaf\xceM7\xdd\x90\xab\xae\xbc<\xbdz\xf5\xcei\xdf=#C\x87\r/\x9d\xd3\x7f\xf5\x35\x32h\xbd\xf5\xd3\xae]\xbb$I\xfb\xf6\xed\xf3\x93k\xaf\xcf\r?\xbb.W\xfc\xf0\xb2\xf4Xm\xb5\x1c\xfa\x95\xc3\xb2\xfb\x1e{.\xf2>\xe3\xaa\xc7\x96\x8e\x17\xbe\x36\0\xc0\xd2\xa8\xf8\xc7+\x13\xeb\xfa\xf5^\xd0\x18\xf1\x8d\x89S3p\xad\xc6\xf7\xc2\x5\x96?5\xb3k\x93,\xf8\xde\xfe\xe8\xfb|Q\x16>\xc7\xcf\x2\0\0`y\xf0\xcfW'\xd5\xfbwLS\xfe\xdd\x33\xf3\xfdYe\xafoi\f\x1e\xb4N\x9e\x7f\xf1\xa5\x96.\x3\0XAth\xbfj\x92\x5\x7f\x1f\xb2\x95\x1c\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10U-]\0\0\0\0\0\r\x8d\xab\x1e[:\x1e:lx\vV\x2\0\xacH\x4\x43\0\0\0\0\xad\x90\x30\b\0(\a[\xc9\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\x88\xaa\x96.\0\0\0\0\x80\x86\xc6U\x8f-\x1d\xf\x1d\x36\xbc\x5+\x1\0V$\x82!\0\0\0\x80VH\x18\x4\0\x94\x83\xad\xe4\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\xd0\x63\b\0\0\0\xa0\x15\x1aW=\xb6t\xac\xdf\x10\0\xd0\\\x4\x43\0\0\0\0\xad\x90\x30\b\0(\a[\xc9\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5\xa1\xc7\x10\0\0\0@+t\xcd\xd5W\xd5{\xfd\x8d\xa3\x8fi\xa1J\0\x80\x15\x89`\b\0\0\0\xa0\x15\x12\x4\x1\0\xe5`+9\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \xf4\x18\x2\0\0\0h\x85\xc6U\x8f-\x1d\xf\x1d\x36\xbc\x5+\x1\0V$\x82!\0\0\0\x80VH\x18\x4\0\x94\x83\xad\xe4\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\xd0\x63\b\0\0\0\xa0\x15\x1aW=\xb6t\xac\xdf\x10\0\xd0\\\x4\x43\0\0\0\0\xad\x90\x30\b\0(\a[\xc9\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\x88\xaa\x96.\0\0\0\0\x80\x86\xc6U\x8f-\x1d\xf\x1d\x36\xbc\x5+\x1\0V$\x82!\0\0\0\x80VH\x18\x4\0\x94\x83\xad\xe4\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\xd0\x63\b\0\0\0\xa0\x89\xdezkrn\xbe\xf1\xc6\xfc\xfe\x89\xdf\x65\xfd\xc1\x83\x33\xe2\x80\x83\xb2\xc9\xa6\x9b.\xd6\xdc\xda\xda\xda\x1cw\xcc\x37\x33\x7f\xfe\xfc\xfc\xf8\xa7\xd7-\xf2\xbcq\xd5\x63K\xc7\xfa\r\x1\0\xcd\xc5\x8a!\0\0\0\x80&\x98\x32\x65J\x8e\x1cuXf\xcf\x9e\x9d\x13O>%}\xfa\xf6\xcd\xe1#\xf\xc9\x33OOX\xac\xf9w\xfd\xfc\xce<\xfe\xd8\xa3\xff\xf5\xbc\xa1\xc3\x86\x97\xfe\x3\0h.V\f\x1\0\0\0\x34\xc1=\xbf\xba;\xfd\xfb\xaf\x9e\xd3\xcf\x38\x33\x95\x95\x95\xd9n\xfb\x1d\x32g\xf6\x9c\\\xf3\xa3\xabs\xfd\r7\xa5\xa2\xa2\x62\x91s_|\xe1\x85\xfc\xe8\xea+\xb3\xd7\xde\xfb\x64\xfa\xf4\xe9\xcb\xb0j\0\x80\x5\xac\x18\x2\0\0\0XL\xb5\xb5\xb5\xb9\xe1\xfa\xeb\xb3\xc7\x9e{\xa5\xb2\xb2\xb2\x34>d\xe8\xb0\xfc\xf9O\x7f\xcc\xbf_\x7f}\x91s\xdf\x7f\xff\xfd\x9cu\xe6ws\xe6Y\xe7\x64\xd0\xa0\xf5\x96\x45\xb9\0\0\r\b\x86\0\0\0\0\x16\xd3\xf4\xe9\xef\x66\xd6\xac\x99\xe9\xd9\xb3W\xbd\xf1^\xbd\x16\xbc~\xfb\xed\xa9\x8b\x9c{\xedO\x7f\x9cu\x6\xe\xcc\x90\xa1\xc3\xcaZ#\0\xc0\xa7\xb1\x95\x1c\0\0\0\xc0\x62\xfah\xfb\xb7UVY\xa5\xde\xf8g\xda\x7f&I2c\xc6\x8c\x46\xe7\xfd\xf1\x8f\x7f\xc8\x3\xf7\xfd:w\xfd\xf2\x9eO\xddjna\x83\a\xad\xd3\xe8\xf8\xf3/\xbe\xb4\xb8\xe5\x2\0\x34 \x18\x2\0\0\0XL\x1d:tH\x92\xbc\xff\xc1\xfb\xf5\xc6kjf'I:w\xe9\xd2`\xce;\xef\xbc\x9d\x33\xbf{Z\xce=\xff\xc2t\xeb\xd6=IR\x97\xba\xffz/\x1\x10\0P\xe\x82!\0\0\0\x80\xc5\xd4\xa5K\xd7TVVf\xe2\x9bo&\x9b}\xa1\x34>u\xea\x94$I\x8f\xee=\x1a\xcc\xf9\xd9u\xd7\x65\xd2\xc4\x89\x19}\xd4\x11\r\xde\x1b u\xfe\xa8#\x8e\xcc\xa8#\x8e\xfc\xd4s\x86\xe\x1b\xbe\xa4\xe5\x1\0,\x92\x15\x43\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\n\xa2\xaa\xa5\v\0\0\0\0\xa0\xa1q\xd5\x63K\xc7\x43\x87\ro\xc1J\0\x80\x15\x89`\b\0\0\0\xa0\x15\x12\x6\x1\0\xe5`+9\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \xf4\x18\x2\0\0\0h\x85\xc6U\x8f-\x1d\xeb\x37\x4\0\x34\x17\xc1\x10\0\0\0@+$\f\x2\0\xca\xc1Vr\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\xe8\x31\x4\0\0\0\xd0\n\x8d\xab\x1e[:\xd6o\b\0h.\x82!\0\0\0\x80VH\x18\x4\0\x94\x83\xad\xe4\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\xd0\x63\b\0\0\0\xa0\x15\xba\xe6\xea\xab\xea\xbd\xfe\xc6\xd1\xc7\xb4P%\0\xc0\x8a\x44\x30\x4\0\0\0\xd0\n\t\x82\0\x80r\xb0\x95\x1c\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10z\f\x1\0\0\0\xb4\x42\xe3\xaa\xc7\x96\x8e\x87\xe\x1b\xde\x82\x95\0\0+\x12\xc1\x10\0\0\0@+$\f\x2\0\xca\xc1Vr\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\n\xa2\xaa\xa5\v\0\0\0\0\xa0\xa1q\xd5\x63K\xc7\x43\x87\ro\xc1J\0\x80\x15\x89`\b\0\0\0\xa0\x15\x12\x6\x1\0\xe5`+9\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \xf4\x18\x2\0\0\0h\x85\xc6U\x8f-\x1d\xeb\x37\x4\0\x34\x17\xc1\x10\0\0\0@+$\f\x2\0\xca\xc1Vr\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\xe8\x31\x4\0\0\0\xd0\n\x8d\xab\x1e[:\xd6o\b\0h.\x82!\0\0\0\x80%\xf0\xd6[\x93s\xf3\x8d\x37\xe6\xf7O\xfc.\xeb\xf\x1e\x9c\x11\a\x1c\x94M6\xdd\xb4\xd1s\xeb\xea\xea\xf2\xfb'\x9e\xc8\xc3\xfWg\xc2\x93\x7fN\x9f\xbe\xfd\xb2\xef~\xfbg\xf8n\xbb\xa7\xb2\xb2\xb2\xd1\x39\xc2 \0\xa0\x1cl%\a\0\0\0\xd0\x44S\xa6L\xc9\x91\xa3\xe\xcb\xec\xd9\xb3s\xe2\xc9\xa7\xa4O\xdf\xbe\x39|\xe4!y\xe6\xe9\t\x8d\x9e\xff\xf0\xb8\xea|\xef\xe2\v\xb2\xc1\x6\x1b\xe6\xa4S\xbe\x93u\xd7\x1d\x94SN\xfav~}\xef=\xcb\xb8r\0\xa0\xe8\xac\x18\x2\0\0\0h\xa2{~uw\xfa\xf7_=\xa7\x9fqf*++\xb3\xdd\xf6;d\xce\xec\x39\xb9\xe6GW\xe7\xfa\x1bnJEEE\xbd\xf3\xb7\xdaz\x9bl\xbb\xdd\xf6\xf9\xccg>\x93$\xd9y\x97]\xd3\xb6]\xdb\xfc\xfc\xce\x31\xd9o\xff/\xb5\xc4G\0\0\n\xca\x8a!\0\0\0\x80&\xa8\xad\xad\xcd\r\xd7_\x9f=\xf6\xdc\xab\xde\x36pC\x86\xe\xcb\x9f\xff\xf4\xc7\xfc\xfb\xf5\xd7\x1b\xcc\xe9\xd8\xb1\x63)\x14\xfa\xc8j\xab}6\xef\xbf?\xab\xec\xf5\x2\0,\xcc\x8a!\0\0\0\x80&\x98>\xfd\xdd\xcc\x9a\x35\x33={\xf6\xaa\x37\xde\xab\xd7\x82\xd7o\xbf=5\xab\xaf\xb1\xc6\x7f\xbd\xce\x33OO\xc8N;\xef\xb2\xc8\xf7\a\xfZ\xa7\xd1\xf1\xe7_|i\xf1\x8b\x5\0\xf8\x4\xc1\x10\0\0\0@\x13L\x9f>=I\xb2\xca*\xab\xd4\x1b\xffL\xfb\x5+\x82\x66\xcc\x98\xf1_\xaf\x31\xe1\xa9\xa7\xf2\xe8#\x8f\xe4\xa1q\xf/\xf2\x1c\x1\x10\0P\xe\xb6\x92\x3\0\0\0h\x82\xe\x1d:$I\xde\xff\xe0\xfdz\xe3\x35\x35\xb3\x93$\x9d\xbbt\xf9\xd4\xf9\x93'M\xca\x19\xa7\x9f\x9a\x8b/\xf9~z\xf7\xeeS\x9e\"\x1\0\x16\x41\x30\x4\0\0\0\xd0\x4]\xbatMeee&\xbe\xf9\x66\xbd\xf1\xa9S\xa7$Izt\xef\xb1\xc8\xb9\xef\xbd\xf7^N>\xf1\x84\xec\xb3\xdf\xfe\x19\x36|\xb7\xb2\xd6\t\0\xd0\x18\xc1\x10\0\0\0@\x13\xb4k\xd7.\x87\x8d:\"\xf7\xdfwo\xe6\xce\x9d[\x1a\xff\xed\xe3\x8f\x65\x87\x1dwJ\x9f\xbe}\x93$\xf3\xe7\xcfOMMM\xe9\xfd\xf7\xde{/'}\xfb[\xd9l\xf3\xcd\x33\xfak\xff\xb3\xcc\xeb\x6\0H\xf4\x18\x2\0\0\0h\xb2\x11\a\x1c\x98\x91\x87\x1c\x9c\xf3\xcf='C\x86\xe\xcd?\xff\xf9\xcf\\\xf7\xd3\x9f\xe4\xc6[nKEEE\x92\xe4\xe2\v\xcf\xcf#\xe3\x7f\x93{\xee{0uuu\x19}\xd4\x11\xf9\xdb\xff\xfe\x35_\x1d\xfd\xf5<\xfb\xff\xfe_\xe9Z\xfdW\xef\x9f\xee\x9f\xb2\xca\b\0\xa0\x39\t\x86\0\0\0\0\x9a\xa8_\xbf\xfe\xb9\xe9\xd6\xdbs\xcbM7\xe6\xfc\xf3\xce\xc9&\x9bn\x96[n\x1b\x93\xc1\x1blP:\xa7\xff\xeakd\xd0z\xeb\xa7]\xbbv\xf9\xfd\x13\xbf\xcb\xdf\xfe\xf7\xafI\x92\xc3G\x1eR\xefZ\xd7\xfc\xe4\xbal\xbf\xc3\xe\r\xee\x31\xaezl\xe9x\xe8\xb0\xe1\xe5\xf9 \0@\xe1\b\x86\0\0\0\0\x96\xc0\xea\xab\xaf\x9e\x33\xce:{\x91\xef\x1f\xfa\x95\x91\x39\xf4+#\x93$\xbb\xec:$\xcf\xbf\xf8R\x93\xae/\f\x2\0\xca\x41\x8f!\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \xf4\x18\x2\0\0\0h\x85\xc6U\x8f-\x1d\xeb\x37\x4\0\x34\x17\xc1\x10\0\0\0@+$\f\x2\0\xca\xc1Vr\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x10\0\0\0\0\0@A\xe8\x31\x4\0\0\0\xd0\n\x8d\xab\x1e[:\xd6o\b\0h.\x82!\0\0\0\x80VH\x18\x4\0\x94\x83\xad\xe4\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10\x82!\0\0\0\0\0\x80\x82\xd0\x63\b\0\0\0\xa0\x15\x1aW=\xb6t\xac\xdf\x10\0\xd0\\\x4\x43\0\0\0\0\xad\x90\x30\b\0(\a[\xc9\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5\xa1\xc7\x10\0\0\0@+t\xcd\xd5W\xd5{\xfd\x8d\xa3\x8fi\xa1J\0\x80\x15\x89`\b\0\0\0\xa0\x15\x12\x4\x1\0\xe5`+9\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \x4\x43\0\0\0\0\0\0\x5Q\xd5\xd2\x5\0\0\0\0\xd0\xd0\xb8\xea\xb1\xa5\xe3\xa1\xc3\x86\xb7`%\0\xc0\x8a\x44\x30\x4\0\0\0\xd0\n\t\x83\0\x80r\xb0\x95\x1c\0\0\0\0\0@A\b\x86\0\0\0\0\0\0\nB0\x4\0\0\0\0\0P\x10z\f\x1\0\0\0\xb4\x42\xe3\xaa\xc7\x96\x8e\xf5\x1b\x2\0\x9a\x8b`\b\0\0\0\xa0\x15\x12\x6\x1\0\xe5`+9\0\0\0\0\0\x80\x82\x10\f\x1\0\0\0\0\0\x14\x84`\b\0\0\0\0\0\xa0 \xf4\x18\x2\0\0\0h\x85\xc6U\x8f-\x1d\xeb\x37\x4\0\x34\x17\xc1\x10\0\0\0@+$\f\x2\0\xca\xc1Vr\0\0\0\0\0\0\x5!\x18\x2\0\0\0\0\0(\b\xc1\x92\xc2\x42h\0\0 \0IDAT\x10\0\0\0\0\0@A\xe8\x31\x4\0\0\0\xd0\n\x8d\xab\x1e[:\xd6o\b\0h.V\f\x1\0\0\0,\x3\xcf=\xf7lN?\xed\xd4\xec>lH.\xbc\xe0\xbcL\x9a\x38\xf1S\xcf?\xe1\xf8\x63\x33t\xd8p\xa1P+6x\xd0:-]\x2\x8b\xc1sj\xfd<\xa3\xe5\x83\xe7\xb4|X\x9c\xe7$\x18\x2\0\0\0(\xb3g\x9e\x9e\x90\xc3\xe=$\x3\x6\xac\x9d\x93O=-\xefM\x9f\x9e#F\x8d\xcc\x94)SZ\xba\xb4\x65\xe6\x9a\xab\xafj\xe9\x12X\f\x9e\xd3\xf2\xc1sj\xfd<\xa3\xe5\x43Q\x9f\x93`\b\0\0\0\xa0\x8c\xe6\xcf\x9f\x9f\xab\xae\xbc\"\xc7\x1ew|\x8e\x38\xf2\xa8l\xbf\xc3\xe\x39\xe7\xbc\v\xd2\xb9S\xe7\xdc\x7f\xdf\xbdK}\xfd\x85\xb7\x9ck\xaes\xcbq\xcd\xa6h\xe9:W\xb4\xcf\xd4\x92\x9f\xa7\\\xe7./\x9fiy\xf9\xbak\xca\xb9\xcb\xcbgj\xe9\xaf\xd1\xa6\xf0\xf3\xa1y\xcf]^>SK~\xdd\t\x86\0\0\0\0\xca\xe8\x95\x97_\xce\x84\xa7\x9e\xcc\x8e;\xed\\\x1a[y\xe5\x95\xb3\xd7>\xfb\xe4\x96\x9bnJ]]]\vV\a\0\x14\x8d`\b\0\0\0\xa0\x8c>\xda.\xaeG\x8f\x1e\xf5\xc6\xfb\xf5\xeb\x9f\xb7\xdf\x9e\x9a\x99\x33g\xb6\x44Y\0@AU\xb5t\x1\0\0\0\0+\xb2i\xd3\xdeI\x92\xac\xb4\xf2\xca\xf5\xc6\xdb\xaf\xbaj\x92\x64\xd6\xac\x99\xe9\xd8\xb1\x63\xa3s\x1bk \xfd\xfc\x8b/5s\x85\0@\x91\b\x86\0\0\0\0\xca\xa8S\xa7NI\x92\x9a\x9a\x9a\xb4m\xdb\xb6\x34^\xf3\xc1\a\xf5\xde_\\\x8d\x85\x45\xcb\x8b\x1f]}eK\x97\xd0\xec\x96\xe7\xe7\xb1(\x9e\xd3\xf2\x61\x45{N\x9e\xd1\xf2\xc1sZ1\b\x86\0\0\0\0\xca\xa8G\x8f\xd5\x92$oM\x9e\\oe\xd0\xa4I\x93\xd2\xa7O\xdf\xb4o\xbfj\x83\x39V\x5\x1\0\xe5\xa2\xc7\x10\0\0\0@\x19\xad\x33p`\x6\xad\xb7~\xc6\x8f\xffMi\xac\xb6\xb6\x36\xf=\xf8@F\x1e~x\xcb\x15\x6\0\x14\x92\x15\x43\0\0\0\0\x65TUU\x95\xe3\xbfuB\xbe>\xfa\xa8\xb4m[\x95\xf5\xd6\x1b\x9cG\xc6\xff&\xef\xbc\xf3Nv\xdb}\xcf\x96.\xf\0(\x18+\x86\0\0\0\0\xcal\xdb\xed\xb6\xcf\xcfn\xbc\x39/\xbe\xf0\x42.\xba\xf0\xbc\xac\xb2\xca*\xb9\xeeg7\xa6k\xd7\xae-]\x1a\0P0V\f\x1\0\0\0,\x3[n\xb5u\xb6\xdcj\xeb\x96.\x83&x\xeb\xad\xc9\xb9\xf9\xc6\x1b\xf3\xfb'~\x97\xf5\a\xf\xce\x88\x3\xe\xca&\x9bn\xda\xe8\xb9uuu\xf9\xfd\x13O\xe4\xe1\x87\xab\x33\xe1\xc9?\xa7O\xdf~\xd9w\xbf\xfd\x33|\xb7\xddSYY\xb9\x8c+/\x8e\xa6<\xa3\xc6\xfc\xec\xfaks\xd9\xa5\xdf\xcf\x93\x13\xfe\x92U;t(c\xa5\xc5\xf6\xdcs\xcf\xe6\xae\x9f\xdf\x99g\xff\xf2\x97l\xb3\xed\xb6\x19\x35\xea\xc8\xf4\xea\xdd\xfbS\xe7L\x9b\x36-?\x1fsG&Lx*\x13\xdf\xfc\xbfl\xbe\xe5V\x19\x31\xe2\xc0l\xb0\xe1\x86\xcb\xa8\xea\x62\xa9\xab\xab\xcb\xd8\xb1\xf\xe5\xa1\a\xee\xcf[\x93'g\x97!C2\xf2\xb0QYe\x95U\x16\x39g\xe2\xc4\x37s\xcb\xcd\x37\xe5\x89\xdf\xfe\x36\x1d;v\xcc\x90\x61\xc3\x33\xe2\x80\x3\x1a\xed\x9dG\xeb\x62\xc5\x10\0\0\0\0|\xc2\x94)Sr\xe4\xa8\xc3\x32{\xf6\xec\x9cx\xf2)\xe9\xd3\xb7o\xe\x1fyH\x9eyzB\xa3\xe7?<\xae:\xdf\xbb\xf8\x82l\xb0\xc1\x86\x39\xe9\x94\xef\x64\xddu\a\xe5\x94\x93\xbe\x9d_\xdf{\xcf\x32\xae\xbc\x38\x9a\xfa\x8c>\xe9\xb9\xe7\x9e\xcd\x65\x97~\xbf\xccU\xf2\xcc\xd3\x13r\xd8\xa1\x87\x64\xc0\x80\xb5s\xf2\xa9\xa7\xe5\xbd\xe9\xd3s\xc4\xa8\x91\x99\x32\x65\xca\"\xe7\xbc\xfe\xfa\xeb\x19y\xe8\x41\x99\x38ibF\x1cp`\xbes\xfa\x19\xe9\xdf\xbf\x7f\xde}\xf7\xdd\x65Xy\xb1\xdcz\xcb\xcd\xf9\xfe\xc5\x17\x65\xe8\xb0\xe1\xf9\xea\xd7\xbe\x9eG\x1fy$\xa7\x9ctb\xe6\xcd\x9b\xd7\xe8\xf9\xef\xbd\x37=\xa3\x8f:\"\xb3kf\xe7\xd4\xd3N\xcf\xfe_\x1e\x91_\xdf{O.\xba\xf0\x82\x65\\9K\xc2\x8a!\0\0\0\0\xf8\x84{~uw\xfa\xf7_=\xa7\x9fqf*++\xb3\xdd\xf6;d\xce\xec\x39\xb9\xe6GW\xe7\xfa\x1bnJEEE\xbd\xf3\xb7\xdaz\x9bl\xbb\xdd\xf6\xf9\xccg>\x93$\xd9y\x97]\xd3\xb6]\xdb\xfc\xfc\xce\x31\xd9o\xff/\xb5\xc4GX\xe1\x35\xf5\x19-l\xc6\x8c\x19\x39\xf3\xbb\xa7\xe5K_> w\xff\xe2\xe7\xcb\xb0\xea\x62\x99?\x7f~\xae\xba\xf2\x8a\x1c{\xdc\xf1\x39\xe2\xc8\xa3\x92$[l\xb9\x65\x46\x8d<4\xf7\xdfwo\x8e \x9b\x7f\xbd\xfajn\x1fsW:u\xea\x94$\xe9\xdd\xa7O\xbez\xc4\xe1\x39\xf5\xd4\xd3\xac\xc0k\xe5\xac\x18\x2\0\0\0\x80\x85\xd4\xd6\xd6\xe6\x86\xeb\xaf\xcf\x1e{\xeeUo\x1b\xb8!C\x87\xe5\xcf\x7f\xfa\x63\xfe\xfd\xfa\xeb\r\xe6t\xec\xd8\xb1\x14\n}d\xb5\xd5>\x9b\xf7\xdf\x9fU\xf6z\x8bhI\x9e\xd1G\xea\xea\xear\xf5UWd\xab\xad\xb7\xc9\x9e{\xef\xbd,\xca-\xacW^~9\x13\x9ez2;\xee\xb4sil\xe5\x95W\xce^\xfb\xec\x93[n\xba)uuu\r\xe6\xbc\xf6\xda\xbfr\xdf\xaf\xef\xcd>\xfb\xed\xf7\xa9\xe1\x1e\xcd\xe7\x8f\x7f\xf8\x43\xbau\xeb\x9aM6\xf9x\x1b\xc6~\xfd\xfag\x97!C\xf3\xc8#\xe3\x1b\x9d\xb3\xca*\v~\xde\xbd=uji\xec\xbd\xe9\xd3\xb3\xf6:\xeb\xe4\x33\xed\xdb\x97\xb7`\x96\x9a`\b\0\0\0\0\x16\x32}\xfa\xbb\x99\x35kfz\xf6\xecUo\xbcW\xaf\x5\xaf\xdf~{jc\xd3\x1ax\xe6\xe9\t\xd9i\xe7]\x9a\xbd>\x96\xee\x19=\xfe\xd8\xa3\xf9\xf3\x1f\xff\x98o|\xf3\x98\x88\x1d\xca\xeb\xa3\xed\xe2z\xf4\xe8Qo\xbc_\xbf\xfey\xfb\xed\xa9\x99\x39sf\x83\x39\x93&NJ\x92\xd4\xce\xad\xcd\xf9\xe7\x9e\x9d]v\xda>\xdf\xfc\x9f\xaf\x65\xc2SO\x95\xbf\xe0\x82z\xf3\xcd\x37\x33p\xdd\x41\xa9\xaa\xaa\xbf\xc1\xd8\xba\x3\xd7\xcdk\xff\xfaW\xa3s6\xde\x64\x93\xec\xbb\xff\x97r\xec\xd1\xdf\xc8/\xef\xbe+\xd7\xfe\xe4\xc7\xb9\xf5\x96\x9br\xd1\xc5\x97\xa4M\x1b\xb1\x43k\xe7\t\x1\0\0\0\xc0\x42\xa6O\x9f\x9e$\r\x9a\xae\x7f\xa6\xfd\x82\xff\x43~\xc6\x8c\x19\xff\xf5\x1a\x13\x9ez*\x8f>\xf2H\xe<\xe8\xe0\xe6/\x90%~F\x93'O\xce\x99g\x9c\x9e\xb3\xcf=?\x1d;v,o\x91\x64\xda\xb4w\x92$+\xad\xbcr\xbd\xf1\xf6\xab\xae\x9a$\x99\x35\xab\x61\x30\x34u\xea\x82\x30\xe9\xbcs\xcf\xce\x80\xb5\xd7\xce\x85\x17_\x92\r6\xdc(\x87\x8f<$\xcf\xff\xedoe\xae\xb8\x98\xde\x9a<\xb9\xb4\x1d\xdc\xc2:v\xea\x98\xff{\xe3\x8d\x46\xe7TUU\xe5\xa8\xa3\x46\xe7\xb5\xd7\xfe\x95\x33\xbf{z\xae\xb8\xfc\xb2\xec\xff\xa5\x11\x19\xb8\xee\xa0r\x97K3\xd0\x63\b\0\0\0\0\x16\xd2\xe1?\xbd\x31\xde\xff\xe0\xfdz\xe3\x35\x35\xb3\x93$\x9d\xbbt\xf9\xd4\xf9\x93'M\xca\x19\xa7\x9f\x9a\x8b/\xf9~z\xf7\xeeS\x9e\"\vnI\x9e\xd1\xbcy\xf3\xf2\xbd\x8b.\xc8\xc1\a\x1f\x9aM6]\xb0\x65V\xc3\x8d\xcchN\x1f\x85\r555i\xdb\xb6mi\xbc\xe6\x83\xf\xea\xbd\xbf\xb0\xf6\xff\xd9\x86\xec\xa4\x93O\xc9\xfa\x83\x37H\x92l\xbe\xf9\x16y\xe5\xe5\x97\x32\xf6\xa1\a3x\x83\r\xca]v\xe1t\xeb\xde-\xff\xfb\xd7\xbf\x36\x18\x9f\x35kV\xd6Xs\xcd\x46\xe7\xfc\xe3\x1f/\xe6\xd0\x83\xe\xc8\xf9\x17^\x9c\x1dv\xdc)\xaf\xbc\xfcR\xae\xba\xf2\xf2\x8c\xab\x1e\x9b\x1f^qe\xda\xb7_\xb5\xdc\x65\xb3\x14\xac\x18\x2\0\0\0\x80\x85t\xe9\xd2\x35\x95\x95\x95\x99\xf8\xe6\x9b\xf5\xc6?Z\xc9\xd0\xa3{\x8f\xc6\xa6%I\xde{\xef\xbd\x9c|\xe2\t\xd9g\xbf\xfd\x33l\xf8ne\xad\xb3\xc8\x96\xe4\x19=\xfa\xc8\xf8<<\xae:W_uE\x6\xfZ'\x83\a\xad\x93\xc3\xe]\xb0\xa2k\x8b/l\x92m\xb7\xd9\xb2\xfc\x85\x17L\x8f\x1e\xab%Y\xb0\"ea\x93&MJ\x9f>}\x1b\r\xf\xbaw\xef\x9e$\xe9\xd2\xb5[\xbd\xf1\x1\x3\xd6\xce\xa4I\x13\xcbTi\xb1\xf5\xee\xdd;/\xbc\xf0\xf7|\xf8\xe1\x87\xf5\xc6_\x7f\xed\xb5\xac\xb9\xe6Z\x8d\xce\xb9\xfd\xb6[\xb3\xfb\x1e{e\xdf\xfd\xf6O\x97.]\xb2\xd9\x17\x36\xcf\xf~xE\xfe\xf0\xfb'\xf2\xf8\x63\x8f-\x8b\xb2Y\n\x82!\0\0\0\0XH\xbbv\xedr\xd8\xa8#r\xff}\xf7\x66\xee\xdc\xb9\xa5\xf1\xdf>\xfeXv\xd8q\xa7\xf4\xe9\xdb\x37I2\x7f\xfe\xfc\xd4\xd4\xd4\x94\xde\x7f\xef\xbd\xf7r\xd2\xb7\xbf\x95\xcd\x36\xdf<\xa3\xbf\xf6?\xcb\xbc\xee\"Y\x92g\xf4\xb9\xcf}>\xbf\xf8\xe5=\xf5\xfe\xfb\xe6\xd1\xc7&I\xae\xbb\xe1\xa6\\{\xdd\r\xcb\xfe\x83\xac\xe0\xd6\x19\x38\x30\x83\xd6[?\xe3\xc7\xff\xa6\x34V[[\x9b\x87\x1e| #\xf?\xbc\x34\x36g\xce\x9c\xcc\x9b\x37/I\xb2\xee\xa0\xf5\xd2\xaf_\xbf\xfc\xee\xb7\x8f\x97\xde\xaf\xab\xab\xcb\xe3\x8f?\x96\x41\x83\xd6[V\xa5\x17\xca\x96[m\x9di\xef\xbcS\xaf\x8f\xd3\xd4\xa9S\xf3\xe0\x3\xf7g\xe7]w-\x8d}\xf0\x9f\x95^I2\xbb\xa6&3g\xceH]\xdd\xc7\xeb\xee:w\xee\x92\x8e\x1d;5\b\x98h}l%\a\0\0\0\0\x9f\x30\xe2\x80\x3\x33\xf2\x90\x83\xff?{\xf7\x1d&eu\xb7\x1\xf8\xd9\nH\x15\x4\xa9\x36\x4\x35\xc6\xde{\x8b\xa2\x62/(j\xb0\xc4\x98\x62\xef\xc6\x86\r[\x8c]c\xef\n1\xf6\xd8\xc5h\xca\x97\xa2\xa8\xb1\xc5n\x8a\x91\xa6\"\x2\xa1m\xfb\xfe \xae\xae,\xc8\xc2.\xbb\x30\xf7}]\\\xd7\xccy\xcf\xfb\x9e\xdf\x30\xbb\xb3\xbb\xf3\xcc\x39'\xe7\x9dsv\xb6\x1b\x30 \xef\xbe\xfbnn\xbc\xfe\xba\xdcz\xc7])**J\x92\\x\xfeyyv\xe4\x33y\xf0\x91\xc7RSS\x93\xc3\xe=$o\xbc\xfeZ~x\xd8\x8f\xf3\xb7W^\xa9\xbd\xd6\x32\xcb.\x93\xa5\xe6\x32\xcb\x88\xf9\xd3\xd0\xe7\xa8\xdb\xd2K\xa7\xdb\xd2K\xd7\xb9\xc6\xd4\xa9Ss\xcd\xd5\xc9\xea\xab\xad\x9ev\xff[\x9e\x8e\xc6SZZ\x9a\x63\x8e=.?>\xec\xd0\x94\x95\x95\x66\x95UV\xcd\xb3#\x9f\xc9g\x9f}\x96\x1d\a\xee\x9c$\x99>}z\xf6\xd9{\x8f\xf4\xeb\xd7?\x97\\zyZ\xb7n\x9d\xa3\x8e=>'\x1ewL\xa6O\x9b\x96~+\xad\x94\xbf\xbd\xfcr\xfe\xf3\x9f\x8f\xb2\xeb\xee{4\xf3#Z<\xf5\xea\xd5;?9\xfc\x88\x9cr\xf2\t9\xf1\xa4S\xd2\xa1\x43\x87\xdcq\xfbm\xd9q\xe0NYc\x8d\x35\x93$\x1f|\xf0~\x6\xed\xb9{N:\xe5\xd4\xec\xb3\xef\xe0\xec\xb6\xc7\x9e\xf9\xe1!\a\xa5k\xb7n\xd9t\xd3\xcdR\\\\\x9c\xe7~\xfbl\xda\xb7o\x9fM6\xdd\xac\x99\x1f\x11\xdf\x46\x30\x4\0\0\0\x14\x9c\xa2\xa2\xa2:\x9fr\x86o\xea\xd3g\x99\xdcv\xe7\xdd\xb9\xe3\xb6[s\xde\xb9gg\xedu\xd6\xcd\x1dw\r\xaf\xb3\xbf\xc9\x32\xcb.\x97\x95W\xf9N\xca\xcb\xcb\xf3\xc7?\xfc>o\xbc>k\x8f\x8e\x83\x86\xec_\xe7Z\xd7^wc\xb6\xd8r\xcb\x85Y~Ah\xe8sD\xf3\xd8l\xf3-r\xf3\xad\xb7\xe7\xbe_\xdf\x9b\x87\x1e| [l\xb1Un\xbc\xf9\xd6t\xee\xdc\x39IRVV\x96\x95VZ9\xcb\xaf\xd0\xb7\xf6\x9c\x1dw\x1c\x98\x36\xad[\xe7\xc1\a\x1e\xc8\xf0{\xee\xca&\x9bn\x9e_\xdd{\x7f\xbau\xeb\xd6\\\xf\x63\xb1\xf7\xd3\xc3\x8fL\xf7\xee=\xf2\xd0\x83\xf\x64\xfa\xf4i\xd9v\xbb\xed\xb3\xff\xfe\a\xa4\xb8x\xd6\xa2\x63m\xdb\xb6\xcb\xaa\xab~7\xdd\xbb\xf7H\x92l\xbc\xf1&\xb9k\xf8\xaf\xf2\xeb_\x8d\xc8\x39g\rM\xc7\x8e\x1d\xb3\xd1&\x9b\xe4\xb6;\xef\xf2<\xb5@_\x86\xe5\xb5\xf7\xdf\xf9`tM\x9f\x9e\xb3>\xb1\xf0\xd1\xe8O\xd2\x7f\x85\x1e\xcdQ\x17\xd0\x4\xa6M\xafL2\xeb{\xfb\xcb\xef\xf3\x39\xf9z\x1f\xaf\x5\0\0\xc0\xa2\xe0\xdd\xf\xc7\xd4\xf9;\xa6!\x7f\xf7\xfcw\xda\x7fS]-\x18\x2\0\x16\x7f\xc5\xc5\x45i\xdb\xa6m\x92Y\xbf\xf\xd9\x63\b\0\0\0(8%\xc5\x16Q\x1\0\n\xc3\x37\x7f\xef\x11\f\x1\0\0\0\x5\xa7\xa4\xb4\xa4\xb9K\0\0X(\xbe\xf9{\x8f`\b\0\0\0(8\xa5\xc5\xa5)\xfe\xc6z\xfb\0\0\x8b\x9b\xe2\xa2\xa2\x94\x96\x98\x31\x4\0\0\0\x14\xb8\xa2\xa2\xa4U\xabV\xcd]\x6\0@\x93j\xd5\xaaU\xbe\xf9Q\x18\xc1\x10\0\0\0P\x90JKJS^Z\xd6\xdc\x65\0\0\x34\x89\xf2\xd2\xb2\xd9\x66\v%\x82!\0\0\0\xa0@\x94\x95\x95\xa6\xa2\xa2\xb2N[\xabV\xad\x84\x43\0\xc0\x62\xa7\xbc\xb4l\xb6\xd9\xd1\x33+*S^V*\x18\x2\0\0\0\nCyYif~#\x18Jf\x85\x43mZ\xb7\xb6\xe7\x10\0\xb0\xc8+.*J\x9b\xd6\xad\xeb]2\xb7\x62\x66\x65\xca\xcaK3\xfb\x1c\"\0\0\0\x80\xc5P\xebV\xe5\x99>sf\xda\xa6\xf5l\xc7JKJS\xb2\x44i*\xab*SUY\x95\xaa\xea\xca\xd4\xd4$555\xcdP)\0\xc0\xbc)**JQQRR\\\x9a\x92\xd2\x92\x94\x96\x94\xce\xb6\xa7\xd0\x97\x66\xcc\x9c\x99\x36mZ\v\x86\0\0\0\x80\xc2\xb0\x44\x9bV\x99\x32uZ\xa6N\x9b\x9e%\xda\xcc\x1e\xe\x15%)+)MYIi\x92\xd9?e\v\0\xb0\xa8\x9a\x30qr*\xab\xab\xd3\xa6u\xb9`\b\0\0\0(\x1c]:\xb5\xcf\xe8q\x13\x66}\xba\x36IYyYJ\x8a\xad\xb4\xf\0,~fVT\xa6\x62\x66\x65\xa6\xcf\xacHuUU\xba-\xd5)I\x4\x43\0\0\0@\xe1())I\x9f\x9e]\xf3\xf9\x17\x93SYU\x93\x8a\x89SRU]\xdd\xdc\x65\x1\0\x34\xba\xf2\xb2\xd2\x94\x95\x97\x66\x89\x36\xe5i\xd3\xfa\xab\xd9\xd0\x82!\0\0\0\xa0\xe0,\xd9\xb1}s\x97\0\0\xd0,\xcc\x95\x6\0\0\0\0\0(\x10\x82!\0\0\0\0\0\x80\x2!\x18\x2\0\0\0\0\0(\x10\x82!\0\0\0\0\0\x80\x2!\x18\x2\0\0\0\0\0(\x10\x82!\0\0\0\0\0\x80\x2!\x18\x2\0\0\0\0\0(\x10\xa5\xcd]\0\0\0\0\xc0\xc2\x36\x61\xe2\xe4TUW\xa7\x62\x66\x65\xaa\xaa\xab\x9b\xbb\x1c\0\x80\x46WVV\x9a\xf2\xb2\xd2\xb4i\xd5*m\xda\x94\xd7\xb6\v\x86\0\0\0\x80\x82\x31\x63\x66\x45\xc6\x7f:1]\x96\xec\x90\xe2\xa2\xa2\x94u*MI\xb1\x5U\0\x80\xc5OEEefVTf\xda\xcc\x19\x99 }r\xc7\xad\x37\x34qE\r'\x18\x2\0\0\0h\x2\xe3\xc6\x8fOiII\xbat\xe9\xf2\xad}\xab\xab\xab\xb3\xfc\x8a\xab\xd6\xde\xef\xba\xd4\x92\xd9x\xc3\xf5s\xc0\x1\xfb\x65\xfd\xf5\xd7O\x92\xfc\xeew\xbf\xcb\x90\x83\x7f\x9c\xbf\xbf>*m\xdb\xb6\x9d\xa7\x1a\x66\xce\x9c\x99i\xd3\xa6\xa5}\xfb\xf6)\x9e\xcf\xfd\x95~y\xddu\xb9\xf0\xe2+\xf2\xc6\xab/\xa4}\xfb\xf6\xf3u\r\0h\x88\x91\xcf=\x9fw\xde~7I2\xf9\xbfSZT04f\xec\xb8|\xf0\xe1?\x9b\xbb\x8c\x5\"\x18\x2\0\0\0hd\x93'M\xce\x90\x83\xe\xcb\xb6\xdbl\x95\x13\x8e?z\x9e\xcf;\xe2'?\xc8\xe6\x9bo\x96\xa9S\xa7\xe6\xf\x7f\xf8\x63\xf6\xde\xf7\xc0\xdcz\xd3\x35\xd9z\xeb\xad\xe7\xab\x8eW^y%\x83\x6\x1f\x94\xd7^\xf9K:v\xec\x38_\xe7_x\xf1\x15\xf3\x35v\x92|\xfc\xf1\xc7y\xfb\xed\xf7\xb2\xcd\x36[\xd6{\xfc\xd9g\x9f\xcf\xca+\xf7K\xaf^\xbd\xe6{\f\0\x16}\xbfy\xec\xf1\xbc\xfc\xf2\xdfr\xc8\x41\a\xe6\xe5\xbf\xfd-\xff\xf8\xe0\x1f\xb5\xc7\xfe\xf1\xc1?r\xff\x3\xf\x65\xfd\xf5\xd6\xcb\xcd\xb7\xde\x96u\xd6Y+;\xf\xdcq\xa1\xd7x\xea\xe9\x43\x33h\xef\xbd\x92$\xfb\xef\xbfOv\xdc~\xc0\\\xfb\xbf\xfc\xca\xaby\xe8\xa1\x87\x17h\xcc\xa6\xfa\x39*\x18\x2\0\0\0hD3+*\xf2\xa3\x9f\x1e\x95n]\x97\xca\xd1G\x1d\xde\xa0sW\xec\xb7\x62\x36\xd8`\x83$\xc9V[m\x95\x99\x33g\xe6\xfc\v.\x9e\xef`hAL\x9a\x34)'\x9d|j\x6\xf\xda-\xc3\xef}h\xbe\xae\xf1\xf6\xdb\xef\xe5\xa7G\x1e\x9b+.\xbb\x38\xdb\xf\xd8\xb6\xce\xb1'\x9fz&G\x1f{R\xae\xbd\xea\x32\xc1\x10@\x1\x9b:uZ\xce;\xef\xe2\x8c\x1d\x37.\xb7\xdcz\xe7l\xc7gVT\xe4\xb8\x13~V{\xff\x89'\x9e\xc9\x36[m\x95%\x96h\xb3\x30\xcb\xcc_\xfe\xf2\x42\xb6\xd9j\xab$I\xdf\x15V\xc8\xa6\x9bl4\xd7\xfe\x33\xa6\xcfX\xe0`\xa8\xa9~\x8e\xce\xdf\x1c\x62\0\0\0\x80\x2\x37\xb3\xa2\"\xff\xf7\xa7?\xd7i\xab\xae\xae\xce\x89'\x9e\x9a\xcf?\x9f\x98_^sE\xca\xca\x16\xec\x33\xb9\x9bm\xb6i\xde\xfb\xe0_\xf9\xe2\x8b/\xea\xaf\x61\xe6\xcc\xdcz\xdbm\x19\x34h\xdf\xec\x38p\xe7\\y\xd5U\x99\x32\x65J\x92\xe4\xc5\x17Ge\xd0\xe0\x83\x92$\xab\xaf\xb5\x61\x96]a\x95L\x9e \xfc\xf0\xc3\xac\xbf\xfe\xfa\r\x1e\xbf\xaa\xaa*\xe7\x9csn\xe\xfc\xfe\xe0\xac\xb7\xde\xbaI\x92\x9a\x9a\x6_\x6\0\x9aLuu\xf5<\xf5+..\xce\xf9\xe7\x9d\x95\xa2\xa2\xa2\xdc\x33\xfc\xde$\xc9\xfe\xfb\r\xcay\xe7\f\xad\xf7\x3\x17\x85\x44\x30\x4\0\0\0\x30\xf\xea\x84\x42\xc3\xef\xc8\xb2\xcb\xf6I\x92\xec\xb9\xc7n))-MyYY\xd6[w\x9d\x5\x1a\x63\xb3M\xd6\xcb\x91G\x1c\x9e%\x96X\"\xbd{\xf7\xce\x92K.9\xc7\xbe\x33\x66\xce\xc8\xcc\x99\x15\xb3\xb5\xb7k\xd7\x36\xe5\xe5\xe5\xf3\x35\xfe\xd3O?\x9d\xc7\x9fz.\x8f?\xf5\\.\xbd\xe2\xba:\xc7\xbe\xbb\xc6\xfa\xe9\xd2\xb9\x63^\x1e\xf5\x97\x6_\xf7\xeb{!$\x96\x92\x3\xe0+\xff\xf7\xa7\xbf\xe4\x98\xe3N\xaa\xbd?\xf1\x8b/r\xe9\x65W\xe5\xb8\x63\x8fLMMM~~\xc9\xe5\xb5\xb3\x85\x92\x64\x87\x81{\xe4\xb2K/\xca\xc6\x1bm\xf0\xad\xd7...\xce\xb0s\x87\xa6\xa8(IQQ\xce;\xfb\xcc\x45\x32\x14j\xec\x9f\xa3\x82!\0\0\0\x80yp\xd5U\xd7\xe6\x8d\x37\xde\xac\x13\n}i\xb7]vj\x94\x31\xf6\xdcs\x8fl\xb0\xc1\xb7\xbf\xd1\x95$+,\xbf|\xde\xfb\xe0_\xf9\xe7?\xff\x99\xe5\x96[.\xc9\xac\x65\xe0\xde\xfb\xe0_\xe9\xd7\xaf\xdf\xffz\x15%I**f\xf\x90\xea\xb3\xd6Zk\xe5\xd1\x87\xef\xad\xd3\xf6\xec\xb3\xbf\xcd\x65W^\x97\xbbn\xbfq\xae\x41\xd5\x9c|\xfd\xcd\xac/\xdf\xc0\xfa\xfa^\t\xc2!\x80\xc2\xf6\xe2\x8b\xa3\xea\xec/\x94$W]s]\xee\xbc{DRS\x93\x89_|Q\xe7\xd8\xd8q\xe3\xf2\xd7\x17\x46\xcdS0\x94\xcc\n\x87\xce;gh\xed\xed\x45MS\xfc\x1c\x15\f\x1\0\0\0\xcc\x83\xc3~\xf8\x83\xec\x33h\xaf\xf4\xee\xdd<\x9bU/\xb1\x44\xdb$\xc9\xa8Q/e\xd5U\xbf\x93\xf5\xd6[/[n\xbeQ\x8e>\xe6\xb8\x1cy\xc4OSVV\x9e\x1bo\xba)\x83\a\xed\x96\xd5V[-I\xd2\xb3g\xcf$\xc9\x83\xf>\x98u\xd7]7\xfd\xfa\xf5K\xbbv\xed\xe6\x38\x46\xf7\xee\xdd\xd3\xbd{\xf7:mS\xa7N\xcd\x65W^\x97\x35\xd7\\#\xed\xdb\xb7oP\xcd\xcf>\xfb|\xbdo\\}}\xaf\x84k\xaf\xba,\xdbl\xb3\x65\x83\xae\v\xc0\xe2\xe3\xb0\x1f\xfe \xc3G\xdc\x97\xb1\xe3\xc6\xd5i\x9f\x38qb\xbd\xfd{t\xef\x9e\x1f\x1fvH\x83\xc6h\xec@\xe8/\x7fy\xf1[\xfb\xbc\xfb\xee{\v ^\v\0\0\x80\x45\xc1\xbb\x1f\x8e\xa9\xf3wLC\xfe\xee)Tc\xc7\x8e\xcd'\x9f|2\xc7\xe3\xdd\xbau\xcb\xd2K/\xbd\x10+\x2\x80\xd9m\xbb\xc3.y\xf7\x9dY3nVZ\xb9\x7f\x9e~\xfc\xe1\x66\xae(\xd9\xfa{;d\xa7\x81;d\x8d\xd5W\xff\xd6\xbe]\x96\xea\x92\x35\xd7Xm!T\xd5p\x1f\x8d\xfe\xc4\x8c!\0\0\0\x80\x42\xf1\xdb\xe7\x9e\xcb\xcfN;g\x8e\xc7/\xbe\xf0\xec\xec\x33h\xd0\x42\xac\b\0\x66\xf7\xbd\xad\xb6L\x87v\xb3\x96/\xdd`\xfdu\x9b\xb9\x9aYz\xf7\xe9\x93G\x1f{\"\x8f>\xf6\xc4\xb7\xf6\xddp\xc3\xf5[l0\x94XJ\xe\0\0\0\xa0`\xec\x37xp\xf6\x1b<\xb8\xb9\xcb\0\x80\xb9:\xf9\xa4\xe3\x9a\xbb\x84\xd9\xdcq\xeb\r\xcd]B\xa3i\xdc\x1d\x97\0\0\0\0\0\0h\xb1\x4\x43\0\0\0\0\0\0\x5\x42\x30\x4\0\0\0\0\0P \x4\x43\0\0\0\0\0\0\x5\xa2\xb4\xb9\v\0\0\0\0X\xd8>\x1a\xfdIs\x97@#\xe9\xd3\xb3ks\x97\0\0\x8b\x14\x33\x86\0\0\0\0\0\0\n\x84\x19\x43\0\0\0@\xc1\x31\xcb\x4\0(T\x82!\0\0\0\xa0\xe0XJ\xe\0($_\xffP\x8c`\b\0\0\0(8f\f\x1\0\x85\xca\x1e\x43\0\0\0\0\0\0\x5\xc2\x8c!\0\0\0\0\xea\x35s\xe6\xcc|\xfc\xf1\xc7\x99\x32yr**+\x9a\xbb\x9c\xf9VVZ\x96v\xed\xdb\xa7W\xaf^)//o\xeer\0\xa0Y\t\x86\0\0\0\0\x98\xcd\xcc\x99\x33\xf3\xd6[o\xa5\xaa\xaa\xb2\xb9KY`\x15\x95\x15\xf9\xfc\xf3\t\x99\x34iRVYe\x15\xe1\x10\0\x5\xcdRr\0\0\0\0\xcd\xe4\xa3\xd1\x9f\x34\xdb\xb8\xdf\x36\xf6\xc7\x1f\x7f\xdc\xac\xa1P\xd7\xee\xcb\x34\xfa\x35\xab\xaa*\xf3\xf1\xc7\x1f\x37\xfau\x1b\xd3\xbc<7\xb4L\x8b\xf2s\xb7(\xd7\xe\x34\x9c`\b\0\0\0\x80\xd9L\x99<\xb9\xb9Kh\x12S\xa6,\x9e\x8f\v\0\xe6\x95`\b\0\0\0\x80\xd9,\xca{\n\xcdME\xc5\xe2\xf9\xb8\0`^\t\x86\0\0\0\0\0\0\nDis\x17\0\0\0\0\xc0\xe2\xe3\xa3\xff\x8cN\x92\xf4\xe9\xdd\xb3\x99+\xa1\xa5\xa9\xa8\x98\xb5gUYY\xd3\xbc%\xf9\xc9\xa7\x9f\x66\xec\xd8qY\xed\xbb\xab\xce\xd7\xf9\xaf\xbf\xf1\x66\x96^\xba[\xbau\xed\xda\xc8\x95-\xb8\xc7\x1e\x7f\x32I2p\xc7\xed\x9b\xb9\x92y7}\xfa\xf4\xdcr\xdb\x9du\xda~p\xf0\x90\xb4j\xd5\xaa\x99*\x2\xbe$\x18\x2\0\0\0\xa8\xc7\x88_\xdd\x97\x17G\xbd<\xcf\xfd\x37\xdap\xbd\xec\xb5\xe7\xeeMXQ\xcb\xf7\xd1\x7f\x46\xe7\xcc\xb3\x86%I\xce\x39\xeb\xb4\xc5:\x1c\xba\xfc\x8a\xabkC\xb0\xaf[o\xdd\xb5\xb3\xef>{5CE\xdf\xee\xd6\xdb\xeeJ\x92\x1c|\xd0\x1\v}\xec\x8a\x8a\xca\x1cy\xf4\xf1i\xdb\xb6m~\xf1\xf3\xf3\x9b\x64\x8cq\xe3\xc6\xe5\x95W^\x99\xef`\xe8\x95W^\xc9\x9ak\xae\xd1\"\x83\xa1\xfb\x1ex(\xc9\xa2\x15\f\xfd\xe3\x1f\xff\xca\x45\x17_\x9a\xf2\xb2\xb2$\xc9\xcc\x8a\x8al\xb5\xc5\xe6Ye\x95\x95\x9a\xb9\xb2\xafTVV\xe5\xaf/\xbc\x98M6\xde\xb0\xb9K\x81\x85J0\x4\0\0\0P\x8f\x17G\xbd\x9cG\x1f{\"\xfdV\xec\xfb\xad}\xa7L\x99\x92\xfb\xee\x7f\x30\xd3\xa6N\xcf\xf7\xbf?x!T\xd7\xf2|\x19\nM\x9c\xf8\x45\x92\xe4\xcc\xb3\x86-\xd6\xe1\xd0?\xff\xf5Q\xde\x7f\xff\x83\xda\xfbo\xbd\xfdv*+\xab\x92\xa4\xc5\x6\x43\xbf\xff\xe3\x1f\x93,\xfc`\xe8\xcbP\xe8\xf7\x7f\xf8\x63\xee\xb8\xed\xc6\x85:6\vOUUUJJJj\xef\xbf\xff\xe1\xac\xef\x8f\x97^\x9c\xf5u\xb7\xda\x9a\x1b\xe4\xfd\xf?\xa8\x13\f}\xf3\x9c\x85\xa9\xaa\xaa*\xc7\x9fpJ:t\xea \x18\xa2\xe0\b\x86\0\0\0\0\xe6\xa0\xdf\x8a}\xf3\xc8\x43\xf7\xe6\xb3\xcf>\x9b\x63\x9f\xe\x1d:\xa4\xa4\xa4\x34\xc7\x9fpJN\x1fzN\x92\x14\\84v\xec\xf8\x9cy\xd6\xb0\x94\x96\x94\x66\xb9\x65\x97I\x92L\x99\xf2\xdf\x9cy\xd6\xb0\\p\xde\xd0t\xef\xde\xad\x99+l|\x97_z\xd1W\xb7\xaf\xb8:\xaf\xbf\xf1\x66JK\x9b\xe7\r\xee\x96\xee\xe4\x9f\x9d\x91'\x9e|:\xa5\xa5%\xf9\xc9\xe1\xc7\xa4O\xef\xde\xd9z\xeb-2\xe4\x80\xc1\xe9\xd0\xa1\x43s\x97G#\xa8\xae\xae\xce\xa0}\x87\xa4W\xcf\x1e\x39\xec\xb0\x43\x32u\xea\xb4\xfc\xf2\x97\x37\xa5}\x87\xf6\xb5\xcfq\x87\xf6\x1dr\xed\xb5\x37\xa6\xebR]\xd3\xbe}\xbb\\\x7f\xfd\xcd\x19=fl~\xfd\xab;STT\xd4$uUTT\xd6\xbbt\xe1\xacP\xe8gy\xf8\x37\x8f\xe5\x9a\xab.m\x92\xb1\xbfi\xe2\x17_\xa4]\xdbv-\xeeubN\xffG,\xde<\xe3\0\0\0\0s\xf1\xd9g\x9f\x65\xdd\r6\x9f\xe3\xf1\xcb/\xbd(\xbb\xef\xb6K~q\xc9\x85I\x92\xd3\x87\x9e\x93\x36K\xb4.\xa8\x65\xe5:w\xee\x94\xb5\xd6\\#\x83\xf6\xda-7\xdfzG\x92\xe4\xe4\x13\x8f\xc9\xbd\xf7=\x94\xce\x9d;5suM\xeb\xf2+\xae\xce\x65W\\\x93\x63\x8f><#\x9f}\xbe\xb9\xcbiQ>\xf8\xf0\x9fI\x92}\x6\xed\x99'\x9e|*EEE\xf9\xde\x36[\xe5\xad\xb7\xdf\xc9\x65\x97_\x95\x9bn\xbe=\xd7^}Y6\xdeh\x83\x46\x1b\xb3\xa6\xa6&\x15\x15\x15I\x92\xd2\xd2\xd2o\r\x1cjjjRYYY{\xbb\x39M\x99\xf2\xdfTT\xcc\xac\xf7X\xc5\xccY\x8f\xe9\xf3\xcf?\xaf\xf7xYYy\xda\xb5k\xdb\x64\xb5}\x9bG\x1e}<\xa3^z9\xff\xf9\xcf\xd2y\xf8\x37\x8f%IV^y\xa5\f=\xfd\xd4\xda>\xe7\x9c}Zn\xbd\xed\xae\xec\x33xH\x92\xa4\xfb\xd2Kg\xec\xb8qy\xe4\xd1\xc7\xb3\xeb\xce\x3\x1b\xbd\xa6'\x9e|:\xbf\xb8\xf4\x8a\xdcu\xe7-\xe9\xbe\xf4\xd2\xb5\xedUUU9\xe1\xa4\xd3\xf2\xd0#\x8f\xe6\x92\x8b\x87-\xf0\xf2|\xff\xfa\xc6\xec\xc1\xb2\xb2\xd2l\xbe\xf9\xa6If}M\r\x1f\xf1\xeb\\u\xf5u\x19=fLZ\xb5j\x95\xcd\x37\xdf\x34\xe7\x9e}zzt\xef\xbe@\xe3~\x9b\x9a\x9a\x9a\xcc\x9c\x39s\xae{:]w\xc3\xcd\xb9\xe8\xe2K\xb3\xe1\x6\xeb\xe5\xf6\xdbn\xac]\xf6\x8f\xc5\x9f`\b\0\0\0\xa0\x11\x94\x96\x96\xe4\x17\x97\\\x98W_{=\x7f\xfe\xcb\x8b\x5\x11\f\x8d\x19\x33\x36\x9d:uJ\x9b\x36\xads\xd4\x11\x87\xd5\x39\xd6\xbd{\xb7\xda\xb6\x99\x33gf\xc2\x84\x89\x8b\xdd\xcc\xa1\xaf\x87\x42\xc7\x1c}D\x8b\xf\x86\xb6\xd9r\xcb\x85\x36\xd6\xbb\xef\xbc\x97\xbd\a\xf\xc9\xca+\xf5\xcb\x88{n\xcf\xad\x37_\x9f\x83\xe\xf9Q*+*\xf2\xd0\xfd#\xf2\xce\xdb\xef\xe6\xe8\xe3O\xca\x90\x83\xe\xcd\xf0\xbbo\xcbz\xeb\xae\xd3(\xe3VWW\xe7\xae\xbb\xefI\x92\xec\x34p\xc7t\xfd\x96\xfd\x82>\xfd\xf4\xd3<\xfa\xd8\xe3\x8d\x32\xf6\x82\x1az\xf6\xb0\xdcw\xff\x83s\xed\xb3\xe6:\x1b\xd7\xdb\xbe\xd7\x9e\xbb\x37\xd9\xdeM\xdf\x66\xda\xb4i\xb9\xe8\xa2K\xb3\xc1\xfa\xeb\x66\xc4=\xb7\xe7\xb9\xe7~\x9f\xd7^\x7f=\x87\x1f\xfe\xe3:A\xc3\xee\xbb\xed\x92\x9d\x6\xee\x98\xab\xaf\xbd>\xab\x7fw\xd5l\xb5\xd5\xe6\xd9g\xf0\x90\\x\xe1/2`\xdbm\xd2\xbau\xeb\x46\xab\xe9\xf1'\x9e\xca\x11G\x1d\x9f\x9a\x9a\x9a\xec\xb3\xef\x90\x8c\x18~{zt\xef\x9e\xaa\xaa\xaa\x9cx\xf2\xe9y\xf0\xa1Gr\xf1\x45\xc3\x1a\xe5u\xfa\xa9\xa7\x9f\xc9\xb0\v~^{\xbfS\xa7Ny\xf5\xe5?'I.\xbb\xfc\xaa\\u\xcd\xf5\x39p\xc8~\xd9|\xd3M\xf3\xe9\x84\t\xb9\xf6\xda\xeb\x33p\xe7\xbd\x32\xf2\xa9G\xd2\xb9s\xe7\x5\x1e\xbf>3g\xce\xcc\xe0\xfd\xf\xceK/\xbf\x92\x93N<6?\xfd\xf1\xf\xeb\xedw\xdbmw\xa5\xba\xba:\x7f\xfa\xf3_\xf3\x8f\xf\xfe\x91\x95V\xee\xdf$\xf5\xd0\xf2\b\x86\0\0\0\0\xe6\xa2\xa4\xa4$\xbdz\xf5\x9a\xe3\xf1\xb6m\x97\xa8\xbd]ZZ\x92v\xed\xda-\x8c\xb2\x9a\xdd\x97{\n\xad\xf6\xdd\xef\xe4\xb8\x63\xe\x9fk\xdf\xebn\xb8-\xaf\xfc\xed\xd5\xc5j\xcf\xa1o\x86\x42\x8b\x82\x3\xe\xd8w\xa1\x8cSQQ\x99\xa3\x8e;1KuY27\\\x7fU\x8a\x8a\x8a\xb2\xe1\x6\xeb\xe5\xd6\x9b\xaf\xab\xed\xb3\xd2\xca\xfd\xf3\xf0\x3\xbf\xcaN\xbb\xec\x99#\x8e<>\xbf{\xee\xc9\x46\r\x6Xx^xaTF\x8f\x19\x93\xa5\xbbw\xcb\xd8q\xe3\xb2\xcd\x36[f\x9bm\xb6L\x92\xbc\xf2\xca\xab\x19>\xe2\xde$\xc9~\xfb\xed\x9b\x35\xd7X-\xc7\x1e=\xeb\xf5\x62\xf4\x98\x31\xa9\xa8\xac\xcc\x98\xb1\x39\x84\xb5\xb7\0\0 \0IDATc\xf3\xc2\x8b/e\xf3\xcd\x36i\x94z\x1e{\xfc\xc9\x1cy\xf4\t\xd9z\xab-r\xfc\xb1G\xe5\x80\x3\xf\xcd>\x83\x87\x64\xf8\xdd\xb7\xe5\xd2\xcb\xae\xce\xfd\xf<\x94\x8b/\x1a\x96\x41{\xcd\n\x85\x66VT,\xd0L\x99\xc1\xfb\xec\x9d\x1dw\x18P{\xbf\xa8x\xd6,\xb5\x7f\xfe\xeb\xdf\xb9\xfa\xda\x1br\xe6\xe9?\xab\xb3\xaf\xd7\xe\xdb}/\x3v\xdc-\x17\xfd\xfc\xb2\\t\xc1\xb9\xf3=\xee\xdc\xbc\xf5\xf6;\x19\xf5\xd2\xcbI\x92{\x86\xff\xaa\xde`\xe8\x91G\x1f\xcb\xb8\xf1\xe3\x93$\xeb\xae\xb3v\x96\xef\xbb|\x93\xd4\x42\xcb$\x18\x2\0\0\0\x98\x8b\xce\x9d;\xe7O\x7f\x18\xb9\xd0\xc7\xfd\xf8\xe3\x8f\xf3\x87?\xfe\xb9\xde\x63\x9bm\xba\xd1\\\xc3\xaa\xa6\xf6\x65(TZR\x9a\xfd\xf6\xdd\xfb[\xfb\xf\xdak\xb7\xbc\xfe\xfa\x9b\x39\xf3\xac\x61\x8d\x12\xe}\xf2\xc9\xa7\xf9\xdbko\xd4{l\xcd\xd5\xbf\x9b\xae]\x97Z\xa0\xeb\x7f\x9b\x39\x85\x42+\xae\xd8\xb7\xc5\x6_\x95\x95Uy\xe2\xa9\xa7\x32q\xc2\x17\x19 \xbd\xde\xe3\x1d;6\xdf^M[l\xb1Y\xee\xbc\xfd\xa6\x1cs\xdc\xc9\xd9\x61\xc7\xdd\xf3\xeb\x11w\xa6\xffJ\xfd\xf2\xca+\xaf\x66\xcf\x41\xfb\xa7\xaa\xaa*Ir\xff\x83\xf\xe7\x81\xfb\x86g\x8d\xd5W\xcb\xbb\xef\xbc\x97\xbd\xf6\xf9~\xda\xb4i\x9d{\xee\xba\xb5\xd1\x96\x13\xfc\xcd\x63\x8f\xe7\xe8\x63N\xca\xd6[o\x99k\xaf\xbe,\xe5\x65\x65\xf9\xd5\xf0;\xb2\xef~\af\xeb\xef\r\xcc\xf4\xe9\xd3s\xd1\x85\xe7\x65\x9f\xbd\xf7H\x92\xbc\xf1\xe6\xdf\xf3\xf4\xd3#s\xdc\xb1G\xcd\xf7\x98\xed;\xb4O\xfb\xe\xedgk\x1f\x35\xea\xa5\x94\x14\x17g\xff\xfd\xf7\x99\xad\xff\xde{\xed\x96\x87\x1fyl\xbe\xc7\x9c\x9b\xca\xca\xaa\xdcr\xcb\x1d\xb5\xf7?\xfexL\x1ey\xf4\xb1\xec\xb2\xd3W\xcb\xf5=\xf2\xe8\x63\x39\xfa\x98\x93\xb2\xdb\xae;\xe7\xac\xa1?K\x87\xf6\x1d\x9al\x9f'Z&\xc1\x10\0\0\0@\v\xd4\xa3G\x8f\xfc\xed\xd5\xd7\x32|\xc4\xaf\xeb\xb4\xef\x37xP\x6\xfd\xefM\xcd\xe6\xf0\x65(4q\xe2\x17Yn\xd9\x65j\xf7\x14\xfa\xd2\xbb\xef\xcd\xdakc\xd8\x5\x97\xd4io\xd7\xaem\xfe\xf9\xaf\x7f\x37J8\xd4\xa5K\xe7\xbc\xff\xde\ayz\xe4su\xda\xb7\xdbv\xebl\xb3\xd5\x9c\xf7\x83j\fs\x9b)t\xf9\xa5\x17\x35\xe9\xd8\xf3\xe2\xd6\xdb\xee\xca\xef\xff\xf8\xc7\xda\xfb\xdbl\xb9\x65\xe\x38`\xdf\f\x1f~oN\x1fzN\x92\xa4S\xe7\x8e\xd9y\xe0\x8e\xb9\xeb\xae\x11y\xf6\xf9\xe7k\xfbn\xbe\xe9\xa6uf6\xcc\xaf\xa7\x9e\xfem\xfa\xf7\xeb\x9b\xb5\xd7Z\xf3[\xfb\xae\xbe\xdaw\xb3\xec\xb2}\xf2\x87?\xfe\xa9\xe0\x83\xa1^={\xa6W\xcf\xfa\xbf/\xdaw\x98\x35\x13\xf1;\xab\xac\xbc\x30K\x9ag\x9bo\xb6I.\xbb\xe4\x82\f9\xf8\xb0TT\xcd\xda\xb3\xe9\xee\xe1#jC\xa1\x64V`q\xcf\xf0{\xb3\xc6\xea\xab\x65\x46\xc5\xcc|1\xe9\x8b\\s\xf5\xa5\x8d\x1e\nm\xb3\xf5V\xb9\xe6\xeaKkg\x1\xad\xd8w\xf9\x8c\xb8\xe7\xf6\xec\xb7\xff\x41\x39{\xe8i\xd9w\xd0\x9e\xb5\xe7\x9c\xf2\xb3\x33\xb3\xd6\xdak4\xca\xf8\xdf\x34}\xda\x8c\x94\x95\x97\xa5\xb4\x64\xf6\x10\xb6\xbcU\xabL\x9e\xf2\xdf\x46\x1f\xb3\xaa\xaa*\xc7\x9fpJ\x1ey\xf4\xf1\\y\xc5%\xd9z\xcb-r\xe6Y\xe7\xe5\xe8\x63NJ\x92\xec\xb2\xd3\xc0\xdaPh\xd7]v\xca%\x17\xfKI=\xf5\xb1\xf8\x13\f\x1\0\0\0\x34\xc0\x8c\x19\x33\xf2\xd0\xff>\xe9\xbd\xdb.\x3\xe7\xba\xb1\xf7\x82(..\xce\xf9\xe7\x9d\x95\xa2\xa2\xa2\xdc\x33|\xd6RL\xfb\xef\x37(\xe7\x9d\x33\x34\xc5\xc5\xc5M2\xe6\xa2\xa2\xb8\xb8\x38?:\xec\xe0\xa4\xa8(O?\xf3\xdb$\xc9\x80\xed\xb6\xce\x61\x87\x1e\xd4\xa4\xff\x37\x8b\xe2\xf2q_\xea\xd4\xf9\xab\x99;\x13'|\xd1\xa4\x63}\xf4\xd1G\xe9\xdb\xb7\xef<\xcf@Xy\xa5\x95\x33z\xcc\x98&\xad\x89\x96\xa9\xa6\xba\xbaQ\xae\xf3\xf4\x33#s\xd4\xd1'f\xdb\xefm\x93k\xae\xba\x34\x65\x65u\xdf\xf6^\xb1\xef\xf2\xf9\xed\xc8\xc7\xd3\xae]\xdb:\xed\x95\xff\v\xb1\x16\xc4=\xc3\xef\xcd\xd5\xd7\xdeP{\xbf\x63\x87\xf6y\xe2\xb1\a\xb3\xda\xea\xab\xe6\xbf\xff\x9d\x9a\xdf\xfd\xee\xf\xd9j\xab-\xbe\x1a\xb3\xb2*O>\xf9\xcc<\x5\xa7\r1+\x14\xfaY\x1ey\xf4\xf1\\q\xf9\xc5\xb5\x33\x84.\xb9xX\x92\xe4\xe8\x63N\xca\x5\x17\xfc\"c\xc7\x8d\xcb\xae;\xf\xcc/~~\xbeP\xa8\x80\t\x86\0\0\0\0\x1a\xe0\xfb\a\x1e\x9a\xbf\xbe\x30*I\xf2\xc0\x3\xf\x65\xc4=\xb7\x37\xd9\x12<\xc5\xc5\xc5\x19v\xee\xd0\x14\x15%)*\xcayg\x9f\xd9\xec\xa1P\x9f\xde=s\xceY\xa7\xe5\xcc\xb3\x86\x65\xca\x94\xff\xe6\xe4\x13\x8fI\xf7\xee\xddj\x8f\x7f\x39S\xe8\xb4\x9f\x9dP\xdb\x36v\xec\xf8\x9c\x31tX:u\xea\xd8h\xfb\f\x15\x17\x17\xe7G? \xdf\xe1\xd0?>\xfcgF\xbd\xf4r\x92\xa4[\xd7\xae\xf5\x86\x42\xc9\xac\x90j\xf8\xdd\xb7\xe6\xbd\xf7?H\xbf\x15\xe7}\x99G\x16_\x82!\0\0\0\x80y\xd4\xaaU\xab\xdcr\xf3/s\xc9/\xaeHQQQN8\xfe\xe8&\xdb\x63hQ\xf0\x65\xd0\xf3\xe9g\x9f\xe5\xaa\xabo\xc8\xe1?9\xb4\xf6\xd8\xb8q\xe3s\xedu7\xe7\xc8#\xe\xcbR]\xba\x34I(\xd4\xd4\x16\xa7P(I\x9e}\xfe\xf9$M\x1f\f\xad\xbd\xd6\x9a\x19\xbc\xef\xde\xb9\xf0\x92K\xb3\xe6Z\xab\xe7\xbb\xab~\xa7\xde~o\xfe\xfd\xad\\p\xc1\xcf\xb3\xe7\x1e\xbb\x65\xa3\x5\f\x6\xbeT\\\\\x9c\xfd\x6\xcfz|\xa5\xf3\xb0<\xddRK-\x95\x3\xf6\xdf/Ir\xcf\xf0\x11\x8dR\xc3\x82\xea\xd1\xa3{\xfe\xf6\xd2\x9f\xea\xb4\x1dy\xf4\xac\xa5\x19\xaf\xba\xe2\x92:\xed\x1d:tXhu\xcdI\xeb\xd6\xads\xf2\xc9\xc7\xe5\xa8\xa3O\xc8\x46\x9bl\x9d\xb1\xe3\xc6%I\x1e{\xfc\xc9\x1cv\xd8\xa1\xd9w\xd0\x9eI\x92\x11\xbf\xba/7\xdcxs>\xf8\xf0\x9fI\x92\xeeK/\x9d\xb1\xe3\xc6\xe5\xaa+/i\x94\xd7\xd1\x7f\xfd\xeb\xa3,\xbbl\x9f\x5\xbeNC\xbd\xfa\xda\xeb\xf9\xeb__\x9c\xe3\xf1\xd6\xadZg\xc8\x90\xfd\xd2\xab\xd7W3\xbb\xca\xcb\xcar\xe7\xed\x37\xd5\x86\x43\xf7\x8e\xb8\x33}WX\xae\xc1\x63\xaf\xd0w\x85l\xb2\xf1\x46\xf9\xf3_\xfe\x9a\x83\xeaYB\xf2\xeb\xca\xcb\xcb\xb3\xeawVi\xf0\x18,\x9e\x4\x43\0\0\0\0\r\xb0\xce\xdake\xf8\xdd\xb7\x35w\x19-\xca\xf4\xe9\x33\xf3\xef\x8f\xfe\x93\xd3\xce\x38\xafv\x89\xa2\xd3\xcf\x1c\x96\xca\xaa\xcaL\x9f>\xb3\x99\xab\x9b?o\xbd\xfdv^\x7f\xe3\xcd\xc5&\x14Z\xd8N=\xe5\x84\xbc\xf9\xe6[\xd9}\xcf\xc1\x39\xf1\x84\x63\xb2\xeb.\x3\xb3t\xb7Y\xe1\xe0\xb8\xf1\xe3\xf3\xe8\x63O\xe6\xa2\x8b/M\xdf\x15\x96\xcf\x19\xa7\x9d\xd4h\xe3\x16\x15\x15\xa5\xac\x1{\xee|\xbd\x7fK\x99\x45QRR\x92%\x97\\\xb2N[Y\xf9\xac\x1a\xbf\xd9\xdeR\xec\xb2\xd3\x8e\xb9\xf3\xce\xe1\xe9\xdd\xabg\xe;\xec\x90L\x9a\x34\x39\x43\xcf\x1e\x96\xf3\xce\xbf\xa8\x36\x18\x1av\xfe\xcf\xd3\xb3W\x8f\f\xbf\xfb\xb6t\xec\xd8!7\xdcpKF\x8f\x19\x93\x9d\a\xee\xb8\xc0\xe3\xff\xf5\x85Q\xb9\xe8\xe2K\xf3\xc0}\xf7,\xf0\xb5\x1a\xea\xa5\x97\xfe\x96\xcb\xae\xb8z\x8e\xc7\x97\xec\xb4\x64\x86\f\xd9o\xb6\xf6\xe\x1d:\xe4\xce\xdbo\xca\xb0\xf3/N\x97.\xf3\xf7\xbc\x96\x95\x95\xe6\x9e\xbbnIEEe\xca\xca\xbc\xd5\xcf\xbc\xf3\xd5\x2\0\0\0\x30\a\xef\xbd\xff\x41v\xda\x65\xaf\x6\x9f\xb3\xd2J\xfd\x9b\xa8\xa2\x96\xa9w\xaf\x1e\xb5{\xe\xfd\xf3_\xffN\x92t\xea\xd4\x31\xe7\x9cuZz\xf7j\xba\xfd\x97\x9aReeUJKK2\xf2\xd9\xe7\x33\xf2\xd9\xe7\x93\xcc\xda;\xe7\xf2K/j\xde\xc2\x16\x11\x1d:t\xc8\xfd\xbf\xbe;\xc3.\xf8y\x86\x9d\x7fq\x86\x9d\x7fq.\xbf\xec\xe2\xb4n\xd5*?\xfe\xe9\xd1I\x92\xfd\xf7\x1b\x94\xa1g\x9cZ\xd0\xb3\xee\x16\x17\x45\x45\x45\xf9\xd5\xf0\xdb\xeb\xec)u\xf8O\x7f\x98#\x8f:!\x93&MJ\x92L\x9a<)\xe7\x1f>4\x1bo\xb4\x41\x92\xe4\x8a\xcb\x7f\x9e\xaa\xaa\xaa\x46\t\xe4\x1e}\xfc\x89L\x9d\x36u\x81\xaf\x33?\xe\x39\xf8\xfb\x39\xe4\xe0\xef\xcf\xd7\xb9\x1d:t\xc8\x45\x17\x9e\xb7\xc0\x35\b\x85h(_1\0\0\0\0\xf5Xo\xdd\xb5\xe7\xeb\xbc\x95V\xea?\xdf\xe7.\xca\xfa\xf4\xeeY\x1b\xe%\xc9\x39g\x9d\x96>\xbd{6sU\xf3gN\xcf\xdf\xa2\xfax\xbe\xb4\xf9\xa6\x9b~{\xa7\x46T^^\x9e\xb3\x87\x9e\x96\x43\xe\x1a\x92\x91\xbf}.\xcb-\xb3LJJKr\xfai'g\x9b\xad\xb7\xcc\n\xcb/\xb7P\xeb\xa1i}=\x14J\x92\x15\xfb\xf6M\x92\xac\xb3\xdeW_w+\xae\xd0w\xae\xe7\xcc\xaf\r\xd6[7\xdd\x97^:I\xd2\xa1}\xbb\f\x19\xb2_\xbaw\xef\x9e$\xd9\x66\xcb-k\xfbu\xef\xbet\x86\f\xd9/\x1d\xda\xb7K\x92\xec\xbc\xd3\x8eYv\x99\x85\xbf\xfc\x1c\x34\xb7\xa2w>\x18]\xd3\xa7g\xd7$\xc9G\xa3?I\xff\x15\x16\xcdOq\0\xb3\x9b\x36\xbd\x32\xc9\xac\xef\xed/\xbf\xcf\xe7\xe4\xeb}\xbc\x16\0\0\0\x8b\x82w?\x1cS\xe7\xef\x98\x86\xfc\xdd\xd3R4WM\x1f\x8d\xfe$I\xe6:\xf6\xcb/\xbf\x34\x7f\xd7\xfe\xcf\xe8Y\xd7^\xc0\x10\xa5k\xf7\x65\xf2\xc9\xd8\x7f/\xd0\x35\xe6\x64\xed\xb5\xd7i\x92\xeb\x36\x86yyn\xa8\xdf\xa7\x9f~\x9aq\xe3\xc7g\xd5\xef\xd4\xbf\xa7\xd1\xb7y\xf3\xef\x7fO\xb7n\xdd\xd2u\xa9\xa5\xe6\xeb\xfc\xa6|\xee\x9e|\xea\x99$\xc9\xf6\x3\xb6m\xf4k'MS\xfb\x8c\x19\x33r\xfb\x1dw\xd7i;p\xc8\xfe\x66\x88\x41\x33\xfbh\xf4'f\f\x1\0\0\0\xd0x\x16\xf5Y5,\xba\x96Zj\xa9,5\x9f\xa1N\x92\xf9\xe\x94\x16\x86\xa6\n\x84\x9aR\xabV\xadr\xd8\xf\xfi\xee\x32\x80z\x14\x37w\x1\0\0\0\0\0\0,\x1c\x82!\0\0\0\0\0\x80\x2!\x18\x2\0\0\0`6e\xa5\x65\xcd]B\x93(+[<\x1f\x17\0\xcc+\xc1\x10\0\0\0\0\xb3i\xd7\xbe}s\x97\xd0$\xda\xb5[<\x1f\x17\0\xcc\xab\xd2\xe6.\0\0\0\0\xa0P\xf5\xe9\xd9\xb5\xc5\x8e\xdb\xabW\xafL\x9a\x34)UU\x95\v\xa1\xa2\xd9}2\xf6\xdf\x8d~\xcd\x92\x92\xd2\xf4\xea\xd5\xab\xd1\xaf\xdb\x98\x9a\xebk\x82\x5\xb7(?w\x8br\xed@\xc3\x99\x31\x4\0\0\0\xc0l\xca\xcb\xcb\xb3\xca*\xab\x64\xc9%;/\xf2\xcb\xaf\x95\x95\x95\x65\xc9%;g\x95UVIyyys\x97\x3\0\xcd\xca\x8c!\0\0\0\0\xeaU^^\x9e\xe5\x97_\xbe\xb9\xcb\0\0\x1a\x91\x19\x43\0\0\0\0\0\0\x5\xc2\x8c!\0\0\0\x80$55Ieue\xaa*\xabRU]\x99\x9a\x9a\xa4\xa6\xa6\xa6\xb9\xcb\x2\0\x98\xa3\xa2\xa2\xa2\x14\x15%%\xc5\xa5))-Iiqi\x8a\x8a\xe6~\x8e`\b\0\0\0(x\x95U\x95\x99\x31\x63\x46\xaa\x5\x41\0\xc0\"\xa4\xa6\xa6&55IuuE**+R\\T\x94V\xadZ\xa5\xb4\x64\xce\xf1\x8f\xa5\xe4\0\0\0\x80\x82\x36\x63\xc6\x8cL\x9b>](\x4\0,\xf2\xaakj2m\xfa\xf4\xcc\x98\x31\x63\x8e}\x4\x43\0\0\0@\xc1\x9a\x31\x63\x46\x66VV4w\x19\0\0\x8djfe\xc5\x1c\xc3!\xc1\x10\0\0\0P\x90*\xab*\x85\x42\0\xc0\x62kfeE*\xab*gk\x17\f\x1\0\0\0\x5\xa7\xa6&s]b\x5\0`q0c\xc6\x8c|s\xb1\\\xc1\x10\0\0\0Pp*\xab+\xed)\x4\0,\xf6\xaakjf\x9b\x35$\x18\x2\0\0\0\nNUeUs\x97\0\0\xb0P|\xf3\xf7\x1e\xc1\x10\0\0\0Pp\xaa\xaag_o\x1f\0`q\xf4\xcd\xdf{\x4\x43\0\0\0@\xc1\xb1\x8a\x1c\0P(\xbe\xf9{\x8f`\b\0\0\0(85\x92!\0\xa0@|\xf3\xf7\x1e\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\xc0|\x9a }z\xee\xb9\xeb\xce\x8c\x1c\xf9t\xda\xb7\xef\x90\x81;\xed\x9c\x9dw\xd9\x35\x45\x45\x45s<\xe7\xd5W\xff\x96\xbb\xee\xb8=/\xbf\x34*+\xf4\xed\x9b=\xf6\xdc;\x3\xb6\xdf!\xc5\xc5>\xb7\v\0,<\x82!\0\0\0\x80\x6\xa8\xac\xac\xcc\xcfN>1S\xa6L\xce\xa1?\xfcQ&L\x98\x90s\xcf\x1e\x9a\xcf?\xff<\a\x1etp\xbd\xe7\xbc\xf9\xc6\x1b\xd9o\x9f\xbds\xccq'd\xb7\xdd\xf7\xc8;o\xbf\x9d\xd3O=%3f\xcc\xc8n\xbb\xefQ\xef\x39\xf6\x18\x2\0\x9a\x82`\b\0\0\0\xa0\x1^x\xe1\xaf\xf9\xe3\x1f~\x9f\xa7\x46>\x97\xce\x9d;'I:v\xec\x98SN:!;\xed\xbcK\xbat\xe9\x32\xdb\x39\xbf\xfd\xed\xc8l\xbc\xc9&\xf9\xe1\x61?J\x92l\xb2\xe9\x66\xa9\xa8\xac\xc8SO>1\xc7`H\x18\x4\0\x34\x5s\x95\x1\0\0\0\x1a\xe0\xc9'\x1e\xcf\xae\xbb\xed^\x1b\n%\xc9\xc6\x9bl\x9a\xaa\xaa\xea\x8cz\xf1\x85z\xcfi\xdb\xb6]\xc6\x8c\x19\x93i\xd3\xa6\xd5\xb6}\xf6\xe9\xa7Y\xb1_\xbf&\xaf\x17\0\xe0\xeb\x4\x43\0\0\0\0\r\xf0\xde;\xef\x64\x99\x65\x97\xab\xd3\xd6\xb6m\xdb\xf4_\xa9\x7f\xc6\x8e\x19S\xef\x39\xbb\xec\xbak\xda\xb4n\x93\xe3\x8e\x39*\xf=\xf8@.\xbc`X\xc6\x8e\x1d\x97\x3\xf:d!T\f\0\xf0\x15K\xc9\x1\0\0\0\xcc\xa3\x9a\x9a\x9a\xbc\xf5\xd6[\xd9k\xd0\xa0\xd9\x8eu\xed\xda-\x13>\x9fP\xefyK-\xd5\x35G\x1ds\\~|\xd8\xf\xf2\xfb\xdf=\x9f$\xb9\xeb\x9e\x11Yj\xa9\xa5\xe6\x38\xd6\xaa+\xd7?\x9b\xe8\xcd\xb7\xdfkx\xe1\0\0\xff#\x18\x2\0\0\0\x98GEEEY\xa1\xef\n\x99 \xff|B\xbav\xedZ\xefy\x8f<\xfcP\xae\xff\xe5\xb5\xb9\xe1\xa6[\xf2\xdd\xd5V\xcf_\xfe\xfc\xa7\x1cs\xd4\x91\xd9}\x8f=s\xf4\xb1\xc7\xa5\xa8\xa8h\xb6s\x4@\0@S\x10\f\x1\0\0\0\x34@\xff\xfe+\xe5\xc3\xf?\xac\xd3\x36\x63\xc6\x8c|\xf0\xfe\a\xe9\xde\xbd\xc7l\xfd+++s\xc1\xb0\xf3r\xea\xe9gd\x93M7K\x92\f\xd8~\x87\xb4o\xdf>?\xfc\xc1\xc1\xd9\x65\xd7\xdd\xb2\x42\xdf\xbe\v\xa5v\0\0{\f\x1\0\0\0\x34\xc0\xb6\xdb\r\xc8#\xf=\x94O\xc6\x8f\xafm{i\xd4\x8bI\x92\xf5\xd6\xdf\xa0\xb6m\xea\xd4\xa9If\x5\x43\xd3\xa6M\xcb\x94)S\xea\\\xa7[\xb7\xa5\x93$\x15\x95\x15M]2\0@-3\x86\0\0\0\0\x1a`\xb3\xcd\x36\xcf:\xeb\xae\x9b\x13O8.\a\x1etp\xa6N\x9d\x9a\x8b/\xbc \xc7\x9fxR:v\xec\x98$y\xe2\xf1\xc7r\xf2\x89\xc7\xe7\xee\xe1\xf7\x66\xb5\xd5W\xcfO\xe?<\x97\\|a***\xd2\xbf\x7f\xffL\x9b\x36=\xc3\xef\xb9+\xdb|o\xbb\xf4\xed\xbb\x62\xbd\xe3<\xf5\xe4\x13\xb5\xb7\al\xbf\xc3\x42yl\0\xc0\xe2O0\x4\0\0\0\xd0\0\xe5\xadZ\xe5\x8a+\xaf\xcem\xb7\xdd\x92\xab\xae\xbc<=z\xf4\xcc\xa9\xa7\x9fQ'\xbcYj\xa9\xaeYm\xf5\x35\xd2\xa1\x43\x87$\xc9\xf\xe=,\xcb-\xb7|\x1e~\xe8\xc1\xdc|\xe3\rY~\x85\x15\xf2\xbdm\xb7\xcbn\xbb\xef\x91\xd2\xd2\xfa\xdf\x9e\x11\x6\x1\0MA0\x4\0\0\0\xd0@\xed\xda\xb7\xcf\x11G\x1e\x9d#\x8e<\xba\xde\xe3\xeb\xad\xbf~\xee\x1e\xfe\xab\xda\xfb\xa5\xa5\xa5\x19\xb0\xfd\xe\xc2\x1e\0\xa0\xd9\xd9\x63\b\0\0\0\0\0\xa0@\x98\x31\x4\0\0\0\xd0\x2\xd9\x63\b\0h\n\x82!\0\0\0\x80\x16H\x18\x4\0\x34\x5K\xc9\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\xb0\x94\x1c\0\0\0@\vd\x8f!\0\xa0)\b\x86\0\0\0\0Z a\x10\0\xd0\x14,%\a\0\0\0\0\0P \x4\x43\0\0\0\0\0\0\x5\xc2Rr\0\0\0\0-\x90=\x86\0\x80\xa6 \x18\x2\0\0\0h\x81\x84\x41\0@S\xb0\x94\x1c\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\bK\xc9\x1\0\0\0\xb4@\xd7^}U\x9d\xfb?=\xe2\xc8\x66\xaa\x4\0X\x9c\b\x86\0\0\0\0Z A\x10\0\xd0\x14,%\a\0\0\0\0\0P \x4\x43\0\0\0\0\0\0\x5\xc2Rr\0\0\0\0-\xd0SO>Q{{\xc0\xf6;4c%\0\xc0\xe2\x44\x30\x4\0\0\0\xd0\x2\t\x83\0\x80\xa6`)9\0\0\0\0\0\x80\x2\x61\xc6\x10\0\0\0@\vd)9\0\xa0)\b\x86\0\0\0\0Z a\x10\0\xd0\x14,%\a\0\0\0\0\0P \x4\x43\0\0\0\0\0\0\x5\xc2Rr\0\0\0\0-\x90=\x86\0\x80\xa6 \x18\x2\0\0\0h\x81\x84\x41\0@S\xb0\x94\x1c\0\0\0\0\0@\x81\x10\f\x1\0\0\0\0\0\x14\bK\xc9\x1\0\0\0\x34\xd0\xf4\xe9\xd3s\xcf]wf\xe4\xc8\xa7\xd3\xbe}\x87\f\xdci\xe7\xec\xbc\xcb\xae)**\x9a\xeby\xbf{\xfe\xf9\x8c\x1c\xf9t\xfe\xfa\xe7?\xa7g\xaf^\xf9\xde\xb6\xdb\x65\xcf\xbd\xf6N\x9b\x36mf\xebk\x8f!\0\xa0)\b\x86\0\0\0\0\x1a\xa0\xb2\xb2\x32?;\xf9\xc4L\x99\x32\x39\x87\xfe\xf0G\x99\x30\x61\x42\xce={h>\xff\xfc\xf3\x1cx\xd0\xc1s<\xef\x97\xd7^\x93\xfb\xee\x1d\x91\x43\xf\xfbQ\xb6\xddv\xbbL\x9e<9/\xbf\xf4R\xca\xcb\xcb\xeb\xed/\f\x2\0\x9a\x82`\b\0\0\0\xa0\x1^x\xe1\xaf\xf9\xe3\x1f~\x9f\xa7\x46>\x97\xce\x9d;'I:v\xec\x98SN:!;\xed\xbcK\xbat\xe9\x32\xdb\x39o\xfd\xfd\xef\xb9\xfe\x97\xd7\xe6\xb1'\x9fJ\xaf^\xbdk\xdb\a\xee\xb4\xf3\x42\xab\x1b\0 \xb1\xc7\x10\0\0\0@\x83<\xf9\xc4\xe3\xd9u\xb7\xddkC\xa1$\xd9x\x93MSUU\x9dQ/\xbeP\xef\x39\xf>x\x7f\x6\xef\xbf\x7f\x9dP\b\0\xa0\x39\x98\x31\x4\0\0\0\xd0\0\xef\xbd\xf3Nv\x18\xb8S\x9d\xb6\xb6m\xdb\xa6\xffJ\xfd\x33v\xcc\x98z\xcf\xf9\xfb\x9bof\xa7\x9dw\xc9\xa3\xbfy$\xf7\x8e\x18\x9e\t\x9fO\xc8\xe;\f\xcc\x90\x83\xeN\xfb\xf6\xed\xeb=g\xd5\x95\xfb\xd5\xdb\xfe\xe6\xdb\xef-\xd8\x3\0\0\n\x9a`\b\0\0\0`\x1e\xd5\xd4\xd4\xe4\xad\xb7\xde\xca^\x83\x6\xcdv\xack\xd7n\x99\xf0\xf9\x84\xd9\xda\xab\xab\xab\xf3\xda\xab\x7f\xcb+/\xbf\x94\xbd\a\xed\x9b\x1f\xfc\xf0\xb0TWW\xe7\xba_^\x9b\x8f>\xfaw.\xb8\xe8\xe7)**\x9a\xed<\x1\x10\0\xd0\x14\x4\x43\0\0\0\0\xf3\xa8\xa8\xa8(+\xf4]!\x93'O\x9e\xed\xd8\xe7\x9fOH\xd7\xae]gk/..N\xc7N\x9d\x32\xe1\xb3\xcf\x32\xf4\xecsjC\xa0\xae\xdd\xba\x65\x9f\xbd\xf6\xc8\x11G\x1e\x9d\xde}\xfa\x34y\xed\0\0\x89`\b\0\0\0\xa0\x41\xfa\xf7_)\x1f~\xf8\x61\x9d\xb6\x19\x33\x66\xe4\x83\xf7?H\xf7\xee=\xea=g\xcd\x35\xd7J\xe7\xce]\xea\xcc\fZz\xe9\xeeI\x92\x89\x13'\n\x86\0\x80\x85\xa6\xb8\xb9\v\0\0\0\0X\x94l\xbb\xdd\x80<\xf2\xd0\x43\xf9\x64\xfc\xf8\xda\xb6\x97\x46\xbd\x98$Yo\xfd\r\x92\xccZ>n\xda\xb4i\xb5\xc7\xb7\x1b\xb0}\x9e\x7f\xee\xb7uf\x1a\xbd\xfd\xd6[I\x92\x1e={\xd6;\xceSO>Q\xfb\xf\0\xa0\xb1\x98\x31\x4\0\0\0\xd0\0\x9bm\xb6y\xd6Yw\xdd\x9cx\xc2q9\xf0\xa0\x83\x33u\xea\xd4\\|\xe1\x5\x39\xfe\xc4\x93\xd2\xb1\x63\xc7$\xc9\x85\xe7\x9f\x97gG>\x93\a\x1fy,\x1d:t\xc8\xd6\xdb|/w\xddyGN<\xfe\xd8\xec=h\x9f$\xc9\xf5\xd7]\x9b\x63\x8e;!]\xbat\xa9w\x9c\x1\xdb\xef\xb0\xd0\x1e\x13\0P8\x4\x43\0\0\0\0\rP\xde\xaaU\xae\xb8\xf2\xea\xdcv\xdb-\xb9\xea\xca\xcb\xd3\xa3G\xcf\x9cz\xfa\x19u\x82\x9c\x65\x96].+\xaf\xf2\x9d\x94\x97\x97'I\xda\xb6m\x9b\xebn\xb8)\xb7\xdc|c\xae\xb8\xec\xd2t\xed\xd6-\a|\xff\xc0\f\xdci\xe7\xe6z\x18\0@\x81*z\xe7\x83\xd1\x35}z\xce\xda\x18\xf1\xa3\xd1\x9f\xa4\xff\n\xf5\xaf\x85\v,z\xa6M\xafL2\xeb{\xfb\xcb\xef\xf3\x39\xf9z\x1f\xaf\x5\0\0\xc0\xa2\xe0\xdd\xf\xc7\xd4\xf9;\xa6!\x7f\xf7L\xfe\xef\x94&\xafoA\xac\xbar\xbf\xbc\xf9\xf6{\xcd]\x6\0\xb0\x98h\xdf\xb6]\x92Y\xbf\xf\x99\x31\x4\0\0\0\xd0\x2}}o!\xcb\xca\x1\0\x8d\x45\x30\x4\0\0\0\xd0\x2\t\x83\0\x80\xa6P\xdc\xdc\x5\0\0\0\0\0\0\xb0p\b\x86\0\0\0\0\0\0\n\x84\xa5\xe4\0\0\0\0Z {\f\x1\0MA0\x4\0\0\0\xd0\x2\t\x83\0\x80\xa6`)9\0\0\0\0\0\x80\x2!\x18\x2\0\0\0\0\0(\x10\x96\x92\x3\0\0\0h\x81\xec\x31\x4\0\x34\x5\xc1\x10\0\0\0@\v$\f\x2\0\x9a\x82\xa5\xe4\0\0\0\0\0\0\n\x84`\b\0\0\0\0\0\xa0@XJ\xe\0\0\0\xa0\x5\xba\xf6\xea\xab\xea\xdc\xff\xe9\x11G6S%\0\xc0\xe2\x44\x30\x4\0\0\0\xd0\x2\t\x82\0\x80\xa6`)9\0\0\0\0\0\x80\x2!\x18\x2\0\0\0\0\0(\x10\x96\x92\x3\0\0\0h\x81\x9ez\xf2\x89\xda\xdb\x3\xb6\xdf\xa1\x19+\x1\0\x16'\x82!\0\0\0\x80\x16H\x18\x4\0\x34\x5K\xc9\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0@\x81\xb0\x94\x1c\0\0\0@\vd\x8f!\0\xa0)\b\x86\0\0\0\0Z a\x10\0\xd0\x14,%\a\0\0\0\0\0P \x4\x43\0\0\0\0\0\0\x5\xc2Rr\0\0\0\0-\x90=\x86\0\x80\xa6 \x18\x2\0\0\0h\x81\x84\x41\0@S\xb0\x94\x1c\0\0\0\0\0@\x81\x30\x63\b\0\0\0\xa0\x81\xc6\x8d\x1b\x9b\xdbo\xbd\x35\x7f\xfc\xc3\xef\xf3\x9dUW\xcd\xa0}\x6g\xedu\xd6\x99\xa7s+++s\xf4\x91\x87\xa7\xba\xba:\xbf\xbc\xfe\xc6&\xae\x14\0\xa0.3\x86\0\0\0\0\x1a`\xfc\xf8\xf1\xf9\xc1\xc1\af\xfa\xf4\xe9\x39\xe1\xa4\x93\xd3\xabw\xef\x1c\x34\x64\xff\xbc\x34\xea\xc5y:\xff\xde_\x8d\xc8\xf3\xcf\xfd\xf6[\xfb=\xf5\xe4\x13\xb5\xff\0\0\x1a\x8b\x19\x43\0\0\0\0\r\xf0\xe0\x3\xf7\x65\x99\x65\x96\xcdig\x9c\x99\x92\x92\x92l\xbe\xc5\x96\x99\x31}F\xae\xbd\xe6\xea\xdct\xcbm)**\x9a\xe3\xb9o\xbf\xf5V\xae\xb9\xfa\xca\xec\xb2\xebn\x99\x38q\xe2\\\xc7\xb1\xc7\x10\0\xd0\x14\xcc\x18\x2\0\0\0\x98G\x95\x95\x95\xb9\xe5\xa6\x9b\xb2\xd3\xce\xbb\xa4\xa4\xa4\xa4\xb6}\xbb\x1\xdb\xe7/\x7f\xfeS\xfe\xfd\xaf\x7f\xcd\xf1\xdc\xff\xfe\xf7\xbf\x19z\xe6\xe9\x39s\xe8\xd9Yy\xe5U\x16\x46\xb9\0\0\xb3\x11\f\x1\0\0\0\xcc\xa3\x89\x13?\xcf\x94)\x93\xd3\xbd{\x8f:\xed=z\xcc\xba\xff\xe9\xa7\x9f\xcc\xf1\xdc\x1b\xae\xff\x65\xfa\xf5\xef\x9f\xed\x6l\xdf\xa4\x35\x2\0\xcc\x8d\xa5\xe4\0\0\0\0\xe6\xd1\x97\xcb\xbf\xb5i\xd3\xa6N\xfb\x12m\x97H\x92L\x9a\x34\xa9\xde\xf3\xfe\xf4\xa7\xff\xcb\xa3\x8f<\x9c{\xef\x7fp\xaeK\xcd}\xdd\xaa+\xf7\xab\xb7\xfd\xcd\xb7\xdf\x9b\xd7r\x1\0\x66#\x18\x2\0\0\0\x98G\xed\xdb\xb7O\x92\xfcw\xea\x7f\xeb\xb4O\x9b\x36=I\xd2i\xc9%g;\xe7\xb3\xcf>\xcd\x99\xa7\x9f\x9as\xce;?]\xba,\x95$\xa9I\xcd\xb7\x8e%\0\x2\0\x9a\x82`\b\0\0\0`\x1e-\xb9\x64\xe7\x94\x94\x94\x64\xf4\xc7\x1f'\xeb\xaeW\xdb\xfe\xc9'\xe3\x93$]\x97\xea:\xdb\x39\x37\xdfxc\xc6\x8c\x1e\x9d\xc3\xe=d\xb6\x63\xab\xae\xdc/\xdf?\xf0\xa0\x9c\xf2\xb3\xd3\x9a\xaeh\0\x80\xaf\x11\f\x1\0\0\0\xcc\xa3\xf2\xf2\xf2\x1cx\xf0!\xf9\xcd#\xf\x65\x87\x1d\a\xa6\xac\xac,I\xf2\xbb\xe7\x9f\xcb\x96[m\x9d^\xbd{'If\xcc\x98\x91\xd2\xd2\xd2\x94\x94\x94\x64\xef\x41\xfb\x64\xa7\x9dw\xaes\x9d\xb3\x86\x9e\x91\x37\xdfx#\xbf\xbe\xff\xc1\xb4\xfb\xdf,$\0\x80\x85\x41\x30\x4\0\xd3\xe9\xc3<\0\0\x15\xb8IDAT\0\0\xd0\0\x83\xf6\xd9\x37\x43\xf6\xdf/\xe7\x9dsv\xb6\x1b\x30 \xef\xbe\xfbnn\xbc\xfe\xba\xdcz\xc7])**\xca\xf4\xe9\xd3\xb3\xcf\xde{\xa4_\xbf\xfe\xb9\xe4\xd2\xcb\xb3\xfc\n+\xccv\x8d\x1dv\xdc)]\xba,\x95\xef\xac\xfa\xdd\x39\x8e\xf3\xd4\x93O\xd4\xde\x1e\xb0\xfd\xeM\xf2X\0\x80\xc2#\x18\x2\0\0\0h\x80>}\x96\xc9mw\xde\x9d;n\xbb\x35\xe7\x9d{v\xd6^g\xdd\xdcq\xd7\xf0\xac\xfa\xddY!OYYYVZi\xe5,\xbf\x42\xdf\x5\x1aG\x18\x4\0\x34\x5\xc1\x10\0\0\0@\x3-\xbb\xec\xb2\x39\x63\xe8Y\xf5\x1e+))\xc9\xc5\x97\\:\xd7\xf3\xf>\xe4\a9\xf8\x90\x1f\x34\x41\x65\0\0sW\xdc\xdc\x5\0\0\0\0\0\0\xb0p\x98\x31\x4\0\0\0\xd0\x2\xd9\x63\b\0h\n\x82!\0\0\0\x80\x16H\x18\x4\0\x34\x5K\xc9\x1\0\0\0\0\0\x14\b\xc1\x10\0\0\0\0\0\xff\xdf\xde\x9d\x87yY\xd6\xfb\x3\x7f\xcf>\xc3\xc0 \n\xa8lV\x8a\xa0`\x9d\xa3\x1dsI\xc1\rP[\x14\n5=\xa8h\xb4\x97\x95\v\xe9\xb1SnY\xf6\xeb\x64\x9a?O. \xda\x31[\xd4\x34wQK\xeb\x94hi\xd9\xa9LK\x8f\t\xc8\xa2\f\xdb\f\xcc\x30s\xfe &F\x6\x10\xe4;3\xf0}\xbd\xaek\xaek\xbe\xf7\xf7\xbe\x9f\xf9<\xd7=\xf3\\\xcf\x33\x9f\xef\xfd\xb9\x81\"\xa1\x94\x1c\0\0\0@7d\x8f!\0\xa0\x10$\x86\0\0\0\0\xba!\xc9 \0\xa0\x10\x94\x92\x3\0\0\0\0\0(\x12V\f\x1\0\0\0tCJ\xc9\x1\0\x85 1\x4\0\0\0\xd0\rI\x6\x1\0\x85\xa0\x94\x1c\0\0\0\0\0@\x91\x90\x18\x2\0\0\0\0\0(\x12J\xc9\x1\0\0\0tCW]yE\xbb\xd7\x1f\xff\xe4\xa7\xba(\x12\0`[\"1\x4\0\0\0\xd0\rI\x4\x1\0\x85\xa0\x94\x1c\0\0\0\0\0@\x91\x90\x18\x2\0\0\0\0\0(\x12J\xc9\x1\0\0\0tC\xf7\xdd{O\xdb\xf7\x63\xc7\x1d\xd9\x85\x91\0\0\xdb\x12\x89!\0\0\0\x80nH2\b\0(\x4\xa5\xe4\0\0\0\0\0\0\x8a\x84\xc4\x10\0\0\0\0\0@\x91PJ\xe\0\0\0\xa0\x1b\xb2\xc7\x10\0P\b\x12\x43\0\0\0\0\xdd\x90\x64\x10\0P\bJ\xc9\x1\0\0\0\0\0\x14\t\x89!\0\0\0\0\0\x80\"\xa1\x94\x1c\0\0\0@7d\x8f!\0\xa0\x10$\x86\0\0\0\0\xba!\xc9 \0\xa0\x10\x94\x92\x3\0\0\0\0\0(\x12V\f\x1\0\0\0l\x86W^\x99\x9b\x1b\xa6M\xcb\x63\x8f\xfe,{\x8e\x18\x91\x89\xc7\x9d\x90\xbd\xf7\xd9\xa7\xc3\xbe\xad\xad\xady\xec\xd1Gs\xff\xfd\xf7\x66\xd6\xaf~\x99\x81\x83\x6\xe7\xd8\xf1\x13r\xe4QG\xa7\xac\xac\xac\x93#\a\0\x8a\x99\x15\x43\0\0\0\0\x9bh\xde\xbcy9\xed\xd4\x93\xd3\xd8\xd8\x98\x33\xcf>'\x3\a\r\xca)\x93N\xcc\x93O\xcc\xea\xb0\xff\xfd\xf7\xdd\x9b\xaf^zqF\x8e\xdc+g\x9d\xf3\x85\f\x1b\x36<\xe7\x9c\xf5\xf9\xfc\xf8\xf6\xdb\xd6\xfb\x33\xee\xbb\xf7\x9e\xb6/\0\x80-\xc5\x8a!\0\0\0\x80Mt\xdb\xad?\xcc\x90!\xbb\xe4\xbc\xf3\xbf\x98\xb2\xb2\xb2\x1c }\xb6OYYYf\xbf\xfcr\xbb\xf6\xf9\xf3\xe7%I\xfa\xf5\xed\xb7\xde\xb1\xf5\xf5\xf5\x39\xfb\xcc\xcf\xe5\x98\xf1\x13\x32\xee\xc8\xa3\n\x1a'\0@G$\x86\0\0\0\0\x36\x41\x65\x65\x65N>ur\xee\xbc\xe3\xf6\x34\x35\x35\xb5\xb5\xff\xf4\x91\x87\x33\xfa\x90\x43\x33p\xd0\xa0$IKKK\x1a\x1a\x1a\xda\xde\xaf\xaf\xaf\xcfY\x9f\xffl\xde\xb9\xef\xbe\x99\xf2\x91\x8fuz\xdc\0\0\x89Rr\0\0\0\0\x9bl\xe2q\xc7g\xd2\x89\x1f\xca\x45\x17|9c\xc6\x8e\xcd\xb3\xcf>\x9bk\xfe\xf3\xeaL\x9bqSJJJ\x92$\x97^rQf>\xf8@n\xbb\xe3\xae\xb4\xb6\xb6\x66\xca\xe9\x93\xf3\xcc\xef~\x9b\xfO\xf9h\x9e\xfa\xcdo\xda\x8e\x35\x64\x97!\xe9\xdb\xc1*\xa3\xfb\xee\xbd\xa7\xed\xfb\xb1\xe3\x8e,\xfcI\x1\0\x45\x41\x62\b\0\0\0`\x13\r\x1e<$\xd3o\xfcnfL\x9f\x96\x8b.\xfcr\xf6\xde\xe7\x9d\x99q\xd3\xcd\x19\x31rd[\x9f!\xbb\xbc%\xc3\xf7\xd8\x33\x95\x95\x95y\xec\xd1\x9f\xe5\x99\xdf\xfd\x36Ir\xca\xa4\x13\xdb\x1d\xeb\xaa\xab\xaf\xc9\xa8\xd1\xa3\xd7\xf9\x19\x92\x41\0@!H\f\x1\0\0\0l\x86]v\xd9%\xe7\xff\xfb\x97\xd6\xfb\xfeI\xff:)'\xfd\xeb\xa4$\xc9\xe1G\x8c\xc9\xef\xff\xf8\xe7N\x8a\f\0`\xfd\xec\x31\x4\0\0\0\0\0P$\xac\x18\x2\0\0\0\xe8\x86\xec\x31\x4\0\x14\x82\xc4\x10\0\0\0@7$\x19\x4\0\x14\x82Rr\0\0\0\0\0\0\x45\x42\x62\b\0\0\0\0\0\xa0H(%\a\0\0\0\xd0\r\xd9\x63\b\0(\x4\x89!\0\0\0\x80nH2\b\0(\x4\xa5\xe4\0\0\0\0\0\0\x8a\x84\xc4\x10\0\0\0\0\0@\x91PJ\xe\0\0\0\xa0\x1b\xb2\xc7\x10\0P\b\x12\x43\0\0\0\0\xdd\x90\x64\x10\0P\bJ\xc9\x1\0\0\0\0\0\x14\t\x89!\0\0\0\0\0\x80\"\xa1\x94\x1c\0\0\0@7t\xd5\x95W\xb4{\xfd\xf1O~\xaa\x8b\"\x1\0\xb6%\x12\x43\0\0\0\0\xdd\x90\x44\x10\0P\bJ\xc9\x1\0\0\0\0\0\x14\t\x89!\0\0\0\0\0\x80\"\xa1\x94\x1c\0\0\0@7t\xdf\xbd\xf7\xb4}?v\xdc\x91]\x18\t\0\xb0-\x91\x18\x2\0\0\0\xe8\x86$\x83\0\x80\x42PJ\xe\0\0\0\0\0\xa0HH\f\x1\0\0\0\0\0\x14\t\xa5\xe4\0\0\0\0\xba!{\f\x1\0\x85 1\x4\0\0\0\xd0\rI\x6\x1\0\x85\xa0\x94\x1c\0\0\0\0\0@\x91\x90\x18\x2\0\0\0\0\0(\x12J\xc9\x1\0\0\0tC\xf6\x18\x2\0\nAb\b\0\0\0\xa0\x1b\x92\f\x2\0\nA)9\0\0\0\0\0\x80\"!1\x4\0\0\0\xd0\t\x9e~\xfa\xa9\x9cw\xee\xd4\x1c=nL.\xb9\xf8\xc2\xcc\x99={\x83\xfdG\f\x1f\xdaI\x91\xb1\xb9\xcc\xd1\xd6\xc1:\xe5\xf4TT\x94g\x8f=Fd\xe6\x83\xf\x64\xe1\xc2\x85\x39\xea\xe8\xf7vux\0@\x91\xb1\x62\b\0\0\0\xa0\xc0\xe:xT\xae\x9bvC\xfe\xf8\x87?\xe4+\x97\\\x98\x9a\x9a\x9a\\s\xdd\xb4l\xbf\xfd\xf6]\x1d\x1a\0Pd\xac\x18\x2\0\0\0\xe8\x4\xfb\xed\x7f@\xf6\xdb\xff\x80\xae\xe\x83M\xf0\xca+ss\xc3\xb4iy\xec\xd1\x9f\x65\xcf\x11#2\xf1\xb8\x13\xb2\xf7>\xfbt\xd8\xb7\xb5\xb5\x35\x8f=\xfah\xee\xbf\xff\xde\xcc\xfa\xd5/3p\xd0\xe0\x1c;~B\x8e<\xea\xe8\x94\x95\x95ur\xe4\xc5\x63S\xe6\xa8#\xd7]\xfb\x9d|\xe3\xeb\x97\xe5W\xb3~\x9d\x9e\xbdz\x15\x30\xd2\xe2\xf6\xf4\xd3O\xe5\xfb\xb7|/O\xfd\xfa\xd7\x39\xf0\xa0\x83r\xea\xa9\xa7\x65\xe7\x1\x3\x36\x38\xe6\xd5W_\xcd-7\xffWf\xcdz<\xb3_\xfe[\xf6\xddo\xffL\x9cx|F\xee\xb5W'E]\\Z[[s\xcf=w\xe7\xee\x9f\xdc\x99W\xe6\xce\xcd\xe1\x63\xc6\x64\xd2\xc9\xa7\xa6\xa6\xa6\x66\xbd\x63\x66\xcf~93n\x98\x9eG\x7f\xfa\xd3\xd4\xd5\xd5\x65\xcc\xb8#3\xf1\xb8\xe3:\xdc;\x8f\xee\xc5\x8a!\0\0\0\0x\x9dy\xf3\xe6\xe5\xb4SONccc\xce<\xfb\x9c\f\x1c\x34(\xa7L:1O>1\xab\xc3\xfe\xf7\xdfwo\xbez\xe9\xc5\x19\x39r\xaf\x9cu\xce\x17\x32l\xd8\xf0\x9cs\xd6\xe7\xf3\xe3\xdbo\xeb\xe4\xc8\x8b\xc7\xa6\xce\xd1\xeb=\xfd\xf4S\xf9\xc6\xd7/+p\x94<\xf9\xc4\xac\x9c|\xd2\x89\xd9u\xd7\xddr\xf6\xd4sS\xbfhQ&\x9f:)\xf3\xe6\xcd[\xef\x98\x17_|1\x93N:!\xb3\xe7\xcc\xce\xc4\xe3\x8e\xcf\x17\xce;?C\x86\f\xc9k\xaf\xbd\xd6\x89\x91\x17\x97\x1bg\xdc\x90\xcb.\xfdJ\xc6\x8e;2\x1f\xfe\xc8G\xf3\xd0\xcc\x99\x39\xe7\xac\x33\xb3j\xd5\xaa\xe\xfb\xd7\xd7/\xca\x94\xd3'\xa7\xb1\xa1\x31S\xcf=/\x13>81?\xbe\xfd\xb6|\xe5\x92\x8b;9r6\x87\x15\x43\0\0\0\0\xf0:\xb7\xdd\xfa\xc3\f\x19\xb2K\xce;\xff\x8b)++\xcb\xc1\xa3\x46gE\xe3\x8a\\\xf5\xed+s\xed\xf5\xd3SRR\xd2\xae\xff\xfe\a\x1c\x98\x83\xe\x1e\x95\x1e=z$I\xe;\xfc\x88TTV\xe4\x96\xef\xdd\x9c\xf1\x13>\xd0\x15\xa7\xb0\xcd\xdb\xd4\x39Z\xdb\xe2\xc5\x8b\xf3\xc5\x7f;7\x1f\xf8\xe0q\xf9\xe1\xfn\xe9\xc4\xa8\x8bKKKK\xae\xf8\xd6\xe5\xf9\xf4g\xce\xc8\xe4\xd3NO\x92\xbck\xbf\xfdr\xea\xa4\x93r\xe7\x1d\xb7\xe7\xb4\xd3\xa7t8\xee\xea\xab\xae\xcc\x98\x31\xe3\xf2\xa9\xcf\x9c\xd1\x36\x8f\xa3\x46\x1f\xd2iq\x17\x9b\x5\v\xe6\xe7\x1b_\xbf,\xdf\xb9\xee\xfa\xec\xbb\xef\xbb\x92${\xec\xb9g\xc6\x1dqX\x9e|bV\xf6}\xd7~\xeb\x8cy\xfa\xa9\xa7\xf2\xd7\xbf\xfc%\xdf\xbd\xf9\xfb\xe9\xdd\xbbw\x92\x64\xc0\xc0\x81\xf9\xf0\xe4S2u\xea\xb9V\xe0usV\f\x1\0\0\0\xc0Z\x9a\x9b\x9bs\xfd\xb5\xd7\xe6=\xef}_\xbb\x32pc\xc6\x8e\xcb/\xff\xfb\x17\xf9\xdf\x17_\\gL]]][Rh\x8d\xfe\xfdw\xcc\xb2\x65K\v\x1eo1\xda\x9c\x39Z\xa3\xb5\xb5\x35W^qy\xf6?\xe0\xc0\xbc\xf7\xfd\xef\xef\x8cp\x8b\xd6\xf3\xcf=\x97Y\x8f\xff*\x87\x1czX[[uuu\xdew\xcc\x31\x99\x31}zZ[[\xd7\x19\xf3\xc2\v\x7f\xcd\x1d?\xbe=\xc7\x8c\x1f\xbf\xc1\xe4\x1e[\xce/~\xfe\xf3\xec\xb0\xc3\xf6\xd9{\xef\x7f\x94\x61\x1c \xd8\xe1\x98\x9a\x9a\xd5\xd7\xbb\x5\xf3\xe7\xb7\xb5\xd5/Z\x94\xdd\x86\xeM\x8f\xda\xda\xc2\x6\xcc\x9b&1\x4\0\0\0\0kY\xb4\xe8\xb5,]\xba$;\xed\xb4s\xbb\xf6\x9dw^\xfdz\xc1\x82\xf9\x1d\r[\xc7\x93O\xcc\xca\xa1\x87\x1d\xbe\xc5\xe3\xe3\xcd\xcd\xd1#\xf?\x94_\xfe\xe2\x17\xf9\xf8'>\x15i\x87\xc2ZS.\xae_\xbf~\xed\xda\a\xf\x1e\x92\x5\v\xe6g\xc9\x92%\xeb\x8c\x99\x33{N\x92\xa4\xb9\xa9\x39\x17]\xf0\xa5\x1c~\xe8\xa8|\xe2\x63\x1f\xc9\xac\xc7\x1f/|\xc0\x45\xea\xe5\x97_\xce\xee\xc3\x86\xa7\xbc\xbc}\x81\xb1\x61\xbb\xf\xcb\v\x7f\xfdk\x87\x63\xfey\xef\xbds\xec\x84\xf\xe4\xd3\x9f\xfcx~\xf4\xc3\xef\xe7;W\xff\xff\xdc\x38\x63z\xber\xe9\xd7RZ*\xed\xd0\xdd\x99!\0\0\0\0X\xcb\xa2\x45\x8b\x92\x64\x9dM\xd7{\xd4\xae\xfe\x84\xfc\xe2\xc5\x8b\x37z\x8cY\x8f?\x9e\x87\x66\xce\xcc\xf1'|h\xcb\a\xc8\x66\xcf\xd1\xdc\xb9s\xf3\xc5\xf3\xcf\xcb\x97.\xb8(uuu\x85\r\x92\xbc\xfa\xea\xc2$IUuu\xbb\xf6\xda\x9e=\x93$K\x97\xae\x9b\x18\x9a?\x7fu2\xe9\xc2\v\xbe\x94]w\xdb-\x97\\\xfa\xb5\x8c\xdc\xeb\xed\x39\x65\xd2\x89\xf9\xfd\x33\xcf\x14\x38\xe2\xe2\xf4\xca\xdc\xb9m\xe5\xe0\xd6V\xd7\xbb.\x7f{\xe9\xa5\xe\xc7\x94\x97\x97\xe7\xf4\xd3\xa7\xe4\x85\x17\xfe\x9a/\xfe\xdby\xb9\xfc\x9b\xdf\xc8\x84\xfL\xcc\xee\xc3\x86\x17:\\\xb6\x80v)\xc0\xca\xca\x8a\xacX\xd1\x94\xaa\xaa\x8a\xae\x8a\a\0\0\0\0\xbaT\xaf\xbf\xef\x8d\xb1l\xf9\xb2v\xed\r\r\x8dI\x92\xed\xfa\xf4\xd9\xe0\xf8\xb9s\xe6\xe4\xfc\xf3\xa6\xe6\xd2\xaf]\x96\x1\x3\x6\x16&\xc8\"\xb7\x39s\xb4j\xd5\xaa|\xf5+\x17\xe7\x43\x1f:){\xef\xb3\xba\x64\xd6\xba\x85\xcc\xd8\x92\xd6$\x1b\x1a\x1a\x1aRQ\xf1\x8f\xff\x39\x37,_\xde\xee\xfd\xb5\xd5\xfe\xbd\f\xd9Yg\x9f\x93=G\x8cL\x92\xec\xbb\xef\xbb\xf2\xfcs\x7f\xce=w\xdf\x95\x11#G\x16:\xec\xa2\xb3\x43\xdf\x1d\xf2\xbb\xdf\xfev\x9d\xf6\xa5K\x97\xe6-o}k\x87\x63\xfe\xf4\xa7?\xe6\xa4\x13\x8e\xcb\x45\x97\\\x9a\xd1\x87\x1c\x9a\xe7\x9f\xfbs\xae\xf8\xd6\x37s\xdf\xbd\xf7\xe4?.\xffVjk{\x16:l\xde\x84v+\x86j\xaa*S\xbf\x64yW\xc5\x2\0\0\0\0]\xaeO\x9f\xedSVV\x96\xd9/\xbf\xdc\xae}\xcdJ\x86~}\xfbu4,IR__\x9f\xb3\xcf\xfc\\\x8e\x19?!\xe3\x8e<\xaa\xa0q\x16\xb3\xcd\x99\xa3\x87\x66>\x98\xfb\xef\xbb\x37W^qyF\f\x1f\x9a\x11\xc3\x87\xe6\xe4\x93V\xaf\xe8z\xd7\xbf\xec\x9d\x83\xe\xdc\xaf\xf0\x81\x17\x99~\xfd\xfa'Y\xbd\"ems\xe6\xcc\xc9\xc0\x81\x83:L\x1e\xf4\xed\xdb\x37I\xd2g\xfb\x1d\xda\xb5\xef\xba\xebn\x99\x33gv\x81\"-n\x3\x6\f\xc8\x1f\xfe\xf0?Y\xb9re\xbb\xf6\x17_x!o}\xeb\xdb:\x1c\xf3\xdd\x9bn\xcc\xd1\xefy_\x8e\x1d?!}\xfa\xf4\xc9;\xff\x65\xdf\xfc\xbf\xff\xb8\x7f\xec\xd1<\xf2\xf0\xc3\x9d\x11\x36oB\xbb\xc4P]\xaf\x1e\xa9_\xdc\x90\x85\xaf-N\xf3\xaaU]\x15\x13\0\0\0\0t\x99\xca\xca\xca\x9c|\xea\xe4\xdcy\xc7\xedijjjk\xff\xe9#\xfg\xf4!\x87\x66\xe0\xa0\x41I\x92\x96\x96\x96\x34\x34\x34\xb4\xbd___\x9f\xb3>\xff\xd9\xbcs\xdf}3\xe5#\x1f\xeb\xf4\xb8\x8b\xc9\xe6\xcc\xd1;\xde\xf1O\xf9\xc1\x8fnk\xf7\xf5\x89O~:Ir\xcd\xf5\xd3\xf3\x9dk\xae\xef\xfc\x13\xd9\xc6\r\xdd}\xf7\f\xdf\x63\xcf<\xf8\xe0\x3mm\xcd\xcd\xcd\xb9\xfb\xae\x9f\x64\xd2)\xa7\xb4\xb5\xadX\xb1\"\xab\xfe\xfe\xff\xe8\x61\xc3\xf7\xc8\xe0\xc1\x83\xf3\xb3\x9f>\xd2\xf6~kkk\x1ey\xe4\xe1\f\x1f\xbeGg\x85^T\xf6\xdb\xff\x80\xbc\xbapa\xbb}\x9c\xe6\xcf\x9f\x9f\xbb~rg\xe;\xe2\x88\xb6\xb6\xe5\xcb\xff\xb1\xa8\xa4\xb1\xa1!K\x96,Nk\xeb?\xd6\xddm\xb7]\x9f\xd4\xd5\xf5^'\xc1\x44\xf7S\xfe\xfa\x86\x41\x3\xfa\x66YCc^|iaV\xb5H\xe\xc1\xd6l\xf0\x80\xf5\x7f\x82\t\0\0\0X\xbf\x89\xc7\x1d\x9fI'~(\x17]\xf0\xe5\x8c\x19;6\xcf>\xfbl\xae\xf9\xcf\xab\x33m\xc6M)))I\x92\\z\xc9\x45\x99\xf9\xe0\x3\xb9\xed\x8e\xbb\xd2\xda\xda\x9a)\xa7O\xce\x33\xbf\xfbm><\xe5\xa3y\xea\x37\xbfi;\xd6\x90]\x86\xa4\xef\x6V\x19\xb1y6u\x8e\xfa\xef\xb8\x63\xfa\xef\xb8\x63\xbb\x63,_\xbe<\xdf\xbe\x32y\xfb^oO\xcf\xbf\x97\xa7\x63\xcb)//\xcf\x19\x9f\xfd\\>:\xe5\xf4TT\x94g\x8f=Fd\xe6\x83\xf\x64\xe1\xc2\x85\x39\xea\xe8\xf7&I\x1a\x1b\x1bs\xdc\a\xc7g\xe8\xd0\xdd\xf3\xf5o|3\xd5\xd5\xd5\xf9\xf4g?\x9f\xb3>wF\x1a\x1b\x1a\x32t\xd8\xb0<\xf5\xeb_\xe7o\x7f{)\xef?v|\x17\x9f\xd1\xb6i\xe0\xc0\x41\xf9\xd8'>\x99\xa9\xe7\x9c\x99\xb3\xce\x9e\x9a\xba\xba\xba\xcc\xb8\x61z\x8e:\xfa=y\xc7;\xfe)I\xf2\xfc\xf3\xcf\x65\xe2\x84\x63s\xf6\xd4ss\xdc\xf1'\xe4\x98\xf1\x13\xf2\xe1\xc9\xa7\xa4_\xff\xfey\xf7\xbb\xfJiii\x1e~hfz\xf5\xea\x95\x3\xdf}P\x17\x9f\x11\x1b\xb3Nb(Ijk\xaaS[S\xdd\xd1[\0\0\0\0[\xbd\x92\x92\x92v\x9fr\x86\xd7\x1b -\x17]\xf8\xe5\xec\xbd\xcf;3\xe3\xa6\x9b\xdb\xedo2d\x97\xb7\x64\xf8\x1e{\xa6\xb2\xb2\x32\x8f=\xfa\xb3<\xf3\xbb\xd5{t\x9c\x32\xe9\xc4v\xc7\xba\xea\xeak2j\xf4\xe8\xce\f\xbf(l\xea\x1c\xd1\x35\xe:xT\xae\x9bvC~\xf8\x83\xef\xe7\xf6\xdbn\xcd\xa8Q\x87\xe4\x9a\xeb\xa6\x65\xfb\xed\xb7O\x92TTTd\xd8\xb0\xe1y\xeb\xdbvm\x1bs\xd4QG\xa7\xa6\xba:\xb7\xddzkn\xfe\xaf\x9br\xe0\xbb\xf\xce-\xdf\xffQ\xfa\xf7\xef\xdfU\xa7\xb1\xcd\xfb\xf8'>\x95\x9dv\xda\x39\xb7\xdfvk\x1a\x1b\x1br\xc4\x98q9\xf1\xc4\x93RZ\xba\xba\xe8Xmm\xcf\x8c\x18\x31\x32;\xed\xb4s\x92\xe4\x80\x3\xe\xccM7\xdf\x92\x1f\xdc\xf2\xbd\\\xf0\xa5\x7fO\xef\xde\xbd\xb3\xff\x81\af\xfa\x8d\x37\x99\xa7nhM\xb2\xbc\xed\xf5\x9f\x9e\x9f\xddjU\x1l\xdb^\x9a=\x7f\xa3\xab\x87\xd6\xee\xf3\xd2\xec\xf9\xd9\xfdm;wFh\0\0\0\x9b\xed\xd9\xbf\xcci\xf7\x1c\xb3)\xcf=\xcb\x1a\x96\xa5\xa5\x45\x62\b\0\xd8\xf6\x95\x96\x96\xa4\xb6\xa6\x36\xc9\xea\xfb\xa1\xeW\f\xad\xd1\xda\xda\x9a\xfa%\xcb\xb2|\xf9\x8a\xacji\xe9\x94\0\x81\xa4\xac\xb4\x34=zT\xa5w\xaf\xdau\xb2\xb9\0\0\0\xbcye\xa5\xe5iii\xdaxG\0\x80\xad\\Yi\xfbTP\xe9\x86:\xd7/Y\x96%K\x1b$\x85\xa0\x93\xadji\xc9\x92\xa5\r\xa9_\xb2\xac\xab\x43\x1\0\0\xd8&\x95\x95\x97uu\b\0\0\x9d\xe2\xf5\xf7=\x1bL\f-_\xbe\xa2\xa0\xc1\0\x1b\xe6o\x10\0\0\xa0\x30\xcaK\xcbS\xaa\x42\x3\0\xb0\x8d+-)Iy\xd9&\xac\x18\x2\0\0\0\xd8\x16\x95\x94$UUU]\x1d\x6\0@AUUU\xe5\xf5\x1f\x85\xd9`b\xa8G\xf\x37H\xd0\x95\xba\xeao\xb0\xb2\xb2\"+V\xa8\xb5\r\0\0t_\x8d+\x9aRUY\xf1\xa6\x8eQ^V\x9e\xca\xf2\x37w\f\0\x80\xee\xaa\xb2\xbc\x62\x9d\xd5\x42IRZQQ\x9e\xa6\xa6\xe6\xe\a\xf5\xeeU\x9b^=kRVja\x11t\xa6\xb2\xd2\xd2\xf4\xeaY\x93\xde\xbdj\xdf\xf4\xb1V65\xa7\xb2\x62\xdd?\xfe\xd7[\xfbZPSU\x99\xfa%\xcb\xdf\xf4\xcf\x6\0\0(\x94\x15+\x9aRU\xbd:\xa9\xb3\x39\xcf=kTUUI\xe\x1\0\xdb\x9c\xca\xf2\x8auVG\xaf\xb9g*\xaf\xac(\xcf\xca\xa6\xe6Ttp\x3URR\x92\xed\xeazf\xbb\xba\x9e\x9d\x15+\xb0\x85\x35\xadlNE\xe5\xc6\x1f\x90\xd6\xbe\x16\xd4\xf5\xea\x91\xbf\xcd^\x90\xb2\xb2\x92\xf4\xae\xabMy\x99MY\x1\0\x80\xee\xa1qESV\xacl\xca+\v\xea\x33x@\xbf$\x9b\xf7\xdc\xb3\xb6\xaa\xaa\xaa\x94\x95\x97\x65\xc5\x8a\x15iim-H\xdc\0\0\x9d\xa1\xb4\xa4$UUU\x1d\xae\x14Zs\xcfT^]U\x99\xc6\x95+S\x9b\xea.\b\x11(\xb4\x15+W\xa6\xa6\x66\xe3\x7f\xdf\xaf\xbf\x16\f\x1a\xd0\x37\xcb\x1a\x1a\xf3\xe2K\v\xb3\xaa\x65U\xa1\xc3\x4\0\0xC\xaa*+R]U\xd9\x96\x14J6\xff\xb9gm\xe5\x65\xe5)\xebQ\x9e\xe6U\xcdY\xd5\xbc*\xabZ\x9a\xd3\xda\x9a\xb4J\x14\x1\0\xddXIIIJJ\x92\xb2\xd2\xf2\x94\x95\x97\xa5\xbc\xac|\x9d=\x85\xd6Xs\xcfT\xde\xa3\xa6*K\x97\x37\x64yCcz\xbc\x81\x9b(`\xeb\xf1\xea\xa2%iniIMu\xe5\x46\xfbvt-\xa8\xad\xa9N\xad\xeb\x2\0\0\xd0\x8d\xbd\xd9\xe7\x9e\xb5\x95$\xa9(+OEYy\x12\xfb.\x3\0\xdb\x8e\xb5\xef\x99\xca\x93\x64\x87\xedze\xf6+\xaf\xae\xce,%\xa9\xa8\xac\xb0\xaf\x10l\xa5V65\xa7ies\x1aW6\xa5\x65\xd5\xaa\xf4\xef\xbb\xdd\x1b\x1e\xebZ\0\0\0l\r<\xf7\0\0l\xdc\xfa\xee\x99J\x96\x37\x34\xb5\xad\x89~\xad~I\x9aW\xb5\xa6ieSV\xb5\xb4tY\xb0\xc0\xe6\xab\xac(OEeyj\xaa*SS\xbdy\x9fps-\0\0\0\xba\x33\xcf=\0\0\x1b\xb7\xbe{\xa6\xff\x3\x8c\x85\xbf!Y\xb9\x14\x1e\0\0\0\0IEND\xae\x42`\x82)" +screenshot_at=2026-09-27T09:27:43Z diff --git a/pxii_bec/daily_setup_files/.~lock.daily_beamline_health.csv# b/pxii_bec/daily_setup_files/.~lock.daily_beamline_health.csv# new file mode 100644 index 0000000..1695049 --- /dev/null +++ b/pxii_bec/daily_setup_files/.~lock.daily_beamline_health.csv# @@ -0,0 +1 @@ +,e18747,x10sa-cons-02.psi.ch,28.09.2026 21:41,file:///home/e18747/.config/libreoffice/4; \ No newline at end of file diff --git a/pxii_bec/daily_setup_files/Ge_edge_derivative.png b/pxii_bec/daily_setup_files/Ge_edge_derivative.png new file mode 100644 index 0000000..f26c27e Binary files /dev/null and b/pxii_bec/daily_setup_files/Ge_edge_derivative.png differ diff --git a/pxii_bec/daily_setup_files/Ge_edge_signal.png b/pxii_bec/daily_setup_files/Ge_edge_signal.png new file mode 100644 index 0000000..8b80603 Binary files /dev/null and b/pxii_bec/daily_setup_files/Ge_edge_signal.png differ diff --git a/pxii_bec/daily_setup_files/Oct14/Ge_edge_derivative.png b/pxii_bec/daily_setup_files/Oct14/Ge_edge_derivative.png new file mode 100644 index 0000000..d5533fb Binary files /dev/null and b/pxii_bec/daily_setup_files/Oct14/Ge_edge_derivative.png differ diff --git a/pxii_bec/daily_setup_files/Oct14/Ge_edge_signal.png b/pxii_bec/daily_setup_files/Oct14/Ge_edge_signal.png new file mode 100644 index 0000000..b16e9f9 Binary files /dev/null and b/pxii_bec/daily_setup_files/Oct14/Ge_edge_signal.png differ diff --git a/pxii_bec/daily_setup_files/Oct14/daily_beam_12400eV.png b/pxii_bec/daily_setup_files/Oct14/daily_beam_12400eV.png new file mode 100644 index 0000000..58d895f Binary files /dev/null and b/pxii_bec/daily_setup_files/Oct14/daily_beam_12400eV.png differ diff --git a/pxii_bec/daily_setup_files/daily_beam.png b/pxii_bec/daily_setup_files/daily_beam.png new file mode 100644 index 0000000..e681ccd Binary files /dev/null and b/pxii_bec/daily_setup_files/daily_beam.png differ diff --git a/pxii_bec/daily_setup_files/daily_beam_12398eV.png b/pxii_bec/daily_setup_files/daily_beam_12398eV.png new file mode 100644 index 0000000..b4ad3f1 Binary files /dev/null and b/pxii_bec/daily_setup_files/daily_beam_12398eV.png differ diff --git a/pxii_bec/daily_setup_files/daily_beam_12400eV.png b/pxii_bec/daily_setup_files/daily_beam_12400eV.png new file mode 100644 index 0000000..40e9cd7 Binary files /dev/null and b/pxii_bec/daily_setup_files/daily_beam_12400eV.png differ diff --git a/pxii_bec/daily_setup_files/daily_beam_15000eV.png b/pxii_bec/daily_setup_files/daily_beam_15000eV.png new file mode 100644 index 0000000..905061d Binary files /dev/null and b/pxii_bec/daily_setup_files/daily_beam_15000eV.png differ diff --git a/pxii_bec/daily_setup_files/daily_beam_15999eV.png b/pxii_bec/daily_setup_files/daily_beam_15999eV.png new file mode 100644 index 0000000..d183421 Binary files /dev/null and b/pxii_bec/daily_setup_files/daily_beam_15999eV.png differ diff --git a/pxii_bec/daily_setup_files/daily_beam_16000eV.png b/pxii_bec/daily_setup_files/daily_beam_16000eV.png new file mode 100644 index 0000000..ed580c3 Binary files /dev/null and b/pxii_bec/daily_setup_files/daily_beam_16000eV.png differ diff --git a/pxii_bec/daily_setup_files/daily_beam_20000eV.png b/pxii_bec/daily_setup_files/daily_beam_20000eV.png new file mode 100644 index 0000000..9afff71 Binary files /dev/null and b/pxii_bec/daily_setup_files/daily_beam_20000eV.png differ diff --git a/pxii_bec/daily_setup_files/daily_beamline_health.csv b/pxii_bec/daily_setup_files/daily_beamline_health.csv new file mode 100644 index 0000000..a5cf52b --- /dev/null +++ b/pxii_bec/daily_setup_files/daily_beamline_health.csv @@ -0,0 +1,75 @@ +timestamp,energy_eV,flux_ph_s,beam_start_x_px,beam_start_y_px,vfm_ydr_start_mm,hfm_xd_start_mm,vfm_ydr_final_mm,hfm_xd_final_mm,beam_final_x_um,beam_final_y_um,vfm_y_mm,vfm_ydr_mm,vfm_pitch_mrad,hfm_x_mm,hfm_xd_mm,hfm_pitch_mrad +2026-09-20T21:16:24,12400,8.60e+12,993,966,-0.84534,1.91200,-0.84534,1.91202,-0.2,0.3,-1.55385,-0.84534,2.98943,1.41177,1.91202,3.00093 +2026-09-20T21:24:44,12400,8.57e+12,993,969,-0.84534,1.91201,-0.84534,1.91200,-0.2,-0.1,-1.55385,-0.84534,2.98943,1.41178,1.91200,3.00090 +2026-09-20T21:28:14,12400,8.48e+12,992,967,-0.84535,1.91200,-0.84534,1.91200,0.1,0.3,-1.55385,-0.84534,2.98945,1.41178,1.91200,3.00093 +2026-09-21T08:55:37,12400,8.46e+12,993,970,-0.84534,1.91199,-0.84533,1.91199,-0.1,-0.3,-1.55384,-0.84533,2.98941,1.41177,1.91199,3.00092 +2026-09-21T14:34:03,13000,5.55e+12,1000,968,-0.84513,1.91200,-0.84512,1.91240,-0.1,-0.0,-1.55380,-0.84512,2.98985,1.41197,1.91240,3.00173 +2026-09-23T08:53:50,19500,4.06e+11,653,973,-0.84449,1.92951,-0.84448,1.91255,0.1,0.1,-1.55363,-0.84448,2.99111,1.41202,1.91255,3.00201 +2026-09-23T08:54:51,20000,1.36e+12,994,967,-0.84449,1.91255,-0.84448,1.91254,-0.1,0.2,-1.55363,-0.84448,2.99111,1.41203,1.91254,3.00207 +2026-09-23T13:13:02,20000,7.04e+12,1007,975,-0.84448,1.91250,-0.84449,1.91309,-0.3,-0.9,-1.55365,-0.84449,2.99113,1.41230,1.91309,3.00313 +2026-09-24T00:42:05,12400,7.96e+12,994,923,-0.84443,1.91307,-0.84566,1.91306,-0.0,-0.2,-1.55391,-0.84566,2.98872,1.41228,1.91306,3.00309 +2026-09-24T00:44:08,12400,8.00e+12,994,968,-0.84567,1.91304,-0.84567,1.91307,0.1,0.2,-1.55391,-0.84567,2.98870,1.41229,1.91307,3.00310 +2026-09-24T00:45:03,12402,7.81e+12,993,968,-0.84566,1.91304,-0.84567,1.91305,0.2,-0.0,-1.55390,-0.84566,2.98870,1.41229,1.91308,3.00311 +2026-09-24T00:46:04,12400,7.94e+12,990,968,-0.84565,1.91305,-0.84566,1.91306,0.2,0.2,-1.55390,-0.84565,2.98868,1.41230,1.91307,3.00313 +2026-09-24T12:08:20,12400,8.42e+12,989,970,-0.84568,1.91305,-0.84570,1.91307,0.9,-0.2,-1.55392,-0.84570,2.98867,1.41230,1.91307,3.00308 +2026-09-27T15:10:30,15000,-0.042,6.07e+11,987,963,-0.84510,1.91436,-0.84510,1.91436,0.8,0.8,-1.55386,-0.84510,2.99004,1.41296,1.91436,3.00560 +2026-09-27T15:12:34,12400,-0.044,8.30e+12,992,965,-0.84512,1.91435,-0.84511,1.91435,-0.0,0.7,-1.55386,-0.84511,2.99006,1.41295,1.91435,3.00558 +2026-09-28T18:13:02,12400,-0.044,8.25e+12,974,965,-0.84509,1.91433,-0.84506,1.91343,0.6,0.6,-1.55386,-0.84506,2.99014,1.41248,1.91343,3.00375 +2026-09-28T18:15:15,12400,-0.044,8.23e+12,992,965,-0.84505,1.91343,-0.84505,1.91344,0.1,0.8,-1.55385,-0.84505,2.99016,1.41250,1.91344,3.00375 +2026-09-28T18:17:05,12400,-0.044,8.25e+12,992,964,-0.84507,1.91345,-0.84507,1.91343,0.4,0.8,-1.55387,-0.84507,2.99013,1.41248,1.91343,3.00381 +2026-09-28T18:26:15,12400,-0.045,9.23e+12,990,965,-0.84507,1.91344,-0.84506,1.91342,0.5,0.5,-1.55386,-0.84506,2.99016,1.41248,1.91342,3.00378 +2026-09-28T18:29:25,12400,-0.045,9.25e+12,988,965,-0.84509,1.91343,-0.84506,1.91344,0.4,0.8,-1.55387,-0.84506,2.99014,1.41249,1.91344,3.00377 +2026-09-28T18:31:23,12400,-0.045,8.24e+12,992,965,-0.84508,1.91345,-0.84508,1.91342,0.2,0.5,-1.55387,-0.84508,2.99013,1.41248,1.91342,3.00377 +2026-09-28T21:37:21,12400,-0.045,8.16e+12,1006,972,-0.84504,1.91341,-0.84505,1.91414,0.2,-0.5,1.17,0.29,-1.55385,-0.84505,2.99013,1.41284,1.91414,3.00520 +2026-09-30T20:05:09,12400,-0.043,7.76e+12,1042,902,-0.83715,1.91288,-0.83893,1.91549,0.1,-0.3,10.45,1.36,-1.55113,-0.83893,2.99303,1.41354,1.91549,3.00780 +2026-09-30T20:20:59,12400,-0.043,8.27e+12,985,963,-0.83894,1.91541,-0.83893,1.91489,-0.4,0.8,13.04,1.33,-1.55112,-0.83894,2.99308,1.41324,1.91488,3.00663 +2026-10-01T08:38:35,12400,-0.043,9.06e+12,979,909,-0.83889,1.91485,-0.84048,1.91407,-0.1,-0.3,9.77,1.35,-1.55147,-0.84046,2.98990,1.41280,1.91409,3.00509 +2026-10-01T08:40:31,15000,-0.042,6.32e+11,995,981,-0.84048,1.91408,-0.83981,1.91408,-0.4,0.2,15.46,2.83,-1.55130,-0.83981,2.99123,1.41280,1.91408,3.00513 +2026-10-01T08:47:42,15000,-0.042,4.22e+12,991,940,-0.83982,1.91410,-0.84060,1.91407,0.3,-0.2,13.88,1.43,-1.55151,-0.84061,2.98968,1.41281,1.91409,3.00509 +2026-10-01T09:24:49,16000,-0.043,3.04e+12,994,969,-0.84058,1.91407,-0.84058,1.91409,0.3,0.1,20.87,1.84,-1.55150,-0.84059,2.98967,1.41281,1.91409,3.00515 +2026-10-02T10:16:22,12400,-0.044,9.91e+12,,,,,,,,,,,-1.55143,-0.84055,2.98973,1.41274,1.91402,3.00507 +2026-10-02T10:21:56,12400,-0.044,8.22e+12,1001,952,-0.84053,1.91404,-0.84102,1.91453,0.5,-0.5,11.20,1.19,-1.55155,-0.84100,2.98875,1.41302,1.91456,3.00614 +2026-10-02T11:46:02,12400,-0.046,7.47e+12,984,963,-0.84101,1.91456,-0.84101,1.91396,-0.5,0.7,10.91,1.12,-1.55155,-0.84101,2.98877,1.41272,1.91395,3.00500 +2026-10-02T14:27:48,12400,-0.046,7.51e+12,953,969,-0.84102,1.91394,-0.84101,1.91180,-0.2,0.3,13.01,1.65,-1.55155,-0.84102,2.98880,1.41165,1.91182,3.00066 +2026-10-04T17:23:05,12400,-0.047,8.06e+12,1035,1081,-0.84162,1.91194,-0.83864,1.91375,-0.5,0.0,18.41,0.86,-1.55117,-0.83864,2.99429,1.41264,1.91375,3.00441 +2026-10-04T17:30:34,12400,-0.047,9.24e+12,994,967,-0.83864,1.91375,-0.83864,1.91371,-0.1,0.3,16.19,0.80,-1.55118,-0.83863,2.99434,1.41263,1.91373,3.00435 +2026-10-05T13:58:52,20000,-0.045,1.28e+12,933,891,-0.83851,1.91371,-0.84056,1.91048,-1.1,0.1,26.14,-0.07,-1.55180,-0.84059,2.99023,1.41099,1.91048,2.99785 +2026-10-05T14:00:11,20000,-0.045,1.28e+12,1000,971,-0.84057,1.91048,-0.84056,1.91093,0.5,-0.3,27.35,-0.22,-1.55179,-0.84058,2.99021,1.41123,1.91093,2.99878 +2026-10-05T14:04:31,20000,-0.046,1.31e+12,997,969,-0.84057,1.91085,-0.84055,1.91086,-0.6,-0.1,24.26,-0.19,-1.55178,-0.84056,2.99024,1.41121,1.91086,2.99865 +2026-10-05T14:50:12,12400,-0.049,7.69e+12,1001,967,-0.84055,1.91084,-0.84056,1.91122,0.1,0.1,17.17,-0.34,-1.55176,-0.84054,2.99021,1.41137,1.91120,2.99932 +2026-10-05T14:52:28,12400,-0.050,7.64e+12,992,969,-0.84054,1.91118,-0.84055,1.91122,0.1,-0.0,17.85,-0.35,-1.55176,-0.84055,2.99023,1.41136,1.91119,2.99931 +2026-10-07T09:46:42,12400,-0.119,7.26e+12,,,,,,,,,,,-1.55153,-0.84025,2.99058,1.41125,1.91103,2.99908 +2026-10-07T09:50:26,12400,-0.119,7.24e+12,,,,,,,,,,,-1.55153,-0.84025,2.99055,1.41126,1.91104,2.99909 +2026-10-07T09:54:58,12400,-0.119,7.25e+12,,,,,,,,,,,-1.55159,-0.84048,2.99009,1.41034,1.90919,2.99541 +2026-10-07T22:12:48,12400,-0.120,8.57e+12,,,,,,,,,,,-1.55164,-0.84046,2.99019,1.41031,1.90915,2.99535 +2026-10-07T22:21:21,12400,-0.120,8.55e+12,1003,969,-0.84045,1.90916,-0.84045,1.90993,-6.0,0.0,31.82,-3.14,-1.55163,-0.84047,2.99011,1.41070,1.90993,2.99691 +2026-10-07T22:25:08,12400,-0.120,3.01e+12,886,960,-0.84046,1.90986,-0.84068,1.90511,0.8,0.1,259.20,-3.45,-1.55168,-0.84069,2.98967,1.40829,1.90511,2.98729 +2026-10-08T09:38:54,12400,-0.119,8.58e+12,1094,966,-0.84067,1.90501,-0.84067,1.91027,0.9,0.2,31.67,-2.49,-1.55168,-0.84066,2.98976,1.41088,1.91027,2.99759 +2026-10-08T11:18:52,,,8.65e+09,,,,,,,,,,,-1.55167,-0.84067,2.98977,1.41085,1.91025,2.99755 +2026-10-08T11:23:02,15999,-0.118,3.18e+12,988,945,-0.84066,1.91025,-0.84130,1.91026,0.6,0.1,40.53,-1.92,-1.55183,-0.84130,2.98850,1.41086,1.91026,2.99760 +2026-10-08T11:46:45,15999,-0.118,3.29e+12,990,966,-0.84128,1.91027,-0.84128,1.91024,0.5,0.4,38.28,-1.28,-1.55182,-0.84128,2.98846,1.41085,1.91027,2.99762 +2026-10-08T12:23:01,20000,-0.118,1.18e+12,981,951,-0.84128,1.91026,-0.84177,1.90955,-0.6,-0.1,37.40,-1.39,-1.55193,-0.84179,2.98751,1.41052,1.90955,2.99617 +2026-10-08T12:36:12,12398,-0.122,7.54e+12,1014,1011,-0.84177,1.90955,-0.84063,1.91046,-0.0,0.3,27.70,-2.63,-1.55164,-0.84064,2.98980,1.41097,1.91046,2.99798 +2026-10-08T14:05:15,12400,-0.125,7.53e+12,1010,997,-0.84063,1.91038,-0.83988,1.91091,-0.6,-0.2,22.53,-2.62,-1.55143,-0.83988,2.99126,1.41118,1.91089,2.99881 +2026-10-09T08:39:08,12400,-0.123,7.52e+12,1021,1015,-0.83960,1.91196,-0.83836,1.91302,-0.7,-0.0,25.21,-2.48,-1.55103,-0.83836,2.99472,1.41226,1.91302,3.00306 +2026-10-09T09:09:02,12400,-0.123,7.84e+12,975,956,-0.83837,1.91304,-0.83871,1.91193,-0.4,-0.1,26.17,-2.47,-1.55112,-0.83871,2.99398,1.41169,1.91192,3.00089 +2026-10-11T13:43:17,12400,-0.003,9.40e+12,1046,974,-0.84349,1.90884,-0.84328,1.91123,-0.5,0.3,-11.57,0.25,-1.55229,-0.84327,2.98450,1.41135,1.91124,2.99953 +2026-10-11T13:44:35,12400,-0.003,8.89e+12,959,963,-0.84328,1.91121,-0.84349,1.90923,-1.0,-0.5,4.12,-0.10,-1.55233,-0.84350,2.98406,1.41036,1.90923,2.99553 +2026-10-11T13:46:10,15000,0.000,3.88e+12,997,974,-0.84348,1.90922,-0.84349,1.90922,-0.5,-0.7,7.75,-0.22,-1.55235,-0.84348,2.98409,1.41036,1.90924,2.99551 +2026-10-11T13:57:05,15000,-0.000,3.88e+12,999,972,-0.84348,1.90924,-0.84346,1.90924,-0.8,-0.5,7.18,-0.03,-1.55236,-0.84348,2.98415,1.41037,1.90926,2.99557 +2026-10-11T14:06:33,15000,0.000,3.89e+12,1000,972,-0.84349,1.90922,-0.84349,1.90923,-0.9,-0.5,5.01,-0.04,-1.55235,-0.84347,2.98411,1.41035,1.90923,2.99548 +2026-10-11T14:14:45,12400,-0.002,8.88e+12,997,971,-0.84349,1.90924,-0.84350,1.90923,-0.8,-0.3,4.65,-0.12,-1.55235,-0.84350,2.98404,1.41035,1.90923,2.99552 +2026-10-11T14:30:55,12400,-0.002,8.87e+12,998,974,-0.84348,1.90922,-0.84349,1.90924,-1.0,-0.9,4.66,-0.26,-1.55235,-0.84350,2.98410,1.41035,1.90922,2.99549 +2026-10-11T14:46:28,12400,-0.002,8.73e+12,988,976,-0.84348,1.90922,-0.84349,1.90925,0.7,-1.1,9.50,-0.33,-1.55234,-0.84349,2.98406,1.41034,1.90921,2.99547 +2026-10-11T14:51:26,12400,-0.002,8.75e+12,995,975,-0.84349,1.90923,-0.84348,1.90921,-0.5,-0.9,7.19,-0.16,-1.55234,-0.84347,2.98412,1.41038,1.90924,2.99546 +2026-10-11T15:00:54,12400,-0.002,8.77e+12,995,977,-0.84350,1.90924,-0.84325,1.90923,-0.5,0.3,6.43,0.09,-1.55229,-0.84326,2.98451,1.41035,1.90923,2.99550 +2026-10-11T15:14:21,12400,-0.002,8.83e+12,993,971,-0.84326,1.90925,-0.84327,1.90924,-0.0,-0.2,6.62,-0.12,-1.55229,-0.84326,2.98454,1.41036,1.90923,2.99549 +2026-10-11T15:17:41,12400,-0.002,8.86e+12,995,968,-0.84327,1.90923,-0.84326,1.90921,-0.2,0.2,6.43,0.13,-1.55230,-0.84328,2.98450,1.41035,1.90922,2.99549 +2026-10-12T09:45:04,12400,0.000,8.91e+12,983,951,-0.84303,1.90992,-0.84353,1.90914,-0.7,-0.3,4.88,0.31,-1.55229,-0.84354,2.98386,1.41029,1.90909,2.99524 +2026-10-14T08:55:40,12400,0.000,8.77e+12,1033,1005,-0.84345,1.90907,-0.84247,1.91088,-0.5,0.3,10.83,0.85,-1.55198,-0.84249,2.98585,1.41119,1.91089,2.99878 +2026-10-15T09:34:37,12400,-0.000,8.83e+12,959,923,-0.84246,1.91085,-0.84368,1.90935,0.7,-0.0,8.69,0.17,-1.55226,-0.84369,2.98353,1.41042,1.90936,2.99573 +2026-10-16T08:40:24,12400,-0.000,8.80e+12,1004,979,-0.84368,1.90932,-0.84343,1.90991,0.2,0.1,13.56,0.51,-1.55222,-0.84343,2.98403,1.41066,1.90985,2.99675 +2026-10-16T15:14:36,12400,-0.000,8.78e+12,982,956,-0.84344,1.90983,-0.84379,1.90948,0.6,-0.1,12.88,0.34,-1.55234,-0.84380,2.98332,1.41047,1.90947,2.99601 +2026-10-17T12:28:51,12400,-0.038,9.12e+12,1017,1181,-0.84379,1.90942,-0.83817,1.91044,-0.2,-0.6,6.60,-5.16,-1.55092,-0.83817,2.99459,1.41097,1.91047,2.99800 +2026-10-17T21:52:03,12400,-0.042,9.16e+12,993,968,-0.83965,1.91067,-0.83966,1.91068,-0.2,0.1,6.30,-3.83,-1.55129,-0.83964,2.99155,1.41106,1.91066,2.99839 +2026-10-19T09:06:34,12400,-0.044,9.12e+12,987,952,-0.83966,1.91067,-0.84014,1.91068,0.8,-0.2,5.30,-4.09,-1.55137,-0.84013,2.99058,1.41107,1.91067,2.99843 diff --git a/pxii_bec/daily_setup_files/daily_report.pdf b/pxii_bec/daily_setup_files/daily_report.pdf new file mode 100644 index 0000000..836c23c Binary files /dev/null and b/pxii_bec/daily_setup_files/daily_report.pdf differ diff --git a/pxii_bec/daily_setup_files/weekly_beamline_health.csv b/pxii_bec/daily_setup_files/weekly_beamline_health.csv new file mode 100644 index 0000000..a2fc871 --- /dev/null +++ b/pxii_bec/daily_setup_files/weekly_beamline_health.csv @@ -0,0 +1,21 @@ +"timestamp","energy_eV","id_gap_mm","pitch_offset_mrad","fe_x","fe_y","bsf_x","bsf_y","ss_x","ss_y","lu_Xnorm","lu_Ynorm","ss_Xnorm","ss_Ynorm","bcu_Xnorm","bcu_Ynorm","bcu_beam_x","bcu_beam_y" +"2026-09-24T21:42:20",12400,5.307,-0.0426,0.14,0.872,0.099,0.153,0.215,-0.644,,,,,,,, +"2026-09-28T19:57:16",12400,5.307,-0.0445,0.14,0.872,0.105,0.148,0.221,-0.64,,,,,,,, +"2026-09-28T20:08:25",12400,5.307,-0.0444,0.14,0.872,0.104,0.148,0.224,-0.64,-0.0016,-0.0111,-0.014,,0.1135,-0.1181,, +"2026-09-30T08:58:15",12400,5.307,-0.0445,0.14,0.886,0.104,0.17,0.196,-0.22,0.0816,0.4118,0.0335,,-0.1125,-0.8165,, +"2026-09-30T09:08:53",12400,5.307,-0.0425,0.14,0.865,0.104,0.144,0.244,-1.018,-0.064,-0.2892,-0.0794,,0.0347,0.9834,, +"2026-09-30T10:49:14",12400,5.307,-0.042,0.14,0.874,0.103,0.152,0.219,-0.635,0.0121,-0.0176,0.0116,,-0.0384,-0.0568,, +"2026-09-30T11:04:59",12400,5.307,-0.0417,0.14,0.874,0.103,0.152,0.22,-0.641,0.0119,-0.0123,0.0135,-0.0026,-0.0427,-0.0612,, +"2026-09-30T11:39:23",12400,5.307,-0.042,0.14,0.874,0.102,0.152,0.22,-0.641,0.0135,-0.0108,0.0095,0.0004,-0.0371,-0.0659,5.64,-1.65 +"2026-09-30T11:45:21",12400,5.307,-0.0417,0.14,0.874,0.102,0.152,0.224,-0.639,0.014,-0.0129,0.0118,-0.0001,-0.0399,-0.0652,6.1,-1.63 +2026-09-30T12:07:53,12400,5.307,-0.042,0.14,0.874,0.101,0.152,0.219,-0.639,0.0145,-0.0108,0.0138,0.000447,-0.0467,-0.066,7.24,-1.65 +2026-09-30T12:15:59,12400,5.307,-0.0418,0.14,0.874,0.101,0.152,0.221,-0.639,0.0144,-0.0105,0.012,-0.00118,-0.0414,-0.0618,6.36,-1.54 +2026-10-07T09:34:08,12400,5.307,-0.1193,0.130,0.881,0.088,0.163,0.184,-0.589,0.0961,0.0611,-0.0289,-0.1239,-0.1618,-0.0831,26.4,-2.1 +2026-10-11T14:05:28,12400,5.310,-0.0036,0.130,0.873,0.092,0.156,0.180,-0.637,0.0954,0.0073,-0.0118,0.0191,-0.0440,-0.0014,3.8,-0.1,0.25 +2026-10-11T14:14:13,12400,5.310,-0.0033,,,0.093,0.156,0.182,-0.636,0.0977,0.0072,-0.0168,0.0181,-0.0418,-0.0021,3.5,-0.1,0.25 +2026-10-11T14:23:25,12400,5.310,-0.0019,,,0.093,0.156,0.181,-0.637,0.1022,0.0046,-0.0068,0.0224,-0.0518,-0.0005,5.1,-0.1,0.25 +2026-10-11T14:30:23,12400,5.310,-0.0013,,,0.093,0.156,0.185,-0.635,0.0970,0.0061,-0.0078,0.0209,-0.0287,-0.0040,1.3,-0.2,0.25 +2026-10-11T14:45:55,12400,5.310,-0.0021,,,,,,,,,,,,,,,0.25 +2026-10-11T15:00:21,12400,5.310,-0.0023,0.130,0.873,0.093,0.174,0.177,-0.636,0.1009,0.0066,-0.0069,0.0183,-0.0608,-0.0088,6.6,-0.3,0.25 +2026-10-14T08:55:03,12400,5.310,0.0001,0.130,0.873,0.085,0.157,0.172,-0.638,0.1177,0.0063,-0.0048,0.0302,-0.0618,-0.0162,6.8,-0.5,0.25 +2026-10-17T12:28:09,12400,5.309,-0.0382,0.125,0.881,0.077,0.167,0.171,-0.529,0.1176,0.0800,-0.0212,-0.2063,-0.0501,-0.4810,4.8,-7.0,0.25 diff --git a/pxii_bec/daily_setup_files/weekly_beamline_health2.csv b/pxii_bec/daily_setup_files/weekly_beamline_health2.csv new file mode 100644 index 0000000..9338177 --- /dev/null +++ b/pxii_bec/daily_setup_files/weekly_beamline_health2.csv @@ -0,0 +1,10 @@ +timestamp,energy_eV,id_gap_mm,pitch_offset_mrad,fe_x,fe_y,bsf_x,bsf_y,ss_x,ss_y,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_Xnorm,bcu_Ynorm,bcu_beam_x,bcu_beam_y +2026-09-24T21:42:20,12400.0338140146,5.307,-0.042640079687493,0.140288499999999,0.872397500000001,0.097923887634334,0.153298136901654,0.21542,-0.64411,,,,,,,, +2026-09-28T19:57:16,12399.9628462791,5.307,-0.044554079687435,0.140375499999999,0.872320000000001,0.105040205383357,0.148134944152631,0.22142,-0.6395,,,,,,,, +2026-09-28T20:08:25,12399.9609373482,5.307,-0.044496079687582,0.1403535,0.872312500000001,0.104503286743221,0.148356196594037,0.22431,-0.64021,-0.001605502500174,-0.011175883290173,-0.01409593110007,,0.11351579437023,-0.118069917719052,, +2026-09-30T08:58:15,12399.7329928229,5.307,-0.044525079687622,0.139911,0.88608,0.10406555023199,0.17099928588847,0.19652,-0.2202,0.081590727629084,0.411812820368516,0.033582789254866,,-0.112479632399972,-0.816516017074602,, +2026-09-30T09:08:53,12399.747477715,5.307,-0.042524079687558,0.139926999999998,0.864803500000001,0.103701246643123,0.143616435241498,0.24392,-1.0175,-0.063997780917417,-0.289248157407647,-0.079407668513141,,0.034774101807238,0.983399612330604,, +2026-09-30T10:49:14,12400.0475135773,5.30728340148926,-0.042002079687512,0.139973999999999,0.8737165,0.103015554809627,0.152205226135052,0.2194,-0.6346,0.012092898871937,-0.017654174479793,0.01164915499848,,-0.038458560216091,-0.056822442194876,, +2026-09-30T11:04:59,12400.034824637,5.30728340148926,-0.041712079687562,0.140038499999999,0.873851000000002,0.102714193725642,0.152251956176556,0.22052,-0.64071,0.01188100007843,-0.012323516377797,0.013475582102897,-0.002578973845116,-0.042749327098526,-0.061238705041222,, +2026-09-30T11:39:23,12400,5.307,-0.042,0.140108499999998,0.873990000000001,0.102007521057185,0.152334925842084,0.22002,-0.64121,0.0135,-0.0108,0.0095,0.000379,-0.0371,-0.0659,5.64,-1.65 +2026-09-30T11:45:21,12400,5.307,-0.0417,0.14,0.874,0.102,0.152,0.224,-0.639,0.014,-0.0129,0.0118,-0.0001,-0.0399,-0.0652,6.1,-1.63 diff --git a/pxii_bec/device_configs/__init__.py b/pxii_bec/device_configs/__init__.py old mode 100644 new mode 100755 diff --git a/pxii_bec/device_configs/pxii-beamline-states.yaml b/pxii_bec/device_configs/pxii-beamline-states.yaml old mode 100644 new mode 100755 diff --git a/pxii_bec/device_configs/pxii-devices.yaml b/pxii_bec/device_configs/pxii-devices.yaml old mode 100644 new mode 100755 index 7fa50c9..d653a2e --- a/pxii_bec/device_configs/pxii-devices.yaml +++ b/pxii_bec/device_configs/pxii-devices.yaml @@ -55,8 +55,8 @@ aerotech: deviceConfig: prefix: http://mx-x10sa-queue-01:5234 deviceTags: - - motors - aerotech + - motors enabled: true onFailure: buffer readoutPriority: baseline @@ -65,15 +65,15 @@ aerotech: mount: 0 work: 0 x: - in: -8.1e-06 + in: 0.05999735 out: -10 safe: -50 y: mount: -0.0 - work: -0.02600108 + work: -0.03099898 z: mount: 0 - work: -0.00900383 + work: -0.0090031 bcu_bpm1: description: BCU BPM Channel 1 deviceClass: ophyd.EpicsSignalRO @@ -302,7 +302,7 @@ bs_x: onFailure: buffer readoutPriority: baseline userParameter: - in: 0.39119736 + in: 0.44000227 bs_y: description: Beamstop Y deviceClass: ophyd_devices.EpicsMotor @@ -314,7 +314,7 @@ bs_y: onFailure: buffer readoutPriority: baseline userParameter: - in: 0.76699895 + in: -3.3000017 bs_z: description: Beamstop Z deviceClass: ophyd_devices.EpicsMotor @@ -330,7 +330,7 @@ bs_z: max_blout: 70 min: 13 safe: 45.1 - samp: 16.408 + samp: 16.80557617 type: continuous work_min: 20 bsf_f1_y: @@ -444,7 +444,7 @@ coll_x: onFailure: buffer readoutPriority: baseline userParameter: - in: 0.67471002 + in: 0.68249115 coll_y: description: Collimator Y deviceClass: ophyd_devices.EpicsMotor @@ -456,7 +456,7 @@ coll_y: onFailure: buffer readoutPriority: baseline userParameter: - in: 39.02 + in: 39.01884961 intermediate: 32 out: 20.002 park: 1 @@ -560,6 +560,8 @@ dcm_pitch: enabled: true onFailure: buffer readoutPriority: baseline + userParameter: + offset: 0 dcm_x: description: DCM Lateral deviceClass: ophyd_devices.EpicsMotorEC @@ -1310,6 +1312,17 @@ samcam_sigma: onFailure: buffer readOnly: true readoutPriority: monitored +samcam_thresh: + description: Sample Camera Threshold + deviceClass: ophyd.EpicsSignal + deviceConfig: + auto_monitor: true + read_pv: X10SA-ES-MS:Stats5:CentroidThreshold + deviceTags: + - scam + enabled: true + onFailure: buffer + readoutPriority: baseline samcam_x: description: Sample Camera X deviceClass: ophyd.EpicsSignalRO @@ -1322,6 +1335,29 @@ samcam_x: onFailure: buffer readOnly: true readoutPriority: monitored +samcam_xcurs: + description: Sample Camera X Cursor + deviceClass: ophyd.EpicsSignal + deviceConfig: + auto_monitor: true + read_pv: X10SA-ES-MS:Stats5:CursorX + deviceTags: + - scam + enabled: true + onFailure: buffer + readoutPriority: baseline +samcam_xcursprof: + description: Sample Camera X Cursor Profile + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: X10SA-ES-MS:Stats5:ProfileCursorX_RBV + deviceTags: + - scam + enabled: true + onFailure: buffer + readOnly: true + readoutPriority: monitored samcam_xsig: description: Sample Camera X Sigma deviceClass: ophyd.EpicsSignalRO @@ -1346,6 +1382,18 @@ samcam_y: onFailure: buffer readOnly: true readoutPriority: monitored +samcam_ycursprof: + description: Sample Camera Y Cursor Profile + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: X10SA-ES-MS:Stats5:ProfileCursorY_RBV + deviceTags: + - scam + enabled: true + onFailure: buffer + readOnly: true + readoutPriority: monitored samcam_ysig: description: Sample Camera Y Sigma deviceClass: ophyd.EpicsSignalRO @@ -1723,7 +1771,6 @@ transm: deviceClass: ophyd_devices.EpicsSignal deviceConfig: read_pv: X10SA-ES-SSFI:TRANSM-SET - write_pv: X10SA-ES-SSFI:TRANSM-SET deviceTags: - transm enabled: true diff --git a/pxii_bec/device_configs/pxii-devices.yaml.broken b/pxii_bec/device_configs/pxii-devices.yaml.broken old mode 100644 new mode 100755 diff --git a/pxii_bec/device_configs/pxii-devices.yaml.old b/pxii_bec/device_configs/pxii-devices.yaml.old old mode 100644 new mode 100755 diff --git a/pxii_bec/device_configs/x10sa_device_config.yaml b/pxii_bec/device_configs/x10sa_device_config.yaml old mode 100644 new mode 100755 diff --git a/pxii_bec/macros/APscripts.py b/pxii_bec/macros/APscripts.py index 56b7a4e..e2c55be 100644 --- a/pxii_bec/macros/APscripts.py +++ b/pxii_bec/macros/APscripts.py @@ -9,8 +9,8 @@ import numpy as np import math import matplotlib.pyplot as plt -import sys -import time, datetime +import sys +import time, datetime ################################ ### BASIC BL PROGRAMS @@ -95,11 +95,12 @@ def angle(e, *hkl): return a + ############## def resol(dstart, dend, nsteps): res = (Dstart - Dend) / nsteps print(f"resolution is: {res}") - return res + return res ##################### @@ -145,8 +146,8 @@ def rock(**kwargs): from lmfit.models import LinearModel, GaussianModel # LorentzianModel import matplotlib.pyplot as plt - ## create a dock area: - dock_area = bec.gui.new(name="Rock", geometry = [4000, 900, 700, 700]) + ## create a dock area: + dock_area = bec.gui.new(name="Rock", geometry=[4000, 900, 700, 700]) wr = dock_area.new(bec.gui.available_widgets.Waveform) # width of rocking curve of perfect xtal: at 20 keV: 14 urad == 0.0008 deg @@ -208,7 +209,7 @@ def rock(**kwargs): wr.plot(device_x=mot, device_y=det) ##set names/axes first ! s = scans.line_scan(mot, -dx, dx, steps=50, exp_time=time, relative=True) - + if ax == 0: data_x = s.scan.live_data.dcm_pitch.dcm_pitch.val else: @@ -244,15 +245,14 @@ def rock(**kwargs): center=center, sigma=(data_x[-1] - data_x[0]) / 20, slope=slope, - intercept=intercept + intercept=intercept, ) - - # maxy = max(data_y) - # indmax = np.argmax(data_y) - # xm = data_x[indmax] - # p = model.make_params(amplitude=maxy, center=xm) - + # maxy = max(data_y) + # indmax = np.argmax(data_y) + # xm = data_x[indmax] + # p = model.make_params(amplitude=maxy, center=xm) + g = model.fit(data_y, p, x=data_x) print(f'Center: {g.params["center"].value:.5f} FWHM: {g.params["fwhm"].value:.5f}') @@ -273,15 +273,15 @@ def rock(**kwargs): return - ################################ ### Helper PROGRAMS + ############################# ### just reconfigure beaml ############################# def loadmac(): - + bec.macros.load_all_user_macros() # d, planner = init_beamline_environment() @@ -291,10 +291,12 @@ def loadmac(): ############################# def plotset(y): import matplotlib.pyplot as plt + plt.ion() plt.figure() plt.plot(y) - + + ################################ ### FITTING PROGRAMS @@ -303,67 +305,71 @@ def plotset(y): ############################# -def justfit(data_x, data_y, model="gauss", ibg=0): +def justfit(data_x, data_y, tmodel="gauss", ibg=0): """ just fit a fct of Gauss, Voigt or Lorentzian type, Examples: - gfit, xmax = justfit(data_x, data_y, model = "gauss", ibg =1) : Gauss, lin BG - gfit, xmax = justfit(data_x, data_y, model = "voigt", ibg =2) : Voigt, quadrat BG - gfit, xmax = justfit(data_x, data_y, model = "lorentz", ibg =0) : Lorentzian, no BG + gfit, xmax = justfit(data_x, data_y, tmodel = "gauss", ibg =1) : Gauss, lin BG + gfit, xmax = justfit(data_x, data_y, tmodel = "voigt", ibg =2) : Voigt, quadrat BG + gfit, xmax = justfit(data_x, data_y, tmodel = "lorentz", ibg =0) : Lorentzian, no BG """ from lmfit.models import LinearModel, GaussianModel, VoigtModel, QuadraticModel, LorentzianModel import matplotlib.pyplot as plt - peak = GaussianModel(prefix = 'g_') - pre='g' - if model == "voigt": - peak = VoigtModel(prefix = 'v_') - pre='v' - if model == "lorentz": - peak = LorentzianModel(prefix = 'l_') - pre='l' - + peak = GaussianModel(prefix="g_") + pre = "g" + print("MODEL JUSTFIT = ", tmodel, peak) + if tmodel == "voigt": + peak = VoigtModel(prefix="v_") + pre = "v" + if tmodel == "lorentz": + peak = LorentzianModel(prefix="l_") + pre = "l" + + data_x = np.asarray(data_x) + data_y = np.asarray(data_y) model = peak - ypeak = data_y - pars = model.guess(data_y, x = data_x) - indmax = np.argmax(ypeak) - xm = data_x[indmax] + ypeak = data_y + pars = model.guess(data_y, x=data_x) + + indmax = np.argmax(ypeak) + xm = data_x[indmax] + if ibg: - background = LinearModel(prefix = 'bg_') + background = LinearModel(prefix="bg_") model = peak + background ### estimate initial params separately for both parts of the model # 1) BG - n = len(data_x) - edge= n//10 - idx=np.r_[0:edge, n-edge:n] # first and last part of the range - #m0, b0 = np.polyfit(data_x[idx], data_y[idx],1) - #ypeak= data_y - (m0*data_x + b0) # subtract linear part + n = len(data_x) + edge = n // 10 + idx = np.r_[0:edge, n - edge : n] # first and last part of the range + # m0, b0 = np.polyfit(data_x[idx], data_y[idx],1) + # ypeak= data_y - (m0*data_x + b0) # subtract linear part - pars = background.guess(data_y[idx], x = data_x[idx]) - - # 2) Function - BG - ypeak= data_y - (pars['bg_slope']*data_x + pars['bg_intercept'])# subtract linear part - pars.update( peak.guess(ypeak, x= data_x) ) - + pars = background.guess(data_y[idx], x=data_x[idx]) + + # 2) Function - BG + ypeak = data_y - (pars["bg_slope"] * data_x + pars["bg_intercept"]) # subtract linear part + pars.update(peak.guess(ypeak, x=data_x)) g = model.fit(data_y, pars, x=data_x) # diagnostics # print(f'Gfit: {g.params}') - #print(f'Center of {model} fit: {g.pars["center"].value:.5f}') - #print(f'Sigma: {g.pars["sigma"].value:.5f}') - #print(f'FWHM: {g.pars["fwhm"].value:.5f}') + # print(f'Center of {model} fit: {g.pars["center"].value:.5f}') + # print(f'Sigma: {g.pars["sigma"].value:.5f}') + # print(f'FWHM: {g.pars["fwhm"].value:.5f}') print(g.fit_report()) print(f"Position of maximum: {xm}") return g, xm -def fit_plothist(hindex: int, signal_name: str, model="gauss", ibg=0): +def fit_plothist(hindex: int, signal_name: str, tmodel="gauss", ibg=0): """ Get data for a completed scan from the BEC history, (gaussian, voigt, lorentzian + zero, lin, quadrat BG) fit, and plot all the results. @@ -373,7 +379,7 @@ def fit_plothist(hindex: int, signal_name: str, model="gauss", ibg=0): signal_name (str): the monitor Example: - gcen, xm , data_x, data_y = fit_plothist(-10, "lu_bpmsum",model="gauss", ibg=2) + gcen, xm , data_x, data_y = fit_plothist(-10, "lu_bpmsum", tmodel="gauss", ibg=2) """ @@ -382,19 +388,21 @@ def fit_plothist(hindex: int, signal_name: str, model="gauss", ibg=0): if hindex < 0: h = bec.history[hindex] - print('by scan number') + print("by scan number") else: h = bec.history.get_by_scan_number(hindex) - print('by scan number') + print("by scan number") md = h.metadata["bec"] - scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan + #scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan + # note: no longer, but + # md["positions"] will work # data = h.devices[device_name][signal].read()["value"] # data_x = h.devices.dcm_pitch.dcm_pitch.read()["value"] # data_y = h.devices.lu_bpmsum.lu_bpmsum.read()["value"] ## that should work in any case: - device_name = scanvar - #data_x = h.devices[device_name][device_name].read()["value"] + device_name = md["scan_report_devices"][0].decode() + # data_x = h.devices[device_name][device_name].read()["value"] data_xd = md["positions"] # last scan knows which device ... however, double array data_x = data_xd.flatten() @@ -402,22 +410,25 @@ def fit_plothist(hindex: int, signal_name: str, model="gauss", ibg=0): data_y = h.devices[signal_name][signal_name].read()["value"] print("dy = ", data_y) - prefix='v_' - if model == 'gauss': - prefix='g_' - - g, xm = justfit(data_x, data_y, model=model, ibg=ibg) + data_x = np.asarray(data_x) + data_y = np.asarray(data_y) + + prefix = "v_" + if tmodel == "gauss": + prefix = "g_" + + g, xm = justfit(data_x, data_y, tmodel=tmodel, ibg=ibg) plt.ion() plt.figure() plt.plot(data_x, data_y, "*") plt.plot(data_x, g.best_fit) - plt.xlabel(scanvar) + plt.xlabel("motor pos") plt.ylabel(signal_name) plt.show() # g.params - returncenvar = prefix+"center" + returncenvar = prefix + "center" gcen = g.params[returncenvar].value return gcen, xm, data_x, data_y @@ -428,7 +439,7 @@ def fit_plothist(hindex: int, signal_name: str, model="gauss", ibg=0): ######################### -def fit_plot(data_x, data_y, model="gauss", ibg=1, silent=0,fitrange=0, fitclick=0): +def fit_plot(data_x, data_y, tmodel="gauss", ibg=1, silent=0, iplot=1, fitrange=0, fitclick=0): """ Get data for a completed scan, gaussian, voigt or lorentzian fit, default = gauss, plus linear background @@ -438,7 +449,7 @@ def fit_plot(data_x, data_y, model="gauss", ibg=1, silent=0,fitrange=0, fitclic Args: datax , datay Example: - fit_plot(dx,dy, model='voigt', fitrange=0, fitclick=1) + fit_plot(dx,dy, tmodel='voigt', fitrange=0, fitclick=1) """ @@ -447,7 +458,9 @@ def fit_plot(data_x, data_y, model="gauss", ibg=1, silent=0,fitrange=0, fitclic import numpy as np print("dy = ", data_y) - + print("MODEL = ", tmodel) + data_x = np.asarray(data_x) + data_y = np.asarray(data_y) ####### check the order of the data: lower --> upper ? if not, reverse all the indices! sz = len(data_x) if data_x[sz - 1] < data_x[0]: @@ -470,53 +483,52 @@ def fit_plot(data_x, data_y, model="gauss", ibg=1, silent=0,fitrange=0, fitclic print("dy=", data_y) ##### - peak = GaussianModel(prefix = 'g_') - pre='g_' - if model == "voigt": - peak = VoigtModel(prefix = 'v_') - pre='v_' - if model == "lorentz": - peak = LorentzianModel(prefix = 'l_') - pre='l_' + peak = GaussianModel(prefix="g_") + pre = "g_" + if tmodel == "voigt": + peak = VoigtModel(prefix="v_") + pre = "v_" + if tmodel == "lorentz": + peak = LorentzianModel(prefix="l_") + pre = "l_" model = peak - ypeak = data_y - pars = model.guess(data_y, x = data_x) + ypeak = data_y + pars = model.guess(data_y, x=data_x) indmax = np.argmax(ypeak) - xm = data_x[indmax] - - if ibg: - background = LinearModel(prefix = 'bg_') - model = peak + background + xm = data_x[indmax] + if ibg: + background = LinearModel(prefix="bg_") + model = peak + background + ### estimate initial params separately for both parts of the model # 1) BG - n = len(data_x) - edge= n//10 - idx=np.r_[0:edge, n-edge:n] # first and last part of the range - #m0, b0 = np.polyfit(data_x[idx], data_y[idx],1) - #ypeak= data_y - (m0*data_x + b0) # subtract linear part + n = len(data_x) + edge = n // 10 + idx = np.r_[0:edge, n - edge : n] # first and last part of the range + # m0, b0 = np.polyfit(data_x[idx], data_y[idx],1) + # ypeak= data_y - (m0*data_x + b0) # subtract linear part - pars = background.guess(data_y[idx], x = data_x[idx]) - - # 2) Function - BG - ypeak= data_y - (pars['bg_slope']*data_x + pars['bg_intercept'])# subtract linear part - pars.update( peak.guess(ypeak, x= data_x) ) - + pars = background.guess(data_y[idx], x=data_x[idx]) + + # 2) Function - BG + ypeak = data_y - (pars["bg_slope"] * data_x + pars["bg_intercept"]) # subtract linear part + pars.update(peak.guess(ypeak, x=data_x)) g = model.fit(data_y, pars, x=data_x) ##### + if iplot: + plt.ion() + plt.figure() + plt.plot(data_x, data_y, "*") + plt.plot(data_x, g.best_fit) + plt.xlabel("x-axis") + plt.ylabel("signal") + plt.show() - plt.ion() - plt.figure() - plt.plot(data_x, data_y, "*") - plt.plot(data_x, g.best_fit) - plt.xlabel("x-axis") - plt.ylabel("signal") - plt.show() - - if fitclick: + if fitclick * iplot: print("Please define the x-range of the fit via click of graph") print("First click for start: ") x1 = plt.ginput(1) @@ -539,8 +551,8 @@ def fit_plot(data_x, data_y, model="gauss", ibg=1, silent=0,fitrange=0, fitclic data_y = data_y[closest_low:closest_high] print("dx=", data_x) print("dy=", data_y) - - g, xm = justfit(data_x, data_y, model=model, ibg=ibg) + + g, xm = justfit(data_x, data_y, tmodel=tmodel, ibg=ibg) plt.figure() plt.plot(data_x, data_y, "*") @@ -550,25 +562,24 @@ def fit_plot(data_x, data_y, model="gauss", ibg=1, silent=0,fitrange=0, fitclic plt.ylabel("signal") plt.show() - # g.params - returncenvar = pre+"center" + returncenvar = pre + "center" gcen = g.params[returncenvar].value - print('gcen =', gcen) - if (not silent): + print("gcen =", gcen) + if not silent: print(g.fit_report()) # fit_id = pre+'_center' - - #center = g.pars[fit_id].value - return gcen, xm + + # center = g.pars[fit_id].value + return gcen, xm #################################### ### just SAVE DATA #################################### -def save_data(hindex: int, device_name: str, signal_name: str, isave = 1): +def save_data(hindex: int, device_name: str, signal_name: str, isave=1): """ Get data for a completed scan from the BEC history, and plot all the results, store in a CSV file @@ -576,13 +587,15 @@ def save_data(hindex: int, device_name: str, signal_name: str, isave = 1): Args: history_index (int): scan to fetch, e.g. -1 for the most recent scan device_name (str): the device for which to get the monitoring data, eg, device_name='dcm_pitch' - signal_name (str): the monitor, eg, signal_name='lu_bpmsum' + signal_name (str): the monitor, eg, signal_name='lu_bpmsum' """ h = bec.history[hindex] md = h.metadata["bec"] - print("Scan argument was ", md["args"]) + #print("Scan argument was ", md["args"]) + # or data_xd = md["positions"], data_x = data_xd.flatten() + # device_name = md["scan_report_devices"][0].decode() data_x = h.devices[device_name][device_name].read()["value"] data_y = h.devices[signal_name][signal_name].read()["value"] @@ -595,7 +608,7 @@ def save_data(hindex: int, device_name: str, signal_name: str, isave = 1): plt.ylabel(f"{signal_name} / AU") plt.show() - if isave: + if isave: ans = "n" ans = input("Store data in csv file? y/n ") if ans == "y": @@ -604,7 +617,7 @@ def save_data(hindex: int, device_name: str, signal_name: str, isave = 1): combined = np.column_stack((data_x, data_y)) filename = dirname + "Scan" + str(hindex) + device_name + ".txt" with open(filename, "w") as f: - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") return data_x, data_y @@ -673,7 +686,7 @@ def save_plot_gaps(hindex: int, device_name: str, signal_name: str): """ Get data for a completed scan from the BEC history, and plot all the results, store in a CSV file - For a certain gap size, scan through energy (Bragg angle) + For a certain gap size, scan through energy (Bragg angle) Args: history_index (int): scan to fetch, e.g. -1 for the most recent scan @@ -681,11 +694,12 @@ def save_plot_gaps(hindex: int, device_name: str, signal_name: str): signal_name (str): the monitor """ - from lmfit.models import LinearModel, GaussianModel import matplotlib.pyplot as plt h = bec.history[hindex] md = h.metadata["bec"] + #device_name = md["scan_report_devices"][0].decode() + # data = h.devices[device_name][signal].read()["value"] # data_x = h.devices.dcm_pitch.dcm_pitch.read()["value"] # data_y = h.devices.lu_bpmsum.lu_bpmsum.read()["value"] @@ -712,7 +726,7 @@ def save_plot_gaps(hindex: int, device_name: str, signal_name: str): combined = np.column_stack((en_vec, data_y)) filename = dirname + "EnScan" + str(hindex) + ".txt" with open(filename, "w") as f: - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") return @@ -750,10 +764,10 @@ def getdiodepos(diode="i1"): def read_mon(): - #from datetime import datetime + # from datetime import datetime e = getenergy() - #fesum = dev.fe_bpmsum.read()["fe_bpmsum"]["value"] + # fesum = dev.fe_bpmsum.read()["fe_bpmsum"]["value"] lusum = dev.lu_bpmsum.read()["lu_bpmsum"]["value"] sssum = dev.ss_bpmsum.read()["ss_bpmsum"]["value"] @@ -772,18 +786,17 @@ def read_mon(): vbpitch = dev.vfm_pitch.read()["vfm_pitch"]["value"] vbyaw = dev.vfm_yaw.read()["vfm_yaw"]["value"] vbroll = dev.vfm_roll.read()["vfm_roll"]["value"] - vfm_x= dev.vfm_x.read()["vfm_x"]["value"] - vfm_y= dev.vfm_y.read()["vfm_y"]["value"] - + vfm_x = dev.vfm_x.read()["vfm_x"]["value"] + vfm_y = dev.vfm_y.read()["vfm_y"]["value"] + # KB H hbu = dev.hfm_bu.read()["hfm_bu"]["value"] hbd = dev.hfm_bd.read()["hfm_bd"]["value"] hbpitch = dev.hfm_pitch.read()["hfm_pitch"]["value"] hbyaw = dev.hfm_yaw.read()["hfm_yaw"]["value"] hbroll = dev.hfm_roll.read()["hfm_roll"]["value"] - hfm_x= dev.hfm_x.read()["hfm_x"]["value"] - hfm_y= dev.hfm_y.read()["hfm_y"]["value"] - + hfm_x = dev.hfm_x.read()["hfm_x"]["value"] + hfm_y = dev.hfm_y.read()["hfm_y"]["value"] ## FE slits centre and size fe_sl_xcen = dev.fe_sl_xcen.read()["fe_sl_xcen"]["value"] @@ -828,19 +841,17 @@ def read_mon(): xeye_x_pos = dev.xi_x.read()["xi_x"]["value"] bcusum = 0 i1signal = 0 - #if xeye_x_pos < 0: + # if xeye_x_pos < 0: bcusum = dev.bcu_bpmsum.read()["bcu_bpmsum"]["value"] i1signal = dev.i1.read()["i1"]["value"] print("Energy = ", e, " keV") - #print(f"fesum,lusum,sssum,bcusum,i1signal = {fesum,lusum,sssum,bcusum,i1signal}") + # print(f"fesum,lusum,sssum,bcusum,i1signal = {fesum,lusum,sssum,bcusum,i1signal}") print(f"lusum,sssum,bcusum,i1signal = {lusum,sssum,bcusum,i1signal}") print(f"bragg, pitch, perp, fpitch, froll, gap = {bragg, pitch,perp, fpitch, froll, gap}") # return e, fesum,lusum,sssum,bcusum,i1signal print("KB VERT") - print( - f"vbu, vbd, vbpitch,vbyaw,vbroll,vbvert = {vbu, vbd, vbpitch,vbyaw,vbroll,vfm_x, vfm_y}" - ) + print(f"vbu, vbd, vbpitch,vbyaw,vbroll,vbvert = {vbu, vbd, vbpitch,vbyaw,vbroll,vfm_x, vfm_y}") # return vbu, vbd, vbpitch,vbyaw,vbroll,vblat,vbvert print("KB HORI") print( @@ -855,41 +866,41 @@ def read_mon(): with open(filename, "w") as f: combined = np.column_stack((e, gap)) f.write("En and gap\n") - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") f.write("bragg, pitch,perp, fpitch, froll\n") combined = np.column_stack((bragg, pitch, perp, fpitch, froll)) - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") f.write("vbu, vbd, vbpitch,vbyaw,vbroll,vbvert\n") - combined = np.column_stack((vbu, vbd, vbpitch, vbyaw, vbroll, vfm_x, vfm_y)) - np.savetxt(f, combined, delimiter=",", fmt="%5f") + combined = np.column_stack((vbu, vbd, vbpitch, vbyaw, vbroll, vfm_x, vfm_y)) + np.savetxt(f, combined, delimiter=",", fmt="%.5f") f.write("hbu, hbd, hbpitch,hbyaw,hbroll,hblat,hbvert\n") - combined = np.column_stack((hbu, hbd, hbpitch, hbyaw, hbroll, hfm_x, hfm_y)) - np.savetxt(f, combined, delimiter=",", fmt="%5f") + combined = np.column_stack((hbu, hbd, hbpitch, hbyaw, hbroll, hfm_x, hfm_y)) + np.savetxt(f, combined, delimiter=",", fmt="%.5f") f.write("FE slits\n") combined = np.column_stack((fe_sl_xcen, fe_sl_xsize, fe_sl_ycen, fe_sl_ysize)) - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") f.write("BSF slits\n") combined = np.column_stack((bsf_sl_xcen, bsf_sl_xsize, bsf_sl_ycen, bsf_sl_ysize)) - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") f.write("SS slits\n") combined = np.column_stack((ss_sl_xcen, ss_sl_xsize, ss_sl_ycen, ss_sl_ysize)) - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") f.write("BCU slits\n") combined = np.column_stack((bcu_sl_xcen, bcu_sl_xsize, bcu_sl_ycen, bcu_sl_ysize)) - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") - #f.write("fesum,lusum,sssum,bcusum,i1signal\n") - #combined = np.column_stack((fesum, lusum, sssum, bcusum, i1signal)) + # f.write("fesum,lusum,sssum,bcusum,i1signal\n") + # combined = np.column_stack((fesum, lusum, sssum, bcusum, i1signal)) f.write("lusum,sssum,bcusum,i1signal\n") combined = np.column_stack((lusum, sssum, bcusum, i1signal)) - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.5f") return @@ -945,7 +956,7 @@ def colliscan(direction: str, range=0.3, nsteps=30, stime=0.5, centre=1): """ import sys - dock_area = bec.gui.new(name="ColliScan", geometry = [4000, 900, 700, 700]) + dock_area = bec.gui.new(name="ColliScan", geometry=[4000, 900, 700, 700]) wr = dock_area.new(bec.gui.available_widgets.Waveform) # check if i1 DIODE is IN @@ -1013,7 +1024,7 @@ def colliscan(direction: str, range=0.3, nsteps=30, stime=0.5, centre=1): ##################### ### SLITSCANS ##################### -def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0): +def slitscan(device_location: str, direction: str, range=1, nsteps=50, centre=0): """ Slit scan, and possible centre and plot all the results. @@ -1024,7 +1035,7 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0 nsteps: default = 50 move to centre or not [0/1] - Example: slitscan("fe","h", 30, centre=1) + Example: slitscan("fe","h",1, 30, centre=1) """ @@ -1039,7 +1050,7 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0 default_h = 1.0 ## 1.4 or 0.4 or ??? default_v = 1.0 ## 1.2 det = dev.lu_bpmsum - if direction in ["x","h"]: + if direction in ["x", "h"]: mot = dev.fe_sl_xcen size = dev.fe_sl_xsize s_closed = 0.1 @@ -1047,7 +1058,7 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0 else: mot = dev.fe_sl_ycen size = dev.fe_sl_ysize - + s_closed = 0.1 s_open = default_v @@ -1120,7 +1131,7 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0 print("Ok, cancelled") return - dock_area = bec.gui.new(name="SlitScan", geometry = [4000, 900, 700, 700]) + dock_area = bec.gui.new(name="SlitScan", geometry=[4000, 900, 700, 700]) wr = dock_area.new(bec.gui.available_widgets.Waveform) pos0 = mot.user_readback.get() @@ -1128,7 +1139,7 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0 umv(size, s_closed) wr.plot(device_x=mot, device_y=det) - + wr.x_label = mot.name wr.y_label = det.name @@ -1142,9 +1153,9 @@ def slitscan(device_location: str, direction: str, range: 1, nsteps=50, centre=0 data_y = s.scan.live_data.lu_bpmsum.lu_bpmsum.val if mot.name == "fe_sl_xcen": - data_x = s.scan.live_data.fe_sxcen.fe_sxcen.val + data_x = s.scan.live_data.fe_sl_xcen.fe_sl_xcen.val if mot.name == "fe_sl_ycen": - data_x = s.scan.live_data.fe_sycen.fe_sycen.val + data_x = s.scan.live_data.fe_sl_ycen.fe_sl_ycen.val # BSF slits ================================ if mot.name == "bsf_sl_xcen": data_x = s.scan.live_data.bsf_sl_xcen.bsf_sl_xcen.val @@ -1277,7 +1288,7 @@ def kbfocus(sizex, sizey): ########################### -def detxeye_in(setdetzpos = 200, setdetypos = 213.6): +def detxeye_in(setdetzpos=200, setdetypos=151.6): """ moves in the Xray eye and the Diode below detector """ @@ -1286,14 +1297,14 @@ def detxeye_in(setdetzpos = 200, setdetypos = 213.6): setzoom = 0.1 setxrpos = 0.0 - #setdetzpos = 200 # 200 better? - #setdetypos = 213.6 + # setdetzpos = 200 # 200 better? + # setdetypos = 213.6 ; after det pos 62 (?) set to 0 : 151.6 detzpos = dev.det_z.user_readback.get() detypos = dev.det_y.user_readback.get() print(f"detector position now: z = {detzpos}, y = {detypos}") - print(f"... moving to detector position: z = {setdetzpos}, y = {setdetypos}") + print(f"... moving to detector position: z = {setdetzpos}, y = {setdetypos}") ans = "n" ans = input("Is it ok to move detector in and up? y/n ") @@ -1308,14 +1319,14 @@ def detxeye_in(setdetzpos = 200, setdetypos = 213.6): print("moving X-ray eye below Eiger in") - #xrpos = dev.det_xi_x.user_readback.get() - #if abs(setxrpos - xrpos) > 1: + # xrpos = dev.det_xi_x.user_readback.get() + # if abs(setxrpos - xrpos) > 1: # umv(dev.det_xi_x, setxrpos) - #zoompos = dev.det_xi_zoom.user_readback.get() - #if abs(setzoom - zoompos) > 1: + # zoompos = dev.det_xi_zoom.user_readback.get() + # if abs(setzoom - zoompos) > 1: # umv(dev.det_xi_zoom, setzoom) - #focpos = dev.det_xi_focus.user_readback.get() - #if abs(setfoc - focpos) > 1: + # focpos = dev.det_xi_focus.user_readback.get() + # if abs(setfoc - focpos) > 1: # umv(dev.det_xi_focus, setfoc) @@ -1324,7 +1335,7 @@ def detxeye_out(): moves det back and down """ setdetzpos = 500 - setdetypos = 70 + setdetypos = 0 umv(dev.det_z, setdetzpos) detzpos = dev.det_z.user_readback.get() if detzpos > 300: @@ -1337,7 +1348,8 @@ def detxeye_out(): def measure_samcam(zoom=1000): - import sys + import sys + scinti_inpos = 36.4 # mm sc_rb = dev.diag_y.user_readback.get() if abs(scinti_inpos - sc_rb) > 0.3: @@ -1404,13 +1416,13 @@ def smoothplotgrad(dx, dy, reverse=0): plt.figure() plt.plot(dx, dy, "*") plt.plot(dx, gf) + plt.figure() - grf = np.gradient(gf) if reverse: grf = -grf plt.plot(dx, grf) - g, xm = justfit(dx, grf, model="gauss", ibg=0) + g, xm = justfit(dx, grf, tmodel="gauss", ibg=0) plt.plot(dx, g.best_fit) return @@ -1420,12 +1432,17 @@ def smoothplotgrad(dx, dy, reverse=0): ### enery scan program around a harmonic -def scan_eg(erange, nsteps=50, fit=True): +def scan_eg(erange, nsteps=50, iedge = 0, iresol = 0, fit=True): """ - Scan an energy range around a certain harmonic + Scan an energy range around a certain central energy, eg an edge or a harmonic scan_eg(erange, steps= 50, fit= True) # default scan_eg(erange, steps= 50, fit= False) # no fit wanted eg, erange = 12.4 *0.02 for a width of 2 % around 12.4 keV + FOR EN CAL check: + scan_eg(erange, steps= 50, iedge=1, fit= True) + eg, erange = 11.103 *0.005 for a width of 0.5 % around 11.103 keV + eg, erange = 11.103 *0.003 for a width of 0.3 % around 11.103 keV + """ import time from datetime import datetime @@ -1441,7 +1458,11 @@ def scan_eg(erange, nsteps=50, fit=True): e_start = e - erange e_end = e + erange - en_resol = (e_start - e_end) / nsteps + en_resol = 2* erange / nsteps + if iresol: + en_resol = float(input("Please enter resolution in keV ") ) + nsteps = round(2*erange/en_resol) + print(f"energy resolution is: {en_resol} keV") mot_scan = dev.dcm_bragg @@ -1462,6 +1483,8 @@ def scan_eg(erange, nsteps=50, fit=True): mot_perp_rb = mot_perp.user_readback.get() det = dev.lu_bpmsum + if iedge: + det = dev.bcu_bpmsum print(f"Position of bragg angle is {mot_scan_rb} mrad") print(f"Position of pitch angle is {mot_pitch_rb} mrad") @@ -1479,10 +1502,11 @@ def scan_eg(erange, nsteps=50, fit=True): s.scan.live_data.dcm_bragg.dcm_bragg.val ) # is a list and needs to be converted to array bpm_data = s.scan.live_data.lu_bpmsum.lu_bpmsum.val - + if iedge: + bpm_data = s.scan.live_data.bcu_bpmsum.bcu_bpmsum.val if fit: print("Bragg Angle") - bcen, xm = fit_plot(bragg_data, bpm_data, model="voigt", fitrange=1) + bcen, xm = fit_plot(bragg_data, bpm_data, tmodel="voigt", fitrange=1) print("") br_rad = np.array(bragg_data) / 1000.0 @@ -1490,8 +1514,14 @@ def scan_eg(erange, nsteps=50, fit=True): energy_data = 12.39842 / d0 / np.sin(br_rad) print("Energy") - ecen, xm = fit_plot(energy_data, bpm_data, model="voigt", fitclick=1) + ecen, xm = fit_plot(energy_data, bpm_data, tmodel="voigt", fitclick=1) + if iedge: + smoothplotgrad(bragg_data,bpm_data) + smoothplotgrad(energy_data,bpm_data) + + sete(e) # go back + ## save data to file ? ans = "n" @@ -1508,9 +1538,9 @@ def scan_eg(erange, nsteps=50, fit=True): tname = f"Scan_{timestamp}.txt" filename = dirname + tname with open(filename, "w") as f: - np.savetxt(f, combined, delimiter=",", fmt="%5f") + np.savetxt(f, combined, delimiter=",", fmt="%.9f") + - sete(e) # go back return @@ -1524,17 +1554,19 @@ def scan_eg(erange, nsteps=50, fit=True): ### open window/dock for long gap scan ################################################ # -### Note: all deprecated !!!! +### Note: all deprecated !!!! def scan_window(wname="Scan", fit=True): # Add a new dock with a Waveform to the BECDockArea - nam = "waveform_dock_"+wname - dock_area = bec.gui.new(name=wname, geometry = [4000, 900, 700, 700]) + nam = "waveform_dock_" + wname + dock_area = bec.gui.new(name=wname, geometry=[4000, 900, 700, 700]) - w1 = dock_area.new(bec.gui.available_widgets.Waveform) # CALL gui.available_widgets to see what is available + w1 = dock_area.new( + bec.gui.available_widgets.Waveform + ) # CALL gui.available_widgets to see what is available w2 = dock_area.new(bec.gui.available_widgets.ScanControl) # Add signals to the WaveformWidget - w1.plot(device_x = dev.id_gap, device_y = dev.lu_bpmsum) + w1.plot(device_x=dev.id_gap, device_y=dev.lu_bpmsum) ###w1.plot(device_x='id_gap', device_y='bpm') ###dock2 = dock_area.new(name="motor_dock", widget="MotorMap",relative_to=nam, position="right") @@ -1543,145 +1575,148 @@ def scan_window(wname="Scan", fit=True): gstart = 4.5 gend = 5.0 - resol = 0.003 # 3 um resol for gap scan - nsteps = round(gend-gstart)/resol - s = scans.line_scan(dev.id_gap, gstart, gend, steps = nsteps, exp_time = 0.1, relative = False) - - ### if done, remove - #w2.remove() + resol = 0.003 # 3 um resol for gap scan + nsteps = round(gend - gstart) / resol + s = scans.line_scan(dev.id_gap, gstart, gend, steps=nsteps, exp_time=0.1, relative=False) + + ### if done, remove + # w2.remove() + + ################################################ -### beam centre on detector with distance +### beam centre on detector with distance ################################################ -#/sls/x10sa/config/commissioning/Data +# /sls/x10sa/config/commissioning/Data + def readdist(filename): with open(filename, "r") as f: combined_data = np.loadtxt(f, delimiter=",") - + ind1 = 0 ind2 = 1 ind3 = 2 detdist = combined_data[:, ind1] bposx = combined_data[:, ind2] bposy = combined_data[:, ind3] - + plt.ion() plt.figure(1) - plt.plot(detdist,bposx, ".") + plt.plot(detdist, bposx, ".") plt.title("Bpos X vs Detectordist") plt.xlabel("dist / mm") plt.ylabel("bpos X in det pix ") - + plt.figure(2) - plt.plot(detdist,bposy, ".") + plt.plot(detdist, bposy, ".") plt.title("Bpos Y vs Detectordist") plt.xlabel("dist / mm") plt.ylabel("bpos Y in det pix ") plt.show() - return + return + ################################################ -### flux cal +### flux cal ################################################ + def read_av(signal, avlen): - #signal = dev.lu_bpmsum - + # signal = dev.lu_bpmsum + buf = [] - count =0 + count = 0 while count < avlen: - new_value = signal.read()[signal.name]['value'] - #new_value = dev.lu_bpmsum.read()['lu_bpmsum']["value"] + new_value = signal.read()[signal.name]["value"] + # new_value = dev.lu_bpmsum.read()['lu_bpmsum']["value"] buf.append(new_value) - count+=1 + count += 1 return sum(buf) / len(buf) - -def fitpoly(x,y, order): +def fitpoly(x, y, order): from scipy.optimize import curve_fit - + coeff = np.polyfit(x, y, order) polynomial = np.poly1d(coeff) print("Polynomial coefficients of the fit fct: ", order, coeff) x_fit = np.linspace(min(x), max(x), 100) y_fit = polynomial(x_fit) - + plt.ion() plt.figure() plt.title("X10SA Fl cal") plt.ylabel("fl/bcubpmsum") plt.title("E / keV") - + plt.plot(x, y, "*") plt.plot(x_fit, y_fit, color="blue") - def prepare_fluxmeas(): -# check all slits + # check all slits read_mon() -# + # print("preparing devices ...") ans = "n" ans = input("Is it safe to move det in and up and BS down? y/n ") if ans == "y": detxeye_in() bs_in = d["bs_y"].positions["in"] - #umv(dev.bs_y, bs_in +1) + # umv(dev.bs_y, bs_in +1) return -def fluxcal(start_en=13, stop_en=14, step =1): + +def fluxcal(start_en=13, stop_en=14, step=1): import time + # - tstart = time.perf_counter() # time logging - avlen= 10 - - dat_en=[] - dat_lubpm=[] - dat_ssbpm=[] - dat_bcubpm=[] - dat_xi=[] - dat_fluxi=[] - dat_quot_flbsum=[] - dat_i1=[] + tstart = time.perf_counter() # time logging + avlen = 10 + + dat_en = [] + dat_lubpm = [] + dat_ssbpm = [] + dat_bcubpm = [] + dat_xi = [] + dat_fluxi = [] + dat_quot_flbsum = [] + dat_i1 = [] diode_inpos = dev.diag_y.user_parameter["i1"] diode_outpos = dev.diag_y.user_parameter["out"] - for ei in range(start_en,stop_en+1, step): - bl_energy(ei*1000, plot = False) # in ev + for ei in range(start_en, stop_en + 1, step): + bl_energy(ei * 1000, plot=False) # in ev time.sleep(0.5) - #lusum = dev.lu_bpmsum.read()["lu_bpmsum"]["value"] - signal = dev.lu_bpmsum # "lu_bpmsum" + # lusum = dev.lu_bpmsum.read()["lu_bpmsum"]["value"] + signal = dev.lu_bpmsum # "lu_bpmsum" lusum = read_av(signal, avlen) - #sssum = dev.ss_bpmsum.read()["ss_bpmsum"]["value"] - signal = dev.ss_bpmsum # "ss_bpmsum" + # sssum = dev.ss_bpmsum.read()["ss_bpmsum"]["value"] + signal = dev.ss_bpmsum # "ss_bpmsum" sssum = read_av(signal, avlen) - - #bcusum = dev.bcu_bpmsum.read()["bcu_bpmsum"]["value"] - signal = dev.bcu_bpmsum #"bcu_bpmsum" + + # bcusum = dev.bcu_bpmsum.read()["bcu_bpmsum"]["value"] + signal = dev.bcu_bpmsum # "bcu_bpmsum" bcusum = read_av(signal, avlen) - - #xi = dev.xidiode.read()["xidiode"]["value"] - signal = dev.xidiode + # xi = dev.xidiode.read()["xidiode"]["value"] + signal = dev.xidiode xi = read_av(signal, avlen) - - fluxi = flux_x10sa(xi, ei, silent =1) - quot = fluxi/bcusum - - #i1diode = dev.i1.read()["i1"]["value"] - umv(dev.diag_y,diode_inpos) - signal = dev.i1 - i1diode = read_av(signal, avlen) - umv(dev.diag_y,diode_outpos) - - print(f'En {ei}, BCUSUM {bcusum}, xi {xi}, flux {fluxi}') + fluxi = flux_x10sa(xi, ei, silent=1) + quot = fluxi / bcusum + + # i1diode = dev.i1.read()["i1"]["value"] + umv(dev.diag_y, diode_inpos) + signal = dev.i1 + i1diode = read_av(signal, avlen) + umv(dev.diag_y, diode_outpos) + + print(f"En {ei}, BCUSUM {bcusum}, xi {xi}, flux {fluxi}") dat_en.append(ei) dat_lubpm.append(lusum) @@ -1691,27 +1726,56 @@ def fluxcal(start_en=13, stop_en=14, step =1): dat_fluxi.append(fluxi) dat_quot_flbsum.append(quot) dat_i1.append(i1diode) - - combined = np.column_stack((dat_en, dat_lubpm,dat_ssbpm,dat_bcubpm,dat_xi,dat_fluxi,dat_quot_flbsum, dat_i1)) - + + combined = np.column_stack( + (dat_en, dat_lubpm, dat_ssbpm, dat_bcubpm, dat_xi, dat_fluxi, dat_quot_flbsum, dat_i1) + ) + # open file for output timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") dirname = "/sls/x10sa/config/commissioning/Data/" filename = dirname + f"FLUX_x10sa_{timestamp}.txt" with open(filename, "w") as f: - np.savetxt(f, combined, delimiter=",", fmt="%.9f") # fmt for savetxt + np.savetxt(f, combined, delimiter=",", fmt="%.9f") # fmt for savetxt - - elapsed_time = time.perf_counter()-tstart - print(f"Runtime: {elapsed_time: .6f} seconds, i.e., {elapsed_time/60: .6f} min") - # CLOSE AND MOVE BACK ############ + elapsed_time = time.perf_counter() - tstart + print(f"Runtime: {elapsed_time: .6f} seconds, i.e., {elapsed_time/60: .6f} min") + # CLOSE AND MOVE BACK ############ # close shutter ! - + print("close the shutter !") - dev.bcu_shutter.put(0) - - # move beamstop back ! - #umv(dev.bs_y, bs_in) + dev.bcu_shutter.put(0) + + # move beamstop back ! + # umv(dev.bs_y, bs_in) fitpoly(dat_en, dat_quot_flbsum, 3) + + +def testflux(): + import time, datetime + + energy = get_current_energy() + count = 0 + stop = 1000 + while count < stop: + + bpmsum_c = dev.bcu_bpmsum.read(cached=True)["bcu_bpmsum"]["value"] + transm_c = dev.transm.read(cached=True)["transm"]["value"] + + bpmsum = dev.bcu_bpmsum.read()["bcu_bpmsum"]["value"] + transm = dev.transm.read()["transm"]["value"] + + print(f'******************************************************************************') + print(f'bpmsum_cached {bpmsum_c}, transm_cached {transm_c}') + bpm2flux(energy, bpmsum_c, transm_c) + print(f' ') + print(f'bpmsum NOT c {bpmsum}, transm NOT c {transm}') + bpm2flux(energy, bpmsum, transm) + if (transm_c < 0.001 or transm < 0.001): + timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + print(f'WARNING ! timing issue at {timestamp}') + time.sleep(1) + count += 1 + return diff --git a/pxii_bec/macros/EvalFlux.py b/pxii_bec/macros/EvalFlux.py index c8df98a..9ff4445 100644 --- a/pxii_bec/macros/EvalFlux.py +++ b/pxii_bec/macros/EvalFlux.py @@ -2,68 +2,71 @@ def evalflux(): from APscripts import read_data_csv, fitpoly - data=read_data_csv('FLUX_x10sa_20260709_174259.txt') - - einv=data[:, 0] - fcalfinv = data[:, 6] # if energy top down + data = read_data_csv("FLUX_x10sa_20260709_174259.txt") + einv = data[:, 0] + fcalfinv = data[:, 6] # if energy top down e = einv[::-1] flcf = fcalfinv[::-1] # omit the last values (>= 27 keV) - len(e) # = 25 + len(e) # = 25 e = e[0:21] - flcf =flcf[0:21]/1.e9 ## divide by 1e9 for better readability + flcf = flcf[0:21] / 1.0e9 ## divide by 1e9 for better readability fitpoly(e, flcf, 3) # Polynomial coefficients of the fit fct: 3 [-0.00026213 0.01171065 -0.05379571 0.04478851] -def csplinex(x,y,en): +def csplinex(x, y, en): from scipy.interpolate import CubicSpline # Create spline cs = CubicSpline(x, y) - y_cs = cs(en) + y_cs = cs(en) return y_cs - + def flux_bcu(): - e = get_current_energy()/1000. - bcusum = read_av(dev.bcu_bpmsum,10) - flux = fl_bcubpm(e,bcusum) - return f"{flux:.2e}" - + e = get_current_energy() / 1000.0 + bcusum = read_av(dev.bcu_bpmsum, 10) + flux = fl_bcubpm(e, bcusum) + return f"{flux:.2e}" + + def flux_i1(): - e = get_current_energy()/1000 - i1 = read_av(dev.i1,10) + e = get_current_energy() / 1000 + i1 = read_av(dev.i1, 10) flux = fl_i1(e, i1) - return f"{flux:.2e}" - -def fl_bcubpm(e,bcusum): - import numpy as np - fact = 1.e9 - coeff = [-0.00026213, 0.01171065, -0.05379571, 0.04478851] - if e > 24 : - coeff = [4.83704287e-05, -3.17174523e-03, 7.33131161e-02, -5.91926617e-01, 1.66572494e+00] + return f"{flux:.2e}" + + +def fl_bcubpm(e, bcusum): + import numpy as np + + fact = 1.0e9 + coeff = [-0.00026213, 0.01171065, -0.05379571, 0.04478851] + if e > 24: + coeff = [4.83704287e-05, -3.17174523e-03, 7.33131161e-02, -5.91926617e-01, 1.66572494e00] polynomial = np.poly1d(coeff) fl = polynomial(e) * bcusum * fact - #print(f'flux from {bcusum} with en {e} is {fl:.2e} ph/s') - - return fl - -def fl_i1(e,i1): + # print(f'flux from {bcusum} with en {e} is {fl:.2e} ph/s') + + return fl + + +def fl_i1(e, i1): import pandas as pd file = "luts/I1flcalf.csv" - df = pd.read_csv(file) + df = pd.read_csv(file) a = df["En"] b = df["Fl/I1"] - - fl_i1 = csplinex(a,b,e) *i1 - print(f'flux from {i1} with en {e} is {fl_i1:.2} ph/s ') + + fl_i1 = csplinex(a, b, e) * i1 + print(f"flux from {i1} with en {e} is {fl_i1:.2} ph/s ") return fl_i1 diff --git a/pxii_bec/macros/KB_Class.py b/pxii_bec/macros/KB_Class.py index 51e2c7f..f90604a 100644 --- a/pxii_bec/macros/KB_Class.py +++ b/pxii_bec/macros/KB_Class.py @@ -13,10 +13,12 @@ class KBMirror: self.P2 = 0.583490 self.P3 = -0.372950 self.L1 = -0.955798 - self.curv_approx_fact = 0.9550 # 0.9550 # origin: 1.0121 - self.s1 = 24.15 + self.curv_approx_fact = 0.9550 # 0.9550 # origin: 1.0121 + self.s1 = 24.15 self.s2 = 1.45 - self.asym0 = 0.114 ## origin: 0.0.08 + 0.034 # user asymm, eg 0.4750, will be added ( - sign) + self.asym0 = ( + 0.114 ## origin: 0.0.08 + 0.034 # user asymm, eg 0.4750, will be added ( - sign) + ) elif self.mirror_type == "PXII_HFM": self.C0 = 0.060453 @@ -24,10 +26,12 @@ class KBMirror: self.P2 = 0.586057 self.P3 = -0.088093 self.L1 = -0.999445 - self.curv_approx_fact = 0.8810 # origin: # 0.995 - self.s1 = 24.90 + self.curv_approx_fact = 0.8810 # origin: # 0.995 + self.s1 = 24.90 self.s2 = 0.7 - self.asym0 = 0.06455 ## origin: -0.0107 + 0.07525 # added user asymm 2.75 (-sign) + self.asym0 = ( + 0.06455 ## origin: -0.0107 + 0.07525 # added user asymm 2.75 (-sign) + ) else: raise ValueError(f"Unknown mirror type: {self.mirror_type}") @@ -59,7 +63,7 @@ class KBMirror: return s2, R def get_benders(self, th=3.0, defocus_mm=0.0, user_asymmetry=0.0): - asym = self.asym0 - user_asymmetry #### sign is important! + asym = self.asym0 - user_asymmetry #### sign is important! s2_target = self.s2 + defocus_mm / 1000 curv = self.ellipse_to_curvature(s2_target, th) BU, BD = self.curvature_to_bend(curv, asym) @@ -69,16 +73,12 @@ class KBMirror: curv, asym = self.bend_to_curvature(BU, BD) s2_rb, R0 = self.curvature_to_ellipse(curv, th) defocus_mm = (s2_rb - self.s2) * 1000 - bend_rad_m = 1/curv *1000 + bend_rad_m = 1 / curv * 1000 return { "curvature": curv, - "bend_rad_m": bend_rad_m, - "bend_rad0_m": R0, + "bend_rad_m": bend_rad_m, + "bend_rad0_m": R0, "asymmetry": asym, "s2": s2_rb, - "defocus_mm": defocus_mm + "defocus_mm": defocus_mm, } - - - - diff --git a/pxii_bec/macros/Undu_Helpers.py b/pxii_bec/macros/Undu_Helpers.py index 0302550..80f45d6 100755 --- a/pxii_bec/macros/Undu_Helpers.py +++ b/pxii_bec/macros/Undu_Helpers.py @@ -45,8 +45,40 @@ def exponential_func2(x, a, b, c, d): ################################## - +# ##### Sept 2026 Data ###################################### def return_harmon(): + # from 3rd to 19th Energy range from 6 keV to 30 keV + # harmonics, Sept 2026 + import numpy as np + + nharm = 19 + h = [np.array([]) for _ in range(nharm + 1)] + h[0] = np.array([0]) + h[1] = np.array([0]) + h[2] = np.array([0]) + h[3] = np.array([0.095, -0.276, 4.154]) # 3rd harmon + h[4] = np.array([0.00692593, -0.131504, 1.45763, -0.864603]) + h[5] = np.array([0.00269444 , - 0.0616905 , 0.967925, - 0.295405]) + h[6] = np.array([ 0.00248148 , - 0.0767908 , 1.2178 , - 1.91516 ]) + h[7] = np.array([0.00110017 , - 0.0369968 , 0.77334 ,- 0.688198 ]) + h[8] = np.array([0.000643939 , - 0.0226645 , 0.570453 , - 0.0479048 ]) + h[9] = np.array([0.00021633 , -0.00619517 , 0.315392 , 0.971667 ]) + h[10] = np.array([ 0.000708236 , - 0.0357576 , 0.851686 - 2.48765 ]) + h[11] = np.array([ 0.000589549 , -0.0328631 , 0.837705 , - 2.90326 ]) + h[12] = np.array([ 0.00218182 , 0.1212 , 1.74739 ]) + h[13] = np.array([ 0.197702, 0.757869 ]) + h[14] = np.array([ 0.183733, 0.762778 ]) + h[15] = np.array([ 0.170381, 0.783155 ]) + h[16] = np.array([ 0.157321, 0.850464 ]) + h[17] = np.array([0.1466, 0.8906 ]) + h[18] = np.array([0.1362, 0.9538 ]) + h[19] = np.array([0.128, 0.985 ]) + + + return h + +# ##### July 2025 Data ###################################### +def return_harmon_old(): # from 3rd to 21th Energy range from 6 keV to 30 keV # harmonics, July 2025 import numpy as np @@ -97,7 +129,7 @@ def plot_harmon(e_start, e_end, h_no, pr_out=False): plt.show() -def setu19(en, *harm_no, detune=0): +def setu19(en, *harm_no, detune=0, simul = 0, iexp = 0): """ set the U19 to the gaps defined in Jul2025, or the "theoretical" ones for higher harmonics @@ -106,32 +138,43 @@ def setu19(en, *harm_no, detune=0): en in keV, possibly select a special harmonics, or detune [0/1] to a value with a nicer beam shape but less flux """ - g0 = dev.id_gap.readback.get() - - fitpar_u19 = np.array([2.17078531, 0.519452, -0.00720255]) # measured from U19 + if not simul: + g0 = dev.id_gap.readback.get() + #fitpar_u19 = np.array([2.17078531, 0.519452, -0.00720255]) # measured from U19 + fitpar_u19 = np.array([ 2.22322523, 0.50396248, -0.00783873]) # measured from U19, Sept2026 + h_all = return_harmon() # dep on energy -> select harmonics if harm_no: harm = int(harm_no[0]) + print("Selected harmonics is:", harm) else: print("Using the default optimised harmonics") if en <= 7: harm = 3 # h = h[3] - elif 7 < en <= 10: + elif 7 < en <= 10.5: harm = 5 - elif 10 < en <= 13: + elif 10.5 < en < 13: harm = 7 - elif 13 < en <= 16: + elif 13 <= en <= 16.5: harm = 9 - elif 16 < en <= 19: + elif 16.5 < en <= 19.5: harm = 11 - elif 19 < en <= 22: + elif 19.5 < en <= 22.5: harm = 13 + elif 22.5 < en <= 25.5: ## 22 + harm = 15 + elif 25.5 < en <= 28.5: ## 22 + harm = 17 + elif 28.5 < en <= 30: ## 22 + harm = 19 + + - if en <= 22: + if (en <= 30 and harm <=19): h = h_all[harm] print(f"harmonics is {harm}.") @@ -146,32 +189,33 @@ def setu19(en, *harm_no, detune=0): # 29: 15, 17, 19 # 30: 19 ## - if 23 < en <= 25: - n = 15 + if (iexp and harm_no): + harm_selected = int(harm_no[0]) + print("Selected harmonics is:", harm_selected) + n= harm_selected enorm = en / n g = exponential_func0(enorm, fitpar_u19[0], fitpar_u19[1], fitpar_u19[2]) - elif 25 < en <= 29: - n = 17 - enorm = en / n - g = exponential_func0(enorm, fitpar_u19[0], fitpar_u19[1], fitpar_u19[2]) - elif 29 < en: - n = 19 + elif (iexp): + n = harm # default for that energy range, as set before enorm = en / n + print('exp fct fit used') g = exponential_func0(enorm, fitpar_u19[0], fitpar_u19[1], fitpar_u19[2]) - print("Undulator has been ", g0, " mm") - if 4.5 <= g <= 20: - print("Moving Undulator gap to ", g, " mm") - else: - print("not a valid gap, do nothing") + + if not simul: + print("Undulator has been ", g0, " mm") + if 4.5 <= g <= 20: + print("Moving Undulator gap to ", g, " mm") + else: + print("not a valid gap, do nothing") - if detune: - g = g * 0.996 - print("moving to detuned gap value, slightly below max, about 0.15 % ") + if detune: + g = g * 0.996 + print("moving to detuned gap value, slightly below max, about 0.15 % ") # print("move disabled!!") - res = scans.umv(dev.id_gap, g, relative=False) + scans.umv(dev.id_gap, g, relative=False) - return + return round(g,4) ################################## @@ -192,7 +236,8 @@ def harmon_walk(estart=7.5, end_en=13): ################################## def gap_harm(e=12.4): - fitpar_u19 = np.array([2.17078531, 0.519452, -0.00720255]) + # old values fitpar_u19 = np.array([2.17078531, 0.519452, -0.00720255]) + fitpar_u19 = np.array([2.22322523, 0.50396248, -0.00783873]) fitpar_u17 = np.array([2.17078572, 0.46477267, -0.005766]) e = float(input("Please enter an energy between 6 and 30: ")) @@ -305,9 +350,26 @@ def long_gscan(estart=6, end_en=30.5, g_low=4.5, g_high=9.0, nsteps=1000, sett = return +def plottest(wname): + #wname="GapScan" + existing_docks = bec.gui.windows + if existing_docks.get(wname) is None: + dock_area = bec.gui.new(name=wname, geometry = [4000, 900, 700, 700]) + wr = dock_area.new(bec.gui.available_widgets.Waveform, object_name="Plot") + mot = dev.id_gap + det = dev.lu_bpmsum + else: + dock_area = open_docks[wname] + wr= dock_area.Plot + wr.plot(device_x=mot, device_y=det) ## names first ! + # wr.plot(x=mot.name,y=det.name) ### this comes later + wr.x_label = mot.name + wr.y_label = det.name + + ################################## -def gscan(centre=0, gomax=0, detune=0,sett=1): +def gscan(deltag = 0.05,centre=0, gomax=0, detune=0,sett=1, silent=0, iplot=1, isave=0): """ Scan the ID GAP and go to the max of lu_bpm intensity @@ -319,34 +381,58 @@ def gscan(centre=0, gomax=0, detune=0,sett=1): """ import time - dock_area = bec.gui.new(name="GapScan", geometry = [4000, 900, 700, 700]) - wr = dock_area.new(bec.gui.available_widgets.Waveform) + wname="GapScan" + mot = dev.id_gap - det = dev.lu_bpmsum + det = dev.lu_bpmsum + + existing_docks = bec.gui.windows + if existing_docks.get(wname) is None: + dock_area = bec.gui.new(name=wname, geometry = [4000, 900, 700, 700]) + wr = dock_area.new(bec.gui.available_widgets.Waveform, object_name="Plot") + else: + dock_area = existing_docks[wname] + wr= dock_area.Plot + wr.clear_all() wr.plot(device_x=mot, device_y=det) ## names first ! # wr.plot(x=mot.name,y=det.name) ### this comes later wr.x_label = mot.name wr.y_label = det.name g0 = dev.id_gap.readback.get() - deltag = 0.05 + #deltag = 0.05 steps = 30 resol = 2*deltag/steps + if resol < 0.002: + resol = 0.003 + steps = round(2*deltag/resol) + + start=-deltag + stop = deltag print(f"Gap resol is {resol} mm ") - - ds = scans.line_scan(dev.id_gap, -deltag, deltag, steps=steps, settling_time=sett,exp_time=0.5, relative=True) + if (g0-deltag < 4.5): + start=g0-4.5 + ds = scans.line_scan(dev.id_gap, start, stop, steps=steps, settling_time=sett,exp_time=0.1, relative=True) gap_data = ds.scan.live_data.id_gap.id_gap.val bpm_data = ds.scan.live_data.lu_bpmsum.lu_bpmsum.val gap_data=np.array(gap_data) bpm_data = np.array(bpm_data) - + + if isave: + en = round(getenergy()) + dirname = "/sls/x10sa/config/commissioning/Data/GapsFE_0p3/" + combined = np.column_stack((gap_data, bpm_data)) + filename = dirname + "gap" + str(en)+"_"+str(g0*100)[0:3]+ ".txt" + with open(filename, "w") as f: + np.savetxt(f, combined, delimiter=",", fmt="%5f") + maxy = max(bpm_data) indmax = np.argmax(bpm_data) - gm = gap_data[indmax] + gmax = gap_data[indmax] - gcen, xm = fit_plot(gap_data, bpm_data, model="voigt") + gcen, xm = fit_plot(gap_data, bpm_data, tmodel="voigt", silent=silent, iplot=iplot) if gomax: gm = xm @@ -354,6 +440,8 @@ def gscan(centre=0, gomax=0, detune=0,sett=1): gm = gcen print("gap off by ", g0 - gm, " mm") + + print(f"gcen = {gcen}, gmax = {xm} or {gmax}") if detune: gm = gm * 0.996 print("moving to detuned gap value, slightly (0.15 %) below max") @@ -366,4 +454,31 @@ def gscan(centre=0, gomax=0, detune=0,sett=1): else: print("Fit too far off, try using option gomax=1") - return + return gm, xm + +################################## + +def bfield_x10sa(gap): + if gap < 4.5 or gap > 20: + print("no valid gap!") + return + + ### values for the U19 + l_u = 19 + a = 3.22482942 + b = -0.30100054 + c = 0.00808649 + + b0 = exponential_func0(gap, a,b,c ) + b0= round(b0,4) + # K = e/mc * l_u/2pi * B + k = round(0.0934 *l_u * b0,2) + + print(f'### X10SA and U19 ### ') + print(f'for a gap of {gap} mm : ') + print(f'B0 = {b0}') + print(f'K = {k}') + + return b0, k + +################################## diff --git a/pxii_bec/macros/analyse_luts.py b/pxii_bec/macros/analyse_luts.py new file mode 100644 index 0000000..1ffa8f9 --- /dev/null +++ b/pxii_bec/macros/analyse_luts.py @@ -0,0 +1,645 @@ +"""Analyse LUT data to determine fits for DCM and undulator parameters.""" + +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from scipy.signal import savgol_filter + +from pxii_bec.scripts import beamline_context as bl + + + +def get_data(filename): + """Open the raw DCM calibration data file.""" + + filename = bl.env.lut_dir / f"{filename}" + + return pd.read_csv(filename) + + +def format_polynomial(fit): + """Return polynomial coefficients as a readable equation string.""" + + terms = [] + order = len(fit) - 1 + + for i, coeff in enumerate(fit): + power = order - i + + if power > 1: + term = f"{coeff:+.3e} x^{power}" + elif power == 1: + term = f"{coeff:+.3e} x" + else: + term = f"{coeff:+.4f}" + + terms.append(term) + + return " ".join(terms).lstrip("+") + + +def plot_lut( + ax, + arr, + fit_order, + xname=None, + yname=None, + title=None, + show_equation=True, +): + """ + Fit LUT data and draw the data and fit onto an existing axes. + + Parameters + ---------- + ax : matplotlib.axes.Axes + Axes on which to draw the plot. + arr : numpy.ndarray + Two-column array containing x and y data. + fit_order : int + Polynomial order to fit. + xname : str, optional + X-axis label. + yname : str, optional + Y-axis label. + title : str, optional + Plot title. + show_equation : bool, optional + Display the fitted polynomial on the plot. + + Returns + ------- + numpy.ndarray + Polynomial coefficients. + """ + + x = arr[:, 0] + y = arr[:, 1] + + fit = np.polyfit(x, y, fit_order) + p = np.poly1d(fit) + + x_range = np.linspace(x.min(), x.max(), 100) + + ax.scatter( + x, + y, + label="Data", + color="rebeccapurple", + ) + + ax.plot( + x_range, + p(x_range), + label="Polynomial fit", + color="lightcoral", + ) + + if xname is not None: + ax.set_xlabel(xname) + + if yname is not None: + ax.set_ylabel(yname) + + if title is not None: + ax.set_title(title) + + if show_equation: + equation = format_polynomial(fit) + + ax.text( + 0.02, + 0.02, + equation, + transform=ax.transAxes, + fontsize=9, + verticalalignment="bottom", + bbox=dict( + boxstyle="round", + facecolor="whitesmoke", + edgecolor="lightgray", + alpha=0.8, + ), + ) + + return fit + + +def lut_plot( + arr, + xname, + yname, + title, + fit_order, + save=False, +): + """ + Create a standalone LUT plot. + + This is useful for calibration plots such as DCM pitch where only + one fit is required. + """ + + savefile = bl.env.lut_dir / f"{title}.png" + + fig, ax = plt.subplots() + + fit = plot_lut( + ax, + arr, + fit_order, + xname=xname, + yname=yname, + title=title, + show_equation=True, + ) + + ax.legend(fontsize=9) + + fig.tight_layout() + + if save: + fig.savefig(savefile, bbox_inches="tight") + plt.close(fig) + else: + plt.show() + + print(np.poly1d(fit)) + + return fit + +def pitch_analysis(filename, save=False): + """Compare DCM pitch calibration against energy and Bragg angle.""" + + df = get_data(filename) + + fits = {} + + for xname, fit_order in [("energy", 4), ("bragg", 2)]: + + x = df[xname].to_numpy() + pitch = df["pitch"].to_numpy() + + fit = lut_plot( + df[[xname, "pitch"]].to_numpy(), + xname="Energy" if xname == "energy" else "Bragg angle", + yname="pitch", + title=f"DCM_Pitch_Calibration_{xname}", + fit_order=fit_order, + save=save, + ) + + # Calculate residuals + fitted_pitch = np.polyval(fit, x) + residuals = pitch - fitted_pitch + + rms = np.sqrt(np.mean(residuals**2)) + max_residual = np.max(np.abs(residuals)) + + print(f"\n{xname.capitalize()} fit (order {fit_order})") + print(f"RMS residual: {rms:.6g}") + print(f"Max residual: {max_residual:.6g}") + + for xi, residual in zip(x, residuals): + print(f" {xi:10.3f}: {residual:+.6g}") + + fits[xname] = { + "fit": fit, + "residuals": residuals, + "rms": rms, + "max_residual": max_residual, + } + + return fits + +def pitch_analysis_bragg(filename, fit_order=2, save=False): + """Fit and plot the DCM pitch calibration.""" + + df = get_data(filename) + + pitch = df[["bragg", "pitch"]] + + fit = lut_plot( + pitch.to_numpy(), + xname="Bragg angle", + yname="pitch", + title="DCM_Pitch_Calibration", + fit_order=fit_order, + save=save, + ) + + return fit + +def pitch_analysis_energy(filename, fit_order=3, save=False): + """Fit and plot the DCM pitch calibration.""" + + df = get_data(filename) + + pitch = df[["energy", "pitch"]] + + fit = lut_plot( + pitch.to_numpy(), + xname="energy", + yname="pitch", + title="DCM_Pitch_Calibration", + fit_order=fit_order, + save=save, + ) + + return fit + +def ge_edge_analysis(filename, save=False): + """ + Analyse a Ge K-edge scan. + + Finds the approximate absorption edge from the largest negative + derivative of the BCU BPM sum signal. + + Parameters + ---------- + filename : str + CSV filename without the .csv extension. + save : bool, optional + Save the plots to the LUT directory instead of displaying them. + + Returns + ------- + dict + Measured edge energy, expected edge energy, energy offset, + and derivative data. + """ + + # Known Ge K absorption edge + expected_edge = 11103.1 # eV + + df = get_data(filename) + + energy = df["Energy"].to_numpy() + signal1 = df["bcu_bpmsum"].to_numpy() + signal = df["transmission"].to_numpy() + + # ---------------------------------------------------------- + # Calculate derivative + # ---------------------------------------------------------- + # smooth_signal = savgol_filter( + # signal, + # window_length=11, + # polyorder=2, + # ) + # derivative = np.gradient(smooth_signal, energy) + + derivative = np.gradient(signal, energy) + + # Ge absorption causes the BPM signal to fall, so locate + # the strongest negative derivative. + edge_idx = np.argmin(derivative) + + measured_edge = energy[edge_idx] + edge_derivative = derivative[edge_idx] + + energy_offset = expected_edge - measured_edge + + # ---------------------------------------------------------- + # Print results + # ---------------------------------------------------------- + + print() + print("Ge K-edge analysis") + print("------------------") + print(f"Expected edge: {expected_edge:.2f} eV") + print(f"Measured edge: {measured_edge:.2f} eV") + print(f"Energy offset: {energy_offset:+.2f} eV") + print() + + # ---------------------------------------------------------- + # Plot BPM signal + # ---------------------------------------------------------- + + fig1, ax1 = plt.subplots() + + ax1.plot( + energy, + signal, + "o-", + markersize=4, + label="Data", + ) + + # ax1.plot( + # energy, + # smooth_signal, + # "-", + # label="Smoothed", + # ) + + ax1.axvline( + measured_edge, + linestyle="--", + label=f"Measured edge: {measured_edge:.2f} eV", + ) + if energy.min() <= expected_edge <= energy.max(): + ax1.axvline( + expected_edge, + linestyle=":", + label=f"Expected edge: {expected_edge:.1f} eV", + ) + + ax1.set_xlabel("Energy (eV)") + ax1.set_ylabel("Transmission (BCU BPM / SS BPM)") + ax1.set_title("Ge K-edge scan") + ax1.legend() + + fig1.tight_layout() + + # ---------------------------------------------------------- + # Plot derivative + # ---------------------------------------------------------- + + fig2, ax2 = plt.subplots() + + ax2.plot( + energy, + derivative, + "o-", + markersize=4, + ) + + ax2.plot( + measured_edge, + edge_derivative, + "o", + markersize=8, + label=f"Edge: {measured_edge:.2f} eV", + ) + + ax2.axvline( + measured_edge, + linestyle="--", + ) + + ax2.set_xlabel("Energy (eV)") + ax2.set_ylabel("d(Transmission) / dE") + ax2.set_title("Ge K-edge derivative") + ax2.legend() + + fig2.tight_layout() + + # ---------------------------------------------------------- + # Save or display + # ---------------------------------------------------------- + + if save: + signal_file = bl.env.daily_setup_dir / "Ge_edge_signal.png" + derivative_file = bl.env.daily_setup_dir / "Ge_edge_derivative.png" + + fig1.savefig(signal_file, bbox_inches="tight", dpi=150) + fig2.savefig(derivative_file, bbox_inches="tight", dpi=150) + + plt.close(fig1) + plt.close(fig2) + + print(f"Saved: {signal_file}") + print(f"Saved: {derivative_file}") + + else: + plt.show() + + return { + "expected_edge": expected_edge, + "measured_edge": measured_edge, + "energy_offset": energy_offset, + "signal_png": signal_file, + "derivative_png": derivative_file, + } + +def perp_analysis(filename): + """Select the DCM perpendicular translation calibration data.""" + + df = get_data(filename) + sel = df[['energy','dcm_perp', 'xi_cam_x']] + savefile = bl.env.lut_dir / "perp_actual_calc.csv" + with open(savefile, 'w', encoding='utf-8') as f: + f.write("energy,calc_perp,actual_perp\n") + + energies = [8000, 10000, 12400, 15000, 18000, 20000, 22000, 25000] + for energy in energies: + + data = sel[sel['energy']== energy] + print(data) + + target = 149.4 # value of xi_cam_x at 12.4 keV + + x = data["dcm_perp"].to_numpy() + y = data["xi_cam_x"].to_numpy() + + # Linear fit: gap = slope * energy + intercept + slope, intercept = np.polyfit(x, y, 1) + + # perp_value = intercept/-slope + perp_value = (target - intercept)/slope + calc_per = calc_perp_position(energy) + + + with open(savefile, 'a', encoding='utf-8') as f: + f.write(f"{energy},{calc_per:.4f},{perp_value:.4f}\n") + + # print( + # f"Energy = {energy} eV, " + # f"Calculated perp = {calc_per:.4f}, " + # f"Actual perp = {perp_value:.4f}" + # ) + + + # fig, ax = plt.subplots(figsize = (5,7)) + # ax.scatter(x,y) + # ax.set_title(f"{energy}") + + # # Generate fitted line only over the measured range + # x_fit = np.linspace(x.min(), x.max(), 100) + # y_fit = slope * x_fit + intercept + + # # # Plot fit first and get its automatically assigned colour + # line, = ax.plot( + # x_fit, + # y_fit, + # label=energy, + # ) + # plt.show() + + # return results + + # conv_factor = 12365.75 / (2 * 3.13481) + + # df["costheta"] = np.cos(conv_factor / df["energy"]) + + # perp = df[["costheta", "bsccam_x"]] + + # return ( + # perp.to_numpy(), + # "costheta", + # "bsccam_x", + # ) + + +def roll_analysis(): + """Select the DCM roll calibration data.""" + + df = get_data() + + roll = df[["energy", "roll"]] + + # Select the useful linear range + roll = roll[ + (roll["roll"] > 0.1) + & (roll["roll"] < 9.6) + ] + + return ( + roll.to_numpy(), + "energy", + "roll", + ) + + +def gap_analysis(save=False): + """ + Fit and plot the undulator gap calibration for all harmonics. + + Produces one plot containing all harmonic data and linear fits. + Prints fit coefficients in a format that can be copied directly + into pxii_parameters.py. + """ + + df = get_data() + gap = df[["energy", "gap", "harmonic"]] + + fig, ax = plt.subplots(figsize=(10, 7)) + + results = {} + HARMONICS = [ + "H3", + "H5", + "H7", + "H9", + "H11", + "H13", + "H15", + "H17", + "H19", + ] + for harmonic in HARMONICS: + + data = gap[gap["harmonic"] == harmonic] + + if data.empty: + print(f"{harmonic}: no data") + continue + + x = data["energy"].to_numpy() + y = data["gap"].to_numpy() + + # Linear fit: gap = slope * energy + intercept + slope, intercept = np.polyfit(x, y, 1) + + # Store results + min_gap_energy = (4.5 - intercept) / slope + + results[harmonic] = { + "slope": slope, + "intercept": intercept, + "min_gap_energy": min_gap_energy, + } + + # Generate fitted line only over the measured range + x_fit = np.linspace(x.min(), x.max(), 100) + y_fit = slope * x_fit + intercept + + # Plot fit first and get its automatically assigned colour + line, = ax.plot( + x_fit, + y_fit, + label=harmonic, + ) + + # Plot measured points using the same colour + ax.scatter( + x, + y, + color=line.get_color(), + s=35, + zorder=3, + ) + + ax.set_xlabel("energy (eV)") + ax.set_ylabel("gap (mm)") + ax.set_title("Undulator Gap Calibration") + + ax.legend( + title="Harmonic", + fontsize=9, + ) + + fig.tight_layout() + + if save: + savefile = bl.env.lut_dir / "Undulator_Gap_Calibration.png" + + fig.savefig( + savefile, + bbox_inches="tight", + dpi=150, + ) + + plt.close(fig) + + else: + plt.show() + + # ---------------------------------------------------------- + # Print fit summary + # ---------------------------------------------------------- + + print() + print("Linear fits: gap = slope * energy + intercept") + print() + print( + f"{'Harmonic':<10}" + f"{'Slope':>16}" + f"{'Intercept':>16}" + f"{'Energy at 4.5 mm':>20}" + ) + + print("-" * 62) + + for harmonic, result in results.items(): + + print( + f"{harmonic:<10}" + f"{result['slope']:>16.8e}" + f"{result['intercept']:>16.8e}" + f"{result['min_gap_energy']:>16.0f} eV" + ) + + # ---------------------------------------------------------- + # Print copy/paste-ready parameters + # ---------------------------------------------------------- + + print() + print("Copy/paste into pxii_parameters:") + print() + print("harmonics = {") + + for harmonic, result in results.items(): + + print( + f' "{harmonic}": ' + f'np.array([' + f'{result["slope"]:.8e}, ' + f'{result["intercept"]:.8e}' + f']),' + ) + + print("}") + + return results + diff --git a/pxii_bec/macros/bcu_bpm_positions.py b/pxii_bec/macros/bcu_bpm_positions.py index 165085e..448fda7 100644 --- a/pxii_bec/macros/bcu_bpm_positions.py +++ b/pxii_bec/macros/bcu_bpm_positions.py @@ -6,7 +6,7 @@ import time import numpy as np -def compute_norm(n_readings=5): +def compute_norm_bcu(n_readings=5): """Average normalized BPM X/Y from repeated sets of four channels.""" xn_values = [] @@ -31,20 +31,36 @@ def compute_norm(n_readings=5): time.sleep(0.1) - return float(np.mean(xn_values)), float(np.mean(yn_values)) + return { + "bcu_Xnorm": float(np.mean(xn_values)), + "bcu_Ynorm": float(np.mean(yn_values)), + } def get_bcu_beampos(): - """Determine beam position""" - bpm_xn, bpm_yn = compute_norm() + """Determine beam position from BCU BPM""" + # Check that there is a reading first + if get_value(dev.bcu_bpmsum) < 1: + return { + "ok": False, + "message": "Reading too low on BCU BPM" + } + + result = compute_norm_bcu() bpm_x = dev.bcu_bpm_x.position bpm_y = dev.bcu_bpm_y.position - beam_x = beam_offset_um(bpm_xn, bpm_x, BPM_X_Calibration) + beam_x = beam_offset_um(result["bcu_Xnorm"], bpm_x, BCU_BPM_X_Calibration) - beam_y = beam_offset_um(bpm_yn, bpm_y, BPM_Y_Calibration) + beam_y = beam_offset_um(result["bcu_Ynorm"], bpm_y, BCU_BPM_Y_Calibration) - return beam_x, beam_y + return { + "ok": True, + "bcu_Xnorm": result["bcu_Xnorm"], + "bcu_Ynorm": result["bcu_Ynorm"], + "bcu_x_um": beam_x, + "bcu_y_um": beam_y, + } def beam_offset_um(bpm_signal, bpm_motor_position, calibration): diff --git a/pxii_bec/macros/beamline_planner.py b/pxii_bec/macros/beamline_planner.py index 96b22b6..6ec815c 100755 --- a/pxii_bec/macros/beamline_planner.py +++ b/pxii_bec/macros/beamline_planner.py @@ -2,6 +2,7 @@ from collections import defaultdict, deque from enum import Enum + # from pxii_bec.scripts import beamline_context as bl # from enums import BeamlineState, TemperatureMode @@ -74,7 +75,6 @@ class StateChangePlanner: state_name = BeamlineState(state_name) target = self._merged_state(state_name, modifier) - plan = self._plan(target) print("PLAN:") @@ -102,7 +102,7 @@ class StateChangePlanner: def available_states(self): """Return a list of available states""" return list(self.states.keys()) - + def state_devices(self): """Return the set of devices that participate in beamline state definitions""" @@ -111,14 +111,13 @@ class StateChangePlanner: for state in self.states.values(): devices.update(state.keys()) - + return sorted(devices) def get_positions(self): """Return current positions of devices that are used in state transitions""" - return {name: self.devices[name].pos - for name in self.state_devices()} + return {name: self.devices[name].pos for name in self.state_devices()} def print_positions(self): """Return current state of all devices""" @@ -131,7 +130,7 @@ class StateChangePlanner: """Return a dict of {device: (before, after)} pairs for devices that changed state""" after = self.get_positions() return {k: (before[k], after[k]) for k in before if before[k] != after[k]} - + def __get_closest_states(self): """ Return states ordered by number of mismatches. @@ -148,21 +147,9 @@ class StateChangePlanner: for dev, expected in config.items(): if not self.devices[dev].is_at(expected): - mismatches.append( - ( - dev, - self.devices[dev].pos, - expected, - ) - ) + mismatches.append((dev, self.devices[dev].pos, expected)) - results.append( - ( - state.name, - len(mismatches), - mismatches, - ) - ) + results.append((state.name, len(mismatches), mismatches)) return sorted(results, key=lambda x: x[1]) @@ -173,10 +160,7 @@ class StateChangePlanner: print(f"\n{state}: {count} mismatch(es)") for dev, actual, expected in mismatches: - print( - f" {dev:15s} " - f"{actual:10s} -> {expected}" - ) + print(f" {dev:15s} " f"{actual:10s} -> {expected}") def current_state(self): """Return all current matching BeamlineState and TemperatureMode combinations, diff --git a/pxii_bec/macros/beampos_with_en.py b/pxii_bec/macros/beampos_with_en.py index 39da1dd..65602a0 100644 --- a/pxii_bec/macros/beampos_with_en.py +++ b/pxii_bec/macros/beampos_with_en.py @@ -1,19 +1,19 @@ def beampos_with_en(planner): - deltat = 2 - record_beampos_until("23:00",planner,interval_minutes=deltat) + deltat = 2 + record_beampos_until("23:00", planner, interval_minutes=deltat) bl_energy(6000) - record_beampos_until("00:00",planner,interval_minutes=deltat) - bl_energy(8000) - record_beampos_until("01:00",planner,interval_minutes=deltat) - bl_energy(10000) - record_beampos_until("02:00",planner,interval_minutes=deltat) + record_beampos_until("00:00", planner, interval_minutes=deltat) + bl_energy(8000) + record_beampos_until("01:00", planner, interval_minutes=deltat) + bl_energy(10000) + record_beampos_until("02:00", planner, interval_minutes=deltat) bl_energy(12000) - record_beampos_until("03:00",planner,interval_minutes=deltat) + record_beampos_until("03:00", planner, interval_minutes=deltat) bl_energy(12400) - record_beampos_until("04:00",planner,interval_minutes=deltat) + record_beampos_until("04:00", planner, interval_minutes=deltat) bl_energy(14000) - record_beampos_until("05:00",planner,interval_minutes=deltat) + record_beampos_until("05:00", planner, interval_minutes=deltat) bl_energy(16000) - record_beampos_until("06:00",planner,interval_minutes=deltat) + record_beampos_until("06:00", planner, interval_minutes=deltat) bl_energy(18000) - record_beampos_until("07:00",planner,interval_minutes=deltat) + record_beampos_until("07:00", planner, interval_minutes=deltat) diff --git a/pxii_bec/macros/build_devices.py b/pxii_bec/macros/build_devices.py index 434e955..f723a60 100755 --- a/pxii_bec/macros/build_devices.py +++ b/pxii_bec/macros/build_devices.py @@ -63,14 +63,7 @@ def build_devices(yaml_file): return state_devices -def update_position( - device, - position, - value, - axis=None, - force=False, - max_delta=0.5, -): +def update_position(device, position, value, axis=None, force=False, max_delta=0.5): """ Update a single saved position in memory. @@ -189,13 +182,7 @@ def update_positions(updates): return save_and_reload() -def save_current_position( - device, - position, - axis=None, - force=False, - max_delta=0.5, -): +def save_current_position(device, position, axis=None, force=False, max_delta=0.5): """ Save the current motor position as a named position. """ diff --git a/pxii_bec/macros/calculator.py b/pxii_bec/macros/calculator.py index c988c7e..4f77abd 100755 --- a/pxii_bec/macros/calculator.py +++ b/pxii_bec/macros/calculator.py @@ -2,6 +2,7 @@ from dataclasses import dataclass import numpy as np + # from pxii_parameters import (EnergyDefaults, CamConversion) @@ -60,9 +61,7 @@ def convert_to_degrees(angle_mrad: float) -> float: return np.rad2deg(angle_mrad / 1000) -def create_conversion_result( - energy_ev: float, wavelength: float, bragg_angle_mrad: float -) -> dict: +def create_conversion_result(energy_ev: float, wavelength: float, bragg_angle_mrad: float) -> dict: """ Creates a dictionary containing converted values of energy and angles. @@ -226,9 +225,7 @@ def validate_energy(energy_ev): return energy_ev -def convert_from_bragg( - bragg_angle_mrad: float, temp=120, print_result: bool = False -) -> dict: +def convert_from_bragg(bragg_angle_mrad: float, temp=120, print_result: bool = False) -> dict: """ Convert the Bragg angle to wavelength and energy, returning the result as a dictionary. @@ -274,9 +271,7 @@ def convert_from_energy(energy_ev: float, temp=120, print_result: bool = False) """ energy_ev = validate_energy(energy_ev) wavelength = calculate_wavelength_from_energy(energy_ev) - bragg_angle_mrad = float( - calculate_bragg_angle_from_wavelength(wavelength, temp=temp) - ) + bragg_angle_mrad = float(calculate_bragg_angle_from_wavelength(wavelength, temp=temp)) result = create_conversion_result(energy_ev, wavelength, bragg_angle_mrad) if print_result: print_conversion_result(result) @@ -284,9 +279,7 @@ def convert_from_energy(energy_ev: float, temp=120, print_result: bool = False) def convert_from_wavelength( - wavelength: float, - temp: float = 120, - print_result: bool = False, + wavelength: float, temp: float = 120, print_result: bool = False ) -> dict: """ Convert a given wavelength value into corresponding energy, Bragg angle, and @@ -312,19 +305,14 @@ def convert_from_wavelength( outside of the permitted range, returns None. """ energy_ev = calculate_energy_from_wavelength(wavelength) - bragg_angle_mrad = float( - calculate_bragg_angle_from_wavelength(wavelength, temp=temp) - ) + bragg_angle_mrad = float(calculate_bragg_angle_from_wavelength(wavelength, temp=temp)) result = create_conversion_result(energy_ev, wavelength, bragg_angle_mrad) if print_result: print_conversion_result(result) return result -def calc_perp_position( - energy_ev: float, - print_result: bool = False, -) -> float: +def calc_perp_position(energy_ev: float, beam_offset = None, print_result: bool = False) -> float: """ Calculate the perpendicular motor position based on provided energy in electron-volts (eV). @@ -344,8 +332,12 @@ def calc_perp_position( None """ result = convert_from_energy(energy_ev, print_result=False) + + if beam_offset is None: + beam_offset = EnergyDefaults.beam_offset + bragg_angle_rad = result["bragg_angle_mrad"] / 1000 - perp_offset = float(EnergyDefaults.beam_offset / (2 * np.cos(bragg_angle_rad))) - 3 + perp_offset = float(beam_offset / (2 * np.cos(bragg_angle_rad))) - 3 if print_result: print(f"Perp = {perp_offset: .4f}") return perp_offset @@ -355,7 +347,7 @@ def calc_scam_microns(pixels, zoom=1000): """Convert pixels to microns for the sample camera""" return float(pixels / (CamConversion.a * np.exp(CamConversion.b * zoom))) + def calc_sscam_microns(pixels): """Convert pixels to microns for the ss camera""" - return pixels*20 - + return pixels * 20 diff --git a/pxii_bec/macros/calibrate_bpm.py b/pxii_bec/macros/calibrate_bpm.py index c0ca7c3..8ed2e6d 100644 --- a/pxii_bec/macros/calibrate_bpm.py +++ b/pxii_bec/macros/calibrate_bpm.py @@ -8,35 +8,172 @@ import numpy as np import pandas as pd import matplotlib.pyplot as plt +from pxii_bec.scripts import beamline_context as bl +from pxii_bec.macros.beamline_planner import BeamlineState -# def compute_norm(n_readings=5): -# """Average normalized BPM X/Y from repeated sets of four channels.""" -# xn_values = [] -# yn_values = [] +def compute_norm_ss(n_readings=5): + """Average normalized BPM X/Y from repeated sets of four channels.""" -# for _ in range(n_readings): -# bpm1 = dev.bcu_bpm1.read()["bcu_bpm1"]["value"] -# bpm2 = dev.bcu_bpm2.read()["bcu_bpm2"]["value"] -# bpm3 = dev.bcu_bpm3.read()["bcu_bpm3"]["value"] -# bpm4 = dev.bcu_bpm4.read()["bcu_bpm4"]["value"] + xn_values = [] + yn_values = [] + for _ in range(n_readings): + bpm1 = dev.ss_bpm1.read()["ss_bpm1"]["value"] + bpm2 = dev.ss_bpm2.read()["ss_bpm2"]["value"] + bpm3 = dev.ss_bpm3.read()["ss_bpm3"]["value"] + bpm4 = dev.ss_bpm4.read()["ss_bpm4"]["value"] -# total = bpm1 + bpm2 + bpm3 + bpm4 + total = bpm1 + bpm2 + bpm3 + bpm4 -# if total == 0: -# continue + if total == 0: + continue -# xn = ((bpm1 + bpm2) - (bpm3 + bpm4)) / total -# yn = ((bpm1 + bpm3) - (bpm2 + bpm4)) / total + xn = ((bpm1 + bpm2) - (bpm3 + bpm4)) / total + yn = ((bpm1 + bpm3) - (bpm2 + bpm4)) / total -# xn_values.append(xn) -# yn_values.append(yn) + xn_values.append(xn) + yn_values.append(yn) -# time.sleep(0.1) + time.sleep(0.1) -# return float(np.mean(xn_values)), float(np.mean(yn_values)) + return { + "ss_Xnorm": float(np.mean(xn_values)), + "ss_Ynorm": float(np.mean(yn_values)), + } +def compute_norm_lu(n_readings=5): + """Average normalized BPM X/Y from repeated sets of four channels.""" + + xn_values = [] + yn_values = [] + + for _ in range(n_readings): + bpm1 = dev.lu_bpm1.read()["lu_bpm1"]["value"] + bpm2 = dev.lu_bpm2.read()["lu_bpm2"]["value"] + bpm3 = dev.lu_bpm3.read()["lu_bpm3"]["value"] + bpm4 = dev.lu_bpm4.read()["lu_bpm4"]["value"] + + total = bpm1 + bpm2 + bpm3 + bpm4 + + if total == 0: + continue + + xn = ((bpm1 + bpm2) - (bpm3 + bpm4)) / total + yn = ((bpm1 + bpm3) - (bpm2 + bpm4)) / total + + xn_values.append(xn) + yn_values.append(yn) + + time.sleep(0.1) + + return { + "lu_Xnorm": float(np.mean(xn_values)), + "lu_Ynorm": float(np.mean(yn_values)), + } + + + +def run_calibration_ss(): + """Scan bpm in x and y and record normalised x and y positions""" + centred_x = 2.8625 + centred_y = -1.3874 + now = datetime.now() + fnow = filenow() + print(f"moving bpm to {centred_x}, {centred_y}") + umv(dev.ss_bpm_y, centred_y) + umv(dev.ss_bpm_x, centred_x) + + # # # Calibrate in X + # umv(dev.bsf_sl_xsize, 0.3) + # umv(dev.bsf_sl_xsize, 0.4) + # filename = bl.env.lut_dir / "bpm_calib" / f"ss_bpm_x_{fnow}.csv" + # xn_data = [] + # x_positions = np.linspace(centred_x - 0.3, centred_x + 0.3, 51) + # with open(filename, "w", encoding="utf-8") as f: + # f.write(f"Xpos,Xnorm,BPM1,BPM2,BPM3,BPM4\n") + # for x in x_positions: + # umv(dev.ss_bpm_x, x) + # print(f"Moving BPM X to {x} mm") + # time.sleep(0.2) + # xn, yn = compute_norm_ss() + # xn_data.append(xn) + # with open(filename, "a", encoding="utf-8") as f: + # f.write(f"{x},{xn}\n") + + # # Calibrate in Y + umv(dev.ss_bpm_x, centred_x) + umv(dev.bsf_sl_xsize, 0.3) + umv(dev.bsf_sl_ysize, 0.4) + filename = bl.env.lut_dir / "bpm_calib" / f"ss_bpm_y_{fnow}.csv" + y_positions = np.linspace(centred_y - 0.04, centred_y + 0.04, 41) + yn_data = [] + with open(filename, "w", encoding="utf-8") as f: + f.write(f"Ypos,Ynorm,BPM1,BPM2,BPM3,BPM4\n") + for y in y_positions: + umv(dev.ss_bpm_y, y) + print(f"Moving BPM Y to {y} mm") + time.sleep(0.2) + xn, yn = compute_norm_ss() + yn_data.append(yn) + with open(filename, "a", encoding="utf-8") as f: + f.write(f"{y},{yn}\n") + + umv(dev.ss_bpm_x, centred_x) + umv(dev.ss_bpm_y, centred_y) + umv(dev.bsf_sl_ysize, 3.0) + umv(dev.bsf_sl_xsize, 3.0) + +def run_calibration_lu(): + """Scan bpm in x and y and record normalised x and y positions""" + centred_x = 2.1816 + centred_y = 3.0175 + now = datetime.now() + fnow = filenow() + print(f"moving bpm to {centred_x}, {centred_y}") + umv(dev.lu_bpm_y, centred_y) + umv(dev.lu_bpm_x, centred_x) + + # # Calibrate in X + # umv(dev.bsf_sl_xsize, 0.3) + # umv(dev.bsf_sl_xsize, 0.4) + # filename = bl.env.lut_dir / "bpm_calib" / f"lu_bpm_x_{fnow}.csv" + # xn_data = [] + # x_positions = np.linspace(centred_x - 0.3, centred_x + 0.3, 51) + # with open(filename, "w", encoding="utf-8") as f: + # f.write(f"Xpos,Xnorm\n") + # for x in x_positions: + # umv(dev.lu_bpm_x, x) + # print(f"Moving BPM X to {x} mm") + # time.sleep(0.2) + # xn, yn = compute_norm_lu() + # xn_data.append(xn) + # with open(filename, "a", encoding="utf-8") as f: + # f.write(f"{x},{xn}\n") + + # # Calibrate in Y + umv(dev.lu_bpm_x, centred_x) + umv(dev.bsf_sl_xsize, 0.3) + umv(dev.bsf_sl_ysize, 0.4) + filename = bl.env.lut_dir / "bpm_calib" / f"lu_bpm_y_{fnow}.csv" + y_positions = np.linspace(centred_y - 0.04, centred_y + 0.04, 41) + yn_data = [] + with open(filename, "w", encoding="utf-8") as f: + f.write(f"Ypos,Ynorm,BPM1,BPM2,BPM3,BPM4\n") + for y in y_positions: + umv(dev.lu_bpm_y, y) + print(f"Moving BPM Y to {y} mm") + time.sleep(0.2) + xn, yn = compute_norm_lu() + yn_data.append(yn) + with open(filename, "a", encoding="utf-8") as f: + f.write(f"{y},{yn}\n") + + umv(dev.lu_bpm_x, centred_x) + umv(dev.lu_bpm_y, centred_y) + umv(dev.bsf_sl_ysize, 3.0) + umv(dev.bsf_sl_xsize, 3.0) + def run_calibration(env): """Scan bpm in x and y and record normalised x and y positions""" centred_x = 0.444 @@ -86,27 +223,20 @@ def run_calibration(env): umv(dev.bcu_bpm_y, centred_y) umv(dev.ss_sl_ysize, 3.0) -def read_bpm_calibration_data( - env, - x_y, - rundate, - bpm_name="bcu_bpm", -): + +def read_bpm_calibration_data(env, x_y, rundate, bpm_name="bcu_bpm"): """Read BPM calibration data from CSV.""" filename = env.lut_dir / f"bpm_calib/{bpm_name}_{x_y}_{rundate}.csv" - data = np.loadtxt( - filename, - delimiter=",", - skiprows=1, - ) + data = np.loadtxt(filename, delimiter=",", skiprows=1) position = data[:, 0] bpm_norm = data[:, 1] return position, bpm_norm + # def fit_bpm_linear(env, filename, x_y, plot=True): # """ # Fit the linear region of a BPM calibration scan. @@ -200,31 +330,17 @@ def read_bpm_calibration_data( # plt.tight_layout() # plt.show() -# return result - - +# return result def polynomial_calibration( - env, - x_y, - rundate, - bpm_name="bcu_bpm", - degree=5, - signal_limit=0.9, - plot=True, + env, x_y, rundate, bpm_name="bcu_bpm", degree=5, signal_limit=0.9, plot=True ): # BPM centre during calibration run - bpm_centre = {"x": 0.441,"y": -1.5405,} + bpm_centre = {"x": 0.441, "y": -1.5405} - - xdata, ydata = read_bpm_calibration_data( - env, - x_y, - rundate=rundate, - bpm_name=bpm_name, - ) + xdata, ydata = read_bpm_calibration_data(env, x_y, rundate=rundate, bpm_name=bpm_name) # Keep useful BPM range mask = np.abs(ydata) < signal_limit @@ -262,26 +378,13 @@ def polynomial_calibration( print(f" crosshair_bpm_position = None") if plot: - signal_fit = np.linspace( - signal.min(), - signal.max(), - 500, - ) + signal_fit = np.linspace(signal.min(), signal.max(), 500) position_fit = np.polyval(coeffs, signal_fit) plt.figure(figsize=(7, 5)) - plt.scatter( - ydata, - xdata, - alpha=0.4, - label="Calibration data", - ) - plt.plot( - signal_fit, - position_fit, - label=f"{degree}th-order polynomial", - ) + plt.scatter(ydata, xdata, alpha=0.4, label="Calibration data") + plt.plot(signal_fit, position_fit, label=f"{degree}th-order polynomial") plt.xlabel(f"BPM {x_y} normalized signal") plt.ylabel(f"BPM {x_y} position (mm)") @@ -292,5 +395,3 @@ def polynomial_calibration( plt.show() return coeffs - - diff --git a/pxii_bec/macros/check.py b/pxii_bec/macros/check.py index b37f88d..660e8cd 100755 --- a/pxii_bec/macros/check.py +++ b/pxii_bec/macros/check.py @@ -5,7 +5,6 @@ from datetime import datetime from bec_lib.device import Signal, Positioner - # ------------------------------------------------------------------- # Status Enum # ------------------------------------------------------------------- @@ -454,6 +453,9 @@ def filter_results(results, statuses=None): def run_check(show_all=False, scilog=False): + """Check the status of beamline motors (must exist as devices in BEC). + For a full list of checked devices, use run_check(show_all=True). + Results will be logged in scilog if scilog=True""" results = check2() diff --git a/pxii_bec/macros/chmirrh.py b/pxii_bec/macros/chmirrh.py index 94b58ce..fa08372 100644 --- a/pxii_bec/macros/chmirrh.py +++ b/pxii_bec/macros/chmirrh.py @@ -1,136 +1,134 @@ -import numpy as np -import math, time +import numpy as np +import math, time import matplotlib.pyplot as plt import scipy + ######################################################## -### scan FE slits and check BPMs before and after mirror +### scan FE slits and check BPMs before and after mirror ######################################################## -def gaussfit(x,y,p): -# define a gaussian fitting function where -# p[0] = amplitude -# p[1] = mean -# p[2] = sigma -# p[3] = const offset - - fitfct = lambda p, x0: p[0]*np.exp(-(x0-p[1])**2/(2.0*p[2]**2))+p[3] - #fitfct = lambda p, x0: p[0]*np.exp(-(x0-p[1])**2/(2.0*p[2]**2)) - errfct = lambda p, x0,y0: fitfct(p,x0)-y0 + +def gaussfit(x, y, p): + # define a gaussian fitting function where + # p[0] = amplitude + # p[1] = mean + # p[2] = sigma + # p[3] = const offset + + fitfct = lambda p, x0: p[0] * np.exp(-((x0 - p[1]) ** 2) / (2.0 * p[2] ** 2)) + p[3] + # fitfct = lambda p, x0: p[0]*np.exp(-(x0-p[1])**2/(2.0*p[2]**2)) + errfct = lambda p, x0, y0: fitfct(p, x0) - y0 # guess fit parameters - ind0 = np.where(y==max(y))[0] - p0=np.c_[max(y), x[ind0], np.std(y), np.mean(y[0:5])] - #p0=scipy.c_[max(y), np.where(y==max(y))[0], np.std(y)] - # array generation [[]], and taking only one dimens + ind0 = np.where(y == max(y))[0] + p0 = np.c_[max(y), x[ind0], np.std(y), np.mean(y[0:5])] + # p0=scipy.c_[max(y), np.where(y==max(y))[0], np.std(y)] + # array generation [[]], and taking only one dimens # fit a gaussian to the correlation function - #print('p0 = ' , p0) - p1, success = scipy.optimize.leastsq(errfct, p0.copy()[0], - args=(x,y)) + # print('p0 = ' , p0) + p1, success = scipy.optimize.leastsq(errfct, p0.copy()[0], args=(x, y)) - #plt.figure() - bestfit=fitfct(p1,x) - #print('************************', x,y) - plt.plot(x,y,'r*') - plt.plot(x,bestfit,'r-') + # plt.figure() + bestfit = fitfct(p1, x) + # print('************************', x,y) + plt.plot(x, y, "r*") + plt.plot(x, bestfit, "r-") # different fit fct - #popt, pcov = curve_fit(fitfct, x, y) - #newfit=fitfct(popt,x) - #plt.plot(x,newfit,'g+') + # popt, pcov = curve_fit(fitfct, x, y) + # newfit=fitfct(popt,x) + # plt.plot(x,newfit,'g+') - plt.show() return bestfit, p1 -def scan_fe_sl(dir = "y"): - if dir in ["y","v"]: - sdir ="vertical" + +def scan_fe_sl(dir="y"): + if dir in ["y", "v"]: + sdir = "vertical" fe_size0 = dev.fe_sl_ysize.user_readback.get() - print('Closing vertical FE slits to 0.1') + print("Closing vertical FE slits to 0.1") umv(dev.fe_sl_ysize, 0.1) - s = scans.line_scan(dev.fe_sl_ycen,-1,1, exp_time=02., steps=21, relative=True) + s = scans.line_scan(dev.fe_sl_ycen, -1, 1, exp_time=02.0, steps=21, relative=True) time.sleep(0.1) umv(dev.fe_sl_ysize, fe_size0) - print(f'Opening {sdir} FE slits to {fe_size0}') - if dir in ["x","h"]: - sdir ="horizontal" + print(f"Opening {sdir} FE slits to {fe_size0}") + if dir in ["x", "h"]: + sdir = "horizontal" fe_size0 = dev.fe_sl_xsize.user_readback.get() - print('Closing horizontal FE slits to 0.1') + print("Closing horizontal FE slits to 0.1") umv(dev.fe_sl_xsize, 0.1) - s = scans.line_scan(dev.fe_sl_xcen,-1,1, exp_time=02., steps=21, relative=True) + s = scans.line_scan(dev.fe_sl_xcen, -1, 1, exp_time=02.0, steps=21, relative=True) time.sleep(0.1) umv(dev.fe_sl_xsize, fe_size0) - print(f'Opening {sdir} FE slits to {fe_size0}') + print(f"Opening {sdir} FE slits to {fe_size0}") else: - print('no valid direction, doing nothing') - -def mirrh(dir='y'): - - #dat_ss = read_data_csv("/home/anuschka/SS_pitch2p94.csv") - #dat_bcu = read_data_csv("/home/anuschka/BCU_pitch2p94.csv") + print("no valid direction, doing nothing") + + +def mirrh(dir="y"): + + # dat_ss = read_data_csv("/home/anuschka/SS_pitch2p94.csv") + # dat_bcu = read_data_csv("/home/anuschka/BCU_pitch2p94.csv") scan_fe_sl(dir=dir) ind = -1 - if dir in ["x","h"]: - slitmot = 'fe_sl_xcen' - if dir in ["y","v"]: - slitmot = 'fe_sl_ycen' - - dat_ss = save_data(ind, slitmot, 'ss_bpmsum', isave = 0) - dat_bcu = save_data(ind, slitmot, 'bcu_bpmsum', isave = 0) - + if dir in ["x", "h"]: + slitmot = "fe_sl_xcen" + if dir in ["y", "v"]: + slitmot = "fe_sl_ycen" - data_xs = dat_ss[0] # csv would be: dat_ss[:, 0] + dat_ss = save_data(ind, slitmot, "ss_bpmsum", isave=0) + dat_bcu = save_data(ind, slitmot, "bcu_bpmsum", isave=0) + + data_xs = dat_ss[0] # csv would be: dat_ss[:, 0] data_ys = dat_ss[1] - + data_xb = dat_bcu[0] data_yb = dat_bcu[1] - #plt.figure() + # plt.figure() - #plt.plot(data_xs, data_ys, "*") - #plt.plot(data_xb, data_yb, "+") + # plt.plot(data_xs, data_ys, "*") + # plt.plot(data_xb, data_yb, "+") - data_ys_norm = data_ys/max(data_ys) # looks better than data_ys/sum(data_ys) - data_yb_norm = data_yb/max(data_yb) + data_ys_norm = data_ys / max(data_ys) # looks better than data_ys/sum(data_ys) + data_yb_norm = data_yb / max(data_yb) plt.figure() plt.plot(data_xs, data_ys_norm, "*") plt.plot(data_xb, data_yb_norm, "+") - - y= data_ys_norm - xm = np.where(y==max(y))[0] + y = data_ys_norm + xm = np.where(y == max(y))[0] xmi = data_xs[xm] - #print('xm, xmi', xm, xmi) + # print('xm, xmi', xm, xmi) - pf1 = [1, xmi , np.std(data_ys_norm), np.mean(y[0:5])] # bg = 0 - fit_s, ps = gaussfit(data_xs,data_ys_norm, pf1) + pf1 = [1, xmi, np.std(data_ys_norm), np.mean(y[0:5])] # bg = 0 + fit_s, ps = gaussfit(data_xs, data_ys_norm, pf1) - y= data_yb_norm - xm = np.where(y==max(y))[0] + y = data_yb_norm + xm = np.where(y == max(y))[0] xmi = data_xb[xm] - #print('xm, xmi', xm, xmi) + # print('xm, xmi', xm, xmi) pf2 = [1, xmi, np.std(data_yb_norm), np.mean(y[0:5])] # bg = -11 - fit_b, pb = gaussfit(data_xb,data_yb_norm, pf2) - + fit_b, pb = gaussfit(data_xb, data_yb_norm, pf2) plt.figure() - plt.plot(data_xs, fit_s-ps[3], "*") - plt.plot(data_xs, fit_s-ps[3]) - plt.plot(data_xb, fit_b-pb[3], "+") - plt.plot(data_xb, fit_b-pb[3]) + plt.plot(data_xs, fit_s - ps[3], "*") + plt.plot(data_xs, fit_s - ps[3]) + plt.plot(data_xb, fit_b - pb[3], "+") + plt.plot(data_xb, fit_b - pb[3]) - print('Fit Params of First BPM, SS, ps', ps) - print('Fit Params of Second BPM, BCU, pb', pb) + print("Fit Params of First BPM, SS, ps", ps) + print("Fit Params of Second BPM, BCU, pb", pb) print() - if abs(ps[1]-pb[1]) > 0.05: - print('***** WARNING ******, mirror height not ok') - if abs(ps[2]-pb[2]) > 0.05: - print('***** WARNING ******, mirror not catching full beam') - + if abs(ps[1] - pb[1]) > 0.05: + print("***** WARNING ******, mirror height not ok") + if abs(ps[2] - pb[2]) > 0.05: + print("***** WARNING ******, mirror not catching full beam") diff --git a/pxii_bec/macros/create_daily_setup_gui.py b/pxii_bec/macros/create_daily_setup_gui.py new file mode 100644 index 0000000..555cd24 --- /dev/null +++ b/pxii_bec/macros/create_daily_setup_gui.py @@ -0,0 +1,29 @@ +def create_daily_setup(): + dock = bec.gui.new("DailySetup") + # plot1 = dock.new(widget="Waveform", object_name= "Plot_1") + # plot2 = dock.new(widget="Waveform", object_name= "Plot_2", relative_to="Plot_1", where="bottom") + # plot3 = dock.new(widget="Waveform", object_name= "Plot_3", relative_to = "Plot_2", where="bottom") + # plot4 = dock.new(widget="Waveform", object_name= "Plot_4", relative_to="Plot_1", where="right") + # plot5 = dock.new(widget="Waveform", object_name= "Plot_5", relative_to="Plot_2", where="right") + # plot6 = dock.new(widget="Waveform", object_name= "Plot_6", relative_to="Plot_3", where="right") + # log = dock.new(widget="TextBox", object_name= "Info", relative_to="Plot_1",where="left") + # progress = dock.new(widget="TextBox", object_name= "Progress", relative_to="Info", where="left") + progress = dock.new(widget="TextBox", object_name= "Progress") + log = dock.new(widget="TextBox", object_name= "Info", relative_to="Progress", where ="right") + plot1 = dock.new(widget="Waveform", object_name= "Plot_1", relative_to="Info", where ="right") + plot2 = dock.new(widget="Waveform", object_name= "Plot_2", relative_to="Plot_1", where="right") + plot3 = dock.new(widget="Waveform", object_name= "Plot_3", relative_to = "Plot_1", where="bottom") + plot4 = dock.new(widget="Waveform", object_name= "Plot_4", relative_to="Plot_2", where="bottom") + plot5 = dock.new(widget="Waveform", object_name= "Plot_5", relative_to = "Plot_3", where="bottom") + plot6 = dock.new(widget="Waveform", object_name= "Plot_6", relative_to="Plot_4", where="bottom") + dock.set_layout_ratios( + horizontal=[1,2,1.2,1.2], + vertical=[1,1,1], + ) + + progress.set_plain_text("") + log.set_plain_text("") + + dock.save_profile() + + diff --git a/pxii_bec/macros/daily.py b/pxii_bec/macros/daily.py index 2826182..58fc1d5 100644 --- a/pxii_bec/macros/daily.py +++ b/pxii_bec/macros/daily.py @@ -1,458 +1,1152 @@ -""" Files needed for the daily setup routine for local contacts """ +"""Daily setup routine at for local contacts""" + +# ============================================================================= +# Imports / context +# ============================================================================= import time +import subprocess +import shlex +import csv +import base64 +import html as html_lib +import numpy as np +from datetime import datetime +from contextlib import contextmanager +from dataclasses import dataclass from pxii_bec.scripts import beamline_context as bl from pxii_bec.macros.beamline_planner import BeamlineState +import matplotlib.pyplot as plt +from matplotlib.patches import Ellipse -def daily_setup(energy=12400): - """ The daily setup workflow """ - - plot1, plot2, plot3, plot4, log, progress = select_daily_setup_gui() - - messages = [] - - progress_state = { - "Set energy": "todo", - "Align beamstop": "todo", - "Measure beam position": "todo", - "Align collimator": "todo", - "Measure flux": "todo", - "Save new positions to BEC": "todo", - # "Align rotation axis": "todo", - } - - update_log(log, messages, "Starting daily beamline setup") - - clear_daily_plots - # # Step 1: set beamline energy - set_progress(progress, progress_state, "Set energy", "running") - daily_energy(energy,plot_widget=plot1) - set_progress(progress, progress_state, "Set energy", "done") - update_log(log, messages, f"Beamline energy is {get_current_energy():.5g} eV") - - # Step 2: align beamstop - clear_daily_plots() - set_progress(progress, progress_state, "Align beamstop", "running") - bs_result = daily_beamstop() - set_progress(progress, progress_state, "Align beamstop", "done") - update_log(log, messages, f"Beamstop centred: " - f"X centre: {bs_result['x_position']:.4g}, " - f"Y centre: {bs_result['y_position']:.4g}" - ) - save_current_position(dev.bs_x, 'in') - save_current_position(dev.bs_y, 'in') - set_progress(progress, progress_state, "Align beamstop", "done") - - # Step 3: measure beam position - set_progress(progress, progress_state, "Measure beam position", "running") - pos_result = daily_beampos() - update_log(log, messages, "Beam centres: ") - for zoom in CameraZoom: - update_log(log, messages, f"{zoom.label} zoom: ({pos_result[zoom.label]['x']:.4g}, {pos_result[zoom.label]['y']:.4g})") - set_progress(progress, progress_state, "Measure beam position", "done") - - # Step 4: Align collimator - # set_progress(progress, progress_state, "Align collimator", "running") - # coll_result = daily_coll() - # update_log(log, messages, f"Collimator alignment: " - # f"X centre: {coll_result['x_position']:.4g},\n" - # f" X width = {coll_result['x_width']:.4f} mm\n" - # f" Y centre = {coll_result['y_position']:.4f} mm\n" - # f" Y width = {coll_result['y_width']:.4f} mm\n" - # f" Y/X width ratio = {coll_result['y_width'] / coll_result['x_width']:.3f}" - # ) - update_log(log, messages, "Collimator alignment was skipped") - # save_current_position(dev.coll_x, 'in') - # save_current_position(dev.coll_y, 'in') - # set_progress(progress, progress_state, "Align collimator", "done") - - # Step 5: measure flux - set_progress(progress, progress_state, "Measure flux", "running") - flux1,flux2 = bpm2flux() - update_log(log, messages, f"Flux at 100% transmission is {flux2:.3g} ph/s") - set_progress(progress, progress_state, "Measure flux", "done") - - # Step 6: save new positions and reload - set_progress(progress, progress_state, "Save new positions to BEC", "running") - save_and_reload() - update_log(log, messages, f"Positions have been saved in BEC, please update in Aare") - set_progress(progress, progress_state, "Save new positions to BEC", "done") - - # Move back to sample alignment - bl.planner.move_to(BeamlineState.SAMPLE_ALIGNMENT) - -def select_daily_setup_gui_old(): - """Return widgets belonging to the Daily Setup GUI.""" - - window_name = "DailySetup" - open_windows = bec.gui.windows - - if open_windows.get(window_name) is None: - gui = bec.gui.new(window_name) - - plot1 = gui.new( - widget = "Waveform", - object_name = "Plot1" - ) - - plot2 = gui.new( - widget = "Waveform", - object_name = "Plot2" - ) - - results = gui.new( - widget = "TextBox", - object_name = "Results", - where = "bottom", - ) - - log = gui.new( - widget = "TextBox", - object_name = "Info", - where = "bottom", - ) - - progress = gui.new( - widget = "TextBox", - object_name = "Progress", - where = "left", - ) - - else: - gui = open_windows[window_name] - plot1 = gui.Plot1 - plot2 = gui.Plot2 - log = gui.Info - results = gui.Results - progress = gui.Progress - - return plot1, plot2, results, log, progress +@dataclass +class DailySetupContext: + plot1: object + plot2: object + plot3: object + plot4: object + log: object + progress: object + messages: list + progress_state: dict -def select_daily_setup_gui(): - """Return widgets belonging to the Daily Setup GUI.""" - - window_name = "DailySetup" - open_windows = bec.gui.windows - - if open_windows.get(window_name) is None: - gui = bec.gui.new(window_name) - - # Row 1 - plot1 = gui.new( - widget="Waveform", - object_name="Beamstop_X", - ) - - plot2 = gui.new( - widget="Waveform", - object_name="Beamstop_Y", - relative_to="Beamstop_X", - where="right", - ) - - # Row 2 - start a new full-width row - plot3 = gui.new( - widget="Waveform", - object_name="Collimator_X", - where="bottom", - ) - - plot4 = gui.new( - widget="Waveform", - object_name="Collimator_Y", - relative_to="Collimator_X", - where="right", - ) - - # Row 3 - start another full-width row - log = gui.new( - widget="TextBox", - object_name="Info", - where="bottom", - ) - - progress = gui.new( - widget="TextBox", - object_name="Progress", - relative_to="Info", - where="right", - ) - gui.set_layout_ratios( - horizontal=[1, 1], - vertical=[2, 2, 1], - ) - else: - gui = open_windows[window_name] - plot1 = gui.Beamstop_X - plot2 = gui.Beamstop_Y - plot3 = gui.Collimator_X - plot4 = gui.Collimator_Y - log = gui.Info - progress = gui.Progress - - return plot1, plot2, plot3, plot4, log, progress - -def clear_daily_plots(): - plot1, plot2, plot3, plot4, log, progress = select_daily_setup_gui() - plot1.clear_all() - plot2.clear_all() - plot3.clear_all() - plot4.clear_all() +# ============================================================================= +# Main daily setup +# ============================================================================= - -def update_log(log_box, messages, message): - """Add new message to the daily setup log """ - messages.append(message) - log_box.set_plain_text("\n".join(messages)) - -def update_progress(progress_box, progress_state): - """ Sets up the status icons for the progress tracker""" - status = { - "todo": "\u25CB", - "running": "\u25B6", - "done": "\u2713", - "warning": "\u26A0", - "failed": "\u2717", - } - - - text = "\n".join( - f"{status[state]} {label}" - for label, state in progress_state.items() - ) - progress_box.set_plain_text(text) - -def set_progress(progress_box, progress_state, step, status): - """Change the status of one step and update the display.""" - progress_state[step] = status - update_progress(progress_box, progress_state) - -def plot_daily_setup_scan( - motor_name, - signal_name, - plot="x", - title=None, +def daily_setup( + energy=12400, + *, + pre_checks=True, + set_energy=True, + mono_scan=True, + move_beam=True, + align_beamstop=False, + # measure_beampos=False, + align_collimator=False, + measure_flux=True, + save_scilog=True, + weekly=None, ): - """Plot live scan data in one of the Daily Setup waveform widgets.""" + """Run selected daily beamline setup tasks.""" - plot1, plot2, plot3, plot4, log, progress = select_daily_setup_gui() + # Weekly checks run automatically on Wednesday unless explicitly overridden. + # Keep this as one task: weekly.py owns the weekly sequence. + if weekly is None: + weekly = datetime.now().weekday() == 2 - if plot.lower() == "beamstop_x": - wf = plot1 - elif plot.lower() == "beamstop_y": - wf = plot2 - elif plot.lower() == "collimator_x": - wf = plot3 - elif plot.lower() == "collimator_y": - wf = plot4 - else: - raise ValueError("plot must be 'x' or 'y'") + selected = { + "Pre checks": pre_checks, + "Weekly checks": weekly, + "Set energy": set_energy, + "Move beam": move_beam, + "Align beamstop": align_beamstop, + "Align collimator": align_collimator, + "Measure flux": measure_flux, + } - wf.clear_all() + results = {} + setup_start = time.perf_counter() - if title is None: - title = f"{motor_name} scan" + ctx = get_daily_setup_context(selected) - wf.title = title - wf.x_label = motor_name - wf.y_label = signal_name - wf.plot( - device_x=motor_name, - device_y=signal_name, + for task, enabled in selected.items(): + ctx.progress_state[task] = "todo" if enabled else "skipped" + + update_progress(ctx.progress, ctx.progress_state) + update_log(ctx.log, ctx.messages, "Starting daily beamline setup") + update_log(ctx.log, ctx.messages,"\nDaily setup normally takes about 1 min.") + update_log(ctx.log, ctx.messages,"\nWith Wednesday checks, allow 8-10 minutes.") + update_log(ctx.log, ctx.messages,"Good time to get a coffee.\n") + + + try: + # --------------------------------------------------------- + # Pre-flight checks + # --------------------------------------------------------- + if pre_checks: + with time_step(results, "Pre checks"): + prechecks_ok, results["Pre checks"] = run_pre_checks(ctx) + + # Machine checks are critical: stop daily setup + if not prechecks_ok: + update_log( + ctx.log, + ctx.messages, + f"Daily setup stopped because machine pre-checks failed." + ) + total_duration = time.perf_counter() - setup_start + + if save_scilog: + log_daily_setup_to_scilog( + bec, + results, + ctx.progress_state, + total_duration=total_duration, + messages=ctx.messages, + ) + return results + + # --------------------------------------------------------- + # Weekly checks (Wednesday by default) + # --------------------------------------------------------- + # Machine pre-checks deliberately happen first: the weekly checks move + # beamline hardware and should not bypass the normal safety gate. + if weekly: + with time_step(results, "Weekly checks"): + results["Weekly checks"] = run_weekly_checks(ctx) + + # --------------------------------------------------------- + # Set energy + # --------------------------------------------------------- + if set_energy: + with time_step(results, "Set energy"): + results["Set energy"] = run_daily_energy( + energy, + mono_scan, + ctx, + ) + + # --------------------------------------------------------- + # Move beam + # --------------------------------------------------------- + if move_beam: + with time_step(results, "Move beam"): + results["Move beam"] = run_daily_movebeam(ctx) + + # --------------------------------------------------------- + # Align beamstop + # --------------------------------------------------------- + if align_beamstop: + with time_step(results, "Align beamstop"): + results["Align beamstop"] = run_daily_beamstop(ctx) + + # # --------------------------------------------------------- + # # Measure beam position + # # --------------------------------------------------------- + # if measure_beampos: + # with time_step(results, "Measure beam position"): + # results["Measure beam position"] = run_daily_beamposition(ctx) + + # --------------------------------------------------------- + # Align collimator + # --------------------------------------------------------- + if align_collimator: + with time_step(results, "Align collimator"): + results["Align collimator"] = run_daily_collimator(ctx) + + # --------------------------------------------------------- + # Measure flux + # --------------------------------------------------------- + if measure_flux: + with time_step(results, "Measure flux"): + results["Measure flux"] = run_daily_flux(ctx) + + # --------------------------------------------------------- + # Measure time taken + # --------------------------------------------------------- + + total_duration = time.perf_counter() - setup_start + update_log( + ctx.log, + ctx.messages, + f"Total duration: {format_duration(total_duration)}", + ) + + + # --------------------------------------------------------- + # Save daily diagnostic history + # --------------------------------------------------------- + log_daily_setup_to_csv(results) + + # --------------------------------------------------------- + # Save final beam image for HTML report and SciLog + # --------------------------------------------------------- + save_daily_beam_image(results) + + + # --------------------------------------------------------- + # Create and display final HTML report + # --------------------------------------------------------- + + html = create_daily_html_report( + results, + total_duration=total_duration, + messages=ctx.messages, + ) + + ctx.log.set_html_text(html) + + + # --------------------------------------------------------- + # SciLog + # --------------------------------------------------------- + if save_scilog: + log_daily_setup_to_scilog( + bec, + results, + ctx.progress_state, + total_duration=total_duration, + messages=ctx.messages, + ) + + return results + + finally: + print("done") + bl.planner.move_to(BeamlineState.ROBOT_SAMPLE_EXCHANGE) + + +def get_daily_setup_context(tasks=None): + """Get widgets and state used by daily setup tasks.""" + + plot1, plot2, plot3, plot4, plot5, plot6, log, progress = select_daily_setup_gui() + + # Clear text from previous run + log.set_plain_text("") + progress.set_plain_text("") + + # daily_report = f" bl.env." + + if tasks is None: + tasks = [ + "Set energy", + "Move beam", + "Align beamstop", + # "Measure beam position", + "Align collimator", + "Measure flux", + "Save new positions to BEC", + ] + + return DailySetupContext( + plot1=plot1, + plot2=plot2, + plot3=plot3, + plot4=plot4, + log=log, + progress=progress, + messages=[], + progress_state={task: "todo" for task in tasks}, ) -def daily_energy(energy, plot_widget=None): - """ Set the beamline to the required energy """ - current_energy = get_current_energy() - if abs(energy - current_energy) > 1: - bl_energy(energy, window_name="DailySetup", plot_widget=plot_widget) - else: - gap_actual = dev.id_gap.position - gap_req = new_calc_gap(energy) - if abs(gap_actual-gap_req) > 0.05: - umv(dev.id_gap, gap_req) - mono_pitch_scan(window_name="DailySetup", plot_widget=plot_widget) -def set_zoom(zoom): - """Set sample camera zoom level.""" +# ============================================================================= +# Pre-checks +# ============================================================================= - if isinstance(zoom, str): - zoom = CameraZoom.from_label(zoom) - umv(dev.scam_zoom, zoom.position) - else: - umv(dev.scam_zoom, zoom) +def run_pre_checks(ctx): + """Run machine and experimental hutch pre-flight checks. -def daily_beampos(): - """Measure beam positions at different zoom levels""" - results = {} - # Ensure shutter and detector cover are closed before changing states - dev.bcu_shutter.put(0) - bl.d['det_cov'].move('close') - try: - # set transmission to 10% - dev.transm.put(0.1) + Machine checks are critical and stop the setup if they fail. + Experimental hutch checks are advisory and do not stop the setup. + """ - # move to beam visualisation - bl.planner.move_to(BeamlineState.BEAM_VISUALISATION) + task = "Pre checks" - # open shutter - dev.bcu_shutter.put(1) + set_progress( + ctx.progress, + ctx.progress_state, + task, + "running", + ) - for zoom in CameraZoom: - print(F"Moving to {zoom.label}") - umv(dev.scam_zoom, zoom.position) - - # set autoexposure - auto_exposure(cam="samcam", max_iter=25) - time.sleep(0.2) - - # take readings - x = dev.samcam_x.read()['samcam_x']['value'] - y = dev.samcam_y.read()['samcam_y']['value'] - - # append results - results[zoom.label] = {'x': x, 'y': y} - - print(f" {zoom.label}: x = {x:.4g}, y = {y:.4g}") - return results - finally: - dev.bcu_shutter.put(0) - -def daily_coll(): - """Centre the collimator in X and Y using the I1 diode.""" - plot1, plot2, plot3, plot4, log, progress = select_daily_setup_gui() + # --------------------------------------------------------- + # Machine checks - critical / fail fast + # --------------------------------------------------------- + machine_result = machine_prechecks() result = { - "success": False, - "start_intensity": None, - "y_start_intensity": None, - "y_end_intensity": None, - "x_start_intensity": None, - "x_end_intensity": None, - "y_position": None, - "x_position": None, + "ok": machine_result["ok"], + "warning": False, + "machine": machine_result, + "experiment_hutch": None, } - dev.bcu_shutter.put(0) + if not machine_result["ok"]: + update_log( + ctx.log, + ctx.messages, + format_prechecks_for_gui(result), + ) + + set_progress( + ctx.progress, + ctx.progress_state, + task, + "failed", + ) + + return False, result + + # --------------------------------------------------------- + # Experimental hutch checks - advisory + # --------------------------------------------------------- + eh_result = EH_prechecks() + + result["experiment_hutch"] = eh_result + + # EH problems are warnings, not setup failures + result["ok"] = True + result["warning"] = not eh_result["ok"] + + update_log( + ctx.log, + ctx.messages, + format_prechecks_for_gui(result), + ) + + status = "warning" if result["warning"] else "done" + + set_progress( + ctx.progress, + ctx.progress_state, + task, + status, + ) + + # EH warnings do NOT stop daily setup + return True, result + + +def format_prechecks_for_gui(result): + """Format pre-flight check results for the daily setup GUI.""" + + lines = [] + + mach = result.get("machine") + + if mach is not None: + lines.append("") + + for check in mach["checks"]: + symbol = "✓" if check["ok"] else "✗" + lines.append(f"{symbol} {check['message']}") + + eh = result.get("experiment_hutch") + + if eh is not None: + lines.append("") + + for check in eh["checks"]: + symbol = "✓" if check["ok"] else "✗" + lines.append(f"{symbol} {check['message']}") + + return "\n".join(lines) + + +# -------------------------------------------------------------------------- +# Check machine current and shutter status +# -------------------------------------------------------------------------- +def machine_prechecks(): + """Run machine checks in dependency order. + Stop immediately if any machine check fails""" + + checks = [check_machine_current, + check_attended_mode, + check_fe_shutter, + check_hutch_shutter, + ] + + results = [] + + for check in checks: + result = check() + results.append(result) + + + if result["ok"]: + print(f"✓ {result['message']}") + else: + print(f"✗ {result['message']}") + + return{ + "ok": False, + "message": "Machine checks failed", + "checks": results, + } + + return { + "ok": True, + "message": "Machine checks passed", + "checks": results, + } + + +def check_machine_current(): + """Checks current is >30 mA""" + current = get_value(dev.sls_current) + + if current <= 30: + return { + "ok": False, + "message": f"Machine current too low {current:.1f} mA)", + "current": current, + } + + return { + "ok": True, + "message": f"Machine current OK ({current:.1f} mA)", + "current": current, + } + + + +def check_attended_mode(): + """Check beamline is in attended more""" + mode_pv = PreChecks.mode_pv + state = caget(mode_pv) + + if state == "offline": + return { + "ok": False, + "message": "Beamline is offline, please set to 'attended'", + } + + + return { + "ok": True, + "message": f"Beamline is not offline, (operation mode is {state})", + } + + + +def check_fe_shutter(): + """Check FE shutter is open""" + fe_shutter_pv = PreChecks.fe_shutter_pv + state = caget(fe_shutter_pv) + + if state != "Open": + return { + "ok": False, + "message": "FE shutter is not open'", + } + + return { + "ok": True, + "message": "FE shutter is open", + } + + + +def check_hutch_shutter(): + """Check hutch shutter is open""" + hutch_shutter_pv = PreChecks.hutch_shutter_pv + state = caget(hutch_shutter_pv) + + if state != "OPEN": + return { + "ok": False, + "message": "Hucth shutter is not open'", + } + + return { + "ok": True, + "message": "Hutch shutter is open", + } + + + + +# -------------------------------------------------------------------------- +# Check Experimental Hutch (EH) equipment +# -------------------------------------------------------------------------- +def EH_prechecks(): + """Check experimental hutch devices.""" + + checks = [ + check_xray_eye_out, + check_cryo_temp, + check_detector_height, + check_beamstop_position, + ] + + results = [] + + for check in checks: + result = check() + results.append(result) + + if result["ok"]: + print(f"✓ {result['message']}") + else: + print(f"✗ {result['message']}") + + all_ok = all(result["ok"] for result in results) + + return { + "ok": all_ok, + "message": ( + "Experiment hutch checks passed" + if all_ok + else "Experiment hutch checks require attention" + ), + "checks": results, + } + + +def check_xray_eye_out(): + ss_xi_pv = EHChecks.ss_xi_pv + ss_mot = EHChecks.ss_mot + + state = caget(ss_xi_pv) + try: + if state != "OUT": + umv(ss_mot, -7) + except Exception as exc: + return { + "ok": False, + "message": f"Moving X-ray eye failed: {exc}" + } + return { + "ok": True, + "message": "SS Xray eye is OUT" + } + + +def check_bcubpm(): + pass + +def check_beamstop_position(): + """Check that the beamstop blocks the direct beam. + + If the check fails, align the beamstop and verify again. + """ try: - if not bl.planner.is_state(BeamlineState.FLUX_MEASUREMENT): - bl.planner.move_to(BeamlineState.FLUX_MEASUREMENT) + if not bl.planner.is_state(BeamlineState.DET_DIODE): + bl.planner.move_to(BeamlineState.DET_DIODE) + bl.d["det_cov"].move("close") + dev.transm.put(EnergyDefaults.default_trans) dev.bcu_shutter.put(1) - dev.transm.put(0.1) + time.sleep(0.5) + + i2 = abs(dev.i2.read()["i2"]["value"]) + cutoff = Beamstop.i2_limit + + # Beamstop already OK + if i2 < cutoff: + return { + "ok": True, + "message": f"Beamstop blocking beam: I2 = {i2:.2e}\n", + "value": i2, + "realigned": False, + } + + print( + f"Beamstop check failed (I2={i2:.2e}). " + "Running beamstop alignment..." + ) + + # Close shutter before handing over to alignment routine + dev.bcu_shutter.put(0) + + alignment = daily_beamstop() + + if not alignment["ok"]: + return { + "ok": False, + "message": "Beamstop alignment failed", + "value": i2, + "realigned": True, + } + + # Verify after alignment + dev.bcu_shutter.put(1) time.sleep(0.2) - result["start_intensity"] = read_i1() - print(f"Starting intensity is {result['start_intensity']:.4g}") + i2_after = abs(dev.i2.read()["i2"]["value"]) - bl.d["coll_y"].move("in") + if i2_after < cutoff: + return { + "ok": True, + "message": ( + "Beamstop was misaligned and was successfully " + f"realigned (I2={i2_after:.2e})" + ), + "value": i2_after, + "realigned": True, + } - # Centre Y - result["y_start_intensity"] = read_i1() - print( - "Intensity with collimator in before Y scan: " - f"{result['y_start_intensity']:.4g}" - ) + return { + "ok": False, + "message": ( + "Beamstop still not blocking beam after alignment " + f"(I2={i2_after:.2e})" + ), + "value": i2_after, + "realigned": True, + } - y_result = find_feature( - dev.coll_y, - dev.i1, - -0.3, - 0.3, - 30, - feature="peak", - relative=True, - confirm=False, - plot_widget=plot4, - ) - - result["y_position"] = y_result["centre"] - result["y_end_intensity"] = read_i1() - result["y_width"] = y_result["width"] - - print( - "Intensity with collimator in after Y scan: " - f"{result['y_end_intensity']:.4g}" - ) - - # Centre X - result["x_start_intensity"] = read_i1() - - print( - "Intensity with collimator in before X scan: " - f"{result['x_start_intensity']:.4g}" - ) - - x_result = find_feature( - dev.coll_x, - dev.i1, - -0.3, - 0.3, - 30, - feature="peak", - relative=True, - confirm=False, - plot_widget=plot3, - ) - - result["x_position"] = x_result["centre"] - result["x_end_intensity"] = read_i1() - result["x_width"] = x_result["width"] - - print( - "Intensity with collimator in after X scan: " - f"{result['x_end_intensity']:.4g}" - ) - - result["success"] = True - - return result + except Exception as exc: + return { + "ok": False, + "message": f"Beamstop check failed: {exc}", + } finally: dev.bcu_shutter.put(0) -def daily_beamstop(): - """Centre the beamstop against the detector - cover, i2""" +def check_cryo_temp(): + cryo_pv = EHChecks.cryo_pv + temp = caget(cryo_pv) - plot1, plot2, plot3, plot4, log, progress = select_daily_setup_gui() + if temp is None: + return { + "ok":False, + "message": "Could not read cryostream temperature" + } - result = { - # "success": False, - # "x_position": None, - "y_position": None, - "intensity after alignment": None + if temp >= 110: + return { + "ok": False, + "message": f"Cryostream too warm ({temp} K)" + } + + return { + "ok":True, + "message": f"Cryostream temperature: {temp} K", } - dev.bcu_shutter.put(0) - dev.transm.put(0.1) +def check_detector_height(): + height = get_value(dev.det_y) + tol = 0.1 + if abs(height-BLSetup.detector_height) > tol: + return { + "ok":False, + "message": f"Detector not at operational height. Currently at {height:.1f} mm", + } + return { + "ok":True, + "message": f"Detector height: {height:.1f} mm" + } + +# ============================================================================= +# Energy +# ============================================================================= + +def run_weekly_checks(ctx, save_scilog=True): + """Run weekly beamline checks and report results to Daily Setup GUI.""" + + task = "Weekly checks" + + set_progress(ctx.progress, ctx.progress_state, task, "running") + clear_daily_plots() + try: + result = weekly_checks(save_scilog=save_scilog) + + except Exception as exc: + result = { + "ok": False, + "message": f"Weekly checks failed: {exc}", + } + + if not result.get("ok", True): + status = "failed" + + elif result.get("warning"): + status = "warning" + + else: + status = "done" + + # Basic summary + # Summary for Daily Setup GUI + lines = [] + + # Overall/outer failure + if result.get("message"): + lines.append(f"ERROR: {result['message']}") + + if result.get("error"): + lines.append(f"ERROR: {result['error']}") + + # BPM readings + if result.get("bpm_error"): + lines.append(f"WARNING: BPM readings failed: {result['bpm_error']}") + + # Slit scans + for name in ("FE", "BSF", "SS"): + check = result.get(name, {}) + if check and not check.get("ok", True): + error = check.get("error", "unknown error") + lines.append(f"WARNING: {name} slit scan failed: {error}") + + # Ge edge + edge = result.get("edge") + if edge: + lines.append( + f"Ge edge: {edge['measured_edge']:.2f} eV " + f"(expected {edge['expected_edge']:.2f} eV, " + f"energy offset {edge['energy_offset']:+.2f} eV)" + ) + + if result.get("edge_warning"): + lines.append(f"WARNING: {result['edge_warning']}") + + if result.get("edge_error"): + lines.append(f"ERROR: Ge edge scan failed: {result['edge_error']}") + + update_log(ctx.log, ctx.messages, "\n".join(lines)) + + set_progress(ctx.progress, ctx.progress_state, task, status) + + return result + + +def run_daily_energy(energy, mono_scan, ctx): + """Set beamline energy and log results.""" + + task = "Set energy" + + set_progress(ctx.progress, ctx.progress_state, task, "running") try: - # if not bl.planner.is_state(BeamlineState.BEAMSTOP_ALIGNMENT): - # bl.planner.move_to(BeamlineState.BEAMSTOP_ALIGNMENT) - # set_zoom('2x') - # auto_exposure('samcam', max_iter=20) + current_energy = get_current_energy() - # bl.d['bl_pos'].move('out') - # bl.d['det_cov'].move('close') - # dev.bcu_shutter.put(1) + if abs(energy - current_energy) > 1: + update_log( + ctx.log, + ctx.messages, + ( + f"\n▶ Changing energy from {current_energy:.0f} " + f"to {energy:.0f} ev.\n" + " Bragg movement is slow - this may take a few minutes. " + "Please wait....." + ), + ) + result = daily_energy(energy, mono_scan, plot_widget=ctx.plot1) + + except Exception as exc: + result = { + "ok": False, + "message": f"Energy setup failed: {exc}", + } + + + update_log(ctx.log, ctx.messages, format_energy_for_gui(result)) + + status = "done" if result["ok"] else "failed" + + set_progress(ctx.progress, ctx.progress_state, task, status) + + return result + + + + + +def format_energy_for_gui(result): + "Format energy change output for Daily GUI" + + icon = "✓" if result["ok"] else "✗" + + return f"\n{icon} {result['message']}" + + + +# ============================================================================= +# Move beam +# ============================================================================= + + +def run_daily_movebeam(ctx): + """Move beam to the scintillator crosshair""" + + task = "Move beam" + + set_progress(ctx.progress, ctx.progress_state, task, "running") + + try: + + result = daily_movebeam() + + except Exception as exc: + result = { + "ok": False, + "message": f"Align beam step failed: {exc}", + } + + if result.get("warning"): + status = "warning" + + elif result.get("ok"): + status = "done" + + else: + status = "failed" + + update_log(ctx.log, ctx.messages, format_movebeam_for_gui(result)) + + set_progress(ctx.progress, ctx.progress_state, task, status) + return result + + +def daily_movebeam(meas="scint", iterations=5): + """ + Move the beam onto the sample-camera crosshair using the VFM and HFM. + The sample crosshair parameters are defined in BeamMove class. + + The beam position is measured on the scintillator at 12.5X zoom. + VFM motor to move the beam vertically is defined in BeamMove class. + HFM motor to move beam horizontally is defined in BeamMove class. + + Corrections are repeated until the beam is within tolerance or the + maximum number of iterations is reached. + """ + + if meas != "scint": + raise ValueError(f"Unknown beam position measurement: {meas}") + + # ------------------------------------------------------------------ + # Setup + # ------------------------------------------------------------------ + + zoom = BeamMove.zoom + vfm_mot = BeamMove.vfm_mot + hfm_mot = BeamMove.hfm_mot + + x_target = BeamMove.scint_target_x + y_target = BeamMove.scint_target_y + tolerance = BeamMove.scint_tolerance + + # Safety limit for a single mirror motor correction + max_move = BeamMove.max_move + + # Starting mirror positions + vfm_start = get_value(vfm_mot) + hfm_start = get_value(hfm_mot) + + # Starting BCU BPM offsets + # Starting BCU BPM offsets + bpm_x_start, bpm_y_start, bpm_warning_start = read_bcu_beampos_safe() + # bpm_result = get_bcu_beampos() + # bpm_x_start = bpm_result["bcu_x_um"] + # bpm_y_start = bpm_result["bcu_y_um"] + + print( + "Moving beam to scintillator crosshair\n" + f"Target: X={x_target:.1f}, Y={y_target:.1f} px" + ) + + # ------------------------------------------------------------------ + # Initial measurement + # ------------------------------------------------------------------ + + prepare_scint_measurement(zoom=zoom) + try: + scint_result = read_scintXY() + + if not scint_result["ok"]: + print(f"✗ {scint_result['message']}") + return { + "ok": False, + "warning": True, + "message": scint_result["message"], + } + + x_start = scint_result["X_pixels"] + y_start = scint_result["Y_pixels"] + + # ------------------------------------------------------------------ + # Beam corrections + # ------------------------------------------------------------------ + + for i in range(iterations): + + x = scint_result["X_pixels"] + y = scint_result["Y_pixels"] + + diff_x = x_target - x + diff_y = y_target - y + + print( + f"\nCorrection {i + 1}: " + f"X={x:.2f}, Y={y:.2f} px " + f"(error X={diff_x:+.2f}, Y={diff_y:+.2f})" + ) + + # Already aligned + if abs(diff_x) <= tolerance and abs(diff_y) <= tolerance: + print("Beam is within tolerance.") + break + + # -------------------------------------------------------------- + # VFM: vertical beam position + # -------------------------------------------------------------- + + if abs(diff_y) > tolerance: + + current_vfm = get_value(vfm_mot) + vfm_change = diff_y / BeamMove.scint_y_slope + + if abs(vfm_change) > max_move: + message = ( + f"VFM correction {vfm_change:+.5f} mm exceeds " + f"maximum allowed move of {max_move:.3f} mm. " + "Manual check required." + ) + print(message) + + return { + "ok": False, + "warning": True, + "message": message, + "BeamX": None, + "BeamY": None, + } + + move_with_offset( + vfm_mot, + current_vfm + vfm_change, + ) + + # Remeasure because VFM movement may also affect X + scint_result = read_scintXY() + + if not scint_result["ok"]: + return { + "ok": False, + "warning": True, + "message": scint_result["message"], + } + + x = scint_result["X_pixels"] + y = scint_result["Y_pixels"] + + # -------------------------------------------------------------- + # HFM: horizontal beam position + # -------------------------------------------------------------- + + diff_x = x_target - x + + if abs(diff_x) > tolerance: + + current_hfm = get_value(hfm_mot) + hfm_change = diff_x / BeamMove.scint_x_slope + + if abs(hfm_change) > max_move: + message = ( + f"HFM correction {hfm_change:+.5f} mm exceeds " + f"maximum allowed move of {max_move:.3f} mm. " + "Manual check required." + ) + print(message) + + return { + "ok": False, + "warning": True, + "message": message, + "BeamX": None, + "BeamY": None, + } + + move_with_offset( + hfm_mot, + current_hfm + hfm_change, + ) + + # Measure again ready for next iteration + scint_result = read_scintXY() + + if not scint_result["ok"]: + return { + "ok": False, + "warning": True, + "message": scint_result["message"], + } + + # ------------------------------------------------------------------ + # Final verification + # ------------------------------------------------------------------ + + final_scint = read_scintXY(image=True) + + if not final_scint["ok"]: + return { + "ok": False, + "warning": True, + "message": final_scint["message"], + } + + final_x = final_scint["X_pixels"] + final_y = final_scint["Y_pixels"] + + diff_x = x_target - final_x + diff_y = y_target - final_y + + beamx = final_scint["X_diff_microns"] + beamy = final_scint["Y_diff_microns"] + + final_vfm = get_value(vfm_mot) + final_hfm = get_value(hfm_mot) + + #Final BCU BPM offsets + # bpm_result = get_bcu_beampos() + # bpm_x_end = bpm_result["bcu_x_um"] + # bpm_y_end = bpm_result["bcu_y_um"] + # Final BCU BPM offsets + bpm_x_end, bpm_y_end, bpm_warning_end = read_bcu_beampos_safe() + + bpm_warnings = [ + w for w in (bpm_warning_start, bpm_warning_end) + if w is not None + ] + + success = ( + abs(diff_x) <= tolerance + and abs(diff_y) <= tolerance + ) + + print( + f"\nStarting beam position: X={x_start:.2f}, Y={y_start:.2f} px\n" + f"Final beam position: X={final_x:.2f}, Y={final_y:.2f} px\n" + f"Final error: X={diff_x:+.2f}, Y={diff_y:+.2f} px\n" + f"VFM MOT: {vfm_start:.6f} -> {final_vfm:.6f}\n" + f"HFM MOT: {hfm_start:.6f} -> {final_hfm:.6f}" + ) + + if success: + message = ( + "Beam aligned\n" + f"Displacement: Beam X: {beamx:.1f} microns, " + f"Beam Y: {beamy:.1f} microns" + ) + warning = False + + else: + message = ( + f"Beam is not within ±{tolerance:.1f} px after " + f"{iterations} corrections." + ) + warning = True + if bpm_warnings: + message += "\nWARNING: " + " | ".join(bpm_warnings) + warning = True + + print(message) + + # ------------------------------------------------------------------ + # Results + # ------------------------------------------------------------------ + + return { + "ok": success, + "warning": warning, + "message": message, + "BeamX": beamx, + "BeamY": beamy, + "FinalX": final_x, + "FinalY": final_y, + "X FWHM": final_scint["X_FWHM"], + "Y FWHM": final_scint["Y_FWHM"], + "StartX": x_start, + "StartY": y_start, + "BPM_X_start": bpm_x_start, + "BPM_Y_start": bpm_y_start, + "Initial VFM MOT": vfm_start, + "Initial HFM MOT": hfm_start, + "Final VFM MOT": final_vfm, + "Final HFM MOT": final_hfm, + "BPM_X_end": bpm_x_end, + "BPM_Y_end": bpm_y_end, + "image": final_scint["image"], + } + finally: + finish_scint_measurement() + + + +def format_movebeam_for_gui(result): + "Format move beam output for Daily GUI" + + if result.get("warning"): + icon = "⚠" + elif result.get("ok"): + icon = "✓" + else: + icon = "✗" + + return f"\n{icon} {result['message']}" + + +# ============================================================================= +# Beamstop alignment +# ============================================================================= + + +def run_daily_beamstop(ctx): + """Align beamstop and save new positions.""" + + task = "Align beamstop" + + # clear_daily_plots() + set_progress(ctx.progress, ctx.progress_state, task, "running") + + try: + result = daily_beamstop() + + except Exception as exc: + result = { + "ok": False, + "message": f"Beamstop alignment failed: {exc}", + } + + + status = "done" if result["ok"] else "failed" + + update_log(ctx.log, ctx.messages, format_beamstop_for_gui(result)) + + # save_current_position(dev.bs_x, "in") + # save_current_position(dev.bs_y, "in") + + set_progress(ctx.progress, ctx.progress_state, task, status) + return result + + +def daily_beamstop(): + """Centre the beamstop against the detector cover diode, i2""" + + plot1, plot2, plot3, plot4, plot5, plot6, log, progress = select_daily_setup_gui() + + result = {} + + dev.transm.put(EnergyDefaults.default_trans) + + try: if not bl.planner.is_state(BeamlineState.DET_DIODE): bl.planner.move_to(BeamlineState.DET_DIODE) - # set_zoom('2x') - # auto_exposure('samcam', max_iter=20) - # bl.d['bl_pos'].move('out') - bl.d['det_cov'].move('close') + bl.d["det_cov"].move("close") dev.bcu_shutter.put(1) - time.sleep(0.2) # Centre Y @@ -467,7 +1161,7 @@ def daily_beamstop(): relative=True, confirm=False, window_name="DailySetup", - plot_widget=plot2, + plot_widget=plot6, ) # Wait for bs_y to setlle time.sleep(2) @@ -479,22 +1173,29 @@ def daily_beamstop(): 1.2, 30, feature="edge_offset", - offset = Beamstop.x_offset, + offset=Beamstop.x_offset, relative=True, confirm=False, window_name="DailySetup", - plot_widget=plot1, + plot_widget=plot5, ) - result["x_position"] = x_result["centre"] - result["y_position"] = y_result["centre"] + result["bs_x_pos"] = x_result["centre"] + result["bs_y_pos"] = y_result["centre"] result["intensity after alignment"] = read_i2() - print( - "Intensity after Y scan: " - f"{result['intensity after alignment']:.4g}\n" - f"Centred position is {result["x_position"]:.5g}, {result["y_position"]:.5g}" - ) + # message = ( + # "Intensity after Y scan: " + # f"{result['intensity after alignment']:.4g}\n" + # f"Centred position is {result["bs_x_pos"]:.5g}, {result["bs_y_pos"]:.5g}" + # ) + + message = f"BS_X: {result['bs_x_pos']:.3g} mm, " f"BS_Y: {result['bs_y_pos']:.3g} mm\n" + + print(message) + + result["ok"] = True + result["message"] = message return result @@ -502,4 +1203,1279 @@ def daily_beamstop(): dev.bcu_shutter.put(0) +def format_beamstop_for_gui(result): + "Format results for beamstop alignment" + icon = "✓" if result["ok"] else "✗" + return f"\n{icon} Beamstop aligned.\n{result['message']}" + + +# ============================================================================= +# Beam-position measurement +# ============================================================================= + + +def run_daily_beamposition(ctx): + """Measure the beam position at the scintillator at Aare zoom levels""" + + task = "Measure beam position" + set_progress(ctx.progress, ctx.progress_state, task, "running") + + beampos_result = daily_beamposition() + + update_log(ctx.log, ctx.messages, format_beam_position(beampos_result)) + + set_progress(ctx.progress, ctx.progress_state, task, "done") + + return beampos_result + + +def daily_beamposition(): + """Measure beam positions at different zoom levels""" + results = {} + + try: + # set transmission to default + dev.transm.put(EnergyDefaults.default_trans) + + # move to beam visualisation + if not bl.planner.is_state(BeamlineState.BEAM_VISUALISATION): + bl.planner.move_to(BeamlineState.BEAM_VISUALISATION) + + # open shutter + dev.bcu_shutter.put(1) + + for zoom in CameraZoom: + print(f"Moving to {zoom.label}") + umv(dev.scam_zoom, zoom.position) + + # set autoexposure + auto_exposure(cam="samcam", max_iter=25) + time.sleep(0.2) + + # take readings + x = dev.samcam_x.read()["samcam_x"]["value"] + y = dev.samcam_y.read()["samcam_y"]["value"] + + # append results + results[zoom.label] = {"x": x, "y": y} + + print(f" {zoom.label}: x = {x:.4g}, y = {y:.4g}") + + finally: + dev.bcu_shutter.put(0) + + return results + + +def format_beamposition(pos_result): + """Format camera beam positions for display.""" + + lines = [f"{'Zoom':<8} {'X / px':>10} {'Y / px':>10}", "-" * 30] + + for zoom, pos in pos_result.items(): + lines.append(f"{zoom:<8} {pos['x']:>10.1f} {pos['y']:>10.1f}") + + return "\n".join(lines) + + +# ============================================================================= +# Collimator alignment +# ============================================================================= + + +def run_daily_collimator(ctx): + """Align the collimator and save positions""" + + task = "Align collimator" + set_progress(ctx.progress, ctx.progress_state, task, "running") + + try: + result = daily_collimator() + + except Exception as exc: + result = { + "ok": False, + "message": f"Collimator alignment step failed: {exc}" + } + + update_log(ctx.log, ctx.messages, format_collimator_for_gui(result)) + + status = "done" if result["ok"] else "failed" + + set_progress(ctx.progress, ctx.progress_state, task, status) + return result + + +def daily_collimator(): + """Centre the collimator in X and Y using the I1 diode.""" + plot1, plot2, plot3, plot4, log, progress = select_daily_setup_gui() + + result = {} + + try: + if not bl.planner.is_state(BeamlineState.FLUX_MEASUREMENT): + bl.planner.move_to(BeamlineState.FLUX_MEASUREMENT) + + dev.transm.put(EnergyDefaults.default_trans) + dev.bcu_shutter.put(1) + + time.sleep(0.2) + + get_value(dev.i1) + + result["intensity_coll_out"] = get_value(dev.i1) + print(f"Starting intensity is {result["intensity_coll_out"]:.3e}") + + bl.d["coll_y"].move("in") + + # Centre Y + result["start_intensity_coll_in"] = get_value(dev.i1) + print( + "Intensity with collimator in before scans: " f"{result['start_intensity_coll_in']:.3e}" + ) + + y_result = find_feature( + dev.coll_y, + dev.i1, + -0.3, + 0.3, + 30, + feature="peak", + relative=True, + confirm=False, + plot_widget=plot4, + ) + + result["coll_y_pos"] = y_result["centre"] + result["coll_y_width"] = y_result["width"] + + # Centre X + + x_result = find_feature( + dev.coll_x, + dev.i1, + -0.3, + 0.3, + 30, + feature="peak", + relative=True, + confirm=False, + plot_widget=plot3, + ) + + result["coll_x_pos"] = x_result["centre"] + result["final_intensity_coll_in"] = get_value(dev.i1) + result["coll_x_width"] = x_result["width"] + + print( + "Intensity with collimator in after scans: " f"{result['final_intensity_coll_in']:.3e}" + ) + + result["ok"] = True + + message = ( + f"Collimator X: {result['coll_x_pos']:.3f} mm, " + f"Collimator Y: {result['coll_y_pos']:.3f} mm" + ) + + result["message"] = message + + return result + + finally: + dev.bcu_shutter.put(0) + + +def format_collimator_for_gui(result): + """Format collimator result for the Daily Setup GUI.""" + icon = "✓" if result["ok"] else "✗" + return f"\n{icon} Collimator aligned\n{result['message']}" + + + +# ============================================================================= +# Flux measurement +# ============================================================================= + + +def run_daily_flux(ctx): + """Measure the beam intensity using BCU BPM.""" + + task = "Measure flux" + set_progress(ctx.progress, ctx.progress_state, task, "running") + + try: + dev.transm.put(EnergyDefaults.default_trans) + time.sleep(3) + flux, full_flux = bpm2flux() + + message = ( + f"Intensity at current transmission: " + f"{flux:.2e} ph/s\n" + f"Intensity at 100% transmission: " + f"{full_flux:.2e} ph/s" + ) + + result = {"ok": True, + "message": message, + "current_flux": flux, + "full_flux": full_flux, + } + + except Exception as exc: + result = { + "ok": False, + "message": f"(Flux measurement failed: {exc})", + } + + status = "done" if result["ok"] else "failed" + + update_log(ctx.log, ctx.messages, format_flux_for_gui(result)) + + set_progress(ctx.progress, ctx.progress_state, task, status) + return result + + +def format_flux_for_gui(result): + icon = "✓" if result["ok"] else "✗" + return f"\n{icon} Flux measured\n{result['message']}\n" + +# ============================================================================= +# Daily-setup GUI helpers +# ============================================================================= +def read_bcu_beampos_safe(): + """Read calibrated BCU beam position without failing beam alignment.""" + try: + result = get_bcu_beampos() + return result["bcu_x_um"], result["bcu_y_um"], None + + except Exception as exc: + warning = f"BCU BPM position unavailable: {exc}" + print(f"WARNING: {warning}") + return None, None, warning + +def select_daily_setup_gui(): + """Return widgets belonging to the Daily Setup GUI.""" + + window_name = "DailySetup" + open_windows = bec.gui.windows + + if open_windows.get(window_name) is None: + gui = bec.gui.new(window_name) + + # Ensure the placeholder report exists before loading the profile + # filename = bl.env.daily_setup_dir / "daily_report.pdf" + # if not filename.exists(): + # create_empty_daily_report(filename) + + # Restore the standard Daily Setup layout + gui.load_profile("DailySetup") + # gui.Report.load_pdf(str(filename)) + # gui.Report.fit_to_page() + + else: + gui = open_windows[window_name] + + return ( + gui.Plot_1, + gui.Plot_2, + gui.Plot_3, + gui.Plot_4, + gui.Plot_5, + gui.Plot_6, + gui.Info, + gui.Progress, + ) + + +def clear_daily_plots(): + plot1, plot2, plot3, plot4, plot5, plot6, log, progress = select_daily_setup_gui() + plot1.clear_all() + plot2.clear_all() + plot3.clear_all() + plot4.clear_all() + plot5.clear_all() + plot6.clear_all() + + +def update_log(log_box, messages, message): + """Add new message to the daily setup log""" + messages.append(message) + log_box.set_plain_text("\n".join(messages)) + + +def update_progress(progress_box, progress_state): + """Sets up the status icons for the progress tracker""" + status = { + "todo": "\u25cb", + "running": "\u25b6", + "done": "\u2713", + "warning": "\u26a0", + "skipped": "–", + "failed": "\u2717", + } + + text = "\n".join(f"{status[state]} {label}" for label, state in progress_state.items()) + progress_box.set_plain_text(text) + + +def set_progress(progress_box, progress_state, step, status): + """Change the status of one step and update the display.""" + progress_state[step] = status + update_progress(progress_box, progress_state) + + +def plot_daily_setup_scan(motor_name, signal_name, plot="x", title=None): + """Plot live scan data in one of the Daily Setup waveform widgets.""" + + plot1, plot2, plot3, plot4, log, progress = select_daily_setup_gui() + + if plot.lower() == "plot_1": + wf = plot1 + elif plot.lower() == "plot_2": + wf = plot2 + elif plot.lower() == "plot_3": + wf = plot3 + elif plot.lower() == "plot_4": + wf = plot4 + else: + raise ValueError("plot must be 'x' or 'y'") + + wf.clear_all() + + if title is None: + title = f"{motor_name} scan" + + wf.title = title + wf.x_label = motor_name + wf.y_label = signal_name + + wf.plot(device_x=motor_name, device_y=signal_name) + + +# ============================================================================= +# SciLog +# ============================================================================= + + +def log_daily_setup_to_scilog( + bec, + results, + progress_state, + total_duration=None, + messages=None, +): + """Send compact daily setup summary to SciLog.""" + + msg = bec.messaging.scilog.new() + + date = datetime.now().strftime("%-d %B %Y") + + + msg.add_text(f"{bl.env.beamline_name} Daily Setup — {date}\n\n", bold=True) + + add_prechecks_to_scilog(msg, results) + add_setup_results_to_scilog(msg, results, progress_state) + + msg.add_text("\n") + + overall = get_daily_setup_status(progress_state) + + msg.add_text("Overall status: ", bold=True) + msg.add_text(f"{overall}\n") + + if total_duration is not None: + msg.add_text("Total duration: ", bold=True) + msg.add_text(f"{format_duration(total_duration)}\n") + + # Final beam image, if move_beam produced one + move_result = results.get("Move beam", {}) + image_file = move_result.get("image_file") + + if image_file is not None: + msg.add_text("\nFinal beam position\n", bold=True) + msg.add_attachment(str(image_file), width=600) + + # Preserve the same information shown in the GUI log + if messages: + msg.add_text("\nSetup information\n", bold=True) + for message in messages: + msg.add_text(f"{message}\n") + + msg.add_tags(["daily-setup", bl.env.beamline_name]) + msg.send() + + # Motor positions snapshot + log_daily_setup_positions(bec) + +def log_daily_setup_positions(bec): + """Record important motor positions after daily setup""" + + vfm_mot = BeamMove.vfm_mot + hfm_mot = BeamMove.hfm_mot + + bec.messaging.scilog.log_positions( + devices=[ + "dcm_bragg", + "dcm_froll", + "dcm_pitch", + "dcm_fpitch", + "vfm_y", + "vfm_pitch", + vfm_mot.name, + "vfm_bu", + "vfm_bd", + "hfm_x", + "hfm_pitch", + hfm_mot.name, + "hfm_bu", + "hfm_bd", + "coll_x", + "bs_x", + "bs_y", + ], + title=f"{bl.env.beamline_name} Daily Setup - Motor Positions", + tags=["daily_setup", bl.env.beamline_name, "positions"] + ) + +def add_prechecks_to_scilog(msg, results): + """Add pre-flight checks to the SciLog entry.""" + + if "Pre checks" not in results: + return + + result = results["Pre checks"] + + msg.add_text("Pre-flight\n", bold=True) + + machine = result.get("machine") + + if machine: + for check in machine["checks"]: + status = "OK" if check["ok"] else "FAILED" + msg.add_text( + f"{check['message']:<55} {status}\n" + ) + + eh = result.get("experiment_hutch") + + if eh: + for check in eh["checks"]: + status = "OK" if check["ok"] else "WARNING" + msg.add_text( + f"{check['message']:<55} {status}\n" + ) + + msg.add_text("\n") + +def add_setup_results_to_scilog(msg, results, progress_state): + """Add daily setup task results to SciLog.""" + + msg.add_text("Setup\n", bold=True) + + # --------------------------------------------------------- + # Energy + # --------------------------------------------------------- + if "Set energy" in results: + r = results["Set energy"] + + status = get_result_status("Set energy", r, progress_state) + + if r.get("energy") is not None: + detail = f"{r['energy'] / 1000:.3f} keV" + + if r.get("pitch_offset") is not None: + detail += ( + f", pitch offset = " + f"{r['pitch_offset']:.3f} mrad" + ) + + else: + detail = r.get("message", "") + + add_scilog_result( + msg, + "Set energy", + status, + detail, + ) + + # --------------------------------------------------------- + # Collimator + # --------------------------------------------------------- + if "Align collimator" in results: + r = results["Align collimator"] + + status = get_result_status( + "Align collimator", + r, + progress_state, + ) + + if r.get("ok"): + detail = ( + f"X={r['coll_x_pos']:.3f}, " + f"Y={r['coll_y_pos']:.3f} mm" + ) + else: + detail = r.get("message", "") + + add_scilog_result( + msg, + "Collimator alignment", + status, + detail, + ) + + # --------------------------------------------------------- + # Beamstop + # --------------------------------------------------------- + if "Align beamstop" in results: + r = results["Align beamstop"] + + status = get_result_status( + "Align beamstop", + r, + progress_state, + ) + + if r.get("ok"): + detail = ( + f"X={r['bs_x_pos']:.3f}, " + f"Y={r['bs_y_pos']:.3f} mm" + ) + else: + detail = r.get("message", "") + + add_scilog_result( + msg, + "Beamstop alignment", + status, + detail, + ) + + # --------------------------------------------------------- + # Move beam + # --------------------------------------------------------- + if "Move beam" in results: + r = results["Move beam"] + + status = get_result_status( + "Move beam", + r, + progress_state, + ) + + if r.get("ok"): + detail = ( + f"X={r['BeamX']:.1f}, " + f"Y={r['BeamY']:.1f} µm\n" + f"BPM X={r['BPM_X_end']:.2f} µm, " + f"BPM Y={r['BPM_Y_end']:.2f} µm" + ) + else: + detail = r.get("message", "manual check required") + + add_scilog_result( + msg, + "Move beam", + status, + detail, + ) + + # --------------------------------------------------------- + # Flux + # --------------------------------------------------------- + if "Measure flux" in results: + r = results["Measure flux"] + + status = get_result_status( + "Measure flux", + r, + progress_state, + ) + + if r.get("full_flux") is not None: + detail = f"{r['full_flux']:.2e} ph/s" + else: + detail = r.get("message", "") + + add_scilog_result( + msg, + "Flux", + status, + detail, + ) + +def add_scilog_result(msg, label, status, detail=""): + """Add one formatted setup-result line.""" + + line = f"{label:<24} {status:<8}" + + if detail: + line += f" {detail}" + + msg.add_text(line + "\n") + + +def get_result_status(task, result, progress_state): + """Return human-readable status for a SciLog result.""" + + state = progress_state.get(task) + + if state == "warning": + return "WARNING" + + if state == "failed": + return "FAILED" + + if result.get("ok"): + return "OK" + + return "FAILED" + + +def get_daily_setup_status(progress_state): + """Return overall daily-setup status.""" + + states = progress_state.values() + + if "failed" in states: + return "FAILED" + + if "warning" in states: + return "PASSED WITH WARNINGS" + + return "PASSED" + + +# ============================================================================= +# Save values to csv file +# ============================================================================= +def log_daily_setup_to_csv(results): + """Append key daily setup diagnostics to the beamline history CSV.""" + + vfm_mot = BeamMove.vfm_mot + hfm_mot = BeamMove.hfm_mot + + filename = bl.env.daily_setup_dir / "daily_beamline_health.csv" + + move_results = results.get("Move beam", {}) + energy_result = results.get("Set energy", {}) + flux_result = results.get("Measure flux", {}) + + row = { + "timestamp": datetime.now().isoformat(timespec="seconds"), + + # Energy / flux + "energy_eV": format_value(energy_result.get("energy"), ".0f"), + "pitch_offset": format_value( + energy_result.get("pitch_offset"), ".3f" + ), + "flux_ph_s": format_value( + flux_result.get("full_flux"), ".2e" + ), + + # Beam position before move_beam + "beam_start_x_px": format_value( + move_results.get("StartX"), ".0f" + ), + "beam_start_y_px": format_value( + move_results.get("StartY"), ".0f" + ), + + # Mirror positions before move_beam + "vfm_mot_start_mm": format_value( + move_results.get("Initial VFM MOT"), ".5f" + ), + "hfm_mot_start_mm": format_value( + move_results.get("Initial HFM MOT"), ".5f" + ), + + # Mirror positions after move_beam + "vfm_mot_final_mm": format_value( + move_results.get("Final VFM MOT"), ".5f" + ), + "hfm_mot_final_mm": format_value( + move_results.get("Final HFM MOT"), ".5f" + ), + + # Final beam displacement from crosshair + "beam_final_x_um": format_value( + move_results.get("BeamX"), ".1f" + ), + "beam_final_y_um": format_value( + move_results.get("BeamY"), ".1f" + ), + + # Final BPM beam displacement from crosshair + "beam_final_x_bpm_um": format_value( + move_results.get("BPM_X_end"), ".2f" + ), + "beam_final_y_bpm_um": format_value( + move_results.get("BPM_Y_end"), ".2f" + ), + + # Current mirror state after daily setup + "vfm_y_mm": format_value(get_value(dev.vfm_y), ".5f"), + "vfm_mot_mm": format_value(get_value(vfm_mot), ".5f"), + "vfm_pitch_mrad": format_value( + get_value(dev.vfm_pitch), ".5f" + ), + + "hfm_x_mm": format_value(get_value(dev.hfm_x), ".5f"), + "hfm_mot_mm": format_value(get_value(hfm_mot), ".5f"), + "hfm_pitch_mrad": format_value( + get_value(dev.hfm_pitch), ".5f" + ), + } + + file_exists = filename.exists() + + with open(filename, "a", newline="", encoding="utf-8") as f: + writer = csv.DictWriter(f, fieldnames=row.keys()) + + if not file_exists: + writer.writeheader() + + writer.writerow(row) + + print(f"✓ Daily beamline history saved to {filename}") + + +# ============================================================================= +# General helpers +# ============================================================================= +def format_value(value, fmt): + """Format a value for CSV file, return an empty string if unavailable""" + if value is None: + return "" + return format(value, fmt) + +def move_with_offset(motor, target, offset=0.002): + """Move motor to target using an overshoot to overcome deadband/backlash.""" + + current = get_value(motor) + dmove = target - current + + if abs(dmove) < 1e-9: + return current + + direction = np.sign(dmove) + overshoot = target + direction * abs(offset) + + umv(motor, overshoot) + umv(motor, target) + + final = get_value(motor) + + print(f"{motor.name}: requested {current:.6f} -> {target:.6f} " f"({dmove * 1000:+.3f} µm)") + print( + f"{motor.name}: actual {current:.6f} -> {final:.6f} " + f"({(final-current) * 1000:+.3f} µm), " + f"error {(final-target) * 1000:+.3f} µm" + ) + + return final + + +def set_zoom(zoom): + """Set sample camera zoom level.""" + + if isinstance(zoom, str): + zoom = CameraZoom.from_label(zoom) + umv(dev.scam_zoom, zoom.position) + else: + umv(dev.scam_zoom, zoom) + + +@contextmanager +def time_step(results, name): + """Time a daily setup step.""" + start = time.perf_counter() + + try: + yield + finally: + elapsed = time.perf_counter() - start + + if name not in results: + results[name] = {} + + results[name]["duration"] = elapsed + + +def format_duration(seconds): + if seconds < 60: + return f"{seconds:.1f} s" + + minutes, seconds = divmod(seconds, 60) + return f"{int(minutes)} min {seconds:.0f} s" + + + +def caget(pv): + """Read an EPICS PV using caget and return its value.""" + + try: + result = subprocess.run( + ["caget", "-t", pv], + capture_output=True, + text=True, + check=True, + timeout=2, + ) + + fields = shlex.split(result.stdout.strip()) + + # Find the PV name and take the value immediately after it + try: + pv_index = fields.index(pv) + value = fields[pv_index + 1] + except (ValueError, IndexError): + return None + + # Convert numeric values to float + try: + return float(value) + except ValueError: + return value + + except (subprocess.CalledProcessError, subprocess.TimeoutExpired) as exc: + print(f"Could not read {pv}: {exc}") + return None + +def save_daily_beam_image(results): + """Save the final beam image with target crosshair to daily_setup_dir. + + The saved PNG is reused by both the HTML report and SciLog. + Returns the filename, or None if no beam image is available. + """ + + move_result = results.get("Move beam") + energy_result = results.get("Set energy") + + if not move_result: + return None + + image = move_result.get("image") + + if image is None: + return None + + # timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + filename = bl.env.daily_setup_dir / f"daily_beam_{energy_result['energy']:.0f}eV.png" + + fig, ax = plt.subplots(figsize=(8, 6)) + ax.imshow(image) + + x = BeamMove.scint_target_x + y = BeamMove.scint_target_y + length = 40 + gap = 8 + + # Target crosshair + ax.plot([x - length, x - gap], [y, y], color="red", linewidth=1.0) + ax.plot([x + gap, x + length], [y, y], color="red", linewidth=1.0) + ax.plot([x, x], [y - length, y - gap], color="red", linewidth=1.0) + ax.plot([x, x], [y + gap, y + length], color="red", linewidth=1.0) + + ax.axis("off") + + fig.savefig( + filename, + format="png", + bbox_inches="tight", + pad_inches=0, + dpi=150, + ) + plt.close(fig) + + move_result["image_file"] = filename + print(f"✓ Final beam image saved to {filename}") + + return filename + + +def image_file_to_data_uri(filename): + """Convert a PNG file to an embedded HTML data URI.""" + + with open(filename, "rb") as f: + encoded = base64.b64encode(f.read()).decode("ascii") + + return f"data:image/png;base64,{encoded}" + + +def html_status(result): + """Return a simple HTML status for a daily setup result.""" + + if not result: + return "– Not run" + + if result.get("warning"): + return "⚠ Warning" + + if result.get("ok"): + return "✓ OK" + + return "✗ Failed" + + +def html_value(value, fmt="", units=""): + """Safely format a value for the HTML report.""" + + if value is None: + return "–" + + try: + text = format(value, fmt) if fmt else str(value) + except (TypeError, ValueError): + text = str(value) + + return f"{text} {units}".strip() + + +def create_daily_html_report(results, total_duration=None, messages=None): + """Create the final Daily Setup HTML report.""" + + date = datetime.now().strftime("%d %B %Y %H:%M") + + precheck_result = results.get("Pre checks") + energy_result = results.get("Set energy") + move_result = results.get("Move beam") + beamstop_result = results.get("Align beamstop") + collimator_result = results.get("Align collimator") + flux_result = results.get("Measure flux") + + # -------------------------------------------------------------- + # Beam image + # -------------------------------------------------------------- + + image_src = None + + if move_result: + image_file = move_result.get("image_file") + + if image_file is not None: + try: + image_src = image_file_to_data_uri(image_file) + except Exception as exc: + print(f"Could not add beam image to HTML report: {exc}") + + if image_src: + beam_image_html = f""" + Final beam position
+ +++ """ + else: + beam_image_html = """ ++
Final beam position
+ ++ Beam image not available ++ """ + + # -------------------------------------------------------------- + # Detailed results + # -------------------------------------------------------------- + + result_rows = [] + + if energy_result: + result_rows.append( + ( + "Energy", + html_value(energy_result.get("energy"), ".0f", "eV"), + ) + ) + + result_rows.append( + ( + "DCM pitch offset", + html_value( + energy_result.get("pitch_offset"), + ".4f", + "mrad", + ), + ) + ) + + if flux_result: + result_rows.append( + ( + "Flux at 100% transmission", + html_value( + flux_result.get("full_flux"), + ".2e", + "ph/s", + ), + ) + ) + + if move_result: + result_rows.append( + ( + "Beam position", + ( + f"X = {html_value(move_result.get('BeamX'), '.1f', 'µm')}, " + f"Y = {html_value(move_result.get('BeamY'), '.1f', 'µm')}" + ), + ) + ) + + result_rows.append( + ( + "Approximate beam size", + ( + f"{html_value(move_result.get('X FWHM'), '.1f', 'µm')} × " + f"{html_value(move_result.get('Y FWHM'), '.1f', 'µm')}" + ), + ) + ) + + if beamstop_result: + result_rows.append( + ( + "Beamstop position", + ( + f"X = {html_value(beamstop_result.get('bs_x_pos'), '.3f', 'mm')}, " + f"Y = {html_value(beamstop_result.get('bs_y_pos'), '.3f', 'mm')}" + ), + ) + ) + + if collimator_result: + result_rows.append( + ( + "Collimator position", + ( + f"X = {html_value(collimator_result.get('coll_x_pos'), '.3f', 'mm')}, " + f"Y = {html_value(collimator_result.get('coll_y_pos'), '.3f', 'mm')}" + ), + ) + ) + + result_rows_html = "\n".join( + f""" ++ + """ + for label, value in result_rows + ) + + if not result_rows_html: + result_rows_html = """ +{label} +{value} ++ + """ + + # -------------------------------------------------------------- + # Setup task summary + # -------------------------------------------------------------- + + task_rows = [] + + task_labels = [ + ("Pre checks", "Pre checks"), + ("Weekly checks", "Weekly checks"), + ("Set energy", "Set energy"), + ("Move beam", "Move beam to crosshair"), + ("Align beamstop", "Align beamstop"), + ("Align collimator", "Align collimator"), + ("Measure flux", "Measure flux"), + ] + + for key, label in task_labels: + result = results.get(key) + + # Only show tasks that actually appear in results. + # Disabled tasks therefore disappear from the final report. + if result is not None: + duration = result.get("duration") + + duration_text = ( + format_duration(duration) + if duration is not None + else "–" + ) + + task_rows.append( + f""" +No detailed results available ++ + """ + ) + + task_rows_html = "\n".join(task_rows) + + total_duration_text = ( + format_duration(total_duration) + if total_duration is not None + else "–" + ) + + # -------------------------------------------------------------- + # Setup information / log messages + # -------------------------------------------------------------- + + if messages: + messages_text = "\n".join(messages) + + # Escape anything that could accidentally be interpreted as HTML + messages_text = html_lib.escape(messages_text) + + info_html = f""" +{label} +{html_status(result)} +{duration_text} +Setup information
+ ++ {messages_text} ++ """ + else: + info_html = "" + + # -------------------------------------------------------------- + # HTML + # -------------------------------------------------------------- + + html = f""" + + + + + + + + + + +{bl.env.beamline_name} Daily Setup
+{date}
+ + +Setup tasks
+ ++ +
+ + ++ + + {task_rows_html} + +Task +Status +Duration ++ + +Total duration ++ {total_duration_text} +Results
+ ++ {result_rows_html} +
+ + + {beam_image_html} + + {info_html} + + + + + """ + + return html diff --git a/pxii_bec/macros/devices_manager.py b/pxii_bec/macros/devices_manager.py index 720caff..72ee82f 100755 --- a/pxii_bec/macros/devices_manager.py +++ b/pxii_bec/macros/devices_manager.py @@ -1,9 +1,9 @@ """ This module manages the initialization of devices.""" -#from guards import attach_guards -#from policies import attach_policies -#from build_devices import build_devices +# from guards import attach_guards +# from policies import attach_policies +# from build_devices import build_devices class DeviceManager: diff --git a/pxii_bec/macros/enScan.py b/pxii_bec/macros/enScan.py index e81b00d..47edfcc 100644 --- a/pxii_bec/macros/enScan.py +++ b/pxii_bec/macros/enScan.py @@ -11,7 +11,7 @@ def en_plothist(hindex: int, signal_name: str, isave=1): s=scans.line_scan(dev.dcm_bragg, 178.5, 179.5, steps=240, relative=False data_x, data_y = en_plothist(-1,"bcu_bpmsum") - scanned with + scanned with scans.line_scan(dev.aerotech.y,-0.05,0.05, steps=101, settling_time=0.5, relative=True) """ @@ -21,54 +21,56 @@ def en_plothist(hindex: int, signal_name: str, isave=1): if hindex < 0: h = bec.history[hindex] - print('by scan number') + print("by scan number") else: h = bec.history.get_by_scan_number(hindex) - print('by scan number') + print("by scan number") md = h.metadata["bec"] - sno = md['dataset_number'] + sno = md["dataset_number"] print(f"number of scan = {sno}") - scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan + #scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan # data = h.devices[device_name][signal].read()["value"] # data_x = h.devices.dcm_pitch.dcm_pitch.read()["value"] # data_y = h.devices.lu_bpmsum.lu_bpmsum.read()["value"] # data_x = h.devices[device_name][device_name].read()["value"] - # that works ... - #print(list(md['args'].keys())) - val = list(md['args'].keys()) - #val[0] = 'aerotech.x' - devicenam = val[0] - print('device = ', devicenam) + # that works ... + # print(list(md['args'].keys())) + ## val = list(md["args"].keys()) no longer !!!!! to be checked !!! + # val[0] = 'aerotech.x' + ##devicenam = val[0] + ##print("device = ", devicenam) + devicenam = md["scan_report_devices"][0].decode() + + data_xd = md["positions"] # last scan knows which device ... however, double array data_x = data_xd.flatten() print("dx = ", data_x) - #data_y = h.devices[signal_name][signal_name].read()["value"] + # data_y = h.devices[signal_name][signal_name].read()["value"] data_y1 = h.devices["bcu_bpmsum"]["bcu_bpmsum"].read()["value"] data_y2 = h.devices["ss_bpmsum"]["ss_bpmsum"].read()["value"] - - #print("dy = ", data_y) - data_y = data_y1/data_y2 - rev = 0 - #if val[0][9] == 'x': + # print("dy = ", data_y) + + data_y = data_y1 / data_y2 + rev = 0 + # if val[0][9] == 'x': # rev = 1 - smoothplotgrad(data_x, data_y, reverse = rev) - # g, xm = justfit(data_x, data_y, model=model, ibg=ibg) + smoothplotgrad(data_x, data_y, reverse=rev) + # g, xm = justfit(data_x, data_y, model=model, ibg=ibg) -# plt.ion() -# plt.figure() -# plt.plot(data_x, data_y, "*") -# plt.plot(data_x, g.best_fit) -# plt.xlabel(scanvar) -# plt.ylabel(signal_name) -# plt.show() + # plt.ion() + # plt.figure() + # plt.plot(data_x, data_y, "*") + # plt.plot(data_x, g.best_fit) + # plt.xlabel(scanvar) + # plt.ylabel(signal_name) + # plt.show() -# gcen = g.pars["center"].value + # gcen = g.pars["center"].value - - if isave: + if isave: ans = "n" ans = input("Store data in csv file? y/n ") if ans == "y": @@ -79,5 +81,4 @@ def en_plothist(hindex: int, signal_name: str, isave=1): with open(filename, "w") as f: np.savetxt(f, combined, delimiter=",", fmt="%.9e") - return data_x, data_y diff --git a/pxii_bec/macros/findattr.py b/pxii_bec/macros/findattr.py index 5873afe..989364e 100755 --- a/pxii_bec/macros/findattr.py +++ b/pxii_bec/macros/findattr.py @@ -3,8 +3,9 @@ # if you know the attribute you are searching for: + def check_attr(obj, attr): -# att as string + # att as string attr = getattr(obj, attr) @@ -13,7 +14,9 @@ def check_attr(obj, attr): print("values:", attr.values()) print("items:", attr.items()) -# Automatically Detect All Dictionary Attributes: + +# Automatically Detect All Dictionary Attributes: + def list_dict_attr_single(obj): for attr_name, value in vars(obj).items(): @@ -22,8 +25,9 @@ def list_dict_attr_single(obj): print(" Keys:", list(value.keys())) print(" Items:") for key, val in value.items(): - print(f" {key} -> {val}") - + print(f" {key} -> {val}") + + # Also Handle Nested Dictionaries: @@ -34,16 +38,11 @@ def list_dict_attr(obj): print(" " * indent + str(key) + ":", end=" ") if isinstance(value, dict): print() - print_dict(value, indent+1) + print_dict(value, indent + 1) else: - print(value) - + print(value) + for attr_name, value in vars(obj).items(): if isinstance(value, dict): print(f"\nDictionary attribute: {attr_name}") print_dict(value) - - - - - diff --git a/pxii_bec/macros/flux_di.py b/pxii_bec/macros/flux_di.py index 7d39470..aa9a2e2 100755 --- a/pxii_bec/macros/flux_di.py +++ b/pxii_bec/macros/flux_di.py @@ -1,131 +1,132 @@ #!/usr/bin/env python -# ### PYTHON pro to determine the flux from the current -# ### on a Si diode -# ### A Pauluhn, Dec 2012 -# ### from IDL pro flux_diode.pro (2010) +# ### PYTHON pro to determine the flux from the current +# ### on a Si diode +# ### A Pauluhn, Dec 2012 +# ### from IDL pro flux_diode.pro (2010) ## NOTE: for TRANSFER DIODE: -## switch off ANY ambient light -## note that: 10 um Si, and 0 um Al for transfer diode Hamamatsu +## switch off ANY ambient light +## note that: 10 um Si, and 0 um Al for transfer diode Hamamatsu -# ### import the standard -import os, sys, string, time +# ### import the standard +import os, sys, string, time import re import numpy as np import math - - def fluxcalc(curr, en, t_air, t_si, t_al): - #------ parameters: - rsi = 2.33 # g/cm^3 density of Si - ral = 2.699 # g/cm^3 density of Al - rair = 1.205e-3 # g/cm^3 density of air + # ------ parameters: + rsi = 2.33 # g/cm^3 density of Si + ral = 2.699 # g/cm^3 density of Al + rair = 1.205e-3 # g/cm^3 density of air - eps_si = 3.62 # eV , energy req for charge separation in Si (el/hole pair) - e = 1.602e-19 # As , elem charge + eps_si = 3.62 # eV , energy req for charge separation in Si (el/hole pair) + e = 1.602e-19 # As , elem charge t_si = 0.0012 # thickness of diode in cm (==12 micrometres) ; [*10000] - t_al = 0.002 # thickness of diode in cm (==20 micrometres) + t_al = 0.002 # thickness of diode in cm (==20 micrometres) - #--------- calc---------------------------------------------------- - #energy deposit in Silicon - #ratio of photoelectric cross section to density for Silicon - #alog10(A_Si)= 4.158 - 2.238*alog10(Ep) - 0.477*alog10(Ep)^2 + 0.0789*alog10(Ep)^3 + # --------- calc---------------------------------------------------- + # energy deposit in Silicon + # ratio of photoelectric cross section to density for Silicon + # alog10(A_Si)= 4.158 - 2.238*alog10(Ep) - 0.477*alog10(Ep)^2 + 0.0789*alog10(Ep)^3 - ps = np.poly1d([0.0789, - 0.477, - 2.238, 4.158]) - #print ps - # ps.c - # print ps(2.3) + ps = np.poly1d([0.0789, -0.477, -2.238, 4.158]) + # print ps + # ps.c + # print ps(2.3) - leval = math.log10(en) - hlp_si = ps(leval) - a_si = np.pow(10, hlp_si) - #efact = np.exp(-A_Si*rsi*t_Si) - #sifact =1 - efact - sifact = - np.expm1(-a_si*rsi*t_si) - #print 'sifact = ', sifact + leval = math.log10(en) + hlp_si = ps(leval) + a_si = np.pow(10, hlp_si) + # efact = np.exp(-A_Si*rsi*t_Si) + # sifact =1 - efact + sifact = -np.expm1(-a_si * rsi * t_si) + # print 'sifact = ', sifact - fl = 1000.*curr * eps_si/1.602/en/sifact *1.e13 # curr expected in A - #print 'fl = ', fl + fl = 1000.0 * curr * eps_si / 1.602 / en / sifact * 1.0e13 # curr expected in A + # print 'fl = ', fl + + # Aluminium attenuation + # ratio of photoelectric cross section to density for Aluminium + pa = np.poly1d([0.0638, -0.413, -2.349, 4.106]) - #Aluminium attenuation - #ratio of photoelectric cross section to density for Aluminium - pa = np.poly1d([ 0.0638, - 0.413, - 2.349, 4.106]) - hlp_al = pa(leval) - a_al = pow(10, hlp_al) + a_al = pow(10, hlp_al) # attenuation due to aluminium - alfact = np.exp(-a_al*ral*t_al) - #print 'alfact = ', alfact + alfact = np.exp(-a_al * ral * t_al) + # print 'alfact = ', alfact # Air attenuation # ratio of photoelectric cross section to density for air - pair = np.poly1d([0.928, - 2.348, - 1.026, 3.153]) + pair = np.poly1d([0.928, -2.348, -1.026, 3.153]) hlp_air = pair(leval) - a_air = np.pow(10, hlp_air) + a_air = np.pow(10, hlp_air) - #print('hlp_air, a_air, rair, t_air = ', hlp_air, a_air, rair , t_air) + # print('hlp_air, a_air, rair, t_air = ', hlp_air, a_air, rair , t_air) - # attenuation due to air - airfact = np.exp(-a_air*rair*t_air/10.) - #airfact = 1. + # attenuation due to air + airfact = np.exp(-a_air * rair * t_air / 10.0) + # airfact = 1. - - #print 'airfact = ', airfact - #print ' t_air = ', t_air + # print 'airfact = ', airfact + # print ' t_air = ', t_air - # total flux from photocurrent - fl = fl/alfact/airfact - #print 'fl = ', fl + # total flux from photocurrent + fl = fl / alfact / airfact + # print 'fl = ', fl + + return fl - return fl # # Main # -def flux_x10sa(curr, en, silent = 0): + +def flux_x10sa(curr, en, silent=0): # curr = input('Please enter the current [in A] ') curr = float(curr) if not silent: - print('Current = ', curr) + print("Current = ", curr) # en = input('Please enter the energy [in keV] ') en = float(en) if not silent: - print('Energy = ', en) + print("Energy = ", en) ## d_det = input('Please enter the detector distance [in mm] ') d_det = dev.det_z.user_readback.get() - d_off = 15 ## at X10SA ### input('Please enter the OFFSET of the diode to det surface [in mm] ') - - t_air = float(d_det) + float(d_off) + d_off = ( + 15 ## at X10SA ### input('Please enter the OFFSET of the diode to det surface [in mm] ') + ) - t_si = 12 # um ## at X10SA + t_air = float(d_det) + float(d_off) + + t_si = 12 # um ## at X10SA # t_si = input('Please enter the Si thickness of diode [in um] ') # if not silent: - t_si = float(t_si) / 10000. # to cm + t_si = float(t_si) / 10000.0 # to cm - t_al = 20 # um ## at X10SA - # t_al = input('Please enter the Al thickness of diode [in um] ') - t_al = float(t_al) / 10000. # to cm + t_al = 20 # um ## at X10SA + # t_al = input('Please enter the Al thickness of diode [in um] ') + t_al = float(t_al) / 10000.0 # to cm if not silent: - print('Air path length (CARE ! add det distance and offset of diode) = ', t_air) # include additional diode distance + print( + "Air path length (CARE ! add det distance and offset of diode) = ", t_air + ) # include additional diode distance - - fl = fluxcalc(curr, en, t_air,t_si, t_al) + fl = fluxcalc(curr, en, t_air, t_si, t_al) if not silent: - print( " Diode Current = %.6f A " % curr) - print( " Energy = %.4f keV " % en ) + print(" Diode Current = %.6f A " % curr) + print(" Energy = %.4f keV " % en) - #print( " Thickness of active Si layer = %.4f\t cm " % t_si) #*10000. - #print( " Thickness of Al layer in front of diode = %.4f\t cm " % t_al) #*10000. - print( " Length of path of air in front of diode = %.4f\t mm " % t_air) #*10000. + # print( " Thickness of active Si layer = %.4f\t cm " % t_si) #*10000. + # print( " Thickness of Al layer in front of diode = %.4f\t cm " % t_al) #*10000. + print(" Length of path of air in front of diode = %.4f\t mm " % t_air) # *10000. - print (" Flux = %6.2e\t ph/s " % fl) + print(" Flux = %6.2e\t ph/s " % fl) return fl - diff --git a/pxii_bec/macros/flux_macros.py b/pxii_bec/macros/flux_macros.py index 11984e5..155265b 100644 --- a/pxii_bec/macros/flux_macros.py +++ b/pxii_bec/macros/flux_macros.py @@ -256,7 +256,7 @@ def bpm2flux(energy=None, bpmsum=None, transm=None): """ calibration_min_energy = 6500 - calibration_max_energy = 21000 + # calibration_max_energy = 21000 if energy is None: energy = get_current_energy() @@ -266,14 +266,14 @@ def bpm2flux(energy=None, bpmsum=None, transm=None): # bpmsum = read_av(dev.bcu_bpmsum,10) # do not add to traffic jam if transm is None: - transm = dev.transm.read()["transm"]["value"] + transm = dev.transm.read(cached=True)["transm"]["value"] - if not calibration_min_energy <= energy <= calibration_max_energy: - raise ValueError( - f"Energy {energy:.0f} eV is outside the calibrated range " - f"{calibration_min_energy:.0f}–" - f"{calibration_max_energy:.0f} eV" - ) + # if not calibration_min_energy <= energy <= calibration_max_energy: + # raise ValueError( + # f"Energy {energy:.0f} eV is outside the calibrated range " + # f"{calibration_min_energy:.0f}–" + # f"{calibration_max_energy:.0f} eV" + # ) # coeffs = [ # 1.06436277e5, @@ -296,3 +296,17 @@ def bpm2flux(energy=None, bpmsum=None, transm=None): ) return float(flux), float(full_flux) + +def transmission_for_flux(target_flux): + """ + Calculate the transmission required to give target_flux + at the current energy. + + Transmission is returned as a fraction from 0 to 1. + """ + + _, full_flux = bpm2flux() + + transmission = target_flux / full_flux + + return float(np.clip(transmission, 0.0, 1.0)) diff --git a/pxii_bec/macros/katscripts.py b/pxii_bec/macros/katscripts.py index ff32868..5670025 100755 --- a/pxii_bec/macros/katscripts.py +++ b/pxii_bec/macros/katscripts.py @@ -13,6 +13,7 @@ from pathlib import Path from pxii_bec.scripts import beamline_context as bl from pxii_bec.macros.beamline_planner import BeamlineState + def bragg_scan(): """Energy scans from 6 to 18 keV at various gap positions""" @@ -31,6 +32,7 @@ def bragg_scan(): ) gap += 0.5 + def scan_bpm(bpmname): """ Runs a grid scan of a BPM in x and y, and plots each channel @@ -188,34 +190,126 @@ def energy_checks(start_energy=8000, end_energy=20000): f.close() -def scan_fe(): - """Scan the FE slits in X and Y""" - print("Scanning FE slits in X") - umv(dev.fe_sl_xsize, 0.05, dev.fe_sl_ysize, 1) - go_to_peak(dev.fe_sl_xcen, dev.lu_bpmsum, -1.5, 1.5, 20, confirm=False, relative=True) - print("Scanning FE slits in Y") - umv(dev.fe_sl_xsize, 1, dev.fe_sl_ysize, 0.05) - go_to_peak(dev.fe_sl_ycen, dev.lu_bpmsum, -1.2, 1.2, 15, confirm=False, relative=True) - close_fe_slits(False) + +# def scan_gap(gomax = False, close = True, fine = False): +# """Scan the gap and monitor on lu_bpmsum or bcu_bpmsum""" +# close_fe_slits(close) +# current_gap = dev.id_gap.read()["id_gap"]["value"] +# if current_gap > 4.6: +# go_to_peak( +# dev.id_gap, dev.lu_bpmsum, -0.15, 0.15, 25, relative=True, gap=True, confirm=False, gomax=gomax +# ) +# else: +# go_to_peak( +# dev.id_gap, dev.lu_bpmsum, 4.5, 4.75, 25, relative=False, gap=True, confirm=False, gomax=gomax +# ) +# if fine: +# go_to_peak( +# dev.id_gap, dev.lu_bpmsum, -0.012, 0.012, 6, relative=True, gap=True, confirm=False, gomax=gomax +# ) +# close_fe_slits(False) -def scan_gap(gomax = False, close = True, fine = False): - """Scan the gap and monitor on lu_bpmsum or bcu_bpmsum""" +def scan_gap(gomax=False, close=True, fine=False, min_fwhm_steps=1.5): + """ + Scan the undulator gap and monitor the LU BPM sum. + + If gomax=True, go_to_peak() moves to the highest measured point + without applying peak-fit validation. + + Returns + ------- + dict + Results from the coarse and, if requested, fine scans. + `min_gap_reached` is True when the coarse-scan maximum is at + the physical minimum gap of 4.5 mm. + """ + + MIN_GAP = 4.5 + close_fe_slits(close) - current_gap = dev.id_gap.read()["id_gap"]["value"] - if current_gap > 4.6: - go_to_peak( - dev.id_gap, dev.lu_bpmsum, -0.15, 0.15, 25, relative=True, gap=True, confirm=False, gomax=gomax - ) - else: - go_to_peak( - dev.id_gap, dev.lu_bpmsum, 4.5, 4.75, 25, relative=False, gap=True, confirm=False, gomax=gomax - ) - if fine: - go_to_peak( - dev.id_gap, dev.lu_bpmsum, -0.012, 0.012, 6, relative=True, gap=True, confirm=False, gomax=gomax - ) - close_fe_slits(False) + + try: + current_gap = get_value(dev.id_gap) + + # -------------------------------------------------------- + # Coarse scan + # -------------------------------------------------------- + + if current_gap > 4.65: + coarse_result = go_to_peak( + dev.id_gap, + dev.lu_bpmsum, + -0.15, + 0.15, + 25, + relative=True, + gap=True, + confirm=False, + gomax=gomax, + min_fwhm_steps=min_fwhm_steps, + ) + + else: + coarse_result = go_to_peak( + dev.id_gap, + dev.lu_bpmsum, + MIN_GAP, + 4.75, + 25, + relative=False, + gap=True, + confirm=False, + gomax=gomax, + min_fwhm_steps=min_fwhm_steps, + ) + + # -------------------------------------------------------- + # Check for physical minimum-gap limit + # -------------------------------------------------------- + + min_gap_reached = False + + if gomax: + min_gap_reached = coarse_result["at_lower_boundary"] and np.isclose( + coarse_result["x_max"], MIN_GAP + ) + + if min_gap_reached: + print("\nMaximum occurs at the minimum gap of " f"{MIN_GAP:.2f} mm.") + print("The optimum for this harmonic may lie below " "the accessible gap.") + + # -------------------------------------------------------- + # Fine scan + # -------------------------------------------------------- + + fine_result = None + + if fine and not min_gap_reached: + fine_result = go_to_peak( + dev.id_gap, + dev.lu_bpmsum, + -0.012, + 0.012, + 6, + relative=True, + gap=True, + confirm=False, + gomax=gomax, + ) + + elif fine and min_gap_reached: + print("Skipping fine gap scan because the coarse maximum " "is at the minimum gap.") + + return { + "success": True, + "coarse": coarse_result, + "fine": fine_result, + "min_gap_reached": min_gap_reached, + } + + finally: + close_fe_slits(False) def record_pitch(): @@ -257,41 +351,294 @@ def beam_centre_from_ss(): return beampos -def generate_dcm_lut(env, planner, start_energy=6000, end_energy=30000, step=300, scint=True): - """Generate a lookup table for the dcm from start_energy to end_energy in steps of step""" - filename = env.lut_dir / f"dcm_calibration_{filenow()}.csv" - zoom = dev.scam_zoom.read()['scam_zoom']['value'] - with open(filename, "w", encoding="utf-8") as f: - f.write(f"energy,harmonic,gap,pitch,samcam_x,samcam_y,zoom={zoom}\n") +def generate_dcm_lut( + start_energy=6000, + end_energy=30000, + step=1000, + scan_id_gap=False, + scint=True, + prefix = "dcm_calibration", +): + + """Generate a DCM calibration lookup table. + + Parameters + ---------- + start_energy : int + Starting energy in eV. + end_energy : int + Final energy in eV. + step : int + Energy step in eV. + scan_id_gap : bool + If True, optimise both undulator gap and DCM pitch. + If False, only optimise the DCM pitch. + scint : bool + If True, record sample-camera beam position. + + Returns + ------- + list + List of failed scans with energy, scan type and failure reason. + """ + + filename = bl.env.lut_dir / f"{prefix}_{filenow(date_only=True)}.csv" + failure_filename = bl.env.lut_dir / f"{prefix}_fail_{filenow(date_only=True)}.csv" + + failures = [] + + zoom = get_value(dev.scam_zoom) + + # Create calibration file + if scan_id_gap: + with open(filename, "w", encoding="utf-8") as f: + if scint: + f.write(f"energy,harmonic,gap,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom={zoom}\n") + else: + f.write("energy,harmonic,gap,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom={zoom}\n") + else: + with open(filename, "w", encoding="utf-8") as f: + if scint: + f.write(f"energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom={zoom}\n") + else: + f.write("energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y\n") + + # Create failure log + with open(failure_filename, "w", encoding="utf-8") as f: + f.write("energy,scan,reason\n") + try: + for energy in range(start_energy, end_energy + 1, step): + + print("\n" + "=" * 60) + print(f"Moving to {energy:.0f} eV") + print("=" * 60) + + # ------------------------------------------------------------ + # Move to energy without automatically running mono pitch scan + # ------------------------------------------------------------ + + try: + bl_energy(energy, mono_scan=False) + + except Exception as exc: + reason = str(exc) + + print(f"Energy move failed at {energy:.0f} eV: {reason}") + + failure = {"energy": energy, "scan": "energy", "reason": reason} + + failures.append(failure) + + with open(failure_filename, "a", encoding="utf-8") as f: + f.write(f"{energy:.0f},energy,{reason}\n") + + # Cannot calibrate this energy if the energy move failed + continue + + # ------------------------------------------------------------ + # Undulator gap scan + # ------------------------------------------------------------ + + if scan_id_gap: + + try: + scan_gap(close=True, gomax=True, fine=True) + + except Exception as exc: + reason = str(exc) + + print(f"Gap scan failed at {energy:.0f} eV: " f"{reason}") + + failure = {"energy": energy, "scan": "gap", "reason": reason} + + failures.append(failure) + + with open(failure_filename, "a", encoding="utf-8") as f: + f.write(f"{energy:.0f},gap,{reason}\n") + + # Fall back to calculated gap + print(f"Setting calculated gap for " f"{energy:.0f} eV") + set_gap(energy) + + # ------------------------------------------------------------ + # DCM pitch scan + # ------------------------------------------------------------ + + try: + result = mono_pitch_scan() + + if not result["success"]: + + reason = "; ".join(result["problems"]) + + print(f"Mono pitch scan rejected at " f"{energy:.0f} eV:") + + for problem in result["problems"]: + print(f" - {problem}") + + failure = {"energy": energy, "scan": "mono_pitch", "reason": reason} + + failures.append(failure) + + with open(failure_filename, "a", encoding="utf-8") as f: + f.write(f"{energy:.0f},mono_pitch,{reason}\n") + + except Exception as exc: + reason = str(exc) + + print(f"Mono pitch scan failed at " f"{energy:.0f} eV: {reason}") + + failure = {"energy": energy, "scan": "mono_pitch_exception", "reason": reason} + + failures.append(failure) + + with open(failure_filename, "a", encoding="utf-8") as f: + f.write(f"{energy:.0f},mono_pitch_exception," f"{reason}\n") + + # ------------------------------------------------------------ + # Record calibration values + # ------------------------------------------------------------ + + res = get_bcu_beampos() + bcu_x = res['bcu_x_um'] + bcu_y = res['bcu_y_um'] + ss_res = compute_norm_ss() + ss_Xnorm = ss_res['ss_Xnorm'] + ss_Ynorm = ss_res['ss_Ynorm'] + lu_res = compute_norm_lu() + lu_Xnorm = lu_res['lu_Xnorm'] + lu_Ynorm = lu_res['lu_Ynorm'] + + + pitch = get_value(dev.dcm_pitch) + + if scan_id_gap: + gap_value = get_value(dev.id_gap) + harm = Gap() + h = harm.get_harmonic_by_energy(energy) + + if scint: + prepare_scint_measurement() + res = read_scintXY(image=False) + x = res["X_diff_microns"] + y = res["Y_diff_microns"] + finish_scint_measurement() + + with open(filename, "a", encoding="utf-8") as f: + + if scan_id_gap: + + if scint: + f.write( + f"{energy:.0f}," + f"{h}," + f"{gap_value:.5g}," + f"{pitch:.5g}," + f"{lu_Xnorm:.5g}," + f"{lu_Ynorm:.5g}," + f"{ss_Xnorm:.5g}," + f"{ss_Ynorm:.5g}," + f"{bcu_x:.2f}," + f"{bcu_y:.2f}," + f"{x:.4g}," + f"{y:.4g}\n" + ) + else: + f.write( + f"{energy:.0f},{h},{gap_value:.5g},{pitch:.5g}," + f"{ss_Xnorm:.5g},{ss_Ynorm:.5g},{bcu_x:.2f},{bcu_y:.2f}\n" + ) + + else: + + if scint: + f.write( + f"{energy:.0f},{pitch:.5g},{lu_Xnorm:.5g},{lu_Ynorm:.5g}," + f"{ss_Xnorm:.5g},{ss_Ynorm:.5g},{bcu_x:.2f},{bcu_y:.2f},{x:.4g},{y:.4g}\n" + ) + else: + f.write( + f"{energy:.0f}," f"{pitch:.5g},{lu_Xnorm:.5g},{lu_Ynorm:.5g}," + f"{ss_Xnorm:.5g},{ss_Ynorm:.5g},{bcu_x:.2f},{bcu_y:.2f}\n" + ) + + finally: + print("\nReturning beamline to safe conditions...") - for energy in range(start_energy, end_energy, step): - print(f"Moving to {energy: .0f}eV") - bl_energy(energy, mono_scan=False) try: - scan_gap(close=True, gomax=True, fine=True) + print("done") + # bl_energy(12400) except Exception as exc: - print(f"Gap scan failed at {energy:.0f} eV: {exc}") - set_gap(energy) # set fallback gap here + print(f"WARNING: Could not return to 12400 eV: {exc}") - mono_pitch_scan() - gap = dev.id_gap.read()["id_gap"]["value"] - harm = Gap() - h = harm.get_harmonic_by_energy(energy) - pitch = dev.dcm_pitch.read()["dcm_pitch"]["value"] - if scint: - x, y = read_samcam_scint(planner) - with open(filename, "a", encoding="utf-8") as f: - f.write( - f"{energy:.0f},{h},{gap:.5g},{pitch:.5g},{x:.4g},{y:.4g}\n" - ) - else: - with open(filename, "a", encoding="utf-8") as f: - f.write( - f"{energy:.0f},{h},{gap:.5g},{pitch:.5g}\n" - ) + # try: + # umv(dev.id_gap, 20) + # except Exception as exc: + # print(f"WARNING: Could not open undulator gap: {exc}") - bl_energy(12400) - umv(dev.id_gap, 20.0) + # ------------------------------------------------------------ + # Summary + # ------------------------------------------------------------ + + print("\n" + "=" * 60) + print("DCM calibration complete") + print("=" * 60) + + if failures: + + print(f"\n{len(failures)} scan failure(s):\n") + + for failure in failures: + print( + f"{failure['energy']:5.0f} eV " f"{failure['scan']:22s} " f"{failure['reason']}" + ) + + print(f"\nFailure log written to:\n" f"{failure_filename}") + + else: + print("\nNo scan failures.") + + print(f"\nCalibration data written to:\n" f"{filename}") + + return { + "filename": filename, + "failure_filename": failure_filename, + "failures": failures, + } + +def calibrate_dcm_pitch( + start_energy=6000, + end_energy=30000, + step=2000, + fit_order=3, +): + """Quickly recalibrate the DCM pitch lookup table.""" + + print("\nRunning DCM pitch calibration") + print( + f"{start_energy:.0f}–{end_energy:.0f} eV " + f"in {step:.0f} eV steps" + ) + + failures = generate_dcm_lut( + start_energy=start_energy, + end_energy=end_energy, + step=step, + scan_id_gap=False, + scint=False, + ) + + print("\nAnalysing DCM pitch calibration...") + + fit = pitch_analysis( + filedate=filenow(date_only=True), + fit_order=fit_order, + ) + + return { + "fit": fit, + "failures": failures, + } def write_lut(): @@ -310,15 +657,6 @@ def write_lut(): f.write(f"{energy:.0f},{gap:.5g},{pitch:.5g},{roll:.4g},{perp:.5g},{x:.4g},{y:.4g}\n") -def measure_beamsize(cam="samcam"): - auto_exposure("samcam", max_iter=20) - a = dev.samcam_xsig.read()["samcam_xsig"]["value"] - b = dev.samcam_ysig.read()["samcam_ysig"]["value"] - zoom = dev.scam_zoom.read()["scam_zoom"]["value"] - sx = calc_scam_microns(a, zoom=zoom) * 2.35 - sy = calc_scam_microns(b, zoom=zoom) * 2.35 - print(f"FWHM in um : {sx, sy}") - return sx, sy def write_beamsize(): @@ -340,67 +678,11 @@ def write_beamsize(): -def scan_Ge(): - scanbefore = 12 # eV - scanafter = 12 # eV - stepsize = 0.2 # eV - # Edge sgould be at 11103.1 - actual_edge_Ge = 11103.1 # eV - actual_bragg = convert_from_energy(actual_edge_Ge)["bragg_angle_mrad"] - current_edge = 11095 - current_bragg = convert_from_energy(current_edge)["bragg_angle_mrad"] - print(f"Ge edge should be at a bragg angle of {actual_bragg:.5g} mrad\n") - print(f"Current estimate of edge is {current_bragg:.5g} mrad\n") - xdata = [] - ydata = [] - filename = f"{bl.env.lut_dir}/{filenow(date_only=True)}_ge_edge.csv" - print(filename) - with open(filename, 'w') as f: - f.write(f"Energy,Bragg,bcu_bpmsum\n") - - - plot_live_data(dev.dcm_bragg,dev.bcu_bpmsum) - scanpoints = np.linspace(current_bragg - 0.5, current_bragg + 0.5, 100) - start_energy = convert_from_bragg(current_bragg+0.5)["energy_ev"] - bl_energy(start_energy) - dev.transm.put(1.0) # Take all the filters out - umv(dev.ss_f4_x, 6) # Put Ge filter in place - - for bragg in scanpoints: - scans.umv(dev.dcm_bragg, bragg, relative=False) - energy = convert_from_bragg(bragg)["energy_ev"] - inten = average_inten() - xdata.append(energy) - ydata.append(inten) - with open(filename, 'a') as f: - f.write(f"{energy:.2f},{bragg:.2f},{inten:.2f}\n") - data = { - "x_data": np.array(xdata), - "y_data": np.array(ydata), - "motor_name": "dcm_bragg", - "signal_name": "bcu_bpmsum", - "motor_device": dev.dcm_bragg, - "scan_number": "Current", - } - dev.transm.put(0.1) # set transmission back to 0.1 - # Define and fit model to scan data - fit_params = create_fit_parameters(deriv = True, - negative = False, - model = FitDefaults.MODEL, - baseline = FitDefaults.BASELINE) - fit_result = fit(data, fit_params) - - # Plot the fitted data if plot = True - - plot_fitted_data(data, fit_result) - - - def cal_samcam_fixed_x(): # lat = dev.hfm_x.read()["hfm_x"]["value"] # pitch = dev.hfm_pitch.read()["hfm_pitch"]["value"] - fpitch = dev.dcm_fpitch.read()['dcm_fpitch']['value'] + fpitch = dev.dcm_fpitch.read()["dcm_fpitch"]["value"] scanpoints = np.linspace(3.75, 4.75, 7) zoom_high = 800 zoom_low = 200 @@ -631,15 +913,21 @@ def correlate_fpitch(): plt.show() -def correlate_hfm_x(): +def correlate_hfm_xd(meas="bcu"): x_correlation = [] - lat = dev.hfm_x.read()["hfm_x"]["value"] - scanpoints = np.linspace(lat - 0.1, lat + 0.1, 10) + startx = get_value(dev.hfm_xd) + scanpoints = np.linspace(startx - 0.02, startx + 0.02, 10) for pos in scanpoints: - umv(dev.hfm_x, pos) - xpos, ypos = compute_pos() + umv(dev.hfm_xd, pos) + if meas == "bcu": + xpos, ypos = get_bcu_beampos() + elif meas == "scint": + xpos, ypos = read_scintXY(1000) + else: + print("define measurement device, bcu or scint") + return x_correlation.append(xpos) - umv(dev.hfm_x, lat) + umv(dev.hfm_xd, startx) x = np.array(scanpoints) y1 = np.array(x_correlation) @@ -656,45 +944,61 @@ def correlate_hfm_x(): plt.plot( x_fit, xslope * x_fit + xint, label=f"y = {xslope:.5g}*x + ({xint:.5g})", color="lightcoral" ) - plt.xlabel("HFM lateral (mm)") - plt.ylabel("beam X (from BCU BPM)") + plt.xlabel("HFM Downstream X (mm)") + if meas == "bcu": + plt.ylabel("beam X (from BCU BPM)") + elif meas == "scint": + plt.ylabel("beam X (from Scintillator)") plt.legend() plt.grid(True) plt.tight_layout() plt.show() -# def correlate_vfm_y(): -# y_correlation = [] -# vert = dev.vfm_y.read()["vfm_y"]["value"] -# scanpoints = np.linspace(vert - 0.06, vert + 0.06, 10) -# for pos in scanpoints: -# umv(dev.vfm_y, pos) -# xpos, ypos = compute_pos() -# y_correlation.append(ypos) -# umv(dev.vfm_y, vert) +def correlate_vfm_ydr(meas="bcu"): + y_correlation = [] + starty = get_value(dev.vfm_ydr) + if meas == "bcu": + scanpoints = np.linspace(starty - 0.005, starty + 0.005, 10) + elif meas == "scint": + scanpoints = np.linspace(starty - 0.02, starty + 0.02, 10) -# x = np.array(scanpoints) -# y1 = np.array(y_correlation) + for pos in scanpoints: + umv(dev.vfm_ydr, pos) + if meas == "bcu": + xpos, ypos = get_bcu_beampos() + elif meas == "scint": + xpos, ypos = read_scintXY(1000) + else: + print("define measurement device, bcu or scint") + return + y_correlation.append(ypos) + umv(dev.vfm_ydr, starty) -# yslope, yint = np.polyfit(x, y1, 1) + x = np.array(scanpoints) + y1 = np.array(y_correlation) -# print(f"Fit for xpos is: y = {yslope}.x + {yint}") -# plt.figure(figsize=(7, 5)) -# # plt.scatter(x, y1, label='xpos') -# plt.scatter(x, y1, label="beam y position", color="rebeccapurple") + xslope, xint = np.polyfit(x, y1, 1) -# x_fit = np.linspace(min(x), max(x), 100) -# # plt.plot(x_fit, xslope*x_fit + xint, 'r--', label=f'y = {xslope}*x + {xint}') -# plt.plot( -# x_fit, yslope * x_fit + yint, label=f"y = {yslope:.5g}*x + ({yint:.5g})", color="lightcoral" -# ) -# plt.xlabel("VFM vertical (mm)") -# plt.ylabel("beam Y(from BCU BPM)") -# plt.legend() -# plt.grid(True) -# plt.tight_layout() -# plt.show() + print(f"Fit for ypos is: y = {xslope:.5g}.x + {xint:.5g}") + plt.figure(figsize=(7, 5)) + # plt.scatter(x, y1, label='xpos') + plt.scatter(x, y1, label="beam y position", color="rebeccapurple") + + x_fit = np.linspace(min(x), max(x), 100) + # plt.plot(x_fit, xslope*x_fit + xint, 'r--', label=f'y = {xslope}*x + {xint}') + plt.plot( + x_fit, xslope * x_fit + xint, label=f"y = {xslope:.5g}*x + ({xint:.5g})", color="lightcoral" + ) + plt.xlabel("VFM Downstream Ring Y (mm)") + if meas == "bcu": + plt.ylabel("beam Y (from BCU BPM)") + if meas == "scint": + plt.ylabel("beam Y (from Scintillator)") + plt.legend() + plt.grid(True) + plt.tight_layout() + plt.show() def correlate_hfm_pitch(): @@ -768,72 +1072,6 @@ from epics import caget, caput import time -def auto_exposure( - cam="samcam", target=200, tol=5, gain=0.9, min_exp=0.00001, max_exp=0.2, max_iter=10 -): - """ - Adjust camera exposure time to reach a target max pixel value. - - Parameters - ---------- - target : float - Desired MaxValue (counts) - tol : float - Acceptable deviation from target - min_exp, max_exp : float - Exposure time limits (s) - max_iter : int - Maximum number of adjustment iterations - """ - if cam == "samcam": - exposure = dev.samcam_exp.read()["samcam_exp"]["value"] - else: - exposure = dev.ss_xicam_exp.read()["ss_xicam_exp"]["value"] - - print(f"Starting exposure = {exposure:.4f} s") - - for i in range(max_iter): - time.sleep(0.1) # allow a frame or two to update - if cam == "samcam": - maxval = dev.samcam_max.read()["samcam_max"]["value"] - if maxval is None: - print("No reading — check camera.") - break - if cam == "ss_xicam": - maxval = dev.ss_xicam_max.read()["ss_xicam_max"]["value"] - if maxval is None: - print("No reading — check camera.") - break - - error = target - maxval - # print(f"Iter {i+1}: MaxValue = {maxval:.1f}, error = {error:.1f}") - - # stop if within tolerance - if abs(error) <= tol: - # print(f"Target reached (MaxValue={maxval:.1f}) after {i+1} iterations.") - break - - # proportional correction (simple gain control) - gain_setting = gain # moderate response - new_exp = exposure * (1 + gain_setting * error / target) - - # limit exposure bounds - new_exp = max(min_exp, min(max_exp, new_exp)) - - # update camera perp = dev.dcm_perp.read()["dcm_perp"]["value"] - y = dev.ss_xicam_x.read()["ss_xicam_x"]["value"] - x = dev.ss_xicam_y.read()["ss_xicam_y"]["value"] - if cam == "samcam": - dev.samcam_exp.put(new_exp) - # print(f" → Adjusting exposure to {new_exp:.4f} s") - else: - dev.ss_xicam_exp.put(new_exp) - # print(f" → Adjusting exposure to {new_exp:.4f} s") - - exposure = new_exp - - print(f"New exposure time is {exposure:.3g}") - return exposure # def get_new_beamsizes(mirror): @@ -876,17 +1114,18 @@ def filters(pos="out"): if SE.scin.checkpos(): auto_exposure(cam="samcam", max_iter=20) -def filenow(date_only = False): + +def filenow(date_only=False): """Return current time formatted for filenames.""" if date_only: return datetime.now().strftime("%Y%m%d") else: - return datetime.now().strftime("%Y%m%d-%H%M") + return datetime.now().strftime("%Y%m%d-%H%M") def energy_vs_height(start_energy=11000, end_energy=25000, step=1000): """Correlate beam height with energy from start_energy to end_energy in steps of step""" - filedir, fnow = fnow(dir = "test") + filedir, fnow = fnow(dir="test") filename = f"{filedir}/{fnow}_energy-height-ss.csv" with open(filename, "w", encoding="utf-8") as f: # f.write("energy,bcu_norm_y,bcu_y,samcam_ypix,samcam_y\n") @@ -916,7 +1155,6 @@ def energy_vs_height(start_energy=11000, end_energy=25000, step=1000): # umv(dev.id_gap, 20.0) - def scan_in_x(xsize, xcen, mon, small, large, width, steps): umv(xsize, small) go_to_peak(xcen, mon, -(width * 0.5), (width * 0.5), steps=steps, relative=False) @@ -934,16 +1172,7 @@ def trans_fils(inc): x2 = dev.ss_f2_x.read()["ss_f2_x"]["value"] x3 = dev.ss_f3_x.read()["ss_f3_x"]["value"] x4 = dev.ss_f4_x.read()["ss_f4_x"]["value"] - umv( - dev.ss_f1_x, - x1 + inc, - dev.ss_f2_x, - x2 + inc, - dev.ss_f3_x, - x3 + inc, - dev.ss_f4_x, - x4 + inc, - ) + umv(dev.ss_f1_x, x1 + inc, dev.ss_f2_x, x2 + inc, dev.ss_f3_x, x3 + inc, dev.ss_f4_x, x4 + inc) def calc_from_centre(cam="samcam"): @@ -986,14 +1215,13 @@ def get_cam(low_zoom, high_zoom): # else: # print("Adjust X tilt in anticlockwise direction") if -15 <= ydiff <= 15: - print("Y is OK") + print("Y is OK") elif ydiff > 15: - print("Adjust Y tilt in anticlockwise direction") + print("Adjust Y tilt in anticlockwise direction") else: print("Adjust Y tilt in clockwise direction") - # def read_currents(): # """Read the individual bpm channels""" # bpm1 = dev.bcu_bpm1.read()["bcu_bpm1"]["value"] @@ -1013,17 +1241,19 @@ def get_cam(low_zoom, high_zoom): # yn = ((readings["bpm1"] + readings["bpm3"]) - (readings["bpm2"] + readings["bpm4"])) / total # return xn, yn -def average_inten(): - vals_inten = [] - for _ in range(5): - vals_inten.append(dev.bcu_bpmsum.read()['bcu_bpmsum']['value']) - time.sleep(0.1) - inten = np.mean(vals_inten) - return inten -def mirror_pitch(mirror = 'vfm'): - - if mirror == 'vfm': +def average_inten(): + vals_inten = [] + for _ in range(5): + vals_inten.append(dev.bcu_bpmsum.read()["bcu_bpmsum"]["value"]) + time.sleep(0.1) + inten = np.mean(vals_inten) + return inten + + +def mirror_pitch(mirror="vfm"): + + if mirror == "vfm": pitch = dev.vfm_pitch.position mot = dev.vfm_pitch start = 2.94 @@ -1032,9 +1262,9 @@ def mirror_pitch(mirror = 'vfm'): mot = dev.hfm_pitch start = 3.3 print(f"Scanning {mirror}_pitch from 10-29 keV") - pitch_range = [start - 0.25, start - 0.2, start -0.15, start - 0.1, start -0.05] + pitch_range = [start - 0.25, start - 0.2, start - 0.15, start - 0.1, start - 0.05] - umv(mot,start) + umv(mot, start) results = [] now = datetime.now() @@ -1056,122 +1286,20 @@ def mirror_pitch(mirror = 'vfm'): vals_diode = [] for _ in range(5): - vals_diode.append(dev.xidiode.read()['xidiode']['value']) + vals_diode.append(dev.xidiode.read()["xidiode"]["value"]) time.sleep(0.1) diode = np.mean(vals_diode) - results.append([ - energy, - p, - diode, - ]) + results.append([energy, p, diode]) with open(csvfile, "a") as f: - f.write( - f"{energy:.2f},{p:.5f},{diode:.5g}\n" - ) - umv(mot,start) + f.write(f"{energy:.2f},{p:.5f},{diode:.5g}\n") + umv(mot, start) bl_energy(12400) results = np.array(results) -def read_scintXY(zoom=800): - """ Get the X and Y beam positions from the sample camera at - a sepcified zoom. Default zoom is 800""" - # Ensure shutter and detector cover are closed before changing states - dev.bcu_shutter.put(0) - bl.d['det_cov'].move('close') - try: - # set transmission to 10% - dev.transm.put(0.1) - # set camera zoom - umv(dev.scam_zoom, zoom) - # move to beam visualisation - bl.planner.move_to(BeamlineState.BEAM_VISUALISATION) - # open shutter - dev.bcu_shutter.put(1) - # set autoexposure - auto_exposure(cam="samcam", max_iter=25) - time.sleep(0.2) - x = dev.samcam_x.read()['samcam_x']['value'] - y = dev.samcam_y.read()['samcam_y']['value'] - return x, y - finally: - dev.bcu_shutter.put(0) - -def find_best_roll(low = 6000, high = 20000): - # low_scanpoints = np.linspace(2.0, 7.0, 11) - low_scanpoints = np.linspace(2.5, 6.5, 9) - high_scanpoints = np.linspace(1.0, 9.0,9) - highs_y, lows_y = [], [] - filedir, _ = filenow(dir="test") - - # low energy - bl_energy(low) - # filename = f"{filedir}/roll_{low:.0f}.csv" - filename = env.lut_dir / f"roll_{low:.0f}.csv" - with open(filename, "w", encoding="utf-8") as f: - f.write("Roll, Y pos\n") - for i in low_scanpoints: - umv(dev.dcm_froll, i) - time.sleep(0.2) - _, low_y = read_samcam_scint() - print(f"Ypos at sample cam is {low_y}") - lows_y.append(low_y) - with open(filename, "a", encoding="utf-8") as f: - f.write(f"{i:.4g},{low_y:.4g} \n") - - # high energy - bl_energy(high) - # filename = f"{filedir}/roll_{high:.0f}.csv" - filename = env_lut_dir / f"roll_{high:.0f}.csv" - with open(filename, "w", encoding="utf-8") as f: - f.write("Roll, Y pos\n") - auto_exposure("samcam", max_iter=25) - for i in high_scanpoints: - umv(dev.dcm_froll, i) - time.sleep(0.2) - _, high_y = read_samcam_scint() - print(f"Ypos at sample cam is {high_y}") - highs_y.append(high_y) - with open(filename, "a", encoding="utf-8") as f: - f.write(f"{i:.4g},{high_y:.4g} \n") - - y_high = np.array(highs_y) - y_low = np.array(lows_y) - - - # # Fit linear models: y = m*x + b - m_high, b_high = np.polyfit(high_scanpoints, y_high, 1) - m_low, b_low = np.polyfit(low_scanpoints, y_low, 1) - - # # Intersection point - x_intersect = (b_low - b_high) / (m_high - m_low) - y_intersect = m_high * x_intersect + b_high - - print(f"\nIntersection at:") - print(f" DCM Roll = {x_intersect:.5f}") - print(f" samcam Y = {y_intersect:.2f}") - - # # --- Plot --- - plt.figure(figsize=(7,5)) - plt.scatter(high_scanpoints, y_high, color='red', label=f'High energy') - plt.scatter(low_scanpoints, y_low, color='blue', label=f'Low energy') - - x_fit = np.linspace(min(high_scanpoints), max(high_scanpoints), 100) - plt.plot(x_fit, m_high*x_fit + b_high, 'r--', label=f'High energy') - plt.plot(x_fit, m_low*x_fit + b_low, 'b--', label=f'Low energy') - - plt.scatter(x_intersect, y_intersect, color='green', s=80, zorder=5, label='Intersection') - - plt.xlabel('DCM fine roll') - plt.ylabel('samcam Y pos') - plt.title('Roll Calibration') - plt.legend() - plt.grid(True) - plt.tight_layout() - plt.show() def vfm_yaw_check(): slit_size = 0.02 @@ -1191,18 +1319,18 @@ def vfm_yaw_check(): # Point 1 print(f"Moving slits to position 1") umv(dev.ss_sl_ycen, slit_point1) - scans.line_scan(dev.vfm_x, mirror_start, mirror_end, steps = 20, relative=False) + scans.line_scan(dev.vfm_x, mirror_start, mirror_end, steps=20, relative=False) fit_result = fit_history(-1, "xidiode", deriv=True) - centre = fit_result['centre'] - print(f'Yaw = {yaw}, position = {slit_point1}, centre = {centre}') + centre = fit_result["centre"] + print(f"Yaw = {yaw}, position = {slit_point1}, centre = {centre}") point1.append(centre) # Point 2 print(f"Moving slits to position 2") umv(dev.ss_sl_ycen, slit_point2) - scans.line_scan(dev.vfm_x, mirror_start, mirror_end, steps = 20, relative=False) + scans.line_scan(dev.vfm_x, mirror_start, mirror_end, steps=20, relative=False) fit_result = fit_history(-1, "xidiode", deriv=True) - centre = fit_result['centre'] - print(f'Yaw = {yaw}, position = {slit_point2}, centre = {centre}') + centre = fit_result["centre"] + print(f"Yaw = {yaw}, position = {slit_point2}, centre = {centre}") point2.append(centre) print(f"Point 1 values are {point1}") print(f"Point 2 values are {point2}") @@ -1211,7 +1339,6 @@ def vfm_yaw_check(): y_point1 = np.array(point1) y_point2 = np.array(point2) - # # Fit linear models: y = m*x + b m_point1, b_point1 = np.polyfit(yaw_values, y_point1, 1) m_point2, b_point2 = np.polyfit(yaw_values, y_point2, 1) @@ -1225,229 +1352,204 @@ def vfm_yaw_check(): print(f" Y = {y_intersect:.2f}") # # --- Plot --- - plt.figure(figsize=(7,5)) - plt.scatter(yaw_values, y_point1, color='red', label=f'point1') - plt.scatter(yaw_values, y_point2, color='blue', label=f'point2') + plt.figure(figsize=(7, 5)) + plt.scatter(yaw_values, y_point1, color="red", label=f"point1") + plt.scatter(yaw_values, y_point2, color="blue", label=f"point2") x_fit = np.linspace(min(yaw_values), max(yaw_values), 100) - plt.plot(x_fit, m_point1*x_fit + b_point1, 'r--', label=f'point1') - plt.plot(x_fit, m_point2*x_fit + b_point2, 'b--', label=f'point2') + plt.plot(x_fit, m_point1 * x_fit + b_point1, "r--", label=f"point1") + plt.plot(x_fit, m_point2 * x_fit + b_point2, "b--", label=f"point2") - plt.scatter(x_intersect, y_intersect, color='green', s=80, zorder=5, label='Intersection') + plt.scatter(x_intersect, y_intersect, color="green", s=80, zorder=5, label="Intersection") - plt.xlabel('VFM yaw') - plt.ylabel('Edge') - plt.title('VFM Yaw Calibration') + plt.xlabel("VFM yaw") + plt.ylabel("Edge") + plt.title("VFM Yaw Calibration") plt.legend() plt.grid(True) plt.tight_layout() plt.show() -from dataclasses import dataclass -import time +# @dataclass +# class SlitAxis: +# name: str +# centre_motor: object # e.g. dev.slit1_x +# size_motor: object # e.g. dev.slit1_xsize +# scan_func: callable # your existing peak scan function +# scan_range: float = 2.0 +# open_size: float = 2.0 +# min_size: float = -0.4 +# max_size: float = 5.0 + +# def read_intensity(detector, n=5, delay=0.1): +# values = [] +# for _ in range(n): +# values.append(detector.read()[detector.name]["value"]) +# time.sleep(delay) +# return sum(values) / len(values) -@dataclass -class SlitAxis: - name: str - centre_motor: object # e.g. dev.slit1_x - size_motor: object # e.g. dev.slit1_xsize - scan_func: callable # your existing peak scan function - scan_range: float = 2.0 - open_size: float = 2.0 - min_size: float = -0.4 - max_size: float = 5.0 +# def reduce_to_transmission(axis, detector, baseline, target=0.15, step=0.05): +# """ +# Close slit size until intensity is around target * baseline. +# """ +# size = axis.size_motor.position + +# while size > axis.min_size: +# intensity = read_intensity(detector) +# transmission = intensity / baseline + +# print( +# f"{axis.name}: size={size:.4f}, " f"I={intensity:.3g}, transmission={transmission:.3f}" +# ) + +# if transmission <= target: +# return size, intensity + +# size -= step +# umv(axis.size_motor, size) + +# raise RuntimeError(f"{axis.name}: reached minimum slit size without reaching target") -@dataclass -class Slit: - name: str - x: SlitAxis - y: SlitAxis +# def open_to_transmission(axis, detector, baseline, target=0.99, step=0.05): +# """ +# Open slit until intensity is close to the original baseline. +# """ +# size = axis.size_motor.position + +# while size < axis.max_size: +# intensity = read_intensity(detector) +# transmission = intensity / baseline + +# print( +# f"{axis.name}: size={size:.4f}, " f"I={intensity:.3g}, transmission={transmission:.3f}" +# ) + +# if transmission >= target: +# return size, intensity + +# size += step +# umv(axis.size_motor, size) +# # final_size = axis.size.motor.position +# # fudge = 0.5 +# # umv(axis.size_motor,final_size + fudge) + +# raise RuntimeError(f"{axis.name}: reached maximum slit size without restoring intensity") -def read_intensity(detector, n=5, delay=0.1): - values = [] - for _ in range(n): - values.append(detector.read()[detector.name]["value"]) - time.sleep(delay) - return sum(values) / len(values) +# # def approx_centre_axis(axis, detector, slitsize=0.5): +# # umv(axis.size_motor, slitsize) +# # go_to_peak(axis.centre_motor, detector, -4, 4, 50, confirm=False) + + +# def centre_axis(axis, detector, close_fraction=0.10, open_fraction=0.95): +# print(f"\nAligning {axis.name}") + +# # approx_centre_axis(axis, detector, slitsize=0.5) + +# umv(axis.size_motor, axis.open_size) + +# baseline = read_intensity(detector) +# print(f"{axis.name}: baseline intensity = {baseline:.3g}") + +# # if baseline <= 0: +# # raise RuntimeError(f"{axis.name}: invalid baseline intensity") + +# reduce_to_transmission(axis, detector, baseline, target=close_fraction) + +# go_to_peak( +# axis.centre_motor, +# detector, +# axis.centre_motor.position - axis.scan_range, +# axis.centre_motor.position + axis.scan_range, +# 50, +# confirm=False, +# ) +# print(f"{axis.name}: moving centre to peak position") + +# open_to_transmission(axis, detector, baseline, target=open_fraction) + +# final_intensity = read_intensity(detector) +# print( +# f"{axis.name}: final intensity = {final_intensity:.3g}, " +# f"transmission = {final_intensity / baseline:.3f}" +# ) +# cen_pos = get_value(axis.centre_motor) +# return cen_pos + + +# def open_slits(size=3): +# slits = define_slits() +# for slit in slits: +# umv(slit.x.size_motor, size) +# umv(slit.y.size_motor, size) + + +# def centre_slit(slit, detector): +# print(f"\n=== Aligning {slit.name} ===") + +# centre_axis(slit.x, detector) +# centre_axis(slit.y, detector) + +# print(f"=== Finished {slit.name} ===") -def reduce_to_transmission(axis, detector, baseline, target=0.15, step=0.05): - """ - Close slit size until intensity is around target * baseline. - """ - size = axis.size_motor.position - - while size > axis.min_size: - intensity = read_intensity(detector) - transmission = intensity / baseline - - print( - f"{axis.name}: size={size:.4f}, " - f"I={intensity:.3g}, transmission={transmission:.3f}" - ) - - if transmission <= target: - return size, intensity - - size -= step - umv(axis.size_motor, size) - - raise RuntimeError(f"{axis.name}: reached minimum slit size without reaching target") -def open_to_transmission(axis, detector, baseline, target=0.99, step=0.05): - """ - Open slit until intensity is close to the original baseline. - """ - size = axis.size_motor.position - - while size < axis.max_size: - intensity = read_intensity(detector) - transmission = intensity / baseline - - print( - f"{axis.name}: size={size:.4f}, " - f"I={intensity:.3g}, transmission={transmission:.3f}" - ) - - if transmission >= target: - return size, intensity - - size += step - umv(axis.size_motor, size) - # final_size = axis.size.motor.position - # fudge = 0.5 - # umv(axis.size_motor,final_size + fudge) - - raise RuntimeError(f"{axis.name}: reached maximum slit size without restoring intensity") - -# def approx_centre_axis(axis, detector, slitsize=0.5): -# umv(axis.size_motor, slitsize) -# go_to_peak(axis.centre_motor, detector, -4, 4, 50, confirm=False) -def centre_axis(axis, detector, close_fraction=0.10, open_fraction=0.95): - print(f"\nAligning {axis.name}") +# def define_slits(): +# slits = [ +# Slit( +# name="bsf", +# x=SlitAxis( +# name="bsf_sl_x", +# centre_motor=dev.bsf_sl_xcen, +# size_motor=dev.bsf_sl_xsize, +# scan_func=go_to_peak, +# ), +# y=SlitAxis( +# name="bsf_sl_y", +# centre_motor=dev.bsf_sl_ycen, +# size_motor=dev.bsf_sl_ysize, +# scan_func=go_to_peak, +# ), +# ), +# Slit( +# name="ss", +# x=SlitAxis( +# name="ss_sl_x", +# centre_motor=dev.ss_sl_xcen, +# size_motor=dev.ss_sl_xsize, +# scan_func=go_to_peak, +# ), +# y=SlitAxis( +# name="ss_sl_y", +# centre_motor=dev.ss_sl_ycen, +# size_motor=dev.ss_sl_ysize, +# scan_func=go_to_peak, +# ), +# ), +# Slit( +# name="bcu", +# x=SlitAxis( +# name="bcu_sl_x", +# centre_motor=dev.bcu_sl_xcen, +# size_motor=dev.bcu_sl_xsize, +# scan_func=go_to_peak, +# ), +# y=SlitAxis( +# name="ss_sl_y", +# centre_motor=dev.bcu_sl_ycen, +# size_motor=dev.bcu_sl_ysize, +# scan_func=go_to_peak, +# ), +# ), +# ] +# return slits - # approx_centre_axis(axis, detector, slitsize=0.5) - - umv(axis.size_motor, axis.open_size) - - baseline = read_intensity(detector) - print(f"{axis.name}: baseline intensity = {baseline:.3g}") - - # if baseline <= 0: - # raise RuntimeError(f"{axis.name}: invalid baseline intensity") - - reduce_to_transmission( - axis, - detector, - baseline, - target=close_fraction, - ) - - go_to_peak(axis.centre_motor, detector, axis.centre_motor.position - axis.scan_range, - axis.centre_motor.position + axis.scan_range, - 50, - confirm=False) - print(f"{axis.name}: moving centre to peak position") - - open_to_transmission( - axis, - detector, - baseline, - target=open_fraction, - ) - - final_intensity = read_intensity(detector) - print( - f"{axis.name}: final intensity = {final_intensity:.3g}, " - f"transmission = {final_intensity / baseline:.3f}" - ) - -def open_slits(size=3): - slits = define_slits() - for slit in slits: - umv(slit.x.size_motor, size) - umv(slit.y.size_motor, size) - - -def centre_slit(slit, detector): - print(f"\n=== Aligning {slit.name} ===") - - centre_axis(slit.x, detector) - centre_axis(slit.y, detector) - - print(f"=== Finished {slit.name} ===") - - -def centre_all_slits(slits, detector): - for slit in slits: - try: - centre_slit(slit, detector) - except Exception as exc: - print(f"WARNING: failed to align {slit.name}: {exc}") - print("Continuing with next slit.") - -def centre_one(name, detector): - slits = define_slits() - for slit in slits: - if slit.name == name: - centre_slit(slit, detector) - -def define_slits(): - slits = [ - Slit( - name="bsf", - x=SlitAxis( - name="bsf_sl_x", - centre_motor=dev.bsf_sl_xcen, - size_motor=dev.bsf_sl_xsize, - scan_func=go_to_peak, - ), - y=SlitAxis( - name="bsf_sl_y", - centre_motor=dev.bsf_sl_ycen, - size_motor=dev.bsf_sl_ysize, - scan_func=go_to_peak, - ), - ), - Slit( - name="ss", - x=SlitAxis( - name="ss_sl_x", - centre_motor=dev.ss_sl_xcen, - size_motor=dev.ss_sl_xsize, - scan_func=go_to_peak, - ), - y=SlitAxis( - name="ss_sl_y", - centre_motor=dev.ss_sl_ycen, - size_motor=dev.ss_sl_ysize, - scan_func=go_to_peak, - ), - ), - Slit( - name="bcu", - x=SlitAxis( - name="bcu_sl_x", - centre_motor=dev.bcu_sl_xcen, - size_motor=dev.bcu_sl_xsize, - scan_func=go_to_peak, - ), - y=SlitAxis( - name="ss_sl_y", - centre_motor=dev.bcu_sl_ycen, - size_motor=dev.bcu_sl_ysize, - scan_func=go_to_peak, - ), - ), - ] - return slits def get_mirror_data(history_index: int): """Read data from the BEC history and return the X and Y data as arrays.""" @@ -1458,14 +1560,13 @@ def get_mirror_data(history_index: int): md = scan.metadata["bec"] x1_data = scan.devices[motor1][motor1].read()["value"] x2_data = scan.devices[motor2][motor2].read()["value"] - y1_data = scan.devices['microscope_stats']['microscope_stats_data_sigma_y'].read()['value'] - y2_data = scan.devices['microscope_stats']['microscope_stats_data_eccentricity'].read()['value'] + y1_data = scan.devices["microscope_stats"]["microscope_stats_data_sigma_y"].read()["value"] + y2_data = scan.devices["microscope_stats"]["microscope_stats_data_eccentricity"].read()["value"] np.savetxt("luts/x1_data", x1_data) np.savetxt("luts/x2_data", x2_data) np.savetxt("luts/y1_data", y1_data) np.savetxt("luts/y2_data", y2_data) - # plt.imshow(y1_data, cmap="hot") # plt.clf # return { @@ -1485,13 +1586,12 @@ def record_beampos_until(stop_time_str, interval_minutes=10): # Prepare the file filename = bl.env.lut_dir / "beampos" / f"beampos_{filenow()}.csv" - scam_zoom = dev.scam_zoom.read()['scam_zoom']['value'] + scam_zoom = dev.scam_zoom.read()["scam_zoom"]["value"] umv(dev.scam_zoom, 800) beam_size = "25 x 25" energy = get_current_energy() - # Write the header to the file with open(filename, "w", encoding="utf-8") as f: f.write(f"Beam size: {beam_size}, Energy: {energy:.0f} eV, Zoom: {scam_zoom}\n") @@ -1525,8 +1625,6 @@ def record_beampos_until(stop_time_str, interval_minutes=10): print(f"Finished — reached {end_time:%H:%M}.") bl.planner.move_to(BeamlineState.MANUAL_SAMPLE_EXCHANGE) - - def record_beam(filename): @@ -1538,7 +1636,7 @@ def record_beam(filename): umv(dev.bcu_bpm_x, BPM_X_Calibration.centred_position) umv(dev.bcu_bpm_y, BPM_Y_Calibration.centred_position) - try: + try: # Open shutter and record positions dev.bcu_shutter.put(1) auto_exposure(cam="samcam") @@ -1551,7 +1649,9 @@ def record_beam(filename): xpos_cam = dev.samcam_x.read()["samcam_x"]["value"] ypos_cam = dev.samcam_y.read()["samcam_y"]["value"] xpos_bpm, ypos_bpm = get_bcu_beampos() - print(f"Time is {fnow}, ScinX position is {xpos_cam:.5g}, ScinY position is {ypos_cam:.5g}") + print( + f"Time is {fnow}, ScinX position is {xpos_cam:.5g}, ScinY position is {ypos_cam:.5g}" + ) print(f"BPM X is: {xpos_bpm}, BPM Y is {ypos_bpm}") f.write( # f"{fnow}, {xpos: .5g}, {ypos: .4g}, {xpos_cam: .5g}, {ypos_cam: .4g}\n" @@ -1585,7 +1685,6 @@ def analyse_beampos(file): data["Scin_x"] = (data["Scin_x"] - ref_scinx) * calc_scam_microns(1) data["Scin_y"] = (data["Scin_y"] - ref_sciny) * calc_scam_microns(1) - # Extract Y-position columns (all columns except the first column) y_positions = data.iloc[:, 1:] # Exclude the first column @@ -1605,9 +1704,7 @@ def analyse_beampos(file): # Plot the line and scatter with the chosen color ax.plot(meas_time, y_positions[column], color=color, linewidth=0.5) # Line plot - ax.scatter( - meas_time, y_positions[column], color=color, label=column - ) # Scatter plot + ax.scatter(meas_time, y_positions[column], color=color, label=column) # Scatter plot # Set x-axis tick positions and labels tick_positions = range(0, len(meas_time), 7) # Adjust the step size as needed @@ -1624,14 +1721,14 @@ def analyse_beampos(file): # Show the resulting figure plt.show() + import time import numpy as np import matplotlib.pyplot as plt from epics import caget - -def scan_scin_focus(planner, type = 'fine'): +def scan_scin_focus(planner, type="fine"): dev.bcu_shutter.put(0) planner.move_to(BeamlineState.BEAM_VISUALISATION) dev.bcu_shutter.put(1) @@ -1640,10 +1737,9 @@ def scan_scin_focus(planner, type = 'fine'): min = 0.1 max = 9.9 - - if type == 'fine': + if type == "fine": steps = 100 - elif type == 'coarse': + elif type == "coarse": steps = 30 else: steps = 60 @@ -1672,7 +1768,7 @@ def bpm_errors(ch1, ch2, ch3, ch4): def find_bpm_centre(positions, errors): """Fit the BPM difference signal and return its zero crossing.""" - + slope, intercept = np.polyfit(positions, errors, 1) if abs(slope) < 1e-6: @@ -1682,19 +1778,20 @@ def find_bpm_centre(positions, errors): return centre, slope, intercept + def centre_bcu_bpm_x(): positions = [] errors = [] startx = dev.bcu_bpm_x.position starty = dev.bcu_bpm_y.position - scanpoints_x = np.linspace(startx-0.15, startx+0.15, 20) + scanpoints_x = np.linspace(startx - 0.15, startx + 0.15, 20) for x in scanpoints_x: umv(dev.bcu_bpm_x, x) - result = read_currents() - ch1 = float(result["bpm1"]) - ch2 = float(result["bpm2"]) - ch3 = float(result["bpm3"]) - ch4 = float(result["bpm4"]) + ch1 = get_value(dev.bcu_bpm1) + ch2 = get_value(dev.bcu_bpm2) + ch3 = get_value(dev.bcu_bpm3) + ch4 = get_value(dev.bcu_bpm4) + x_error, _ = bpm_errors(ch1, ch2, ch3, ch4) print(f"BPM_X = {float(x)}, Xerror = {x_error}") @@ -1702,23 +1799,23 @@ def centre_bcu_bpm_x(): positions.append(x) errors.append(x_error) - centre, slope, intercept = find_bpm_centre(positions,errors) + centre, slope, intercept = find_bpm_centre(positions, errors) print(f"BPM centre in X is at {centre} mm") umv(dev.bcu_bpm_x, centre) return centre + def centre_bcu_bpm_y(): positions = [] errors = [] starty = dev.bcu_bpm_y.position - scanpoints_y = np.linspace(starty-0.15, starty+0.15, 20) + scanpoints_y = np.linspace(starty - 0.15, starty + 0.15, 20) for y in scanpoints_y: umv(dev.bcu_bpm_y, y) - result = read_currents() - ch1 = float(result["bpm1"]) - ch2 = float(result["bpm2"]) - ch3 = float(result["bpm3"]) - ch4 = float(result["bpm4"]) + ch1 = get_value(dev.bcu_bpm1) + ch2 = get_value(dev.bcu_bpm2) + ch3 = get_value(dev.bcu_bpm3) + ch4 = get_value(dev.bcu_bpm4) _, y_error = bpm_errors(ch1, ch2, ch3, ch4) print(f"BPM_Y = {float(y)}, Yerror = {y_error}") @@ -1726,16 +1823,1436 @@ def centre_bcu_bpm_y(): positions.append(y) errors.append(y_error) - centre, slope, intercept = find_bpm_centre(positions,errors) + centre, slope, intercept = find_bpm_centre(positions, errors) print(f"BPM centre in Y is at {centre} mm") umv(dev.bcu_bpm_y, centre) return centre + + +def centre_ss_bpm_x(): + positions = [] + errors = [] + startx = dev.ss_bpm_x.position + starty = dev.ss_bpm_y.position + scanpoints_x = np.linspace(startx - 0.15, startx + 0.15, 20) + for x in scanpoints_x: + umv(dev.ss_bpm_x, x) + + ch1 = get_value(dev.ss_bpm1) + ch2 = get_value(dev.ss_bpm2) + ch3 = get_value(dev.ss_bpm3) + ch4 = get_value(dev.ss_bpm4) + x_error, _ = bpm_errors(ch1, ch2, ch3, ch4) + + print(f"BPM_X = {float(x)}, Xerror = {x_error}") + + positions.append(x) + errors.append(x_error) + + centre, slope, intercept = find_bpm_centre(positions, errors) + print(f"BPM centre in X is at {centre} mm") + umv(dev.ss_bpm_x, centre) + return centre + + +def centre_ss_bpm_y(): + positions = [] + errors = [] + starty = dev.ss_bpm_y.position + scanpoints_y = np.linspace(starty - 0.15, starty + 0.15, 20) + for y in scanpoints_y: + umv(dev.ss_bpm_y, y) + ch1 = get_value(dev.ss_bpm1) + ch2 = get_value(dev.ss_bpm2) + ch3 = get_value(dev.ss_bpm3) + ch4 = get_value(dev.ss_bpm4) + _, y_error = bpm_errors(ch1, ch2, ch3, ch4) + + print(f"BPM_Y = {float(y)}, Yerror = {y_error}") + + positions.append(y) + errors.append(y_error) + + centre, slope, intercept = find_bpm_centre(positions, errors) + print(f"BPM centre in Y is at {centre} mm") + umv(dev.ss_bpm_y, centre) + return centre + +def centre_lu_bpm_x(): + positions = [] + errors = [] + startx = dev.lu_bpm_x.position + starty = dev.lu_bpm_y.position + scanpoints_x = np.linspace(startx - 0.15, startx + 0.15, 20) + for x in scanpoints_x: + umv(dev.lu_bpm_x, x) + + ch1 = get_value(dev.lu_bpm1) + ch2 = get_value(dev.lu_bpm2) + ch3 = get_value(dev.lu_bpm3) + ch4 = get_value(dev.lu_bpm4) + x_error, _ = bpm_errors(ch1, ch2, ch3, ch4) + + print(f"BPM_X = {float(x)}, Xerror = {x_error}") + + positions.append(x) + errors.append(x_error) + + centre, slope, intercept = find_bpm_centre(positions, errors) + print(f"BPM centre in X is at {centre} mm") + umv(dev.lu_bpm_x, centre) + return centre + + +def centre_lu_bpm_y(): + positions = [] + errors = [] + starty = dev.lu_bpm_y.position + scanpoints_y = np.linspace(starty - 0.15, starty + 0.15, 20) + for y in scanpoints_y: + umv(dev.lu_bpm_y, y) + ch1 = get_value(dev.lu_bpm1) + ch2 = get_value(dev.lu_bpm2) + ch3 = get_value(dev.lu_bpm3) + ch4 = get_value(dev.lu_bpm4) + _, y_error = bpm_errors(ch1, ch2, ch3, ch4) + + print(f"BPM_Y = {float(y)}, Yerror = {y_error}") + + positions.append(y) + errors.append(y_error) + + centre, slope, intercept = find_bpm_centre(positions, errors) + print(f"BPM centre in Y is at {centre} mm") + umv(dev.lu_bpm_y, centre) + + return centre def read_i1(): - return dev.i1.read()['i1']['value'] + return dev.i1.read()["i1"]["value"] + def read_i2(): - return dev.i2.read()['i2']['value'] + return dev.i2.read()["i2"]["value"] + def quick_test(): bl.planner.closest_states() + + +import time +import numpy as np + + +def _read_signal(signal): + """Return the value from a BEC/ophyd signal.""" + data = signal.read() + key = next(iter(data)) + return data[key]["value"] + + +def _smooth_profile(profile, window=7): + """Simple moving-average smoothing.""" + profile = np.asarray(profile, dtype=float) + + if window <= 1: + return profile + + kernel = np.ones(window) / window + return np.convolve(profile, kernel, mode="same") + + +def find_dark_feature(profile, search_min, search_max, smooth_window=7, threshold_fraction=0.35): + """ + Find the centre and edges of a dark feature in a 1-D intensity profile. + + Parameters + ---------- + profile : array-like + Intensity profile. + + search_min, search_max : int + Pixel range in which to search. + + smooth_window : int + Width of moving-average smoothing. + + threshold_fraction : float + Fraction of the maximum dip depth used to define the feature edges. + + Returns + ------- + dict + centre, low_edge, high_edge, width, depth + """ + + profile = np.asarray(profile, dtype=float) + smooth = _smooth_profile(profile, smooth_window) + + x = np.arange(len(smooth)) + + mask = (x >= search_min) & (x <= search_max) + xx = x[mask] + yy = smooth[mask] + + if len(yy) == 0: + raise ValueError("Search range contains no profile points") + + # Estimate local background from the brighter part of the profile. + background = np.percentile(yy, 80) + + # How far each pixel lies below the background. + darkness = np.clip(background - yy, 0, None) + + peak_index = np.argmax(darkness) + peak_depth = darkness[peak_index] + + if peak_depth <= 0: + raise RuntimeError("No dark feature found") + + threshold = threshold_fraction * peak_depth + + # Start at deepest point and walk outwards until the dip disappears. + left = peak_index + while left > 0 and darkness[left] > threshold: + left -= 1 + + right = peak_index + while right < len(darkness) - 1 and darkness[right] > threshold: + right += 1 + + low_edge = xx[left] + high_edge = xx[right] + + # Darkness-weighted centre is more stable than a single minimum pixel. + feature_mask = np.arange(len(xx)) + feature_mask = (feature_mask >= left) & (feature_mask <= right) + + weights = darkness[feature_mask] + coords = xx[feature_mask] + + centre = np.average(coords, weights=weights) + + return { + "centre": float(centre), + "low_edge": float(low_edge), + "high_edge": float(high_edge), + "width": float(high_edge - low_edge), + "depth": float(peak_depth), + } + + +def measure_omega_runout( + omega_motor, + profile_x_signal, + profile_y_signal, + cursor_x_signal, + *, + angles=None, + x_search=(900, 1200), + y_search=(850, 1150), + settle=1.0, + cursor_settle=0.2, + smooth_window=7, + threshold_fraction=0.35, +): + """ + Measure apparent needle position while rotating omega. + + CursorY should already be positioned so that the X profile crosses + the needle. + + At each omega: + 1. Read ProfileCursorX + 2. Find needle X + 3. Move CursorX to that position + 4. Read ProfileCursorY + 5. Find needle Y + + Returns + ------- + list[dict] + One result dictionary per omega position. + """ + + if angles is None: + angles = np.arange(0, 361, 45) + + results = [] + + for angle in angles: + print(f"\nOmega = {angle:.1f}°") + + umv(omega_motor, (float(angle))) + time.sleep(settle) + + # ------------------------------------------------------ + # X position + # ------------------------------------------------------ + profile_x = _read_signal(profile_x_signal) + + x_result = find_dark_feature( + profile_x, + search_min=x_search[0], + search_max=x_search[1], + smooth_window=smooth_window, + threshold_fraction=threshold_fraction, + ) + + needle_x = x_result["centre"] + + # Put vertical cursor through the detected needle position. + cursor_x_signal.put(int(round(needle_x))) + + time.sleep(cursor_settle) + + # ------------------------------------------------------ + # Y position + # ------------------------------------------------------ + profile_y = _read_signal(profile_y_signal) + + y_result = find_dark_feature( + profile_y, + search_min=y_search[0], + search_max=y_search[1], + smooth_window=smooth_window, + threshold_fraction=threshold_fraction, + ) + + needle_y = y_result["centre"] + + result = { + "omega": float(angle), + "x": needle_x, + "x_width": x_result["width"], + "x_depth": x_result["depth"], + "y": needle_y, + "y_width": y_result["width"], + "y_depth": y_result["depth"], + } + + results.append(result) + + print(f" X = {needle_x:8.2f} px" f" width = {x_result['width']:6.1f}") + print(f" Y = {needle_y:8.2f} px" f" width = {y_result['width']:6.1f}") + + # ---------------------------------------------------------- + # Summary + # ---------------------------------------------------------- + + xs = np.asarray([r["x"] for r in results]) + ys = np.asarray([r["y"] for r in results]) + + print("\nOmega runout") + print("------------") + print(f"X peak-to-peak : {np.ptp(xs):.2f} px") + print(f"Y peak-to-peak : {np.ptp(ys):.2f} px") + + if len(results) > 1: + return_error = np.hypot(xs[-1] - xs[0], ys[-1] - ys[0]) + + print(f"0° -> 360° error: {return_error:.2f} px") + + return results + + +# def dcm_pitch_calibration(start_energy=6000, end_energy=31000, step=3000): +def dcm_pitch_calibration(): + """Quick calibration of DCM Pitch against energy""" + energies = [5500, 8000, 10000, 12000, 14000, 16000, 18000, + 20000, 22000, 24000, 27000, 30000] + filename = bl.env.lut_dir / f"dcm_pitch_{filenow(date_only=True)}.csv" + with open(filename, "w", encoding="utf-8") as f: + f.write("energy,bragg,pitch\n") + # for energy in range(start_energy, end_energy, step): + try: + for energy in energies: + # energy_list = [29000,26000,23000,20000,17000,14000,11000,8000,6000] + # for energy in energy_list: + # bl_energy(energy, mono_scan=False) + # result = go_to_peak( + # dev.dcm_pitch, dev.lu_bpmsum, -0.1, 0.4, 40, min_fwhm_steps=1, confirm=False + # ) + # pitch_new = get_value(dev.dcm_pitch) + bl_energy(energy) + pitch_new = get_value(dev.dcm_pitch) + bragg = get_value(dev.dcm_bragg) + with open(filename, "a", encoding="utf-8") as f: + f.write(f"{energy:.0f},{bragg:.3f},{pitch_new:.5g}\n") + finally: + bl_energy(12400) + + +# def plot_rolls(): +# energies = [6000, 9000, 12000, 15000, 18000, 21000] +# for energy in energies: +# filename = bl.env.lut_dir / f"roll_{energy}.csv" +# data = np.loadtxt(filename, delimiter=",", skiprows=1) +# x = data[:, 0] +# y = data[:, 1] + +# m, c = np.polyfit(x,y,1) +# from pathlib import Path + +# import numpy as np +# import pandas as pd +# import matplotlib.pyplot as plt + + +def analyse_roll_calibration( + energies=(6000, 9000, 12000, 15000, 18000, 21000), +): + """ + Analyse roll calibration scans at several energies. + + Reads: + bl.env.lut_dir / roll_{energy}.csv + + Each CSV must contain: + Roll,Y pos + + Fits Y position vs roll independently for each energy and finds + the roll where the fitted Y positions have minimum spread. + """ + + lut_dir = Path(bl.env.lut_dir) + fits = {} + + fig, ax = plt.subplots(figsize=(10, 7)) + + # ------------------------------------------------------------ + # Read and fit each energy + # ------------------------------------------------------------ + + for energy in energies: + + filename = lut_dir / f"roll_{energy}.csv" + df = pd.read_csv(filename) + + roll = df["Roll"].to_numpy() + y = df["Y pos"].to_numpy() + + # Linear fit: y = m * roll + b + m, b = np.polyfit(roll, y, 1) + fits[energy] = (m, b) + + # Plot measured points + ax.scatter( + roll, + y, + label=f"{energy / 1000:g} keV", + ) + + # Plot fitted line + xx = np.linspace(roll.min(), roll.max(), 100) + ax.plot(xx, m * xx + b, "--") + + print( + f"{energy / 1000:4.1f} keV: " + f"Y = {m:8.3f} × roll + {b:8.3f}" + ) + + # ------------------------------------------------------------ + # Find roll where fitted lines have minimum spread + # ------------------------------------------------------------ + + slopes = np.array([m for m, b in fits.values()]) + intercepts = np.array([b for m, b in fits.values()]) + + dm = slopes - slopes.mean() + db = intercepts - intercepts.mean() + + best_roll = -np.sum(dm * db) / np.sum(dm**2) + + # Predicted Y position at best roll + predicted_y = np.array( + [ + m * best_roll + b + for m, b in fits.values() + ] + ) + + mean_y = predicted_y.mean() + std_y = predicted_y.std() + + # ------------------------------------------------------------ + # Results + # ------------------------------------------------------------ + + print("\nBest roll:") + print(f" {best_roll:.6f}") + + print("\nPredicted Y at best roll:") + + for energy, y in zip(energies, predicted_y): + print( + f" {energy / 1000:4.1f} keV : " + f"{y:8.2f} px" + ) + + print( + f"\nMean Y = {mean_y:.2f} px" + f"\nSpread = {std_y:.2f} px" + ) + + # ------------------------------------------------------------ + # Plot optimum + # ------------------------------------------------------------ + + ax.axvline( + best_roll, + color="black", + linestyle=":", + label=f"Best roll = {best_roll:.4f}", + ) + + ax.axhline( + mean_y, + color="grey", + linestyle=":", + alpha=0.5, + ) + + ax.set_xlabel("Roll") + ax.set_ylabel("Scintillator Y position (px)") + ax.set_title("DCM roll calibration") + ax.legend() + + plt.tight_layout() + plt.show() + + return { + "best_roll": best_roll, + "mean_y": mean_y, + "std_y": std_y, + "fits": fits, + "predicted_y": dict(zip(energies, predicted_y)), + } + +def analyse_roll(low=6000, high=25000, low_file=None, high_file=None): + """Find the DCM fine-roll value where low/high-energy beam positions intersect.""" + + # low_file = bl.env.lut_dir / f"roll_{low:.0f}.csv" + # high_file = bl.env.lut_dir / f"roll_{high:.0f}.csv" + + low_data = np.loadtxt(low_file, delimiter=",", skiprows=1) + + high_data = np.loadtxt(high_file, delimiter=",", skiprows=1) + + low_roll = low_data[:, 0] + low_y = low_data[:, 1] + + high_roll = high_data[:, 0] + high_y = high_data[:, 1] + + # Linear fits: y = mx + b + m_low, b_low = np.polyfit(low_roll, low_y, 1) + m_high, b_high = np.polyfit(high_roll, high_y, 1) + + # Intersection + x_intersect = (b_low - b_high) / (m_high - m_low) + y_intersect = m_low * x_intersect + b_low + + print("\nIntersection:") + print(f" DCM Roll = {x_intersect:.5f}") + print(f" samcam Y = {y_intersect:.2f}") + + # Plot + plt.figure(figsize=(7, 5)) + + plt.scatter(low_roll, low_y, label=f"{low / 1000:.1f} keV") + + plt.scatter(high_roll, high_y, label=f"{high / 1000:.1f} keV") + + x_min = min(low_roll.min(), high_roll.min()) + x_max = max(low_roll.max(), high_roll.max()) + + x_fit = np.linspace(x_min, x_max, 200) + + plt.plot(x_fit, m_low * x_fit + b_low, "--", label=f"{low / 1000:.1f} keV fit") + + plt.plot(x_fit, m_high * x_fit + b_high, "--", label=f"{high / 1000:.1f} keV fit") + + plt.scatter(x_intersect, y_intersect, s=80, zorder=5, label="Intersection") + + plt.xlabel("DCM fine roll") + plt.ylabel("samcam Y pos") + plt.title("DCM Roll Calibration") + plt.legend() + plt.grid() + plt.tight_layout() + plt.show() + + return x_intersect + + +def scan_roll(energy, start, stop, steps=9, settle=0.2, filename=None, overwrite=False): + """Measure scintillator Y position as a function of DCM fine roll.""" + + scanpoints = np.linspace(start, stop, steps) + print(f"Scanning roll from {start} to {stop}") + + if filename is None: + filename = bl.env.lut_dir / f"roll_{energy:.0f}.csv" + + if filename.exists() and not overwrite: + print(f"{filename.name} already exists.") + print("Use overwrite=True if you want to repeat this energy.") + return filename + + bl_energy(energy) + + try: + prepare_scint_measurement(zoom=800) + + with open(filename, "w", encoding="utf-8") as f: + f.write("Roll,Y pos\n") + + for roll in scanpoints: + umv(dev.dcm_froll, roll) + time.sleep(settle) + + auto_exposure("samcam") + + results = read_scintXY() + if not results["ok"]: + raise RuntimeError( + f"Beam position measurement failed at " + f"{energy / 1000:.1f} keV, roll={roll:.3f}: " + f"{results['message']}" + ) + + print(f"{energy / 1000:.1f} keV | " f"roll = {roll:.3f} | " f"Y = {results["Y_pixels"]:.2f}") + + f.write(f"{roll:.6f},{results["Y_pixels"]}\n") + + finally: + finish_scint_measurement() + return filename + +def measure_rolls(): + energies = [6000, 9000, 12000, 15000, 18000, 21000] + try: + for energy in energies: + scan_roll(energy, start=2, stop=5, overwrite=True) + finally: + print("done") + # bl_energy(12400) + + +def find_best_roll( + low=6000, + high=25000, + low_range=(2.0, 4.0), + high_range=(1.0, 8.0), + steps=9, +): + """Collect missing roll scans and calculate optimum roll.""" + + filename_prefix = filenow(date_only=True) + low_file = bl.env.lut_dir / f"roll_{filename_prefix}_{low:.0f}.csv" + high_file = bl.env.lut_dir / f"roll_{filename_prefix}_{high:.0f}.csv" + + # Define the two scans + scans = [ + (low, low_range, low_file), + (high, high_range, high_file), + ] + + # Start with whichever energy is closest to the current energy + current_energy = get_current_energy() + + scans.sort( + key=lambda scan: abs(current_energy - scan[0]) + ) + + print(f"Current energy: {current_energy:.0f} eV") + print(f"Scanning {scans[0][0]:.0f} eV first") + + # Run scans in the chosen order + for energy, scan_range, filename in scans: + if not filename.exists(): + scan_roll( + energy, + *scan_range, + steps=steps, + filename=filename, + ) + else: + print(f"Using existing {filename.name}") + + return analyse_roll(low, high, low_file, high_file) + + +def test_hfm(): + target = current_hfm + correction + + print(f"HFM requested: {current_hfm:.6f} -> {target:.6f}") + umv(dev.hfm_xd, target) + + actual = get_value(dev.hfm_xd) + print( + f"HFM actual: {actual:.6f} " + f"(requested move {(target-current_hfm)*1000:+.3f} µm, " + f"actual move {(actual-current_hfm)*1000:+.3f} µm)" + ) + + +def test_hfm2(dmove, offset): + current = get_value(dev.hfm_xd) + target = current + dmove + print( + f"Current HFM = {current:.4f}, target position = {target:.4f}, difference = {target-current:.4f}" + ) + # Step 1, add the offset to dmove and add to current position + move_to_1 = current + dmove + offset + umv(dev.hfm_xd, move_to_1) + print(f"Moving to {move_to_1:.4f}, difference of {current-move_to_1:.4f}") + # Step 2, move back by the offset amount + move_to_2 = move_to_1 - offset + umv(dev.hfm_xd, move_to_2) + print(f"Moving to {move_to_2:.4f}, difference of {current-move_to_2:.4f}") + # Print actual move + new = get_value(dev.hfm_xd) + print(f"Requested move was {dmove:.4f}, actual move was {new-current:.4f}") + + +def test_hfm3(dmove, offset=0.002): + current = get_value(dev.hfm_xd) + target = current + dmove + + # Overshoot in the same direction as the requested move + signed_offset = np.sign(dmove) * abs(offset) + overshoot = target + signed_offset + + print( + f"Current HFM = {current:.6f}\n" + f"Target HFM = {target:.6f}\n" + f"Requested move = {dmove*1000:+.3f} µm" + ) + + umv(dev.hfm_xd, overshoot) + + after_overshoot = get_value(dev.hfm_xd) + print(f"Overshoot requested = {overshoot:.6f}, " f"actual = {after_overshoot:.6f}") + + umv(dev.hfm_xd, target) + + final = get_value(dev.hfm_xd) + + print( + f"Final requested = {target:.6f}, actual = {final:.6f}\n" + f"Requested net move = {dmove*1000:+.3f} µm\n" + f"Actual net move = {(final-current)*1000:+.3f} µm\n" + f"Position error = {(final-target)*1000:+.3f} µm" + ) + + +def test_vfm3(dmove, offset=0.002): + current = get_value(dev.vfm_ydr) + target = current + dmove + + direction = np.sign(dmove) + overshoot = target + direction * abs(offset) + + print( + f"Current VFM = {current:.6f}\n" + f"Target VFM = {target:.6f}\n" + f"Requested move = {dmove*1000:+.3f} µm" + ) + + umv(dev.vfm_ydr, overshoot) + + after_overshoot = get_value(dev.vfm_ydr) + print(f"Overshoot requested = {overshoot:.6f}, " f"actual = {after_overshoot:.6f}") + + umv(dev.vfm_ydr, target) + + final = get_value(dev.vfm_ydr) + + print( + f"Final requested = {target:.6f}, actual = {final:.6f}\n" + f"Requested net move = {dmove*1000:+.3f} µm\n" + f"Actual net move = {(final-current)*1000:+.3f} µm\n" + f"Position error = {(final-target)*1000:+.3f} µm" + ) + +def beamstop_check_energies(): + + bs_in = 0.904 + bs_out = 0 + + start_energy = 30000 + end_energy = 5000 + + filename = bl.env.lut_dir / f"bs_checks_{filenow(date_only=True)}.csv" + with open(filename, "w", encoding="utf-8") as f: + f.write("Energy,I2_in,I2_out\n") + + try: + for energy in range (start_energy, end_energy, -2000): + print(f"Moving to energy {energy}") + bl_energy(energy) + dev.transm.put(0.1) + trans = get_value(dev.transm) + print(f"Transmission is {trans}") + dev.bcu_shutter.put(1) + time.sleep(1) + invalue = get_value(dev.i2) + print(f"Reading with beamstop in position is {invalue:.4g}") + # Check reading with beamstop out + umv(dev.bs_y, bs_out) + time.sleep(1) + outvalue = get_value(dev.i2) + dev.bcu_shutter.put(0) + print(f"Reading with beamstop out is {outvalue:.4g}") + umv(dev.bs_y, bs_in) + with open(filename, "a", encoding="utf-8") as f: + f.write(f"{energy:.0f},{invalue:.4g}, {outvalue:.4g}\n") + finally: + dev.bcu_shutter.put(0) + umv(dev.bs_y, bs_in) + bl_energy(12400) + +def check_perp(): + Xref = -0.0059957 + Yref = -0.000993 + + bl_energy(12000) + + start_perp = get_value(dev.dcm_perp) + + perps = [start_perp, start_perp-0.1, start_perp, start_perp+0.1, start_perp] + filename = bl.env.lut_dir / f"perp_check.csv" + with open(filename, 'w', encoding="utf-8") as f: + f.write("Delta perp, Pitch, Xnorm, Delta X") + + for perp in perps: + umv(dev.dcm_perp, perp) + delta_perp = perp - start_perp + mono_pitch_scan() + pitch = get_value(dev.dcm_pitch) + Xnorm, Ynorm = compute_norm_ss() + Xdelta = -0.247*(Xnorm-Xref) + Ydelta = 0.0420*(Ynorm-Yref) + with open(filename, 'a', encoding="utf-8") as f: + f.write(f"{delta_perp},{pitch:.5g},{Xnorm:.5g},{Xdelta:.5g}") + print( + f"Delta perp: {delta_perp}, " + f"Pitch: {pitch:.5g}, " + f"Xnorm: {Xnorm:.5g}, " + f"delta X: {Xdelta:.5g}" + ) + +def calibrate_dcm_perp(): + """ + Determine the DCM perp position required to maintain a fixed beam + position on the SS XBPM as a function of energy. + + At each energy: + 1. Move to the energy using the existing calibration. + 2. Optimise DCM pitch. + 3. Measure the beam position on the SS XBPM. + 4. Calculate a perp correction from the measured beam displacement. + 5. Apply the correction. + 6. Re-optimise pitch. + 7. Measure the final beam position. + 8. Save the results to CSV. + + The SS XBPM X calibration is: + beam_dx_mm = -0.247 * (Xnorm - Xref) + + From the 12 keV perp test: + beam_dx / perp_dx = 1.46 + """ + + # -------------------------------------------------------------- + # Calibration constants + # -------------------------------------------------------------- + + Xref = -0.0059957 + + # Beam displacement in mm per unit change in Xnorm + xnorm_to_mm = -0.247 + + # Measured response: + # beam displacement (mm) / perp displacement (mm) + beam_per_perp = 1.46 + + energies = [ + 6000, + 8000, + 10000, + 12000, + 16000, + 20000, + 24000, + 30000, + ] + + filename = bl.env.lut_dir / "dcm_perp_calibration.csv" + + # -------------------------------------------------------------- + # Create CSV + # -------------------------------------------------------------- + + with open(filename, "w", encoding="utf-8") as f: + f.write( + "energy_eV," + "nominal_perp_mm," + "initial_pitch_mrad," + "initial_xnorm," + "initial_beam_dx_mm," + "perp_correction_mm," + "corrected_perp_mm," + "final_pitch_mrad," + "final_xnorm," + "final_beam_dx_mm\n" + ) + + # -------------------------------------------------------------- + # Measure each energy + # -------------------------------------------------------------- + try: + for energy in energies: + + print() + print("=" * 60) + print(f"Energy: {energy / 1000:.1f} keV") + print("=" * 60) + + # Move energy using current calibration + bl_energy(energy) + + # This is the perp position predicted by the current + # beam_offset = 6 mm model + nominal_perp = get_value(dev.dcm_perp) + + # ---------------------------------------------------------- + # Initial pitch optimisation and BPM measurement + # ---------------------------------------------------------- + + mono_pitch_scan() + + initial_pitch = get_value(dev.dcm_pitch) + + Xnorm, Ynorm = compute_norm_ss() + + initial_dx = xnorm_to_mm * (Xnorm - Xref) + + print(f"Nominal perp: {nominal_perp:.6f} mm") + print(f"Initial pitch: {initial_pitch:.6f} mrad") + print(f"Initial Xnorm: {Xnorm:.6f}") + print(f"Initial beam dx: {initial_dx * 1000:+.1f} um") + + # ---------------------------------------------------------- + # Calculate required perp correction + # + # Positive perp produced positive beam dx in our test. + # Therefore correction has opposite sign to measured dx. + # ---------------------------------------------------------- + + perp_correction = -initial_dx / beam_per_perp + + corrected_perp = nominal_perp + perp_correction + + print(f"Perp correction: {perp_correction * 1000:+.1f} um") + print(f"Corrected perp: {corrected_perp:.6f} mm") + + # ---------------------------------------------------------- + # Apply correction and re-optimise pitch + # ---------------------------------------------------------- + + umv(dev.dcm_perp, corrected_perp) + + mono_pitch_scan() + + final_pitch = get_value(dev.dcm_pitch) + + final_Xnorm, final_Ynorm = compute_norm_ss() + + final_dx = xnorm_to_mm * (final_Xnorm - Xref) + + print(f"Final pitch: {final_pitch:.6f} mrad") + print(f"Final Xnorm: {final_Xnorm:.6f}") + print(f"Final beam dx: {final_dx * 1000:+.1f} um") + + # ---------------------------------------------------------- + # Save result + # ---------------------------------------------------------- + + with open(filename, "a", encoding="utf-8") as f: + f.write( + f"{energy}," + f"{nominal_perp:.8f}," + f"{initial_pitch:.8f}," + f"{Xnorm:.8f}," + f"{initial_dx:.8f}," + f"{perp_correction:.8f}," + f"{corrected_perp:.8f}," + f"{final_pitch:.8f}," + f"{final_Xnorm:.8f}," + f"{final_dx:.8f}\n" + ) + + print() + print(f"Calibration saved to:") + print(filename) + finally: + bl_energy(12400) +from datetime import datetime + + +def scan_dcm_exit_vs_energy(): + """ + Measure the DCM exit beam position as a function of energy. + + At each energy: + 1. Move to energy using the current DCM calibration. + 2. Optimise DCM pitch. + 3. Record DCM pitch and perp positions. + 4. Record SS XBPM Xnorm and Ynorm. + + No corrections are made to perp or beam position. + """ + + energies = [ + 6000, + 8000, + 10000, + 12000, + 13000, + 14000, + 15000, + 16000, + 18000, + 20000, + 22000, + 24000, + 27000, + 30000, + ] + + filename = ( + bl.env.lut_dir + / f"dcm_exit_scan_{datetime.now():%Y%m%d_%H%M%S}.csv" + ) + + # -------------------------------------------------------------- + # Create CSV + # -------------------------------------------------------------- + + with open(filename, "w", encoding="utf-8") as f: + f.write( + "energy_eV," + "perp_mm," + "pitch_mrad," + "xnorm_lu," + "ynorm_lu, " + "xnorm_ss, " + "ynorm_ss, " + "lu_bpmsum " + "ss_bpmsum\n" + ) + + # -------------------------------------------------------------- + # Energy scan + # -------------------------------------------------------------- + try: + for energy in energies: + + print() + print("=" * 60) + print(f"Energy: {energy / 1000:.1f} keV") + print("=" * 60) + + # Move to energy using current calibration + bl_energy(energy) + + + # Read actual DCM positions after optimisation + perp = get_value(dev.dcm_perp) + pitch = get_value(dev.dcm_pitch) + + # Read SS XBPM + Xnorm_ss, Ynorm_ss = compute_norm_ss() + Xnorm_lu, Ynorm_lu = compute_norm_lu() + lu_bpmsum = get_value(dev.lu_bpmsum) + ss_bpmsum = get_value(dev.ss_bpmsum) + + # ---------------------------------------------------------- + # Print result + # ---------------------------------------------------------- + + print( + f"Energy: {energy / 1000:5.1f} keV | " + f"Perp: {perp: .6f} mm | " + f"Pitch: {pitch: .6f} mrad | " + f"Xnorm_LU: {Xnorm_lu: .6f} | " + f"Ynorm_LU: {Ynorm_lu: .6f} | " + f"Xnorm_SS: {Xnorm_ss: .6f} | " + f"Ynorm_SS: {Ynorm_ss: .6f} | " + f"LU BPMsum: {lu_bpmsum:.5f} | " + f"SS BPMsum: {ss_bpmsum:.5f}" + ) + + # ---------------------------------------------------------- + # Save result + # ---------------------------------------------------------- + + with open(filename, "a", encoding="utf-8") as f: + f.write( + f"{energy}," + f"{perp:.8f}," + f"{pitch:.8f}," + f"{Xnorm_lu:.8f}," + f"{Ynorm_lu:.8f}," + f"{Xnorm_ss:.8f}," + f"{Ynorm_ss:.8f}," + f"{lu_bpmsum:.5f}," + f"{ss_bpmsum:.5f}\n" + ) + + print() + print("=" * 60) + print("DCM exit scan complete") + print(f"Results saved to: {filename}") + except Exception as exc: + print(f"\nDCM exit scan FAILED: {exc}") + raise + finally: + bl_energy(12400) + +def perp_again(): + energies = [8000, 10000, 12400, 15000, 18000, 20000, 22000, 25000] + perp_offsets = [-0.05, -0.025, 0.0, 0.025, 0.05, 0.0] + + filename = bl.env.lut_dir / f"perp_{filenow()}.csv" + with open(filename, "w", encoding="utf-8") as f: + f.write("energy,dcm_pitch,dcm_perp,lu_bpmsum,lu_Xnorm,lu_Ynorm,bcu_bpmsum,bcu_x,bcu_y,samcam_x,samcam_y\n") + try: + for energy in energies: + bl_energy(energy) + + prepare_scint_measurement() + + perp_value = get_value(dev.dcm_perp) + + for offset in perp_offsets: + perp = perp_value + offset + + umv(dev.dcm_perp,perp) + mono_pitch_scan() + + dcm_pitch = get_value(dev.dcm_pitch) + dcm_perp = get_value(dev.dcm_perp) + + + lu_bpmsum = get_value(dev.lu_bpmsum) + lu = compute_norm_lu() + lu_Xnorm = lu["lu_Xnorm"] + lu_Ynorm = lu["lu_Ynorm"] + + bcu_bpmsum = get_value(dev.bcu_bpmsum) + bcu = get_bcu_beampos() + bcu_x = bcu["bcu_x_um"] + bcu_y = bcu["bcu_y_um"] + + scint = read_scintXY(image=False) + samcam_x = scint["X_diff_microns"] + samcam_y = scint["Y_diff_microns"] + + with open(filename, "a", encoding="utf-8") as f: + f.write( + f"{energy:.0f},{dcm_pitch:.5f},{dcm_perp:.5f},{lu_bpmsum:.1f},{lu_Xnorm:.3f},{lu_Ynorm:.3f}," + f"{bcu_bpmsum:.1f},{bcu_x:.2f},{bcu_y:.2f},{samcam_x:.2f},{samcam_y:.2f}\n" + ) + finally: + finish_scint_measurement() + bl_energy(12400) + +def perp_ss_xi(): + # energies = [8000, 10000, 12400, 15000, 18000, 20000, 22000, 25000] + energies = [25000] + perp_offsets = [-0.05, -0.025, 0.0, 0.025, 0.05, 0.0] + + filename = bl.env.lut_dir / f"perp_xi_{filenow()}.csv" + with open(filename, "w", encoding="utf-8") as f: + f.write("energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y\n") + try: + for energy in energies: + bl_energy(energy) + + prepare_ss_xi_measurement() + + perp_value = get_value(dev.dcm_perp) + + for offset in perp_offsets: + perp = perp_value + offset + + umv(dev.dcm_perp,perp) + mono_pitch_scan() + + dcm_pitch = get_value(dev.dcm_pitch) + dcm_perp = get_value(dev.dcm_perp) + + + lu_bpmsum = get_value(dev.lu_bpmsum) + lu = compute_norm_lu() + lu_Xnorm = lu["lu_Xnorm"] + lu_Ynorm = lu["lu_Ynorm"] + + + xi_read = read_ss_xicamXY() + xicam_x = xi_read["X_pixels"] + xicam_y = xi_read["Y_pixels"] + + with open(filename, "a", encoding="utf-8") as f: + f.write( + f"{energy:.0f},{dcm_pitch:.5f},{dcm_perp:.5f},{lu_bpmsum:.1f},{lu_Xnorm:.3f},{lu_Ynorm:.3f}," + f"{xicam_x:.1f},{xicam_y:.1f}\n" + ) + finally: + finish_ss_xi_measurement() + # bl_energy(12400) + +def gap_beam(): + # energies = [8000, 10000, 12400, 15000, 18000, 20000, 22000, 25000] + energies = [22000] + + filename = bl.env.lut_dir / f"gap_xi_{filenow()}.csv" + filename2 = bl.env.lut_dir / f"gap_scint_{filenow()}.csv" + with open(filename, "w", encoding="utf-8") as f: + f.write("energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y\n") + with open(filename2, "w", encoding="utf-8") as f: + f.write("energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y\n") + try: + # for energy in energies: + # bl_energy(energy) + + # prepare_ss_xi_measurement() + + # scanpoints=np.linspace(4.535,4.555,20) + # for i in scanpoints: + # umv(dev.id_gap, i) + # time.sleep(0.2) + + # gap = get_value(dev.id_gap) + + # lu_bpmsum = get_value(dev.lu_bpmsum) + # lu = compute_norm_lu() + # lu_Xnorm = lu["lu_Xnorm"] + # lu_Ynorm = lu["lu_Ynorm"] + + # xi_read = read_ss_xicamXY() + # xicam_x = xi_read["X_pixels"] + # xicam_y = xi_read["Y_pixels"] + + # with open(filename, "a", encoding="utf-8") as f: + # f.write( + # f"{energy:.0f},{gap:.4f},{lu_bpmsum:.1f},{lu_Xnorm:.3f},{lu_Ynorm:.3f}," + # f"{xicam_x:.1f},{xicam_y:.1f}\n" + # ) + + for energy in energies: + bl_energy(energy) + finish_ss_xi_measurement() + prepare_scint_measurement() + + scanpoints=np.linspace(4.535,4.555,20) + for i in scanpoints: + umv(dev.id_gap, i) + time.sleep(0.2) + + gap = get_value(dev.id_gap) + + lu_bpmsum = get_value(dev.lu_bpmsum) + lu = compute_norm_lu() + lu_Xnorm = lu["lu_Xnorm"] + lu_Ynorm = lu["lu_Ynorm"] + + + scint_read = read_scintXY(image=False) + samcam_x = scint_read["X_diff_microns"] + samcam_y = scint_read["Y_diff_microns"] + + with open(filename2, "a", encoding="utf-8") as f: + f.write( + f"{energy:.0f},{gap:.4f},{lu_bpmsum:.1f},{lu_Xnorm:.3f},{lu_Ynorm:.3f}," + f"{samcam_x:.1f},{samcam_y:.1f}\n" + ) + finally: + finish_ss_xi_measurement() + finish_scint_measurement() + # bl_energy(12400) + +def gap_test(): + for energy in range(6000, 30001, 500): + try: + harmonic, gap = Gap.calculate_gap(energy) + print( + f"{energy:5d} eV " + f"H{harmonic:2d} " + f"{gap:.4f} mm" + ) + except ValueError as exc: + print(energy, exc) + +def energy_beam_position(): + """ + Measure the beam trajectory as a function of energy. + + At each energy: + 1. Perform a normal energy change. + 2. Insert the SS X-ray eye and measure beam position. + 3. Remove the SS X-ray eye. + 4. Prepare the sample scintillator measurement. + 5. Record LU, BCU and sample-camera beam positions and flux. + + No DCM perp correction or beam steering is applied. + """ + + energies = [ + 6000, + 8000, + 10000, + 12400, + 15000, + 18000, + 20000, + 22000, + 25000, + ] + + filename = bl.env.lut_dir / f"energy_beam_position_{filenow()}.csv" + + with open(filename, "w", encoding="utf-8") as f: + f.write( + "energy,harmonic,gap," + "dcm_pitch,dcm_perp,dcm_roll," + "lu_bpmsum,lu_Xnorm,lu_Ynorm," + "xi_cam_x,xi_cam_y," + "bcu_bpmsum,bcu_Xnorm,bcu_Ynorm,bcu_x,bcu_y," + "samcam_x,samcam_y," + "flux\n" + ) + + try: + for energy in energies: + print(f"\n{'=' * 60}") + print(f"Measuring beam position at {energy} eV") + print(f"{'=' * 60}") + + # ---------------------------------------------------------- + # Normal energy change + # ---------------------------------------------------------- + bl_energy(energy) + + # Record DCM / undulator state after energy change + dcm_pitch = get_value(dev.dcm_pitch) + dcm_perp = get_value(dev.dcm_perp) + dcm_roll = get_value(dev.dcm_froll) + + harmonic, gap = Gap.calculate_gap(energy) + + # ---------------------------------------------------------- + # SS X-ray eye + # This blocks the downstream beam, so measure it first + # and remove it before continuing. + # ---------------------------------------------------------- + try: + prepare_ss_xi_measurement() + time.sleep(0.5) + + xi_read = read_ss_xicamXY() + xicam_x = xi_read["X_pixels"] + xicam_y = xi_read["Y_pixels"] + + time.sleep(0.5) + + finally: + finish_ss_xi_measurement() + + # ---------------------------------------------------------- + # Downstream measurements + # ---------------------------------------------------------- + prepare_scint_measurement() + + # LU BPM + lu_bpmsum = get_value(dev.lu_bpmsum) + + lu = compute_norm_lu() + lu_Xnorm = lu["lu_Xnorm"] + lu_Ynorm = lu["lu_Ynorm"] + + # BCU BPM + bcu_bpmsum = get_value(dev.bcu_bpmsum) + + bcu_norm = compute_norm_bcu() + bcu_Xnorm = bcu_norm["bcu_Xnorm"] + bcu_Ynorm = bcu_norm["bcu_Ynorm"] + + try: + bcu = get_bcu_beampos() + bcu_x = bcu["bcu_x_um"] + bcu_y = bcu["bcu_y_um"] + + except ValueEror as exc: + print(f"WARNING: BCU beam position unavailable {exc}") + bcu_x = float("nan") + bcu_y = float("nan") + + # Sample scintillator + scint = read_scintXY(image=False) + samcam_x = scint["X_diff_microns"] + samcam_y = scint["Y_diff_microns"] + + # Flux + _,flux = bpm2flux() + + # ---------------------------------------------------------- + # Save immediately + # ---------------------------------------------------------- + with open(filename, "a", encoding="utf-8") as f: + f.write( + f"{energy:.0f}," + f"H{harmonic},{gap:.4f}," + f"{dcm_pitch:.5f},{dcm_perp:.5f},{dcm_roll:.5f}," + f"{lu_bpmsum:.1f},{lu_Xnorm:.3f},{lu_Ynorm:.3f}," + f"{xicam_x:.1f},{xicam_y:.1f}," + f"{bcu_bpmsum:.1f},{bcu_Xnorm:.3f},{bcu_Ynorm:.3f}," + f"{bcu_x:.2f},{bcu_y:.2f}," + f"{samcam_x:.2f},{samcam_y:.2f}," + f"{flux:.3e}\n" + ) + + print( + f"{energy:5.0f} eV | " + f"H{harmonic} gap={gap:.4f} | " + f"XI=({xicam_x:.1f}, {xicam_y:.1f}) px | " + f"LU=({lu_Xnorm:.3f}, {lu_Ynorm:.3f}) | " + f"BCU=({bcu_x:.1f}, {bcu_y:.1f}) um | " + f"Sample=({samcam_x:.1f}, {samcam_y:.1f}) um | " + f"Flux={flux:.2e}" + ) + except Exception as exc: + print(f"\nEnergy beam-position measurement FAILED at {energy} eV") + print(f"{type(exc).__name__}: {exc}") + raise + + finally: + # Make sure neither screen is accidentally left in the beam + try: + finish_ss_xi_measurement() + except Exception: + pass + + try: + finish_scint_measurement() + except Exception: + pass + + print("\nReturning to 12400 eV") + bl_energy(12400) + + print(f"\nResults saved to:\n{filename}") \ No newline at end of file diff --git a/pxii_bec/macros/knifehist.py b/pxii_bec/macros/knifehist.py index bea8744..fa658ce 100644 --- a/pxii_bec/macros/knifehist.py +++ b/pxii_bec/macros/knifehist.py @@ -10,7 +10,7 @@ def knife_plothist(hindex: int, signal_name: str, isave=1): Example: data_x, data_y = knife_plothist(-1,"xidode") - scanned with + scanned with scans.line_scan(dev.aerotech.y,-0.05,0.05, steps=101, settling_time=0.5, relative=True) """ @@ -20,13 +20,13 @@ def knife_plothist(hindex: int, signal_name: str, isave=1): if hindex < 0: h = bec.history[hindex] - print('by scan number') + print("by scan number") else: h = bec.history.get_by_scan_number(hindex) - print('by scan number') + print("by scan number") md = h.metadata["bec"] - sno = md['dataset_number'] + sno = md["dataset_number"] print(f"number of scan = {sno}") scanvar = list(md["args"].keys())[0] # string, returns the variable of the last performed scan # data = h.devices[device_name][signal].read()["value"] @@ -34,37 +34,36 @@ def knife_plothist(hindex: int, signal_name: str, isave=1): # data_y = h.devices.lu_bpmsum.lu_bpmsum.read()["value"] # data_x = h.devices[device_name][device_name].read()["value"] - # that works ... - #print(list(md['args'].keys())) - val = list(md['args'].keys()) - #val[0] = 'aerotech.x' - devicenam = val[0] - print('device = ', devicenam) + # that works ... + # print(list(md['args'].keys())) + val = list(md["args"].keys()) + # val[0] = 'aerotech.x' + devicenam = val[0] + print("device = ", devicenam) data_xd = md["positions"] # last scan knows which device ... however, double array data_x = data_xd.flatten() print("dx = ", data_x) - #data_y = h.devices[signal_name][signal_name].read()["value"] - data_y = h.devices["xidiode"]["xidiode"].read()["value"] + # data_y = h.devices[signal_name][signal_name].read()["value"] + data_y = h.devices["xidiode"]["xidiode"].read()["value"] print("dy = ", data_y) - rev = 0 - if val[0][9] == 'x': + rev = 0 + if val[0][9] == "x": rev = 1 - smoothplotgrad(data_x, data_y, reverse = rev) - # g, xm = justfit(data_x, data_y, model=model, ibg=ibg) + smoothplotgrad(data_x, data_y, reverse=rev) + # g, xm = justfit(data_x, data_y, model=model, ibg=ibg) -# plt.ion() -# plt.figure() -# plt.plot(data_x, data_y, "*") -# plt.plot(data_x, g.best_fit) -# plt.xlabel(scanvar) -# plt.ylabel(signal_name) -# plt.show() + # plt.ion() + # plt.figure() + # plt.plot(data_x, data_y, "*") + # plt.plot(data_x, g.best_fit) + # plt.xlabel(scanvar) + # plt.ylabel(signal_name) + # plt.show() -# gcen = g.pars["center"].value + # gcen = g.pars["center"].value - - if isave: + if isave: ans = "n" ans = input("Store data in csv file? y/n ") if ans == "y": @@ -75,5 +74,4 @@ def knife_plothist(hindex: int, signal_name: str, isave=1): with open(filename, "w") as f: np.savetxt(f, combined, delimiter=",", fmt="%.9e") - return data_x, data_y diff --git a/pxii_bec/macros/luts/.~lock.dcm_calibration_4thOct.csv# b/pxii_bec/macros/luts/.~lock.dcm_calibration_4thOct.csv# new file mode 100644 index 0000000..05d0afe --- /dev/null +++ b/pxii_bec/macros/luts/.~lock.dcm_calibration_4thOct.csv# @@ -0,0 +1 @@ +,mcauley_k,x10sa-vcons-01.psi.ch,08.10.2026 15:28,file:///home/mcauley_k/.config/libreoffice/4; \ No newline at end of file diff --git a/pxii_bec/macros/luts/.~lock.temp.csv# b/pxii_bec/macros/luts/.~lock.temp.csv# new file mode 100644 index 0000000..fba849b --- /dev/null +++ b/pxii_bec/macros/luts/.~lock.temp.csv# @@ -0,0 +1 @@ +,mcauley_k,x10sa-vcons-01.psi.ch,08.10.2026 13:22,file:///home/mcauley_k/.config/libreoffice/4; \ No newline at end of file diff --git a/pxii_bec/macros/luts/20260930_ge_edge.csv b/pxii_bec/macros/luts/20260930_ge_edge.csv new file mode 100644 index 0000000..12d1a16 --- /dev/null +++ b/pxii_bec/macros/luts/20260930_ge_edge.csv @@ -0,0 +1,62 @@ +Energy,Bragg,bcu_bpmsum +10953.10,181.54,470.19 +10957.97,181.46,438.23 +10962.84,181.38,400.62 +10967.71,181.30,356.31 +10972.59,181.22,306.11 +10977.48,181.13,260.07 +10982.37,181.05,220.42 +10987.26,180.97,183.83 +10992.16,180.89,149.68 +10997.06,180.81,118.61 +11001.97,180.73,92.83 +11006.88,180.64,71.99 +11011.79,180.56,55.37 +11016.71,180.48,42.38 +11021.64,180.40,32.61 +11026.57,180.32,25.78 +11031.50,180.24,20.77 +11036.44,180.16,17.35 +11041.38,180.07,14.84 +11046.33,179.99,12.82 +11051.28,179.91,11.37 +11056.23,179.83,10.35 +11061.19,179.75,9.51 +11066.16,179.67,8.88 +11071.13,179.59,8.40 +11076.10,179.50,7.76 +11081.08,179.42,7.14 +11086.06,179.34,6.48 +11091.05,179.26,5.77 +11096.04,179.18,4.60 +11101.04,179.10,2.02 +11106.04,179.01,-0.36 +11111.05,178.93,-0.44 +11116.06,178.85,-0.49 +11121.07,178.77,-0.56 +11126.09,178.69,-0.61 +11131.12,178.61,-0.59 +11136.15,178.53,-0.78 +11141.18,178.44,-0.69 +11146.22,178.36,-0.77 +11151.26,178.28,-0.95 +11156.31,178.20,-0.89 +11161.36,178.12,-0.93 +11166.42,178.04,-0.83 +11171.48,177.95,-0.80 +11176.54,177.87,-0.86 +11181.62,177.79,-0.84 +11186.69,177.71,-0.84 +11191.77,177.63,-0.81 +11196.86,177.55,-0.87 +11201.95,177.47,-0.81 +11207.04,177.38,-0.87 +11212.14,177.30,-0.85 +11217.24,177.22,-0.87 +11222.35,177.14,-0.89 +11227.46,177.06,-0.89 +11232.58,176.98,-0.98 +11237.70,176.89,-1.00 +11242.83,176.81,-0.91 +11247.96,176.73,-0.94 +11253.10,176.65,-0.93 diff --git a/pxii_bec/macros/luts/20260930_ge_edge_coarse.csv b/pxii_bec/macros/luts/20260930_ge_edge_coarse.csv new file mode 100644 index 0000000..39bbd62 --- /dev/null +++ b/pxii_bec/macros/luts/20260930_ge_edge_coarse.csv @@ -0,0 +1,42 @@ +Energy,Bragg,ss_bpmsum,bcu_bpmsum,i1,transmission +11003.00,180.71,40337.50,5034.70,-3.155e-08,0.124814 +11007.91,180.63,37732.95,4708.18,-2.250e-08,0.124776 +11012.83,180.55,34281.68,4266.30,-3.557e-08,0.124448 +11017.75,180.46,30615.46,3784.28,-1.949e-08,0.123607 +11022.67,180.38,26805.50,3293.21,-2.652e-08,0.122856 +11027.60,180.30,22925.68,2777.94,-4.461e-08,0.121172 +11032.54,180.22,19156.72,2341.29,-3.356e-08,0.122218 +11037.47,180.14,15677.61,1953.26,-3.456e-08,0.124589 +11042.42,180.06,12596.19,1561.34,-2.853e-08,0.123954 +11047.36,179.98,9918.65,1227.28,-2.351e-08,0.123734 +11052.32,179.89,7733.56,966.71,-4.260e-08,0.125003 +11057.27,179.81,5977.05,749.14,-2.954e-08,0.125336 +11062.23,179.73,4610.51,573.09,-3.155e-08,0.124301 +11067.20,179.65,3555.33,435.38,-3.758e-08,0.122458 +11072.17,179.57,2781.84,332.98,-3.255e-08,0.119699 +11077.14,179.49,2220.76,256.63,-3.758e-08,0.115557 +11082.12,179.40,1810.15,200.61,-2.552e-08,0.110823 +11087.11,179.32,1511.84,158.34,-3.255e-08,0.104733 +11092.09,179.24,1291.08,122.44,-2.753e-08,0.094832 +11097.09,179.16,1134.07,85.85,4.825e-06,0.075699 +11102.08,179.08,1016.08,26.46,1.285e-06,0.026045 +11107.09,179.00,927.11,1.40,-3.959e-08,0.001512 +11112.09,178.92,851.57,0.96,-3.657e-08,0.001123 +11117.10,178.83,790.39,0.71,-3.657e-08,0.000900 +11122.12,178.75,741.22,0.76,-3.858e-08,0.001029 +11127.14,178.67,701.79,0.69,-3.858e-08,0.000981 +11132.16,178.59,669.60,0.61,-3.858e-08,0.000907 +11137.19,178.51,643.20,0.52,-4.763e-08,0.000803 +11142.23,178.43,621.27,0.48,-3.758e-08,0.000771 +11147.27,178.35,601.54,0.48,-3.959e-08,0.000794 +11152.31,178.26,585.43,0.35,-4.763e-08,0.000592 +11157.36,178.18,565.35,0.36,-3.255e-08,0.000640 +11162.41,178.10,548.24,0.40,-3.858e-08,0.000726 +11167.47,178.02,530.61,0.33,-2.250e-08,0.000621 +11172.53,177.94,516.14,0.36,-4.562e-08,0.000707 +11177.60,177.86,502.31,0.16,-3.054e-08,0.000326 +11182.67,177.77,481.54,0.28,-4.763e-08,0.000577 +11187.74,177.69,458.78,0.00,-2.853e-08,0.000007 +11192.82,177.61,442.42,0.07,-5.064e-08,0.000160 +11197.91,177.53,420.53,0.02,-2.753e-08,0.000050 +11203.00,177.45,401.79,-0.06,-3.255e-08,-0.000153 diff --git a/pxii_bec/macros/luts/20260930_ge_edge_fine.csv b/pxii_bec/macros/luts/20260930_ge_edge_fine.csv new file mode 100644 index 0000000..5af7022 --- /dev/null +++ b/pxii_bec/macros/luts/20260930_ge_edge_fine.csv @@ -0,0 +1,62 @@ +Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission +11087.00,179.33,38560.26,4535.26,0.117615 +11087.50,179.32,38275.33,4463.22,0.116608 +11088.00,179.31,37999.53,4402.33,0.115852 +11088.50,179.30,37721.18,4343.98,0.115160 +11088.99,179.29,37433.34,4282.19,0.114395 +11089.49,179.28,37162.01,4224.25,0.113671 +11089.99,179.28,36904.09,4161.01,0.112752 +11090.49,179.27,36648.40,4089.77,0.111595 +11090.99,179.26,36323.22,4012.69,0.110472 +11091.49,179.25,36017.72,3929.25,0.109092 +11091.99,179.24,35694.92,3845.33,0.107728 +11092.49,179.24,35384.70,3760.69,0.106280 +11092.99,179.23,35063.40,3678.15,0.104900 +11093.49,179.22,34734.79,3590.19,0.103360 +11093.99,179.21,34414.03,3499.21,0.101680 +11094.48,179.20,34086.77,3403.19,0.099839 +11094.98,179.19,33768.33,3300.05,0.097726 +11095.48,179.19,33447.18,3189.84,0.095369 +11095.98,179.18,33094.10,3068.68,0.092726 +11096.48,179.17,32745.61,2944.15,0.089910 +11096.98,179.16,32377.90,2807.15,0.086699 +11097.48,179.15,31997.60,2661.17,0.083168 +11097.98,179.15,31669.44,2509.51,0.079241 +11098.48,179.14,31301.86,2342.72,0.074843 +11098.98,179.13,30946.58,2168.22,0.070063 +11099.48,179.12,30599.35,1976.57,0.064595 +11099.98,179.11,30238.94,1777.62,0.058786 +11100.48,179.11,29827.78,1551.64,0.052020 +11100.98,179.10,29476.59,1319.85,0.044776 +11101.48,179.09,29100.97,1068.57,0.036719 +11101.98,179.08,28749.53,815.70,0.028373 +11102.48,179.07,28376.86,577.46,0.020350 +11102.98,179.06,27983.70,363.72,0.012998 +11103.48,179.06,27609.67,201.28,0.007290 +11103.98,179.05,27256.50,93.88,0.003444 +11104.48,179.04,26875.74,37.45,0.001394 +11104.98,179.03,26496.50,13.07,0.000493 +11105.48,179.02,26113.35,5.24,0.000200 +11105.98,179.02,25731.34,2.71,0.000105 +11106.48,179.01,25355.73,2.30,0.000091 +11106.98,179.00,24961.87,1.74,0.000070 +11107.48,178.99,24564.77,1.50,0.000061 +11107.98,178.98,24188.86,1.34,0.000055 +11108.48,178.97,23802.97,1.42,0.000059 +11108.98,178.97,23424.93,1.32,0.000056 +11109.48,178.96,23028.96,1.20,0.000052 +11109.99,178.95,22653.38,1.05,0.000047 +11110.49,178.94,22255.46,0.98,0.000044 +11110.99,178.93,21872.37,0.91,0.000041 +11111.49,178.93,21461.83,0.86,0.000040 +11111.99,178.92,21102.15,0.76,0.000036 +11112.49,178.91,20718.33,0.72,0.000035 +11112.99,178.90,20363.01,0.66,0.000033 +11113.49,178.89,19982.21,0.64,0.000032 +11113.99,178.88,19623.79,0.57,0.000029 +11114.49,178.88,19255.10,0.56,0.000029 +11114.99,178.87,18913.77,0.49,0.000026 +11115.50,178.86,18561.76,0.54,0.000029 +11116.00,178.85,18178.33,0.53,0.000029 +11116.50,178.84,17847.83,0.44,0.000024 +11117.00,178.84,17486.73,0.48,0.000028 diff --git a/pxii_bec/macros/luts/20261007_ge_edge_coarse.csv b/pxii_bec/macros/luts/20261007_ge_edge_coarse.csv new file mode 100644 index 0000000..76646a8 --- /dev/null +++ b/pxii_bec/macros/luts/20261007_ge_edge_coarse.csv @@ -0,0 +1,42 @@ +Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission +11003.00,180.71,39854.34,5135.60,0.128859 +11007.91,180.63,37192.26,4756.05,0.127877 +11012.83,180.55,34019.56,4326.89,0.127188 +11017.75,180.46,30427.58,3878.67,0.127472 +11022.67,180.38,26633.96,3368.52,0.126474 +11027.60,180.30,22820.00,2854.62,0.125093 +11032.54,180.22,19140.74,2436.85,0.127312 +11037.47,180.14,15684.96,1992.82,0.127053 +11042.42,180.06,12620.92,1595.40,0.126409 +11047.36,179.98,9966.27,1272.07,0.127637 +11052.32,179.89,7781.57,998.18,0.128274 +11057.27,179.81,6015.60,772.56,0.128426 +11062.23,179.73,4630.19,586.27,0.126618 +11067.20,179.65,3571.05,441.95,0.123758 +11072.17,179.57,2779.62,332.68,0.119686 +11077.14,179.49,2211.73,253.72,0.114715 +11082.12,179.40,1796.12,194.46,0.108265 +11087.11,179.32,1494.90,146.82,0.098212 +11092.09,179.24,1287.16,101.68,0.078999 +11097.09,179.16,1118.17,35.77,0.031992 +11102.08,179.08,989.75,1.87,0.001892 +11107.09,179.00,896.34,1.43,0.001593 +11112.09,178.92,821.20,1.06,0.001293 +11117.10,178.83,761.17,0.86,0.001135 +11122.12,178.75,714.76,0.70,0.000980 +11127.14,178.67,679.67,0.61,0.000890 +11132.16,178.59,648.22,0.58,0.000899 +11137.19,178.51,615.42,0.41,0.000660 +11142.23,178.43,595.71,0.35,0.000590 +11147.27,178.35,585.79,0.36,0.000606 +11152.31,178.26,561.83,0.28,0.000495 +11157.36,178.18,541.53,0.31,0.000567 +11162.41,178.10,526.27,0.23,0.000435 +11167.47,178.02,506.37,0.19,0.000376 +11172.53,177.94,485.59,0.12,0.000238 +11177.60,177.86,470.40,0.16,0.000341 +11182.67,177.77,449.74,0.08,0.000184 +11187.74,177.69,430.29,0.03,0.000063 +11192.82,177.61,407.55,0.07,0.000167 +11197.91,177.53,388.94,0.07,0.000178 +11203.00,177.45,373.55,0.10,0.000264 diff --git a/pxii_bec/macros/luts/20261007_ge_edge_fine.csv b/pxii_bec/macros/luts/20261007_ge_edge_fine.csv new file mode 100644 index 0000000..f988fb1 --- /dev/null +++ b/pxii_bec/macros/luts/20261007_ge_edge_fine.csv @@ -0,0 +1,62 @@ +Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission +11087.00,179.33,40803.39,4923.21,0.120657 +11087.50,179.32,40632.73,4872.86,0.119925 +11088.00,179.31,40434.30,4822.80,0.119275 +11088.50,179.30,40234.38,4773.51,0.118643 +11088.99,179.29,40033.04,4719.28,0.117885 +11089.49,179.28,39790.80,4665.41,0.117248 +11089.99,179.28,39643.25,4613.48,0.116375 +11090.49,179.27,39445.42,4562.87,0.115676 +11090.99,179.26,39261.94,4506.05,0.114769 +11091.49,179.25,39036.39,4442.76,0.113811 +11091.99,179.24,38813.22,4370.94,0.112615 +11092.49,179.24,38567.29,4298.37,0.111451 +11092.99,179.23,38327.95,4226.19,0.110264 +11093.49,179.22,38047.01,4148.71,0.109042 +11093.99,179.21,37755.27,4065.48,0.107680 +11094.48,179.20,37502.19,3971.56,0.105902 +11094.98,179.19,37253.79,3865.72,0.103767 +11095.48,179.19,36959.52,3760.99,0.101760 +11095.98,179.18,36698.11,3647.32,0.099387 +11096.48,179.17,36424.81,3528.30,0.096865 +11096.98,179.16,36123.06,3406.20,0.094294 +11097.48,179.15,35824.28,3277.61,0.091491 +11097.98,179.15,35526.06,3140.40,0.088397 +11098.48,179.14,35257.47,2991.72,0.084853 +11098.98,179.13,34954.34,2834.08,0.081080 +11099.48,179.12,34632.96,2655.23,0.076668 +11099.98,179.11,34339.50,2471.89,0.071984 +11100.48,179.11,34007.19,2259.99,0.066456 +11100.98,179.10,33662.66,2033.69,0.060414 +11101.48,179.09,33330.11,1786.32,0.053595 +11101.98,179.08,32997.13,1524.36,0.046197 +11102.48,179.07,32674.09,1240.42,0.037963 +11102.98,179.06,32266.53,951.76,0.029497 +11103.48,179.06,31933.44,679.88,0.021291 +11103.98,179.05,31636.60,435.79,0.013775 +11104.48,179.04,31369.22,249.95,0.007968 +11104.98,179.03,31027.85,120.78,0.003893 +11105.48,179.02,30634.91,50.59,0.001651 +11105.98,179.02,30266.85,18.11,0.000598 +11106.48,179.01,30028.47,6.72,0.000224 +11106.98,179.00,29680.09,3.60,0.000121 +11107.48,178.99,29252.87,2.66,0.000091 +11107.98,178.98,28968.99,2.14,0.000074 +11108.48,178.97,28606.73,1.86,0.000065 +11108.98,178.97,28298.05,1.75,0.000062 +11109.48,178.96,27894.51,1.59,0.000057 +11109.99,178.95,27513.24,1.50,0.000055 +11110.49,178.94,27192.70,1.41,0.000052 +11110.99,178.93,26814.59,1.44,0.000054 +11111.49,178.93,26416.19,1.27,0.000048 +11111.99,178.92,26059.44,1.25,0.000048 +11112.49,178.91,25677.19,1.18,0.000046 +11112.99,178.90,25304.06,1.06,0.000042 +11113.49,178.89,24924.72,1.02,0.000041 +11113.99,178.88,24519.39,0.98,0.000040 +11114.49,178.88,24145.24,0.89,0.000037 +11114.99,178.87,23793.34,0.87,0.000037 +11115.50,178.86,23402.14,0.86,0.000037 +11116.00,178.85,23018.34,0.82,0.000035 +11116.50,178.84,22650.08,0.75,0.000033 +11117.00,178.84,22289.77,0.75,0.000034 diff --git a/pxii_bec/macros/luts/20261011_ge_edge_medium.csv b/pxii_bec/macros/luts/20261011_ge_edge_medium.csv new file mode 100644 index 0000000..3c2f222 --- /dev/null +++ b/pxii_bec/macros/luts/20261011_ge_edge_medium.csv @@ -0,0 +1,42 @@ +Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission +11063.00,179.72,41623.66,5536.06,0.133003 +11064.99,179.69,41032.06,5438.49,0.132542 +11066.97,179.65,40347.29,5330.93,0.132126 +11068.96,179.62,39509.59,5209.13,0.131845 +11070.95,179.59,38586.20,5066.84,0.131312 +11072.94,179.56,37583.59,4918.55,0.130870 +11074.93,179.52,36431.57,4748.50,0.130340 +11076.92,179.49,35194.73,4559.41,0.129548 +11078.91,179.46,34009.67,4379.38,0.128769 +11080.90,179.42,32659.75,4160.74,0.127396 +11082.89,179.39,31263.11,3941.04,0.126061 +11084.88,179.36,29835.56,3709.27,0.124324 +11086.88,179.33,28378.22,3472.39,0.122361 +11088.87,179.29,26821.81,3213.89,0.119824 +11090.87,179.26,25347.66,2946.04,0.116225 +11092.86,179.23,23851.62,2660.02,0.111524 +11094.86,179.20,22343.16,2344.90,0.104949 +11096.86,179.16,20904.96,2001.88,0.095761 +11098.86,179.13,19466.62,1602.34,0.082312 +11100.85,179.10,18046.81,1109.74,0.061492 +11102.85,179.07,16677.32,503.70,0.030202 +11104.85,179.03,15405.53,64.00,0.004154 +11106.85,179.00,14160.19,4.63,0.000327 +11108.86,178.97,12967.10,3.32,0.000256 +11110.86,178.94,11840.61,2.65,0.000224 +11112.86,178.90,10772.04,2.25,0.000209 +11114.87,178.87,9778.05,1.91,0.000195 +11116.87,178.84,8896.02,1.72,0.000193 +11118.88,178.81,8040.33,1.58,0.000196 +11120.88,178.77,7246.21,1.48,0.000205 +11122.89,178.74,6527.67,1.31,0.000200 +11124.90,178.71,5895.60,1.21,0.000205 +11126.91,178.68,5300.24,1.12,0.000211 +11128.92,178.64,4771.84,1.00,0.000209 +11130.93,178.61,4293.77,0.96,0.000225 +11132.94,178.58,3877.26,0.88,0.000227 +11134.95,178.54,3486.78,1.04,0.000298 +11136.96,178.51,3154.25,0.93,0.000296 +11138.97,178.48,2852.14,0.87,0.000306 +11140.99,178.45,2595.68,0.83,0.000321 +11143.00,178.41,2371.33,0.67,0.000284 diff --git a/pxii_bec/macros/luts/20261014_ge_edge_medium.csv b/pxii_bec/macros/luts/20261014_ge_edge_medium.csv new file mode 100644 index 0000000..f1682c0 --- /dev/null +++ b/pxii_bec/macros/luts/20261014_ge_edge_medium.csv @@ -0,0 +1,42 @@ +Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission +11063.00,179.72,41667.03,5562.96,0.133510 +11064.99,179.69,41240.92,5482.80,0.132946 +11066.97,179.65,40665.57,5398.81,0.132761 +11068.96,179.62,40004.77,5296.21,0.132390 +11070.95,179.59,39198.19,5173.20,0.131975 +11072.94,179.56,38308.99,5046.00,0.131718 +11074.93,179.52,37308.79,4891.96,0.131121 +11076.92,179.49,36198.94,4717.20,0.130313 +11078.91,179.46,35098.92,4545.17,0.129496 +11080.90,179.42,33826.54,4338.63,0.128261 +11082.89,179.39,32524.71,4129.39,0.126962 +11084.88,179.36,31194.30,3903.90,0.125148 +11086.88,179.33,29761.99,3672.08,0.123381 +11088.87,179.29,28270.14,3419.86,0.120971 +11090.87,179.26,26795.87,3144.07,0.117334 +11092.86,179.23,25330.33,2849.29,0.112485 +11094.86,179.20,23815.25,2525.76,0.106057 +11096.86,179.16,22366.92,2167.55,0.096909 +11098.86,179.13,20882.63,1743.30,0.083481 +11100.85,179.10,19439.42,1212.69,0.062383 +11102.85,179.07,18039.23,555.41,0.030789 +11104.85,179.03,16717.41,70.81,0.004235 +11106.85,179.00,15439.94,3.98,0.000258 +11108.86,178.97,14174.59,2.53,0.000178 +11110.86,178.94,12986.81,2.03,0.000156 +11112.86,178.90,11820.02,1.62,0.000137 +11114.87,178.87,10770.63,1.37,0.000127 +11116.87,178.84,9786.64,1.23,0.000125 +11118.88,178.81,8871.50,1.20,0.000136 +11120.88,178.77,8014.78,1.10,0.000138 +11122.89,178.74,7217.88,0.99,0.000137 +11124.90,178.71,6508.82,0.77,0.000119 +11126.91,178.68,5862.46,0.69,0.000118 +11128.92,178.64,5274.38,0.64,0.000121 +11130.93,178.61,4750.03,0.55,0.000117 +11132.94,178.58,4265.10,0.37,0.000087 +11134.95,178.54,3846.43,0.35,0.000091 +11136.96,178.51,3456.73,0.28,0.000080 +11138.97,178.48,3116.88,0.37,0.000118 +11140.99,178.45,2832.64,0.18,0.000063 +11143.00,178.41,2559.37,0.18,0.000071 diff --git a/pxii_bec/macros/luts/20261017_ge_edge_medium.csv b/pxii_bec/macros/luts/20261017_ge_edge_medium.csv new file mode 100644 index 0000000..c84429e --- /dev/null +++ b/pxii_bec/macros/luts/20261017_ge_edge_medium.csv @@ -0,0 +1,42 @@ +Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission +11063.00,179.72,42766.45,5706.97,0.133445 +11064.99,179.69,42362.26,5654.93,0.133490 +11066.97,179.65,41803.16,5542.14,0.132577 +11068.96,179.62,41174.13,5428.07,0.131832 +11070.95,179.59,40377.74,5311.25,0.131539 +11072.94,179.56,39491.34,5188.41,0.131381 +11074.93,179.52,38488.72,5029.04,0.130663 +11076.92,179.49,37359.12,4863.41,0.130180 +11078.91,179.46,36273.09,4688.13,0.129245 +11080.90,179.42,35001.62,4488.06,0.128224 +11082.89,179.39,33697.03,4280.96,0.127043 +11084.88,179.36,32311.73,4058.17,0.125594 +11086.88,179.33,30905.01,3822.69,0.123691 +11088.87,179.29,29361.59,3553.22,0.121016 +11090.87,179.26,27887.20,3273.82,0.117395 +11092.86,179.23,26398.36,2972.25,0.112592 +11094.86,179.20,24844.98,2630.87,0.105891 +11096.86,179.16,23367.16,2246.50,0.096139 +11098.86,179.13,21824.37,1790.48,0.082041 +11100.85,179.10,20348.11,1220.85,0.059998 +11102.85,179.07,18918.98,519.55,0.027462 +11104.85,179.03,17522.10,54.03,0.003083 +11106.85,179.00,16196.63,3.72,0.000230 +11108.86,178.97,14868.96,2.51,0.000169 +11110.86,178.94,13647.45,1.93,0.000142 +11112.86,178.90,12456.36,1.56,0.000125 +11114.87,178.87,11361.93,1.55,0.000137 +11116.87,178.84,10313.20,1.33,0.000129 +11118.88,178.81,9359.12,1.24,0.000133 +11120.88,178.77,8462.53,1.27,0.000150 +11122.89,178.74,7636.72,1.05,0.000138 +11124.90,178.71,6880.61,0.96,0.000140 +11126.91,178.68,6203.29,0.83,0.000134 +11128.92,178.64,5572.87,0.78,0.000141 +11130.93,178.61,5016.50,0.64,0.000127 +11132.94,178.58,4503.12,0.62,0.000138 +11134.95,178.54,4049.98,0.54,0.000133 +11136.96,178.51,3653.15,0.48,0.000130 +11138.97,178.48,3302.12,0.44,0.000133 +11140.99,178.45,2969.27,0.38,0.000128 +11143.00,178.41,2685.31,0.35,0.000130 diff --git a/pxii_bec/macros/luts/bs_checks_20260914.csv b/pxii_bec/macros/luts/bs_checks_20260914.csv new file mode 100644 index 0000000..6c70646 --- /dev/null +++ b/pxii_bec/macros/luts/bs_checks_20260914.csv @@ -0,0 +1,14 @@ +Energy,I2_in,I2_out +30000,-2.406e-08, -1.616e-09 +28000,-3.529e-08, 1.249e-07 +26000,-2.202e-08, 5.239e-07 +24000,-3.019e-08, 1.122e-06 +22000,-2.61e-08, -3.223e-08 +20000,-2.508e-08, 9.529e-06 +18000,-3.019e-08, 4.014e-05 +16000,-3.631e-08, 8.072e-05 +14000,-1.998e-08, 0.0001758 +12000,-1.692e-08, 0.0003101 +10000,-1.488e-08, 0.0001962 +8000,-2.202e-08, 4.622e-05 +6000,-2.917e-08, 4.441e-05 diff --git a/pxii_bec/macros/luts/daily_beamline_health.csv b/pxii_bec/macros/luts/daily_beamline_health.csv new file mode 100644 index 0000000..f584aa1 --- /dev/null +++ b/pxii_bec/macros/luts/daily_beamline_health.csv @@ -0,0 +1,2 @@ +timestamp,energy_eV,flux_ph_s,beam_start_x_px,beam_start_y_px,vfm_ydr_start_mm,hfm_xd_start_mm,vfm_ydr_final_mm,hfm_xd_final_mm,beam_final_x_um,beam_final_y_um,vfm_y_mm,vfm_ydr_mm,vfm_pitch_mrad,hfm_x_mm,hfm_xd_mm,hfm_pitch_mrad +2026-09-20T20:56:20,12400.009895999128,8551180983998.611,992.9837196699019,966.3893864711606,-0.8453499999999963,1.9120150000000038,,1.9120100000000022,0.08792363645093884,0.23523677769901796,-1.5538537499999947,-0.8453549999999908,2.989410000000006,1.4117925000000042,1.9120100000000022,3.0009000000000015 diff --git a/pxii_bec/macros/luts/dcm_calibration_20260902.csv b/pxii_bec/macros/luts/dcm_calibration_20260902.csv new file mode 100644 index 0000000..63785e3 --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_20260902.csv @@ -0,0 +1,65 @@ +energy,harmonic,gap,pitch,samcam_x,samcam_y,zoom=800.0 +6000,H3,5.9135,-5.5184,1011,987.4 +6300,H3,6.1926,-5.5135,1006,988.6 +6600,H3,6.4796,-5.5098,1014,991.3 +6900,H3,6.7745,-5.5083,1006,988.3 +7200,H3,7.0913,-5.506,1002,989.1 +7500,H5,4.6331,-5.5042,1004,982.8 +7800,H5,4.783,-5.502,1009,982.2 +8100,H5,4.9292,-5.5005,1011,981.7 +8400,H5,5.0802,-5.498,1019,978 +8700,H5,5.2312,-5.4978,1011,979.4 +9000,H5,5.3823,-5.4967,1011,979.2 +9300,H5,5.5381,-5.4952,1013,977.1 +9600,H5,5.697,-5.4944,1015,973.8 +9900,H5,5.8558,-5.4934,1015,972.4 +10200,H7,4.529,-5.4935,1010,968.3 +10500,H7,4.6331,-5.4921,1010,970 +10800,H7,4.7365,-5.4911,1010,969.1 +11100,H7,4.8437,-5.4913,1006,969.5 +11400,H7,4.9509,-5.4889,1019,968.7 +11700,H7,5.0581,-5.4889,1012,967.4 +12000,H7,5.1654,-5.489,1015,965.4 +12300,H7,5.2726,-5.489,1011,968.2 +12600,H7,5.3847,-5.488,1008,965.8 +12900,H7,5.495,-5.4882,1005,967.8 +13200,H9,4.5498,-5.4873,1013,964.4 +13500,H9,4.6331,-5.4873,1010,965.8 +13800,H9,4.7121,-5.4864,1014,963.7 +14100,H9,4.7949,-5.4864,1008,963.5 +14400,H9,4.8826,-5.4864,1008,964.7 +14700,H9,4.9605,-5.4853,1013,963.3 +15000,H9,5.0433,-5.4852,1011,963.9 +15300,H9,5.1261,-5.4844,1013,964.9 +15600,H9,5.2089,-5.4844,1012,964.2 +15900,H9,5.2949,-5.4836,1012,965.6 +16200,H11,4.565,-5.4838,1006,962.4 +16500,H11,4.6331,-5.483,1012,964 +16800,H11,4.6955,-5.483,1009,963 +17100,H11,4.7631,-5.4821,1014,963.6 +17400,H11,4.8308,-5.4819,1010,961.8 +17700,H11,4.8984,-5.4822,1007,962 +18000,H11,4.9661,-5.4824,1003,960.8 +18300,H11,5.0337,-5.4811,1010,961.9 +18600,H11,5.1014,-5.4811,1010,962 +18900,H13,4.5186,-5.481,1006,960.6 +19200,H13,4.5804,-5.4804,1007,960.3 +19500,H13,4.6282,-5.4803,1012,960.7 +19800,H13,4.6857,-5.48,1013,959.8 +20100,H13,4.7407,-5.4803,1013,960 +20400,H13,4.7993,-5.4802,1012,958.4 +20700,H13,4.856,-5.4801,1013,958.4 +21000,H13,4.9129,-5.48,1012,956.8 +21300,H13,4.9746,-5.4798,1013,953.9 +21600,H13,5.0313,-5.4795,1015,949.9 +21900,H15,4.5338,-5.4796,1010,943.4 +22200,H15,4.5812,-5.4795,1009,940 +22500,H15,4.6331,-5.4773,1026,933.5 +22800,H15,4.6764,-5.4796,1010,943 +23100,H15,4.7355,-5.4795,1000,934.7 +23400,H15,4.6169,-5.5042,990.5,936.9 +23700,H15,4.8339,-5.4789,1001,933.7 +24000,H15,4.7202,-5.4796,996.7,936.3 +24300,H15,4.7823,-5.4789,996.7,936.3 +24600,H15,4.809,-5.479,996.7,936.3 +24900,H17,4.5417,-5.4789,999,944.1 diff --git a/pxii_bec/macros/luts/dcm_calibration_20260903.csv b/pxii_bec/macros/luts/dcm_calibration_20260903.csv new file mode 100644 index 0000000..0c4e913 --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_20260903.csv @@ -0,0 +1,2 @@ +energy,harmonic,gap,pitch,samcam_x,samcam_y,zoom=800.0 +25000,H17,4.5812,-5.4766,956.3,919.7 diff --git a/pxii_bec/macros/luts/dcm_calibration_20260923.csv b/pxii_bec/macros/luts/dcm_calibration_20260923.csv new file mode 100644 index 0000000..d78ba22 --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_20260923.csv @@ -0,0 +1,14 @@ +energy,scan,reason +6000,-5.561 +8000,-5.5432 +10000,-5.5349 +12000,-5.5297 +14000,-5.5268 +16000,-5.5244 +18000,-5.5218 +20000,-5.5203 +22000,-5.5194 +24000,-5.519 +26000,-5.5183 +28000,-5.5179 +30000,-5.518 diff --git a/pxii_bec/macros/luts/dcm_calibration_20261004.csv b/pxii_bec/macros/luts/dcm_calibration_20261004.csv new file mode 100644 index 0000000..4d6df5c --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_20261004.csv @@ -0,0 +1,15 @@ +energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0 +18500,-5.5278,0.079312,0.031407,0.57597,0.41821,21.95,0.86,0.4968,0.9468 +19000,-5.5277,0.10892,0.034869,0.672,-0.043649,22.96,0.79,1.274,0.7789 +19500,-5.5273,0.1123,0.037979,0.65287,0.41444,29.04,0.98,1.399,0.7602 +20000,-5.527,0.10889,0.042196,0.76301,0.55486,280.03,-0.09,1.669,0.9976 +20500,-5.5268,0.11885,0.048114,0.94538,0.64762,25.79,1.31,1.943,0.8993 +21000,-5.5264,0.11568,0.055515,1.157,0.84596,22.99,2.12,2.15,1.261 +21500,-5.5257,0.10583,0.061478,1.4832,1.0726,22.62,4.43,1.107,2.616 +22000,-5.5253,0.14069,0.053697,1.1677,0.83326,25.98,7.66,1.164,7.532 +22500,-5.5251,0.14969,0.059799,1.1592,-0.24509,26.08,6.51,1.278,8.663 +23000,-5.5247,0.14373,0.075002,1.5391,0.66679,26.93,7.41,1.376,5.2 +23500,-5.5243,0.14984,0.091189,2.0988,1.5083,27.65,6.24,0.9794,6.096 +24000,-5.5242,0.14755,0.10074,2.6501,1.955,29.90,6.02,0.9268,5.937 +24500,-5.5239,0.15082,0.11364,3.4195,2.5418,32.97,4.64,1.019,4.126 +25000,-5.5237,0.18897,0.10096,2.2261,1.6208,39.12,3.63,2.495,3.873 diff --git a/pxii_bec/macros/luts/dcm_calibration_20261004.csv_2 b/pxii_bec/macros/luts/dcm_calibration_20261004.csv_2 new file mode 100644 index 0000000..ab54bce --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_20261004.csv_2 @@ -0,0 +1,15 @@ +energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0 +6000,-5.5651,0.031085,0.036155,0.0052168,0.0041921,10.75,-1.11,-8.771,-4.583 +7000,-5.5546,0.026899,0.026529,-0.0073424,0.053473,6.16,-1.84,-0.7224,-2.887 +8000,-5.5484,0.066689,0.032268,0.005212,0.0042436,7.95,-2.62,0.9412,-3.068 +9000,-5.5441,0.041593,0.029141,-0.010786,0.042077,12.07,-0.95,-0.5363,-2.653 +10000,-5.5411,0.042201,0.013278,0.025073,0.053635,13.84,-0.60,1.682,-1.665 +11000,-5.5382,0.065656,0.022891,0.027213,0.041838,21.11,-0.06,1.831,-3.373 +12000,-5.5358,0.045707,0.02277,0.021949,0.053366,12.55,0.30,-0.132,-0.07301 +13000,-5.5344,0.046219,0.014825,0.079975,0.088181,17.28,0.47,0.2965,0.02576 +14000,-5.5325,0.071565,0.024777,0.096642,0.083641,20.87,0.44,-0.04888,0.1838 +15000,-5.5313,0.063579,0.021258,0.15225,0.12223,18.18,0.67,0.06056,0.4581 +16000,-5.5304,0.11033,0.023619,0.2533,0.17271,22.24,0.90,1.668,0.6958 +17000,-5.529,0.094652,0.026446,0.32328,0.23969,23.89,0.86,0.6903,0.5908 +18000,-5.5278,0.088299,0.029077,0.57684,0.074821,21.01,0.89,0.9228,0.9236 +energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0 diff --git a/pxii_bec/macros/luts/dcm_calibration_20261004_first_half.csv b/pxii_bec/macros/luts/dcm_calibration_20261004_first_half.csv new file mode 100644 index 0000000..566bb36 --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_20261004_first_half.csv @@ -0,0 +1,14 @@ +energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0 +6000,-5.5651,0.031085,0.036155,0.0052168,0.0041921,10.75,-1.11,-8.771,-4.583 +7000,-5.5546,0.026899,0.026529,-0.0073424,0.053473,6.16,-1.84,-0.7224,-2.887 +8000,-5.5484,0.066689,0.032268,0.005212,0.0042436,7.95,-2.62,0.9412,-3.068 +9000,-5.5441,0.041593,0.029141,-0.010786,0.042077,12.07,-0.95,-0.5363,-2.653 +10000,-5.5411,0.042201,0.013278,0.025073,0.053635,13.84,-0.60,1.682,-1.665 +11000,-5.5382,0.065656,0.022891,0.027213,0.041838,21.11,-0.06,1.831,-3.373 +12000,-5.5358,0.045707,0.02277,0.021949,0.053366,12.55,0.30,-0.132,-0.07301 +13000,-5.5344,0.046219,0.014825,0.079975,0.088181,17.28,0.47,0.2965,0.02576 +14000,-5.5325,0.071565,0.024777,0.096642,0.083641,20.87,0.44,-0.04888,0.1838 +15000,-5.5313,0.063579,0.021258,0.15225,0.12223,18.18,0.67,0.06056,0.4581 +16000,-5.5304,0.11033,0.023619,0.2533,0.17271,22.24,0.90,1.668,0.6958 +17000,-5.529,0.094652,0.026446,0.32328,0.23969,23.89,0.86,0.6903,0.5908 +18000,-5.5278,0.088299,0.029077,0.57684,0.074821,21.01,0.89,0.9228,0.9236 diff --git a/pxii_bec/macros/luts/dcm_calibration_4thOct.csv b/pxii_bec/macros/luts/dcm_calibration_4thOct.csv new file mode 100644 index 0000000..18b28e9 --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_4thOct.csv @@ -0,0 +1,28 @@ +energy,pitch,lu_Xnorm,lu_Ynorm,ss_Xnorm,ss_Ynorm,bcu_x,bcu_y,samcam_x,samcam_y,zoom=1000.0 +6000,-5.5651,0.031085,0.036155,0.0052168,0.0041921,10.75,-1.11,-8.771,-4.583 +7000,-5.5546,0.026899,0.026529,-0.0073424,0.053473,6.16,-1.84,-0.7224,-2.887 +8000,-5.5484,0.066689,0.032268,0.005212,0.0042436,7.95,-2.62,0.9412,-3.068 +9000,-5.5441,0.041593,0.029141,-0.010786,0.042077,12.07,-0.95,-0.5363,-2.653 +10000,-5.5411,0.042201,0.013278,0.025073,0.053635,13.84,-0.60,1.682,-1.665 +11000,-5.5382,0.065656,0.022891,0.027213,0.041838,21.11,-0.06,1.831,-3.373 +12000,-5.5358,0.045707,0.02277,0.021949,0.053366,12.55,0.30,-0.132,-0.07301 +13000,-5.5344,0.046219,0.014825,0.079975,0.088181,17.28,0.47,0.2965,0.02576 +14000,-5.5325,0.071565,0.024777,0.096642,0.083641,20.87,0.44,-0.04888,0.1838 +15000,-5.5313,0.063579,0.021258,0.15225,0.12223,18.18,0.67,0.06056,0.4581 +16000,-5.5304,0.11033,0.023619,0.2533,0.17271,22.24,0.90,1.668,0.6958 +17000,-5.529,0.094652,0.026446,0.32328,0.23969,23.89,0.86,0.6903,0.5908 +18000,-5.5278,0.088299,0.029077,0.57684,0.074821,21.01,0.89,0.9228,0.9236 +18500,-5.5278,0.079312,0.031407,0.57597,0.41821,21.95,0.86,0.4968,0.9468 +19000,-5.5277,0.10892,0.034869,0.672,-0.043649,22.96,0.79,1.274,0.7789 +19500,-5.5273,0.1123,0.037979,0.65287,0.41444,29.04,0.98,1.399,0.7602 +20000,-5.527,0.10889,0.042196,0.76301,0.55486,280.03,-0.09,1.669,0.9976 +20500,-5.5268,0.11885,0.048114,0.94538,0.64762,25.79,1.31,1.943,0.8993 +21000,-5.5264,0.11568,0.055515,1.157,0.84596,22.99,2.12,2.15,1.261 +21500,-5.5257,0.10583,0.061478,1.4832,1.0726,22.62,4.43,1.107,2.616 +22000,-5.5253,0.14069,0.053697,1.1677,0.83326,25.98,7.66,1.164,7.532 +22500,-5.5251,0.14969,0.059799,1.1592,-0.24509,26.08,6.51,1.278,8.663 +23000,-5.5247,0.14373,0.075002,1.5391,0.66679,26.93,7.41,1.376,5.2 +23500,-5.5243,0.14984,0.091189,2.0988,1.5083,27.65,6.24,0.9794,6.096 +24000,-5.5242,0.14755,0.10074,2.6501,1.955,29.90,6.02,0.9268,5.937 +24500,-5.5239,0.15082,0.11364,3.4195,2.5418,32.97,4.64,1.019,4.126 +25000,-5.5237,0.18897,0.10096,2.2261,1.6208,39.12,3.63,2.495,3.873 diff --git a/pxii_bec/macros/luts/dcm_calibration_fail_20261004.csv b/pxii_bec/macros/luts/dcm_calibration_fail_20261004.csv new file mode 100644 index 0000000..c04fc12 --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_fail_20261004.csv @@ -0,0 +1 @@ +energy,scan,reason diff --git a/pxii_bec/macros/luts/dcm_calibration_failures_20260902.csv b/pxii_bec/macros/luts/dcm_calibration_failures_20260902.csv new file mode 100644 index 0000000..5396b71 --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_failures_20260902.csv @@ -0,0 +1,7 @@ +energy,scan,reason +23400,mono_pitch,Peak FWHM spans only 0.00 scan steps (minimum 1.5); centre uncertainty is large (0.000267) +24900,gap,An alarm has occurred. Severity: MAJOR. +ValueError. + An error occurred during 'set' on device 'id_gap'. + +ValueError: 4.4999 outside of user-specified limits diff --git a/pxii_bec/macros/luts/dcm_calibration_failures_20260903.csv b/pxii_bec/macros/luts/dcm_calibration_failures_20260903.csv new file mode 100644 index 0000000..f2ad276 --- /dev/null +++ b/pxii_bec/macros/luts/dcm_calibration_failures_20260903.csv @@ -0,0 +1,3 @@ +energy,scan,reason +25400,gap,User abort. +25400,mono_pitch_exception,User abort. diff --git a/pxii_bec/macros/luts/gap_scint_20261005-1702.csv b/pxii_bec/macros/luts/gap_scint_20261005-1702.csv new file mode 100644 index 0000000..0399820 --- /dev/null +++ b/pxii_bec/macros/luts/gap_scint_20261005-1702.csv @@ -0,0 +1 @@ +energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y diff --git a/pxii_bec/macros/luts/gap_scint_20261005-1703.csv b/pxii_bec/macros/luts/gap_scint_20261005-1703.csv new file mode 100644 index 0000000..0399820 --- /dev/null +++ b/pxii_bec/macros/luts/gap_scint_20261005-1703.csv @@ -0,0 +1 @@ +energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y diff --git a/pxii_bec/macros/luts/gap_scint_20261005-1707.csv b/pxii_bec/macros/luts/gap_scint_20261005-1707.csv new file mode 100644 index 0000000..0399820 --- /dev/null +++ b/pxii_bec/macros/luts/gap_scint_20261005-1707.csv @@ -0,0 +1 @@ +energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y diff --git a/pxii_bec/macros/luts/gap_scint_20261005-1709.csv b/pxii_bec/macros/luts/gap_scint_20261005-1709.csv new file mode 100644 index 0000000..69170d4 --- /dev/null +++ b/pxii_bec/macros/luts/gap_scint_20261005-1709.csv @@ -0,0 +1 @@ +energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y diff --git a/pxii_bec/macros/luts/gap_scint_20261005-1710.csv b/pxii_bec/macros/luts/gap_scint_20261005-1710.csv new file mode 100644 index 0000000..69170d4 --- /dev/null +++ b/pxii_bec/macros/luts/gap_scint_20261005-1710.csv @@ -0,0 +1 @@ +energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y diff --git a/pxii_bec/macros/luts/gap_scint_20261005-1713.csv b/pxii_bec/macros/luts/gap_scint_20261005-1713.csv new file mode 100644 index 0000000..69170d4 --- /dev/null +++ b/pxii_bec/macros/luts/gap_scint_20261005-1713.csv @@ -0,0 +1 @@ +energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y diff --git a/pxii_bec/macros/luts/gap_scint_20261005-1716.csv b/pxii_bec/macros/luts/gap_scint_20261005-1716.csv new file mode 100644 index 0000000..a8bab1f --- /dev/null +++ b/pxii_bec/macros/luts/gap_scint_20261005-1716.csv @@ -0,0 +1,21 @@ +energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,samcam_x,samcam_y +22000,4.5350,44.8,0.232,0.093,5.3,7.1 +22000,4.5360,46.0,0.230,0.092,5.3,7.2 +22000,4.5371,48.7,0.223,0.086,5.3,7.4 +22000,4.5381,52.3,0.216,0.081,5.1,7.6 +22000,4.5392,56.5,0.205,0.076,5.3,7.8 +22000,4.5403,61.0,0.199,0.074,5.1,7.9 +22000,4.5413,65.0,0.193,0.070,5.3,8.0 +22000,4.5424,69.7,0.188,0.066,5.4,8.2 +22000,4.5434,74.5,0.181,0.064,5.4,8.3 +22000,4.5445,79.0,0.179,0.063,5.4,8.4 +22000,4.5455,83.5,0.177,0.066,5.6,8.5 +22000,4.5466,88.1,0.175,0.058,5.7,8.7 +22000,4.5476,92.8,0.173,0.059,5.7,8.8 +22000,4.5487,96.8,0.172,0.058,5.9,8.9 +22000,4.5497,101.2,0.171,0.056,6.2,9.0 +22000,4.5508,105.2,0.175,0.058,6.3,9.1 +22000,4.5518,109.1,0.173,0.055,6.5,9.2 +22000,4.5529,112.5,0.174,0.057,6.8,9.3 +22000,4.5540,115.8,0.177,0.057,7.0,9.4 +22000,4.5550,120.1,0.181,0.056,7.3,9.5 diff --git a/pxii_bec/macros/luts/gap_xi_20261005-1702.csv b/pxii_bec/macros/luts/gap_xi_20261005-1702.csv new file mode 100644 index 0000000..2181078 --- /dev/null +++ b/pxii_bec/macros/luts/gap_xi_20261005-1702.csv @@ -0,0 +1 @@ +energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y diff --git a/pxii_bec/macros/luts/gap_xi_20261005-1703.csv b/pxii_bec/macros/luts/gap_xi_20261005-1703.csv new file mode 100644 index 0000000..2181078 --- /dev/null +++ b/pxii_bec/macros/luts/gap_xi_20261005-1703.csv @@ -0,0 +1 @@ +energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y diff --git a/pxii_bec/macros/luts/gap_xi_20261005-1707.csv b/pxii_bec/macros/luts/gap_xi_20261005-1707.csv new file mode 100644 index 0000000..5fedbf4 --- /dev/null +++ b/pxii_bec/macros/luts/gap_xi_20261005-1707.csv @@ -0,0 +1,21 @@ +energy,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y +22000,44.0,0.231,0.097,151.6,207.8 +22000,45.2,0.229,0.090,151.7,207.7 +22000,47.8,0.219,0.085,151.8,207.7 +22000,51.2,0.211,0.084,151.8,207.7 +22000,55.3,0.200,0.079,152.0,207.9 +22000,59.2,0.199,0.075,152.1,208.2 +22000,63.9,0.191,0.074,152.3,208.3 +22000,68.3,0.188,0.069,152.5,208.3 +22000,72.8,0.179,0.067,152.6,208.5 +22000,77.3,0.180,0.065,152.8,208.7 +22000,82.3,0.175,0.063,152.9,208.9 +22000,86.3,0.174,0.063,152.9,209.0 +22000,90.6,0.175,0.062,153.1,209.1 +22000,94.9,0.174,0.060,153.2,209.3 +22000,99.3,0.173,0.059,153.2,209.5 +22000,102.7,0.177,0.058,153.5,209.6 +22000,106.3,0.179,0.060,153.7,209.7 +22000,110.0,0.179,0.059,153.9,210.0 +22000,113.4,0.182,0.055,154.5,210.1 +22000,117.0,0.185,0.056,155.2,210.0 diff --git a/pxii_bec/macros/luts/gap_xi_20261005-1709.csv b/pxii_bec/macros/luts/gap_xi_20261005-1709.csv new file mode 100644 index 0000000..9ecbccc --- /dev/null +++ b/pxii_bec/macros/luts/gap_xi_20261005-1709.csv @@ -0,0 +1 @@ +energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y diff --git a/pxii_bec/macros/luts/gap_xi_20261005-1710.csv b/pxii_bec/macros/luts/gap_xi_20261005-1710.csv new file mode 100644 index 0000000..9ecbccc --- /dev/null +++ b/pxii_bec/macros/luts/gap_xi_20261005-1710.csv @@ -0,0 +1 @@ +energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y diff --git a/pxii_bec/macros/luts/gap_xi_20261005-1713.csv b/pxii_bec/macros/luts/gap_xi_20261005-1713.csv new file mode 100644 index 0000000..00bdff2 --- /dev/null +++ b/pxii_bec/macros/luts/gap_xi_20261005-1713.csv @@ -0,0 +1,21 @@ +energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y +22000,4.5350,45.1,0.229,0.099,151.0,208.2 +22000,4.5360,46.7,0.229,0.096,151.3,207.8 +22000,4.5371,49.5,0.218,0.093,151.5,207.8 +22000,4.5381,53.0,0.206,0.081,151.5,207.7 +22000,4.5392,57.0,0.203,0.080,151.7,207.8 +22000,4.5403,61.7,0.194,0.073,151.7,208.1 +22000,4.5413,66.2,0.190,0.073,151.7,208.2 +22000,4.5424,71.0,0.183,0.069,151.9,208.4 +22000,4.5434,75.8,0.177,0.065,152.2,208.4 +22000,4.5445,80.2,0.175,0.061,152.3,208.7 +22000,4.5455,85.3,0.174,0.061,152.4,208.6 +22000,4.5466,90.0,0.172,0.057,152.4,208.8 +22000,4.5476,94.1,0.171,0.058,152.5,209.1 +22000,4.5487,98.4,0.170,0.057,152.6,209.3 +22000,4.5497,102.6,0.170,0.057,152.7,209.5 +22000,4.5508,106.7,0.173,0.058,152.8,209.6 +22000,4.5518,110.3,0.174,0.053,153.0,209.9 +22000,4.5529,114.3,0.175,0.054,153.2,209.9 +22000,4.5540,118.7,0.179,0.054,153.8,210.1 +22000,4.5550,122.2,0.181,0.054,154.5,210.2 diff --git a/pxii_bec/macros/luts/gap_xi_20261005-1716.csv b/pxii_bec/macros/luts/gap_xi_20261005-1716.csv new file mode 100644 index 0000000..9ecbccc --- /dev/null +++ b/pxii_bec/macros/luts/gap_xi_20261005-1716.csv @@ -0,0 +1 @@ +energy,gap,lu_bpmsum,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y diff --git a/pxii_bec/macros/luts/perp.csv b/pxii_bec/macros/luts/perp.csv new file mode 100644 index 0000000..3452773 --- /dev/null +++ b/pxii_bec/macros/luts/perp.csv @@ -0,0 +1,49 @@ +energy,dcm_pitch,dcm_perp,lu_bpmsum,lu_Xnorm,lu_Ynorm,bcu_bpmsum,bcu_x,bcu_y,samcam_x,samcam_y +8000,-5.55286,0.04620,10382.0,0.379,0.033,18703.1,52.99,-2.43,5.80,-4.14 +8000,-5.55214,0.07155,10235.3,0.224,0.031,18875.3,32.89,-1.90,3.28,-2.77 +8000,-5.55106,0.09660,10155.7,0.061,0.028,19050.1,12.94,-1.35,0.74,-1.51 +8000,-5.55060,0.12182,10114.6,-0.106,0.027,19252.7,-7.66,-1.17,-1.65,-0.76 +8000,-5.55019,0.14665,10160.7,-0.265,0.026,19396.7,-26.18,-1.09,-3.81,-0.36 +8000,-5.55156,0.09607,10148.6,0.061,0.031,19026.9,13.57,-2.09,1.09,-3.13 +10000,-5.54291,0.01022,2145.7,0.395,0.016,1868.8,57.74,-2.20,5.52,-2.71 +10000,-5.54193,0.03547,2119.8,0.223,0.012,1888.9,35.16,-1.53,3.19,-1.74 +10000,-5.54112,0.06052,2115.2,0.041,0.010,1901.9,13.97,-0.88,0.97,-0.60 +10000,-5.53993,0.08536,2125.5,-0.146,0.010,1909.1,-7.71,-0.39,-0.88,0.21 +10000,-5.53949,0.11065,2135.9,-0.326,0.009,1918.2,-28.53,-0.10,-3.06,0.73 +10000,-5.54126,0.06029,2112.4,0.038,0.013,1902.3,13.15,-1.30,1.00,-1.26 +12400,-5.53642,-0.01161,1782.3,0.388,0.022,657.9,277.26,-1.42,16.68,-1.23 +12400,-5.53584,0.01365,1738.8,0.226,0.022,564.8,278.98,-1.21,17.51,-0.86 +12400,-5.53465,0.03877,1731.9,0.050,0.021,471.9,279.66,-1.04,17.41,-0.62 +12400,-5.53410,0.06384,1734.4,-0.126,0.021,386.5,280.28,-0.83,18.10,-0.14 +12400,-5.53311,0.08874,1732.0,-0.296,0.020,308.4,281.61,-0.73,18.66,-0.46 +12400,-5.53485,0.03841,1747.4,0.050,0.023,472.2,279.84,-1.26,17.85,-0.81 +15000,-5.53253,-0.02426,695.1,0.421,0.022,866.3,62.69,-0.41,4.32,-0.26 +15000,-5.53230,0.00104,674.9,0.253,0.022,861.4,43.33,-0.29,2.93,0.14 +15000,-5.53088,0.02619,680.6,0.071,0.023,866.8,20.76,-0.07,0.83,0.76 +15000,-5.53015,0.05115,677.3,-0.114,0.023,865.9,-0.27,0.16,-1.30,1.36 +15000,-5.52958,0.07602,681.4,-0.292,0.023,870.8,-23.02,0.32,-3.59,1.77 +15000,-5.53126,0.02545,679.7,0.072,0.024,866.9,20.39,-0.25,0.46,0.23 +18000,-5.52928,-0.03216,243.5,0.435,0.029,640.6,69.31,-0.13,5.19,0.32 +18000,-5.52882,-0.00703,239.0,0.274,0.028,631.6,49.69,0.09,3.54,0.90 +18000,-5.52757,0.01802,238.9,0.097,0.030,629.4,29.03,0.24,3.00,1.11 +18000,-5.52697,0.04316,238.0,-0.088,0.027,626.1,6.21,0.37,-0.28,1.66 +18000,-5.52659,0.06831,238.2,-0.264,0.027,617.7,-14.69,0.48,-2.01,1.87 +18000,-5.52807,0.01776,238.7,0.095,0.029,633.1,27.99,0.08,2.48,0.71 +20000,-5.52754,-0.03533,149.7,0.435,0.037,527.0,66.01,-0.08,5.24,0.54 +20000,-5.52694,-0.01034,147.6,0.285,0.043,521.3,47.09,0.16,3.74,1.26 +20000,-5.52627,0.01477,145.6,0.120,0.042,518.5,26.86,0.26,2.06,1.62 +20000,-5.52534,0.03981,146.5,-0.055,0.043,519.0,4.67,0.36,-0.09,1.78 +20000,-5.52508,0.06494,145.3,-0.225,0.042,517.6,-16.06,0.51,-1.62,2.37 +20000,-5.52659,0.01419,147.6,0.120,0.043,522.5,25.43,0.11,1.45,1.26 +22000,-5.52673,-0.03786,94.7,0.439,0.053,313.7,67.87,7.18,5.76,6.28 +22000,-5.52583,-0.01278,94.1,0.300,0.052,317.2,48.70,7.29,3.82,6.87 +22000,-5.52511,0.01219,93.3,0.150,0.053,318.1,28.92,7.35,1.98,7.38 +22000,-5.52459,0.03735,91.3,-0.004,0.053,312.0,11.65,7.40,0.96,7.75 +22000,-5.52372,0.06234,92.6,-0.162,0.051,315.6,-8.83,7.44,-0.71,7.89 +22000,-5.52560,0.01166,91.8,0.148,0.051,317.4,28.94,7.29,2.31,7.03 +25000,-5.52520,-0.04066,48.7,0.451,0.079,29.4,77.93,3.13,7.55,3.69 +25000,-5.52441,-0.01570,47.4,0.338,0.080,28.9,61.02,3.24,6.35,3.91 +25000,-5.52372,0.00941,47.9,0.200,0.082,29.0,44.01,3.26,4.56,4.15 +25000,-5.52285,0.03461,47.3,0.061,0.079,28.8,25.60,3.33,1.59,4.69 +25000,-5.52227,0.05956,47.3,-0.066,0.086,28.3,9.14,3.37,-0.05,4.98 +25000,-5.52407,0.00896,47.0,0.204,0.089,28.7,44.89,3.06,4.34,4.10 diff --git a/pxii_bec/macros/luts/perp_1.csv b/pxii_bec/macros/luts/perp_1.csv new file mode 100644 index 0000000..fe939b1 --- /dev/null +++ b/pxii_bec/macros/luts/perp_1.csv @@ -0,0 +1,50 @@ +energy,dcm_pitch,dcm_perp,lu_bpmsum,lu_Xnorm,lu_Ynorm,bcu_bpmsum,bcu_x,bcu_y,samcam_x,samcam_y +8000,-5.54961,0.04605,10420.1,0.376,0.029,3631.0,49.15,0.67,11.52,5.97 +8000,-5.54898,0.07155,10266.3,0.220,0.027,3667.0,29.02,1.31,8.43,7.53 +8000,-5.54793,0.09656,10161.7,0.059,0.025,3697.5,11.59,1.91,6.77,8.73 +8000,-5.54753,0.12181,10166.7,-0.108,0.025,3752.0,-7.62,2.08,4.52,9.47 +8000,-5.54718,0.14661,10209.4,-0.268,0.027,3797.2,-25.53,1.91,2.31,9.32 +8000,-5.54866,0.09602,10151.4,0.060,0.030,3694.3,11.21,0.85,6.54,6.97 +10000,-5.53996,0.01018,2146.7,0.395,0.012,4173.7,66.21,1.79,12.24,7.50 +10000,-5.53888,0.03533,2129.8,0.223,0.012,4200.4,45.58,2.36,10.50,8.66 +10000,-5.53822,0.06040,2110.5,0.041,0.009,4217.4,23.42,2.99,8.02,9.71 +10000,-5.53729,0.08533,2123.7,-0.144,0.009,4260.4,1.73,3.14,5.71,9.93 +10000,-5.53651,0.11049,2146.2,-0.325,0.006,4305.9,-21.45,3.52,4.00,10.60 +10000,-5.53804,0.06020,2128.3,0.039,0.008,4249.9,22.88,2.71,7.66,9.10 +12400,-5.53337,-0.01144,1757.7,0.387,0.020,1127.9,58.33,2.14,10.95,9.30 +12400,-5.53288,0.01365,1743.4,0.225,0.020,1130.1,39.95,2.37,9.01,10.02 +12400,-5.53198,0.03880,1723.4,0.051,0.020,1129.9,21.41,2.61,7.42,10.79 +12400,-5.53123,0.06387,1726.8,-0.127,0.020,1140.3,0.12,2.72,4.85,11.23 +12400,-5.53050,0.08882,1727.8,-0.297,0.020,1142.7,-19.63,2.69,2.72,11.42 +12400,-5.53219,0.03821,1723.1,0.052,0.022,1130.2,20.94,2.23,7.10,9.85 +15000,-5.52989,-0.02420,705.4,0.420,0.020,836.9,69.62,2.37,11.75,9.80 +15000,-5.52923,0.00090,694.1,0.253,0.020,838.2,48.10,2.62,9.44,10.55 +15000,-5.52836,0.02601,681.9,0.074,0.020,831.4,28.62,2.82,8.14,10.89 +15000,-5.52743,0.05101,684.3,-0.113,0.020,837.3,6.72,3.04,6.66,11.74 +15000,-5.52688,0.07591,684.6,-0.288,0.020,837.2,-16.52,3.02,3.41,11.76 +15000,-5.52865,0.02558,681.3,0.073,0.021,833.9,27.52,2.50,7.92,10.32 +18000,-5.52676,-0.03221,243.0,0.439,0.026,634.8,75.86,2.82,12.73,10.09 +18000,-5.52612,-0.00702,238.4,0.278,0.025,626.2,55.97,2.96,11.24,10.60 +18000,-5.52531,0.01797,236.0,0.102,0.025,626.6,33.48,3.05,8.88,10.80 +18000,-5.52351,0.04318,243.1,-0.093,0.026,641.4,6.43,3.06,6.04,11.37 +18000,-5.52377,0.06826,237.3,-0.260,0.025,626.7,-11.72,3.15,4.89,11.57 +18000,-5.52575,0.01770,237.0,0.100,0.027,630.1,33.64,2.92,9.20,10.65 +20000,-5.52563,-0.03533,150.2,0.437,0.033,526.3,75.57,2.70,13.15,10.34 +20000,-5.52511,-0.01018,146.9,0.289,0.038,522.3,55.49,2.87,11.72,10.80 +20000,-5.52424,0.01472,145.2,0.127,0.038,520.9,35.38,2.91,9.80,11.07 +20000,-5.52293,0.03993,151.1,-0.055,0.039,526.7,11.34,3.04,7.27,11.70 +20000,-5.52270,0.06493,143.6,-0.216,0.040,519.3,-9.14,3.19,5.32,12.17 +20000,-5.52456,0.01452,145.2,0.125,0.039,522.2,34.39,2.85,9.25,10.98 +22000,-5.52438,-0.03785,95.3,0.442,0.050,307.4,74.28,8.27,13.62,17.13 +22000,-5.52351,-0.01287,94.0,0.309,0.052,306.3,56.94,8.33,12.47,17.58 +22000,-5.52293,0.01218,93.2,0.156,0.054,307.2,36.00,8.32,9.40,17.66 +22000,-5.52198,0.03724,91.8,-0.001,0.053,304.4,16.82,8.36,7.67,18.17 +22000,-5.52038,0.06232,95.9,-0.166,0.048,323.4,-11.03,8.43,3.74,18.77 +22000,-5.52334,0.01195,93.4,0.156,0.054,310.4,35.98,8.32,10.02,17.56 +25000,-5.52259,-0.04064,50.9,0.457,0.078,29.2,82.32,5.17,14.04,13.07 +25000,-5.52192,-0.01571,49.8,0.333,0.084,28.7,66.11,5.27,12.11,13.34 +25000,-5.52146,0.00935,49.5,0.200,0.084,28.4,48.09,5.35,9.55,13.67 +25000,-5.52038,0.03446,48.4,0.067,0.078,28.1,32.60,5.32,7.63,13.82 +25000,-5.52000,0.05949,47.6,-0.066,0.083,27.7,15.18,5.40,6.00,14.10 +25000,-5.52198,0.00916,48.5,0.204,0.085,28.1,48.98,5.29,9.77,13.60 + diff --git a/pxii_bec/macros/luts/perp_actual_calc.csv b/pxii_bec/macros/luts/perp_actual_calc.csv new file mode 100644 index 0000000..ebb7060 --- /dev/null +++ b/pxii_bec/macros/luts/perp_actual_calc.csv @@ -0,0 +1,9 @@ +energy,calc_perp,actual_perp +8000,0.0961,0.1716 +10000,0.0604,0.1549 +12400,0.0389,0.1239 +15000,0.0264,0.1273 +18000,0.0183,0.1242 +20000,0.0148,0.1322 +22000,0.0122,0.1089 +25000,0.0094,0.1293 diff --git a/pxii_bec/macros/luts/perp_xi_20261005-1539.csv b/pxii_bec/macros/luts/perp_xi_20261005-1539.csv new file mode 100644 index 0000000..8eafe5b --- /dev/null +++ b/pxii_bec/macros/luts/perp_xi_20261005-1539.csv @@ -0,0 +1,7 @@ +energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y +12400,-5.54257,-0.01078,1691.2,0.385,0.022,154.5,207.5 +12400,-5.54190,0.01438,1661.5,0.220,0.021,151.8,207.5 +12400,-5.54071,0.03945,1650.8,0.043,0.021,149.4,207.8 +12400,-5.54013,0.06453,1660.1,-0.135,0.019,146.7,207.9 +12400,-5.53943,0.08952,1668.0,-0.309,0.018,144.3,207.8 +12400,-5.54117,0.03912,1656.2,0.043,0.021,149.4,207.9 diff --git a/pxii_bec/macros/luts/perp_xi_20261005-1541.csv b/pxii_bec/macros/luts/perp_xi_20261005-1541.csv new file mode 100644 index 0000000..2362c28 --- /dev/null +++ b/pxii_bec/macros/luts/perp_xi_20261005-1541.csv @@ -0,0 +1,37 @@ +energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y +8000,-5.55530,0.04620,10382.2,0.377,0.034,155.1,206.7 +8000,-5.55463,0.07151,10210.1,0.224,0.032,152.4,207.1 +8000,-5.55347,0.09661,10150.2,0.060,0.030,149.9,207.1 +8000,-5.55318,0.12173,10188.8,-0.105,0.027,147.2,207.1 +8000,-5.55286,0.14660,10257.9,-0.265,0.026,144.9,207.2 +8000,-5.55422,0.09602,10208.3,0.062,0.032,149.9,206.8 +10000,-5.54581,0.01000,2154.1,0.399,0.014,154.9,206.8 +10000,-5.54492,0.03521,2131.2,0.227,0.012,152.5,207.2 +10000,-5.54387,0.06022,2124.8,0.043,0.011,149.8,206.9 +10000,-5.54294,0.08527,2117.4,-0.142,0.010,147.2,207.1 +10000,-5.54245,0.11042,2132.4,-0.321,0.009,144.6,207.2 +10000,-5.54396,0.06000,2123.1,0.043,0.015,149.8,206.8 +12400,-5.53932,-0.01168,1777.2,0.393,0.025,154.7,208.1 +12400,-5.53857,0.01372,1753.2,0.226,0.023,151.9,208.0 +12400,-5.53758,0.03879,1741.0,0.051,0.023,149.3,207.8 +12400,-5.53680,0.06381,1746.4,-0.127,0.022,146.6,207.9 +12400,-5.53578,0.08885,1735.1,-0.297,0.021,144.3,207.9 +12400,-5.53784,0.03831,1738.9,0.053,0.024,149.4,207.9 +15000,-5.53508,-0.02455,702.0,0.424,0.025,155.1,207.9 +15000,-5.53491,0.00059,688.9,0.258,0.025,152.5,207.9 +15000,-5.53346,0.02566,686.8,0.076,0.025,149.7,207.5 +15000,-5.53282,0.05075,673.3,-0.108,0.023,147.2,207.7 +15000,-5.53201,0.07570,676.5,-0.287,0.023,144.6,207.8 +15000,-5.53387,0.02524,687.1,0.078,0.026,150.0,207.9 +18000,-5.53155,-0.03228,247.5,0.441,0.031,155.1,207.5 +18000,-5.53117,-0.00715,244.3,0.278,0.033,152.4,207.9 +18000,-5.52992,0.01783,240.1,0.100,0.029,149.9,207.9 +18000,-5.52894,0.04301,240.7,-0.085,0.029,147.3,207.7 +18000,-5.52873,0.06809,238.2,-0.259,0.028,144.9,207.9 +18000,-5.53033,0.01710,241.8,0.101,0.032,149.9,207.7 +20000,-5.53007,-0.03591,151.9,0.442,0.041,155.5,208.0 +20000,-5.52940,-0.01040,150.2,0.288,0.042,152.8,207.8 +20000,-5.52841,0.01479,143.4,0.122,0.045,150.1,207.8 +20000,-5.52754,0.03992,148.1,-0.056,0.042,147.5,207.7 +20000,-5.52720,0.06484,147.1,-0.223,0.040,145.0,207.7 +20000,-5.52897,0.01418,149.5,0.122,0.041,150.2,208.0 diff --git a/pxii_bec/macros/luts/perp_xi_20261005-1607.csv b/pxii_bec/macros/luts/perp_xi_20261005-1607.csv new file mode 100644 index 0000000..751a9dc --- /dev/null +++ b/pxii_bec/macros/luts/perp_xi_20261005-1607.csv @@ -0,0 +1,7 @@ +energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y +22000,-5.52975,-0.03800,95.9,0.445,0.057,155.6,208.2 +22000,-5.52920,-0.01307,95.4,0.305,0.054,153.2,208.1 +22000,-5.52841,0.01204,94.1,0.155,0.059,150.5,207.8 +22000,-5.52737,0.03716,91.9,-0.005,0.057,147.8,208.0 +22000,-5.52685,0.06211,90.4,-0.163,0.055,145.3,208.3 +22000,-5.52868,0.01139,93.3,0.156,0.058,150.5,207.9 diff --git a/pxii_bec/macros/luts/perp_xi_20261005-1615.csv b/pxii_bec/macros/luts/perp_xi_20261005-1615.csv new file mode 100644 index 0000000..9855ae2 --- /dev/null +++ b/pxii_bec/macros/luts/perp_xi_20261005-1615.csv @@ -0,0 +1,7 @@ +energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y +25000,-5.52920,-0.09079,52.0,0.654,0.081,164.6,209.6 +25000,-5.52891,-0.06548,50.5,0.556,0.083,161.6,209.5 +25000,-5.52778,-0.04040,49.8,0.454,0.092,158.6,209.5 +25000,-5.52694,-0.01548,49.0,0.332,0.090,155.7,209.5 +25000,-5.52641,0.00966,47.2,0.207,0.088,152.7,209.4 +25000,-5.51861,-0.04039,29.1,0.349,0.120,149.6,208.4 diff --git a/pxii_bec/macros/luts/perp_xi_20261005-1620.csv b/pxii_bec/macros/luts/perp_xi_20261005-1620.csv new file mode 100644 index 0000000..63c0487 --- /dev/null +++ b/pxii_bec/macros/luts/perp_xi_20261005-1620.csv @@ -0,0 +1,6 @@ +energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y +25000,-5.52807,-0.04030,49.4,0.453,0.083,156.2,208.6 +25000,-5.52737,-0.01540,49.3,0.331,0.086,153.0,208.6 +25000,-5.52682,0.00982,47.5,0.208,0.088,150.5,208.3 +25000,-5.52612,0.03493,46.4,0.075,0.087,148.0,208.2 +25000,-5.52557,0.05990,47.5,-0.060,0.079,145.4,208.1 diff --git a/pxii_bec/macros/luts/perp_xi_20261005-1631.csv b/pxii_bec/macros/luts/perp_xi_20261005-1631.csv new file mode 100644 index 0000000..75d5e11 --- /dev/null +++ b/pxii_bec/macros/luts/perp_xi_20261005-1631.csv @@ -0,0 +1,7 @@ +energy,dcm_pitch,dcm_perp,lu_bpms,lu_Xnorm,lu_Ynorm,xi_cam_x,xi_cam_y +25000,-5.52821,-0.04084,50.0,0.455,0.088,157.8,209.4 +25000,-5.52786,-0.01596,49.2,0.338,0.087,155.0,209.1 +25000,-5.52714,0.00910,48.2,0.205,0.088,152.1,209.2 +25000,-5.52633,0.03430,47.3,0.074,0.094,149.2,209.0 +25000,-5.52589,0.05926,46.6,-0.062,0.092,146.4,209.2 +25000,-5.52743,0.00884,47.8,0.203,0.094,152.1,209.0 diff --git a/pxii_bec/macros/luts/pitch_comparison.csv b/pxii_bec/macros/luts/pitch_comparison.csv new file mode 100644 index 0000000..7fd4b7f --- /dev/null +++ b/pxii_bec/macros/luts/pitch_comparison.csv @@ -0,0 +1,14 @@ +energy,23rd Sep,6th Sep,offset +6000,-5.561,-5.5182,-0.0428 +8000,-5.5432,-5.5032,-0.04 +10000,-5.5349,-5.4956,-0.039300000000001 +12000,-5.5297,-5.4906,-0.0391 +14000,-5.5268,-5.4877,-0.0391 +16000,-5.5244,-5.4856,-0.0388 +18000,-5.5218,-5.4833,-0.0385 +20000,-5.5203,-5.482,-0.0383 +22000,-5.5194,-5.4807,-0.0387 +24000,-5.519,-5.4791,-0.0399 +26000,-5.5183,-5.4791,-0.0392 +28000,-5.5179,-5.4791,-0.0388 +30000,-5.518,, diff --git a/pxii_bec/macros/luts/roll_20260923_6000.csv b/pxii_bec/macros/luts/roll_20260923_6000.csv new file mode 100644 index 0000000..87b60f1 --- /dev/null +++ b/pxii_bec/macros/luts/roll_20260923_6000.csv @@ -0,0 +1,10 @@ +Roll,Y pos +3.000000,532.1747746692758 +3.375000,646.8383766556484 +3.750000,758.2370844371503 +4.125000,870.6457787689487 +4.500000,980.6793737229799 +4.875000,1080.7759963202259 +5.250000,1182.3265384715614 +5.625000,1290.697731056017 +6.000000,1376.2798011728055 diff --git a/pxii_bec/macros/luts/roll_20260924_25000.csv b/pxii_bec/macros/luts/roll_20260924_25000.csv new file mode 100644 index 0000000..81fac3c --- /dev/null +++ b/pxii_bec/macros/luts/roll_20260924_25000.csv @@ -0,0 +1,10 @@ +Roll,Y pos +1.000000,692.942650491312 +1.875000,755.6432908308136 +2.750000,819.8962183038443 +3.625000,883.0441749851776 +4.500000,944.625963858652 +5.375000,1004.513235574581 +6.250000,1061.1821742077382 +7.125000,1116.371127886505 +8.000000,1169.189245633994 diff --git a/pxii_bec/macros/luts/roll_20260924_6000.csv b/pxii_bec/macros/luts/roll_20260924_6000.csv new file mode 100644 index 0000000..87b60f1 --- /dev/null +++ b/pxii_bec/macros/luts/roll_20260924_6000.csv @@ -0,0 +1,10 @@ +Roll,Y pos +3.000000,532.1747746692758 +3.375000,646.8383766556484 +3.750000,758.2370844371503 +4.125000,870.6457787689487 +4.500000,980.6793737229799 +4.875000,1080.7759963202259 +5.250000,1182.3265384715614 +5.625000,1290.697731056017 +6.000000,1376.2798011728055 diff --git a/pxii_bec/macros/luts/roll_20260930_25000.csv b/pxii_bec/macros/luts/roll_20260930_25000.csv new file mode 100644 index 0000000..49bead9 --- /dev/null +++ b/pxii_bec/macros/luts/roll_20260930_25000.csv @@ -0,0 +1,10 @@ +Roll,Y pos +1.000000,620.3258474297603 +1.875000,727.3412656967532 +2.750000,831.2895400246484 +3.625000,936.7106895320477 +4.500000,1039.8208898439514 +5.375000,1139.02499725308 +6.250000,1232.640351083367 +7.125000,1322.7239076386252 +8.000000,1408.4337046604637 diff --git a/pxii_bec/macros/luts/roll_20260930_6000.csv b/pxii_bec/macros/luts/roll_20260930_6000.csv new file mode 100644 index 0000000..766f783 --- /dev/null +++ b/pxii_bec/macros/luts/roll_20260930_6000.csv @@ -0,0 +1,10 @@ +Roll,Y pos +3.000000,367.5626514183679 +3.250000,490.76539071940647 +3.500000,614.0409323259951 +3.750000,734.2089839347528 +4.000000,854.3453573633882 +4.250000,969.9637066596362 +4.500000,1084.8613752711697 +4.750000,1195.432631465686 +5.000000,1299.759493848411 diff --git a/pxii_bec/macros/luts/roll_20261008_25000.csv b/pxii_bec/macros/luts/roll_20261008_25000.csv new file mode 100644 index 0000000..0c958e1 --- /dev/null +++ b/pxii_bec/macros/luts/roll_20261008_25000.csv @@ -0,0 +1,10 @@ +Roll,Y pos +1.000000,645.3410172392396 +1.875000,716.7857063422749 +2.750000,798.4006801804591 +3.625000,879.2062486869808 +4.500000,948.0120679453303 +5.375000,1010.590100145263 +6.250000,1067.4532506840437 +7.125000,1123.6687191435465 +8.000000,1176.749800578109 diff --git a/pxii_bec/macros/luts/roll_20261008_6000.csv b/pxii_bec/macros/luts/roll_20261008_6000.csv new file mode 100644 index 0000000..09e4e20 --- /dev/null +++ b/pxii_bec/macros/luts/roll_20261008_6000.csv @@ -0,0 +1,10 @@ +Roll,Y pos +2.000000,329.981417633099 +2.250000,405.3057428861756 +2.500000,483.27540977301703 +2.750000,554.0746091974096 +3.000000,630.9466804651072 +3.250000,706.8771151250418 +3.500000,782.8947653437505 +3.750000,857.5768007188707 +4.000000,931.2567888482613 diff --git a/pxii_bec/macros/luts/roll_20261009_6000.csv b/pxii_bec/macros/luts/roll_20261009_6000.csv new file mode 100644 index 0000000..6f06e59 --- /dev/null +++ b/pxii_bec/macros/luts/roll_20261009_6000.csv @@ -0,0 +1 @@ +Roll,Y pos diff --git a/pxii_bec/macros/luts/temp.csv b/pxii_bec/macros/luts/temp.csv new file mode 100644 index 0000000..09e4e20 --- /dev/null +++ b/pxii_bec/macros/luts/temp.csv @@ -0,0 +1,10 @@ +Roll,Y pos +2.000000,329.981417633099 +2.250000,405.3057428861756 +2.500000,483.27540977301703 +2.750000,554.0746091974096 +3.000000,630.9466804651072 +3.250000,706.8771151250418 +3.500000,782.8947653437505 +3.750000,857.5768007188707 +4.000000,931.2567888482613 diff --git a/pxii_bec/macros/mxcomm_analysis.py b/pxii_bec/macros/mxcomm_analysis.py index 7662d71..6bcb76f 100644 --- a/pxii_bec/macros/mxcomm_analysis.py +++ b/pxii_bec/macros/mxcomm_analysis.py @@ -101,11 +101,38 @@ def fit(data, fit_params): params["base_intercept"].set(value=y_min) params["base_slope"].set(value=0) + # # Add peak-specific parameters + # params.update(peak_model.guess(processed_data["y_to_fit"], x=processed_data["x_data"])) + + # # Perform the fitting + # lmfit_result = full_model.fit(processed_data["y_to_fit"], params, x=processed_data["x_data"]) + # Add peak-specific parameters - params.update(peak_model.guess(processed_data["y_to_fit"], x=processed_data["x_data"])) + x_data = np.asarray(processed_data["x_data"]) + + params.update( + peak_model.guess( + processed_data["y_to_fit"], + x=x_data, + ) + ) + + # Constrain peak width to something physically resolvable by the scan + step = np.median(np.diff(np.sort(x_data))) + scan_range = np.ptp(x_data) + + if "peak_sigma" in params: + params["peak_sigma"].set( + min=0.5 * step, + max=0.5 * scan_range, + ) # Perform the fitting - lmfit_result = full_model.fit(processed_data["y_to_fit"], params, x=processed_data["x_data"]) + lmfit_result = full_model.fit( + processed_data["y_to_fit"], + params, + x=x_data, + ) # Find the X that gives the max Y max_index = np.argmax(processed_data["y_to_fit"]) @@ -125,6 +152,7 @@ def fit(data, fit_params): centre_stderr = lmfit_result.params["peak_center"].stderr height_stderr = lmfit_result.params["peak_height"].stderr + snr = height / noise if noise > 0 else np.inf @@ -151,7 +179,7 @@ def fit(data, fit_params): } -def check_peak_fit(x_data, result): +def check_peak_fit(x_data, result, min_fwhm_steps=3): """Check whether a fitted peak is reliable Parameters: X data, results from the fit step Returns: success or problems""" @@ -166,13 +194,18 @@ def check_peak_fit(x_data, result): centre = result["centre"] fwhm = result["fwhm"] + + fwhm_steps = fwhm / step + problems = [] if not x_min + 0.1 * scan_range < centre < x_max - 0.1 * scan_range: problems.append("peak centre is too close to scan edge") - if fwhm < 3 * step: - problems.append("peak is narrower than 3 scan steps") + if fwhm < min_fwhm_steps * step: + problems.append( + f"Peak FWHM spans only {fwhm_steps:.2f} scan steps " f"(minimum {min_fwhm_steps})" + ) if fwhm > 0.7 * scan_range: problems.append("peak is too broad for scan range") @@ -184,8 +217,19 @@ def check_peak_fit(x_data, result): if centre_stderr is None: problems.append("centre uncertainty could not be estimated") - elif centre_stderr > 0.2 * fwhm: - problems.append(f"centre uncertainty is large " f"({centre_stderr:.3g})") + elif centre_stderr > 0.5 * step: + problems.append( + f"centre uncertainty is large " + f"({centre_stderr:.3g}, " + f"{centre_stderr / step:.2f} scan steps)" + ) + + print("FIT DEBUG") + print(f"centre : {centre}") + print(f"fwhm : {fwhm}") + print(f"step : {step}") + print(f"fwhm/step : {fwhm / step}") + print(f"centre error : {result.get('centre_stderr')}") return {"success": not problems, "problems": problems} diff --git a/pxii_bec/macros/mxcomm_data.py b/pxii_bec/macros/mxcomm_data.py index 73c1bb3..b01b6ba 100644 --- a/pxii_bec/macros/mxcomm_data.py +++ b/pxii_bec/macros/mxcomm_data.py @@ -81,17 +81,17 @@ def get_value(dev_name, details=False): root = "scam" live_root = "scam" name = "scam_contrast" - value = dev_name.read()[name]["value"] + value = dev_name.read(cached=True)[name]["value"] else: try: name = live_root = root = dev_name.name - value = dev_name.read()[name]["value"] + value = dev_name.read(cached=True)[name]["value"] except: print("non-standard device") root = dev_name.dotted_name name = dev_name.full_name live_root = dev_name.parent.name - value = dev_name.read()[name]["value"] + value = dev_name.read(cached=True)[name]["value"] if details: return {"value": value, "root": root, "name": name, "live_root": live_root} diff --git a/pxii_bec/macros/mxcomm_plot.py b/pxii_bec/macros/mxcomm_plot.py index ab9b7b5..384761c 100644 --- a/pxii_bec/macros/mxcomm_plot.py +++ b/pxii_bec/macros/mxcomm_plot.py @@ -76,7 +76,7 @@ def plot_fitted_data(data, fit_result, window_name="Fitting", plot_widget=None, f"FWHM = {fit_result['fwhm']:.5f}\n" f"Height = {fit_result['height']:.4g}\n" f"Model = {fit_result['model']}\n" - f"Chi sq = {fit_result['chi_sq']:.3g}\n" + f"Centre_StdErr = {fit_result['centre_stderr']:.3g}\n" f"SNR = {fit_result['snr']:.3g}" ) @@ -94,12 +94,8 @@ def plot_fitted_data(data, fit_result, window_name="Fitting", plot_widget=None, # Display the fitted curve as a line without symbols. wf.get_curve("Fit").set(symbol_size=0) -def plot_scan_data( - data, - window_name="Fitting", - plot_widget=None, - title=None, -): + +def plot_scan_data(data, window_name="Fitting", plot_widget=None, title=None): """Plot completed scan data without a fitted curve.""" if isinstance(plot_widget, str): @@ -120,8 +116,4 @@ def plot_scan_data( wf.x_label = data["motor_name"] wf.y_label = data["signal_name"] - wf.plot( - x=data["x_data"], - y=data["y_data"], - label="Data", - ) + wf.plot(x=data["x_data"], y=data["y_data"], label="Data") diff --git a/pxii_bec/macros/mxcomm_scan.py b/pxii_bec/macros/mxcomm_scan.py index ff38f04..8232dda 100755 --- a/pxii_bec/macros/mxcomm_scan.py +++ b/pxii_bec/macros/mxcomm_scan.py @@ -6,7 +6,6 @@ from dataclasses import dataclass import numpy as np - # from mxcomm_analysis import ( # create_fit_parameters, # get_data_from_history, @@ -26,6 +25,7 @@ import numpy as np # dev # ) + @dataclass(frozen=True) class ScanDefaults: """Default values for fitting routines""" @@ -100,9 +100,11 @@ def move_to_scan_position(motor_device, motor_name: str, position: float, data: scans.umv(motor_device, motor_position, relative=False) print(f"\n Moving {motor_name} to position {motor_position: .3f}") + def restore_position(motor_device, position): """Return a motor to its position before the scan.""" - scans.umv(motor_device, position, relative=False) + scans.umv(motor_device, position, relative=False) + def go_to_peak( motor_device, @@ -117,87 +119,152 @@ def go_to_peak( gomax: bool = False, negative: bool = False, gap: bool = False, + min_fwhm_steps: float = 3, window_name: str = "Fitting", plot_widget=None, ): """ - Go to the peak of a signal by scanning a motor within a specified range and - identifying the optimal position based on signal peak data. + Scan a motor and move either to the fitted peak centre or the + highest measured data point. - Parameters: - motor_device: The motor device to be scanned. - signal_device: The signal device to monitor during the scan. - start (float): The starting position of the scan. Ignored if `relative` is True. - stop (float): The ending position of the scan. Ignored if `relative` is True. - steps (int): The number of steps to divide the scan range into. - relative (bool, optional): If True, interpret `start` and `stop` as relative to - the current motor position. Defaults to RELATIVE_MODE constant. - plot (bool, optional): If True, plot the scan data and the fitted results. - Defaults to True. - settle (float, optional): The time in seconds to wait after each step for the - signal to stabilize. Defaults to DEFAULT_SETTLE_TIME constant. - confirm (bool, optional): If True, ask for user confirmation before starting - the scan. Defaults to True. + If gomax=False: + Fit the scan, validate the fit using check_peak_fit(), + and move to the fitted centre. - Raises: - Exception: Raises exceptions potentially raised by dependent functions or - operations such as plotting, fitting, or motor movement. + If gomax=True: + Skip peak-fit validation and move directly to the highest + measured signal value. Information about whether the maximum + occurred at a scan boundary is returned. - Returns: - fit parameters + Parameters + ---------- + motor_device + Motor device to scan. + signal_device + Signal device to monitor. + start : float + Scan start position. + stop : float + Scan end position. + steps : int + Number of scan steps. + relative : bool + If True, start and stop are relative to current motor position. + plot : bool + Plot scan data/results. + settle : float + Settling time at each scan point. + confirm : bool + Ask for confirmation before starting scan. + gomax : bool + If True, move to highest measured point rather than fitted centre. + negative : bool + Fit a negative-going peak. + gap : bool + Apply minimum-gap protection when using fitted peak position. + min_fwhm_steps : float + Minimum allowed fitted FWHM in scan steps. Only used when + gomax=False. + window_name : str + BEC GUI window name. + plot_widget + Optional explicit plot widget. + + Returns + ------- + dict + Result information. + + For a successful fitted peak: + success + problems + centre + fwhm + height + chi_sq + centre_stderr + snr + + For gomax=True: + success + problems + x_max + max_index + at_lower_boundary + at_upper_boundary + + For a rejected fit: + success=False + problems=list of fit rejection reasons """ + + # ------------------------------------------------------------ # Get motor and signal names + # ------------------------------------------------------------ + mres = get_value(motor_device, True) motor_name = mres["root"] + sres = get_value(signal_device, True) signal_name = sres["root"] + print(f"Signal name is {signal_name}") - # if plot: - # if plot_widget is not None: - # plot_live_data(plot_widget, motor_name, signal_name, title=f"{motor_name} scan") - # else: - # plot_live_data_bec(motor_name, signal_name, window_name=window_name) + # ------------------------------------------------------------ + # Set up live plotting + # ------------------------------------------------------------ if plot: plot_live_data( - motor_name, + motor_name, signal_name, window_name=window_name, - plot_widget=plot_widget, - title=f"{motor_name} scan") + plot_widget=plot_widget, + title=f"{motor_name} scan", + ) + + # ------------------------------------------------------------ + # Validate scan range and get starting position + # ------------------------------------------------------------ - # Validate and calculate step size step_size = calculate_step_size(start, stop, steps) - # Confirm the scan range starting_position = mres["value"] + print(f"Starting motor position = {starting_position}") if confirm: if relative: scan_start = starting_position + start scan_end = starting_position + stop + print( - f"\nScanning from {scan_start: .6g} to {scan_end: .6g} in " - f"{steps} steps of size {step_size}" + f"\nScanning from {scan_start:.6g} to {scan_end:.6g} " + f"in {steps} steps of size {step_size}" ) print(f"Relative mode = {relative}") + else: print( - f"\nScanning from {start: .5g} to {stop: .5g} in {steps} steps of size {step_size}" + f"\nScanning from {start:.5g} to {stop:.5g} " + f"in {steps} steps of size {step_size}" ) print(f"Relative mode = {relative}") + input("Press Enter to continue...") - # Perform the scan + # ------------------------------------------------------------ + # Perform scan + # ------------------------------------------------------------ + scan_result = scans.line_scan( motor_device, start, stop, steps=steps, relative=relative, settling_time=settle ) + motor_data = scan_result.scan.live_data[mres["live_root"]][mres["name"]].val - # # motor_data = scan_result.scan.live_data[motor_name][motor_name].val - # sres = get_value(signal_name, True) + signal_data = scan_result.scan.live_data[sres["root"]][sres["name"]].val + scan_number = "Current" data = { @@ -209,16 +276,75 @@ def go_to_peak( "scan_number": scan_number, } - # Define and fit model to scan data + # ============================================================ + # GOMAX MODE + # ============================================================ + # + # Do not fit or apply peak-shape validation. + # Simply use the highest measured point. + # + + if gomax: + + if negative: + max_index = int(np.argmin(data["y_data"])) + else: + max_index = int(np.argmax(data["y_data"])) + + x_max = float(data["x_data"][max_index]) + + at_lower_boundary = max_index == 0 + at_upper_boundary = max_index == len(data["x_data"]) - 1 + + print(f"Maximum measured signal at {x_max:.6g}") + + if at_lower_boundary: + print("Maximum is at the lower scan boundary") + + if at_upper_boundary: + print("Maximum is at the upper scan boundary") + + # Plot raw scan rather than trying to assess a fitted peak + if plot: + plot_scan_data( + data, + window_name=window_name, + plot_widget=plot_widget, + title=f"{motor_name} scan - maximum at {x_max:.6g}", + ) + + # Move to measured maximum + move_to_scan_position(data["motor_device"], data["motor_name"], x_max, data) + + return { + "success": True, + "problems": [], + "x_max": x_max, + "max_index": max_index, + "at_lower_boundary": at_lower_boundary, + "at_upper_boundary": at_upper_boundary, + } + + # ============================================================ + # FITTED PEAK MODE + # ============================================================ + fit_params = create_fit_parameters( - deriv=False, negative=False, model=FitDefaults.MODEL, baseline=FitDefaults.BASELINE + deriv=False, negative=negative, model=FitDefaults.MODEL, baseline=FitDefaults.BASELINE ) + fit_result = fit(data, fit_params) - check = check_peak_fit(data["x_data"], fit_result) + # ------------------------------------------------------------ + # Validate fitted peak + # ------------------------------------------------------------ + + check = check_peak_fit(data["x_data"], fit_result, min_fwhm_steps=min_fwhm_steps) if not check["success"]: + print("Peak fit rejected:") + for problem in check["problems"]: print(f" - {problem}") @@ -229,42 +355,45 @@ def go_to_peak( plot_widget=plot_widget, title=f"{motor_name} scan - FIT REJECTED", ) - print(f"Returning motor to start position, {starting_position:.5g}") - restore_position( - motor_device, - starting_position, - ) - return None + print(f"Returning motor to start position, " f"{starting_position:.5g}") + restore_position(motor_device, starting_position) + return {"success": False, "problems": check["problems"]} + + # ------------------------------------------------------------ + # Plot accepted fit + # ------------------------------------------------------------ - # Plot the fitted data if plot = True if plot: plot_fitted_data(data, fit_result, window_name=window_name, plot_widget=plot_widget) - # If gomax is set then move to the maximum value, rather than the fit centre - if gomax: - value = fit_result["x_max"] - print(f"Max position is at {value}") - move_to_scan_position(data["motor_device"], data["motor_name"], fit_result["x_max"], data) + # ------------------------------------------------------------ + # Move to fitted peak centre + # ------------------------------------------------------------ + + centre = fit_result["centre"] + + if gap and centre < 4.5: + print(f"Fitted gap position {centre:.5g} mm is below " "minimum gap of 4.5 mm") + umv(dev.id_gap, 4.5) + else: - if gap: - if fit_result["centre"] < 4.5: - umv(dev.id_gap, 4.5) - else: - move_to_scan_position( - data["motor_device"], data["motor_name"], fit_result["centre"], data - ) - else: - # Safely move the motor to the peak position - move_to_scan_position(data["motor_device"], data["motor_name"], fit_result["centre"], data) + move_to_scan_position(data["motor_device"], data["motor_name"], centre, data) + + # ------------------------------------------------------------ + # Return successful fit information + # ------------------------------------------------------------ return { - "centre": fit_result["centre"], + "success": True, + "problems": [], + "centre": centre, "fwhm": float(fit_result["fwhm"]), "height": float(fit_result["height"]), "chi_sq": float(fit_result["chi_sq"]), + "centre_stderr": float(fit_result["centre_stderr"]), "snr": float(fit_result["snr"]), } @@ -376,9 +505,9 @@ def find_feature( plot_live_data( motor_name, signal_name, - window_name = window_name, - plot_widget = plot_widget, - title = f"{motor_name} scans" + window_name=window_name, + plot_widget=plot_widget, + title=f"{motor_name} scans", ) # Perform scan scan_result = scans.line_scan( diff --git a/pxii_bec/macros/mxcomm_utils.py b/pxii_bec/macros/mxcomm_utils.py new file mode 100644 index 0000000..70e4b16 --- /dev/null +++ b/pxii_bec/macros/mxcomm_utils.py @@ -0,0 +1,207 @@ +"""General reusable utilities for MX beamline commissioning and operation.""" + +import epics +import time +import numpy as np +import matplotlib.pyplot as plt + +# ============================================================================= +# Camera utilities +# ============================================================================= + + + + + + + + +def get_cam_image(prefix): + """Return the current RGB image from an EPICS areaDetector camera.""" + + width = int(epics.caget(f"{prefix}:image1:ArraySize1_RBV")) + height = int(epics.caget(f"{prefix}:image1:ArraySize2_RBV")) + + data = epics.caget(f"{prefix}:image1:ArrayData") + + if data is None: + raise RuntimeError(f"Could not read camera image from {prefix}") + + expected_size = width * height * 3 + + if data.size < expected_size: + raise RuntimeError( + f"Camera returned {data.size} bytes; " + f"expected {expected_size}" + ) + + return np.asarray( + data[:expected_size], + dtype=np.uint8, + ).reshape(height, width, 3) + +def save_cam_image( + image, + filename, + *, + crosshair=None, + beam_position=None, + crop=None, + title=None, +): + """Save a camera image, optionally with crosshair and beam position.""" + + fig, ax = plt.subplots(figsize=(4, 4)) + + ax.imshow(image) + + # Target crosshair + if crosshair is not None: + x, y = crosshair + ax.axvline(x, linewidth=1) + ax.axhline(y, linewidth=1) + + # Measured beam position + if beam_position is not None: + x, y = beam_position + ax.plot( + x, + y, + marker="+", + markersize=12, + markeredgewidth=2, + ) + + # Crop around crosshair + if crop is not None: + if crosshair is None: + raise ValueError( + "crosshair must be supplied when using crop" + ) + + x, y = crosshair + + ax.set_xlim(x - crop, x + crop) + + # Image coordinates have Y increasing downwards + ax.set_ylim(y + crop, y - crop) + + if title: + ax.set_title(title) + + ax.axis("off") + + fig.tight_layout() + fig.savefig(filename, dpi=150, bbox_inches="tight") + plt.close(fig) + + return filename + + + +def create_cam_report( + image, + pdf_filename, + *, + crosshair=None, + beam_position=None, + crop=None, + title="Camera snapshot", +): + """Create a one-page PDF containing an annotated camera image.""" + + fig, ax = plt.subplots(figsize=(6, 6)) + + ax.imshow(image) + + if crosshair is not None: + x, y = crosshair + ax.axvline(x, linewidth=1) + ax.axhline(y, linewidth=1) + + if beam_position is not None: + x, y = beam_position + ax.plot( + x, + y, + marker="+", + markersize=12, + markeredgewidth=2, + ) + + if crop is not None: + if crosshair is None: + raise ValueError( + "crosshair must be supplied when using crop" + ) + + x, y = crosshair + ax.set_xlim(x - crop, x + crop) + ax.set_ylim(y + crop, y - crop) + + ax.set_title(title) + ax.axis("off") + + fig.tight_layout() + + fig.savefig( + pdf_filename, + format="pdf", + bbox_inches="tight", + ) + + plt.close(fig) + + return pdf_filename + +# ============================================================================= +# Daily-setup PDF reports +# ============================================================================= + +def create_empty_daily_report(filename): + """Create the placeholder Daily Setup report.""" + + + fig, ax = plt.subplots(figsize=(8, 6)) + + ax.axis("off") + + ax.text( + 0.5, + 0.60, + "Daily Setup", + ha="center", + va="center", + fontsize=20, + weight="bold", + ) + + ax.text( + 0.5, + 0.48, + "Setup in progress.", + ha="center", + va="center", + fontsize=12, + ) + + ax.text( + 0.5, + 0.42, + "The report will appear here when complete.", + ha="center", + va="center", + fontsize=10, + ) + + fig.savefig( + filename, + format="pdf", + bbox_inches="tight", + ) + plt.close(fig) + + return filename + + + diff --git a/pxii_bec/macros/position_device.py b/pxii_bec/macros/position_device.py index eecdbac..eb963df 100755 --- a/pxii_bec/macros/position_device.py +++ b/pxii_bec/macros/position_device.py @@ -5,6 +5,7 @@ from typing import Callable, List, Dict, Optional, Union from bec_lib.logger import bec_logger from bec_lib.device import Device + def motor_resolver(bec_name): """Used to handle aerotech and smargon motors""" @@ -24,6 +25,7 @@ def motor_resolver(bec_name): raise ValueError(f"Cannot resolve motor for '{bec_name}'") + @dataclass class PositionDevice: """Generic device that moves between named or numeric positions""" @@ -53,14 +55,20 @@ class PositionDevice: if isinstance(target, str): name = target.lower() try: - bec_logger.logger.info(f"attempting to find position {name} from bec device {self.bec_name} userParameter.") + bec_logger.logger.info( + f"attempting to find position {name} from bec device {self.bec_name} userParameter." + ) bec_device: Device = dev[self.bec_name] position = bec_device.user_parameter[target] - bec_logger.logger.info(f"obtained position {position} - compare to cached value {self.positions.get(target)}") + bec_logger.logger.info( + f"obtained position {position} - compare to cached value {self.positions.get(target)}" + ) return position except Exception as e: - bec_logger.logger.debug(f"Failed to fetch user parameter for device {self.bec_name} and target {target} from bec, falling back to cached position {e}") + bec_logger.logger.debug( + f"Failed to fetch user parameter for device {self.bec_name} and target {target} from bec, falling back to cached position {e}" + ) if name not in self.positions: raise ValueError(f"Unknown position '{target}'") @@ -100,7 +108,6 @@ class PositionDevice: return scans.mv(self.mot_device, pos, relative=False) - # def set_position(self, target: Union[str, float]): # """Only to be used for testing purposes, bypasses guards""" # pos = self._resolve_target(target) @@ -129,5 +136,3 @@ class PositionDevice: pos = self._resolve_target(target) return abs(self.actual - pos) <= self.tol - - diff --git a/pxii_bec/macros/pxii_energy.py b/pxii_bec/macros/pxii_energy.py index 1ef07cd..303a8f1 100755 --- a/pxii_bec/macros/pxii_energy.py +++ b/pxii_bec/macros/pxii_energy.py @@ -25,7 +25,7 @@ def get_current_energy(): """ Returns the energy in eV from the current bragg angle. """ - current_bragg_angle = dev.dcm_bragg.user_readback.get() + current_bragg_angle = dev.dcm_bragg.user_readback.get(cached=True) current_energy = convert_from_bragg(current_bragg_angle, print_result=False)["energy_ev"] return current_energy @@ -88,41 +88,126 @@ def mono_pitch_scan(plot=True, window_name="Fitting", plot_widget=None): # Set fine pitch to middle of its' travel range scans.umv(EnergyDefaults.mono_fpitch, pos["dcm_fine_pitch"], relative=False) # Move DCM pitch to starting value - scans.umv(EnergyDefaults.mono_pitch, pos["dcm_pitch"], relative=False) - + pitch_offset = dev.dcm_pitch.user_parameter["offset"] + scans.umv(EnergyDefaults.mono_pitch, pos["dcm_pitch"]+pitch_offset, relative=False) # Go to peak using default parameters from EnergyDefaults - if plot: - print("Scanning monochromator pitch and moving to peak, with plotting.") + result = go_to_peak( + EnergyDefaults.mono_pitch, + EnergyDefaults.signals["sig1"], + -EnergyDefaults.pitch_scan["halfwidth"], + EnergyDefaults.pitch_scan["halfwidth"], + steps=EnergyDefaults.pitch_scan["steps"], + relative=True, + settle=0.01, + plot=plot, + confirm=False, + min_fwhm_steps=1.1, + window_name=window_name if plot else None, + plot_widget=plot_widget if plot else None, + ) + + extended_scan = False + + if not result["success"]: + extended_scan = True + + extended_range = 2 * EnergyDefaults.pitch_scan["halfwidth"] + extended_steps = 2 * EnergyDefaults.pitch_scan["steps"] + + print("Scanning monochromator pitch over a broader range.") + result = go_to_peak( EnergyDefaults.mono_pitch, EnergyDefaults.signals["sig1"], - -EnergyDefaults.pitch_scan["halfwidth"], - EnergyDefaults.pitch_scan["halfwidth"], - steps=EnergyDefaults.pitch_scan["steps"], + -extended_range, + extended_range, + steps=extended_steps, relative=True, settle=0.01, - plot=True, - confirm=False, - window_name=window_name, - plot_widget=plot_widget - ) - else: - print("Scanning monochromator pitch and moving to peak, without plotting.") - result = go_to_peak( - EnergyDefaults.mono_pitch, - EnergyDefaults.signals["sig1"], - -EnergyDefaults.pitch_scan["halfwidth"], - EnergyDefaults.pitch_scan["halfwidth"], - steps=EnergyDefaults.pitch_scan["steps"], - relative=True, - settle=0.01, - plot=False, + plot=plot, confirm=False, + min_fwhm_steps=1.1, + window_name=window_name if plot else None, + plot_widget=plot_widget if plot else None, ) + result["extended_scan"] = extended_scan return result + # if plot: + # print("Scanning monochromator pitch and moving to peak, with plotting.") + # result = go_to_peak( + # EnergyDefaults.mono_pitch, + # EnergyDefaults.signals["sig1"], + # -EnergyDefaults.pitch_scan["halfwidth"], + # EnergyDefaults.pitch_scan["halfwidth"], + # steps=EnergyDefaults.pitch_scan["steps"], + # relative=True, + # settle=0.01, + # plot=True, + # confirm=False, + # min_fwhm_steps=1.1, + # window_name=window_name, + # plot_widget=plot_widget, + # ) + # result["extended_scan"] = False + + # if not result["success"]: + # extended_range = 2 * EnergyDefaults.pitch_scan["halfwidth"] + # extended_steps = 2 * EnergyDefaults.pitch_scan["steps"] + # print("Scanning monochromator pitch over a broader range.") + # result = go_to_peak( + # EnergyDefaults.mono_pitch, + # EnergyDefaults.signals["sig1"], + # -extended_range, + # extended_range, + # steps=extended_steps, + # relative=True, + # settle=0.01, + # plot=True, + # confirm=False, + # min_fwhm_steps=1.1, + # window_name=window_name, + # plot_widget=plot_widget, + # ) + # result["extended_scan"] = True + + # else: + # print("Scanning monochromator pitch and moving to peak, without plotting.") + # result = go_to_peak( + # EnergyDefaults.mono_pitch, + # EnergyDefaults.signals["sig1"], + # -EnergyDefaults.pitch_scan["halfwidth"], + # EnergyDefaults.pitch_scan["halfwidth"], + # steps=EnergyDefaults.pitch_scan["steps"], + # relative=True, + # settle=0.01, + # plot=False, + # min_fwhm_steps=1.1, + # confirm=False, + # ) + # result["extended_scan"] = False + + # if not result["success"]: + # extended_range = 2 * EnergyDefaults.pitch_scan["halfwidth"] + # extended_steps = 2 * EnergyDefaults.pitch_scan["steps"] + # print("Scanning monochromator pitch over a broader range.") + # result2 = go_to_peak( + # EnergyDefaults.mono_pitch, + # EnergyDefaults.signals["sig1"], + # -extended_range, + # extended_range, + # steps=extended_steps, + # relative=True, + # settle=0.01, + # plot=True, + # confirm=False, + # min_fwhm_steps=1.1, + # ) + # result["extended_scan"] = True + # return result + # Specific functions - need to be edited for each beamline @@ -171,14 +256,21 @@ def get_dcm_motors_positions(energy_ev): """ # dcm_motor_values = get_value_from_lut(energy_ev) dcm_motor_values = {} - pitch = float(np.poly1d(Calibration.pitch_calib)(energy_ev)) + # pitch = float(np.poly1d(Calibration.pitch_calib)(energy_ev)) # pitch = -5.5 fpitch = 5.0 roll = EnergyDefaults.mono_roll_value perp = calc_perp_position(energy_ev, print_result=False) bragg_angle = convert_from_energy(energy_ev, print_result=False)["bragg_angle_mrad"] + pitch = float(np.poly1d(Calibration.pitch_calib)(bragg_angle)) dcm_motor_values.update( - {"bragg_angle": bragg_angle, "perp": perp, "dcm_pitch": pitch, "dcm_roll": roll, "dcm_fine_pitch": fpitch} + { + "bragg_angle": bragg_angle, + "perp": perp, + "dcm_pitch": pitch, + "dcm_roll": roll, + "dcm_fine_pitch": fpitch, + } ) return dcm_motor_values @@ -202,7 +294,7 @@ def move_dcm_motors(energy_ev): # umv(EnergyDefaults.mono_pitch, dcm_pos["dcm_pitch"]) # umv(EnergyDefaults.mono_roll, dcm_pos["dcm_roll"]) # print("\n***DCM Roll movement is currently disabled ***\n") - scans.umv(EnergyDefaults.mono_fpitch,dcm_pos["dcm_fine_pitch"], relative=False ) + scans.umv(EnergyDefaults.mono_fpitch, dcm_pos["dcm_fine_pitch"], relative=False) scans.umv( EnergyDefaults.energy, dcm_pos["bragg_angle"], @@ -216,12 +308,9 @@ def move_dcm_motors(energy_ev): ) -def bl_energy(energy_ev, - move_gap=True, - mono_scan=True, - plot=True, - window_name="Fitting", - plot_widget=None): +def bl_energy( + energy_ev, move_gap=True, mono_scan=True, plot=True, window_name="Fitting", plot_widget=None +): """ Adjusts the beamline's energy to the specified energy in electron volts (eV). The function validates the target energy, checks the current energy, and makes @@ -248,26 +337,29 @@ def bl_energy(energy_ev, print(f"Energy change of {energy_diff:.2f} eV is too small, not changing energy.") return + transmission = get_value(dev.transm) + # Step 1: Move the gap if needed. move_gap_if_needed(energy_ev, move_gap) # Step 2: Move and set the DCM motors. move_dcm_motors(energy_ev) - # Step 3: Update the mirror stripe. + # Step 3: Reset the transmission after the energy change + print(f"Setting transmission to {transmission}") + dev.transm.put(transmission) + + # Step 4: Update the mirror stripe. set_mirror_stripe(energy_ev) - # Step 4: Perform DCM pitch scan and move to peak. + # Step 5: Perform DCM pitch scan and move to peak. if mono_scan: if plot: - result = mono_pitch_scan(plot=True, - window_name=window_name, - plot_widget=plot_widget) + result = mono_pitch_scan(plot=True, window_name=window_name, plot_widget=plot_widget) return result else: mono_pitch_scan(plot=False) - # def new_calc_gap(energy_ev): # """ @@ -301,22 +393,33 @@ def bl_energy(energy_ev, # # raise ValueError(msg) # return gap -def new_calc_gap(energy_ev, print_result=True): + +# def calc_gap(energy_ev, print_result=True): +# """Calculate the undulator gap for the given energy.""" + +# harmonic_values = Gap.get_harmonic_values(energy_ev) + +# if harmonic_values is None: +# return None + +# gap = np.poly1d(harmonic_values)(energy_ev) +# gap *= Gap.correction_factor + +# if print_result: +# harmonic = Gap.get_harmonic_by_energy(energy_ev) +# print(f"Calculated gap is {gap:.3f} mm " f"using {harmonic}") + +# return gap + +def calc_gap(energy_ev, print_result=True): """Calculate the undulator gap for the given energy.""" - harmonic_values = Gap.get_harmonic_values(energy_ev) - - if harmonic_values is None: - return None - - gap = np.poly1d(harmonic_values)(energy_ev) - gap *= Gap.correction_factor + harmonic, gap = Gap.calculate_gap(energy_ev) if print_result: - harmonic = Gap.get_harmonic_by_energy(energy_ev) print( - f"Calculated gap is {gap:.3f} mm " - f"using {harmonic}" + f"Calculated gap is {gap:.4f} mm " + f"using H{harmonic}" ) return gap @@ -324,23 +427,18 @@ def new_calc_gap(energy_ev, print_result=True): def set_gap(energy_ev, print_result=False): """Set the undulator gap.""" - gap = new_calc_gap(energy_ev) + gap = calc_gap(energy_ev) if gap is not None and Gap.minimum_gap <= gap <= 20: umv(dev.id_gap, gap) if print_result: harmonic = Gap.get_harmonic_by_energy(energy_ev) - print( - f"Setting gap to {gap:.3f} mm " - f"using {harmonic}" - ) + print(f"Setting gap to {gap:.3f} mm " f"using {harmonic}") else: - raise ValueError( - f"Cannot calculate a valid gap for {energy_ev:.0f} eV. " - f"Calculated gap: {gap}" - ) + raise ValueError( + f"Cannot calculate a valid gap for {energy_ev:.0f} eV. " f"Calculated gap: {gap}" + ) return gap - diff --git a/pxii_bec/macros/pxii_energy.py.bak b/pxii_bec/macros/pxii_energy.py.bak new file mode 100755 index 0000000..aa4e86a --- /dev/null +++ b/pxii_bec/macros/pxii_energy.py.bak @@ -0,0 +1,347 @@ +"""Script to change energy at PXII by setting gap, DCM motors and mirror stripe + +Moving DCM motors - implemented for Bragg, pitch and perp +Gap - optional, can be switched off using move_gap=False +Mirrors - change of mirror stripe is not yet implemented +Plotting optional + +""" + +import numpy as np + +# from pxii_gap import set_gap +# from mx_methods import go_to_peak +# from pxii_parameters import EnergyDefaults, Calibration + +# from calculator import ( +# calc_perp_position, +# validate_energy, +# convert_from_bragg, +# convert_from_energy, +# ) + + +def get_current_energy(): + """ + Returns the energy in eV from the current bragg angle. + """ + current_bragg_angle = dev.dcm_bragg.user_readback.get(cached=True) + current_energy = convert_from_bragg(current_bragg_angle, print_result=False)["energy_ev"] + return current_energy + + +# Functions below are common to all beamlines +def calculate_energy_difference(current_energy, target_energy): + """ + Calculate the absolute difference in energy between the current energy level + and the target energy level. + """ + return abs(target_energy - current_energy) + + +def get_mirror_stripe(energy_ev): + """ + Determines the mirror stripe material based on the energy level provided + and the specified thresholds for silicon, rhodium, and platinum. + + Args: + energy_ev (float): Energy level in electron volts, used to determine + the corresponding material type. + + Returns: + str: A string indicating the material type corresponding to the provided + energy level. Possible values are "silicon", "rhodium", or "platinum". + """ + if energy_ev <= EnergyDefaults.stripe_thresholds["silicon"]: + return "silicon" + if ( + EnergyDefaults.stripe_thresholds["silicon"] + < energy_ev + <= EnergyDefaults.stripe_thresholds["rhodium"] + ): + return "rhodium" + return "platinum" + + +def set_mirror_stripe(energy_ev): + """ + Selects and sets the appropriate mirror stripe based on the given energy value + in electron volts (eV). + + Args: + energy_ev (float): The energy value in electron volts + + Returns: + None + """ + selected_stripe = get_mirror_stripe(energy_ev) + print(f"Selected mirror stripe: {selected_stripe}") + + +def mono_pitch_scan(plot=True, window_name="Fitting", plot_widget=None): + """Scan the monochromator pitch and move to the peak.""" + # Move to the calculated pitch value for the current energy + print("Starting Mono Pitch Scan.") + energy = get_current_energy() + pos = get_dcm_motors_positions(energy) + print(f"Setting DCM Pitch to default value of {pos['dcm_pitch']}") + # Set fine pitch to middle of its' travel range + scans.umv(EnergyDefaults.mono_fpitch, pos["dcm_fine_pitch"], relative=False) + # Move DCM pitch to starting value + scans.umv(EnergyDefaults.mono_pitch, pos["dcm_pitch"]-0.12, relative=False) + + # Go to peak using default parameters from EnergyDefaults + if plot: + print("Scanning monochromator pitch and moving to peak, with plotting.") + result = go_to_peak( + EnergyDefaults.mono_pitch, + EnergyDefaults.signals["sig1"], + -EnergyDefaults.pitch_scan["halfwidth"], + EnergyDefaults.pitch_scan["halfwidth"], + steps=EnergyDefaults.pitch_scan["steps"], + relative=True, + settle=0.01, + plot=True, + confirm=False, + min_fwhm_steps=1.1, + window_name=window_name, + plot_widget=plot_widget, + ) + else: + print("Scanning monochromator pitch and moving to peak, without plotting.") + result = go_to_peak( + EnergyDefaults.mono_pitch, + EnergyDefaults.signals["sig1"], + -EnergyDefaults.pitch_scan["halfwidth"], + EnergyDefaults.pitch_scan["halfwidth"], + steps=EnergyDefaults.pitch_scan["steps"], + relative=True, + settle=0.01, + plot=False, + min_fwhm_steps=1.5, + confirm=False, + ) + + return result + + +# Specific functions - need to be edited for each beamline + + +def move_gap_if_needed(energy_ev, move_gap=True): + """ + Move the gap position based on energy if the move_gap flag is set. + + Args: + energy_ev (float): The energy value in electron volts (eV) used for gap movement. + move_gap (bool): A flag indicating whether the gap position should be moved or not. + + Returns: + None + """ + if move_gap: + set_gap(energy_ev) + else: + print("Not moving gap.") + + +# def get_roll(energy_ev): +# """Calculates the roll based on calibration data.""" +# calib = Calibration() +# roll = np.poly1d(calib.roll)(energy_ev) +# if roll < 0: +# return 0 +# if roll >= 9.95: +# return 9.95 +# return float(roll) + + +def get_dcm_motors_positions(energy_ev): + """ + Pitch and roll are calculated based on fits of the measured calibration values. + Perp and Bragg are calculated based on the energy value via calculator.py. + + Arguments: + energy_ev (float): The energy value in electron volts for which the + DCM motor positions are to be calculated. + + Returns: + dict: A dictionary containing the calculated DCM motor positions + including values retrieved from the lookup table, Bragg angle + in milliradians, and perpendicular position. + """ + # dcm_motor_values = get_value_from_lut(energy_ev) + dcm_motor_values = {} + pitch = float(np.poly1d(Calibration.pitch_calib)(energy_ev)) + # pitch = -5.5 + fpitch = 5.0 + roll = EnergyDefaults.mono_roll_value + perp = calc_perp_position(energy_ev, print_result=False) + bragg_angle = convert_from_energy(energy_ev, print_result=False)["bragg_angle_mrad"] + dcm_motor_values.update( + { + "bragg_angle": bragg_angle, + "perp": perp, + "dcm_pitch": pitch, + "dcm_roll": roll, + "dcm_fine_pitch": fpitch, + } + ) + return dcm_motor_values + + +def move_dcm_motors(energy_ev): + """ + Move the DCM bragg, pitch and perp motors to the required positions + for the given energy in eV. + + """ + dcm_pos = get_dcm_motors_positions(energy_ev) + print( + f"Moving DCM bragg: {dcm_pos['bragg_angle']: .5g} mrad, " + f"DCM perp: {dcm_pos['perp']: .3g} mm, " + # f"DCM pitch fixed at -5.304 mrad, " + f"DCM pitch: {dcm_pos['dcm_pitch']: .5g} mrad, " + f"DCM Roll: {dcm_pos['dcm_roll']:.5g} V" + ) + # umv(EnergyDefaults.energy, dcm_pos["bragg_angle"]) + # umv(EnergyDefaults.mono_perp, dcm_pos["perp"]) + # umv(EnergyDefaults.mono_pitch, dcm_pos["dcm_pitch"]) + # umv(EnergyDefaults.mono_roll, dcm_pos["dcm_roll"]) + # print("\n***DCM Roll movement is currently disabled ***\n") + scans.umv(EnergyDefaults.mono_fpitch, dcm_pos["dcm_fine_pitch"], relative=False) + scans.umv( + EnergyDefaults.energy, + dcm_pos["bragg_angle"], + EnergyDefaults.mono_perp, + dcm_pos["perp"], + EnergyDefaults.mono_pitch, + dcm_pos["dcm_pitch"], + EnergyDefaults.mono_roll, + dcm_pos["dcm_roll"], + relative=False, + ) + + +def bl_energy( + energy_ev, move_gap=True, mono_scan=True, plot=True, window_name="Fitting", plot_widget=None +): + """ + Adjusts the beamline's energy to the specified energy in electron volts (eV). + The function validates the target energy, checks the current energy, and makes + adjustments only if the energy difference is significant enough. It performs + necessary operations including moving the gap, changing DCM motors, updating + the mirror stripe, and scanning to find the optimal DCM pitch. + + Args: + energy_ev: Target energy in electron volts to which the beamline should be adjusted. + move_gap: Boolean flag indicating whether to adjust the gap before setting energy. + plot: Boolean flag indicating whether to plot the DCM pitch scan for finding the peak. + + Returns: + None + """ + energy_ev = validate_energy(energy_ev) # Ensure energy is valid. + + # Check current energy to avoid unnecessary adjustments. + + current_energy = get_current_energy() + energy_diff = calculate_energy_difference(current_energy, energy_ev) + + if energy_diff <= EnergyDefaults.min_energy_change: + print(f"Energy change of {energy_diff:.2f} eV is too small, not changing energy.") + return + + transmission = get_value(dev.transm) + + # Step 1: Move the gap if needed. + move_gap_if_needed(energy_ev, move_gap) + + # Step 2: Move and set the DCM motors. + move_dcm_motors(energy_ev) + + # Step 3: Reset the transmission after the energy change + print(f"Setting transmission to {transmission}") + dev.transm.put(transmission) + + # Step 4: Update the mirror stripe. + set_mirror_stripe(energy_ev) + + # Step 5: Perform DCM pitch scan and move to peak. + if mono_scan: + if plot: + result = mono_pitch_scan(plot=True, window_name=window_name, plot_widget=plot_widget) + return result + else: + mono_pitch_scan(plot=False) + + +# def new_calc_gap(energy_ev): +# """ +# Calculates the gap based on the given energy +# """ +# gapval = Gap() +# harmonic_values = gapval.get_harmonic_values(energy_ev) +# if harmonic_values is not None: +# fit = np.poly1d(harmonic_values)(energy_ev) +# gap_value = fit * 0.9994 +# return gap_value +# return None + +# def set_gap(energy_ev, print_result=True): +# """ +# set the gap +# """ +# gap = new_calc_gap(energy_ev) +# # else: +# # gap = calc_gap(energy_kev) +# if gap is not None and Harmonics.min_gap_value <= gap <= 20: +# umv(dev.id_gap, gap) +# if print_result: +# print(f"Setting gap to {gap:.3f} mm") +# else: +# umv(dev.id_gap, Harmonics.min_gap_value) +# # msg = ( +# # f"Position {gap: .3f} mm is outside the allowed scan range of " +# # f"4.5 to 20 mm. Not changing the gap." +# # ) +# # raise ValueError(msg) +# return gap + + +def calc_gap(energy_ev, print_result=True): + """Calculate the undulator gap for the given energy.""" + + harmonic_values = Gap.get_harmonic_values(energy_ev) + + if harmonic_values is None: + return None + + gap = np.poly1d(harmonic_values)(energy_ev) + gap *= Gap.correction_factor + + if print_result: + harmonic = Gap.get_harmonic_by_energy(energy_ev) + print(f"Calculated gap is {gap:.3f} mm " f"using {harmonic}") + + return gap + + +def set_gap(energy_ev, print_result=False): + """Set the undulator gap.""" + + gap = calc_gap(energy_ev) + + if gap is not None and Gap.minimum_gap <= gap <= 20: + umv(dev.id_gap, gap) + + if print_result: + harmonic = Gap.get_harmonic_by_energy(energy_ev) + print(f"Setting gap to {gap:.3f} mm " f"using {harmonic}") + + else: + raise ValueError( + f"Cannot calculate a valid gap for {energy_ev:.0f} eV. " f"Calculated gap: {gap}" + ) + + return gap diff --git a/pxii_bec/macros/pxii_parameters.py b/pxii_bec/macros/pxii_parameters.py index a6a4e82..d3f9e44 100755 --- a/pxii_bec/macros/pxii_parameters.py +++ b/pxii_bec/macros/pxii_parameters.py @@ -4,6 +4,7 @@ from dataclasses import dataclass import numpy as np from enum import Enum + @dataclass(frozen=True) class EnergyDefaults: """Parameters for PXII energy changes""" @@ -12,14 +13,14 @@ class EnergyDefaults: min_energy_ev = 4800 max_energy_ev = 30002 beam_offset = 6 + default_trans = 0.1 signals = {"sig1": dev.lu_bpmsum, "sig2": dev.ss_bpmsum, "sig3": dev.bcu_bpmsum} energy = dev.dcm_bragg mono_pitch = dev.dcm_pitch mono_fpitch = dev.dcm_fpitch mono_perp = dev.dcm_perp mono_roll = dev.dcm_froll - mono_roll_value = 4.75 - LUT_table = "luts/energy_lut.csv" + mono_roll_value = 3.88 stripe_thresholds = {"silicon": 9000, "rhodium": 20000, "platinum": 40000} pitch_scan = {"halfwidth": 0.075, "steps": 20} @@ -28,175 +29,170 @@ class EnergyDefaults: class Calibration: """Calibration parameters for PXII optics""" - # pitch = np.array([4.61823701e-14, -1.97330772e-09, 2.89694543e-05, -5.34468669e00]) - # pitch_calib = [-5.89030403e-19, - # 4.85665619e-14, - # -1.49364459e-09, - # 2.08652765e-05, - # -5.59843072e+00] - pitch_calib = [-4.09746242e-18, - 2.32320520e-13, - -4.95650128e-09, - 4.85168715e-05, - -5.67418203e+00] - + # pitch_calib = [-7.60082220e-19, 6.09893342e-14, -1.81702221e-09, 2.45457520e-05, -5.61275367e00] + + pitch_calib = [-1.84031410e-07,-6.76777668e-05, -5.59684124] + # roll = np.array([2.28291039e-03, -2.41928101e01]) -from dataclasses import dataclass -import numpy as np - - @dataclass(frozen=True) class Gap: - """Fit parameters to calculate undulator gap from energy.""" + """PXII U19 undulator gap calibration. + + Harmonic fits are from Anuschka's September 2026 calibration. + For a requested energy, use the highest odd harmonic whose + calculated gap remains >= minimum_gap. + """ minimum_gap = 4.5 + selection_min_gap = 4.505 maximum_gap = 20.0 - correction_factor = 0.9994 + # Anuschka's September 2026 harmonic fits. + # Energy input is in keV, gap output is in mm. harmonics = { - "H3": np.array([9.57400000e-04, 1.62100000e-01]), - "H5": np.array([5.03757576e-04, 8.53992727e-01]), - "H7": np.array([3.57624242e-04, 8.74460000e-01]), - "H9": np.array([2.76218182e-04, 9.00565455e-01]), - "H11": np.array([2.25662626e-04, 9.04630909e-01]), - "H13": np.array([1.89440404e-04, 9.35049697e-01]), - "H15": np.array([1.64179798e-04, 9.35255758e-01]), - "H17": np.array([1.44460317e-04, 9.47441667e-01]), - "H19": np.array([1.26071429e-04, 1.04085357e00]), + 3: np.array([0.095, -0.276, 4.154]), + 5: np.array([0.00269444, -0.0616905, 0.967925, -0.295405]), + 7: np.array([0.00110017, -0.0369968, 0.77334, -0.688198]), + 9: np.array([0.00021633, -0.00619517, 0.315392, 0.971667]), + 11: np.array([0.000589549, -0.0328631, 0.837705, -2.90326]), + 13: np.array([0.197702, 0.757869]), + 15: np.array([0.170381, 0.783155]), + 17: np.array([0.1466, 0.8906]), + 19: np.array([0.128, 0.985]), } @classmethod - def minimum_energy(cls, harmonic): - """ - Return the lowest energy that can be reached with this harmonic - without the corrected gap going below the minimum gap. - """ - slope, intercept = cls.harmonics[harmonic] - - # new_calc_gap() applies the correction factor afterwards, - # so account for it here as well. - raw_minimum_gap = cls.minimum_gap / cls.correction_factor - - return (raw_minimum_gap - intercept) / slope + def calculate_gap_for_harmonic(cls, energy_ev, harmonic): + """Calculate gap for a specified harmonic.""" + energy_kev = energy_ev / 1000.0 + return np.polyval(cls.harmonics[harmonic], energy_kev) @classmethod def get_harmonic_by_energy(cls, energy_ev): """ - Return the appropriate harmonic for the requested energy. + Select the highest odd harmonic that gives a valid gap. - Switch to the next harmonic as soon as it can produce the - requested energy without requiring a gap below minimum_gap. + This selects the harmonic whose gap is closest to the + minimum allowed gap of 4.5 mm, while maintaining a small + safety margin of 0.005 mm. """ - selected = None + + valid = [] for harmonic in cls.harmonics: - if energy_ev >= cls.minimum_energy(harmonic): - selected = harmonic - else: - break + gap = cls.calculate_gap_for_harmonic( + energy_ev, + harmonic, + ) - return selected + if cls.selection_min_gap <= gap <= cls.maximum_gap: + valid.append((harmonic, gap)) - @classmethod - def get_harmonic_values(cls, energy_ev): - """ - Return the fit coefficients for the appropriate harmonic. - """ - harmonic = cls.get_harmonic_by_energy(energy_ev) - - if harmonic is None: + if not valid: return None - return cls.harmonics[harmonic] + # Closest valid gap to the minimum gap + harmonic, gap = min( + valid, + key=lambda x: x[1] - cls.selection_min_gap, + ) + return harmonic + @classmethod def calculate_gap(cls, energy_ev): - """ - Calculate the corrected undulator gap for the requested energy. + """Return selected harmonic and calculated gap.""" - Returns - ------- - tuple - (harmonic, gap) - """ harmonic = cls.get_harmonic_by_energy(energy_ev) if harmonic is None: raise ValueError( - f"{energy_ev:.0f} eV is below the minimum calibrated energy." + f"No valid harmonic found for {energy_ev:.0f} eV." ) - slope, intercept = cls.harmonics[harmonic] - - gap = slope * energy_ev + intercept - gap *= cls.correction_factor + gap = cls.calculate_gap_for_harmonic( + energy_ev, + harmonic, + ) + # Final check against actual motor limits if not cls.minimum_gap <= gap <= cls.maximum_gap: raise ValueError( f"Calculated gap {gap:.3f} mm for {energy_ev:.0f} eV " - f"using {harmonic} is outside the allowed range " + f"using H{harmonic} is outside the allowed range " f"{cls.minimum_gap:.1f}-{cls.maximum_gap:.1f} mm." ) return harmonic, gap - - - - -@dataclass(frozen=True) -class Harmonics: - """Anuschka's harmonics data for PXII U19 Undulator""" - - min_gap_value = 4.5 - map = { - 3: np.array([1.07141725, -0.52834258]), - 4: np.array([0.007111, -0.13678409, 1.52295567, -1.06882785]), - 5: np.array([0.00315051, -0.0766359, 1.13107469, -0.86442062]), - 6: np.array([0.00162862, -0.04452336, 0.82948259, -0.37329674]), - 7: np.array([0.00080764, -0.02418882, 0.59212947, 0.15702886]), - 8: np.array([1.16699242e-03, -4.68207543e-02, 9.43972396e-01, -1.94201019e00]), - 9: np.array([0.00048419, -0.02010648, 0.55514114, -0.38180067]), - 10: np.array([2.11583333e-04, -8.03503571e-03, 3.43141595e-01, 6.02318000e-01]), - 11: np.array([0.00334392, -0.18405336, 3.58338994, -19.3640241]), - 12: np.array([3.20520798e-05, 2.39253145e-03, 8.09198503e-02, 2.22897377e00]), - 13: np.array([0.00278744, 0.07979874, 2.05143916]), - } - energy_ranges = {3: (0, 7), 5: (7, 10), 7: (10, 13), 9: (13, 16), 11: (16, 19), 13: (19, 22)} - high_energy = [(15, (23, 25)), (17, (25, 29)), (19, (29, float("inf")))] @dataclass(frozen=True) class CamConversion: - """Convert pixels to microns for sam cam""" + """Convert pixels to microns for sample camera""" a = 0.5208 b = 0.002586 + # @dataclass(frozen=True) -class BPM_X_Calibration: - coeffs = (0.11079256, -0.02493623, -0.00799871, -0.00482772, 0.16569134, 0.44192518) +class BCU_BPM_X_Calibration: + coeffs = (0.11079256, -0.02493623, -0.00799871, -0.00482772, 0.16569134, 0.44192518) signal_limit = 0.90 # centred_position = 0.441 - centred_position = -0.009 # updated on 31st Aug26 - crosshair_signal = 0.000731 - crosshair_bpm_position = 0.444 - + centred_position = -0.009 # where the bpm was during calibration + crosshair_signal = -0.0209 + crosshair_bpm_position = 0.0738 # @dataclass(frozen=True) -class BPM_Y_Calibration: +class BCU_BPM_Y_Calibration: coeffs = (-0.14645507, 0.010016, 0.08258468, -0.00547233, -0.02715706, -1.54419084) + signal_limit = 0.95 + centred_position = -1.540 # where the bpm was during calibration + crosshair_signal = 0.00156 + crosshair_bpm_position = -1.5459 + + +# @dataclass(frozen=True) +class SS_BPM_X_Calibration: + coeffs = (4.04882, -10.9093) signal_limit = 0.90 - centred_position = -1.540 - crosshair_signal = -0.01383 - crosshair_bpm_position = -1.540 + centred_position = 2.8625 # updated on 26th Sep26 + + +# @dataclass(frozen=True) +class SS_BPM_Y_Calibration: + coeffs = (-23.8286, -32.7051) + signal_limit = 0.90 + centred_position = -1.3876 +# @dataclass(frozen=True) + + +class LU_BPM_X_Calibration: + coeffs = (4.42860, -9.63986) + signal_limit = 0.90 + # centred_position = 0.441 + centred_position = 2.1816 # updated on 26th Sep26 + + +# @dataclass(frozen=True) +class LU_BPM_Y_Calibration: + coeffs = (-27.6544, 83.2683) + signal_limit = 0.8 + centred_position = 3.0175 # @dataclass(frozen=True) class Beamstop: - x_offset = -0.65 + x_offset = -0.55 + i2_limit = 5e-8 +@dataclass(frozen=True) +class Cameras: + sample = "X10SA-ES-MS" + ss_xray_eye = "X10SA-ES-SSCAM" + det_xray_eye = "X10SA-ES-XEYE" class CameraZoom(Enum): X1 = ("1x", 1) @@ -207,7 +203,7 @@ class CameraZoom(Enum): X12_5 = ("12.5x", 1000) def __init__(self, label, position): - self.label= label + self.label = label self.position = position @classmethod @@ -216,9 +212,7 @@ class CameraZoom(Enum): for zoom in cls: if abs(position - zoom.position) <= tolerance: return zoom - raise ValueError( - f"No camera zoom levle found near motor position {position}" - ) + raise ValueError(f"No camera zoom level found near motor position {position}") @classmethod def from_label(cls, label): @@ -228,7 +222,45 @@ class CameraZoom(Enum): return zoom raise ValueError(f"Unknown camera zoom: {label}") + +# @dataclass(frozen=True) +class PreChecks: + mode_pv = "AGEOP-BL:STATUS-X10SA" + fe_shutter_pv = "X10SA-FE-PSH1-EMLS-0010:OPEN" + hutch_shutter_pv = "X10SA-OP-PSH1-EMLS:STATE" +# @dataclass(frozen=True) +class EHChecks: + cryo_pv = "X10SA-ES-CS:TEMP_RBV" + ss_xi_pv = "X10SA-ES-SSXI:POS-SET" + ss_mot = dev.ss_xi_x + + +# @dataclass(frozen=True) +class BeamMove: + """Values used for moving beam to the crosshair using + the VFM DR motor and the HFM XD motors. Slope values apply to 12.5X + zoom when the scintillator is used for measurments""" + + # bcu_x_coeffs = (2519.3,-5184.1) + # bcu_y_coeffs = (1324.4,1108.7) + zoom = CameraZoom.X12_5.position + vfm_mot = dev.vfm_ydr + hfm_mot = dev.hfm_xd + max_move = 0.02 + scint_target_x = 993 + scint_target_y = 969 + scint_x_slope = -19450 + scint_y_slope = -37800 + scint_tolerance = 7 + scint_target_flux = 8e11 +# @dataclass(frozen=True) +class BLSetup: + """Values used for the weekly setup script""" + energy = 12400 + fe_xsize = 0.6 + fe_ysize = 0.6 + detector_height = 0 diff --git a/pxii_bec/macros/pxii_setup.py b/pxii_bec/macros/pxii_setup.py new file mode 100644 index 0000000..a361a80 --- /dev/null +++ b/pxii_bec/macros/pxii_setup.py @@ -0,0 +1,353 @@ +"""PXII-specific operational helpers used by routine daily/weekly setup. + +BEC loads macro files into a shared namespace, so these functions deliberately use +the standard BEC globals (dev, umv, get_value, etc.) rather than importing other +macro files. Nothing in this module should be promoted to mxcomm_* unless it is +truly beamline-independent. +""" + +import time +from dataclasses import dataclass +from datetime import datetime + +import numpy as np +from pxii_bec.scripts import beamline_context as bl +from pxii_bec.macros.beamline_planner import BeamlineState + + +# ============================================================================= +# Energy +# ============================================================================= + +def daily_energy(energy, scan_mono=True, plot_widget=None): + """Set PXII energy/gap and optionally optimise DCM pitch.""" + + current_energy = get_current_energy() + mono_result = {"extended_scan": False} + + if abs(energy - current_energy) > 1: + bl_energy(energy, window_name="DailySetup", plot_widget=plot_widget) + # bl_energy performs the normal energy move. Keep mono_result benign + # here so the result handling below is defined for both code paths. + else: + gap_actual = dev.id_gap.position + gap_req = calc_gap(energy) + + if abs(gap_actual - gap_req) > 0.05: + if dev.id_gap.moving(): + return { + "ok": False, + "message": "Undulator gap is moving", + "energy": current_energy, + } + umv(dev.id_gap, gap_req) + + if scan_mono: + mono_result = mono_pitch_scan( + window_name="DailySetup", plot_widget=plot_widget + ) + + new_energy = get_current_energy() + calib_pitch = get_dcm_motors_positions(energy)["dcm_pitch"] + pitch_offset = get_value(dev.dcm_pitch) - calib_pitch + + if not mono_result.get("extended_scan", False): + return { + "ok": True, + "message": ( + f"Beamline energy set to {new_energy:.0f} eV, " + f"pitch offset = {pitch_offset:.3f} mrad" + ), + "energy": new_energy, + "pitch_offset": pitch_offset, + } + + return { + "ok": True, + "warning": True, + "message": ( + "Warning - DCM pitch is not within expected tolerance. " + "The DCM may need to be re-calibrated. " + f"Pitch offset = {pitch_offset:.3f} mrad" + ), + "energy": new_energy, + "pitch_offset": pitch_offset, + } + + +# ============================================================================= +# Sample-camera scintillator measurements +# ============================================================================= + +def predict_scint_transmission(target_flux=None): + """Predict PXII transmission required for a scintillator measurement.""" + if target_flux is None: + target_flux = BeamMove.scint_target_flux + _, full_flux = bpm2flux() + if not np.isfinite(full_flux) or full_flux <= 0: + raise ValueError( + "Cannot predict scintillator transmission: " + f"invalid full flux ({full_flux:.3g} ph/s)" + ) + return float(np.clip(target_flux / full_flux, 0.001, 1.0)) + + +def auto_exposure(cam="samcam", target=200, tol=5, gain=0.9, + min_exp=0.00001, max_exp=0.2, max_iter=10): + """Adjust PXII camera exposure to reach the requested maximum signal.""" + if cam == "samcam": + exposure = dev.samcam_exp.read()["samcam_exp"]["value"] + else: + exposure = dev.ss_xicam_exp.read()["ss_xicam_exp"]["value"] + + print(f"Starting exposure = {exposure:.4f} s") + for _ in range(max_iter): + time.sleep(0.1) + if cam == "samcam": + maxval = dev.samcam_max.read()["samcam_max"]["value"] + else: + maxval = dev.ss_xicam_max.read()["ss_xicam_max"]["value"] + if maxval is None: + print("No reading — check camera.") + break + error = target - maxval + if abs(error) <= tol: + break + new_exp = exposure * (1 + gain * error / target) + new_exp = max(min_exp, min(max_exp, new_exp)) + if cam == "samcam": + dev.samcam_exp.put(new_exp) + else: + dev.ss_xicam_exp.put(new_exp) + exposure = new_exp + print(f"New exposure time is {exposure:.3g}") + return exposure + + +def prepare_scint_measurement(autoexp=True, zoom=1000): + """Put PXII into the standard state for a scintillator measurement.""" + transmission = predict_scint_transmission() + print(f"Predicted scintillator transmission: {transmission:.2%}") + dev.transm.put(transmission) + time.sleep(3) + if get_value(dev.scam_zoom) != zoom: + umv(dev.scam_zoom, zoom) + if not bl.planner.is_state(BeamlineState.BEAM_VISUALISATION): + bl.planner.move_to(BeamlineState.BEAM_VISUALISATION) + dev.bcu_shutter.put(1) + time.sleep(0.5) + if autoexp: + auto_exposure(cam="samcam", max_iter=25) + return zoom + + +def measure_beamsize(cam="samcam"): + """Return PXII sample-camera beam FWHM in microns.""" + a = dev.samcam_xsig.read()["samcam_xsig"]["value"] + b = dev.samcam_ysig.read()["samcam_ysig"]["value"] + zoom = dev.scam_zoom.read()["scam_zoom"]["value"] + sx = calc_scam_microns(a, zoom=zoom) * 2.35 + sy = calc_scam_microns(b, zoom=zoom) * 2.35 + print(f"FWHM in um : {(sx, sy)}") + return sx, sy + + +def read_scintXY(image=False, measure_size=True): + """Read PXII beam position from the sample-camera scintillator image.""" + x_target = BeamMove.scint_target_x + y_target = BeamMove.scint_target_y + zoom = get_value(dev.scam_zoom) + max_signal = get_value(dev.samcam_max) + thresh = get_value(dev.samcam_thresh) + if max_signal < thresh: + return { + "ok": False, + "message": ( + "Insufficient signal for centroid calculation " + f"(max signal = {max_signal:.0f}, threshold = {thresh:.0f})" + ), + "max_signal": max_signal, + } + x_px = dev.samcam_x.read()["samcam_x"]["value"] + y_px = dev.samcam_y.read()["samcam_y"]["value"] + diff_x = x_target - x_px + diff_y = y_target - y_px + results = { + "ok": True, + "message": f"Beam detected at X={x_px:.1f}, Y={y_px:.1f} px", + "max_signal": max_signal, + "X_pixels": x_px, + "Y_pixels": y_px, + "X_diff_px": diff_x, + "Y_diff_px": diff_y, + "X_diff_microns": calc_scam_microns(diff_x, zoom), + "Y_diff_microns": calc_scam_microns(diff_y, zoom), + } + if measure_size: + results["X_FWHM"], results["Y_FWHM"] = measure_beamsize() + print( + f"Beam position: X = {x_px:.1f} px, Y = {y_px:.1f} px\n" + f"Distance from crosshair: X = {results['X_diff_microns']:.1f} microns, " + f"Y = {results['Y_diff_microns']:.1f} microns\n" + ) + if image: + results["image"] = get_cam_image(Cameras.sample) + return results + + +def finish_scint_measurement(): + dev.bcu_shutter.put(0) + + +# ============================================================================= +# Slit centring used by weekly checks +# ============================================================================= + +@dataclass +class SlitAxis: + name: str + centre_motor: object + size_motor: object + scan_range: float = 2.0 + +@dataclass +class Slit: + name: str + x: SlitAxis + y: SlitAxis + +def centre_axis(axis, detector, slit_size=0.5, final_size=3.0, window_name=None, plot_widget=None): + print(f"\nAligning {axis.name}") + umv(axis.size_motor, slit_size) + start = axis.centre_motor.position + try: + go_to_peak(axis.centre_motor, detector, start-axis.scan_range, + start+axis.scan_range, 50, confirm=False, window_name=window_name, + plot_widget=plot_widget) + centre = get_value(axis.centre_motor) + print(f"{axis.name}: centre = {centre:.4f}") + return centre + finally: + umv(axis.size_motor, final_size) + +def centre_slit(slit, detector, slit_size=0.5, final_size=3.0, window_name=None, x_plot_widget=None, y_plot_widget=None): + print(f"\n=== Aligning {slit.name} ===") + x = centre_axis(slit.x, detector, slit_size, final_size,window_name=window_name,plot_widget=x_plot_widget) + y = centre_axis(slit.y, detector, slit_size, final_size, window_name=window_name,plot_widget=y_plot_widget) + print(f"=== Finished {slit.name} ===") + return {"x": x, "y": y} + +def define_slits(): + def axis(prefix, direction): + return SlitAxis( + name=f"{prefix}_sl_{direction}", + centre_motor=getattr(dev, f"{prefix}_sl_{direction}cen"), + size_motor=getattr(dev, f"{prefix}_sl_{direction}size"), + ) + return [Slit(name, axis(name, "x"), axis(name, "y")) + for name in ("bsf", "ss", "bcu")] + +def centre_one(name, detector, window_name=None, x_plot_widget=None, y_plot_widget=None): + for slit in define_slits(): + if slit.name == name: + return centre_slit(slit, detector,window_name=window_name,x_plot_widget=x_plot_widget,y_plot_widget=y_plot_widget) + raise ValueError(f"Unknown PXII slit set: {name}") + + +# ============================================================================= +# Ge energy calibration diagnostic +# ============================================================================= + +def scan_ge(edge=11103.1, mode="coarse"): + """Scan the PXII Ge K edge and return the generated CSV filename.""" + if mode == "coarse": + scan_range, scanpoints = 100, 41 + if mode == "medium": + scan_range, scanpoints = 40, 41 + elif mode == "fine": + scan_range, scanpoints = 15, 61 + else: + raise ValueError(f"Unknown scan mode '{mode}'. Use 'coarse', 'medium' or 'fine'.") + + start_eV, end_eV = edge-scan_range, edge+scan_range + start_bragg = convert_from_energy(start_eV)["bragg_angle_mrad"] + end_bragg = convert_from_energy(end_eV)["bragg_angle_mrad"] + bragg_points = np.linspace(start_bragg, end_bragg, scanpoints) + filename = bl.env.lut_dir / f"{datetime.now():%Y%m%d}_ge_edge_{mode}.csv" + + with open(filename, "w") as f: + f.write("Energy,Bragg,ss_bpmsum,bcu_bpmsum,transmission\n") + + print(f"\nGe edge {mode} scan: {start_eV:.1f}-{end_eV:.1f} eV") + bl_energy(start_eV) + dev.transm.put(1) + time.sleep(2) + umv(dev.ss_f4_x, 6.0) + time.sleep(3) + + try: + for bragg in bragg_points: + scans.umv(dev.dcm_bragg, bragg, relative=False) + energy = convert_from_bragg(bragg)["energy_ev"] + ss = get_value(dev.ss_bpmsum) + vals = [] + for _ in range(5): + vals.append(dev.bcu_bpmsum.read()["bcu_bpmsum"]["value"]) + time.sleep(0.1) + inten = float(np.mean(vals)) + transmission = inten / ss + with open(filename, "a") as f: + f.write(f"{energy:.2f},{bragg:.2f},{ss:.2f},{inten:.2f},{transmission:.6f}\n") + finally: + bl_energy(12400) + dev.transm.put(0.1) + time.sleep(2) + + print(f"Scan complete. Results written to {filename}") + return filename + +def prepare_ss_xi_measurement(autoexp=True): + """Prepare for taking a reading of the beam from the SS Xray eye""" + + # move to x-ray eye into the beam + umv(dev.ss_xi_x, 7.0) + + # set autoexposure and check there is a reading in the image + if autoexp: + auto_exposure(cam="ss_xicam", max_iter=25) + +def finish_ss_xi_measurement(): + '''Move the SS xray eye out of the beam''' + umv(dev.ss_xi_x, -7) + +def read_ss_xicamXY(): + """Read the beam position at the SS xray eye camera""" + results = {} + max_signal = get_value(dev.ss_xicam_max) + results["max_signal"] = max_signal + # thresh = get_value(dev.samcam_thresh) + thresh = 150 + if max_signal < thresh: + return { + "ok": False, + "message": ( + f"Insufficient signal for centroid calculation " + f"(max signal = {max_signal:.0f}, threshold = {thresh:.0f})" + ), + "max_signal": max_signal, + } + + + x_px = dev.ss_xicam_x.read()["ss_xicam_x"]["value"] + y_px = dev.ss_xicam_y.read()["ss_xicam_y"]["value"] + results["X_pixels"] = x_px + results["Y_pixels"] = y_px + + results["ok"] = True + results["message"] = ( + f"Beam detected at X={x_px:.1f}, Y ={y_px:.1f} px" + ) + print(f"Beam position: X = {results['X_pixels']:.1f} px, " + f"Y = {results['Y_pixels']:.1f} px\n") + + return results diff --git a/pxii_bec/macros/temp.py b/pxii_bec/macros/temp.py new file mode 100644 index 0000000..bd98ad9 --- /dev/null +++ b/pxii_bec/macros/temp.py @@ -0,0 +1,30 @@ +import time +import subprocess +import shlex +import csv +import base64 +import numpy as np +from datetime import datetime +from contextlib import contextmanager +from dataclasses import dataclass +from pxii_bec.scripts import beamline_context as bl +from pxii_bec.macros.beamline_planner import BeamlineState +import matplotlib.pyplot as plt +from matplotlib.patches import Ellipse + +def test_daily_html_report(): + filename = bl.env.daily_setup_dir / "daily_beam.png" + image_src = image_to_data_uri(filename) + + html = f""" +Testing html
++
+
+""" + + plot1, plot2, plot3, plot4, info, progress, report = select_daily_setup_gui() + info.set_html_text(f"{html}") \ No newline at end of file diff --git a/pxii_bec/macros/test_state_transitions.py b/pxii_bec/macros/test_state_transitions.py index dc11a12..b401045 100755 --- a/pxii_bec/macros/test_state_transitions.py +++ b/pxii_bec/macros/test_state_transitions.py @@ -6,6 +6,7 @@ import time from pxii_bec.scripts import beamline_context as bl from pxii_bec.macros.beamline_planner import BeamlineState + def state_test(number_tries=20): tested_states = [] states_to_test = [ diff --git a/pxii_bec/macros/weekly.py b/pxii_bec/macros/weekly.py new file mode 100644 index 0000000..27f938b --- /dev/null +++ b/pxii_bec/macros/weekly.py @@ -0,0 +1,202 @@ +"""PXII weekly beamline checks. +""" + +import csv +from datetime import datetime +from pxii_bec.scripts import beamline_context as bl + + +def setup_weekly(): + """Put PXII into the standard conditions used for weekly checks.""" + print("\nSetting up standard weekly-check conditions...") + energy_result = daily_energy(BLSetup.energy, scan_mono=True, plot_widget="Plot_1") + return { + "ok": energy_result.get("ok", True), + "energy": BLSetup.energy, + "gap": get_value(dev.id_gap), + "energy_result": energy_result, + } + + +def scan_fe(window_name="Fitting", plot_widget=None): + """Scan PXII FE slits in X and Y and restore the standard gaps.""" + try: + print("Scanning FE slits in X") + umv(dev.fe_sl_xsize, 0.05, dev.fe_sl_ysize, 0.6) + go_to_peak(dev.fe_sl_xcen, dev.lu_bpmsum, -1, 1, 25, + confirm=False, relative=True, window_name=window_name, plot_widget="Plot_1") + xcen = get_value(dev.fe_sl_xcen) + + print("Scanning FE slits in Y") + umv(dev.fe_sl_xsize, 0.6, dev.fe_sl_ysize, 0.05) + go_to_peak(dev.fe_sl_ycen, dev.lu_bpmsum, -1, 1, 25, + confirm=False, relative=True, window_name=window_name, plot_widget="Plot_2") + ycen = get_value(dev.fe_sl_ycen) + return {"fe_xcen": xcen, "fe_ycen": ycen} + finally: + umv(dev.fe_sl_xsize, BLSetup.fe_xsize) + umv(dev.fe_sl_ysize, BLSetup.fe_ysize) + + +def weekly_fe_scan(window_name="DailySetup"): + try: + result = scan_fe(window_name) + return {"ok": True, "x": result["fe_xcen"], "y": result["fe_ycen"]} + except Exception as exc: + print(f"FE slit scan failed: {exc}") + return {"ok": False, "error": str(exc)} + + +def weekly_bsf_slits_scan(): + try: + result = centre_one("bsf", dev.lu_bpmsum, window_name="DailySetup", x_plot_widget="Plot_3", y_plot_widget="Plot_4") + return {"ok": True, "x": result["x"], "y": result["y"]} + except Exception as exc: + print(f"BSF slit scan failed: {exc}") + return {"ok": False, "error": str(exc)} + + +def weekly_ss_slits_scan(): + try: + result = centre_one("ss", dev.bcu_bpmsum, window_name="DailySetup", x_plot_widget="Plot_5", y_plot_widget="Plot_6") + return {"ok": True, "x": result["x"], "y": result["y"]} + except Exception as exc: + print(f"SS slit scan failed: {exc}") + return {"ok": False, "error": str(exc)} + + +def measure_bpm_positions(): + """Read all three PXII BPM systems into one structured result.""" + return { + "lu": compute_norm_lu(), + "ss": compute_norm_ss(), + "bcu": get_bcu_beampos(), + } + + +def save_weekly_results(results): + """Append weekly PXII diagnostics to the history CSV.""" + filename = bl.env.daily_setup_dir / "weekly_beamline_health.csv" + setup = results.get("setup", {}) + energy_result = setup.get("energy_result", {}) + fe, bsf, ss = results.get("FE", {}), results.get("BSF", {}), results.get("SS", {}) + lubpm, ssbpm, bcubpm = results.get("lubpm", {}), results.get("ssbpm", {}), results.get("bcubpm", {}) + edge_result = results.get("edge", {}) + + row = { + "timestamp": datetime.now().isoformat(timespec="seconds"), + "energy_eV": format_value(energy_result.get("energy"), ".0f"), + "id_gap_mm": format_value(setup.get("gap"), ".3f"), + "pitch_offset_mrad": format_value(energy_result.get("pitch_offset"), ".4f"), + "fe_x": format_value(fe.get("x"), ".3f"), + "fe_y": format_value(fe.get("y"), ".3f"), + "bsf_x": format_value(bsf.get("x"), ".3f"), + "bsf_y": format_value(bsf.get("y"), ".3f"), + "ss_x": format_value(ss.get("x"), ".3f"), + "ss_y": format_value(ss.get("y"), ".3f"), + "lu_Xnorm": format_value(lubpm.get("lu_Xnorm"), ".4f"), + "lu_Ynorm": format_value(lubpm.get("lu_Ynorm"), ".4f"), + "ss_Xnorm": format_value(ssbpm.get("ss_Xnorm"), ".4f"), + "ss_Ynorm": format_value(ssbpm.get("ss_Ynorm"), ".4f"), + "bcu_Xnorm": format_value(bcubpm.get("bcu_Xnorm"), ".4f"), + "bcu_Ynorm": format_value(bcubpm.get("bcu_Ynorm"), ".4f"), + "bcu_beamX": format_value(bcubpm.get("bcu_x_um"), ".1f"), + "bcu_beamY": format_value(bcubpm.get("bcu_y_um"), ".1f"), + "energy_offset_eV": format_value(edge_result.get("energy_offset"), ".2f") + } + + exists = filename.exists() + with open(filename, "a", newline="") as csvfile: + writer = csv.DictWriter(csvfile, fieldnames=list(row)) + if not exists: + writer.writeheader() + writer.writerow(row) + print(f"\nWeekly results saved to:\n{filename}") + return filename + + +def send_week_to_scilog(filename=None): + if filename is None: + filename = bl.env.daily_setup_dir / "weekly_beamline_health.csv" + msg = bec.messaging.scilog.new() + msg.add_text("Weekly PXII checks") + msg.add_attachment(filename) + msg.add_tags(["weekly-check", "PXII"]) + msg.send() + + +def weekly_checks(save_scilog=True): + """Run the complete PXII weekly sequence. + + This remains independently callable, while daily_setup() invokes it + automatically on Wednesdays after the normal machine pre-checks. + """ + print("\n========================================") + print("PXII WEEKLY CHECKS") + print("========================================") + results = {"ok": True} + + try: + results["setup"] = setup_weekly() + + if not results["setup"].get("ok", False): + results["ok"] = False + results["error"] = "Weekly setup failed" + results["filename"] = save_weekly_results(results) + return results + + except Exception as exc: + results.update(ok=False, error=f"Weekly setup failed: {exc}") + results["setup"] = {"ok": False, "error": str(exc)} + results["filename"] = save_weekly_results(results) + return results + + # Record BPM positions before moving slit centres. + try: + bpm = measure_bpm_positions() + results["lubpm"], results["ssbpm"], results["bcubpm"] = bpm["lu"], bpm["ss"], bpm["bcu"] + except Exception as exc: + results["warning"] = True + results["bpm_error"] = str(exc) + print(f"BPM readings failed: {exc}") + + results["FE"] = weekly_fe_scan() + results["BSF"] = weekly_bsf_slits_scan() + results["SS"] = weekly_ss_slits_scan() + + if not all(results[k].get("ok", False) for k in ("FE", "BSF", "SS")): + results["warning"] = True + + # Run the Ge edge scan. + + try: + filename = scan_ge(11103, mode="medium") + edge = ge_edge_analysis(filename, save=True) + + results["edge"] = edge + + # Weekly-check acceptance criterion + if abs(edge["energy_offset"]) > 1.2: + results["warning"] = True + results["edge_warning"] = ( + f"Energy calibration is {edge['energy_offset']:+.2f} eV off " + f"(measured {edge['measured_edge']:.2f} eV, " + f"expected {edge['expected_edge']:.2f} eV)" + ) + print(f"WARNING: {results['edge_warning']}") + + except Exception as exc: + results["warning"] = True + results["edge_error"] = str(exc) + print(f"Ge edge scan failed: {exc}") + + results["filename"] = save_weekly_results(results) + + if save_scilog: + try: + send_week_to_scilog(results["filename"]) + except Exception as exc: + print(f"WARNING: could not send weekly results to SciLog: {exc}") + + print("\nWeekly checks complete.") + return results diff --git a/pxii_bec/scripts/init_beamline.py b/pxii_bec/scripts/init_beamline.py index a698bae..39e25d7 100755 --- a/pxii_bec/scripts/init_beamline.py +++ b/pxii_bec/scripts/init_beamline.py @@ -14,16 +14,19 @@ class Environment: beamline_configs = { "x06sa": { + "name": "PXI", "package": "pxi_bec", "devices": "pxi-devices.yaml", "states": "pxi-beamline-states.yaml", }, "x10sa": { + "name": "PXII", "package": "pxii_bec", "devices": "pxii-devices.yaml", "states": "pxii-beamline-states.yaml", }, "x06da": { + "name": "PXIII", "package": "pxiii_bec", "devices": "pxiii-devices.yaml", "states": "pxiii-beamline-states.yaml", @@ -40,8 +43,9 @@ class Environment: ) cfg = self.beamline_configs[self.beamline] + self.beamline_name = cfg["name"] - # Import whichever deplyment BEV has already made available + # Import whichever deployment BEC has already made available package = importlib.import_module(cfg["package"]) self.bec_dir = Path(package.__file__).resolve().parent @@ -49,6 +53,10 @@ class Environment: self.device_config_dir = self.bec_dir / "device_configs" self.lut_dir = self.bec_dir / "macros" / "luts" + # Runtime files generated by daily setup + self.daily_setup_dir = self.bec_dir / "daily_setup_files" + self.daily_setup_dir.mkdir(exist_ok=True) + self.devices_file = self.device_config_dir / cfg["devices"] self.states_file = self.device_config_dir / cfg["states"]Pre- checks OK +Set energy OK +Measure flux OK +