diff --git a/.changeset/entries/e84e9f85faf0a0e85531a932ca56c8c5a45264cb97c0ee4c7127d52607b1d7ee.yaml b/.changeset/entries/e84e9f85faf0a0e85531a932ca56c8c5a45264cb97c0ee4c7127d52607b1d7ee.yaml new file mode 100644 index 0000000000..e4ca058635 --- /dev/null +++ b/.changeset/entries/e84e9f85faf0a0e85531a932ca56c8c5a45264cb97c0ee4c7127d52607b1d7ee.yaml @@ -0,0 +1,6 @@ +type: feat +module: x/subspaces +pull_request: 1138 +description: implement subspace specific custom fee tokens +backward_compatible: true +date: 2023-05-12T08:32:20.5983359Z diff --git a/app/app.go b/app/app.go index 61821af876..51dfbc8490 100644 --- a/app/app.go +++ b/app/app.go @@ -430,7 +430,7 @@ func NewDesmosApp( ) // Create subspaces keeper and module - subspacesKeeper := subspaceskeeper.NewKeeper(app.appCodec, keys[subspacestypes.StoreKey], app.AccountKeeper, app.AuthzKeeper) + subspacesKeeper := subspaceskeeper.NewKeeper(app.appCodec, keys[subspacestypes.StoreKey], app.AccountKeeper, app.AuthzKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String()) // Create the relationships keeper app.RelationshipsKeeper = relationshipskeeper.NewKeeper( diff --git a/client/docs/statik/statik.go b/client/docs/statik/statik.go index 4946636121..0f60f25557 100644 --- a/client/docs/statik/statik.go +++ b/client/docs/statik/statik.go @@ -8,6 +8,6 @@ import ( ) func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00 \x00swagger.yamlUT\x05\x00\x01\x80Cm8\xec\xfd]w\xdc8\xb2\xe7\x0b\xdf\xfbS\xc4S\x17S\xae\x19[\xae\xee\xea\xf5\\\xf8\x9c=\xeb\xb8mU\xb7f\xdc\xb6\xb6,\xf7\xac>\xb3\xf6RS\x99\xc8\x14\xc7\x99d6\x89\xb4\xad]\xbb\xbf\xfbYx#A&^\x02H\xa4\xa5]\x15qS.%\x19\x04\x82 \x08\xe2\xffC\xa0\xffR\xad\xd7\xac{ \xdf\xff\xfe\xec\xc7\xef\x9f\xd4\xcd\xaa}\xf9\x04\x80\xd7|\xc3^\xc2\x1b\xd6o\xdb\x1e\x9e\xc3\xd5\xf9\x87k\xa8\x9a%\xac\xaf._\xc3\x9f*\xce\xbeT\xf7\xb0l\x17\xfd\x13\x80%\xeb\x17]\xbd\xe3u\xdb\xbc\x84W\xea\xd8\xba\xe1\xac[U\x0b\x06\xab\xb6\x83\x9eW\x9c\xc1?\xf6\xac\xab\x998\xe33\xebzy\xf4Og?\x9e\xfd\xf8dW\xf1\xbb^\\\xf6\xc5R^\xf0\xc5\xaekW\xf5\x86\xf5/>\xff\xf4\xa2\xda\xed\x9eo\xea\xe6\x93<\x00`\xcd\xb8\xfa\x07@\xbf\xdfn\xab\xee\xfe%\xfc\xf7\xe7\xfa/\x00\xafv\xbbM\xbd\xa8DY\xde\x8a\x93\xccE\x81\xdf1\xa8\xc6\x1f{\x90>\xa1\xea\xfbvQW\x9c-\x81\xb7\xf2\xa0u\xfd\x995O\x06\x87\xfb\x9eu\xcf\xa0^\xc1\xaek?\xd7K\xb6<\x83\xf7\xfc\x8eu_\xea\x9e=\x83\x9a\x0f\x17\xa86\x9b\xf9E\xd45\x06W=o;\xb6<\xd3\xff\xdf\xeeX'\x8f\xbaX\xbe<(\xb6>\xa6c\xfd\xaemz\xd6\xbf\x1c\x9c|\xff\xfb\x1f\x7f\xfc~\xfc\xdf\x83\xe8\xf7\xfb\xc5\x82\xf5\xfdj\xbf\x19\xce>\xb3\x8e\xee\x17wl[\xd9\xe7\x03\xf0\xfb\x1d{ \xed\xed\xffa\x0b>\xf9a\xd7\x89B\xf2\xda\xbe\xbe2\xeb\x86\xd8\xa6\x83\xeb/5\xe7\xe2 \xfaS\xcd\xff\xbc\xbf}\x06\x8c/~\xf0:\x14\xf7R\x9c[\xaedV\xd7\xe0\xb2\x8f\xfa\x82\xd06\x07\x0f\xaf]~\xe0\xd5\xda\xd4!\xe8P\xf7\\\x81z\xca\xbe0\xd2b>\xc8\xfeR\xb6\x0e\x16o\x13\xc1X\xb0f\xbf\xf5\x87\xf39\xbc\xba\xbc|{\xf1\xfa\xd5\xf5\xc5\xfbw7o/\xde\xfd\xcf\x9b\x0f\xd7\xaf\xae\xcfo.\xde]\\_\xbcz{\xf1\xff\x9e\xbf\xb9\xf9\xf8\xee\xc3\xe5\xf9\xeb\x8b\x9f/\xce\xdf\xa4;\xfa\xeb\xf9\xd5\xc5\xcf\xe6\xef\x1f\xae_]]\x1f\xed\xe5\xfc\xea\xea\xfd\xd5\x91>>||\xfd\xfa\xfc\xc3\x87t/\xd7\x17\x7f9\x7fs\xf3\xfe\xe3\xb5\xe7\xd4%[U\xfb\x0d\x7fY&\xb0\x93\xce=\xd0\x96S\xef\xa3xS\x04\xda\x15\xc0]\xd5\xc3\xff\xd9\xf7\x1cn\x19k\xa0nj^W\x9b\xfa\xdf=\x9d\xa04d\xe0U\x130\x05\x18/\xd4\xf3\xaa\x13\xaf\xe1[V7k1B\xa8W\xf5\xf1\x97\x93mer1\xd6u\xe25\x0c\xcb\xbdxj\xe4\x13\xa6.\xa6\x1f\xfb]\xd7\x8a\x17\xe8\xb1\x17\xd6\x0dlr\xe9i\xd5\xacW\xf5\xe6\xf0u\x19\xbf\xdc\xd0\x12'\xd7\xe0\xf5\x96-\xa1\xdds\xf1*\xdb0\xf8R\xd5\\\\U\x0c\xc3\xe6uu^\xb4\xed\xaa\xc5\x86\xddt\xec\x1f{\xd6\xf3HG\x15h\x92\xef\xa5\x9f+\xe5\x06:\xb6\xebX\xcf\x1a\xae^\x80\xda;\xf0\xbb\x8a\xeb\xd0\xb0\x06\xb6\xd5\x92y\xfd\xe9\xe1\x99*\xdei\xdf\x91\xf5\xb2\xc0\x0bh\xd5v\xdb\x8a\xbf\x84}\xdd\xf0\xff\xff\x1f\xe2o\xaa\x8b7b\xb4!\xaax\xf1\xc6t\xfd:L\xde\x93\xf5\xbdR}\xc4\xcd\x83\x14[\xdd\xe6\x0f\xb2\x04\xaa\n\xaa\xf8U\xa3K\x07\xaat^O\x8bj\xb3\xb9 \x8d\xa2\x00\xd5\xdc\x84\xbd\xae6\x1b\xc7`K\xfce\xdf\xab\x11\xfe\x8eu\xa2\x86\xe2\x87\xa0+]\xf6\xd8\x0d@59@6;\xc0\x0f\xcf\x00\x7fC\x01\x1d>a\xf3\x91\x9c\xe86\xc61q\xfb\xa5a]\x7fW\xef\xa0\xbfk\xf7\x9b@\xef\xac\xed\x96!zrl#\x80SV\xfa\x8e}\x05\xd6,\xda%[\xca\xd2\xa8f#\xfb'UWQ\x17\xdd\x8a\xa2\x0ee\x9d\xef\xe7#\xca'\xd1\xf3\xaa\xc5\xa2\xdd7|\x8c\xb3\xff\xa9\xd9\xd4\xac)\xf4\xc8\xe3\x02\xf5Z^\xf1\xe2\xcd\xbc+\x1f{+U\xa6\xa1O\x8f\xdep\x11\xcb\xa1G\x0fu\x13\x1d\xeb\xc5\x90\xca\xe3P\x17\xff?\xfc\xc5\xd7}\xc2V\xbe\x07\xbbv\xab\xfbV\xe1\xd4\x94\xdd~-\x9ey\x1d\xbdo6\xf7P}\xae\xeaMu+\xde\xadwL}6\xa8\xf9\x8d\xba\x07\xf5f\x0e\x0f.\x11=\x06\xa6\xb7\xd0\xa3\x07D\xaf\xf9A\x1di\xdf\xb8\xca\x9e'\x88\x0e \xb4\xb7x\xb9\x01Yva\x9f\xab\xcd>\xf8\xa1\x07\xf8\x16\x0c\xe8V,\xec\xcf\xec\xebs\xf3\xa8\xcbR\xd8\xc3\x10\xe8\xebu#\x86\xa1\xf7\xd1w\x04\x8c\xdf{\xc1\xe3\x84\xc7\x8a\xef\xbb\x87\xaf\xedP\x92\xd9\xc0k\xd7\xb5\xcb\xfdB\xd6:\xeaO\xf8\x18\x06\xce\"z\xde3VU\xbda\xe1\x0eJ\xd5\xe2gy\xe0\xb4}\xaa\x93\x1f\xa8m\xcao\x84\xf2w\xeb\\\xb8U\xa1\x9fL,\xc1\x97\x9a\xab\x17\xac\xa8\xf5\xbes\x87t\xd11\x19\x86\x1b1\xc4?b\xc6\xcb\x8c\xf0\x96\x15g\xcf\x85\xafp\xbf\x1ahb\xafu\x89\xae\xeb-\x9b\xbf\x16\x84c\xa8\x9b\xf9\x84\xda\x97\xc0{AV\xd03P`_wu\xf7\xc8\xaa\x7f>\x94 \x1f\x00\xaf\xb3/\xf5f\xa3j\xe9*P\xb80\xb3\xd9c\xc7\xf0W\x0c\xc8\xd5\x0d\xe0-T\xb0`\x0d\xef\x02\xdf\xf3\xf6\xa0e\xfa\xcb\xaeZ\xd7\x8dgx\xaa\x0by9\x1c\x02K\xb6\xaa\x1b=\xf9>\x9e9LL\x1fz\x08=\xc6\xe1\x87\xb7a_\xf9\xcd'v\xefn\x19\xd1vaZ\xc5\xed=w7\x88\xc9L\x8cw\xacaJa>\xe5\xc4?y+^+\xbb\xaa\xd7\x9f \x97\xd5\xda|\x16\x9f\xa9\xdf=\xce\xfe\xb1g\x9d\x1aD\n\xb7\"\x80\x0c\xb6m\xcf\x81\xadV\xf5B\x8c\xb56\xf7gp\xc1U\xdb\xb9e\xc0\xb6;~\x0f\xf5\xca\xd7\xa2\xefX\xc7\xa0\xea\x184-l\xdb\xce\x8c\x81z\xd7\x80\x87\xb7\xbc\xda\x1c\x19\xcc\xc07d\xec\xe9\x92\x97\x97Q\x94\xffh\xf6\xdb[\xd6\x89f\xac\x8bl\x8d\xc2\xbc\xf5\xb5\x03-\xc7\xd57\xd2\x99o\x18\xfe\xa5\xea\xa1g\xfc\x19\xd4\xbc\xd7\xe3\x82\xba\x87}\xa3\x1a\xf1\x12Z#\xfb\x1c\x9c\x1f\x9f\xa5SEQ\xad^\xd5J\xdd\xaf[\xb6\x14\xef\xe5\xbaQ\xc2\x9ay0`\xcb\xfa\xbeZ\xb3^\x0c1\xdd\x1d\xc2\x1ds\xd5c\xd1v\xca\xc7R\xbc\xa2\xcd,\x8b\xf6&\xdf\xf7\xf2\x13\xc6\x8e\x8c3\x1c\xe6\x8c\x0f\xedv,\xf7/\xde\xceK\x8e\xd1w\xb2\xf7\x86?V\xddp\x93\xfe\x05~\xf7\x7f\x85N\x9a\x84E\xb6\xef\x7f\x81\xdf;\xcf\xf8\xe7\xe4\x8f\xbe\xd6\xf3\xaf\xe2\x89\x99ki\xc3\x05\x0e\xe6\xa0\xf4\xdf\xf5\xcc\x92|\xdcf\x0eE\xb4\xe6\x01\xe2-\xac\x19\x9f\x7f\xdci=Q|/W\xa3\x9e\xb3\xefY7\x9cn\xa6\x86-\x7fS\xf1\xae\x81}\xc3\xbe\xee\xd8B\xc4Q\x8eAN\xa9\xe1y\x069\x81\xa7[\x0c\"}'\xd4\x0dgk\xab\xb2\xc6L_P7\xfc\xa7\xdf\xcf~\xd5\xad,\xa9\x0cZ:\xf3\x9d\xf3m\xb5Gq\xfa\xcd\xbe\xf3\xf4\x93\x88\x9e\x12\xd3w({\x05\x1f\xaf\xde\xbe\xe8X\xdf\xee\xbb\x05S\n\x9b\x1cI\xee\x9b\xfa\x1f{\xb6\xb9\x87z\xc9\x1a^\xaf\x8c\xd8-\xae\x0d\xad\xafo\x04\xf5\xdd\xca:3\xad\xef=n\xd7\xb5\xbc]\xb4\x1b\xb8\xdd\xafV\xac37\xed\x0c\xae\xa5r)\xeb\x06\xdb}\xcf\xcd\xb0\x03*\xff\x10|\xc3\xaa\x9e\xfb\xaf\xd56\x0c\xbe{\xf1\x1d,\xee\xaa\xaeZp\xd6\x9d\xc9\xb9\x99M\xd5s\xe8\xd9z\xcb\x9a\xe1\x83\xfd\xe3\xd5\xdb\xef{\xd8U\xfc\xce\xebM\x16jx\xe8\xfdW\x95\x03\xef\xfdfs\x0f\xff\xd8W\x1b57\xafD\xc1\xd5\x18\xc9\xa7U\x0fu`\n\xe7\xef\xa2(/\xd6m\xbb\xde\xb03\x19\xb3\xdb\xfd\xea\xec\xcd^\x0d\x10\xff\xfe\x83\xaa\x89t;\xce'\xd5\xfeo\x9a\n\x16U\xd36\xf5\xa2\xda\xc8g\xc8\x7f\xe5\xa7\xecl}\xf6L\x84Vv\xfa\xdf\x9d}'\xde0M\xcb\xa1Z,\xd8\x8e\xb3\xe5\x0fgO\xfc\xa7_\x88\xcf\xbfj\xc1\xeb\x05{\x06\x9cU[\xf1\x8e\xd8W\"\x1c\xbb\x8e-\xda\xed\xae\x16/\xd9F\xf7\x92\xb7uS\x1dt\x93\xa3I\n\xe2~'\xdb`%;\xc9{\xff\xa5U_\x075\x17}\xea\xbe\x97\xc3e9\x91\xd46\\\x8cx\xda\x15\xbcj\xee\xcf\xe0\xcf\xed\x17\xf6\x99u\xcfD \xbc\xce>^\xbd\xed\xf5`[\xb8\xf2\xbc \x95\xc9\x1e\x94\xc1\xdf\xef8\xdf\xfd\xfd\x99\xfao\xff\xf7g\xd0vbh\xa4~}&[\xe3\xa2j\xa0\x95Og\x15Riz\xc6a\xbf\x83J\xd6=p]\xd6}f\xfa\x0bp[\xedz\xd5\xb4d\xc9y;\xbct\xe5\x80\xa3\xe6\x92R |.\xad\xda\xcd\xa6\xfd\xd2\xbf\x0c\xdc\xdb\xff\n\x17\xab\xb1F\xa2Y\x18\x8ae\xa8\xb4\xfe\x12\xddo\xd9\xd2=\x14\xd0\x8e^5\xf0\xe7\xeb\xebK\xf8\xd3\xf9\xb5\x11\xcb?^\xbdU\xcf\xd8}\xcd6K\xa8\xbcg\xff\xef\xf9cq}\xbfc\xff\xf6\xbf\xff\xcd{\x02\x98\xf1W\xa3\xdb\x9b~\x8d\xc8;\xa4'+\xa0j\xd4+\xcc?]\xf7_\xed/\xa3^\x8e|+\x1135\x0e_T\x0b\xd1\xb7\xb4\xed\xa7\xfdn\x18\xb1\xdcV}`\xaaZU6DG\xd1\xcc{)x\xaa\x95\\\xf5\xb5\xa7\x1em?R\xb3\xad\xd7w\x1cn\x03\x9d\x92\xac\xb4\x9c\x81\xaa\xb7\xbb\x0d\x13/Y5\xa2\x1dF\xb1=\xdbV\x0d\xaf\x17\xce\x0f\xc5\xc8L.b\x08\x14\xfd\xf6\xc6\x8f\x92\xfe\xa2\x90\x05\xa8D\xa1\xea\xa55\xc09\x18\xc7\xe8\x97{u\xdb~\xf6\xb7i\x1d\x02\xfd(\xb8\xaa\x8f)\xd9\xdf_5\xf7\x7f\x1fge\xaa\x06\xaa\xee\xb6\xe6\x9dx\x88\xfd%t\xba2\xef\x88j\xd3\xea\xa6\x07\x95\xfb\xd6\x8a\xdeY\xbehT o\xa7\xc3\xc2\xd9\xf0o\x18\xd5y\x9a\xe6\xa5yp6\xf5\xad,\xb6~\x8f\xf4\xd0\xefw\xbb\xb6\x93o\xf0]\xb5\xf8\xf4b\xdf\x88\xff\x88\xf7\xb6j\x17\xee'H\xbf\xe8\xfd\x03\x9bv\x05{\xae:6\xd3=\xf4\xa2c\xad\x96\xcbZ\xf5\x15\xb0f\x0d\xeb\xe4'\xe7\x96\xf1\xbbv\xa9q:\xf7\xcd\x14\xe5Q\xb7\xd0}\xbd\xf3\xaf\x95h\xfc\xf0\xbb\x97p)\xca/\xfa\x05]\x95j\x08z\xdd\xc0\xeb\xff\xf6\xdf\x02\xaf\xc9\x9f\xdb\x16Vm\x0b\xff\x02ggg\xfe/_Q\x98\xaa\xb9\xf7\x1fP5\xf7g\xa2\x18?w\xed\xf6\xe9\xaam\x7f\xf0\x1fzv\xe6\x7f\xff\xd5+x*\\}\x94\x15\xb9n\x9f\xfe\x17\xe1\xeb\x87\xe0\x87|\xc8\xdf?\xc3\xb1\xfb}$v\xff\xa3\xfa\\\x15\x0b\x1e\xfc\x8b\x1c\x1b\x8a\xab\x14\x88P\xdd?\xfd\xb9m\xcf\x16\x9b\xaa\xef#\x01RE\x14'\xa9:Z'\xfa\xcb\x10\x89\xdcO\x91\xc8]\xde\xf3\xbb\xb6 \xc4N\x15\xea\xe7\xb6}zvv\xe6\x7f\x19\x0cq{\x1a\\\xe0\xf6~\x1c\xc6\x99\xb7\x91\x9a\x00w\x8f\xa2\xf5\xac\x9b\x18\xe6\xb8/\xf5\xbdc\x88\xf6b\xb5\xdfl\xce\xe4\x0fb\xf8\xfb=T\xd6\xdbS\xbcYE\xdb\xf2\xbdkT\x9bs_lxU5\x9b{\xf3\x9dz0\xf90\x0c\xbb\xa1ZI\xf8\xd8s!9/\xf2\xfd\x8b\xef\xdd\x97\xd2\xefXSd\xf9\xf5\x0cL?#\xdf\xad\xda\xf6\xec\xb6\xeade\xbf\xbe\xb8?\xfb\xf7\xefT\x14\xe5\xb7\x9c\xd3\x9f\xff\xd3V\x16\xf5;\xe1C\xbc^\x9d\x87\xfc\x8f\x0f\xef\xdfy~\x12\xb7Z\xfc\x9dz\x02oUw=\xbf\x91722i\xafO\x10m\xcf\x1c\xef\x9e\xb2\x97\xe6y\xbc\x85\x85J\xf5\x9d\x8c\xe5w/\xe1;\xd7\xc39\x0d\xc3\x99\xaa\xe5w\xcfB\xfed\xfd\xdeU[\xe1\xf3\xffVU\xf8\xef\xc1\x13D\xfdf\xc7\xa7V\xf2b\xa5\xbf\xd3\xa6mM\xb5\x86\xba\x87/l\xb3y\xfe\xa9i\xbf4\xb2;\xb9\xabz\xa8`\xb1\xefy\xbb\x0d\xfd\xf8\x88\x1b\xd5\xb1~\xc2\xa3\xcc\xe7Y\xe5\xad\x9eF\xd5\x00\x0d\xd6lv\xcf\xaanq\xa7N\xb7{\xba\xbayy \xaeu\xec\x1f\xfb\xbac\xcb\x97\xb0\xaa6\x13I\xd59a`B\xe0\x06\x13\x90\x91\xb0&\x03\xe7Z\xe0\xc1\xe2%\xcf\xaa/\x03\xeaLc!\xe2p&\x02\xbdT\xef\xf5z%\xef\x95\x9cZ\xdd\xf4-\xf4\x8c\x9f(\x1ef\xc1\x142\x18\xc3r\xa7Y\xf5\x8d\x1b\xa8\x9b\xbe^\xb2\x83\x90\x1c\x1b\x0d\xdb\xd7\xe9\x832\x92&g\x9f\xd8\xbd/43\x86CC\x1b\x95\x1ejt\x8c\xef\xbbFI\xf3\xb6J}6\x10\x1er\xa6u=\x9b\x92\x9450t\\\x88\xda\x90$i\xdb\xc8\xa9\x98v\xb5\xea\x19\x87\xb6\x83iqa\xf2l\x95\x8e\x96g\xde\xcd\x11DU>d\x13\xd3\x95\x91\xa1l\xf6[\xd6\xd5\x0b\xf37\xf9VZT\xcd@RK~V\x07~\xdf\x0c\xf3\xbc\xb3\xcf\xbb\x0b\xe9m#\xba\xa8!\x84jft\xdf\x8bP\x7fb\x89\xf1\x9c\xba?qpg\x0c\x8c#\xbc\x9bz[c\xa3+\x8f5p\x91\x0f\x8dQ\x1a\x80\xdd\x82\xf9\xc0;O\xbc\xed\xd4\x8c\x9f\xfd\xa7\x8b\x15l\xd8\x8a\x1b\x94H\xb3E\xe6\x1bJ\xca\x17\x1a\x99mu\xe4\xc4\x07\x19\xab\x16w\xe2!\x7f\xc0(\xda\x80\xcfx~(\x96\xd6\x19\"\xa2\xb2\x85\xb6\xc0\xbb=\x93\x8cG\xdd,E\x97\xc5\x06!\xd3\x10\xe3\xe2@\xc7\xf2\x87\xbaYl\xf6\xcbY_X\x81\x06\xfaW\xce;&\xb9\x04K\xe0\x10C\x1c\x8b\x93\x9bu.\x1f/\xfa\xd9\xdd\x9aUAv\xb7\x1d\xeb5A\"\x1f\xaf\xf1y\x14\x8f\xdc\x99~\x9a\xeau\xd3v\xf3\xde\\?\x8d\xd3K\xa8\xc8\x1c{co\xdbv\xc3\xaa&t\x03;\xf6\x99u=\xf6M\xa6\x8f\x9e\xdf\xb8\xda\x02\xc4:\xe6~\x12&~\xc45\x98\xa2\xa5\xdan\xc9\xba\xf9\xfc\xf0\x87\xbaY\xb0\x97\xb0h\xc5\x90\xe9y\xbf\xfc\x04?\x9e\xfd\xe1\xa7\xa2\xd1\xe0\xd5z2\xd8\xfbW\xed-\x98\x0c\xe1\x85Zl\xd1\xbf\xf8eX \xf2O\xe5\xc4\x95 \xe1?\xbc \x12\xfex?\xac\xeb\x18\x12\x19\x80\xe8V7\x87t\x93\x86\x9bT\x82\x04\xe3O/\xfa\xa8Qy\x0d\xc6\xab\xe9\x83\x1fu\x82\x03\x1fc\x94\xc5\xa7\xfa\xd3\x14D\x15\xb2\xe3R\x14\xf8WU\x15LO\x10\x0c\x0cD\x83\x03\xd8\x95o\xd1X\x01\x14NJ\x10OI\x90R\xa6\xe0z\x8d\xc2\xc9\x08b\xa9\x08\x02\x89\x08\x92\xd2\x10D\xeb\x1fJA\x90\xbap=\xd5MB\xfa\x01\x9c\x8fP\xf2\x01\x9c\x87\xf0\xea\xb0\xf8ro\xe7\x89%\xd3\x0e`$\xed\xf4;\x17I9\x90\x9cp\x00\x19\xec2\xe9\x06p\x17+\x9el\x00w\xd9B\xa9\x06\xe2-\xafd\xa2\x01L\x9a\x81X\xa7\x99\x99b\xc0\xbf\xe2\x82\x87\x13\x0c\x14x\xcb\x85\x16\xecF;R\xc0\xad\xad\x008\"\xa9\x00>\xa5\xc0 \x8a{d2\x01\xc4*\xf2X\x93\x82\xe44\x02\xe1\x8c\x14\xa0?\x07BI\x04\xa2\xcd\nPM\x0b\xb0\x83(\xc0\xde<@\x06\x0c\x92\x13\x07\xc0mx\xc9,D{d\xdc\xed\x86SU\xb5`\xba\x80\xbcd\x01\xd8T\x01\x88D\x01\xa8\x00a\x82S2E@B\x82\x80Pz\x80Xr\x80B\xa9\x01\n$\x06\x88\xf6\x02\xf1\x1e \x9a\x12\xa0dB\x80hy\x01Uf\x88\x01\xa4\xcaPm\x14\x90\xed\x14\x8a&\x01\x88\xa7\x00@&\x008i\x1d\x8f_\xfa\x8f]\xf8\x1f[\xf6_h\xd1\x7f\xc1\xf6\x87X\xee\x9fzo\x8eY\xea\x8fX\xe8\x1f-\x0en\x95{\xac!\x15]\xe0\xef_\xde\x8fZ\xdc\xff\x8d\xaa\x9c\xb3\xa8_\x8a$\x1e\x7f\x9e%\xfd\xa1b\x14^\xce\xef[\xcc\x9f\xb2\x88v\x9c\xb8\x1dV\xd3\x1e\x96\xca\xcc\xb3\xcf\xfc\xe9Nt\xf6W\xf3y&\x17\xe4\xc8nE-\xab\xad\x9a\xc3yg\xa5\xf3U\xe3\\\xf3\xe0\x8b\x96\xd4\xce~\xa5%\xb5\xd8\xf9+ZRKKj}G\xd2\x92Zi\xb4\xa4\xf6\xd0hI--\xa9\xf5\x19-\xa9\xa5%\xb5\xd2hI--\xa9\xa5%\xb5\xb4\xa4V\x19-\xa9\xa5%\xb5\xb4\xa4\x96\x96\xd4\xd2\x92ZZR;5\xff\xa7--\xa9\xa5%\xb5\x1e\xa3%\xb5\xb4\xa4\x96\x96\xd4\x96YR;\xd01\x96\x97\xd0\xe7'\x9ep1\x9c\xbeZ\x14\x0b\xdcEPO\xe7^\xeb\xe6\xe5|\xf2}\\H\xc2\xbb}d\xb9T\xde2\x12\x85\x0f\xa9\xf3\xd2V\x8e\xbc\x97g\x0e\xabF\x0c\xf6\xa9\x1c\xca7\x8d=Q(\xaf6\xde\xd7q\xfeW\x07\xc8\x90\xa3V\xee\xdc\xc9\x02T1\xee\xd4x\xf0\xd1.2\xb1\x83o\x1b\x7f\x00\xdd\xed\xa8m4\x11\xd8a\xd4Gl\xa1E\xc4AR\x86|\xd9<\xde\xe8U.\xbe\xa5/f\x1dT\xac\xc6\xee\xaeQ\n\xd7\xf2\x06\x1f\xde^U\xd4Wj\xdd=\xeb\x87y\xb3\x83l\xd2\xad\xdd\x8c\x8dQ\n~J\xc1\x8f\x0e&\xa5\xe07F)\xf8\x9d\x96\x9b\x82?\x1cp\x17C\xa4\xde\xc9\x08~\xe8p\xda\x81[\xcb\x16f?\x1d\xf0CsxH\xf5\xa1\xe3\xf3E\xc8\xd0\xecWB\x86b\xady4B\x86\x08\x19r\x1b!C\xd2\x08\x19:4B\x86\x08\x19\xf2\x19!C\x84\x0cI#d\x88\x90!B\x86\x08\x19RF\xc8\x10!C\x84\x0c\x112D\xc8\x10!CS\xf3\x7f\xda\x122D\xc8\x90\xc7\x08\x19\"d\x88\x90\xa12\xc8P\xb1\x14\xf4J\x1e\xc7\x82\x82H\x16`\x8a\x16x\xca\xca\xe1Y\x80A\xb4\xe0\x08L\xcb\xebP\x1c\x18B\xb5\xa04\xae\x05Qd\x0br\xb1-\xaf7\xf5\xfd\x1b\x9e\n@\xe0[\x10F\xb8 \x0b\xe3\xf2\xba\n\xe2]\x90\x8bxy\xbd\xa9ad`\xd2\xad\x1c\xea\x05(\xdc\x0b2\x90/H\xc3\xbe \x07\xfd\x82d\xfc\x0b\xc2\xdd\x08D\x90\x1cH\xc0r\xb0(\x18\xe4\xe0`\x90\x8a\x84A\xb8\xe29h\x98\xd7\x99\x05^a\x1f\x19\x1c\"\x16| \xe4\xbe\x18\x01L\x0c\xca\xa2b\x10\xc3\xc5 \x8c\x8cy\xcf\xc9E\xc9\xa0`\xdbM@\xca +\x83\xc0\x08%\x96\x85\x03L\x9e\x18\xf760\xb2\xfd~\xe5\xac\x13\xdd\xa2\x92E\xb5b\xe6\xf5\xa7f\xfa\x16m\xd3H \xdf\x1f\xdba\xab\xa27R$\x86\xd0FW\xbb\xaemW^\x91.Z\xc7Kq\xfa\xb4\x86\xe3\x96\x81\xd2\xb7\xbb\xb2\xa1g#\x10\x84B\xaa\xe1n\x7f\xeb\xcfw\xa3\x0cq%@^\x0d\x90:%\xe0'\xc3 a\x0e\xc9XQ\xcd\x122uKH\xd1.\xa3\x9eFm\x13\xa3_Bi\x0d\x13rtL(\xa9eB\x92\x9e\x19ue\xa7VH\xd44\xa1\x8c\xae e\xb5M8B\xdf\x84\x0c\x8d3\xeaP\xbcRSuN(\xaauB\xb6\xde X\xcd3\xeae\xaa\x89buO(\xad}B\x11\xfd\x13\xf25P(\xa9\x83B\x92\x16\x1au5I\xe9\x80\xd3C\xe1t\x9a(\x9cX\x17\x85\xd3i\xa3\x90\xa1\x8fB\x8aF\x1a\xf5d\xa7\x80\x00\xbcN\n\xa9Zi\xd4\x9b\xec'R\xf4R\xc8\xd3L\xa1\xb4n\n\xc9\xda)\x94\xd2O\x01\xa3\xa1B\xda\xd0\x11\xa9\xa5B\xc6(3IS\x8dz\xe3&\xc5\x04RW\x85\xc4\x12'\xea\xabA_\xd3\xd1,Rc\x85T\x9d5\xe8 \xa1\xc1Bi\x1d\x16\x12\xb5X\xc8\xd4cc\x0e\xb1\x9a,\x14\xd5e!M>\x04\xac>\x0b\xe9\x1a-`D\x89#\xb4Z@\xfa\x8fLX\x16\xd4m!;\xf8i\xfa- k\x9e\xa9\xe3\xc21Z.\xe0#^D\xd3\x854]\x17\x12\xb4]H\xd2w\x01\x7fS\xf2t^H\xd6z!\xa6\xf7BI\xcd\x17rt_8B\xfb\x85t\xfd\x17\x907)\xa6\x03\x03\xd6O\x9a\x1e\x0c\x855a\xc0\x163\xf2\xc4\xa6\xeb\xc3Aw\xb7\xf78\x8d\x182u\xe2\xa0C\x9d\xea#\xaa\x15C\xa6^\x1ct\xc8\xcd\xdc^P3\x86\x0c\xdd8\xe8lL\x05\x82\x98VA\xea\xc7\x10\xd7\x90\xa1\xac\x8e\x0c\x18-\x19\x12\xf5\xe4\xc8\xfd\xb7\xd2\x89\x045e\xc8\xd0\x95\x83\xce>^\xbd=Cj\xcb\x90\xa9/C\xba\xc6\x0c\xb9:3di\xcd\x10\xef\x9a\x00\xa1\xdbA\x82v\x97\xa2;C\xae\xf6\x0c9\xfa3\xc4\x83QT\x87\x06\xac\x16\x0d\xa5\xf5hH\xd0\xa4!K\x97\x8ev\xd2Qm\x1a2\xf5i8R\xa3\x86\xc2\xed=Q\xab\x86d\xbd\x1a\"\xa3\xa9\xb8\xa6+\xecr\x7f\xfb?\xd9\xfd|\xb7\xa4\xdd\xfevS/dV\x06ke\xb0\x91\x9bc\xedK\x8a\xe1\xe2\x9e\xa9v\xc3#\x03\\1\xe6Q#\x80AQ\xf6\x1e\xdf\xd7\xeb\xa6\xe2\xfb\x0e\xb1\xd0\x80$\xdd\x80\x91\xa4K\x92\xee\xc4H\xd2\x8d:$I\x17H\xd2\x9d\x18I\xba$\xe9:\x8d$]e$\xe9\x92\xa4K\x92.I\xba\x11\x87$\xe9\"\xf5\x04\x92tI\xd2%I\x97$]\x92t\xa5\x91\xa4;1\x92tI\xd2\xb5\x8c$]\xb7\x91\xa4\x1b1\xac\xc4E\x92\xaem$\xe9\x86\x0e$I\xf7\x9bI\xba\x1f\x8cF:Wu\xef\xd8\xd7\xe7\xacY\xb4\xa2\xb9\x0fBjl*G\x9cx\xb9\xa9\xea\xe6\x9a}\xe5\xea\xf5\xe3=~'\x8e\xbb\xe1\xec+\x8f\xcb\xb3\xd1\xc9.\\e\xc7\xa2\x05*\xab^\x9a\xa2\xcar\x1e;\xe8P&\x00\x97\x93(z\x06?\xaa\xf1\x0c\xf1v\x1e%WA\xdf,\xdafU\xaf\xf3\x97_\xcbD\xd9\xaf\xa5\x93\xe9\xcbQ9\xd6Mr\xbe\x04\xdb\xeb.\xb44\x1b\xa1\x9ec\x94s\x99\xda\xfd\xb8V\x80\x9d\x0d\xf4\x06\xc7^\x83\xaf\x96\xde\xcb\xc1\x89\xec\xfb\xbc\xde\xe4\xb8\xb3n>\x89\x97\xc0\xb6Zz\xe6+\x17\x1d\x93!\xbf\xe1\xb5\xbf\x9e\x88:\x9a\xe9\xdce\xc5\xd9s\xe1+\xbf\x89\xe8\x12]\xd7\xdb\x83'_8\x16\xdd\xba\x062L\x0d\xef\x02yjo\x19kT-\x9do\x9fpy\x86\xbc\xee\x8e\xfb1\x14M\xbc\xb3X-\xa7\xf8\xab\x06\xea\x86\xb3\xee9xR\x07/\xba\xb6\xef\x9f\xebv\xeb<\xc2\x91\x9f|\xdcW\xc0\x91\xb8]\x95\xffr\xdcg\xc1\xce\x85nm\xbf`r\xca\x1fz\x08='\xe1'\xc4l\x1f\xe3n7\xd1V\x13\x95\x00B[\xdc\x8c6lb\xa3w\x12\x19\xf6\xb3\x81]\xd5\xf7JvT\xbb\xde\xfcc\xcfz~\xa6~\xf78\x93\xbb\x1fH7\xa1\x0do.\xb85\xb2\x91{\x8b\xf8^>\xa2Y0)\x826-l\xdb\xcel\xbc\xe1T[\xe4\xde\x17G\x06s\xb6\xb9\x88m\xb1go\xd8z\xc3\xb7\x17\x8b%\xe2\xf9\xeak\x07\xda\xde\xc5\xc4s\xf8\x97Jny\xf1\x0cj\xde\x1b\x19\xba\x87}\xa3\x1a\xf1R)g_jG\xb3\x8dw\xaa\xf6NG\xaaV\x93\xfd\xd0\xea\x06\xd6W\x97\xaf\x87\x07\xc3\x0c\xe3z\xf8\"\xee\x99\xeb\xf6\xb8\xdf\xa0\x8b\xb6S>\xe4\xe8\xb5S\x95\x1f\xc6\xe1b\xc0-E8;2\xcep\x983>\xb4\xdb\xb1\xdc\xc1q_\xc7v\xb2_\x83?V\xddp\x93b_f\x93\xb0\xc8\xf6\xed\xfb&\x9b\x0e\xe1\xc2\x0f\xa3\xdc\xe7c\xdc\x06c\x12w\xb5\xdb\x8c\xfa\x7f\xf9Y\xb2j]Y\xd3\xa4\x8b\x17\xd6&\x1f\xe2\xee\xa8\xe9\x98\xf1a\xd1\x93H\xf6C2\xddG\xa3\x81}\xa3\x90\x19\xb6T\xc8\xc2)\xb7\xd3\x90\x17p\xf4\xca\xfe\xa7U\x8c\xe4|'\x88w\xc7\xda1\x9dd\x9e\xed\xba\xe1?\xfd~\xf6\xabn5IeX2^\xd5\x9bG\xb2\x0d\x08\x8f`\x89\xd1\x9e\x0f\xd3\x17(K\xc5\x0f\x8d\xfe\xe9u\xc8\x91\xd8!\x1a7\xc4\xec~\x11\xc1\x0cS\xf1B\x89\x0fz\xbda\xb1B\xd7,i2N\x88\xc7\x08'\x98\xa0\xd7\x1f\x1e\x1f<\x12\x1bL\xc3\x0552\xe4/v\n&\x98\x8a\x07\x06w\xb5H\xc1\x02\x93p@\x0b\xf7\xf3;\xc4a\x80(\xfc\x0f\xbb\x8b\x05\x02\xfb+\x86\xfb\x1d\x87\xf9e\xe0}E\xb0><\xce7\xc5\xf5\x02\xfd\x93\xe3\xddo\xdb \xf0\xbdSa{'\xc0\xf5R0=4\x9e7\xc1\xef\x82}x\x1c\xcbK\xc2\xf1 \xb8\x1b\x05\x16\xc3sLg\x86z\xe3T\xec\xce`u\xfe\x97`\x14\xb7;\x1a\xb3\x0b\xe2u\x88!P\xf4[\x1a?JJ\xc2\xe7d\x14%\x1e\xe7\xef\xb0\xa3\xd8\x1c\xa6d\x89\x98\\hg <\x1e\x97\x84\xc5\xc5\xd0\xb7\x1c\xe4McmN\x7fQ\xd4-\x07q\x83\xc0\xc6!1\xb4\xad\x0c\xd2\x86\xa4\xa9\xa2\x08[\x02\xba\x16\xe2%rP\xb5\x90?\x8f\x9cW\x08IK\x0b\x1e\x1eA\xc3D(\x019\xcbB\xcd\"\x91;\x1a-C\"e\x18\x94\x0c\x87\x90E\x82\x9a\x8e\x8c\xe1Q1/\"V\x04\x0dKB\xc2rP\xb0\x04\x04,\xc8B\x05\x8a\x15<\x0f\x8fx\x95B\xbb\"\xd5p\xfe\x96\x8ep\xf9vm\x88\xa2[9\xc8\x96\xc1\xb2\x9c\x0eC\xa8V\x0e\xa2\xe5\xbdP\x18\xcdJE\xb2,\xec\xca\xe9\xcf\xffi\x8b@\xb0\x02\xe8U:r\x15\xc6\xaaRp\xaa)2\xe5t\xe7\xc3\xa8R\xf1)\xf0\xee\xb4\x10\xc7\xa6Rq\xa9\x04L*\x19\x8fJ\xc3\xa2\x02\x04P\xa8TX\x1c\x04\x8b?%cOI\xb8\x93\xa7\x929x\x93\x86\x80\x02\xcf\x90\xeb\x97\x1c\x9cI#K\xee\xb6\x1d\xc2\x98\xd2\xf1%o\x07\x16\xc4\x96\x02\xb8R6\x92T\xa2\xcd% Hx\xf4\xc8\xbc\x86wUWm\x19g\xddd'z r\xc8M\xc7-\x07\xa1/\xcf\xa7f\xce\xf2\x07\xb5\xc9\xf8\x8cE\xd0{\x15\x98<\x11\xba\x8b\x14\xfe\xc5\xdd:d3zVu\x8b\xd9$\xc7@0\xac\xa6Sp9\xfb\xf0\xcf\xa6\x07L\x85\x15\xb73[z\x8f\xac\xb6\xd4\xe2\xc4\x03<\xed\x89\xedy}\x85\xa3\x98\n\x9bJ\xda\xfe\x0e&\x91\x87\n\x8b\xb0.\xd5[\xbc^\xa9\xc8\xd5=T\x9b\xbe\x85\x9e\xf1\x13\xc5\x83W\xdd\x9a\xf1\xf4X\\\xcb\xf3\xa6\"\x0d\xb7\xb7\x89\xb0\xf6\x98W\xb1\x98\x17x\xbc\xdd\xd3x\x1c\x86B\x05U\x86\xf9\xf4\x01\x19\x19\x91\xb3O\xec\xde\x17\x98\x99\xe0\xabq\x8bJ\x0f*:\xc6\xf7\x9d\x82\xd2&\xfa\xf2\xd9\xc0f\xc89\xd5\xf5l\xf2Q\xd6@\xbc\x08c\xbc\xc5{\x11\x98\xb6\x91\xad\xae]\xadz\xc6\xa1\xed`Z\\;uD\xf9hyf\xd8\x1cAT\xe5C60]\x19\x19\xcaf\xbfe]\xbd0\x7f\x93\xef\x9fE\xd5\x88\xfa\xa8\xe9\xc5;\xd6\x98\xc0\xef\x9baFw\xf6!w!\xbdmDK\x1cB\xa8\xe6@\xf7\xbd\x08\xf5'\x96\x18\xcf\xa9\xfb\x13\x07wF\xaf8\xc2\xbb\xa9\xb756\xba\xf2X\x83 \xf8\xa0\x165\xdbo\xb7`\x0d,\xec73\n@\xcd\xed\xd9\x7f\xbaX\xc1\x86\xad\xb8\x81\x804\x15d\xbe\x96\xa4P\xa1\x1e\x10u\x11\x11\xe7\xdb{`\xd5\xe2\x0e\xaa\xdd\xee\x01\xa3h\xa39\xe3\xf9\xa1XZg\x88\x88\xca\x16\xda\x02\xef\xf6Ln\xf4S7\xcbzQq6H\x96:\x82\xf2@\xdd\x90lwu\xb3\xd8\xec\x97\xb37C\xa5\xae2h\xc6\xb3;& \x04K\xca\x10\x83\x19\x8bp\x9bu.\x1f/\xfa\xd9\xdd\x9aUA\xf6\xb6\x1d\xeb5+\"\x1f\xaf\xf1y\x14\x8f\xdc\x99~\x9a\xeau\xd3v3!\xc8<\x8d\xd3K\xa8\xc8\x1c{co\xdbv\xc3\xac\x1c*\x8e\x1b\xd8\xb1\xcf\xac\xeb\xb1\xeft}\xf4\xfc\xc6\xd5\x16\xda\xd51\xf7\x930\xf1#\xae\xc1\x14\xe7$\xf9\xe2\xf9L\xf0\x87\xbaY\x881G+\x86F\xcf\xfb\xe5'\xf8\xf1\xec\x0f?\x15\x8d\x06\xaf\xd6\x93a\xdd\xbfjo/\x96r<\xf6B\x7f\xd0\xf4/>\xff\xf4B\xbeG\x9f\x8b7n\xffB\xe5\xe4Rg\xae\xd9\x00\x10\xf5\xfb\xed\xb6\xea\xee'\x11\x1b\x10\xa4\xf7\xf2\x1cY\xe0\x9a\xf5\x06[\xd2\xe9\xbdD\x8bT/jy\x81g.\x89[\x0d\x87\xc4C:\xfcI8\xa9FY\xc8z\xd5\x8b\xef\x97\xf9hB\x9f\xd6\xee\x98\x1a)_,_\xce\x8b\xa7\x0f1\x90\x93\x15\x9c\xef\x7f\xff\xe3\x8f\xdf\xfbI)\xe8\xf7\x8b\x05\xeb\xfb\xd5~sJD\xca\x0e\xbcm\xfc\x01X#1\xc6\xcc\x16\xd9\xc6\x91t\xb6\x0b5\xf8\xcc<\x1d\x89*\xcbV\xf1F\x11^3lY\xff\xb1]\x89\x16X7\xeb\x0d\x0b\x10\xf4r\x98.o\xde\xe1\xadS%\xd1\xfb\xc5\xb1~\xfa1 \x1f\x07}\xdbg\xa7\x12\xc9L$3:\x98D2\x1b#\x92\xd9iEH\xe6\x83\x80OIf\xf5\x8e\x1d\xae\xe2Z\x06\xa2\x87K\xb7\xf7\x8e):\x1d\xc3y\x94$A%?|[1\x18\xb1:N\xddo\x12\xf0L\xc03\x01\xcf\xda\x08x&\xe0y4\x02\x9e9\x01\xcfn#\xe0\xd9\x18\x01\xcf\x04<\x13\xf0\x8c\x1c%\x11\xf0<\x18\x01\xcf\xb6\x11\xf0L\xc0\xb3\xc3\x08xv\x1dC\xc03\x01\xcf\x04<\x13\xf0<5\xff\xa7-\x01\xcf\x04<{\x8c\x80g\x02\x9e x.\x03<\xa7\xf3\xbf\xef\xa7\xfc\xafV\x0dZ\x0d\xb3\xd8*\x15\xb4\xab35Y\xc8\xc7\x8f\xdei\xd5\xaa\xcdlfE\xd1\x01=o;9\x81\xa0\x9a\x97r-'\xbbz\xce\xaa\xe5\xb1\x00U\x11\xf6w\x8c\xc3\xb9\x83\xf1\xd5\xd1\x90\xf0\xae\x145d]\xe4\x1b\xda\x00\x9b3i\xf9`ry\x8a\xf9\x8e\xb3\x06\x95z\xcaO\x14\x04\xe2}1\xd1\"\xdeW\xd9\x89\x83\x1b'U\x89\xf7-\x11E\xe2}\x89\xf7\xfd\xf5\xf3\xbe\xfaA|n(\xda\xe7\x95!\x14\xfd\xdc\xaf\xf5\xa2{\xa3N7o\xfb\x11o4\x00\xb0\xfa$T\x0f\xfb\xe0\xda\xdeYx6j]\xd7\x9fY\xa3\x166\x89\xb1\xfa\xd3Q\x13\xfe\xc1z\xf9\xeb\xc3'\x8c\xaf\xaf(\xfa\xd8G\x0b\xfb\xca\xd1\xdd\xe3\xc0l\x8eb}\x07\xc4P\xae\xfc\xb3A\xd4%\xeb\xb9\xe9\x81t\xdb\xb3\x87\x85\x8e\xf4\xbd\xca\xf41\xe1\x12\x1d\x9d\xad\x9a#\xf6xFT\x1e\x90\x1a\x95\xb1T\xce(\xe8\xcc-6\x05f_K\xf3F\x10g\x8e \x83;\nW u\x0f\xe7\"\xfc\x11d2HA\x87\xc9\xfb6\x1f\xc9\"A2\x8f\x14t\x95\xbbWsQ. \x12\xd9$H\xe5\x93\xc2-{xOa\x19%(\xcd)\x01\x8eU\x82\x92\xbc\x12\x1c\xcd,A\x1e\xb7\x04\xa5\xd8%\xc8\xe2\x97\xc2\x8f\x03~\xef\xe5\x13pLpB\x96 N\xc33A\"\xd3\x04y\\S\xac\x0b\xc6\xb1MP\x96o\x82\x04\xc6 \xd29'\xc8`\x9d\x10]&v?\xe5\xa3\x99'\x88qO\x80\x1f\x9e!\xf8'H\x1c\xc5%sPAo){&cKY\x90\x89\x82$.\nJ\xb3Q\x90\xc9G\x85\xdb\x15r\xff\xe3LN\xca\xeb\x8f#\xf7=.\xc3K\x01\x1e\xfb\x01\x0c7\x05i\xec\x14\xc4\xe0\x84L\x86\n\x10~\x03\xc2h!\x9e\n\xb2\x82\x8b\xe7\xaa\x00Q\xcb\x0c\xbe\nr\x19+\xc0E\xf5h\xd6\n\xf0\xbc\x15 \x99+@sW\x80\x0bz:\x7f\x05I\x0c\x16\xc4\xf6&.\xc2bA*\x8f\x05\x99L\x16\xa4qY\x80\xb8 \xb1=\x88\xa3\xe7\xe39-(\xc8j\x01\xa6h\x81\xa7\xac\x1c\xb7\x05\x18v\x0b\x8e\xe0\xb7\xbc\x0e9b\x7f\xe1\xa2\x1c\x17DY.\xc8\xe5\xb9\xbc\xde0\xfb #\xb8.\x88\xef#\x9c\xcewy]E\xf7\x0f\xceb\xbf\xbc\xde\xa2\xfb\x06\x97c\xc0\x00\xc5\x81A\x06\x0b\x06i<\x18\xe40a\x90\xcc\x85A|;\xdcX)\xb1\xbc\x0e\x96\x11\x83\x1cN\x0cRY1\x08W<\x87\x19\xf3:C\xed\xff\x9b\xc3\x8e\x05\x1f\x08\xcc\xbe\xbf\x05\x192\x88qd\x10f\xc9\xbc\xe7\xe42fP\xb0\xed&\xb0f\x90\xc4\x9bA`\x84\x12K\xc9\x01&]\x8c\x7fk\xd3!\xf9\x91\xd2F\xa7)\x90\x0eM\xcd\xf4-\xda\xa6\x91\x82\xbe?\xb6\xb2G\xe6c\xcaN\xfdx;\x8f\xdfum\xbb\xf2\x8at\xd1:^\x8a\xd3\xa75T\xa8\xdc]\xbdS\xbe\xdd\x95\x0d=\x1b\x81 \x14R\x0dw\xfb[\x7f\xf2\x1be\x88+\x01\xf2j\x80\xd4)\x01?\x19\x06 sH\xc6\x8aj\x96\x90\xa9[B\x8av\x19\xf54j\x9b\x18\xfd\x12Jk\x98\x90\xa3cBI-\x13\x92\xf4\xcc\xa8+;\xe7B\xa2\xa6 etM(\xabm\xc2\x11\xfa&dh\x9cQ\x87\xe2\x95\x9a\xaasBQ\xad\x13\xb2\xf5N\xc0j\x9eQ/SM\x14\xab{Bi\xed\x13\x8a\xe8\x9f\x90\xaf\x81BI\x1d\x14\x92\xb4\xd0\xa8\xabI\xae\x07\x9c\x1e\n\xa7\xd3D\xe1\xc4\xba(\x9cN\x1b\x85\x0c}\x14R4\xd2\xa8';7\x04\xe0uRH\xd5J\xa3\xded?\x91\xa2\x97B\x9ef\n\xa5uSH\xd6N\xa1\x94~\n\x18\x0d\x15\xd2\x86\x8eH-\x152F\x99I\x9aj\xd4\x1b7\xb9'\x90\xba*$\x968Q_\x0d\xfa\x9a\x8ef\x91\x1a+\xa4\xea\xacAO\x08\x0d\x16J\xeb\xb0\x90\xa8\xc5B\xa6\x1e\x1bs\x88\xd5d\xa1\xa8.\x0bi\xf2!`\xf5YH\xd7h\x01#J\x1c\xa1\xd5\x02\xd2\x7fd\xc2\xb2\xa0n\x0b\xd9\xc1O\xd3o\x01Y\xf3L\x1d\x17\x8e\xd1r\x01\x1f\xf1\"\x9a.\xa4\xe9\xba\x90\xa0\xedB\x92\xbe\x0b\xf8\x9b\x92\xa7\xf3B\xb2\xd6\x0b1\xbd\x17Jj\xbe\x90\xa3\xfb\xc2\x11\xda/\xa4\xeb\xbf\x80\xbcI1\x1d\x18\xb0~\xd2\xf4`(\xac \x03\xb6\x98\x91'6]\x1f\x0e\xba\xbb\xbd\xc7i\xc4\x90\xa9\x13\x07\x1d\xea\x1c Q\xad\x182\xf5\xe2\xa0Cn\xe6\xf6\x82\x9a1d\xe8\xc6Agc\x8e\x10\xc4\xb4\nR?\x86\xb8\x86\x0ceud\xc0h\xc9\x90\xa8'G\xee\xbf\x95g$\xa8)C\x86\xae\x1ct\xf6\xf1\xea\xed\x19R[\x86L}\x19\xd25f\xc8\xd5\x99!Kk\x86x\xd7\x04\x08\xdd\x0e\x12\xb4\xbb\x14\xdd\x19r\xb5g\xc8\xd1\x9f!\x1e\x8c\xa2:4`\xb5h(\xadGC\x82&\x0dY\xbat\xb4\x93\x8ej\xd3\x90\xa9O\xc3\x91\x1a5\x14n\xef\x89Z5$\xeb\xd5\x10\x19M\xc55]a\x97\xfb\xdb\xff\xc9\xee\xe7[@\xee\xf6\xb7\x9bz!s4X\x8b\x80\x8d\xdc\x1ck_R\x0c\x17\xf7L\xb5\x1b\x1e\x19\xe0\x8a1\x8f\x1a\x01\x0c\x8a\xb2\xf7\xf8\xbe^7\x15\xdfw\x88\x85\x06$\xe9\x06\x8c$]\x92t'F\x92n\xd4!I\xba@\x92\xee\xc4H\xd2%I\xd7i$\xe9*#I\x97$]\x92tI\xd2\x8d8$I\x17\xa9'\x90\xa4K\x92.I\xba$\xe9\x92\xa4+\x8d$\xdd\x89\x91\xa4K\x92\xaee$\xe9\xba\x8d$\xdd\x88a%.\x92tm#I7t I\xba\xdfL\xd2\xfd`4\xd2\xb9\xaa{\xc7\xbe>g\xcd\xa2\x15\xcd}\x10RcS9\xe2\xc4\xcbMU7\xd7\xec+W\xaf\x1f\xef\xf1;q\xdc\x0dg_y\\\x9e\x8dNv\xe1*;\x16-PY\xf5\xd2\x14U\x96\xf3\xd8A\x872\x1d\xb8\x9cD\xd13\xf8Q\x8dg\x88\xb7\xf3(\xb5M\xc9\xa2mV\xf5:\x7f\xf9\xb5\xdc\xb0\xe4\xb5t2}9*\xc7\xbaI\xce\x97`{\xdd\x85\x96f#\xd4s\x8cr.\x13\xbd\x1f\xd7\n\xb0\xb3\x81\xde\xe0\xd8k\xf0\xd5\xd2{98\x91}\x9f\xd7\x9b\x1cw\xd6\xcd'\xf1\x12\xd8VK\xcf|\xe5\xa2c2\xe47\xbc\xf6\xd7\x13QG3\x9d\xbb\xac8{.|\xe57\x11]\xa2\xebz{\xf0\xe4\x0b\xc7\xa2[\xd7@\x86\xa9\xe1] O\xed-c\x8d\xaa\xa5\xf3\xed\x13.\x8f\xbc#o\xc5%\x0e\xef\xc7P4\xf1\xceb\xb5\x9c\xe2\xaf\x1a\xa8\x1b\xce\xba\xe7\xe0I\x1d\xbc\xe8\xda\xbe\x7f\xae\xdb\xad\xf3\x08g~\xf2P)\xdf\xd6\xbd\x14\x81\x0f\xf2\xde?S\xfbZ\xb4\x8d\x15F\xf5\xf9\xe6\x1eq[\x84\x8c\xb7|\x8e\xd2\x8d{ \xf8\xd2\xca{\x9e\xc1\xf0\xd3g6\xaaq\xb7\xc9h\x8b\x8c\xca\x0b\xa1\xcdtF\x1b\xb6\xcb\xd1{\x96\x0c;\xe7\xc0\xae\xea{%i\xaa\xfdu\xfe\xb1g=?S\xbf{\x9c\xc9}\x16\xa4\x9b\xd0\xd6:\x17\xdc\x1a5\xc9]L|/6\xd1\xe4\x98\x14X\x9b\x16\xb6mg\xb6\xf8p*9r\x97\x8d#\x839\xdb\xc6\xc4\xb6\xd8s=l\xf2\xe1\xdb\xf5\xc5\x12\x08}\xf5\xb5\x03m\xef\x97\xe29\xfcK%7\xd7x\x065\xef\x8d\xc4\xdd\xc3\xbeQ\x9b\x05,\x95*\xf7\xa5\xee\x0f\xdbG\xbc\xc3\xb6\xf7TR\xb5\x9al\xc2V7\xb0\xbe\xba|=l\xe4`\x86\x88=|\x11\xf7\xccu{\xdco\xe7E\xdb)\x1frd\xdc\xa9\xca\x0fc|1\x98\x97\x02\x9f\x1d\x19g8\xcc\x19\x1f\xda\xedX\xee\xe0\x98\xb2c;\xd9g\xc2\x1f\xabn\xb8I\xb1\xaf\xbeIXd\xfb\xf6}\xefM\x87\x87\xba\xf5\x1c<\x86r/\x11\xdfV\x1b\x93\xf8\xab\xfdm\xd4\xff\xcbO\x9f\xc3\xe4\xed\xd2\xd9\x0b\xef\x1e\"\xe2~\xa9\xc9\x9f\xe1<\xdd\xa5\xdaO\xcdt\xd3\x8e\x06\xf6\x8d\xe2s\xd8R\xf1\x11\xa7\xdc\xbbC^\xc0\xd7\xc9:\x1f_1l\xf4\x9d ^Tk\xc7\xdc\x95y\xd8\xeb\x86\xff\xf4\xfb\xd9\xaf\xba\x19%\x95a\xc9xUo\x1e\xc9\x9e#<\xc2@F\xbbBL\xe7\xa0,\x95u4b\xab\xd7!G2\x8eh\xb6\x11\xb3\xd5F\x84iLe\x19%\xab\xe8\xf5\x86e\x18]S\xb2\xc9\xec\"\x9eY\x9c0\x89^\x7fxV\xf1HF1\x8dM\xd4|\x92\xbf\xd8)Lb*\x8b\x18\xdcB#\x85ALb\x0f-\xb6\xd0\xef\x10\xc7\x1c\xa2XC\xec\x96\x19\x08\xc6\xb0\x18[x\x1cS\x98\xc1\x12\x16a\x08\xf1\xec\xe0\x94\x0d\x0c\xf4O\x9e\x8f\x1dc'`\x05O\xc5\x08\x9e\x80\x0dLa\x02\xd1,\xe0\x84\xf5\x0b\xf6\xe1q\x060\x89\xfd\x83\xe0\xd6\x17X\xe6\xcf1w\x1a\xea\x8dS\x19?\xc3\xf0\xf9_\x82Q\xb6\xefh\xa6/\xc8\xf2!\x86@\xd1\x8fk\xfc()\x89\xd5\x93Q\x94,\x9e\xbf\xc3\x8e2z\x98\x92%2y\xa1m,\xf0,^\x12\x83\x17\xe3\xecr\xf8:\xcd\xd09\xfdE\xb9\xba\x1c\x9e\x0e\x02\xbb\x94\xc48\xba2\xfc\x1c\x12\xdd\x8a\xf2r \x9c\\\x08\xce\xc8\xe1\xe2B\xfe<\xdaa!\xfe--xx\xde\x0d\x13\xa1\x04\xbe-\x8bk\x8bD\xeeh\x8e\x0d\xc9\xafa\xb85\x1c\xaf\x16 j:\x9f\x86\xe7\xd2\xbc\x8f\xe2\x91;\xd3OS\xbdn\xdan&)\x98\xa7qz \x15\x99co\xecm\xdbn\x98\x95\xfa\xc3q\x03;\xf6\x99u\xbd\xf7\x0d3\xbby\xfa\xe8\xf9\x8d\xab-j\xa8c\xee'a\xe2G\\\x83)\x84Fb\xb1\xf39\xc5\x0fu\xb3\x10o\xc0\xb6\xdf\xb6\xfd\xf3~\xf9 ~<\xfb\xc3OE\xa3\xc1\xab\xf5d\x80\xf0\xaf\xda\xdb\x8b\xa5\xdc\xf2\xe8\x85\x1e\x1a\xf7/>\xff\xf4b\xc9\xab\xf5s\xdeUM\xbfb\xdds\x0d\xfd\xe8\xb3\xd7l\xc0Q\xfa\xfdv[u\xf7\x93\xa8]4\x8bv[7\xeb7\xd7\xd5\xfaZ{\xd0`P/kP\xb3^I\xbew\x0c\xc4A`\xae\xd3\x1b\xbah\x9c\xff\x15\xcf\xc4\x18(\xa9\x90I\x9ar[-E\xd4\xbfT\x9d\x1eH\xee{\xd6\x8d\x9b8\xad\xeb\xcfl\xbe9T\xbbcj\xf4u\xb1|\x19,\xa4>\xdeP4V\xcc\xbe\xff\xfd\x8f?~\xefGq\xa0\xdf/\x16\xac\xefW\xfb\xcd)\x19\x9c\xe9\xdd\xb0\x8d?\x00\xce\"Z\xca\x0dooxW\xb9@\x1fe\x08A'F\xef\x81l+\xd7\xed\xb5\xb8\xce\xf4KY\xbd(t\xd7\xa7Z\x94\xe8J\x1d}\xa7m\xb7lhx\x1d[\xc2\xaak\x03\xbc\x84\xea\x96\x17\xac\xfe<\xaa@\x06\x85\xd3\x90C\xcf\x9a\xa5G\x80Q?\x9d48\x1f\xe4%\xe6\xb0\xb2\x19\x03\x1b\xddj\xa1\xde\x12*<\xac\xf137V\xfd\x9c\xc7\x98X\x9c\xb4NW&\xe0\xb3Zyo\xc4]\xc5\x9f\xf9\xd9M\x18\xd8\x96gj\xb1\xa8\xf78\xd1}Lo\xab\xf8g\xdd\xc9\xc6\xe5z\x84\x82Uq\xf41c\x8d\xa0\x9a\xf6\x81\xc1\xa8\xdf2\xfeE\xf4~\xfc\x8bD_\xbaC\x9d,T\x92\xa1\x13\x1e/\xce%\xbe\xae\xe0mg\x97|\xd8#\x8ff\xf7\xc1\xaeX\x9any\xf6\x13\xc1\xda\x04k\xc7\x1e\x19\x82\xb5 \xd6\x9e\xda\xa1\xe4\xa4[\xd0\xe5\xf8\x19\xa3n\x94N\xbb:\xfe\xd9\x04u\xe2!|\xcb\xe4\xd084FL\x05\xbf\x1d\xb7K\xb1\xe0\xc1\xd1\xf2\xc8\x83\x8fO(\x01\xe1\xb3_ \x08\x8f\xb5\xe6\xd1\x08\x08' \xdcm\x04\x84K# \xfc\xd0\x08\x08' \xdcg\x04\x84\x13\x10.\x8d\x80p\x02\xc2 \x08' \\\x19\x01\xe1\x04\x84\x13\x10N@8\x01\xe1\x04\x84O\xcd\xffiK@8\x01\xe1\x1e# \x9c\x80p\x02\xc2\xcb\x00\xe1\x06\x9e\xb0\x9c\x84\xbe>\x9f\xb6\x03p\xed\xc31f\x90\x89$\xb1x\xebH\x0d8\xe8\xd9\xd3\xd0\xd6Z\x02\x1bX\x03B\xb6\xd1\x88\xf1\xa9\xa9bB\xb6O\x18\xdc8lL\xc8v\x89(\x12\xb2M\xc8\xf6\xaf\x1f\xd9\x96/\xfd\x00\xa2})\x7f\x1f\x08l \xc9\xe8\xd3a\xdb.\xf7\x1b\xa6\xc6\x0dN^\xfaR\x1fyi\x1f\xf1h i;\x14\xb6y]A\x14\xd3h\xea\xc5\xa7\xc6\x9b\x879\xe8\x18\xa2\xceAJ,\xcd\xcd\x865k~\xe7\x9f\xe0B\xc8 (!d[}\xfdF\xd7\x8aa~\xeftXu\xe3\x9c\x12\\f\x10\x0b\x1d\xdb\xc8)\xfa\xe0V\xb7Cc6\xb7\xca%\x1a,y\xe5I\x1d^\xe0\x16vl}\xc3\xbe\x1e\x15\xd2_u+xs]\xad\xd17Z\xdfNy\x92\xebN\xde\xd6\xed\xc9n\xe47\x8f\x8c\xf7\xf9\xf8c\xdd\xa6F\xcc\xe3\xe9\xb6n\xd7]\xb5\xbbs\xcdo\xb6]\xb5\xd8\x9c\xaekSo\x80\x9bzY(\x9a\x01\xac\x18\x101\x05\xa9\x90\x8b\"]\xbc\x99\x7f\xcb^\xbc1\xe31\x15\x13]v5Z\x08\xf8[T\x9b\x8d\xba\x0b\x9fYW\xaf\x1c_\xb9S[V\xdcG\xbaT\xfd\xa7\x1b9x{<\xd1z\xd5\x7fz-\xc7\xaa\xb3h\x8d\xa3U\x15\xad~\xf8\xee\x17\xb5\x088\x9c\xc4)\x14\x8c\xad\xdc\xf0\xe1Q\x05\xe3/u\xe3\x0c\xc6\xb6n\xea\xed~;\x8e\xea\x87\x98\xdc\x05X\xc6\xe1C~\xd1nw\x1b\xc6\xa3\x9bd\xc8\xb8i\x1a\xc9\x1aNy\xb1\xb2]\xc7vU\xc7n\xd6U`\x87\x89o\x1d\xc3KU\xa8?U\xfd\xc1d\xd2\xd6\x84o]\x99\xcf\xd5}\x88\xa6\x02X\xee;3\xad\xa2*+c\x13\x8aa\xcf\xab5s>\xe8\x9e\x93\xd8W\xb6\xd8\xf3G\x16\xc4sU\xa8\xe2AT\x95U\xaaG(\x8a\xd8\xe0\xad\x18\xbbQ%\x8a\xc5\xce\xcd]\x1b\xf3\xf2\xd7\xc6\xa2\xaf*e\xf1\x17\x96\xb2%k\xdam\xf8\x10\xe4M\x17\x16\x8b\x802\xa4;\x0c/d\xecu[\x8fK#*\xe0\xed'\xa67o\xa9T\x15\xcd\x94B\xd5,\xa1\n\xef\xe8\xa3*\x11\xdbW\xf8\xdd\xfb\xeb\xf3\x97R\x91\xd3\x0dQI[\xb5\x84\x96.\x1a\xae_\x11\x03(\x16\xde\xd4\xd8R\x05tn\xfc\xe0\xe1\xc3nL\xfd\xf0\xad\x0d\xb7\xf7\xb0n\xd7\xad\x9cv\xf7\xab\xc8\x98g\xeeg\xc6^m]\xbd\xff\xf8\xc8\xad\x18\x1b\x08\xca\xea>\xb6K\xd2\xb0G\x92\xeebb\xdd\x7f\xfc\x81\xf3md`\xec\xbd\xf4\x80\x1eU\x8eO\xb9\xc7\x9f\x9c\x033\xba\xd0\xbe\x9f\x8f\x82T\x06\x9a\xfe\xae\xdeI-\x16\x16\xac\xe1]p\x13\xefj\xc4m\x87\x15\xab\xb7\xf7P\xc1\x1b9\xe9\x11\x18\xe7V\xbb\xdd\xcd\xa6n>\x05\x16Z\x1c9\x94\x95@`\xcd\xefo\x96Z\xb9\x89ui\x91G\x19\xd3\xe6\xf4v\x11\xc3\xb5\xc1\\\x1bn%\xca+Q@+f\xce\xed{Fc_wu\xe7!\xeab\xc5y\xb5\xdb\xbd\x15\xf1\x9d\xb4\x9eH\xe3\xa9v;\x8f7y\xab\x0e~\x1b\xd6u\xc9KL\x14p\xeb\"+\xcd\xaf\xce\xa6\xb0&\xde\x10k\xbc\xd4U\xa2\xab\xb9\xe4_\xd5\x82-]\xae\xab\xcb\xd73\x7f\xb4P\x8b\x16jE\x9fx\xec\x8b\x9b\x16j\xd1B-\xb7\xd1B-i\xb4P\xeb\xd0h\xa1\x16-\xd4\xf2\x19-\xd4\xa2\x85Z\xd2h\xa1\x16-\xd4\xa2\x85Z\xb4PK\x19-\xd4\xa2\x85Z\xb4P\x8b\x16j\xd1B-Z\xa855\xff\xa7--\xd4\xa2\x85Z\x1e\xa3\x85Z\xb4P\x8b\x16j\xe1\x17j%\xf1\xdd\xe6\xdf\xbf\xec{\xd6\xfdS\x9d\x16\xc9\xc5\xad\xb1m\x17\xf4\xad\xd4\xd8\xe1\xa3_\xae\xdaRi\xb3\xc7T\xb7`M\xc0\xeaU^\xd6`L7x\xe5{\xa9<,[\xa6\xe6V\xe4\x94Xe.\xf6L\xf7\xe3\x1a\xb6\x1f\xf4\xb5i\x1a\xdeAQ\x80f\xbf\xd9\x98sM/\xea\xe2\xd1\xf5O\x8f\x17DW\xc5\xf4\xc9WY$zX\x85\x8aN\xc0`f0\x8a\xebO8\xf5)G{\nkLY\n\x93\xbc\x84\xc7aT_*\xa0.ejK\xde\x19y\x9c\xb2t\x94\xae\x94\xa5*A\xb5\xd9\xf8\xa2\x88\xd3\x94r\x14\xa5\xd0\x87VH\xa99N\xab\xc9Pk\x8a\xe85\xc5\x15\x9b\xa8fs\x02\xd5\xe6T\xba\xcd \x94\x9b\x14\xed&W\xbd \xf6\xe11\xfd\xa6\xa0\x82\x83\xd5p\x12U\x9c\xe2:N\\\xc99Z\xcb\xa1\xf5>\xd1\x92\xe5i;NW\xb4\xde'G\xe5\x89\xe9\xb4\xdb\xb1\xdc\xc1i\x9d\x8e\xed\x98\x9c~\xffc\xd5\x0d7)\xf2\xf18\x0d\x8bl\xdf\xbe\xcf\xc7\x00\xbbu\xf00\xca\xf1\xa6\x1a\xa5\xa5\xa0[zhI\x99\x9a\x89\xdcr\xfd\x1e\xec\xf1N z\x86\xbe\xfd\xaca\x91\xaf\x11\x0e\x03\x91\xc9\xf7\xde\xf8\xadd7\xc4\x9c\x8d\x07\x0f\xaa\x13\xd9_S\x7f\x03\xf8\x8a;\x8c!\x9dc\xdf\xee\x1b\xd5bZXolg]|\xb8\xecK\xc7g\xb7\xfcEv?O\x0f\xf6Y\x91s\xc1\xf5l'\x15;\x14\x16\xb7\xf3\xc3\x89\xeaO\xdb\x1ec\xa2\xe5\x195\xd2\xb6\xc7e\x83\x1b\xdf\xb0\x97\xb6=.\x11E\xda\xf6\x98\xb6=\xfeun{|0\xe1<\xf9\x83\x7f\xde\xd9\x8a\xd8\x95}\xc6d\xd2x\xe2\x0b\xf4\xdc\x8a\x9e\xfe\xb12f\x0d\x9e\xcc\xc0L\xffa2\xb5<\xb9\x8a>\xe0\xd1\xce0;\x82h\xdbC\x8c\xe3\x17\x1d\xab\xb8\xebcH\x19b \xae\xe7%^+G\xf3\xc92\xed\xdftFv\x04\xdc\xe5\x11\xbd\x0b\xebvU\xc7=\x13S)\x85\nLM\xbe\xb6.t0=+\xe7\xb2\xe5 \xb4n>\xb7\x9b\xcf\xee\xe7\xd8\xb6h\xc5\xfe\x93\xcc\xcb\xd6\xcb\x83yY\xf1\x82\x90\x93\xaf^w\xf3;\x0bu\xef\x9f\x98\x95`\xa9\xe3\xd7\xf8\x94\xd0\xb4O1#\x92\x9ew\xfb\x85|\xdbU\x93Bx \xa7\x0bK\xd8U-\xb4m\x16l'\x1d|\xa7\x96\x04|'C\xd0U\x03\x9f\xd0\xb7\x12\x8bv\xb9k\x18\xff\xd2v\x9f\x0e&\x04i\xce\x96\xe6l\xe3O\"\xcd\xd9\xd2\x9c\xadm\xc9s\xb6\x93\xe1\x0fj\xea\xd6\xe5\xe5\xc5t\xacFko\xb5\xd1\x0c\xee\xafa\x06w\xfa\xb9Q~\n4:c\x10\xe2\x8e|3\xa1r\xf09\x8c\xbc\x02\x15*\\\x19Sf{\x1c\xee+;rR\xd7v\xe5\xfa\x0e\xe8\xd5\x94\xae\x9cI\x988\xacW\x87/\x005(\xa7\xf9\\\x9a\xcf\xa5\xf9\\\x9a\xcf-\x1cE\x9a\xcf\xa5\xf9\xdc_\xe7|\xae\x19\x19\xc9}\x0e\x86\xff\xf1\xcf\xe3\x9a \xa2\xfe\x90\xf6\x1d~\xd1\x13\xb6j\xcfx\xed`27;8yb\xaa\xf4H\xe7eg\x01\xb1\xed!F\xe6\xdfl\x86\xf0\xa3L}\x03\xf5R\xf5O\xb3\x048\xb3i\xf7\xa9\xc9G/\xbf\x94\xba\x00\x7f\xdeo\xab\xe6y\xc7\xaa\xa5\xec\xba\xec\xa41\xc1\xab\xdb\xad\xe4\xe8B\xbc7\xe3V\xcb\xab*\x85\xe8\x18B\xc5\xe0\x1d\xab\xfa}w\xda\x89\xea\xab\x19\xe9\xbcPo\x03u\xc7d\xee\x91vQ\xcb9 \xb9\x9a=4I=|\x1fUM\x80\x9c\x1d\x07\x8c{=\x97\xb7h\x9b\x86-8\xb0\xaf\x9cur\x84o\xa7\x05\xf1\xce\xec\x01|f]\xbd\xbaGD\xb2\xfd\xd2\x94\xa0\xdd_9>\xa2d\xa0\xda/\x0d\xa2Q\x17\x13Cf\xe5\x18\xe2\xae/\xe0\xbfx\xdd67\xbc>\xea\xd12\x1d\xc0\xb2\xe2\xec\xb9\xf0\x15.\xea \xd2\xc8\xa5F5\xea\x01\xd4\xa7~\x18\xaa5df\xd0/\x89e\xc5+5#\xaf\xde\x0e>g4KN\xb3\xe4\xf1>\x90f\xc9i\x96\xdc\xb6\xe9,\xb9\xaf\xf5\xc8!\xf00\x04\xcd\x9f\x1b\x1f\x87\xc2W\x97\xaf\xe7\x01R\xd3\xe4\xc3\x1fi\x96\xfc >\xbf\xf5YrL\x8f\xa0\x8c2TR\x86J\xb7Q\x86Ji\x94\xa1\xf2\xd0(C%e\xa8\xf4\x19e\xa8\xa4\x0c\x95\xd2(Ce`N\x8c2TJ\xa3\x0c\x95\x94\xa12\x9ag\x912T\xe6F\x8e2TR\x86J\x87Q\x86J\xcaPI\x19*)C%e\xa8\xa4\x0c\x95\x94\xa1\xf27\x9f\xa1\x92\xa8\xe34\xa4\x93\xa8\xe3\x13\x067\xce\xcb\x12u\\\"\x8aD\x1d\x13u\xfc[\xa2\x8e_\xfcb-\xe5\xfa\xa7:?\x92Kb \xcd\xe64r\xdd\xa8\xe7L\xb4\xb9\xea\xb6\xdd\xab\xe6>\xf0v\x86\x88T\x997\x07w\xc3\n2'\xae\xac\x7f{\xf4\xb4rQd\xce\xc7\x1cG'\xf7\xf1|W6m\xecg\x8d\xa3\xa5;\x8a3\x8eR\xc6\xd8\xcb\xe7\x12\xc6a\xbe\x18{u\xaf\x98R\x8c,\xc6p\xc5\xe9T\xb1\xa6\x87=\xfeb\xb1\x0b\x10\xc5\xd8\xc0\x1dE\x13\x07Y\xe2\xcc\x12 8b\x04E\x1c\xbd8\x8e \xce\xe6\x87\x0b\xd1\xc3(\xee\x0f\x85\xfd\xcd@\xbf\x99?B\xfc\x08\xf1\x8b\xe9\xdb\x18\x89\x18\x08\xf1#\xc4\xcf{$!~\xd2\x08\xf1;4B\xfc\x08\xf1\xf3\x19!~\x84\xf8I#\xc4\x8f\x10?B\xfc\x08\xf1SF\x88\x1f!~\x84\xf8\x11\xe2G\x88\x1f!~S\xf3\x7f\xda\x12\xe2G\x88\x9f\xc7\x08\xf1#\xc4\x8f\x10\xbf2\x88\x1f\"\x8d\xed\xc5a\x0e~\x93\xff\xd5:\xe5\xc8-\xa7\xc1\xa7\xdd\x97\x80:^\xc8\x19\xba\xaa\x11?\xac\xbbv\x1f\xda2\xe4O\xe2\xf7W\xc3\xf1\x9ay\x19\xd5\xc0uW5\\mV\xad\\\x99\xfew\x02o\xcc\xbc<1\x01y\xa4\x0c\x87\xaa\xd4\xe3\xd0\xbf\xac\x1bW`\xfe\x07\x93w.0\xf7\xe3h\xfb:\xcf\xe0l\xff\xdf/U\xaf\xa2\xc8\xfcc8PZ\x86j\x13\xce#\x94\x87\xf2\x19\xbfFV\xc0*#\xaa,\x9198\xef]\x06\xc4\x9d\x06\x84\xda \xb8j\x03r\xd6\xccX\xaa\xf2\x19t\xe6\x9e\xfe\n|\x0f\x96V@!\xae\x82B\x86\x12\x1a\xae@\xc5\xef\xd0j(\x94RD!S\x15\x0d:\x14\xc1E+\xa3p\xbc:\n\xc9\ni\xd0\x95Vn\x92TR(\xad\x94B\xa2Z\n\xa9\x8ai\xb8e\x0fj*V5\x85\xd2\xca)\xe0\xd4S(\xa9\xa0\xc2\xd1**\xe4)\xa9PJM\x85,E5\xfc8T*{\x7f\xf4\xb99\x89\xb2\n'TW\xe14\n+$\xaa\xac\x90\xa7\xb4\xc6\xba`\x9c\xda\ne\x15WHP]!]y\x85\x0c\xf5\x15\xd1e\xfe\x80P`\xa1\x84\n\x0b1%\x16\xf0\xc33\x84\"\x0b\x89\xa3\xb8de6\xe8M\xaa\xb6\x08u\x16\x12JYP\xa5\x85$\xa5\x16J\xab\xb5\x90\xa9\xd8\x86\xdbU\x1fWm!_\xb9\xf5\xfa\x13W\x8c\xa9\xb7PL\xc1\x05\xbc\x10 \x18%\x17\xd2\xd4\\\x88\xc9%\x99\xaa. \xfc\x06\xa6j\x0b)\xbc\x90\x15\\\xbc\xd2\x0b\x88Zf(\xbe\x90\xab\xfa\x02.\xaaG\xab\xbf\x80W\x80\x01\xa9\x02\x03Z \x06\\\xd0\xd3\x15aHR\x85!\xa4\x0cC)u\x18R\x15b\xc8T\x89!M)\x06\xc4M\x08)\xc6\x809\x1f\xaf\x1cCA\xf5\x180E\x0bd\xf3\xd1\x95\x91\xa1l\xf6[\xd6\xd5\x0b\xf37\xd9h4l\xa3f\xbf\xeeXc\x02\xbfo\x86 \xc7\xd9w\xc6\x85\xf4\xb6\x11\x0dq\x08\xa1\x9a\xa2\xdb\xf7\"\xd4\x9fXb<\xa7\xeeO\x1c\\\xcfCi\x85wSoklt\xe5\xb1F%\xf7\xf1\x1bj2\xdan\xc1ZS\xdfof\"\xb5\x9az\xb2\xfft\xb1\x82\x0d[q\xc3\xbbh\x00\xc6\x0c\xe6\xe5<\xbaz@\xd4ED\x9co\xef\x81U\x8b;\xa8v\xbb\x07\x8c\xa2M\xa1\x8c\xe7\x87bi\x9d!\"\xda\xab\x9c\n\xa2\xcb\x05\xf1\x8f\xbaY\xd6\x8b\x8a\xb3AQ\xd3\x11\x94\x07\xea\x86d\xbb\xab\x9b\xc5f\xbf\x9c\x0d\xd5+u\x95A\xd2\x9c\xdd1)\x90[3\xed\xe2\xa5a\xf1\x15\xb3\xce\xe5\xe3E?\xbb[\xb3*\xc8\xaf\x9b\x8e\xf5\x1ae\x90\x8f\xd7\xf8<\x8aG\xeeL?M\xf5\xbai\xbb\x99Na\x9e\xc6\xe9%Td\x8e\xbd\xb1\xb7m\xbba\xd62o\xc7\x0d\xec\xd8g\xd6MN\x0d\xdd<}\xf4\xfc\xc6\xd5\x16\xc5\xd41\xf7\x930\xf1#\xae\xc1\x14\xd2\xd3vK\xd6\xcd'*?\xd4\xcd\x82\xbd\x84E\xdbo\xdb\xfey\xbf\xfc\x04?\x9e\xfd\xe1\xa7\xa2\xd1(\xbd_\x84xM\x07\xb6\x8b\xf8\xd8\xb3\x0e\xb7[\x84td\xee\xfcd\xb3\x88\xa9\x8f'\xa6\xd6\xb4WD\x14]\xa1\xbd\"h\xaf\x88\xc3c\x10\x0b\xac1\x82\x97\xb1Th)\xe8\xcc\xad\\\x05\xa6rK\xc3K\x10\x07\x98 \x03b\nW\x80\xf2\xdf\xe4\x82M\x90\x0c7\x05]Q\xfe\x1b\xca\x7f\x93\x0b@A\x1e\x04\x05\xa5@(\xc8\x82\xa1\xc2\x8f\x03\xe5\xbfI\x83\xa3 \x11\x90\x82\xb8Q\xc4\xc1\x16\x11\xe23\xda\xc8og\xb3\x8a\xa4f\xd0\x9eU\x85v~H\x89\x16\xed\xfc\xa0\xec\xc4\xc1\x8d\xefY@;?\x94\x88\"\xed\xfc@;?\xfc\x86w~\x90p_`\xbf\x07+|\x1f{\xd6\xfdI\x1e.\x0b^3{\xdb\x07\xf9g\xd9\xe2E\xfc\xf4P\xd4\xec\x07`\x8fP\x06wS!Ez\xa9?\xb3\x06\x86\xe1\xce\xc1\x9e\x11\xea\xe2\xfa\xd7G\xbc_\xc4\x18Q\xdb\xf8\x03\x10+\xdf~\xbf\x88\x8b7\x07C\xd2\xd9\xa6\x10u\xafw\x01c_\xeb\xde\xb3\x06\xbfgR\x03\x88\x16\xdb\x87!)s\xef\xf35\xb5\x18\xc28\xd9\xd1\xcc\x1ao\xab\x02z\xebV\xfb\xa5D)U9\x7f\xfdf\xb5\xfd(!\"\xa8\x97\xea\x89\x9d\xa1D.\xdeW\x99\xec{\xf3\xdb\x91\xbe\xfa\x9f\xf7\xdb\xaay\xde\xb1j)\xdf]6{3\xee\x11\xe7ta?\xcfG\x17\xc3|\x7f\xd8^U9\xcc]t\x9e\xbfc\xdd\xb6\xee\xfb\xbam\xbc\xd9\x88BO\xba2\xef\xf3\xae\x0c_\x89@\xbb\xbd\x1c\x0b\xaa\xbf\xa6\xf4\x94\xc0\xb0\xcdI;\xf4\xdfr\xaf\x1e\xf15\xeag\xb9b\x911M\xcb\xf4\xd3s\xb0\\\xfc\xa9]\xa9+\xcdN'\x98\x9c`\xf2x\x8b&\x98\x9c`r\xdb\xa6RV\x94\x01W\x83\xc7\xe3\xf8o=\xfa\xbd\xba|=\x0f\x11\xb1\xdf\xc4~\xc7^\xd9\xf1>A\x19\xb1\xdf\xc4~\xbb\x8d\xd8oi\xc4~\x1f\x1a\xb1\xdf\xc4~\xfb\x8c\xd8ob\xbf\xa5\x11\xfbM\xec7\xb1\xdf\xc4~+#\xf6\x9b\xd8ob\xbf\x89\xfd&\xf6\x9b\xd8\xef\xa9\xf9?m\x89\xfd&\xf6\xdbc\xc4~\x13\xfbM\xec\xf7C\xb2\xdf\xbc\xb5\x04b\x8ddM\xe7QOO}\x8f\xe4\x8e\xaf\xe0\x16O\xf3\xc1P4K_\xd9\x8f\xe5\x07\x0f\xb5*7&C\x08x\x1e_K\x08\xf8 \x83\x1b\x87\x97 \x01/\x11EB\xc0 \x01\xff\xcd#\xe0/~\x91\xff\x15\x7fQ\x1e]4\xf8\x7f8h\xf0\x01\x06\xe7\x13\x80\x13\xee\xaa\xcf\xe6mf\xc0\xee \x0f\xae%\x87\xc1\xe1\x0c\x10w\xd3\xdf\xfa\xc7\xc7\x0d\x7f\x17\xa5\x18\xa3\x08wTv\xc1\xb3w%\xe0\xed\x18\xba\xed\x1b\x97\x8d\x16\x07\x99c\xa8`Yd\xdb\x07l\x7f\x83\x1a\xe6\x81\xda~L;\xdaV\x8eD\xb4\xa3\x806\xb6\x00Ypv\x14\xcd\xe6\x110;\x88ec\x8b\xeem\x95y@\xb6\x1f\xec\n\xc4\"\x1b\xc6\xc6a\x94\x05(J\x82( \xa2t\xfeN\x10\xa5e\x04Q\x12D9\x1aA\x94\x9c J\xb7\x11Di\x8c J\x82( \xa2D\x8e\x92\x08\xa2\x1c\x8c J\xdb\x08\xa2$\x88\xd2a\x04Q\xba\x8e!\x88\x92 J\x82( \xa2\x9c\x9a\xff\xd3\x96 J\x82(=F\x10%A\x94\x04Q>(D)I3\xbb7\x9aKl\xa7\x87(\x0d\x89\x11/\xb6\x92\xf2\x0c\xf3\xe2\xf1\x0e?[\x80|\xbe\x00\x1c\xf9\xe9\xec\xf5\x08\xbf\xaa\xb6\x11\xd9\xefz<\xeb\x8d|SL\xbf\xf9\xf5\xdb\x03\x96\x15\xaf\xd4\xca\x04O\xa3\x88\xf2\xb2V\xe94\x17\x9cG\xcb\xda\xb5$P\x96@\xd9\xd8\x03\x82\x01-\x80@Y\x02e\xbdG\x12(+\x8d@\xd9C#P\x96@Y\x9f\x11(K\xa0\xac4\x02e \x94%P\x96@Ye\x04\xca\x12(K\xa0,\x81\xb2\x04\xca\x12(;5\xff\xa7-\x81\xb2\x04\xcaz\x8c@Y\x02e \x94}PP\xd6\xe6Mg\xec\x8a\xe5&\x9d9M%\xd1f\"\xf0T\xfaZ.;\xd6\xf7\x13\\\xf6[\x15\x1c\xbf\xb3\xee!\xf1\x10*\xe3\xb1@\x18\x8e\xe9MB\xa3\xa6@\x94\xaeD )\x9c\xde?\xb8W\xd3\xa6\xfdX]\xc3=\x19\x17J{\x1d'\x8c\x02[\x0d\x1a\x9fOL\x14\x1e)\x055\x8d\x8em\xfc\x01\x94\xc6GA&\xcdv\xf6\x1b\x1f\x03\xeff\x85\xfeM\xfcb\xba\xb12\x0c.\xe1C%L\xe1\xc4\xc8N\x8f\x85g\xedrj\xbb\xaac\x0d\x8f\x06\xb8X\x81\x9d\x9b(\xaaB\x98\xb2;\x1d4\xde\xdd\x07Qm@_\xfd\x9d%p\xa6F\xca~\x1e\x8f.\x88\x15\x867\xa3\xdfY\xd1\\\x0f\x94:\xddlq>\xc5B\x06\x1c\xa4\xaf\x9b\xf5\xc6j\xc2n\x7f\x94\x91\x9122RFF\xca\xc8\x08\xc7gdt\xef\xeci\x06=\xf1L\x8c\x8a$\x1b\x06^W\x97\xafg\xfe\x08*#\xa8,\xf6j\x8d?\xfc\xca\x08*#\xa8\xccm\x04\x95I#\xa8\xec\xd0\x08*#\xa8\xccg\x04\x95\x11T&\x8d\xa02\x82\xca\x08*#\xa8L\x19Ae\x04\x95\x11TFP\x19Ae\x04\x95M\xcd\xffiKP\x19Ae\x1e#\xa8\x8c\xa02\x82\xca\x1e\x0dT6@@\x85\xc1\xac(QFY\x0c\xd3R\xc4Q\x16\xc3\x13\x067\xdeF)\x8ba\x89(R\x16C\xcab\xf8\x1b\xc8b\xe8Fu_\xfc2R\xca\x81\xf4\x85\x06\x8a\x9b\xef\xe1\\7\xea9\x13\xbfU\xb7\xed\x9e\xdb\xefo5\xf1\xcb\x87l\x86\xc3\x80\xc0\x85\xef>1\x01x\xdc\xf4nQ\x9c/\xca\xe0Fe <\x84V\x84\xbe\x0d\x973\x04\xb2\xc61\xd62\xd4m\x84\xb9-X\xd0<\xda\xd6\xcf\xdaF\xef\xf5\xd1\x9cm\x94\xb2\xc5\x16!\x8f\xb0-\xc7\xd7b\xc8\xb8D0\x8e\xb88\xe2\xe2\\\xbf\x13\x17g\x19qq\xc4\xc5\x8dF\\\x1c'.\xcem\xc4\xc5\x19#.\x8e\xb88\xe2\xe2\x90\xa3$\xe2\xe2\x06#.\xce6\xe2\xe2\x88\x8bs\x18qq\xaec\x88\x8b#.\x8e\xb88\xe2\xe2\xa6\xe6\xff\xb4%.\x8e\xb88\x8f\x11\x17G\\\x1cqq\x0f\xc9\xc5M5\xda\x16zVu\x8b\xbbo\x0e\xc6\xa5\xa52\x13EdK\x87t\x97^\xd029\xcbvm\xcf%\x04!oP ?\xd9\xa5\xfc}\xb2;\xe3\xb6]\xee7\xcc\xba\xb5\xfa\x9c \xc4p).\xa0N~b\xea\xf5HA\x06;\x04\xb6y]ATJ\xdbV_o8\xfb\xcao6\xacY\xf3\xbb\x93K\xef\x7f\xa9\xbe\xd6\xdb\xfd\x16\xd4\xe5\x06\xed\xbd\xed9\x88b\x1cVM\xef\xfc\xa5n\xee\xe4\xdd>\xdeV0)\xe8dc\xd1\xb7\xfd\x89\xc3\x8d[vV\xce\xe3\xaa\xb3\xf8\xabR\x9euqHx&\xe1\xd9\xf1; \xcf\x96\x91\xf0L\xc2\xf3h$\x90\xa3\xfd\xfac\xc5\x9ae,R\xbcZ\x17\x8eTJ\xd5\xaf\xab5tl\xc5:\xd6,\x18<\x95\xd3\x18zj\xe3\x99yd\xd5\x07Nh\xb2\xc9\x18\xe3\x8b\x90|6\x14M\xf4o\xea\xca\xd6J\x18q%k\x87H\x7f\x9e\xcc\x03w\x7f\xd6]\x8b\xb5n\xc5\xbawqG[\xd1\x95\xb6\x0duM\x96\xfd\xa7|\xdc\xa8k\n\x19uM\xa1\x03N\xd35\xfdEw-\x90\xd51\xed;\xd7r\x83\xd1\xa8S\nZJk;\xcd\x83\xf6\xf1\xea-uJA\x9b\xc6\n\xd1)\x05\xd6\xbc\x8c\x96\x14\xa9\x94\xaa\xffU\xce\xf5\x8e\x0bA,\x8dKvP\x83@\x81\xf0\xd5\xb1e\xdd\x99\xcf\xb0\xc8\xf1\xcb\xba\xdfm\xaa\xfb\xd0\x8a\x9f\xd1rjoo\x96\xad\xae\xa5\xe7\xb5\xc7\xbab\xba\xcf\x8f\xddf\xb6e\xb6Z4\xa5V,Kn\xb2^D\x9ciWo\xeb\xe6SF\xbf\x19\xfa\xc6\x8c\xf7\x97\x91\xbe\x12\x11Y\xf3\x1eQ\xe3\xd1M5\xff\xca~&\x1a\xcaj/\x97\xd6\xc0\xa2\xe2l\xddv\xf5\xbf\xcb\xd9D\xa7\xc7j\xcf\xef\\\x8b\xe5\x94\xe1\x0b\xf4J\xfa\x89\xce*,\xda\xe63\xeb\xfa\n5OUl\xc6\xc7\xb9K}\xdb\xd5\xeb\xba\xa96z\xc1\xb9\xeen\xac\xf29}\x0eC\x86\xe5\x8dg\xb2SY\xa1\xb6\x10yg\xe2\xde\x97\xd2\x15\xe6\xf1\xba\xd6\x08\xf5P\xc9\xf0I\xf1\x9b\xa4\x8c5\xfbm\xac[y\x0e\x97\xef?\\\xdf\\\x9d\xff|~u\xfe\xee\xf5\xf9\xcd\xf5\xdf.\xcfo>\xbe\xfbpy\xfe\xfa\xe2\xe7\x8b\xf37Y\xe7_\x9d_\xbe\xfd[\xd6\x99\xff\xfa\xf1\xfd\xf5y\xd6\x99W\xe7\xe2\xaf\xc1S\xcdz\xd9\xa3\xea\x8c\xe1\xf3G\x8b\xc6\xf7%\xbck\x917\xdeZ=\x10\xeb\xff\x03\xb7\xe5\xa5Zg9\x8e\xc1g\x89+v\x9b{\x93nb\\\xac\x10\x98H\x8c\\S\xde\xd0\xf05\xff\xb1o\xf9\xb8\x84\xa0\xc05US\x88V\xd4\xea\x7f\xd0W\x8ddkQ\x86~BQ\x9d\xa9\xb2\x83\xa9\xff\xb1GD\x94Y\x82S\x0fV\xe8\xe8Sr\xa9KxP\xb7\xf9\x00\xe1\xfb^\x0e\x11\x02\xf8\xaf4\xb5\x92x\xa0J$\x85\xd16\x9b\xc0\xcaQeC\xf6&\x11\x0c\xa3\xb8\"\xfa%\x93\xb5\xa4\xed\xf9\xd5Pt\xff\x80I\xb6\xbc\xd83\x1f\x8f\xdd+\x95\xc3e\x18\x83Xm\xbd\x87\xa7\xac\x96+\xbe\xaa\xe1\xa9~\xa6\xdb\xbc\xd7_\xdb\xa9G\xd1\xfdE-}\xdc\xf4\x8c\xf3\xba \x8c\xc5T\xa9\xafd7b\x0eV\xb7\x15\xa3G\x04\x9b_\xf8}\xf6\x1cd\xf7v\xf3\xe1\xfc\xfa\xfa\xe2\xdd\x9fP\xfd\xf9\xfc\x9c\xf3\xbf\x9e_\xfd\xed\xfd;\xff\x8d\x9e\x9f\xf0\xf3\xfb\xb7o\xdf\xff\xaf\xf3\xab\x0f\xe83\xfe\xf2\xf1\xfa\xe3+\xff8\xf9\xe0\xf0\xf3w\xd7\x17\xef\xdf\xf9\xfc\x0fo\xb4\xd4\xba\xe3R\xd1\x04\xa3\xaa\xdf\\\xd6\x8d\xc6\xbc\x9f|!\x7f \xe7\x9fYw\xdf6l\x00K%+\xc2[\xfb\x9d\x14nC\xa1\x1b\xf4R\xb1Sj\x8d3\xeb\x06\xc4O\x0d\xc4\x8b^S\xddb}A\xeb\x1a\xdb=\xdf\xcb\xc5\xf7\xa6\x08E/\xaa\x1b\x8a\xbe\xec\x8e\xb5\xbb\x0d3s\xe0\x12\n\xd1\x1d\xa9\xf6\xec\xbe\xb8\xf3zR=\x16\x1f\x0e\xcb\x8a\x97X\x96)\xdc<\xe7\xf56\xd2\xf3\xbd\xd6\x97\x95\xc7G\xbfp$>\xce\x965g\xcbo\\N\xeb+\xe7m\xd5sP\x85\x00qb\xb4\xd42\xdf\xd6\x11E\xd5E\x90)c\"\x17\xb3\xdeQ\xd6\xcaQ\x8d\xc7\xd4\x8d\xaa\xb4\x08wu\xdb\xee9T\xd0\xd7\xcdz\xe3t\x17L\xe0\x15\xfa~\xa2\xf4[\x94~\x8b\xd2oi\xfbm\xa7\xdf\xf2\xb5\x1e\x89\x05N\xe0;\xd4\xb6\x86.//\xa6\x0c\xdf\xec\x901\xa1\xd6\xf0\x03\xe5\xd3\x9a\xfdJ\xf9\xb40=\x832\xca\xa7E\xf9\xb4\xdcF\xf9\xb4\xa4Q>\xadC\xa3|Z\x94O\xcbg\x94O\x8b\xf2iI\xa3|Z\x94O\x8b\xf2iQ>-e\x94O\x8b\xf2iQ>-\xca\xa7E\xf9\xb4(\x9f\xd6\xd4\xfc\x9f\xb6\x94O\x8b\xf2iy\x8c\xf2iQ>-\xca\xa7\xf5\x90\xf9\xb4xk\xc9\xc4\x8a\xe3\x9aN\xa3\x9e>\x91\x16\xa5\x92J\xcb\xd3C\xa9\xa4N\x18\xdcx\x1b\xa5TR%\xa2H\xa9\xa4(\x95\xd4o9\x95\xd4\x8b_4\xcc\xffO\xe5\xcb\x95TJ\xd2r&\x97\x94hk\x13,.%\x9f\xd4\xe5\x88\xd1=\xea4RE\x89\xbeh2\xa8\xa8\xf8\x80\xe7\xd0\x92s=\x05\xb2\"\xc52:\xf1 Q\x03\xa8lN\x87\xc5>6\x97\xd37\x0826\x87S4\x83S\xb4L\x87pmJ\xf6&\x7f\xee\xa6\x8c\x0b#\xf26\x85\xb369\xea\x92\x91\xb3)\xf8\x1cB\xf4Y\x04T\xb6&\x1e\x80\xb4\x8cE3\x0fDK\xaa,^^e\xa8\x9c\x03\xd1\xfb:\x1a\xa2\xb9\x8f\x16\xa3\\GC\xaf\x9fw\xa4\x13v\x19\xc7\xa7?A\xe4\x19\xf8\xf5\xc6'\x9a]\x00\x91\xf0$!:\xe3Jpl\x1e\x93X\x96\x92\xa29J\xb4\xb3\xe3\x92'\xc5S'Q?1\xb3\x87\x7f\x0e\xa8\x9fp\x1b\xf5\x13\x01g\xc7d2\n\xe71\xa2\x1ebf\x0f\xfb\x04 s\x16\xfdf{\x08T\x9e\"D\x9e\x9e\x84\xe8\xe0+\\.?\x11>;QBn\xa2\xf4:\x1f\x97\x97\xc8|\x8c\x1e\x9d\x95H;\xca\xcaI\xe4\xff\x8e\x8a\xf5|\xc1^/\x1a\xcb\xf1\xbdR\"\x13Q(\x0f\x11\xb6(\xa8\x1cD\xa8\x0cD\xd1+\":\x94\xc3\x16v\\\xee!\\\xe6\xa1\x02\xf7\xfc\xe8\\\xcc\xd2M\xfc\xb1I\xc96\x14\xbd!\xca\xe2\x99\x86\xa2yp2\xce\x8eg\x19\xca\xcd1\x94\x99a\xa8@~!\x0c\xadl,\x1a\xd3\x84\xdcB\x88\xcc\x0d\xf0 y\x85\xbe}V\xa1o\x9cSh\x17\xcf(\x84|\n\x11\x9d\xa3\xb2\x83\xa9gl.!L&\xa1\x13\x156\xf2,\x94\xcd \x94\x97?(/{\x90\x95\x97\xa1P\xee\xa0X\xc42\xf3\x06\x81wm\x9f7k\x10&g\x90.mj\xc6\xa0h3\x0b\xbd\x93\xd2s\x05%f\nJ\xcd\x13\x94\x94%()GPf\x86 \\\xae\x8c\xc2\xd9\x81N\x9a\x1b\xe8\xdbg\x06z\x80\xbc@\xdf,+\x10\"'P\xf4 \xc5\xe5\xd9\xd1\xfdCJ6 \\.\xa0\xb2\xe5\xcb\xcf\x02\x14\xc8\x01\x14-\xa2\xbex<\xff\x8f\xf5\x969.\xfb\x8f\xef\xe5\"\x19\x0c\xf5\x12C\xa4\xeb\xd0 :dq\xae._\xcf|QZ\x0eJ\xcb\x11\x1bCb?\x94(-\x07\xa5\xe5p\x1b\xa5\xe5\x90Fi9\x0e\x8d\xd2rPZ\x0e\x9fQZ\x0eJ\xcb!\x8d\xd2rPZ\x0eJ\xcbAi9\x94QZ\x0eJ\xcbAi9(-\x07\xa5\xe5\xa0\xb4\x1cS\xf3\x7f\xdaRZ\x0eJ\xcb\xe11J\xcbAi9(-\xc7C\xa6\xe5p/\xc3\xdc\xd4\x93/\xb3o\x90\x9aC\xe1A\xf1\x82+V\xd5\xe4\x12\xf96\x19DJ/\xc4~Qq^-\xee\xb6\xac1\x9c\xa5oQ\xf6\xab\xf1\xc0a}\xb6\x9c\x96\xb0\xfen\x07\xe6\xae\xfal\x92\x8c\xa8\xb5\xdaCH\x0fVi[\xae\x9f\x98X=\xd2\x05\xdb\x07\xe1\xb2\x8d?\x80\xb0\x17]\xf0\x9d4\xb1\x85\xd9c40\xa9\x85~\xa8y;\xfc\xa5\xf6\xcf\\\x8e\xc1\xb6x{\xef\xd1\xe3\xc2^\x8f\xcb\x08\xf7\xf7\x10a:\x0c\x86\xbb\xd2>OC\x9d\x9dG\xc4\xea\x1aZN\x8fYP?r\x8d\xab\x01\x1f\x1b\x8b\xef\xa0\xb4\x02\x0eq\x15\x1c2\x94\xf0p\x05*~\x87V\xc3\xa1\x94\"\x0e\x99\xaax\xd0\xa1\x08.Z\x19\x87\xe3\xd5qHV\xc8\x83\xae\xb4r\x97\xa4\x92Ci\xa5\x1c\x12\xd5rHU\xcc\xc3-{P\xd3\xb1\xaa9\x94V\xce\x01\xa7\x9eCI\x05\x1d\x8eV\xd1!OI\x87Rj:d)\xea\xe1\xc7\xa1RDz\xf4\xb99\x89\xb2\x0e'T\xd7\xe14\n;$\xaa\xec\x90\xa7\xb4\xc7\xba`\x9c\xda\x0ee\x15wHP\xdd!]y\x87\x0c\xf5\x1d\xd1e\xfe\x80P\xe0\xa1\x84\n\x0f1%\x1e\xf0\xc33\x84\"\x0f\x89\xa3\xb8de>\xe8M\xaa\xf6\x08u\x1e\x12JYP\xa5\x87$\xa5\x1eJ\xab\xf5\x90\xa9\xd8\x87\xdbU\x1fW\xed!_\xb9\xf7\xfa\x13W\x8c\xa9\xf7PL\xc1\x07\xbc\x10\x0d\x18%\x1f\xd2\xd4|\x88\xc9e\x99\xaa> \xfc\x06\xa6\xea\x0b)\xfc\x90\x15\\\xbc\xd2\x0f\x88Zf(\xfe\x90\xab\xfa\x03.\xaaG\xab\xff\x80'\x00\x00I\x01\x00\x9a\x04\x00\\\xd0\xd3\x89\x00H\xa2\x02 D\x06@):\x00R \x01\xc8\xa4\x04 \x8d\x14\x00\xc4M\x08\x11\x03\x809\x1fO\x0e@Az\x000E\x0b\x10\xcd:L4@Y\xaa\x01bd\x03\x84\xe9\x06\xef9\xb9\xd4\x03\x14l\xbb \xf4\x03$\x11\x10\x10\x18\xa1\x98\xb5\xd3J\xe6\x1a\xd0\xfd\x90(fr:\x8d\xba\xdf4\x17E\xc5+\x95\x88\xc2\xce\x83\xee\xf58f\xab\xf7\xe9\xd3Yy\xc5\xcd\x96\"\xfe\xd5\xa5\xa8\x85\xdd\xdei\x1a\\\xf6\x83ac\x13\xbd\xd2y\xd8\xe3\x04vU\xdf\xab\xa9]\xb5\x13\xca?\xf6\xac\xe7g\xeaw\x8f\xb3q\x0b\x98\xd0&(\x17\xdcz\x82\xe5~\x13\xbe \x00.3\xc4U\x1d\x83\xa6\x85m\xdb\x99\xcd\x18\x9c\xb3`r?\x84#\x83\x19O\xc9\xe5\x9dC\x1a\xb6c\xf0\xed\xcfa-e\xf2\xd5\xd7\x0e\xb4\xbd\xb3\x85\xe7\xf0/\x95\xdc\x06\xe1\x19\xd4\xbc7\xd3\xfc=\xec\x1b\xa9\x84\xb0\xa5\x9a\xc9\xfcR\xf7\x87\xed#>-f\xef~\xa3j5\xe1\xc7\xea\x06\xd6W\x97\xaf\xc7\x85\xf1\xba\xfb\xeaUV?\xd7\xedq\xabL\x8b\xb6S>dO\xdd\xa9\xca\x0f\xef\x19\xf1B\x91\x93\xa3vd\x9c\xe10g|h\xb7c\xb9\x83\xfd^\xc7v2 =\xfc\xb1\xea\x86\x9b\x14\x1bYL\xc2\"\xdb\xb7o\\1\xed\xcet\xeb9x\x0c\x87\x8c\x03\x16\xb0\x83J>\xe0\xf2\xf3b\x0e\x15\x89;Dy\x08(\x0fAl\xda?\xde\x1d(K\xa51\xcc\x14\xb6\xd7!\x96\xc4(JaP\x1e\x02\xcaC0ZQ\xba\"\x85\xacH\xa2*(\x0f\xc1\xb1\x04E\x06=Q\x84\x9cH\xa7&(\x0f\xc11\x94D\n!\x91AGP\x1e\x02\xcaC@y\x08\xb0tCQ\xb2!\x87j\xa0<\x04\xbe\xc3\xa2\xf4B\x02\xb9\x80Ye\x9fB,P\x1e\x02\xcaC\x80\xa0\x0f(\x0f\x01d\x12\x06 t\x01\xe5!(@\x0fD\xc9\x81\\j\xc0\xfb\xae\xa1<\x04\x87Fy\x08(\x0f\xc1\xccJ\xac \xc7*\xfa\xc9j~\x92\x92Oy\x082\x15{\xcaC`\xecty\x08\xc6\xad\xbe\xa4\xd4.\xe7\xecg;\xd1\x9fjy\xff\xd1Y\x08\xf8lE\xfe\xb7\xc9J\x00\xae\xcd\xf2?\xb1{_\xe9g\xca\xa2V\xf4+\xfd\xd2\xb2\xf7\xc2\xb7%\xcc\xb3A\xfe\x97sv\xeb\xd9\xe4\x96\x0c\x80I9\x10\x92\xf4eb\xfe\xb6\x91\x1f\xf5\xedj\xd53.\xbe\x93\xa7\xc5\x05Ks\xe8\xd9d\xf3\x92\x9c\xdd\xf4\xbda\x9c\xcc\xe08\x82\xa8\xca\xe7\x8b\xe3l\xf6DWF\x86\xb2\xd9o\xe5fl\xfao\xb2\x7f[T\xcd\xb0\xb9\xca\x97;\xd6\x98\xc0\xef\x9ba\xc6p\xf6\xa1p!\xbdmX\xdf\x8f!Tsl\xfb^\x84\xfa\x13K\x8c\xe7\xd4\xfd\x89\x83\x1bo\xa3\x9bz[c\xa3+\x8f52\xb7\x8f\x9bP\xb3\xc9v\x0b\xd6\xa2\xf8~3S\x99\xd5\xdc\x91\xfd\xa7\x8b\x15l\xd8\x8a\x1b\xceD\x83'f4.'\xc2\xd5\x03\xa2.\"\xe2|{\x0f\xacZ\xdcA\xb5\xdb=`\x14m\xfac}\xaf'\xb0\x7fp\"\x1d\x93\xf2\x0f \x9b\xb8\xde\xb1d\xe4,\xee\xc4\xb0\xa7D\x8b\x18ve'\x0en\x9c\xbe&\x86\xbdD\x14\x89a'\x86\xfd7\xca\xb0\xf7L\xcd_\xbf\xf8E\xffk$\xdb\x95_\x17\xb7\xfeA\x1dz)\x8e\x1a\xc0u\xa9\xae\xebQ\xd2\x80\x86V\x9aU\xd7\xce\xb5\xa3 \xb0n;{bb\xf0H\x89u+.\xb6\xf1\x07\xc0{\x1e\x15\xaf\x8e\xde\xfbU|G\xde2\xe6\xd7J\x17\x1d\xf3\xe2\xd3c\x0b\xfd\xe6\xd4\xb7\xbet\xa4V\xc1\xd2\xc7J]\xec>}\x94\xd0\x15\xd4\x93\xef\x16\xe7)\xec+g]S\xc59z\x0c\x91\xfd\xb4\x1dF\xf2\xe7\xda\xaf(\x83B\x14\xeb\xde_\n\xce\xbeF\xf6\x84M\xbc\xfc\xb5\xe6s\xc2uox\x1d\xdaH\xd6Q+}\x86\xb5\xd9\xb0Y\xab\xe0\xbdJ\xf41\x07\xc4\xa3.\xec\xae\xea\xef\xa6\x9d\xfd\xa1\x85\xba\xa1\xd1\"k\x07\x00Wfe\x98\x92+\xeby\xd5y\xef\xf2h\x88\xfb=\x1a\xea\xa1\x18-\xde\x8d\x8d&\x17<\x9864\x10\x7f\xf6\x82\x07 \x81Ev\xd0U6v\x16\xbcZ\xab@\x84\xb7\x0f\x14\x8d\xd3\xfb@\x8e\xf6\xeb\x8f\x15k\x96\xb1H\xf1j]8R)U\xbf\xae\xd6\xd0\xb1\x15\xebX\xb3`\xf0T-\x1eQ\xd3\x18\xcf\xcc#\xab\xbeyb;\x10\x08c|\x11\xdekI\x17M\xf4o\xea\xca\xd6\xc2\x15q\xa5/5\xbf\xd3_lj\xae\x8a}\x0d\x05]\xbb\xfb\xb3\xeeZF\x7f\xf6\xbd\x8b;\xda\x8a\xae\xb4m\xa8k\xb2\xec?\xe5\xe3F]S\xc8\xa8k\n\x1dp\x9a\xae\xe9/\xbak\x81\xac\x8ei\xdf\xb9\xd6b\x8cF\x9dR\xd0RZ\xdbi\x1e\xb4\x8fWo\xa9S\n\xda4V\x88N)\xb0 h\xb4\xa4H\xa5T\xfd\xafr\xfaw\\%c \x80\xb2\x83\x1a4\x0b\x84\xaf\x8e-\xeb\xce|\x86E\x8e_\xd6\xfdnS\xdd\x87\x96C\x8d\x96S{\xeb3\xf1\x8d\xba\x96\x9e\xea\x1e\xeb\x8a\xe9>?v\x9b\xd9\x06PjE\x99\xe4M\x14TZ/\"\xce\xb4\xab\xb7u\xf3)\xa3\xdf\x0c}c\xc6\xfbK\xd4\xbat\xcc\xd7\xfc\xb5\x1a\x8fNr\x1c\xc8\x92?\x13\x0de\xb5\x97\xeb\x8e`Qq\xb6n\xbb\xfa\xdf+krqj\xd5\x9e\xdf\xb9V\x12*\xc3\x17\xe8\x95\xf4\x13\x9dUX\xb4\xcdg\xd6\xf5\x15j\x9e\xaa\xd8\x8c\x8f\xd5\xfa\xc6)\xab\xb6\xab\xd7uSm\xd4\x0d7\xdd\x8dU>\xa7\xcfa\xc8\xb0\xbc\xf1Lv*+\xd4\x16\"\xefL\xdc\xfbR\xba\xc2<^\xd7\x9a/\x1f*\x19>)~\x93\x94\xb1f\xbf\x8du+\xcf\xe1\xf2\xfd\x87\xeb\x9b\xab\xf3\x9f\xcf\xaf\xce\xdf\xbd>\xbf\xb9\xfe\xdb\xe5\xf9\xcd\xc7w\x1f.\xcf__\xfc|q\xfe&\xeb\xfc\xab\xf3\xcb\xb7\x7f\xcb:\xf3_?\xbe\xbf>\xcf:\xf3\xea\\\xfc5x\xaaYL|T\x9d1\x8b\x17F\x8b\xc6\xf7%\xbck\x917\xdeZZ\x11\xeb\xff\x03\xb7\xe5\xa5Z\x84:\x8e\xc1'c\xe2\x8e\xed6\xf7\x1a?\xb2Vr\x04&\x12#\xd7\x9474|\xcd\x7f\xec[>\xae\xaf(pM\xd5\x14\xa2\x15\xb5\xfa\x1f\xf4U#\xd9h\x94\xa1\x9fPTg\xaa\xec`\xea\x7f\xec\x11\x11e\x96T\xd9\x83\x15:\xfa\x94\\\xea\x12\x1e\xd4m>@\xf8\xbe\x97C\x84\x00\x1b-M-\xb3\x1e@\x13 f\xb4\xcd&\xb0\xacV\x99\\\x1b\xc4\x0d|\xaaEXD\xbf\xa4\xeby\xd9\xf6\xfcj(\xba\x7f\xc0\xa43%\x85\x9f\xf9x\xec^\xc1\xa6\x96\xe4\x97\x1e\x83Xm\xbd\x87\xa7\xac\x96\xcb\xe1\xaa\xe1\xa9~\xa6\xdb\xbc\xd7_\xdb\xa9G\xd1\xfdE-}\xdc\xf4\x8c\xf3\xba \x8c\xc5T\xa9\xafd7b\x0eV\xb7\x15\xa3G\x04\x9b_\xf8}\xf6\x1cd\xf7v\xf3\xe1\xfc\xfa\xfa\xe2\xdd\x9fP\xfd\xf9\xfc\x9c\xf3\xbf\x9e_\xfd\xed\xfd;\xff\x8d\x9e\x9f\xf0\xf3\xfb\xb7o\xdf\xff\xaf\xf3\xab\x0f\xe83\xfe\xf2\xf1\xfa\xe3+\xff8\xf9\xe0\xf0\xf3w\xd7\x17\xef\xdf\xf9\xfc\x0fo\xb4\xd4\xba\xe3\x92\xee\x04\xa3\xaa\xdf\\\xd6\x8d\xc6\xbc\x9f|!\x7f \xe7\x9fYw\xdf6l\xa0n%>\xc2[\xfb\x9d\x14nC\xa1\x1b\xf4R\xe1Tj\x018\xeb\xc6\x9cQj\x00]\xf2\x9a\xea\x16\xeb\x0bZ\xd7\xd8\xee\xf9^f&0E(zQ\xddP\xf4ew\xac\xddm\x98\x99\x03g\xcb\xb1#\xd5\x9e\xdd\x17w^O\xaa\xc7\xe2\xc3aY\xf1\x12kV\x85\x9b\xe7\xbc\xdeFz\xbe\xd7\xfa\xb2\xf2\xf8\xe8\x17\x8ed\xeb\xd9\xb2\xe6l\xf9\x8d\xcbi}\xe5\xbc\xadz\x0e\xaa\x10 N\x8c\x96\xba\xfd\xd2\x94\xc8:\xf6^\xb8\x89\\\xcczGY\xcbj5\x1cS7\xaa\xd2\"\xdc\xd5m\xbb\xe7\xd3\xad\x9dg\xee(\xd1\x18%\x1a\x8b\x0fP(\xd1\x18%\x1a\xb3-!\xd1\x98\xcd\xde\xe5g\x1a\x9b\xe0\x80\x94j\x8cR\x8d\xb9~\x8f\xbc`\xe3\xfd\x822J5F\xa9\xc6\xdcF\xa9\xc6\xa4Q\xaa\xb1C\xa3Tc\x94j\xccg\x94j\x8cR\x8dI\xa3Tc\x94j\x8cR\x8dQ\xaa1e\x94j\x8cR\x8dQ\xaa1J5F\xa9\xc6(\xd5\xd8\xd4\xfc\x9f\xb6\x94j\x8cR\x8dy\x8cR\x8dQ\xaa1J5\xf6\x90\xa9\xc6&\x99\xa4\x14\xc5ul\x1e\xac\x83\xaf\xf9H\xc6\x991\x7f\x01\xa2\xdc:\xe1\xc0 \x8a\x9d\x9a\xbe\x8bRb\xa5\xe5\x1b\xa2\x94X'\x0cn<\x99\x13\xa5\xc4*\x11EJ\x89E)\xb1~\x9d)\xb1:V\xe9\x94W\x9f\x7f\xe7\xdf\xdaY\x8c?\x02\x19\xb0\xae\x8c\x93Ky\xa0\xd2\xd3z\x98\xa5\xabT\xc7\xa8\xc1\x8cF\xd2\xcdU\xb4\xc3I&\xac\x99\xd3'\xa6\xf6\x8f5\x19\x96\x15#\xdb\xbc\xae \x8a\x92D\x93ZEe\x14\x0cGk\xc4\x90\xa7\x13C)\xad\x18\xb2\xf4\xe2\xf0\xe3P\xa9\xbc\xe7\xd1\xe7\xe6$\xba1\x9cP;\x86\xd3\xe8\xc7\x90\xa8!C\x9e\x8e\x1c\xeb\x82qZ2\x94\xd5\x93!AS\x86t]\x192\xb4eD\x97\xf9\x03B_\x86\x12\x1a3\xc4F\x81\x80\x1f\x9e!\xf4fH\x1c\xc5%\xeb\xceAoR\x93Fh\xcf\x90P\xca\x82\x1a4$\xe9\xd0PZ\x8b\x86L=:\xdc\xae\xfa\xb8&\x0d\xf9\xba\xb4\xd7\x9f\xb8bL\x9b\x86b\xfa4\xe0eV\xc0\xe8\xd4\x90\xa6UCL\x0c\xca\xd4\xac\x01\xe170\x11]H\xbf\x86\xac\xe0\xe2ul@\xd42C\xcf\x86\\M\x1bpQ=Z\xdb\x06\xbc\xbe\x0dH\x8d\x1b\xd0:7\xe0\x82\x9e\xaewC\x92\xe6\x0d!\xdd\x1bJi\xdf\x90\xaa\x7fC\xa6\x06\x0ei:8 nBH\x0f\x07\xcc\xf9x]\x1c\nj\xe3\x80)Z\xe0)+\xa7\x93\x03F+\x87#\xf4r\xafCq`H3\x87\xd2\xba9D\xb5s\xc8\xd5\xcf\xbd\xde\xd4\xf7ox*\x00\xa1\xa3CXK\x87,=\xdd\xeb*\xa8\xb3C\xae\xd6\xee\xf5\xa6\x86\x91\x81I\xb7r\x9a;\xa0tw\xc8\xd0\xde!M\x7f\x87\x1c\x0d\x1e\x92ux\x08w#\x10\xd1F!A\x1f\xc5j\xf2\x90\xa3\xcbC\xaa6\x0f\xe1\x8a\xe7h\xf4^g\x96\x02\x8e}dpZ}\xf0\x81h\xd6a\xbd\x1e\xcaj\xf6\x10\xd3\xed!\xac\xdd{\xcf\xc9\xd5\xf4\xa1`\xdbM\xd0\xf6!I\xdf\x07\xef\x08\xe54;\x11\x1by\xcdq\xce\xb0E\xa0\x16\xe0\xa6\xfb$V\xbc\xd2\x19)\xc6\xed\xa7|\xdeh\x1f*\xda\x87*\xae\xbc\xd3>T=\xedCeY\xc2>T\x03wS`Y>\xed@E\x0b\xf4\x9d\xbf\xd3\x02}\xcbh\x81>-\xd0\x1f\xad(\x98\x91\x02e$\x01\x19\xb4@\xffX\xf8\"\x03\xbc(\x02]\xa4\x03\x17\xb4@\xff\x18\xc0\"\x05\xae\xc8\x00+h\x81>-\xd0\xa7\x05\xfaX0\xa2(\x14\x91\x03D\xd0\x02}\xdfaQ\xf0!\x01z\xc0,?O\x81\x1dh\x81>-\xd0G\x80\x0b\xb4@\x1f2\xe1\x84\x040\x81\x16\xe8\x17\x00\x0f\xa2\xd0A.p\xe0}\xd7\xd0\x02\xfdC\xa3\x05\xfa\xb4@\x7ff%\x16Kca\x80d\x10 \x02\xa0\x05\xfa\x99b?-\xd07v\xba\x05\xfaj\xbf\x9eI>l\xbd\x96\xd7\xb3\\\xdd\xf2}\xaaE\xfb\xd6\xd6!j=\xb3\xaf>\x97\xa2\xa8\xf5\xf2\xb1\x94v\xdfO>\xcbCJ\xffS3k\xfc\x03|\xec\xc5;\xdc[\x83\xe9K\xc1\xa4V_\xb7r\x03\xaav\xc8\x9f.G\x0cbh\xad\xee_\xbd\x94\xbb\xa6\x0c\xf3\x13\x95\xeaO\xcef\xf1H\xdd\xd4d\x16\x11\xda\x8c+%Z\x9e\xa9,\xda\x8c\xablp\xe3\xdbH\xd1f\\%\xa2H\x9bq\xd1f\\\xbf\xe5\xcd\xb8|I\x81^\xfcb\xfe)\xfe\xae\xae\x13J\x11\x14\xde\xa6K\xce\xe1\x8b\xbf\xa8\x1cA\xc3X\xc8\x99!\xe8\x89\x89\xc6#O\x10T\x14\xd8\x8c\xa6\xf9\x89jLx\xcc0+\x8b\x8f'[O0W\xcfI\xca|D\x96\x9ep9C\x19z\xe2\xf9y\x8e\xc9\xce\x13\x10\x17\x83M\n\xa2\xcd\n\x10\x00\x17\xe2>\x01R\x04T\x96\x85q\x05\xfc%e\xe3)\x8arEa\xae\xd28\x17\x1e\xe8*\x84t\xe5A]\x01w\x89\xf9w\x8e\x04\xbbJ\xa3]\x89pWa\xbc+\x0d\xf0JD\xbcBm8#\xe3NQ\xcc\x0b\x05z\x15D\xbd\x8e\x85\xbd\xb2p\xafB\xc0W\x0e\xf2\x15p\x86\xce\xb0s\x02\xec\xebt\xe0\xd7I\xd0\xaf4\xf8\xab8\xfe\x85\x05\xc0\x8a\"`x\x08,\x19\x03K\x07\xc1\xa2]!.\x97\xce\xd10X4\x8f\x0ej@\x85@\xc2RF]\xc9XX\xe8%\x88\xce\x9e\x83+_A8,\x05\x0f+\x0c\x88\xe5!b\xa1\x16\x84\xca\x98\x93\x89\x89y\xbcqT\xb6\x9c2\xa8\x18\x9awB\xe0bI\xc0X,!D\x0e4\x16\xf3\xe9U\x81\x0b\xa1c\xe9\xc1\xc4\xe3c\xb1\xbae d\x99\x10\x19\"\x8eG\x83dh\x94\x0c\x07\x93aq2D\x90\xd3\x91\xb2\x14\xa8,\x98\xff\xa6\x08X\x96\x88\x96\xe5\xc1eIxY,\xe8\xe1\x9c7\x91s\xf1\x98Y9\xd0,Z(\xef\xf3S\x0e7C\x00g\xf9\xc8\x99\xc7\x1d\x8ff\xb8)\x8a\x9d\xc5\xc0\xb3L\xf4\xcc\xe3+\x9e\xd9\x06\x81\x9fE\xb2\xda\x94F\xd0\x8aCh~\x0c\xad$\x88\x86A\xd1\xd2a\xb4$\x1c-\x03HKE\xd2\"\x99j\xc2\xa5\xc3BBX0-\x03MK\x84\xd3\x02\xd5\xcd\x01\xd4<\xae\x10\xb9ir \xb5@\x93\x8f\xe7\xa5)\x08\xaaEs\xd2\x9c\x02V+\xd5\x16\x13\x80\xb5\x14d\xcd=>\x08\xe5\x9b\x89~\xfa\xa7\xe5\x9a)\x95i\x06\x95#\x02\x95\"b\x96\x14b\xe6\x8f2DP\x86\x08\xd7\xef\x94!\xc22\xca\x10A\x19\"F+*!\xa6\x08\x88I\xf2!e\x888V4\xcc\x90\x0c\x8b\x08\x86\xe9r!e\x888F&L\x11 \x0bK\x848\x81\xb0\xa0<\x88\x15\x07\x1d\x83w\xca\x1015\x84\x1c\x88\x1d%%K\x81\x94!\x02%\x00\xe6\xc8\x7f\x94!\xc2wXT\xf2K\x10\xfc0\xf9\x0fR\xc4>\xca\x10A\x19\"\x10\x92\x1ee\x88\x80L\x11/A\xc2\xa3\x0c\x11\x05$\xbb\xa8`\x97+\xd7y\xdf5\x94!\xe2\xd0(C\x04e\x88\x98Y\x89\xd5\xfaX!.Y\x86K\x12\xe1(CD\xa6\xf0F\x19\"\x8cQ\x86\x08c\x8f9C\x84\xb524~\x07\x86ep\xa6\xf0G\x15\xf5P_s\xad\xcc+\xb24\xb6c\xeb\xba\xe7\xacc\xcb\xe7\xc3\xf1\xfeu\xb0\xd6\x9c\xc7\xd5p\xe2\x988\xdf\xbd:\xd6\x1c7\x06I\xbc\xed\x07G\xa68\xfa\x0f\xb3\xc5\xb2\x07\x17\xd1\x87=\xe2u\xb3\xa6\xc87\xb3\x80\xda\xc6\x1f@\xc0\x8c.\xbeM\x9a\xc0\x0b,f\x8d\xef\xf4\x01\xae\xceK\xf4\xf9f\xb9k\xdd\x1f\xae\xcd\xf5\xfa\x1aC\xee<$V\xdd\xd0\x8aX\xcc\x9aX\xe7\xaa\xd8\x83F\xef\xbe%wm\xc7\xef\xaafy\xe3\x96\xdb\x95!\xee\x8a.\xc1G\xa9\x0f\x8fn\xa5\x8ao\xad\x16V\xefg+\xb8Nw\xcb\xba\xdfm\xaa\xfb\x9bc\xe7zu\xa1\xfe\xaaRb\x88W\xd3\xa8\x86\xeak\x98D\x0c*YI\xach\xe1fu\xd8Y\xcc8\x12E\x13(\x94$\xd2f\xe6\xcb\x9a=\xf3\xae\xb3\xbe\xcb\x18mwD\xdb\x1d\xc5Z+mw\xa4\x86\xf7\xb4\xdd\x911\xe7vG\x07\x8f\xa1F\xd9\x0e\xc6E(\xaa\xcd\xe5\xeb\x85k$'\xee\x14\x11mD\xb4\xc5^\xf1\xf1nA\x19\x11mD\xb4\xb9\x8d\x886iD\xb4\x1d\x1a\x11mD\xb4\xf9\x8c\x886\"\xda\xa4\x11\xd1FD\x1b\x11mD\xb4)#\xa2\x8d\x886\"\xda\x88h#\xa2\x8d\x88\xb6\xa9\xf9?m\x89h#\xa2\xcdcD\xb4\x11\xd1FD\xdb\x83\x12m\x11\x96\xe8\xdbsa\xb4\x81N\xda\xee$\xb4\x81\xce \x83\x1bo\xa3\xb4\x81N\x89(\xd2\x06:\xb4\x81\xceox\x03\x1d\x17%\x8c\xdf;\xe7\x00\xcbK\xe1\x84\x13\xf9\xe0'&F\xffy\xf0\xe0\xa2\x8c`\x14\xf2\x8d*\x1a\x05\xc8\xb6rpo\x10\xd3\xfc\xc6\x1b\xdd`\x90^\x0c\xd0\x1b\xbd\x03\x05a^\x04\xca\x8b-N)\x8c7\xd4x\xca!\xbc(\x80\xd7\x89\xef&\x82w%\xb9;\xc2\xee\xb4\x11vG\xd8\xddh\x84\xdd\x11v7\x1aaw\x9c\xb0;\xb7\x11vg\x8c\xb0;\xc2\xee\x08\xbbC\x8e\x92\x08\xbb\x1b\x8c\xb0;\xdb\x08\xbb#\xec\xcea\x84\xdd\xb9\x8e!\xec\x8e\xb0;\xc2\xee\x08\xbb\x9b\x9a\xff\xd3\x96\xb0;\xc2\xeeR@\xc2\x0e\x86m^W\x10\x95\xdcz^5\xcb\xaa\x93\xc4E\xefL\xc7\x06\x11)\x10Br \xc4J\xa7,&\x0bB0U\x19D5\xd3\xd1\xe2t\x832\x07\xe3 \xe2\x03u\xd3\xd7K6\xe9\x10\xbc^\x94\x8fh\xa1\x83Sy0\x96\xe5Z\xfcgZ\x1c\xefIv\xf3,V\x80\xe0\xe6\xf3\x00O\x8d\xac\xf3\x03\x9c\x7f\xe5\xac\x11\xafD\xab\x1c\xb3@\xfa\xf7yU&_\x80\x95\x18\x9f\xd6\x1c\xaa\xddn#eX_\xae\xacx ?\xe8\x86~\xa5.\xef\xdbEO\x1f\x15\x8b\xaf\x0d\xd4\xee\xea\xc5'\xf1\xf6o\x02\x9a\xaf\x9a\x07\xef\xda-,\xeb\xd5\x8au\xac\xe1C\xfbqO\xe8\xc5j\xf4\xb6\xee\xa5\x9e7N\xe6\xeb'X]F\x8d%\x1a\xf6e\xbc\x8c(\xaf\xef\xf9\xab\x17\x9fD$\xea\xce|\xdd\xf9\xaa\xd26\x8e\xf2\xea\xb2\xea\xbex\x12Z_'<9\xd1\xbd'\xa1r\x17gH\x141\xa2/~u\xf9z\xe6\x8b\x98\x11bFb\x9d\x1cFs\x00bF\x88\x19\xf1\x1eI\xcc\x884bF\x0e\x8d\x98\x11bF|F\xcc\x081#\xd2\x88\x19!f\x84\x98\x11bF\x94\x113B\xcc\x081#\xc4\x8c\x103B\xcc\xc8\xd4\xfc\x9f\xb6\xc4\x8c\x103\xe21bF\x88\x19!f\x04\xcf\x8c$\xf0 \xfe\xac\x10\x96\x9c\xeeN\xfd\xa0\xd4:\x17\xb9\xa0?\xe7$\xa1!\xfe\xa16s\xd1\xea\x9e\xf8\xfe\x8a$~\x90G\xea\x9f\x1e-\xcc\xe0\x05\x0e\x1eBC\x8a\xa6\x86H\x9aC\xc1\xec\xff\x86\xca\x03!\x89\x83^M\xa38\xdd\xc5\x8a{\x92\xfd\xdb\x92@\x88 \x04\x81\x88i\"\xfc\x80\x00\x1f\xf0\x17\x0d\xccq%\xc3\x0e\xc19k\x1c\xe8\xa0K\xe5%\x18\xaa\xdbv\xcfe\xf2\x87i\xa71sE;\xb0\xd1\x0el\xf1&N;\xb0\xf5\xb4\x03\x9be\xce\x1d\xd8\xdc\xe0\x8e\x1e\x80`\xc9\x1d3\x12\"t\x87\xd0\x1d\xc7\xef\x84\xeeXF\xe8\x0e\xa1;\xa3\x11\xba\xc3 \xddq\x1b\xa1;\xc6\x08\xdd!t\x87\xd0\x1d\xe4(\x89\xd0\x9d\xc1\x08\xdd\xb1\x8d\xd0\x1dBw\x1cF\xe8\x8e\xeb\x18Bw\x08\xdd!t\x87\xd0\x9d\xa9\xf9?m \xdd!t\xc7c\x84\xee\x10\xbaC\xe8\x0e\x1e\xdd9q\xba\x97\x08\x99c\xb9M\xcf\x9d\x92\x9a\xf5\x856[K\xdb\xc9\x8a6[;ap\xe3m\x946[+\x11E\xdal\x8d6[\xfb\xb5n\xb6\x86\x85j\xe5\xeej}|o5\x85\xde9\xf7S\x93?\xddU\x9f\xcd;l]\x7ff\x0d\x0c\xe3\x02\x07O\xfb\xc4\xd4\xf9Q\xe3\xb4E\x89\xbe(\x14\x1b\xd5&\xf0\x1cZ \x1c\xf6\x1b\xefy\x96\x80\xc1\x06 \xd8h\x0c\x93\x00\xd8(\xfe\x8a\xbd\x9cW#* \xbeb\xb0\xd7\"\xd0+\x02WK\xa3\xd5\x08V#X\xcd\xf5;\xc1j\x96\x11\xacF\xb0\xdah\x04\xabq\x82\xd5\xdcF\xb0\x9a1\x82\xd5\x08V#X\x0d9J\"Xm0\x82\xd5l#X\x8d`5\x87\x11\xac\xe6:\x86`5\x82\xd5\x08V#Xmj\xfeO[\x82\xd5\x08V\xf3\x18\xc1j\x04\xab\x11\xac\xf6\xa0\xb0\x9ah\x0b\xe3]\xd2*\\\xb1\xed\xbdR\xc1\x95A\xa7\x8fW\xa1tQ\x8b\xefD\xe6\x87\x12\xe4!!\x10A\x1e\xe0!\x11\xd4o:\xab\x97\x99\x83\xe1U\xb7\x1eP4\xd7~eOL\x0c\x1e-\x8d`\x05\xc56\xfe\x00\xc2]\x94cH\x9a\xb8*\x90\xdc\xcb\xdcw\xf9\x16\xb8e\xac\x81E's\xb78\xbd>@\xa9U\xf1\x9cGk\x06\xe7\xa6^z\xa2\x1d\xbe\xc7\xca\x82\xfb\xc5\xc5Dfcqh\xc3\x8fmh\xa2\xc4y\x13\xbc\xc2\x93W\xc1V\x86\xb8\x1b\xba8\x16C\xf1\x173\xc5\xc7y\xb5\xb8SZ\x85U8\xcf-\x90\x0c\xb2C\xceW\x86/\xc8\xab\xe5\xb2c}?\xbd\xed\x9e\x90\xab>)|\xcd\xa37\xf9\xe3\x11\x8d\x1dp\xd5\x03\xe4\\\xad\xb1T\xbd=\xe8\xcc=\xe9\x1a\x98\x85(\xad\xbbC\\{\x87\x0c\xfd=\\\x81\x8a\xdf\xa15x(\xa5\xc3C\xa6\x16\x1ft(\x82\x8b\xd6\xe3\xe1xM\x1e\x92u\xf9\xa0+\xad\x17&i\xf3PZ\x9f\x87D\x8d\x1eRu\xfap\xcb\x1e4|\xacV\x0f\xa5\xf5z\xc0i\xf6PR\xb7\x87\xa3\xb5{\xc8\xd3\xef\xa1\x94\x86\x0fY:~\xf8q\xa8z\xb6\x8ck\xf9p\x1a=\x1fN\xa8\xe9\xc3it}H\xd4\xf6!O\xdf\x8fu\xc18\x8d\x1f\xca\xea\xfc\x90\xa0\xf5C\xba\xde\x0f\x19\x9a?\xa2\xcb\xfc\x01\xa1\xfbC \xed\x1fb\xfa?\xe0\x87g\x08\x0e\x00\x12Gq\xc9<@\xd0\x9bd\x05\x10L\x00$\x94\xb2 \x1b\x00I|\x00\x94f\x04 \x93\x13\x08\xb7\xab>\xce\n@>/\xe0\xf5'\xae\x18c\x06\xa0\x187\x00x\xf9\x1b0\xfc\x00\xa41\x04\x10\x13\xe92Y\x02@\xf8\x0d\x08\x04\x85\xb8\x02\xc8\n.\x9e/\x00D-38\x03\xc8e\x0d\x00\x17\xd5\xa3\x99\x03\xc0s\x07\x80d\x0f\x00\xcd\x1f\x00.\xe8\xe9\x1c\x02$\xb1\x08\x10\xe2\x11\xa0\x14\x93\x00\xa9\\\x02d\xb2 \x90\xc6'\x00\xe2&\x848\x05\xc0\x9c\x8f\xe7\x15\xa0 \xb3\x00\x98\xa2\x05\x9e\xb2r\xfc\x02`\x18\x068\x82c\xf0:\x14\x07\x86X\x06(\xcd3@\x94i\x80\\\xae\xc1\xebM}\xff\x86\xa7\x02\x10|\x03\x84\x19\x07\xc8\xe2\x1c\xbc\xae\x82\xfc\x03\xe42\x10^oj\x18\x19\x98t+\xc7B\x00\x8a\x87\x80\x0c&\x02\xd2\xb8\x08\xc8a# \x99\x8f\x80p7\x02\x11\xcd\x1a\x12tk,+\x019\xbc\x04\xa42\x13\x10\xaex\x0e;\xe1uf\x91 \xd8G\x06\xc7P\x04\x1f\x88f\x1d\xe6(\xa0,K\x011\x9e\x02\xc2L\x85\xf7\x9c\\\xd6\x02\n\xb6\xdd\x04\xe6\x02\x92\xb8\x0b\x08\x8cP\xcc2k\xa9r!tP)\x16\xd6ms\xb3\xac\xf81\x92\xa0\x99\x07\x11n\x9e\xf3z\xeb\xbb5\xc32\xf0\xad\x1cB\x1eH\xc9_\xaa>\xa0\"\x0f\xab\xa8\xe5\xb1\x87\xab\xa8\xc5kI}3\xd7\x0bw\xadi\xd7 \xda5(\x9e\x1d\x80v\x0d\xeai\xd7 \xcb\x92v\x0d\x92\xc8\x10>\x0f\x83\"\xa7(\x11\x03%bp\xfcN\x89\x18,\xa3D\x0c\x94\x88a\xb4\xa2\xa0G\n\xe4\x91\x04xP\"\x86ca\x8e\x0c\x90\xa3\x08\xc4\x91\x0epP\"\x86c\x80\x8d\x14X#\x03\xd4\xa0D\x0c\x94\x88\x81\x121`A\x8b\xa2\x90E\x0e`A\x89\x18|\x87EA\x8a\x04\x88\x02\x93f \x05\x9e\xa0D\x0c\x94\x88\x01\x01BP\"\x06\xc8\x84\x1d\x12@\x07J\xc4P\x00d\x88B\x0c\xb9\x00\x83\xf7]C\x89\x18\x0e\x8d\x121P\"\x86\x99\x95X\x14\x8f\x85\x0b\x92\xc1\x82$\xa8\x80\x121d\xc2\x03\x94\x88\xc1\xd8 \x131xV\xf9[.\xd2s\x1a\xa4\xa6_PKv\xcf\x8c^\xe2+\xfe\xec\xfb9W\xf38ho>\x9d#G\xdbpi\x18Y\xbaEP\x9f\xc8\xd6$2u\x08[o\x98\xf8;\xfcD\xcf\xd0\x1b\xb24\x86\x99\x960\x0f\xcfLW\xc8\xd1\x12f\x9a\xc1\xfc\n\xd3\x0b\xe4j\x06\x8360u\x7f0\x98\xca\xd1\x06|\x1a\xc0Q\xf3\xfe\xa8\xb9~\xec\x9c~\xf6<~\xee\xdc\xbd{\x8e\xbe\xd0\xbc|\xc9\xb9\xf8B\xf3\xef\xb19\xf7\xbcy\xf6\xc0|z\xfa\x1czp\xae\x1c1?\x9e;'\xee\x99\xfb\xce\x9c\xef\xce\xd9wh\xf6\x9a\x9c\xbd\x0d\xe5\xb3a\x9d\x13z\x15fNl\x8f\x13\xd8\x87A/[7\xcf4\xfe\x98\x7f\xe9 \xa1G\x08\x88\xb3\xf2\x92|\xecM\xaf\xa8},\xd5\x0bP\xc5pr\x96|k\xd7=\xac[\xb9\x9bR;\xec{'\xbf\xb6\xeb\x95u\xa2\xec\xfe6};\x06\xa8p\xb2\xeeq\xc7\xa3\x19\xf7\x8ab\xeb1p=\x13]\xf7\xf8\x8ag\xdaC\xe0\xeb\x91,{\xa5\x11\xf6\xe2\x10\xbb\x1fc/ \xb2cP\xf6t\x98= g\xcf\x00\xdaS\x91\xf6H\xe6\xbcp\xe9\xb0\x901\x16l\xcf@\xdb\x13\xe1\xf6@us\x00w\x8f+D\xae\xbc\x1c\xc8=\xd0\xe4\xe3y\xf2\n\x82\xee\xd1\x1cy\xa7\x80\xddK\xb5\xc5\x04\xe0=\x05y\xf7\x8d\x0f\xd2\xf2\xdf!\xb2\xdfEg\x0cp\x99\xef\x8e\xc9{wl\xd6;D\xbe\xaa\xb4tU\x94\xad\x8a\xb2U\xb9~\xa7lU\x96Q\xb6*\xcaV5ZQ92E\x8cL\x92\")[\xd5\xb1\x02d\x86\xfcXD|L\x97\x1e)[\xd51\x92c\x8a\xe0XXn\xc4\x89\x8d\x05\xa5F\xac\xd0\xe8\xf8\x10\xa0lUSCH\x8b\xd8QR\xb2\xacH\xd9\xaaPbb\x8e\x94H\xd9\xaa|\x87E\xe5\xc3\x04\xf1\x10\x93\x8b)E8\xa4lU\x94\xad\n!\x0fR\xb6*\xc8\x14\x04\x13\xe4@\xcaVU@\xfe\x8b\x8a\x7f\xb9\xd2\x9f\xf7]C\xd9\xaa\x0e\x8d\xb2UQ\xb6\xaa\x99\x95\xc8\x1c\x84\x15\xf5\x92%\xbd$A\x8f\xb2Ue\x8ax\x94\xad\xca\xd8 \xb3U\x89\xb60\xde%-\xad\x0d\xebB\xbfu\xde\xaaa k\xbc\n\x0fS\xd4\xd8z]\xf1\xc1\xbb\xb9\x7f\xf1\xf9w/\x16u\xb7\xd8o*^7\xeb\x17\xbf,Y\xd3n\x03\xcbr\xad\xa9\x81\xd7\xe3y\xb2fF\xb1\xa9\xb6\xc3b\xf2\xf6\x13kz\xb0.`\xde\xe6\xdb\xaa\xfb$5\xdc\xc1\xdbd\xa2[\xad\xe7\x95e\xd1\x7f\x9b,\xe9\xb5\xae\xac\x7f~\xb4\xebz\xad\xba\xdf\xa8\x90'\xc8\x84Aq\xd7\nB\\\xe1=\xec\xb9\x94\xe6k\xdf\xc3\xab\xcb\xd7\xf3\x1e\x87\x94_R~\xc3\xd3\x9e'\x984\x0d\xbd;\xec.\x01\xe6\xcdo\xd1\xd6\xba\xd3\x98\xe6\x0b\xb0\xfb\x1f\xf5\x0c\x96\xee\x83\x87\xe2\xd5\xe2\xe3\xae\xbba_wm\xc3\x1al\xbe\x94\xf9i*/\xcd\xaaZ\xf0\xb6S\xf3\xda\xbc\x85]\xfbE}C\x99\xc3\xcd/\x13W\x8b\xb6\xf9\xcc:~\xa8\x1b\xea\x8ak\xf9s\xc9zQ\xbb\xd9\xe0\xea\xd8\xfc\x19\xa5\xdfL2eH\xfc\x9dt-3\x8b\xd8\xaf \x95kDWY\xbf\x86#\xef\x94k+'\xcb\xa3}\x9b\xc8z\x15~\x8f\xc8\x8a\xa3\xde \xfa\x9d\xa1\xc2M\x98\x10\xbd,\x1c\xbf\xd3\xcb\"\xda-\xd2\xcb\xe2\xe8\x97\x85\x85\x96\x88\x1fU\xde\xa3\xb3\xdb\xaagg\xb2\x18g\x9f\x7fw\xcbx\xf5\xbb3k;R\xe5\xe5\xe0\x118l\xf4\x93\xad~\x9deu*\xbd\xfe\xb4}%\x92\xf6\x15M\xd9\xe7L\xd8\xa7\x0eF\xd6|\xf6U\xec\xaf{\x91D{\xa3\xbb\xe3\xb2\xec\x1d&D\x9b\x86@\xe6\xad+\x10\x81\xc9\x13[2\x19\xdeA*\xbc2\x89\xf0\xac\x04m\xf3\xda\xcfS\xa2\xf9\xebY4Q\x9d#M\xdd\xb1I\xea\x0e\x12\xd3\x1d\x9b\x96N\x1e2}\xccm\xf7\xd3\x94t:\x13\\~x\x8fH%g\xa5\x8f\xb3\x9f\xcc\xc3Dr\x814r\xee'\xdc\xccc\xaa\xcd\x9c\xd5\x96\xd0\x07s\x93?\xb7-\xf4\xed\x96\xdd\x0c\xefj\xe7\xdc\xbc\xd5U\xdb7\xce\x9e\x96W\xb3\x8bz4;\x14\xc2>1\xb4\x01\xf6d\xc7\xea^\xc9H\xa6\x0f\xd1\xae\xacD\x7fp\xfe\x15\xf3jQ]7\xfa\xddr\xb8\x97|\x89\x17\xcc\xd1{\xc3\x97\xd8\x0f>\xba\x07\xbc\xb3\x7f\xc1\xf5\xae\xf3[>\xb8\x03\xe4>\xee\xde\x1d\xdbG\x7fi\x9b\xb4\xbbo\xc6q\x9b\xb1[\xb3t\xc7\xec\xb6>}(};\xac\xa3wU\x0f\xef\xa4\xfe\xcf\xd93b\x9e\x8e\xd7m\xdd\xa0\x9f\n9\x0c\x0f\xb6\x0c5\xa7\x1c8\xc4}?^\xabA\xbe\xb8\x81b\x00\"\xe7\xa35m\xa6.jz\x99\xaaYJ\x9eM^f\x08\xe5\xbb\xf7\xd7\xe7/\xa5\xb0\xab\xe7\xb4\x95BZK\xf6\xed\xa2\xe1Z;\x1ax\xc3\x89\x804\xf9\x1c\xee\xff?\xf6\xde\xaf9n\\\xc9\x13}\xefO\x91\xb7\x1f\xf6t\xcf\xba\xd51g\xee\x93\xe3\xce\xc4\xd5\xb1\xe5n\xed\xb8m\xad$\xcf\xc6\xec\xc6\x84\x0eU\x05I\x1cW\x91\xb5$\xcb\xb6\xf6\xce\xf9\xee7\x88\x04H\x10H\xfc!\x00\xc9\xee\x1e\xe4K\xbbKd\xe2\x0f\x81\x04\x90\xbf\xcc\x1f\xea\xfb\xa6\x1a\x8e\x1d\xeb\xa7}\xf1\xb8\x10\xdf\xb7\xf7-\x87b\xc69\x82\xee\x0f \x07\xf6'\x9f\xfe\xe1\xe4\xf4px[7\x1f\xfb\x8b\xd1r\xf6\xc1\xfd\xc9\x83\x06\xeb\xe1\xf1f+\xd0\x1d\xcf\xac\x13\xd3\xeb\xb5\xd86\xc8\xd7A\xbe\x0e\xb7\x7f\xff\xee\xe6\xed\xf9\xbb\x7f\xbe\xb9\xba>\xbd>\xbb9\x7fw~}~\xfa\xf6\xfc\x7f\x9e\xbd\xbe\xf9\xf0\xee\xea\xe2\xec\xd5\xf9\x9b\xf3\xb3\xd7!\xaf\xfe\xcb\xd9\xe5\xf9\x1b\xf9\xfb\xd5\xf5\xe9\xe5u\xc4{g\x97\x97\xef/W\xbfu\xf5\xe1\xd5\xab\xb3\xab\xab\x90\xf7\xae\xcf\x7f;{}\xf3\xfe\xc3\xf5\xf4\xb0t\xd2\xc5v\x89}\xbf\xba\xb6\x97_\xc2)\xce\xb8qq\xfbw\x8c\x7f^l\xaf\xf9\x81_dyA@9\xd4'1\x0b\xe9\x87\x8a\xdf\x1cp\xcb\xc6\x85\xf6\x13\xeb\x8c;\x11\xc2\n\xe0\xdfn\xa1\x9e;\x1c\xd9v4\xa2\xf2\xdc\x8e\xea\xc5D8t\xed\x86\xf5\xfd\xfa\xa2\xc4\x07_\x14\xb6\xac\xbe\xe2\x8d^&\xfb\xf8G\xc6B\xebP\xef\xc7\x8d\xcf\x91/t;\x06\x9f\xab\x9a\xfb\xc5\xa4?Xm\x8f(\xa6\xed\xaa\xcd\x8e\xddt\xaa\xcf\x05\xe6\xa9\xfb\x9e\xffY\xee\xd6'\x87\x92t:\xe3\xcf\x08\xf5K\xe2\xda}\xb5er\x95@\xed1\xb6Sg\x15\xb6\x9a0\x07\x8b\xb0\xe4\xdb}-\xf7\xd9\xe7\xafg\x8c\x9fW]y\\t\x04N\x0f\x83\x829\xa1x\xec\xc2+\xae\x17\xab\x82\xd5\xa8\x1aQ&`\x99\xca\xbb\x9bj\xb7\xbbY\xaeZ\x8a\xc2W\xd5nG\xac^\xe3/\x93;\x91uc\xc5\x94o@\xb4\xd8\xe1_\xb6{\x96\xadk\x1a\xb8z \xeck\xdb\x92v\xba\xfd\xdc\xb0\xae\x7f\xa8\x0f\x8a\xcf\x8b\x9a\xe4\xf6N\x82\xc0z\x909\x13c\xe5\x1e\xd8\x17`\xcd\xa6\x1d\x0f\x00c\x19\xd8\xb3|\x8c\xcfu\x92\x1d\xcd\xeb\xf6\x08t\xa0\x91\xd2L*4\xa8\xda\x08\x07\x89l\xb3:\x02v\xe3!.|\x18\xda\x1a\xf5\x8a\xeb9\x7f\xadO\xddy&`I\xf3\x1c\x1e\x9b\xcc\xa8 Sj\xb0\xe29\xc4\xb0\x1a\x8bs\x9f\x18\xaa{n\x88\xbav\xaf\xfa\x92D\x1dT\xbb\xa4z\x0f\xb9cp>\x16r\x17\xcf\xf8<\xdff\x8c3 \x8d\xa1\xbe\xa2\xae03\xc2\xf0\x92\xf3\xec\n\xff\xa6v]\xa5\xe2\x86\x845u\x94\x0f\xceieAZB\x06\xf2\xaf\xec\xcbOr\xbc\n\xdf\xe1l\x8f\xf9A\x06\xcf.|?\x8f{6M\xd5t\xd8\x89\xab\x009\x93\xd4ZM\xfa\xb5\x95BdT\xf2\xda\x8d\xcf\x88e\x97\xd0\xa6_\xb0tW\xd5;\xa6\xcf\x0d\xac\xcd\x1b\xfe\xa7\xe5G\xc3\xc7\xb3~\xb0\xf5\xf0\xe4T\xc33\x0e\x9d\xf2\xaeX\x9cV\xf0\xa0;~\xa6\xb1\xbe\xc7n\xf2-Hb\x8cqy\xf7\x1c\x8e\xec\x04\x18r\xf1\x10\xca8\xf9\x85f\x14\x06\x83\x10\x83\xef,L:\x0c~\x86\xccW\xa7\xb3I\xdd\x9aZ\xd5\xbb\x9d8\xcc~\xa7\xe8\xd2\x0e\x9e6\x86\x0e\xae\x82\xbb\xdb7\xac\x19:\x91\x8d\xa6\x1a\xec\x90c\xed\xd5|\xdc1Z\xae\x9eb\xd6\xee\xad}\xaf9N/a\xef\xa8'\x97\xb07\x966\xd6\xbf/\xe5\x0f\xa6\x9cV\xe8\x93\xca\xda\x9et\x9eR\x88\x13J`g\xc4\x9dN\xc2\x94'\x9fL\xc2\x8a\x89<\x95\xf8\xbf|\xda\x89D\xdfAP3n\xf2\x10\xf2\x8c/\xd3\xc5U+\x8c\xb1\xbb]\xfby6F|\xe3\xd0\xbf\x04\xf1\x01_\x00\xef\xec\xf1\x1f\xa2;\xde|x\xfb\x02\xd4AL\x18\x81\xbf\xd4\xedJ\xff\xde\xbe\xfar\xb3c\xcd\xfd\xf0\x10h*'\x1cAt\xc7T\xe4\xd4t\xbbwNT\x15n\xeb\xf6\xbe\xab\x0e\x0f\x8ft+^=Tu\xf3\xaam\xee\xea\xfb\xe0v,=Kn\x9f\xae\xa2\x9f6\xc2|\xf39>\x84\xeb\x9e\xe9\xc7\x1b\x0f\x92\x16?+W\xfe\x94\x8eE\xb5\x9b\xb7\xac\x1f\xa4\xdfYvn%\xee-\x19Z\xd5\xa1%~\xd5\xcb \xda\x89\x0ed\xb0\x8eu?\xe1\xce\xff\x8ee\xed!\xb6_v\xae\x9e\x18\x86\x1e\x9a\x89'\x8a\x7f\x87\xab\xd6\x14YYw\x86x\xae\x9dH\x86\x1d\x83\x97\xc4\xcd\xab\x13\xc5\xa6\x13\xc5\xa13s\xe5\x18}da\xce\x89\xe1\xcbQxq4m\x16\x96\x9cXn\x1c\xfaVf\x9c9F\x19\x11<8v\xbe\x9bD\x96\x9b n\x9bp\x0e\x9b\x04\xe6\x9aX\xbe\x1a\x1b/M66\x9a\xbc\x1c4\xd9\x98g\xfc|3q,3\x94\xd3\xc5\xc2-\xb3\x9eQ\xc6\xc3\x1c3\x84\xf0\xc5\xc4\xb2\xc4X\xd9`\"9`\x08o\x89\xd7Ak\xb0\xbc\xb8W\xd0HF\x17\xcb5\xcd\xa2\x7f\xbf\xf3\x97\x1d\xc7\xd9\xb2\xe4gQ\xd4\x99L-\x19\xf8Y\x12XY\xccQ\xae/\x86 \x0c,\x16\xb6\x95\x14\x8e\x15'9\x88\x85O\xc5\xcb\xa2b\x12\x13\x843\xa6\x98\xef\xfe\x8djk\x14'JHc}\xfc'\xf6\xb6y\xb9NV0\x9c\x90m\x8ed3qr\x98\xd8\x99K\\|%d'\x84r\x93\xf8\x18I4\x1e\x92\x04\xf6\x91\x00\xce\x91p\xa6\x11/\xbf\x08A\xc7a\x14G<\xe3\xe3\x0dIc\x0b!+\xa5\xfc\x12\xc5\x07b\xe3\xfeHa\xfc \xd8=b9=H\xfe\x8e\x04\xd6\x0ec\xabm\xe5\xe50\xd88\xf2pp\xc43oh,\x1bQ\xdc\x1aV\x1e\x8d0\xf6\x0c/g\x868H\xfb\x982\xc4cN~\x0c\x830\xc2,-\x94\x8d\xc0\xcd\x80\x11\xc8{\x11\xc0v\xb1\xa8r\x02\xb3\x85\xc1b\x91\xc0]A\xf1T\xc4\xb1SPL\x14\xf9\xf8'\xe2\xbf\xae\x97k\xc2\xc701\x9bi\n$\x94\xb7\xfeZ\xfd\x82\xec\xcb\xc0\xbaq\x1a\xa2\x83P\xf1\xb6-\xaeU\xdd\xb4M\xc3\xa3\xff\xd5\x96O(\xdak\xee7\xd40\xcfC\xd7\xb6w\x06`}1\xfe\xba\xac\xce\x1c\x89\xc0_q\xd7l\xd6\x17\xee\xf0;\x1co\x97\x91\xe5\xd6\xf7\xed:\xc0\xea8\x04\x1f\x18\xe9'\x90\xcc\xe8D\x04\xa7#\x11\xb2:\x13!\xa7C\x11\\NEHs,BF\xe7\"x\x1d\x8c\x10\xebd\x84\x14G#\xd5c~\x9a\xeeh\x87#\xa1\xcbK\xcd\x9d\xe2x$\xd49\xe9\xb8\xf3: !\xdd \xf9\x1d\x91\x90\xe6\x8c\x844\x87$=E\xc9JfsSBvW%\xe4tWB\x90\xcb\x12r\xba-\xc1\xe1\xba\x84D\xf7%5\xc7-T\xd8ANMHvl\x12\ni\xe2\xebHw'D\x06\x889 \xae\xfd\xeb\x7f\xa4\x0b\x942{\x0e:kw=\xd2\xdc\xa1\x9a2\x17yu\x06\xb7(\xe4v\x8d\x02\xe1\x1e\x85t\x17\xa9\xa6\xcdt\x98B\xa2\xd3\x14|\xbeDp\x93Q{\x1d\xa8`ew\x0dw\xa4\xdau\x18\xa7\xe4$\xa7*\xac\xe8\x0c\x9fs\x15\xbc\xed\xf6:Ya\x9d\xa3\x15\\\xfd\x11\xe9p\x05\x9f\xd3\x15\xbc\x94\xd1>\xb2hk'\x85:a!\xc0\x11\x0b4)t\x82C\x16\xc2\x9c\xb2\xb0\xca1\x0b!\xceY\xb0\xf3%\x93\xc5[\x9e\xf59k!\xd9a\x0b\xae\x8aj\xbffu\xdeB\xa2\x03WSE\x935gu\xe9Bf\xb7.\xf8(\x97I\xb2\xe5<.^\xc8\xe9\xe6\x85\xec\xae^\x08v\xf7B\x88\xcb\x17\xc2\xdd\xbe\x10\xe8\xfa\x05\x1b_0]z\xa8\xa3\xd0O\x84\x1c\xe8\n\x860w0P\xcd\xc8\xe9\x16\x86T\xd7\xb0\xa6\x8b$4\xce\xe7,\x86\xac\x0ecH\x1e\x0f^\xc71\x048\x8f\xc1Xul\x99&\x17\xc7\xdb\x7ff\x8fz\xc6\xc0\xe1x\xbb\xab7\x9cU\x83\xca\xae\x90\xded\xf3V7\x11\x83j,\xcc\xe3\xba\x81\xb6\x98\xca\xd5\xb2\xa4\xcf\x14Wnq\xe5\x16Wnq\xe5\x16Wnq\xe5\x16Wnq\xe5NR\\\xb9\xc5\x95+\xa5\xb8r\xbd.\xcd\xe2\xca-\xae\\C\x8a+7\xceC\x1a\xfelq\xe5\x16W.\xf1\x11\x8a+w!\xc5\x95[\\\xb9\xc5\x95\x9b\xc3\x95{5\x91\x04i\xde\xdc\x07\x92IH\x98\x8c\x8b]U7\xd7\xec\x8b~p\xd3 \x83\x0e\xe3s7\x03\xfb2\x04\xa6\x0dZ=\xce\xb2@W5\xd1\x08\n\xea\xa5\xbaA\xean\xfd2\x07\x98\xfc'\x847k\xea\x0d\xf1;\x8f6\xbe\xd9(t\x0d0W\xd2J\xb5\x80\xcfKRX2\x82y\xd6\x15\x1e\xb9\x1cH0j?\x0e&sC(\xba$K\x04|\x03LI\x13\xb3\x95J\x97\xa43\x9aL\xdc\x15D\xd3\xa7bF\xfb\xc3j\xee\xc2\xa8\x1a~{M\xf7\xd3x.\xdctm\xdf\xff\xb4\xf8t\x82\x7f\x82`\xc9x}]\xdd\xafd*\xe9\xd8\xfd\x0d\xfb\xe2\xec\xba}\xddD\x92\x99d B\x99\x9b\xb4\x82 e|\xc9\xc2S<\xfe\xe9\xba\xab\x9a\xfe\x8euk\xef\x1d\xd9\x0e\xd5\xfd\xcd\xd0\xde\x0c]\xb5\xf5\x8d6\xca\x9c\xf0\xb2\xdb\xeb\xf1\xed\xe5P@\xf3!\xa6\xc1\xf8\x94\xce>8\x88\x1aw\x0b\x7f\xe3]\xd7.\xfc\x0b\xb8\xff\xda\xb0\xfa\xd3\xec\xd6\x99(;[\xe1\x07i\xb6\xd3\xadH\xf8?a\x0d\xb9\xe2\xcf\xea\xd3B\"k\xd2\x87$\x08\x0e\xb1\xf6\xc82\xa8\x13Q\xca\n\x86\x15\xbb\xe8\xbfK\xd96\x83\x96\xd4\xd2\xe6\x87jx\xc1O\x8e\x02!Q\x97\xb4q\x13\xa0v\xde}\xfd\x89-{i\xfcg\xdd\xf1\xef\xa1\x8fHm\x04\xcd\x15\x82J|?\xf1\xc0T\x97[6|\x1e\x0d\xc5\xf0\x99\xa3\"\x9dmxN\xf4\x96\x01\xe3\x91\xa4\xe6t\xf5f\x1c\xcd\xb4I1\xed*#\x13\xb5\xb4nD-\xfc\xa7\n\xdc\xcb]\xfe\x933v\xac4?\xa7\x88\xf7\xb9S\xad\xde\xacc\x7f{Wo>\x8emYiS\xbf\xaa\xc1\\\xd69\xc0h\x0e3Md\x0f\x8dx\xdb2<\x91\xdavew\x10\x0c\xbb\xce\x16\xd1WK,,\xc1D\xaeke9]\x90\x97\n\xccF2\x9dJ\x16WE\xa1\xb6#\x1b\xc7\x96\x9cd\xfd\xc7\x9b\x8d\xe7n\x03XW\xfb\xd3\xfe\xe3+n'\xb5\xda\xcf7d`\xed90\x84;\x8e\xaa\xff8\xd7\x1b\x96. \xa5\xb2{\xbeg\xccZ\xd9\xdf\xc6\x8d\x1bQ\xd9}\xdd\xd4\xfb\xe3~\xbe\xf3g\xaa\xb3\xb2tm\xda\xf1X\xb3@0\xb4\x9e^\xf0\xda\x11\xfcs\x87\x8e\x1d\xaa\x8e\xdd\xdcW\x06\xcbV|\x9b.P\xe9/Uo,h\xd3\xd5\xc8\xf7\x95\x84\xfa8\xf23S\xf1)z\xb0rh@\x94\x9f\xfba<\xbeQ\x03Q<\xc4\xbe\xb0\xcdq\xc8\xdc\xa83T\x9a\xdc(\xac\x1c\x9e\x1f\xf4\xdd\x05\xd5\x98;\xc6n\xe8\xdb?\x96\x97\x1f\x1a\x97\x1e\x92\x07\x10{\xb4\x8cv\x07\x89\xaa\x838\xce\xe95r>n\xbf\xb8'\xf9\x86\x12\x94|\xf7\x94\xa0\x84\xdcV\x82B\x8d\x947\x8c\x9d\xee\xa99=\x0f\x94;\xc6&\xa4\xbbz\xb4\x1ej\xc5@\xd6'\xb59L\xf4\xe5\\]H\x02\xd7\xa8\x05\xb5<72\xd2\x8fcrs+\xc9\xbc\x9c\xfdUY\xf5\x85\x02u[\"\xb7\xad\xb7\x8f\xe3\xf6MO\"\xb6.\x83k\x8f\x0f\x89\x0b\xa0\x9f\xd5\xde\xceh\x1fQ\xdcJ\x16{\x82\x9c]\x1e\xab\xb3\xb0\xd7\xaf\xf0Vd\xbb\x85%\x8a\xa9\xdeF\xe5\xef)\xdb\xf0;\xe5c\xa6w\xb0\xd2\xdb\x18\xe9 6\xfa\xe0SZ\n\x03\xbd~\x7f\x04\xf8m\x08qUE5\xed\xf6\x97\x83 \x96W\xac\x06\x99\x0b\xcaP\x04\x18\x85\x139\xea\x83\xadC\xf2an\xf5h\xa5\xa6l\xe8G\xce3:-#\x93\x1e\x95\x86[\xcdnW\xd0\xf5\xc0\xcf\x83us\xbf\xd3\x8d\n\xb1\x98\xad\x1f\x0b\xc1\x8b\xc5\xca\xd3\x92<\x81\xe9\x1f%\xc8\xf4Q'OpY\x1fK\x98\x11u\n]\xaf\x87\x1a8I\xc7SE\x8fzP\x05\xe1\x9b\x8b\xea2\xdd\x01\n\xf6f~\x93\xbd\x9b\xe4 \x1d\xe5\xb6n\xa3:.k+R\xf9\xaea\xda\xfeD\xb5%\xff%@&\xdc\x95\xe6\xb2\xd0\xb4)\xe6T\xfb\x8b\xe2\x0d\x00\xda}\x01\x99[\x96\xea\xce\xd0\xd4I+\xaeM\xbc'nD\x8a\x9bCS%\x9d\x1e\xd4\xd7\xf1\xb9;\xc0\xe6\xf2\x80\xcc\xed\xcd\xe5\x02\x01\xbb\x1b\x04B\\!`s\x87@\xe6\x06\xe7r\x8f\x80\xc3E\x02`w\x93\x80\xc5U\x02@\xbbK\x80r\x99\x80\xcd\xac\xa1\xd8\x13\x8d,\xee\x13pu2X\xdd(\x9e\xd7|\xe1\xc9\xd1.\x15CS\x8a_\xc5P&\xfc,\xc6\xef\xe1\xce\x16p\x8c\xbf|N\x17\xb0;^\xc0rm\x97\xb9{\x86\x0cN\x18\xae7\xd5\x11\x03\xab\x9c1\xe2\xe9\x1b~\x13m\xd4R\xef\xb8z\x17\\\xc3Zn\xb7R\xaf\xe0Ut\xa5^\xc3;)\x12\n\x16\x07!E\x85\xbc{eBy\xf6\xed\xf6h=\xae\xcc|y\x01\xa7\x15\x83\xd3n\xc5\x97\x18\xca\x05\x18\xe9I\x8e\xd6\x04\xc7!>\xb91Wbc\xb9\x00\x03\xa5\\\x80!_\xcf\x9a\xac\x98\x90\xa8\x98\x90\xa4H\x18\x8c\x8c\xe9\x88yS\x11\xb3\xa5!\xfaS\x10\xb3\xa5\x1f\x96\x0b0\xca\x05\x18+\xd2\x04\xcb\x05\x18\xa2\xa3U\x8d) \x80!wB\x94\x0b0\x14)\x17`\x94\x0b0V\xdc5\xe1\x7f\xc6\x97\x88\x97\x96\x84W.\xc0\x10\x923\xbd\xce\x9aZW.\xc0(\x17`,\x1e\xf3\xa7\xc9\x95\x0b0\xe2\x93\xe0\xe2\xbf\xae7\xf9\xcd\x97\xf8\xe6\xbe\x00#\x95\xb7\xcc\xf0+,9\xcb\xec|e\x04WYq\xd1\x15\x17\x9d\x94\xe2\xa2C).:\xf9zq\xd1\x15\x17]q\xd1\x15\x17]q\xd1)\xff_\\t\xc5EW\\t\xc5E'\xa5\xb8\xe8\x8a\x8b\xae\xb8\xe8\x8a\x8b\x0e\x8a\x8b\xee\xf7\xec\xa2K\xa4\xa0Z\x90NQ\x84S\xe4\xfe\x9ft\x0f\xa6\x90L\xc9\xa3\xb4\xa2Ose,\xc9\xa5\xf4PP\xed.\\\xee\x89\xd134EDg\xa5\xf4\xc6\xe7\x07\x86\xe1\x8d|\xf0Ir\xa2\x89\x02f\xa0l\x92\xe5:\x89k\x86\xd0\xa7\xd5\xba\x1f\xaaA?\xd1\x0b\xc31\xfeE\xda\x03\xcb\xb7!\xda\xc3\x9a\xa3\x11\x82\xff\x13\x9c^\\\xbc=\x7fuz}\xfe\xfe\xdd\xcd\xdb\xf3w\xff|su}z}vs\xfe\xee\xfc\xfa\xfc\xf4\xed\xf9\xff<{}\xf3\xe1\xdd\xd5\xc5\xd9\xab\xf37\xe7g\xafC_\xff\x97\xb3\xcb\xf37\xf2\xf7\xab\xeb\xd3\xcb\xeb\xc8w\xcf./\xdf_F\xbdy\xf5\xe1\xd5\xab\xb3\xab\xab\xd0w\xaf\xcf\x7f;{}\xf3\xfe\xc3\xf5\xe2\x05\xb1m}\x99\xd2Mn\xaf\xca\xda/\xf0\x12Ng\xf6\xb7\x7f7\xfd\xfd\x9c\x10\x8e;k\x8d@wwy\xd4'3\n\x1bGe7\x8c{}6\x1a^\"\x03}E!\xfc\xdb.\x8a\xe0\xbe\xd8E\xee\xcb2g\xe9\xd0\xb5\x1b\xf5\xfe\xf3U\xc5\x89\x01\xb1(p\xd9\x0c[N\x94\xbb\x90i\xe4,4\x0f\xf5\x9em\xa1=\xf2,\x90\x1d\x83\xcfU\xcdi\xf6d8\xbc\xda.\xa5(\xc1\xa2\xd0\xa9\xec\x0eRl\xc6\xc8\x9a\x8a>htd3c\xe0\xbe\xdaJ\xbe1M\x99\x91c\x11e\xed\xf5\\F\xf0\x19ZGN\x15\xccM\xf7\xb3PH\xb1\xb3QL*\xd3\xab\xb3\x92\xa5B\x8a\x85\xa4AQ\x9c\x87\xb5bRj\xcf\xd9rgmyVm\xf0\xf5\"\xd8W\xef\xd5|\x01\xaa8:\x10V\xd4\x89\\\xd5!\x9e_\xc0\xa2M\xdb\x1b\x18>'!66\x0c)\x04+\x86\x94\xe8-L\n[\x06\xa1\xce6\xe8\x11\"#\x8d\xd9\x7f\xe8\xd5\x12\xc3~\xcfme\xd7\xee\xc5\x1c\x1f\x15\xc8:\xa9\xa6S\xf7U\xbdo\x16\x08\x12?&\x8c\xef\xf0\xdd\xd48C\xd1fS\x9b\x83\x083'\xd6\x0b\xeb<\xbe\xc2\xbf/\xe9A\xe6E\xc6\xb6\x08\x08\x1d\xf1\xd3\xd6r\xe7\x0b\xf8\xc6\n\xccU\xff\xd58\xfb)+\x88<\x07\xdeb\x9a\xdd2CN\x15\xcbeuSY\x81\x95\xb1\xce\xd4_\xc9\xa3\xf2r\xad\x13\x07T^\xdb\xf1\x19[Y8Su*\xe7Q\xee\xaaz\xc7\xa8y\x87\xb5{\xc3\xff\xbc\xfc\xc8\xf8\xca\x93}`\xbeQJ\xeb\xd3\xb3Q\x05v\xd5\xe2\xec8G\x00\x8dm\x989\xa1\xc1\xcex\x0c\xaeb\xef\xac\xcc\xc7\xa0,x\xeb\xd9\x8f?\x8f\xd6H!>F\xe1\xc9\x8eOS\xc7\xb3I\xf5\x9aZ\xd6\xbb\x9d\xc8\xc0\xfcN\xd3\xb7de\\\xba\"h\x9e\xea\nur\xef\x867\x97\xf5; \xacl\x98\xdb\x83\xa4\x8a\x1e\x8e\xdd<\xe5\x85:\xb9\xb9\xe4\xb1\x11|\xc7\xde\xc2=\x1b\xc84\xd4c\x8f~B\xb1\xa2\xd4\xdbp\xc7\xcc{\xbe$\xaev\xca\xe0J\xaa\xbbe\xf2\xf2\x02\x9a\xfe\x1b\xc70s\xec\xa6\xac\xef\xd8\x1c\x17\x96\x17h\x83I\xf5\xe7k\xe1\xed\xb1\xb9\x80$}\x91\xad\x05\xcb}\x0c\xff\xc4\xbc\xc3\xf5a~\x8aq\x84l\xe6i\xd6FF/>\x94x\xf1P\xdd\x8b\x0c\xfc\x97\xba\xaa\x8b\xe9OZ\xc2\xf8\xf4s'\xc6\x88\xf6\xcd\x83\\q\x0d\xfb2,\xd3\x89!\xc4f\xb8\xa3(\x8c\xfd\x8d,E\x1ed\xc6\x7f\xca\xac\xfb^l'/\xaa\xfb\x89\xca\x0b\xff\xae)\xf9\xdf\xe3$\xe1\xaf\x8f\xea\xc6\x0e`\xb0o\xfb\x01\x18\x0f\x8e\xe1q4'p>(\xee\xfa\xc3\xf0\x08\xf5\x9d>\x88\x1eX\xc7xtS\xd3\xc2\xbe\xed\xe4Nk\x11Z2\xb4C\x15\x1a\x83\x19A\x8d\xc1\xd5\xf3\xde\xe0\xff\x98y[d`\x95\x12\x0f\xa4\xd7_\xed(\xbe{\xbe\xe1J\xf4-\xf6\xb8T\xf4lx\x01\xf5\xd0\xcb\xa8\xb0\x1e\x8e\x0d\x0e\xa2-\x06\xef|\xae\x95ac\xff\x86X\xa4\xb0\x93\xb5\x0c\xb1\x9a\xe0\x90\xba\x81\xfb\xcb\x8bW\xd3@\x948E?nE;\xa6m\x9c7m\x87\x0fr\x0cEZS m\x8c;\x18~\xc2P\x9b\xb9h\x9b|\xf2\xaa\xdd\xcf\x95\"\xef\xe1\xe8\xd8\x81/\x95\xf0\x97\xaa\x9bz\xd6v/\xcc\xa2\x8d|p\xe9\xc8\x19\x82\x19\xb4g\xcbo\xc1\xd7\xae/\xb2\xcd\xc62\xa3\xaf1hHNbW\x96\x13\x87\x9d\x0c^u\x96+\x021SB\xb9\xf6\x02\x98\xcf\xf5\xe5=\xc5\xce\x1b{\x07\xcd\xa8\x07\xf6\xe8\xfae\x9ad\xd3\xf8\x8a\xabt,\xd2Ba-Y\xd0\x16\xe7I\xc1uN\xf0xo<'\x85,\xb8\x8b\x0by \xad\x81\xe5\xf4\x17\x83\xbf\x90\x8aL\xfe\x7f)\x04\x06\x13\x88\xc28\xdbF!1\xeb\x91\x80p\x05\x01hL\xe8\xdb\x14\x1e\x13\xfa.\x8d\xc8\x84x\xd6\xb5Wr\xa02>\\f\xfd\xf7P\xdd\xff\x86\xb2\x7f\xc7\xe0Y76\x13\xdc\x91i\xe8Lh1\xd9\xf0\x99\xd0\x02\x13\x11\x9a\x90\x91\x94\x03\xa3q\xa34.\xb3\x95\x15\xa9!\xb1\x9a\xe8\xb5\x82\xf2+{\x0d\xb4\x07&\x89\xc0mB\x90\x9bl\xd5\x8a\xc4o<\x00\x84{\xd5\x8a\x82vHM\xb6\x0e\xf48\x16}\xaeE\xef\xb6\x01\xfc\x1f\x00\xbc\xdd\x00\x02fY\x85 Y59\xb0\"/Z\x94\xb11\xf90\xa3`\xd4\xc8\x8f\x1b9\x91#o\xe3=\x839/~dG\x90h\x0c\xc9\x8e\"%\xe3HIHR\xb4\x11\xb6\xe2Iy\x10\xa5d\xcb\xe0\xc0\x95\xbc# 3\xb6\xe4E\x97\xd6T\xc91\xb3\xf3bLv\x94\xc9\x8e3%#M\xc9\x1f\xde\x817\xad\xe9\xe5\x18\xcc\xc9\x89:9\x0bw\xa3:\xf9\xb1'\x0f\xfa\x94\xa3\xae\xd90\xa8@\xa4 \x16\x872\x91\xa8\xe2\xd8/\x8e\xfd\xe2\xd8\xff\x9d8\xf6C`\xe3\xd9\x9bo\x9cc\xc5\xef\"\xa1\x03\xc7\xf4\xd8^\xa1Mx\xefu\x9f\x1db\x81\xe3!@\xbbI\xd3\xe1|\x9en7\xfe\xa3@\xc4x\xf3\xf6\n\xc0\x17`\xa8\xba{\x16z\xd9\x1c=Y\x97\xdd\x18\x8c\x18\xe0\x9d\xd9\x86\xef3\x0c\x06\x9e_.\x00pY'\xca:\xf1{\\'\xe8^rYf?\xf4\xab\xf9\xb5t\xccw6\x1b\x01h\xaf\xa5\x12'\xa4\xbd\x0b^4\xbc\x08/e\xc4\x89\xc7t\xc3m<\"\x0f(\xa9\xd6\xd9\x8b\xe1N%\xac_A\xbfm\xf4V]%\xb6\xac\x1f\xe42!oq\x92$gCk.c\xe2ot\xc9\xab];\x03If6\xff\xcdq\x80\xf6\x01U\x90\x97\xde\x0c\xc5Nr\x86\x92\x8f\xea\x0c%\x1b\xe1\x19\x8a\x95\xf6\x0ce\x88'?C\xc9E\x81\x86\xe2&BC\x89\xa2CC\x89&E\xa3\xfb\xee\xf1 o\xa0\xa2\xa8\xd1P\xa2 \xd2Hm\xe8\xd0\xb0\xd0\xa4\xa1\xa4\x90\xa5\x91\n\x8f\x07\xa8x[-\xe5E\x10\xa7\x91\x8a\xacdj(\x89\x94jRI\x00\xb1\x1a\xf9f0\xd9\x1aJ\x02\xe5\x1aJ\x02\xf1\x9am\xa2[\xaa\x9a\x8d\x92\x0d%/1\x1bJ6z6\x14?I\x1bJ6\xaa6\x14\x1ba\x1bJ\nm\x1bm+\x08*7\x94!\x84\xd0\x0d%\x96\xd6\x8dTf\xa3zC\x89$|C\xb1\x022\x9e-\x85\xf5\xec\x8a\x12\xb2\xe3\x88\xa4\x83\xa3\x8d\xa9\xa4\x88\xc3o\xa4=\xe3\xabM\x1aA\x9c\xa1\x8e\x13\xc6\x114q(\x19\xc8\xe2P\xd2(\xe3\x0cu|GCn\x1e\x12\xe9\xe3\xcc\x92\x0c:9\x94\x14R9\x14'\xdb\x1a\x8a\x85`\x0e\xc5K3\x87B0\\q \xa7\x9cC\xb1\xe918\x85\x12I\xe8P\xc2;\xc7GH\x87\xe2\xeb\x05/9\x1d\xca\n\x8a:\x14G\xefD\xd2\xd5\xa18I\xebP\xec\xd4u\xd3\xdf\xad\x04v(\x8eN\x0b%\xb3C\xf1Q\xda\xa1h\xc4v( \xf4v(\x01$w(\xe1Tw(^\xc2;\x14['\x9a\xe4w(\xd6\xe7}Dx(itx(\x8e*\x1b\xbf'\x11\xe4\x19\xda4\xc2<\x94\x14\xda<\xb3\x04\x83F\x0f%\x89L\xcf\xac\xf2\x92\\\x0f%'\xc5\x1e\x8a\x95h\x0f\xc5\xa0\xdbC\xc9C\xba\x87\x92\x8dz\x0f%/\x01\x1fJ\x18\x0d\x1f\x8a\x97\x8c\x0fE8||\x94|\x8b\x87\x9d\xc4|(\xc4\xf4\x02\x92\xc6\x0d%\x94\xcc\xcdM\xd5't\x85\x11\xf6\x89\x87\xfd\xb4}(D\x83rR\xf8\xa1$\x11\xf9\x19\xda\x0cb?\x94|\xf4~J1YH\xfePR\xc7\x88\x97\xf0O\xa8\xf3\xd0\xfe\xa1\xe8K\x93=\xeaL\xe0\xa4t\xe0\x0d\x1f'_\x06\xd6\x8d\xe6\x00\xfd\xfb\x8a\x07\x9b\x08\x90\xdd\xb4M\xc36\x03\xe5\xc4\x9dB\xae\xc8k\x8eQ\x0e\xf3u\xbc\xb3H,vI\xdc7,Bv\xf9\x8b\xee\x1a\xebZ\xe3\xdc\xea\xc6\x15\xc0\xb384B@\xc8\x9b\xcba\x0f\xfe\x136\x04\x1c\\\xa5\xc4:\xef\xad\n\x97\xa7P\xcb60\xd2\x89oU\xe6p\xeeC\xac\x83\xdf\xaa\x8dW\xca\xe3\xe4\x87\x1c\x8e~\x88w\xf6[\xf5UA\x0e\x7fHs\xfaC\xac\xe3\xdf^myK\x8a\xcf\xf9\x0f\x91\x00\x80U\xd9|s\x8a\x1b\x04\x80\x04 \xc0\xaeP\xdc\xa6\xe2\x00\x03 ' \x00~P\x00r\x01\x03\x90\x04\x0e\xc0z\x80\x00r\x80\x04\x90\x00\x148\xec\x13y:\x9a%3`\x00O\x04\x1a@~\xe0\x00V\x80\x07\x10\x0d 8m\xb8\x1bD\x80( \xc1\xaa\xca}/\xcc,+\x00\x05\xc8\x0d*\x80\x17X\x80Tp\x012d|x\x80\x06X\xb1K\xca 8\x80\x17t\x80\xc0\x9a\xc5\x81\x0f\xa4*\xb9F\xb8\x01\x08\xc8 B@\x1a\x10A\xea\x13\x0b\xbd}c\x93\x00H\x90\xfa\xe8;nfI\x07& \xcc\xff\x0e>\x80\x02\xc2A\npy\x1d#\xc0\n\xf0\xe8\xb3xZ2\x00\x17\xb0\xba\xf3\xc2\x00\x0c\x08\xec\xa1@ \x03b\xc0\x0c\xf0\xf7\\\x12\xa8\x01a\xc0\x06\x04\x80\x1b\x10\x04p\x80\xbfS\xd7\x01\x1d\x10\x0cv\x80\x0d\xf0\x80\x1c\xa0\x07\xac\x01> \x02\xfc\x80p\x00\x04<\x9dl\x03B\xc0\xf7^\x18 \x02\x99@\x11\xf0U\xc723\xa2\x00\x12R\x93\xe5V\xa1Y\xb2\x02%\xe0\x00K \x010!\x95Q7\x12\xcd\x92\x00\x9c\x90\xfa\xecG[\x0f\xa0\x02vP\x052\x03+\x90\x04\xae\x90\xea(\xc0\x05bA\x17\x97\xdd\xb2\xf8\xa8a%\x18\x03\xe1\x80\x0c\xac\x05e`\x150\x03\xf6\xe9\x0d\x0e\xe7;\xacp\xc0\x87\x804\xb0\x16\xa8\x815`\x0d\xd8\x1b\x99\x00\xda8\xe6\x10\xf5\x97\x040\x87\x1e\xdb6@\x07\xa2A\x1dZ\x95\x0d\xe8\x81'\x00{ \xd3\x98\x0b\x04} \x18\xf8\x01\xcbj\xee\xa6\x1dH\xb9\xb0\x9d\xee\xef\x99Z\xc5\xb2A\xb2_\xe2>\x8b\x93o\xa1\xc0-\x05n!w<\x05n)pK\x81[\x14E\x05n)pK\x81[f)p\xcb$\x05n)pK\x81[`5bP\xe0\x96\x85\xac\xeb\xbc\x02\xb7\xa8R\xe0\x96\x02\xb7\xccR\xe0\x16E\n\xdcR\xe0\x96\x02\xb7X\xa5\xc0-\xf4\x0b\x05n)p\xcb7\x0d\xb7\\M\xac\xce\x1a\xe2\xf2@R?;\xceF\x17\xbb\xaan\xae\xd9\x97\xc1\xc2\xf0|\x18\xff~3\xb0/\x06_#\xf8\x0f\xf8\x1e\xcch*\xda\xd1\x084\xfe\x82a\xbbn\xa0\xed\xb6\x96\xd3\xf1x\x08\x15\xdeA\xab\xffw\xea\xb7\xc5_\x91\xfdl\xd36w\xf5\xbd%w\x88\xf3\x8d\xbd\xe2O,\xad;\xbe%\xc6\x03\x9d?\xa4k\x8c\xcb\x1b\x8a\xb8\x91\xc8\xe7\x9e\xb06J\xcd\xde\xc2\x14(\xeelX\xb24\x1b\xea\xea\x9e\xdf\xfd\xb1\\\xe7\x9e\x98\n\x9bj\xd5zvl\xc9\x8an\xe82)\xb3=t\xa4$[\xa0\xa8\xc2\xb8r\xb2\x9a\xfb\xf6\xaa\x06\xeaf`\xddO\xd0v\xb0\xe9\xda\xbe\xff\xc9\x1c\x91\xcb!\xacty\xe1\x1b-|\xa3\x85o\xb4\xfa\xa3\xf0\x8d\xf6\x8b\xceZ\xf0Q\x8f\x9bEq\xb7\x93\xfa\xea\xcf\xf3\xbb0v%\x1e,O\x1c|\x99\xaf\xf1 |&\x16\xa6\x89\xdb\xb8\xb0gNR\xd83\x0b{fa\xcf4e\x08\x89\xe8\x88\x89\xe6\xb0c\xac\x01\x91\x1c\xb1Q\x1c\x85=\x13\n{&\xa4Gg\xb0 \x98\xfd\xceQ\xbe\x8f\xbb\xb30p\x16\x06\xce\xc2\xc0\xf94\x0c\x9c\xe2\x93.\xb97}t\x98V&NU\xc9\xcf6-\n'\xa7\x83\x92\xf3\xbc\xd9\xb4\xfb\xba\xb9\x7f}]\xdd_wU\xd3\xdf\xb1Nt\xe0zZN\xf1Y\x9e\x98\x99s;T\xf77C{3t\xd5v\xcdrd_nx\xe3\xdb\xebQ\xdf\xd2\xf8\xe3\x0c\x10\xab\xe8\xf8\x14\xee\xcc\xa7\x00\x00C\xd3 \xba\xb0c[\xb8\xebZ\xc29\x8e\x1ft\xc3\xeaO3\x86!\x87\xb3\x80\xe8{\xd6\xe8\x1b$\xfc)Kc\xaf\xb8*}U\x95\x19\xdd\x12U\xd9p#!\x9a\xcb\xf8\xbf\xcc\xd6\x8az\x7f\xb7\xfc\x0d\xdb\x96\xa5\xae\x97\xb2\xa3\xb4\xdaZ;\xf0\xa1\x1am\x97\x194##)^p;o~\x95\xfb\xfa\x13[v\xff\xf8\xcf\xba\xe3\x1f]\x1d\xaadU\x89\xc93\xd7\x18*1r\xc4\x03Seo\xd9\xf0\x99\xb1\x06\x86\xcf\xcbE\xeb\xd8\xb3nF]\xa8\x12\xe5\x04U\n\xc1}\x10\xee\x1ex\x0c\xc74`\xb5bq\x83\xa76\xa9\xfd\\u\xdb^\xed\x93\xf1\xe5\xb1\x16\xe2\xa7\xb2[(\xbb\x85\xb2[x\xc6\xdd\x02@,\x95\xbe\x83\xe9;d\xa5\x0f\xe7\xfevi\x0bd\x03\xbf\xa8\xbaj\xbf~\x93q\xe0\xaf\xc5Y\xa2z\xf3\xd1<\x83[\x0f\xf3\xf6\xa3\xfc\xbennv\xac\xb9\x1f\x1e\xcc\xe3\xbc\xd3\x9f\xe2\x08\x95\xd8W_2\xeb\xb4Y\x86w\xa2\x1b\xf0\x03h\xe3\xaa\xab\xf6l`\xdd\xb8\xb6\xec\xf8\xc0\x16\xab\xa2\xfc|\x9a.\xd9\xa5\xea\xef\xe3\x06-\xb9\x8b;v\x7f\xc3\xbe\xac\xea\x8a\xdf\xd5W\x19'N\xf0\x07\x90\xcc\xf1\xe3KjO\xdf\xd6mrG?Y\x0b\xffR\xb7\xab\x1bx[\xb7\xf7]uxP\xa1\xc0\xb6\xab6\xbb\xf49\x8b\x86\xf1\xa6\xdeF6\x93Xz\xc1\xb9y\x05\xb8\xe2E\x9e\xbf\xd6\xb7\xaf\xe7\xaf\xe5\xc6\x15\xdb&\xea&\xd6\xbcM\xb5\xdb\x91\x91\x7fC\x0b\x9fXW\xdf\xf1\x1d\n\xe5\x1c\xddV\x83\x1e\xc4Y\xf5\x1fo\xf8\n\xfe|\xad>\xed?\xbe\xe2\x87\x07\xad\xd5\xf3\x0e\x04[\xcd\xd7x\xf4\xe2U\xfdGs36\xca\xdc^\xaaq{\xee\xf2}\xd6\xc6\xfdV7d\xe3\xf6uS\xef\x8f{\xc0c\x93\xda\xc6\xf9\xc0H\xa8\xdb\xb4\xfb\xc3\x8e\x0dVw7o\xbf\x08\x80\x85\xfe\xb8\xd9\xb0\xbe\xe7h\xb3\xf6\xec\xa1c\x87\xaac7\xf7\x95\xe5\x16\x88\xa7\xe8\x8b\x0b,\xf4\x97\xaa7N\x93{\xd9\x0d\xf7\x95\xdc\xca\xf1\x1d\xd7\xf6\xc8\xc1G\x1a\xc9\xc0F\xf0\xb6R}\xd1\x0f\xe3\x8e\x89\x9a8\xda\xc3\xec\x0b\xdb\x1c\x87g\xee\x8c3,4[g`#\x10\x90\xa0z\xc3\xd7 w\x8c\xdd`\xc9\xb6>Xze\xa4\x18\xde\x99\xe5K\xd1\xa96[\xd6\xb4{\xfaO\x9e\x8f2\x8a\xad%(\x9e\xd7}\x18\xca(\xaf\xdaz\xdeaW0\xb4\x1f\x99@L*\xac\xba\xdcnW\xcd\x96\x07\x80\xf2\n\xd9\xa2\x11\xdf\xbd\xbf>{\xc9\x03#\xc4\xc7\xc7\x08\x83\x9a\xc7\x8e\x9e7\x830{S\xbc\xae\n\xc0\x92\n\x85\x1f\x8f\xfc\xdb\x84\x11\xf6\xfc\xa4Sw\x08\x0c\xdc\xb7\xf7-G;\xcd\xa0\x05\xd78~\xc3\xd8\xe9\x9e\xb2p\xf30\xbecl\nT\xaf\x1e\xdd\x98\xde\xd0\xca\xe9h3q\xf6A\xac;M\xa5\xbc\xe7o\x04\xef-\xe6\x99\xa2\xe9\xe1\xa6Y\x9e\xe4\x8f\xc2G\xa0\xac83\xb3`{\x07\x15lX3t\"\xdbj\xa9\xa8\x9a\xb3\x14&\xcf\xd9\xed#Tv\x96\xc3\xeap\xb8\xd1.1\x82\xb8m\x0d\x8f\x93\xae\x87\xc7\x9b\xad\x000W\x9a<\xb9\x1d\x15\x88\x93T\x07R\x1d\xdc\xf2\xa4\x05>\xe6\x95fr\xcc\x8d}9\xd4\x9dv$\x10\xfaN\x0f\x07~3\xd4\xe2+y>Ru8\xe0\xcdN\xdfi\xca\x84\x92\x85kVQ#\xce\xa7\xd3\x11\x05\xf6\xed\xf6\xb8#\x0e\xc4\xc4\xb1\xd3y\xe2\x15g]Q|\xe0\xa9\x16\x7fX\x7f\xac\xc5\xf7\xa2\xce\xb5\x03\x99\xc6h\xfd\xecn{\x18\x9b\xa8H\xacc\xf6\xf4\xc4\x98\xa4D:\xf90*\xe5\x90\xba\xc2\xc9\x9ah8\xc4\xa7\x17F&\x15\x1a\xa9X\xeeT\xc2\xa8\x04\xc2\xa8\xb4\xc19=\x902\xa5T\xb2`L\x8a\xa0\x92\n\xa8i\xb3$\x06\xc6\xa6\x03Ni\x7fzk\x88H\xc9\x98\xd4?{\x8a_bb_P:_x\xda^B\xb2^l\x8a\x9e-\x15/[\x02^\xde\xb4\xbbl\xc9v\xfe\x14\xbb\xb8\xc4:\xa23m\xe9t\xeb\x93\xe8<\xc9rCH\x8a\\lb\x9c5\x01.2\xed\x8dHv\xb3.\x94aP\x94\xb1\x82F&\xb1\xcd\xc9jT\xff~\xe7/;.Mm\x99\x92\xa6\xa83\x93\xd32\xa4\xa4%$\xa2\x99\xa3\\_\x0c\x13\x92\xce, f)ie\xce|(K\n\x997q\xcc\xcc\xc5\x08O\x123\xdf\xfd\x1b\xd5\xd6\xa84\xb0\x90\xc6\xfaR\xbe\xecm\xf3\xa6w\xadH\xea\"\xdb\x1c\x99\xc0\xe5L\xdb\xb2'k\xb9R\xb4\xc8N\x08M\xc7\xf2%ai\xa9W W\x01iV\xe1\xc9U\xde\x94*\"\x03\xc9(\x8ex\xc6\x97*\x95\x96 EVJ\xf9%*\x05\xca\x96\xee\x94\x92\xe4D$4\xc5\xa61\x91)K \x89J\xc6V\xdb\x9a\x8ad$ \xe5I;\x8aO6\xd2\x12\x8b\xa2\xd2\x89\xac\xa9Ca C\xde4\xa1\xc0\xe4\xa0\x90\x94 #G\xc6,-4\x01\xc3\x9d\xf4\x13\x98\xea\x13\x90\xe0\xb3\xa8rB2\x8f\x91\xb8\x93\x90\xaeC\xa5\xe6\xc4%\xe4P\xc97\xf9Rn\xe2\xbf\xae7\xbd\xc6\x97TC\xdcY\xffO\x8bH\x16\xcd\xc5\x16\xe4\xc2\x13\xf8\xf2\xe5\xc5+\xa1\xc9\xe9\xc9\xbb\xe4G\xd5`\xdf\x9d\x00\xe6\x14\xdf\x1d\xfa-\xaf\xf0w\xd5\x93^)(\xde\x02\xdd\x9b\xdf\x0d\xf7\xfb\xad9\xcb\x88*\xfdj\xe4\xe5\xf0\xc1\x8b\xd9\x132GG\xa4\x15\x98nk\x0b\x17\xdb\x9aB\xe7\x8c&\xa5`\xd6HG\x03/||F c\x8b\x94\xa6\xbb\xaa\xde\xb1\xad\xd1\xcdo\xf8\xcf\xcb^\xc6G\x93{\x98\xfb<\xd65\xf6l|\x05\x1b\x87\x1e\x1c\x833o\xac\x9b\xcc_\x12/\xe1\x80[6a\x81\xfd\xa2\xf3\xc45ZO\xde(\xbd\x130h\xb5\xa6\x91\xcdJi\xd2\x04\xdb\x88\xcf3\xcf\xd2\xb1\xa5\xb8J\x1b\x88\xc24&\x9av\xc0q\x81\xbd0\x9d\x895\x0c\xdc\xde\x1bW\xea\x9c\x0c\xe8\x0em.\xb9\xba#~\x0e\x11\xf3'\xb4\xa0\xf8y\xa3\x7f\x0fi\x95\xd6}\x10^\x18\x11\x81\xa0|\x1f}\x0d8m\x1e\x83\xbb\x7f0 \x0c\xb2c\xec\xce\x8fL\xb0\x05\x0dY\xe4\x81+\xe2\xa1\n\x1a\x9c\xa0\xf6\xec\x01\xc0D4(1\xc3\x10\x8a6\xdd\x07\xb3\x1a\x8cH\x04\"\xf8G^v\xca\x02\x84H\x04 \xf89l\xa1]U\x9e\x0c<\x18\xe7\x9f|0C\x02\xc4\x90\x11^\x88\x84\x16r\xc2\nY \x85|pB\x16(\xc1\x0d#\xc4C\x08$h\x90\x150 \x0e\x0fK{\x90\x15(\x88\x00 B6\x02$0`_\x9br\x02\x02\xc3\x04\x06\xd0\xe5\xe5\x00\x01T2\x95 \x00Ht\xfe\xa7;\xfe\x17KM^W\x7f\xac\x9b\xdf\xea\xf5&\xdc\xfbN\xd7\xfe\xd2\x97\x18\xe6\xd2_\xbe\xf37\xbd-\xab\xdd\xf8\xbe\xc6\xb8\xdc\xf7t\xfd\x9dn\xfb@\x97\xbd\xd1\xae\x08W\xbd\xd5MO\xbb\xe8m\xeey\xa3\x91!ny\x97K^q\xc7G\xba\xe2=n\xf80\x17\xbc\xd3\xfd\xaey\xb9\x17\xea\xb5\xbf\xb9\xdc\xed\xf1\xaev\xa3\x02\xe2\xff\xb2\xb9\xd73\xba\xd6\xb3\xb9\xd5s\xb9\xd4Iw\xfa\xc2\x95\x9e\xeeF\xcf\xe2B\xcf\xe7>\xf7\xbb\xce\x9dn\xf3\x00\x97\xb9\xcf]\xbe\xf0;/\xb5\x87:Q\xed.\xf2\x00\xf7\xb8\xc75>U/\x97K<\xa3;<\x8f+<\x8f\x1b<\xee\xcb9\xdd\xdf.\xd7\xf7h.\xef\xbb\xc3\xe6\xe4\xbe\x1a\xd8\xe7\xea\xf1\xa4;6C\xbdg'g\xb3\xa3.\xc0\x91\xe2w\xebm\xda\xad\xb1\xbf\xad\x9b\x81\xdd+\x01\xdcr\x83[7\xc3?\xfcY\xfc*z\xd0\xa9{\xcb\x86\xaa\xde=1\x01\xc4`\xb9\xb5\x83\xdc\xaa\xa3\xf8R\x002y\x8fP\\\xb7r\xe4\xf1$\xa1\xc4\xfb\x93\x0cU\xd6\xe0\xd7h/\x13J\xb4\xaf\xc9\xd0\xe4\xbbMc\xb5\xdf %\xd1\xfbD\xf4\x96\xf5\xd6\x8cDO\x94\xa1\xcfzKF\xa2W\xca\xd0g\xbb\x15#\x9f\xaf\n%\xc1c%\x15d\xf3[\xa1Dz\xaf\xa6\xdad\xf3a\xa1d\xf1d\xa1\xe4\xf3g\xa1d\xf1j\xa1\xf8CdS<\\\xa6\x15\xb5\xde:\x91\xe2\xf72\x94\xd1\xb7L\x10{ \xcaJ\xa5\xf9\xc4\x0cu\xd4m\x12\x11\x9e2\x14\xf2\xf6\x08\xc7R\xecH\xb6\xf7\xad\xd2\x91~4\xd3pYo\x85p\xd5 \x87gm\xa1\x90\xba\xfd!\xd1\xcb\x86\x92\xeek[\xa83\x17\xdcD\xef\xdbB\xd7@\xdc\xea\x10\xeb\x8fC\xf1\\D`\xbd\xbd\xc1\x1b|KS\xa1\x87y\xeb\xec\xef\xff\x8dn\xfbj\xff\x1dJX\xe3}\xa1\xb8\xee\x96z\xc3q\x83\xbd{(\x96\x1e\x88\xf0\xf4\xa1xnSp\xdd\xa2\xe0\xbe=\xc1\xd2)!~@\x14_\x80.q;B\xa4g\x10% L7\xd4K\x88\xe2\x0d\xd5\xb5\\\x17@\x14K>\xe7\x0b\xd9M\xf1$\xa2X\xaa\xb7\xf8-\x9bo\x11%\xa3\x87\x11%\x9b\x9f\x11%\x97\xb7\x11\xc5q\x9b\x00q\x8b@\xba\xff\x11%\x8b\x17\x12%\x9f/\x12\xc5\xef\x91D\xf1\x86\xf3\x06y'\x17\x0fzX\xfe \xe2{\xaa\xd4P\xdf\x97\x8f\xcd?\xc0w)\x1e\xf4\x07\xf7\x1a\x95\xcf\xe5\xcdD\xc9\xe8\xd3D\xc9\xe3\xd9D\xc9\xe3\xdfDI\xf9\xde\xdeP_\x7f\xb0/\xae\x0c\"\x8c\x8f\xf3\x01\x8c{\xc9\x87\xfa\xd0\x9f|\xfa{\xcc\xa8\xff\xcb\xae\xdd|\\\xcf\x13w\xcb_{ZO$/#\x86\xeb\xf4/\xf8\xa2\x87\x85\xf5\xd8\xb3\x0e\xcb\xe0\xc3\xaa\xc1\xe3_\xdb0\xa2\x12\x06\xadUh%\xb6\x9eJ\x08\xf5*!(J\xc7\xaa\xde\xa4\x9bp\x14\xeb;\xde]r\x85zu\xa4\x7fJ\x947w\xcc\x14\x95(jh\xe8\xbb\xd3\xbd2\xfd\xf1\xb6?T\x1bF\x90\x80\x05\x1cXIR \x07\xcf\xae(\xccE\xff%+\x04u\xd3\xd7[6s\xda\x1b\xdax\x8b\x05\x8d\x94\xf1\xc7[F\xf4\x81\xab\xb7?\xf4\xac\xe3__\xaf\xda]\xb5\x19&\x1f\xe64JyO\x8ba0\xfe~_\x7f\xd2\x88\xf6\xc5PZVm\xac\xb3\xfc\x00\x85C\xb6p\xc8\x16\x0e\xd9g\xe4\x90u0\xc1.\x17\xd4\x90\xf4\x19|\xc3\x95=C/\xdd\x97\xea\xaf\xabW\xf0\x85\xce\xa7]\xc8\xf9%!z\xa6G\xc8\x1a\xfa\n_\xd4\xed\xa8\xd0\x07\x13?\xf9\xdc\x92e\xb9\xe3\xc4`\xdd\xa1\xea\x86\xc7\xf5\x85S7\xa7(\n\x8d\x95\x94o\x1f\xf8JR7\x9f\xda\xdd'\x9c\x134\xb3\xbb\xa5\xc2\xdf\xc8\x12Zo\x8d%t\x1c\xb1\xf6\xf5Sm\x10\xd4\xbd\xb9\x86r\x8f\xb2\xf2\xabk\xa5\xb8\\*\xc3z\x0c\xddq\x83i\x14\x8b\xc2\x96;\x90s\x95\x18~@\xf0o\xc3\x0e\xfc\xbd\xef\x11\x1a\xfb\x9e\xb7\xac\xab\xa63(\xcf\xb6\xd9A\xc3\x86\xcfm\xf7\xb1/+jYQ\xcb\x8a\xfam\xad\xa8\xe4:\xe7\\X\xd5\xb7\x7f^\xbcN\xf3\xcc\x19\xeb\xab\xfaN\xf0\x8aj,s\xe4\xd0N]\xda\xe8E\xcdYT\xd4\xaaE\x95M\xaeOd\xd1\x96\xc9KM\xdc,\xeb\x90c\x05\x9a\xd7\x1ez\x8c\xc5\xac7\x99V\x1a\xdb\xf0\x9bN\x90\xc1c\xcf\xf0\x95\xb8\x06D\x1e\xff\x88\xe1\x19\xf1\x17\x19\xe1\x0d\xd1\xfd d!\x8b\x0f\x9b\xe8\xe8P\x1d\x1b\xcf<\xde\x03\\\x17\xba\xa3\xc8tZh\xee\n\xdaQ\x91\xd1E\xa19'\xa4[B\x0cm\xd9\x10\x9e<\xfcKW5k\xf2\xfe\xf3t\xfe\xb9iE\xc8^\xe5K\xfb\xfdXE\xd1J\x1eOT5\x1b9\xe0\xf1o\x81s\xec\x94\x98L\xbc_\xfd%\x14\x9a\xd2\xb5\xd1\x9a\xd9b5\xad\x91\x9aC|\x9cf\xae(\xcdBS\x8aRhJ\xe5\xebY\xe31\x13\xa21s\xc7bf\x8b\xc4\xcc\x1b\x87\x99-\n\xd3\x1f\x83\x99-\x02\xb3\xd0\x94\x16\x9a\xd2\x948\xcaBS\x9a\x16/\x19\xc2\xdcYhJ\x15)4\xa5\x85\xa6t\x05#\xa8\xff\x19_\xcccZ\xc4c\xa1)\x15\x923\xca\xb1\xd0\x94r \x8bl\xf4\xc65\x06F5\x86\xc44\x16\x9a\xd2YW\xe6\x18\xc6|\x11\x8c\xf9\xe2\x17\xe3\xbf\xae7v\xd1\x17\xb9h\\\xd5{]u\xf7\x8co\x0cg\xaf\xdd\xe4>\x9b\x9d\xb8\xc2\xbb&\xde\x9e\x1e(\x1e\xb5\xe2Q+\x1e\xb5\xe2Q+\x1e\xb5\xe2Q+\x1e\xb5\xe2Q\x83\xe2Q+\x1e5E\x8aG\xadx\xd4\x8aG\xadx\xd4\x8aG\xadx\xd4\x8aG\xadx\xd4\xfe3x\xd4\x16\xa1\xe8\xa7\x93+m<\xcb\x8f\xbb\xec\xe6Q\xf1\xaf\xe1\xe7\x94\x07\x02y\x0b\xc6\x1b\xc6\xa6\xf7\xce\x17\x96k`\xdd]%\xc2\xdaDq<\xf8O\x0d7\xac\xd0Y\xc7\xcf\x9b\x18\x1f7\xee)\xe1\xbek9K\x1a\x15@x\xc1\xba}\xdd\x8f\x07\xc3\xd7\x9c\n\xf1[\x88%T#\x92\xeb\x1e\x0eS\x15\xc7\xe1\xaf\xe6\xbd\xf4\x8co\x9d\x89*8\xf8!\x9dU@\x85\xe15\x18;\xf9\xa5\xae\xefC\xbf\x8c\x04\x16\xdfb\xd6\xa2U6\xc8u\xba, \\\xa7A\xb5\x1a\x8b\xe8n\xb5!\"\xebByq\xfe#U\xce2\x7f\x0d\xa8\x1c6\x08\xa8\xd4<\xdex\xf1\xd2D(1\xb8|\xb4\x1a}\xfa\xcb\xf8\xab>\xd6\xc7\x9f\xd2z\x95\xeb0r\xc3\xe81\x04\xd6q\x04J\xa7s\xdf\xb3\x12g/'\x9f\x94\xaf\xd9\xcbs]\x8c\xe7p\xf6/W\x7fA\x8e\n\xdbj\xa80p\x7f\xd1\xd9!\xe6\xe4\xe4\x97\xf9k\x06\x18\x15\xf3sDLg\xe7'\xa0\xba\x9f\xeazK\x82&\x1d\x99\x1c\xda\xdd8\x88\xeb~\xd1\x93\xfa\x95EL\xb5\xdfkL7\xcfq\x08\xeej\xcdr9Z\xb7\xc6\x8e\x9c\x1a\xc5\xd7\x0b^\xcc\x1ae\x05r\x8d\xe2\xe8\x9dH\x14\x1b\xc5\xc3\x96\x0d\x1e\xc6l\xf0\xb2f\x83\xbb\xd3B1n\x14\x1f\xd2\x8db\xb0hC\x1a\xea\x8d\x12\x80}\xa3\x84#\xe0(^\x1c\x1c\xc5\xd6\x89\x14\xbb6\xb8\x9e\xf7\xe1\xe3(i(9\x8a\xa3\xca\xc6\xefI\xb8\xb9\xa1\xcd`\xe1\x86D4\xdd,\x81`\xe6\x86T\x8c\xdd\xac\xb2\xce\xd6\x0d\x99\x91w\x14\x07k7\xd0\xcc\xdd\x90\x0d\x8bG\xc9\x86\xc8\xa3\xe4\xc5\xe5Q\xc2\xd0y\x14/F\x8f\x12\x88\xd4/\x1e\xf6\xb0z\x03=\xbd\xc0\xc2\xf6\x0c+0^\x1f\xc37\x84\xe3\xf8\xe2a?\x9a\x8fB4('\xb2\x8f\x92\x84\xef\x1b\xda\x08\x16p\xc8\x8a\xfa+\xc5d\xc1\xfeQR\xc7\x887\x0e@\xa8\xf32\x83\x03\xb1\xb2\xa5\xe4\xda\xa0\x10\x197Bu\xf1OC\xf1O\x17\xfft\xf1O\x17\xff\xb4!\xc5?]\xfc\xd3\xba\x14\xfft\xf1O\x17\xff\xb4\xa1\xa8\xf8\xa7\x0d w\xc1\x16\xff4\xf5H\xf1O\x17\xfft\xf1O\xebR\xfc\xd3\xc5?-\xa5\xf8\xa7\xa1\xf8\xa7\x8b\x7f\xba\xf8\xa7\xfdc\xe49\xfc\xd3\xc4a&&\x7f\xcdP\xb2\xccg#\xcc\xae\x9a\xd6\x86\x12\x99\xdc\x06\xe5\x8a\xa1r\xc5P\xb9b\xe8y\xaf\x18\x82\xf9\xb3\xces\x0f}\xcd\x8c\xfb?\x94_\xe5\x0d}\xb2c\xbeS^^\xdeNd\xc9\xb9\x81\xe0\xfb\x894\x05\xca\x0dE\xaeT\x9f+L\xfe\\\x9d\xe2#\x92F\xa3L\x8e5u'a\x82\x85d\xe8\xc8DW\xf6\xa5\xee\x07\x15\x0ex\xcaTHY\xe8\xb8\xc5\x14\x1bnYC\xe5\xfdC\xd5\xb1f\xc8\x99\x93\xf9\x83\x04Y~T\xfa\x06\x8b\x91uR^\x1b\xf7\x81\x81\xdfB\xe8\x7f\xa7\xe0uamT\xad\xcb\xaa\xa2\x94\xa6\xbc\x9euh\x85\xebSS\x0cl-\xb9sJ\xea\xec\xeb\xe6~\xa7\x0c\x16U\x8b\xd0@\xcd\x0f\xfbt\xc4I(K]5\xf9\xd6'\xd8\x89\xda\xfenS\xec\x92f\xab9_]\x13\xc55URg\xadu\xde&Wh\xdd\xec\xa5\xe6oH\xfa\xe0\xfa9\xec\x98\xc5!\x05\xae\x9b\xc99\xe6r\xd9\x1f\x97\xfdq\xd9\x1f?\xeb\xfe\x98X>\x03\xb6\xb3\x8b\xf53x\xf7*~Y\xbf\x80\x8a\x17\xa3LB\xc6m\xeb\xbc\xf0p/\x91\x16%F\x18\xe0\xf5\x1b\xb5_\x8f\xfb\xaa\xf9\xa9c\xd5\x96\xcf\x165\xce*\xe7&\xed\xbd\xbc\x18q\xab\x1b\xf6\xba\xa7\n\x1a:V\xf5\xc7.\xd4\xae\xda\xec\xc4\xa5v\x11\xe4\x86Ox\xd1\x9b<0\xa7\xdd\xd4|\x88s\x1f\xefb\xcbQ5\x86cm\x8e\x16;\n\xab\xbbi\x9b\x86m\x06`_\x06\xd6\x8d\xed\xab\xd4\x08\x99\xa1\x85O\xac\xab\xef\x1ey;uef\xab\xdb\xcf\xcdZF\x1bk\x8e\x7f\xfb\xb9\xb1\x0e\x13\xf2\xaa\xf4\x95%M\xfd$\x94\xe9\xea\xeb\xb6\xb9\x19\xea\xe0\xe1('\xc3\xb6\x1a\xd8O\xe3{T\x15\x06yw-\xf7Y\xd6\x8e\xa1*\xb7\x06S%\xa7\x00\x84\xddN\xdb\x1f\xbc\xe6\xe6c\xa9ba\xa44+\xe2\xf4\xac+\xc4^\xb3\x848\"\x0b\xb1WI\x9c*\x89S\x94\xb6\x928U\x12\xa7J\xe2\x14\x94\xc4\xa9\xa5\x94\xc4\xa9\x928U\x12\xa7\xbc\xb5)\x89SP\x12\xa7\xa0$N\x95\xc4\xa9\x928U\x12\xa7\x0c)\x89S%qJJI\x9c\x82\x928U\x12\xa7J\xe2\x94\x7f\x8cX\x93\xb6\xa3\xd3\xb5qnj\xda,\x89\xda))\xda<\x1d[o\x0d\x91\x01\x10\x93\x96mO\xc1NL\xbe\x0eJ\xbb\x0eO\xb1NH\xaeNH\xab&\x0cF\xc6\xe4\xe9\xbci\xd3\xd9\x12\xa6\xfd\xa9\xd2\xd9\x92\xa4m\xe9\xd1)\x89\xd1d\x12\xf4\x10\x92\xfe\x1c\x9b\xf8lMr\x8eLo&\x12\x9b\xad\x0be\x18@i\xac\xa0\x91 \xccs\xb22\xd5\xbf\xdf\xf9\xcbNKW\xc6\xf4dE\x9d\x99\xa8\x9c!E9-9Y\x1b\xe5\xfab\x98\x98\x90,:Z\xd5\x98\x92z\xec\xcc\xab\xb5\xa4\x1b{\x13\x8d\xcd|\xc1\xf0\xe4b\xf3\xdd\xbfQm\x8dJ%\x0ei\xac/}\xd8\xde6o\xca\xf0\x8ada\xb2\xcd\x91 \xc2\xce\xd4`{R\xb0+\x1d\x98\xec\x84\xd0\x14`_\xf2\xaf\x96\xf6\x9b\x90\xf0\x1b\x90\xea\x1b\x9e\xe4\xebM\xef%\xb2d\x8d\xe2\x88g|i\xbci \xbcd\xa5\x94_\x92\xd2u\xf5\xf4\xdc\x94\xc4\\\"\x117)\x05WO\xb9\xcd\x99lkM\xb35\x12l\xf3\xa4\xd6fK\xaa\xcd\x9bN\x1b\x96H\xebM\xa1\x15\x07i_\xf2\xacx\xcc\x996k\xe4\x97\x9a\xa5\x85&@\xba\x93d\x03\xd3c\x03\x12c\x17U\xce\x99\x0c\x9b\x94\x06k\xa6\xbd\xe6Kx\xcd\x97\xea\x1a\xffu\xbd\xe9\xad\xbe\xc4V#\x15\xed\x15\xba\xc6\xa6\xcd\xf2\xd2u&\xa1\x93\xd9\x7f\xe7\xc6\x0f\xb9\xefo\xa1C\xf7\xb3\x9e5C=\xbb\xd8\x0c?\x9c\xe9\x83{\xa8\xfa\x87\xa1\xba\x8f\xf39\x87\xc7-\x0dU7\xe8k\xbe\xf5\xec\x12\x18\xb1\xd4l\xd9\x17\xd9\xb1\x93\x0bM\xbas\xb9\xadb_\xc6\xeeR\\\xbbCu\x8fuY:\x81X\x93=\x9c*\xb2r\xac\xd9.\xab6T\xf7+\xaa&J\xbf\xae\xee\xa1cw\xacc\xcd\x86\xc1\x0f\x1c\xc5\xa8\x10\x9f{!\xbf8.0/\x80\x0d\x1buS#5\xb0/\x03jQ\xbc\xfc\xe3[\n\xc8\x8e\x9eh\xf6e\xd0\x07\xfd\xafbL\xcdo\xab\x0d\xd7_\xe39\xdb\xb1\xa8G\x19\x81\xb9+\xf7\x87\x18\x81\xbf\x891\x05\x01\xe3\xef\xd8=y\xd4\xe672\xf6\xc6}\xf57;\xf6\xc6\xca\x19c\x8f\xe0\x06\xf6\x8f\xbd\x7f\xe1;\xe7\x198\x99\x83\xaf\x11\xcf\x9d\xe1\x8a\x8em\xeb\x0e\xd1:-\xca~[\xf7\x87]\xf5H\x91\x13\xfb+\xa0F\x0f\xa1\x1e\xb1\x9b\x9f\xebd\x8e\xf7\x0f\x9d%\x84\x8eo\x00\xb8\xef\xa7\xde,^\x15/\xbe\xad\x9b\x8f\x01\x03]\xd9\x90PE0\xb1q\x80C\xd5q\x1f\xf7qX\"\x8e\xa8G\xdfo\\T]\xb5\x0f\xdfm\xec\xab/7\xa3\xa6\x9b\x1dk\xee\x87\x87$D\xf2\xb7\xeaK\xbd?\xee\x01UQ\x95\x9dQp^\xcbe\xf7\x1e\xc6\xdf\xd8\xc0\xba^\x86\x12\xf2w{\xd8\xb7\xdb\xe3\x8eQmm\xfb\xe7G\xaf\x83\x01\xeb\x89\xb8\x9bG\xc4L\x8e\xd8L\xa1\x1f\xdex\x0fw-\x12;\xc1\x08]\x1c\xcb\x12\x0f\xc9\xf0)\x7fG\x9b\xb3\xf3L\x86^\xd5\x025\xe0\xd1\xe4\xb3\xeeq\x1c\xadVz-\xb0A\xbd\x9e\x8b\x9d\xb9\xa5>r\x12\xceQ\x04\xfc\xc0\xb4\xac\xd5*|\xdd\xdc\xdf\x83e\x95\x03wb\xeb\xea\xa8jr\xd5\x03\xb7\x01\x05\xdf\x02\x03@\xc7u\xcc\x12\xb3\xf6\x0c\x15U\x11\xa0\x16K\xa0\x17L\xc8\xd7\xae\xc8\x06\x98\x8b'\xd7in\xde\xc0_\xd5\xf4M\x9c\xaa%j#\xa7(Xw\x9c\x00\xf2H\x01e\xd0\x97A\xff{\x1a\xf4kN0`\x9cb\xa0\x0cw\xe2|\xf1\xfb\x1e\xee\xe4\x01 \xe8C\x12\xf8\xab\x9a\xf1\xb0\x04\xee\x03\x13\x04Wf\xdd\xc1Iyq\xfd\xe1Iy9\xf0\x00\xc5\xedJ\x9c\xa7\x80\xde3^\xe3\x9a\xb6\xab\xf4}\xde\x8b\xb1\xeb\xef\x8e{y6\xfe\xaa=,`\xdc\x97+\xeb\xeef>\x08\xe8\x8b\x97\xf0\xaeU\x96^[H\x91\xbb\x93^b\x18\xee\xacf\xb1\x02w\xec\xb0{\x94 \xd4|\xc1\xc2\xe2p\xe5)\x85w\xaf\xbb\x94\xff}l\x879\xaa(\xaa\x14\xfc0\xde\xc6(\xf3\xcaQ\xceA\x0f@Gq\x8c\xe6 '\xdf4\xcf\xe7\xf9K\x96\xcd\x91\xbf\xcc\x85S\x94$\xa2$\xa3V\xbaI\xffS\xcf\x8d\xba\x0c\xd8\x9e\xa2\xf8u\x85G\x8c\xf5\xdc\x11\xb79M\xe9^c3d\xb2,9\xfb\xa4\x07\xaa\xed\x87\xcb\xa9B\xf6\xa5\x8a\x7fQ\xd3\xfcHS\x0e\xbbz\\\x92\xe4B\xa1\x0c\x8d\x1e~`5\x8fO\xac\xa6\x81\xfeb\x1a\"\x1d\x8e\xc9\x1f'\x83{\xd8=\xde\xf4l\x18\xea\xe6\xde\xf4H\\\xf2Y\"\xff\x8c\xfdI\xbb \xb4\xef\xa7\x1b\xc1\x9f\x80\xcf\xc9\x9b\xab\xb3\xeb\xeb\xf3w\xbfX\x8c\x87\xfe\xd4\xd9\xbf\x9c]\xfe\xeb\xfbwg\x8eG\xde\xbc\x7f\xfb\xf6\xfd\xff8\xbb\xbcr<\xf3\xdb\x87\xeb\x0f\xa7o]\x0f\x9c\xbd\xbb>\x7f\xffn\xd61\x19>\x7f\xad\xed\xc6\xce\xd1fa\xe0\x94\xce\xa5\x8d\x9c\xadC^\xc2\xd9'\xd6=\xb6\x0d\x9b z\x1eB;\xb4\xaaa\xd3\xbf\x94\xab\xfb^\xc2\xfbf\xf7(b\xbdY7E\x14\xe2\xfe\"\xb1\x14\xfc\x00\xa2\x08E\xeb\xfe8\x1cy:\x80,4\xb1\x18\xf1\x19EA\x07\xd6\x1evL\xba\x00x\xe0\xb5\x98\xfdB\x17]\x9c(a\xcaO\xdcV\x83/}\xcc\x9b\x9f\xf8J\xe6&\x8eO\x10\x1b0\x1e\xb4\xc2\xb6\xf5\xc0\xb6Y\xcaS6ao\xab~\x00T\xbd\xc8\x8cTJ_\x919\xfa~|\xd4P\xa1\x9863\xa9\xb2n\xb0\xbac\xf3\xab\xdb\xf68,\xa3\x18,\xeeu^\xd0uW5\xfd\x1d\xebD\xfa?V\xd1\xd8\xe4=\xab\xcb\x9dG\xc9\xcc\xd1-\x07\x91\x835\x88\x9a\n\x0d\xc6:\x9bT8\x8eU~\xfc\x93#V\x96\xd7)\xee\xfdf\x1b\xfa\x15\xf5\x0c]\xfe\xaax\xa8c\x1bV\x7f\x8a\xd4$_VG\xc5\xb4@\xdb>\xab\xbe\x97\xc1\x1f\x95N\xc5#\xc4\xf8f\xffP\x1f\xa0\x95\xf4Ob\x91\xbc\xeb\xda\xbd\xd2\x0e\xb9\xa9S\xeaB\x0d\xb0i\x0d\x0e\x1eU\xcb\xe3\x82\xf7\xa0\x10\xb8.\x86o\xad\xc3\x0e\x04aG\x81\xa0C\xc0\xea\xed\xbfk-\xcc\xb0\xe5\x7f\xea\xcd\xfeSo\xf3\x9ft\x83\x9f\xd7\xe4\xd0\x1bys\x0b\x1fQ\xc8b\xc3\x9e\xbaU\xe7[sE\x9f\xbeI\x0f\xd9\x9e\xa7n\xcc\x9d\xd6\xe5z2\x1aFW\xa9\xb6\xc0;?\x9c\xcf\xa96\xc0?\xff\xbds\x7f\xd5\xbc\xa7\xe7\xbc\xb7=\xbe\xf9\xfe\x94s\xfd)\xe7\xf9\x13\xceqj\x9c\xf2\xe5\xa7[\x92\x93l\xeb;\xfe\xd7\x81\x0f\xb9~\xb1:Q\x19\xf9\x9c1\xe9\xbc\xd9\xb4\xfb\xba\xb9\xb7-\xd2\xeb9\xf5\xc4B\xfe\xc4>\xbcg\xe5\xc1\x0b\xdb\xfc\xa1\x18\xf6X(\xcfU\xa9\xa0M!\x8a\xbe5\x14\x1a\xed5 \xd8&\xa2\x98\x9b\xc5H\xdd\x8b\x8d\xe3\xe2A\xcd\xbf\x93\xb4\x89\\hR7\x94\xe1[I{\xdd\xe4DQ\xc0\xe9\xf1]\xee\xa7\x19K\x10\xc7!\x9c\xe4\xfc\x185UMN\x15E\xdb\xbe\x1a\x17\xbf\xf6s\xd5m{uA#\xaaC\xf2\xdd\n[a\xde\x7f\xc2\xeb0\xff\xbc\xb8\xf8\x04l\xf3\xaf0\xe5\n)L\xb9\x85)\x97x8\x94)\x97N{^\xb7\x00[I\x10\x856\x85Z\x02\xb9\x10\xbd\x9a\x95\xcb?Nl\xfb\x03\x0c\x9c\\\xbd 8(Q\xa1\xe4+\xf4k\xe0\x8a\x10\x9d\xf5D\xddl\x11\x12-\n\xaa \x8d\x89\x18\x9d^':/\x84\x07Y\x94J\xdd\xca\xa2}\x97v\xb7;m\xfa\xcf1\xb7BU\xf8\xde\xefu\x83F ?\x13\xb5[\xbd\xb5\x84\xa5\xea(\xbb\xc2\x98D\xb0\xd1\xef\xda\x8d\x12\xbb\x8a\xf2,\x1b;\x85P\xd0\xac\xa9V\x9d\xdd\xee)\x99\x96G\xfd\xa0\xb1L\xf1q\xb3\xe4=\\\xa8\x11\x03\xeb\xa6n\xb6\xec\x8b\x19-D\x0d3\x14\xe7\xc5\x046\xea\xdd\x90\xe6`E&P\x03\xeb\xa7\xfa\x18.DZ\xb3\x98KD\xedH\xee\xe8\xb5\xfb\\\x0c\"\xe3e\x88\xdb)y\x07\x7fg\xbc\xc7\xaf\x8b\xc3~6I\xa9\xc5\x07\xe042\xca\xeb\xe5\xe2\x83\xb2\x9d+\xdb\xb9g\xdc\xce\xe9\x9f\xd4\xb6\"\x07\xad\xf8\xf3kB\xdb\xe5\xc5+\xd9X\xdf\x1e\xa0\x1f\xe6\xcc\xe1\x88}\xc0\xfc\xee\x1fh/\x10\x9c/\xb3X\xdc\x0c5\x14\xa5\xa2\x19\x06B\x90=\xa2<\xcbn!\x82\x04\x12%\xff\xbe\xc1A\x0e\x89bPD\x8a\xf7\xe9\x91\x04\x9e\xb0\xe3\x81$\x8d\x9c\xff\xe6\x884u\xd3_\xa1d\xa4\x91D\xb1\x93I\xa2\xe4\xa3\x94D\xc9F,\x89b\xa5\x97D\x19\xe2I&QrQM\xa2\xb8 'Q\xa2h'Q\xa2\xc9'\xe9\xbe\xe3\xbez+\x05%J4\x11%\xa9\x0dm\x86\x85\x8e\x12%\x85\x94\x92Tx<@\xc5\xdbj)/\x82\xa0\x92Td%\xadDI\xa4\xae\x94J\x02\x08,\xc97\x83I-Q\x12\xa8-Q\x12\x08.m\x13\xddR\xd5l\xd4\x97(y 0Q\xb2\xd1`\xa2\xf8\xc90Q\xb2Qb\xa2\xd8\x881QR\xe81i[APf\xa2\x0c!\xc4\x99(\xb1\xf4\x99\xa42\x1b\xa5&J$\xb1&\nA\xaf\x89\xe2\xd9RX\x8f\xc4(!;\x8eH\xdaM\xda\x98N\x18\xf2\xb0 \xdfD\xf1\xd5&\x8d\x88\xd3P\xc7\x899 :N\x94\x0c\xa4\x9c(i\xd4\x9c\x86:\xbe\xa3!7\x0f\x894\x9dfI\x06m'J\ny'\x8a\x93\xd5\x12\xc5B\xe4\x89\xe2\xa5\xf3D!\x98\x04\xb9\x84S{\xa2\xd8\xf4\x18\xdcm\x89d\x9f(\xe1\x9d\xe3#\xfeD\xf1\xf5\x82\x97\x04\x14e\x05\x15(\x8a\xa3w\"iAQ\x9c\xe4\xa0(v\x8a\xd0\xe9\xefV\xa2P\x14G\xa7\x85\x92\x86\xa2\xf8\xa8CQ4\x02Q\x94\x04\x1aQ\x94\x002Q\x94pJQ\x14/\xb1(\x8a\xad\x13M\x92Q\x14\xeb\xf3>\xc2Q\x944\xdaQ\x14G\x95\x8d\xdf\x93\x88H\x0dm\x1a1)J\n=\xa9Y\x82AW\x8a\x92DZjVyIb\x8a\x92\x93\xca\x14\xc5Jh\x8ab\xd0\x9a\xa2\xe4!7E\xc9Fq\x8a\x92\x97\xe8\x14%\x8c\xee\x14\xc5Kz\x8a\"\x1c>>\xea\xd3\xc5\xc3N\x02T\x14bz\x01I\x97\x89\x12J\x9a\xe9\xa6D\x15\xba\xc2\x88Q\xc5\xc3~zT\x14\xa2A9\xa9RQ\x92\x08S\x0dm\x06\x81*J>\x1aU\xa5\x98,d\xaa(\xa9c\xc4K\xac*\xd4y\xe8UQ\xf4\xa5I8\xa1\xddT\xab\x8bG\x13\x08W\xa1 \xae\x05q-\x88\xebWA\\\xffCC\\I\xfc3\xfc\xb6`MAP\xd8U?\xac\xc6Y\x0f\x13m \xf9\x02\xfd\x12\xb8p\xd3\x84Y\x11\x0c\x8fZ\x88\xfc\xc0B)\x08N\x10\xd1\x1b\x9d\x97H/\x08\x04\xa8\x99\xd0I.\xbaA\xb0Q\x0e\x82\xabL\xa1x\x05\xf5 \x7fkA?\xb8\xb2\x00\x0b\x0d!\x90T\x84\xb4\x8aP:B\xb0\x8dkp\xe2\xb845!\x80+T\xccq\xcd\xb9\xb5\x06(.<\x19\\TV\xe0\xf7\x00\x83\x0f\xc0\x97b\x8f[\x90\x12\xc3\x0cecr\x03;\xbd\x15\xd8)\xae\xe0w\xdd^\x92!k\x14\x0b)\x1c\x84\xb5V4$\x91\x1cN\xd5\x14M\x10\xa7(Y\xcf\x8c\x08VvD(\xf3.\xe78,\xf3N\xc8\x1fq\xde\xad%g\x04\x92\xa0\x11\xca\x8c[;\x02m$\x8e\xf0\x07\x9dq\xae\xf6Zg\x9c%0\x0e\xc2Z+\x1a\x92\x8b\x17\x12\xfc\xdc\x90\xb0\xaab\xeb9\"\x95\x97\xe3x\"\x15\x05\xc1\\\x91\x00:_$8\xa6\xbb\x83\x93\xd5\xbe\xd9O\xe0\x8f\x04\x82C2\xa4H+\x97$\xb8\xf8$\x9d\x9a\xfd\xc7\xb1$nIp\xf2KB\xdc7\x89\nX%-\xb9\xf8\x92\x1e\xdeI\xf0\xcf\x10\x9a\x7f\x12BH\x19V\xbcE\xf3P\xda\x9f\xa7\xb9(\xed\xcf\x93|\x94\xb0\x96\x9cB\x7f\xd5\xcdK !}\xe4#\xae\x08Q\x97\x87\xc6\"\xa4\xa4<\xa4\x16!%e\xa1\xb8P\xc5\x129\x0f\xfe\x19\xe0]\xa6\x0d_\x93\x8b\xb7\x12\xc0\xce] \xf9*c\xd9/\xc4\x11\xe4\x90\xaa\x96\xa49\x16>K\x08$\xcd\x99E\xd4?\x9a>\xc7\xd0\x94\x8b\xdb\x12\x1c\xfc\x96Jq!\x1c\x97\xe0\xfa\xce\x94\xc1\x0d\xe3\xbb\xa4\x9e$8/\xa9\xc7(\xdeK\xea9\x83\xfb\x92|H\xe7\xbf\x84u\x1c\x98\xe05\xae\x19\xb80)5\xc9|\x98\x94\xd2\xa7\xe1\xc4\xa4Jz\"^L\xb2\xa8\x9c\xdc\x98`\xe7\xc7\x84\x90\x1d\x9e\xc9[ \xf3|\xf4qe\x82\x93/\x13\x92\xcb_\xc7\x9d &\x7f&\x04l\x9f\xdf\x93<\x9a\xb04\xa71\\\x9a\x93\x02\x03\xa6\nKB\xec\x87\x00\xf4\xeb\n\xa1\x99\xf1\xe9\xf5\xd9\x86\x87\xa7'v\x7f\xba<\xc3\x1c\xa8\x99\x1d7\x93\xd5\x8bO\xbfKG\xcf\xecI\x81\xd1\x9d\xe6C\xd1\x1c8\x9a\xb3ls\xc2\x86`i\x14\x9a\xb6\xb2\x18\x07\xa2f\xc3\xd4\xc8\xda\xae@\xd5\xa2\x0f\x9cvl\xcd\xedstx\x1d\xbd~G\xbf\xe7\xd1\xe3{\xf4\xee\xaaQ\xbc{k\x14\xbfG.\xca'\xe7\xd0f\xb9\xdbu\x16\x87\x1f\xf2\x8f\xd0v\xabG\xd2\x89\x02\x04\xb6<\x1f\x12\x90 \x0b\x98\xd4\xc4\xa1p.\x1c\xae\xccQE\xf2\x8f\xd32Gm\x7fNl\xf9\xb7;Gc\x10;\x1bfWf\xa7\"yG\xa8\xe5\x86\xeaY\xfe\xc0\xb3\xd3z\xbf\x1b\x8a\x03<\x0blyH\x93b`?\x97\xc5\xa1\x01\xc1 Hp]\xab\xe2`\xc1\xf9\xb0\x12\x0d\x0cN*VA\x83\x148\xe8\xb2+N\x8a4\xd7\xf9%\x11$\xa4a\xc2\x90\x82\x9dP\xa1\x07,L>{&C\x86>\xd00\xfa[Yl\xbf\xdb\xee\xf3W]\xc37\x04@\x0c\x98Ov\x101\x00\"[\xf5\x9e\x1dH\\\x0f%\xae\x06\x13\x93\xe0D\x9f\xcf[\x8a\xb7\xbf\xd6A\x8a\xcf *>'\xac\xf8l\xc0\xa2\x13Z\x0c\x98\x1b\x01\xfb\x06\xc3\x1d\xe7\x03\x18\xdd\x10c\xd6JYW\xfd\x8cP\xe3\n\xb0q-\xdc\xb8\xf0\x90'\x02\x8e\xae>\x89G!\x0dU\x06*\xe9\xc6%\xa7Z\x85\"\x93\xce\xe1a\xbb\x8e4\x0c\xd5\xa3\x9e\xb5 \x94\xe1\x18e J\x19\x88S\xaeF*\xfdv;\x13Z\xf9Dx\xe5s\"\x96\xcf\x8aY>\x03j\xe9\xc4-\x836\x9b4v8\xcd\xd9\x10\xf4\xd2\x87_\xe6\xa8\xc7z\x14\x93\xc41C\xf6\xf7v,sa\xab\xe3\xd0\xcc\x92c[rlK\x8e\xed\xd7\xc8\xb1]\xb2\x1aS\x90\x7fHD\x81\xfa\x9e\xd0\x17\xcck,\xd9\xfcK\x9cA\x893\x08\xe9\xb4\x12g@\xab)q\x06\xb6?\x06\x1c\xac\xc17\xf8f\xf1\x1d\xb0!;RP0\xcc\xff\x94\x18f\x8930\xe5\x9b\x1e\xa7e\x8e\xda\xfe\x9c\xd8\xf2ow\x8e\x968\x03U\xbe\xd9\x11Z\xe2\x0cJ\x9c\xc1,kZU\xe2\x0ct]\x93-.q\x06%\xce\x00\x1f\xf6\xcd\xa7\x12g\x10\xd2&\x1f^\x85\xe2\xed\xaf\x12g\xe0*\xab\xc4\x19\xe4\xadT\x8930u\x958\x83\x12g\xa0H\x893\xb0\x97U\xe2\x0cJ\x9c\xc1\xb2\xa8\x12gP\xe2\x0cJ\x9c\x81\xa2\xec\x0f\x19g@a\xfe\xe1L\xde\x8b\xd7ec\x9d\x84\x06|\xf3s\x85K,\x0eScx\xaa[\x1b\xff\x86\xc6\xb3\x8d\xf1m^\x9c[\x16\xe7F%p{B\x0f\xce\xc4\xadH\xd6\x0d\xc8\xd3o;\x9ea\xb3\xf1\x84[\x0cu\xdb.F\xee\xf2\\rh\xfb\xbe\x1e_\xeb\x96;{~c\x898\xa9l\xaa\x86_\xd2IL \x81\x80\xa8\xb3\xc1\x19i\xa3\x01\x04\xa4y\xb7\x98vy\x80]\xef\xd76q\xb5\x85\xa7\xfe\x19+\xa1\xb8\xd0\x17\x80\x16Y\x85\x14\xc0*\x12\xa0\xd2?\xef\x07\xe9\x01\xfff?\xad\x01\xca|\x8dO\xab\xa1#\x0b\xdc\xc0\xf5ic\x00\x8dy\x8fF\xc2\x14\xae\xe2Ba\x88\x08\xd8\xc1\x188=\xebN\x9b\xfe\xb3\xdc\xbc\x87\x8c\x1f*B.\xe2\x03.\xf6}WSH\xdc\xd6\x12w\xa6\xc3\x0f\xca\x95\xf8\x0bO\xd2\xae\xdd(ai\x86\xbb.\xa2\xa2\xda\xcd\xfcU\xdf\xb7\x9b\xdaR\x97\xa9\xd8\xdd\x8e(V\x0f\xce\xa3\xc3\xf2\x88b\xc7SO;\xf5\xc8X\"\xfff\xe2>kQ\x1d\xa1\x00\xff\xd4\xdf\xd4\xe3\x04aq\xe1\x92f\x14\xa1\xbb\xaaX\xd4\xb4vc\x0d\xd4\xb9x!n\xf6;\x15\x7fRk1N\xa1\xb0\x89q\x8a\xe6T\x96\x83&\x96k\x1c\xd7K\xd9U\x8b\xb91\x8d\xef\xa5mU^\x05~\x7f\xb5xQ\xcc\x8f\x8eUx\xfd\xeb\xc9\xa7\xbf?y\xd316\x1ahn\x05.\xaa\xae\x92=\x160YX3\xae\xf5\xc6@\xb8m\xdb\x1d\xab\x1a\xbd}\xff\xe3\x81q\xdf\xe0\xa2D\x98*\xa3\xd8\x19\xa1W(\xd8W_nv\xac\xb9\x1f\x1e\x92F\xdc\xf5\x03\x1bU\x01\xaa\xc2\xad\x85\xa7*b\xbb\x01\xfc@q\x7f\xc3\xbex>\xa4\xfd\x18u\xc9\xee\xcf\xbe`\x99\xac\xdau\x90e,\xf1#\xcd\xa5\xf8eu\xfc\xb3T\x15\xe5\xcd\xf8Z7\x0e\xc9J\xcf\x91\xc3\x87\xa3\xea\xe7!\x11\x95,u\xc2\x1dSK\xd5\x852\x9c`\xbdh(\xf1\xda\xa3\xa9Tm7\xa7\xbcE\\ON~Zp\xc2\xbc\xe3+t4\x84\xb5?!\xe0\xdap\x80\xd3q\xfb\xf0s\xc7\xfa\xf6\xd8m\xc45\xa6|\xaa\x1ey|\xf6\xee\x11\xea\xedx\xec\xb9\xab\xcd[\xbe u\xf3\x0d\x9f\x14\xb0c\xb9~\x1c1#\xd1\x06\xd8\x1fg\xb7\xe0\xb8\xc9\xdb\xb1\xaa\x1f(m\xe39\xf5\xfb\x9f\xbf\x9fM\xc1 \xb7s\xbb\xaa\x1f\xa0g\xf7{\xe5V\xc1\x0f\x97o\xff\xd4\xc3\xa1\x1a\x1e\xb8zB\xd9\xb4\x86P%\x0d\xc4\xad\xaf\xbc\xa7\x84z\xde'?T\xfcRr\xe2\xf5\xbf\x8e\x05[\xafU\xfc\xeb\x8fXo\xaep^\x07\xc6\xc6\x13\xba6U\xd36\xf5\x86\x9fs\xa9\x9b\xce\x01~`'\xf7'/\xc6n\xe3\x9e\xa6\xefO\xbe\x1f\xe7D\xd3\x0ePm6\xec0\xb0\xed\x8f\xf4\x95\xff\xe7\x0d\x1c\xc6\x8e\xac7\xec\x05\x0cl4\x86\xc7\xfeX\x8d\xcd>tl\xd3\xee\x0f\xf5n\xac\x97\x80\x8ao\xeb\xa6\xea\x1e\xa1\x12\xcb\xf2R\xc6\x1e\x11G\xd8\xe1\x81\x91(\x1f\xfb2\x1a|\xa8\xf9D>\xf6L\xde\x84;~z\x11J\x7f\xda<\x9e\xc0\xaf\xedg\xf6\x89ux1\xee\x87\xcb\xb7\x14\xb8\x88v@\\\xd0K\x15\xd6o\x1e\xd8\x9e\xc1_\x1f\x86\xe1\xf0\xd7\x17\xf8\xdf\xfe\xaf/\xa0\xed\xa0i\xc5__\xf0\x115\xae&r\x97\x8e\xc7qB\xdd\xf10\x9e\xe2\xc8\xdbw\xf9\x1c\xf8\xc4\xaf\x01\xae\x06\xd8W\x87\x1e\x87\xc7X\xf3\xb1\xa5\xd2\x8f\xc7\x1d\x925.\xb9U/\xbc\x16\xfdK\xf2\xcb\xfc\x1d\x9c\xdf\xcd\xf5\x1c?\xa7\xbcOyj\x8a\xb0{\xc7=\xdb\x92\x97\x83\xff\x1d\x9c6\xf0\xeb\xf5\xf5\x05\xfcrv\x0dm3\x1dx\xf8t\xc3\xeb\x84+\xf3\x92\xd1\xeb\xc7\x03\xfb\xb7\xff\xf5o\x84B\x90\xde\xd5F\x8e\x04\xb4\x9b\xbcO\x0f]\xbb=n\xc6\xfd\"\xb0\xaek;\xea\xe6\xe8\xbf\x83\xd3\xc3aWo*\xd1\x07\x1d\x1b\xc7R\xfb\x19w\xdf\x9bj3\xce\xe5\xb6\xfdx\xf4\x0c>\xb1\xaeGg\xd3 \xef\x97\xc6\xf1S5\xd5=\xdd\xd6\xdb\x8eU\x1f\xb9\x7f U\x9e\xfcH\x8d\x84w\xed\xc0^\xe2Y\xe3\xee\xd8lp\xa4\x8f\xb5\x16Vbs\xec:\x8e*\xa8\xde\xf8\xc6\xd2\xc1-\x07!L7\xca\x83\xc4\xc4\x93\x7f\x0e2\xe4\xa3\xd0\xa5\x7f\xcf{\xe3\xfb\x97\xf0=5\xe4\x97M<\xc1v|\xff\x82\xd6\xc4[\xf0\xae\xda\x8f\xda\xfe\x1f\xac\xea?Y\x1e\x1d[\xa0=\x19\xd2\x8c\xf3;\xb13_~{\xfcnu\x0f\x9f\xd9n\xf7\xd3\xc7\xa6\xfd\xdc\xf0\xc9\xf8\xc0=\xc1\x9bc?\xb4{1f\x97\xfa\x96\x03\xed\x05\xee\x0b\xb5\xd17\x87T\x89B\xc7\x01\xd5\xdc\x1b\x8e\x19>\xb8\xf4\x02\xfe\xca\x07\xbc\x1ck\x0f\xedn\x8b\x03M\xa9\x13w\xf2\x881\n\xc2\xad\"\x86\xa8\xae\x8d\x171\x8dM\xf8a\x9c\xe2\xb2\x0b\x8cS\xbbt-\xfd\xdb\xff\xfa\xb7\x1f\xc9a\x9c6\x1e\x96\x85\xd8\x86\x04o\xfe\xa8\xec\xefO\xfe\xfc\xf7\x7f\xee\xbf'?\xf2\xfc\xef\xf4{\x0d\xa53\xf6;\xed)\xe9\x94\xd7\xa0\xd4j\xa8\x10GU\xa2\x0b\x97:\xc4\xfb\xff\xb1\x88y\xd2]\xfc!\xbc*S\x0d./^ ]z\x88\x93\x1dK\xe8\x11\xacX\x0d)\x1c\x14<\x8b|\x85~\x0d\x9e\x0fP\x18;i\xf2\xe0\xf7\x13\x02Su\x0c\x0f\xa3\x8a\x9a\x8e\xdd\xd7\xfd\xc0:\xb6\xbd1\xa1\x12\xa5\x14\x01\xec(\x90\xf2\xe5\xf4\xa6\xecP\x0d\xf0\"\x1a\xb8\xca5o\x00\x81R\x06\x12\x10\x9c\xfe\xba\x04\x06\xbd\xd5\xb4B\x84\xa3\xdcu\x8c\xdd\x98\x0c&\xd6N\xb1`\x7f\xdfFW\xac\xc5H\xa5PX\xe9T\x84\x15\xed\x01'\xe2\x03\x90 C\x95\xa2c\xa9S!i0\xce:\x8c\x95P\x10\x0b\xb6\x12\xaa\x96\xf0+\x80;.D3s$&\xab\x8c\\i\xae k\xf5\xddwf\x1dpH;\x0d\xb9f_\xc3\xc3W\x97\n\xc8\xc0U\x87U_m\xcf']\xbaI\x0f\x8a\xfb\xf8\x9d\xd0d\xf9 ek\x9a^\xb6\xbaE@\xcbvv\xac\x0c\x9c]\x01\x10\xb3\xc5ql5\xe0\xfeK\x8fm\x89\xf7N+\x15b\xa7\xb2\x03\xce>\xc897\xe8\x9c\x19v\xf6\x00\xcf\xc9\xd0s^\xf09\x04~N\x00\xa0\xf3B\xd0A t^\x18:\x00\x88\xce\x0eE{\xc0\xe888\x9aT\xe4\x84\xa8\xb3\x80\xd4\x8105\xf9\xe6*\xe8:\x19\xbc\xce\x0d_\xdb\x01\xec\xcc\x10\xf6S\x80\xd8\x99a\xecP ;3\x94\xed\x06\xb3\xb3\xc3\xd9v@{\x05\xa4\x1d\x0fj\x93\xca8\xd0m\x81\xb5\x93\x80m+\xb4\xed\xddR8\xe1\xed\xb0\x1dG>\x88\xdb\x0dr\xfbk\x93\x15\xe8vC\xdd\xd9\xc0\xeeT\xb8\xdbP\xc7w4\xe4\xe6!/\xe4m\x03\xbd\xd3a\xef\x00\xac\xd7 }\x07\x82\xdfV\x0cl%\x00n\xd7C`\x05\xc90\xf8\x9a\xce \x81\xc2\xfd\xbd\x10\x04\x87\xaf\x06\xc4\x9d\xbd\x93\x00\x8a\x07\xc0\xe2>`\xdc\x0f\x8d;;m\x0d<\x1e\x06\x90\x93\x10y2H\x1e\x0c\x93\xaf\x05\xca\x03\xa1r{'\xd2p\xb9\xe3\xf9\x10\xc8<\x07h\xee\xac\xb2\xf1{\x12tnh#\xa0\xf4\xac`\xba\x0dNO\x04\xd4\xcd*\x9b\x00{~\x88\xdd\x03\xb2[`\xf6\x9c@{f\xa8\xfd)\xc0\xf65p{ \xe0\xbe\nr\x0f\x07\xdd-\xb0\xbb\x0dh\x0d\x87Z\xfd\xd0\xfb*\xf0=\x18~'\x1b\x94\x1b\x82\xcf\x0b\xc2[`\xf8\xdc@|n(>}\x8c\x04\xc1\xf1a\x80\xbc\xbe\xb2\xe5a\xf74\x80\xf9th\xbe0\x00\x15\x06\xa0\xc2\x00\xf45\x18\x80, j\x10|\xaa\x03\xa7+\xe3a\xf4\x08\x89\x08\x08\xd5\x11E\xb2\xc2x|\x85\xf8\x18Ns\xaac\xa3s{\x14\x8dO\x94\xe8*K\xa2\xacy\xff\xd0v\xc3C\xd5lo6\xed\x96Lv\xb5\xc7p\x89{\x80&\x150\xaa\xa0\xa8\x18\x88r%\xff\x865\xc7\xd6^,\x06F\xf0\xfd\xc6\x0c{ }l;\xce\xdf\x06\x8e=\x92\x0fP\x85S\x06\xce\x1c\xa1\x0e\xf6\x0ew\x8f\n\xb0w\xe1\xd6\x9b\xe2\x1c\xc0>\x1bmSdMT\x83\xd1\x88\xd0\xc8\x06\xfd\xc5\x98\x18\x07c\x82\xfe\x91\xc2\x1d\xe2&\xf4\x13\x87\x17\xb8\x86\xa1{j\x87\xec\x04S\xa6\xb7s\x82\x87\x14\x9e:\xc9m\xfb\x98\x8c\x13\x9d\x9e\xea\xdad/\xbb\xdd\xb2\xdb-\xbb\xddoa\xb7k]\xe2R\x16\xd8\xde\xbf\xc2^.\xb6\xab\x01+i..\xaf\xd4\xa0\xbd'\xa0\xe9\n\x0f\xce\xcb\xc6\xd3\xe5 \xc2\xd3\x96\xa7\x15\x86y \x83\xed\xac6\xc8\x0d0g\x0c\xad\xb3\x07\xd5\xe5\x0b\xa7\xcb\x16Hg\x0d\xa1\x1b\xe2\x83\xe7r\x85\xcd\xb9\x03\xe6\xa2B\xe5\xa2\x83\xe4x{\xf5\xd8.kx\\t`\x1c\xceNM\x9b%$.%\x18\x8e\x07\xbe\xe9\xad!\xb0\x96\x98\x008{\xb0[b\x98[P\x80[x0[B\x18[B\x00\x1ba02\x86\xa9\xe5\x0dP\xcb\x16\x9a\xe6\x0fJ\xcb\x16\x8ef\x0bDK A#\xc3\xcd\x86\x90@\xb3\xd8\x103k8Yd \xd9\x1a/O\xd8 \xc6XA#C\xc5\xac\xb7}\x0c\x8b 1{\xd9i\x81a\x18\x08\xa6\xa83C\xc22\x04\x83\xa5\x85\x81i\xa3\\_\x0c\x13C\xbfDG\xab\x1aS\x82\xbc\x9c\x11L\x96\xc0.oH\x97\x19\x99\x11\x1e\xc6e\xbe\xfb7\xaa\xadQA[!\x8d\xf5\x05j\xd9\xdb\xe6\x0d\xceZ\x11\x96E\xb692\x14\xcb\x19\x84e\x0f\xbfr\x05^\x91\x9d\x10\x1al\xe5\x0b\xb3\xd2\x02\xac\x12B\xab\x02\x82\xaa\xc2\xc3\xa9\xbc\x81TD<\x92Q\x1c\xf1\x8c/`*-T\x8a\xac\x94\xf2KR`\x94\x1e\x08\x95\x12\x02E\x84<%\x05;\xe9\xc1M9\xc3\x9a\xac\x01MF(S\x9e \xa6l\xe1Ky\x03\x97\xc2B\x96\xbc\xc1J\x81aJ!\x01JF$\x8fYZh\xa8\x89;\x1c)0\x10) \x04iQ\xe5\x9caGI\x01Gf\x80Q\xbe\xd0\xa2|AE\xf1_\xd7\x1bH\xe4\x0b!\x92fZ\x0f\x1b\"\xb7\xe9\xfeP\xa1\xb4 !\xda\x8d\xaa\xfb^\xbf\x05\x87\xeazX0\xa3c\xd3\x06N\xd9\x80?\xd7\xb7\x8c\x05\xfb,0\x9f\xab\xa8\x14hO\xf7\xed\xa7\xc2y3\x84'\xban\xc6\xee\xc2\x06\xe1\xf3\xdd?\x10K3\xa2#\\\xce6\xd8x\xf5\xdd\xefJ;\x16F\xb7o\xa1\x8f\x08\xee\xbeg\x9a\xce\x0eZ\x1bw0\x12jO\xa1\xb31:\x01\xac(\x04\xc9\xdbB\x8f'\xc87\xa6H\xda\x1ak\xc3}\x945\xcf\xd6\xdc\x18z\x1a\x1b5\x0dm\xbb!$6+\x9d\x8e\x86\xa2\xa2!g\x00x\x91\xffu\xf43\xcbwc\x99g\xa6\xf6\xa1B\xdd\xa8'\xf2\xcb\xe8\x01\x18\xa4=:\xb4\xdd\xc0\xad\xd1Z\xe33T\xcd\xb6\xea\xf8\xc4\xef\x9f<\xc4\xe9I\xa3\x87\xc6\xfa\xab\xd7\x01i\xdd\xa6\xbeGV\xc2\x15\xbes=\xfegY\x94uL\xaeVN\xa4\xe7*\xb7s\x9d}\x19X3\xee\xfd\x952\xb4F\xcb#\xfa\xa6\x1a\x0f\xa9\xb5\x99HT\x1d\x0e;\x8e\xb4\xaa!.t\xe9Wb@\\\xa2j\xdbFW<%k\xc0\xe7\x1bN\x8b\x85\xb6C\xbd\xf98N\x92F\x03o\x11\x1e\xe8\xda=l\xeb;~\x9d\xdd0}/\xc5\x90\x125|[\xe3E\xfa3n!F.\xaa\xc3\xd5\xaea\x9fgu\xbc^cE\xc66\xd4\xea \x93\xf9c\xcaOm\xc3\x16DM\xd4T\xdd\xb7\xdb\xe3N\xccX6\x1a\x04r\"\xf2\x10\x8b\xaf@\x98g\x9d\xd0`\x99\xd4@Ml\xb0On\xf0\xb0\xf6\x98\x93\x1c<\x13\x1d<\x93\x1d\x12&<\xd8&=\xb8\xe7&\x84O~p\x1b\x00\x08.\xc8\xc2\x1a\x90`\x0cH}\xf5@\x1b\x04p\xd6$\xcd0\x18\xean\x99\xd58@\xb0\x81\x00G\x8ds\x1a\n\xa0\x8d\x05\xa8\x06\x03\xd6\x1b\x8d\xe9\x05\xc2V\xd8\xa3\xb80vK\x94A\x87k-\x8d\x10~\xb1\xd5F\x08\xbb+\xce\x08}\xad\xac\x84\x1e\xc3\xaft\xce\xce'JD\x080@\x84\xe9\xb1\xf6A\x90\xb9\xb1\x1a\x1a\x9fZc\x82$\x98\x15s\x8fA\x18\x14Q\xae\xd5^\xc8+\xf5q\xb8bh\xe6\xd4Xub,\xc7\xafob\x88\xf2\xc2'\xc6\xfa\xe5\xf9Y\xf6\xca_9\x1d\xc02\x93\xca\x1e\x9eV\xfeu\xf7\xf0qs\xac\xc4\xf2\x97X\xfe\x12\xcb\xff5b\xf9\xa9\xd5'l]\x0b\xdd\xf1\x8d\xff\x1f\xb1\xae\x8d\xafE\x99\x82\xaf\xb0\xe3c\xa2\xbe38\xb5\xe9X\xd0U\xab\x89\xb5\xc1b\x95g\xc4~\xe0\xa6\xde\xa6\x1f\xb7\xd7.\xa3\xb6ET\xac\xe3d\x07)\x08\x08\xccs\"\xb0\xa7D\x81\xca\xea\xf6\x9b\x8c\xfd\xe37\x94/\xb05\xa3\xa3\xc6\x1f\xd8\xda\xbb\x15\x967rK%\xca\xa3C\xd5\xdd3\x9dq\xde\xe6\xbd\xb0\xfb.\x86r\xb5\xad!\xd9R#\xc0\xc70<\xc4\xa7H@\xc64 \xf0\xa6J@l\xba\x04\xa4\xa4LP=\xe6g\x15\x8eN\x9d ty\x19\x85SR(\x08u\xe5j\xdb\xb4\xb4\nHK\xad\xa0\xa7(Y\xc9l \x17\x90=\xe9\x02r&^@P\xf2\x05\xe4L\xc0\x80r\xb5-ULd\xe2\x06\x94\xabm\xe3\x12;4e\xe5j\xdbr\xb5m\x80\x8er\xb5\xedR\xca\xd5\xb6\xe5j\xdb\xc0g}i'\x90\x9cz\x02\xe5j\xdb!09\x052'\xa8\x80\x8fu\xb7\\m\xebO\\\x81\x90\xe4\x15\x08O`\x81\xc0$\x16(W\xdb\x06%\xb8@j\x92\x8b\xa6\xab\\mK(\x0b`\xd2].\x1d\x12\x0c\xe5\x1eS\xabG\x9b;\x8a\xeb\xb6\xb9\xd9VC\xa8cX\x9e\x91\xc6W~\x1a\xea=\x05\xda\xc2u\xbd\xe7K\xb6\xe1\xc4\xff\\\xf5\x86\xff~B7\xf9\x13\x96\x88#\xbe?\xaf7j\x1b\x96(\x8b\n\x85\xf8A\x16^T8\xc6\x12\x13<\xc0\xdf\xfb\x83\x06\x0f\x84\x802\xf6\x18\x82\x0c\xb52\x86\xb2\x03\x9e\xb1\x034\x16\x88\xc6\x0d\xd2\xc4E;\xac\x00j,PMH|B\x14\\c\x03lB\n\xf4\x8364l\xe3\x00n\xdca\xa7C\xb9,\xb2\\\x16Y.\x8b\x8c\x01v\x02\xa0\x9d\xec\xe0N\xb9,\x12e\x15\x18\x94\x0c\x07\xe5\x06\x84\xcae\x91\xaa\x84AC\x99\xc1\xa1rYd\xb9,\xd2\x03\x1a\x95\xcb\"\xd7\x03H\x86\xba\xa1\\\x16\x19\x06'\xf9\xafI\x0c\x83\x94\xcae\x91\\VBL\xe5\xb2H\x94\x10\xc8\xa9\\\x16\x89R.\x8b\xd4\x7f\xcc\x08O\x95\xcb\"\xb3BW\x99\xc1\xab\xa7\x80\xaf\xd6\x00X\x81\x10\xd6*\x10+\x1c\xc6*\x97E\xc6\x80Zya\xadrYd\xfe\xcb\"Ca.'\xd0\x15\x04J\xd0`W\x1c\xdc\x15\x0fx\x95L\xbe\x92\xc9W2\xf9\xbeb&\xdf\x02\n\x0e\x03\x99\xbd\x99|\x97\n\xff\x821\x95\xbf\x1a\x8d\x9c5;<#\x11\xa4'\x0b\\\xcb\xff&\xdb\xe8\xcd\xf9&\xb3\xbd]\xaa\x16\x937-\xb7[\xe6r/\x0c\x8d:\xaab\xf2\xb9\xa9\x01t\x98\xd29\xbf\x9d\x01\xe4\x8b\x10\xc8V\xfab}$c\x00\x86\xf0\xc8\x0b\x13\xf1_7\x9a\x03Q~\x03\xdfw\x8d\xc8\xd5\x98\xbe\x89\xe6\xbb\xd4\xbb\x11|\x1d\xbb_\xb1\xd9\x18\xcaMS\xe9(|\xb9i*\x0ca\xe7\xed-7MM\xae\x8b\xa8\xf4\xc8D\x8c<\x08\x1d\x0fG\xc2\x130\xf0\x04\xf4\x9b0\x18\x191\xee\xbc\xe8v6\\\xdb\x8fhg\xc3\xb2\xcbMS\xe5\xa6\xa9\x15\xa8r\xb9iJt\xb4\xaa1\x05!\x0e\xb9|\xa9\xdc4\xa5H\xb9i\xaa\xdc4\xb5\xe2R'\xff3>\xb45\x0dg-7M \xc9\x89\x89\x96\x9b\xa6\xb8\x84\xe1\x9d^\xa43\x10\xe3\x0cA7\xcbMS\xb3\xae$\xb4\xb2\xdc4\x15x\xd3T\x08\xe6hA\x1b\xc9\x1d\xbd\x1da\\\x8b-\xc6\xa1\x8a\xa6?y\xc9\x00\x1e\xecW.\xc0@>``*+\x8d\x8d}f_\x17\xea\x14\x0ev\x1f\xf3\xba\x18\x17\xe3\xf9g\xf78eC\xbe\xaa\xbb\xcdqW\x0dus\xbf:#r3\xbf{\x83j\x1d\x1d\xafw\x84\xadt;\x087\xfe\x8a@\x9c\xf2\x9a\xd0vy\xf1J\xf6\x83\x8e\xcci\x0d\xben\x87j\xb7\xba\xa9\x1c\xa2\x0dn\xa4YPH\xab\xf8\x0b*\xb8\xf8\xff\x07\x00\x00\xff\xffPK\x07\x08e\xe9\xdb\xff)\xc7\x00\x00\xdf\x89\x0c\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(e\xe9\xdb\xff)\xc7\x00\x00\xdf\x89\x0c\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00C\x00\x00\x00l\xc7\x00\x00\x00\x00" + data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00 \x00swagger.yamlUT\x05\x00\x01\x80Cm8\xec\xfd]w\xdc8\xb2\xe7\x0b\xdf\xfbS\xc4S\x17S\xae\x19[\xae\xee\xea\xf5\\\xf8\x9c=\xeb\xb8mU\xb7f\xdc\xb6\xb6,\xf7\xac>\xb3\xf6RS\x99\xc8\x14\xc7\x99d6\x89\xb4\xad]\xbb\xbf\xfbYx#A&^\x02H\xa4\xa5]\x15qS.%\x19\x04\x82 \x08\xe2\xffC\xa0\xffR\xad\xd7\xac{ \xdf\xff\xfe\xec\xc7\xef\x9f\xd4\xcd\xaa}\xf9\x04\x80\xd7|\xc3^\xc2\x1b\xd6o\xdb\x1e\x9e\xc3\xd5\xf9\x87k\xa8\x9a%\xac\xaf._\xc3\x9f*\xce\xbeT\xf7\xb0l\x17\xfd\x13\x80%\xeb\x17]\xbd\xe3u\xdb\xbc\x84W\xea\xd8\xba\xe1\xac[U\x0b\x06\xab\xb6\x83\x9eW\x9c\xc1?\xf6\xac\xab\x998\xe33\xebzy\xf4Og?\x9e\xfd\xf8dW\xf1\xbb^\\\xf6\xc5R^\xf0\xc5\xaekW\xf5\x86\xf5/>\xff\xf4\xa2\xda\xed\x9eo\xea\xe6\x93<\x00`\xcd\xb8\xfa\x07@\xbf\xdfn\xab\xee\xfe%\xfc\xf7\xe7\xfa/\x00\xafv\xbbM\xbd\xa8DY\xde\x8a\x93\xccE\x81\xdf1\xa8\xc6\x1f{\x90>\xa1\xea\xfbvQW\x9c-\x81\xb7\xf2\xa0u\xfd\x995O\x06\x87\xfb\x9eu\xcf\xa0^\xc1\xaek?\xd7K\xb6<\x83\xf7\xfc\x8eu_\xea\x9e=\x83\x9a\x0f\x17\xa86\x9b\xf9E\xd45\x06W=o;\xb6<\xd3\xff\xdf\xeeX'\x8f\xbaX\xbe<(\xb6>\xa6c\xfd\xaemz\xd6\xbf\x1c\x9c|\xff\xfb\x1f\x7f\xfc~\xfc\xdf\x83\xe8\xf7\xfb\xc5\x82\xf5\xfdj\xbf\x19\xce>\xb3\x8e\xee\x17wl[\xd9\xe7\x03\xf0\xfb\x1d{ \xed\xed\xffa\x0b>\xf9a\xd7\x89B\xf2\xda\xbe\xbe2\xeb\x86\xd8\xa6\x83\xeb/5\xe7\xe2 \xfaS\xcd\xff\xbc\xbf}\x06\x8c/~\xf0:\x14\xf7R\x9c[\xaedV\xd7\xe0\xb2\x8f\xfa\x82\xd06\x07\x0f\xaf]~\xe0\xd5\xda\xd4!\xe8P\xf7\\\x81z\xca\xbe0\xd2b>\xc8\xfeR\xb6\x0e\x16o\x13\xc1X\xb0f\xbf\xf5\x87\xf39\xbc\xba\xbc|{\xf1\xfa\xd5\xf5\xc5\xfbw7o/\xde\xfd\xcf\x9b\x0f\xd7\xaf\xae\xcfo.\xde]\\_\xbcz{\xf1\xff\x9e\xbf\xb9\xf9\xf8\xee\xc3\xe5\xf9\xeb\x8b\x9f/\xce\xdf\xa4;\xfa\xeb\xf9\xd5\xc5\xcf\xe6\xef\x1f\xae_]]\x1f\xed\xe5\xfc\xea\xea\xfd\xd5\x91>>||\xfd\xfa\xfc\xc3\x87t/\xd7\x17\x7f9\x7fs\xf3\xfe\xe3\xb5\xe7\xd4%[U\xfb\x0d\x7fY&\xb0\x93\xce=\xd0\x96S\xef\xa3xS\x04\xda\x15\xc0]\xd5\xc3\xff\xd9\xf7\x1cn\x19k\xa0nj^W\x9b\xfa\xdf=\x9d\xa04d\xe0U\x130\x05\x18/\xd4\xf3\xaa\x13\xaf\xe1[V7k1B\xa8W\xf5\xf1\x97\x93mer1\xd6u\xe25\x0c\xcb\xbdxj\xe4\x13\xa6.\xa6\x1f\xfb]\xd7\x8a\x17\xe8\xb1\x17\xd6\x0dlr\xe9i\xd5\xacW\xf5\xe6\xf0u\x19\xbf\xdc\xd0\x12'\xd7\xe0\xf5\x96-\xa1\xdds\xf1*\xdb0\xf8R\xd5\\\\U\x0c\xc3\xe6uu^\xb4\xed\xaa\xc5\x86\xddt\xec\x1f{\xd6\xf3HG\x15h\x92\xef\xa5\x9f+\xe5\x06:\xb6\xebX\xcf\x1a\xae^\x80\xda;\xf0\xbb\x8a\xeb\xd0\xb0\x06\xb6\xd5\x92y\xfd\xe9\xe1\x99*\xdei\xdf\x91\xf5\xb2\xc0\x0bh\xd5v\xdb\x8a\xbf\x84}\xdd\xf0\xff\xff\x1f\xe2o\xaa\x8b7b\xb4!\xaax\xf1\xc6t\xfd:L\xde\x93\xf5\xbdR}\xc4\xcd\x83\x14[\xdd\xe6\x0f\xb2\x04\xaa\n\xaa\xf8U\xa3K\x07\xaat^O\x8bj\xb3\xb9 \x8d\xa2\x00\xd5\xdc\x84\xbd\xae6\x1b\xc7`K\xfce\xdf\xab\x11\xfe\x8eu\xa2\x86\xe2\x87\xa0+]\xf6\xd8\x0d@59@6;\xc0\x0f\xcf\x00\x7fC\x01\x1d>a\xf3\x91\x9c\xe86\xc61q\xfb\xa5a]\x7fW\xef\xa0\xbfk\xf7\x9b@\xef\xac\xed\x96!zrl#\x80SV\xfa\x8e}\x05\xd6,\xda%[\xca\xd2\xa8f#\xfb'UWQ\x17\xdd\x8a\xa2\x0ee\x9d\xef\xe7#\xca'\xd1\xf3\xaa\xc5\xa2\xdd7|\x8c\xb3\xff\xa9\xd9\xd4\xac)\xf4\xc8\xe3\x02\xf5Z^\xf1\xe2\xcd\xbc+\x1f{+U\xa6\xa1O\x8f\xdep\x11\xcb\xa1G\x0fu\x13\x1d\xeb\xc5\x90\xca\xe3P\x17\xff?\xfc\xc5\xd7}\xc2V\xbe\x07\xbbv\xab\xfbV\xe1\xd4\x94\xdd~-\x9ey\x1d\xbdo6\xf7P}\xae\xeaMu+\xde\xadwL}6\xa8\xf9\x8d\xba\x07\xf5f\x0e\x0f.\x11=\x06\xa6\xb7\xd0\xa3\x07D\xaf\xf9A\x1di\xdf\xb8\xca\x9e'\x88\x0e \xb4\xb7x\xb9\x01Yva\x9f\xab\xcd>\xf8\xa1\x07\xf8\x16\x0c\xe8V,\xec\xcf\xec\xebs\xf3\xa8\xcbR\xd8\xc3\x10\xe8\xebu#\x86\xa1\xf7\xd1w\x04\x8c\xdf{\xc1\xe3\x84\xc7\x8a\xef\xbb\x87\xaf\xedP\x92\xd9\xc0k\xd7\xb5\xcb\xfdB\xd6:\xeaO\xf8\x18\x06\xce\"z\xde3VU\xbda\xe1\x0eJ\xd5\xe2gy\xe0\xb4}\xaa\x93\x1f\xa8m\xcao\x84\xf2w\xeb\\\xb8U\xa1\x9fL,\xc1\x97\x9a\xab\x17\xac\xa8\xf5\xbes\x87t\xd11\x19\x86\x1b1\xc4?b\xc6\xcb\x8c\xf0\x96\x15g\xcf\x85\xafp\xbf\x1ahb\xafu\x89\xae\xeb-\x9b\xbf\x16\x84c\xa8\x9b\xf9\x84\xda\x97\xc0{AV\xd03P`_wu\xf7\xc8\xaa\x7f>\x94 \x1f\x00\xaf\xb3/\xf5f\xa3j\xe9*P\xb80\xb3\xd9c\xc7\xf0W\x0c\xc8\xd5\x0d\xe0-T\xb0`\x0d\xef\x02\xdf\xf3\xf6\xa0e\xfa\xcb\xaeZ\xd7\x8dgx\xaa\x0by9\x1c\x02K\xb6\xaa\x1b=\xf9>\x9e9LL\x1fz\x08=\xc6\xe1\x87\xb7a_\xf9\xcd'v\xefn\x19\xd1vaZ\xc5\xed=w7\x88\xc9L\x8cw\xacaJa>\xe5\xc4?y+^+\xbb\xaa\xd7\x9f \x97\xd5\xda|\x16\x9f\xa9\xdf=\xce\xfe\xb1g\x9d\x1aD\n\xb7\"\x80\x0c\xb6m\xcf\x81\xadV\xf5B\x8c\xb56\xf7gp\xc1U\xdb\xb9e\xc0\xb6;~\x0f\xf5\xca\xd7\xa2\xefX\xc7\xa0\xea\x184-l\xdb\xce\x8c\x81z\xd7\x80\x87\xb7\xbc\xda\x1c\x19\xcc\xc07d\xec\xe9\x92\x97\x97Q\x94\xffh\xf6\xdb[\xd6\x89f\xac\x8bl\x8d\xc2\xbc\xf5\xb5\x03-\xc7\xd57\xd2\x99o\x18\xfe\xa5\xea\xa1g\xfc\x19\xd4\xbc\xd7\xe3\x82\xba\x87}\xa3\x1a\xf1\x12Z#\xfb\x1c\x9c\x1f\x9f\xa5SEQ\xad^\xd5J\xdd\xaf[\xb6\x14\xef\xe5\xbaQ\xc2\x9ay0`\xcb\xfa\xbeZ\xb3^\x0c1\xdd\x1d\xc2\x1ds\xd5c\xd1v\xca\xc7R\xbc\xa2\xcd,\x8b\xf6&\xdf\xf7\xf2\x13\xc6\x8e\x8c3\x1c\xe6\x8c\x0f\xedv,\xf7/\xde\xceK\x8e\xd1w\xb2\xf7\x86?V\xddp\x93\xfe\x05~\xf7\x7f\x85N\x9a\x84E\xb6\xef\x7f\x81\xdf;\xcf\xf8\xe7\xe4\x8f\xbe\xd6\xf3\xaf\xe2\x89\x99ki\xc3\x05\x0e\xe6\xa0\xf4\xdf\xf5\xcc\x92|\xdcf\x0eE\xb4\xe6\x01\xe2-\xac\x19\x9f\x7f\xdci=Q|/W\xa3\x9e\xb3\xefY7\x9cn\xa6\x86-\x7fS\xf1\xae\x81}\xc3\xbe\xee\xd8B\xc4Q\x8eAN\xa9\xe1y\x069\x81\xa7[\x0c\"}'\xd4\x0dgk\xab\xb2\xc6L_P7\xfc\xa7\xdf\xcf~\xd5\xad,\xa9\x0cZ:\xf3\x9d\xf3m\xb5Gq\xfa\xcd\xbe\xf3\xf4\x93\x88\x9e\x12\xd3w({\x05\x1f\xaf\xde\xbe\xe8X\xdf\xee\xbb\x05S\n\x9b\x1cI\xee\x9b\xfa\x1f{\xb6\xb9\x87z\xc9\x1a^\xaf\x8c\xd8-\xae\x0d\xad\xafo\x04\xf5\xdd\xca:3\xad\xef=n\xd7\xb5\xbc]\xb4\x1b\xb8\xdd\xafV\xac37\xed\x0c\xae\xa5r)\xeb\x06\xdb}\xcf\xcd\xb0\x03*\xff\x10|\xc3\xaa\x9e\xfb\xaf\xd56\x0c\xbe{\xf1\x1d,\xee\xaa\xaeZp\xd6\x9d\xc9\xb9\x99M\xd5s\xe8\xd9z\xcb\x9a\xe1\x83\xfd\xe3\xd5\xdb\xef{\xd8U\xfc\xce\xebM\x16jx\xe8\xfdW\x95\x03\xef\xfdfs\x0f\xff\xd8W\x1b57\xafD\xc1\xd5\x18\xc9\xa7U\x0fu`\n\xe7\xef\xa2(/\xd6m\xbb\xde\xb03\x19\xb3\xdb\xfd\xea\xec\xcd^\x0d\x10\xff\xfe\x83\xaa\x89t;\xce'\xd5\xfeo\x9a\n\x16U\xd36\xf5\xa2\xda\xc8g\xc8\x7f\xe5\xa7\xecl}\xf6L\x84Vv\xfa\xdf\x9d}'\xde0M\xcb\xa1Z,\xd8\x8e\xb3\xe5\x0fgO\xfc\xa7_\x88\xcf\xbfj\xc1\xeb\x05{\x06\x9cU[\xf1\x8e\xd8W\"\x1c\xbb\x8e-\xda\xed\xae\x16/\xd9F\xf7\x92\xb7uS\x1dt\x93\xa3I\n\xe2~'\xdb`%;\xc9{\xff\xa5U_\x075\x17}\xea\xbe\x97\xc3e9\x91\xd46\\\x8cx\xda\x15\xbcj\xee\xcf\xe0\xcf\xed\x17\xf6\x99u\xcfD \xbc\xce>^\xbd\xed\xf5`[\xb8\xf2\xbc \x95\xc9\x1e\x94\xc1\xdf\xef8\xdf\xfd\xfd\x99\xfao\xff\xf7g\xd0vbh\xa4~}&[\xe3\xa2j\xa0\x95Og\x15Riz\xc6a\xbf\x83J\xd6=p]\xd6}f\xfa\x0bp[\xedz\xd5\xb4d\xc9y;\xbct\xe5\x80\xa3\xe6\x92R |.\xad\xda\xcd\xa6\xfd\xd2\xbf\x0c\xdc\xdb\xff\n\x17\xab\xb1F\xa2Y\x18\x8ae\xa8\xb4\xfe\x12\xddo\xd9\xd2=\x14\xd0\x8e^5\xf0\xe7\xeb\xebK\xf8\xd3\xf9\xb5\x11\xcb?^\xbdU\xcf\xd8}\xcd6K\xa8\xbcg\xff\xef\xf9cq}\xbfc\xff\xf6\xbf\xff\xcd{\x02\x98\xf1W\xa3\xdb\x9b~\x8d\xc8;\xa4'+\xa0j\xd4+\xcc?]\xf7_\xed/\xa3^\x8e|+\x1135\x0e_T\x0b\xd1\xb7\xb4\xed\xa7\xfdn\x18\xb1\xdcV}`\xaaZU6DG\xd1\xcc{)x\xaa\x95\\\xf5\xb5\xa7\x1em?R\xb3\xad\xd7w\x1cn\x03\x9d\x92\xac\xb4\x9c\x81\xaa\xb7\xbb\x0d\x13/Y5\xa2\x1dF\xb1=\xdbV\x0d\xaf\x17\xce\x0f\xc5\xc8L.b\x08\x14\xfd\xf6\xc6\x8f\x92\xfe\xa2\x90\x05\xa8D\xa1\xea\xa55\xc09\x18\xc7\xe8\x97{u\xdb~\xf6\xb7i\x1d\x02\xfd(\xb8\xaa\x8f)\xd9\xdf_5\xf7\x7f\x1fge\xaa\x06\xaa\xee\xb6\xe6\x9dx\x88\xfd%t\xba2\xef\x88j\xd3\xea\xa6\x07\x95\xfb\xd6\x8a\xdeY\xbehT o\xa7\xc3\xc2\xd9\xf0o\x18\xd5y\x9a\xe6\xa5yp6\xf5\xad,\xb6~\x8f\xf4\xd0\xefw\xbb\xb6\x93o\xf0]\xb5\xf8\xf4b\xdf\x88\xff\x88\xf7\xb6j\x17\xee'H\xbf\xe8\xfd\x03\x9bv\x05{\xae:6\xd3=\xf4\xa2c\xad\x96\xcbZ\xf5\x15\xb0f\x0d\xeb\xe4'\xe7\x96\xf1\xbbv\xa9q:\xf7\xcd\x14\xe5Q\xb7\xd0}\xbd\xf3\xaf\x95h\xfc\xf0\xbb\x97p)\xca/\xfa\x05]\x95j\x08z\xdd\xc0\xeb\xff\xf6\xdf\x02\xaf\xc9\x9f\xdb\x16Vm\x0b\xff\x02ggg\xfe/_Q\x98\xaa\xb9\xf7\x1fP5\xf7g\xa2\x18?w\xed\xf6\xe9\xaam\x7f\xf0\x1fzv\xe6\x7f\xff\xd5+x*\\}\x94\x15\xb9n\x9f\xfe\x17\xe1\xeb\x87\xe0\x87|\xc8\xdf?\xc3\xb1\xfb}$v\xff\xa3\xfa\\\x15\x0b\x1e\xfc\x8b\x1c\x1b\x8a\xab\x14\x88P\xdd?\xfd\xb9m\xcf\x16\x9b\xaa\xef#\x01RE\x14'\xa9:Z'\xfa\xcb\x10\x89\xdcO\x91\xc8]\xde\xf3\xbb\xb6 \xc4N\x15\xea\xe7\xb6}zvv\xe6\x7f\x19\x0cq{\x1a\\\xe0\xf6~\x1c\xc6\x99\xb7\x91\x9a\x00w\x8f\xa2\xf5\xac\x9b\x18\xe6\xb8/\xf5\xbdc\x88\xf6b\xb5\xdfl\xce\xe4\x0fb\xf8\xfb=T\xd6\xdbS\xbcYE\xdb\xf2\xbdkT\x9bs_lxU5\x9b{\xf3\x9dz0\xf90\x0c\xbb\xa1ZI\xf8\xd8s!9/\xf2\xfd\x8b\xef\xdd\x97\xd2\xefXSd\xf9\xf5\x0cL?#\xdf\xad\xda\xf6\xec\xb6\xeade\xbf\xbe\xb8?\xfb\xf7\xefT\x14\xe5\xb7\x9c\xd3\x9f\xff\xd3V\x16\xf5;\xe1C\xbc^\x9d\x87\xfc\x8f\x0f\xef\xdfy~\x12\xb7Z\xfc\x9dz\x02oUw=\xbf\x91722i\xafO\x10m\xcf\x1c\xef\x9e\xb2\x97\xe6y\xbc\x85\x85J\xf5\x9d\x8c\xe5w/\xe1;\xd7\xc39\x0d\xc3\x99\xaa\xe5w\xcfB\xfed\xfd\xdeU[\xe1\xf3\xffVU\xf8\xef\xc1\x13D\xfdf\xc7\xa7V\xf2b\xa5\xbf\xd3\xa6mM\xb5\x86\xba\x87/l\xb3y\xfe\xa9i\xbf4\xb2;\xb9\xabz\xa8`\xb1\xefy\xbb\x0d\xfd\xf8\x88\x1b\xd5\xb1~\xc2\xa3\xcc\xe7Y\xe5\xad\x9eF\xd5\x00\x0d\xd6lv\xcf\xaanq\xa7N\xb7{\xba\xbayy \xaeu\xec\x1f\xfb\xbac\xcb\x97\xb0\xaa6\x13I\xd59a`B\xe0\x06\x13\x90\x91\xb0&\x03\xe7Z\xe0\xc1\xe2%\xcf\xaa/\x03\xeaLc!\xe2p&\x02\xbdT\xef\xf5z%\xef\x95\x9cZ\xdd\xf4-\xf4\x8c\x9f(\x1ef\xc1\x142\x18\xc3r\xa7Y\xf5\x8d\x1b\xa8\x9b\xbe^\xb2\x83\x90\x1c\x1b\x0d\xdb\xd7\xe9\x832\x92&g\x9f\xd8\xbd/43\x86CC\x1b\x95\x1ejt\x8c\xef\xbbFI\xf3\xb6J}6\x10\x1er\xa6u=\x9b\x92\x9450t\\\x88\xda\x90$i\xdb\xc8\xa9\x98v\xb5\xea\x19\x87\xb6\x83iqa\xf2l\x95\x8e\x96g\xde\xcd\x11DU>d\x13\xd3\x95\x91\xa1l\xf6[\xd6\xd5\x0b\xf37\xf9VZT\xcd@RK~V\x07~\xdf\x0c\xf3\xbc\xb3\xcf\xbb\x0b\xe9m#\xba\xa8!\x84jft\xdf\x8bP\x7fb\x89\xf1\x9c\xba?qpg\x0c\x8c#\xbc\x9bz[c\xa3+\x8f5p\x91\x0f\x8dQ\x1a\x80\xdd\x82\xf9\xc0;O\xbc\xed\xd4\x8c\x9f\xfd\xa7\x8b\x15l\xd8\x8a\x1b\x94H\xb3E\xe6\x1bJ\xca\x17\x1a\x99mu\xe4\xc4\x07\x19\xab\x16w\xe2!\x7f\xc0(\xda\x80\xcfx~(\x96\xd6\x19\"\xa2\xb2\x85\xb6\xc0\xbb=\x93\x8cG\xdd,E\x97\xc5\x06!\xd3\x10\xe3\xe2@\xc7\xf2\x87\xbaYl\xf6\xcbY_X\x81\x06\xfaW\xce;&\xb9\x04K\xe0\x10C\x1c\x8b\x93\x9bu.\x1f/\xfa\xd9\xdd\x9aUAv\xb7\x1d\xeb5A\"\x1f\xaf\xf1y\x14\x8f\xdc\x99~\x9a\xeau\xd3v\xf3\xde\\?\x8d\xd3K\xa8\xc8\x1c{co\xdbv\xc3\xaa&t\x03;\xf6\x99u=\xf6M\xa6\x8f\x9e\xdf\xb8\xda\x02\xc4:\xe6~\x12&~\xc45\x98\xa2\xa5\xdan\xc9\xba\xf9\xfc\xf0\x87\xbaY\xb0\x97\xb0h\xc5\x90\xe9y\xbf\xfc\x04?\x9e\xfd\xe1\xa7\xa2\xd1\xe0\xd5z2\xd8\xfbW\xed-\x98\x0c\xe1\x85Zl\xd1\xbf\xf8eX \xf2O\xe5\xc4\x95 \xe1?\xbc \x12\xfex?\xac\xeb\x18\x12\x19\x80\xe8V7\x87t\x93\x86\x9bT\x82\x04\xe3O/\xfa\xa8Qy\x0d\xc6\xab\xe9\x83\x1fu\x82\x03\x1fc\x94\xc5\xa7\xfa\xd3\x14D\x15\xb2\xe3R\x14\xf8WU\x15LO\x10\x0c\x0cD\x83\x03\xd8\x95o\xd1X\x01\x14NJ\x10OI\x90R\xa6\xe0z\x8d\xc2\xc9\x08b\xa9\x08\x02\x89\x08\x92\xd2\x10D\xeb\x1fJA\x90\xbap=\xd5MB\xfa\x01\x9c\x8fP\xf2\x01\x9c\x87\xf0\xea\xb0\xf8ro\xe7\x89%\xd3\x0e`$\xed\xf4;\x17I9\x90\x9cp\x00\x19\xec2\xe9\x06p\x17+\x9el\x00w\xd9B\xa9\x06\xe2-\xafd\xa2\x01L\x9a\x81X\xa7\x99\x99b\xc0\xbf\xe2\x82\x87\x13\x0c\x14x\xcb\x85\x16\xecF;R\xc0\xad\xad\x008\"\xa9\x00>\xa5\xc0 \x8a{d2\x01\xc4*\xf2X\x93\x82\xe44\x02\xe1\x8c\x14\xa0?\x07BI\x04\xa2\xcd\nPM\x0b\xb0\x83(\xc0\xde<@\x06\x0c\x92\x13\x07\xc0mx\xc9,D{d\xdc\xed\x86SU\xb5`\xba\x80\xbcd\x01\xd8T\x01\x88D\x01\xa8\x00a\x82S2E@B\x82\x80Pz\x80Xr\x80B\xa9\x01\n$\x06\x88\xf6\x02\xf1\x1e \x9a\x12\xa0dB\x80hy\x01Uf\x88\x01\xa4\xcaPm\x14\x90\xed\x14\x8a&\x01\x88\xa7\x00@&\x008i\x1d\x8f_\xfa\x8f]\xf8\x1f[\xf6_h\xd1\x7f\xc1\xf6\x87X\xee\x9fzo\x8eY\xea\x8fX\xe8\x1f-\x0en\x95{\xac!\x15]\xe0\xef_\xde\x8fZ\xdc\xff\x8d\xaa\x9c\xb3\xa8_\x8a$\x1e\x7f\x9e%\xfd\xa1b\x14^\xce\xef[\xcc\x9f\xb2\x88v\x9c\xb8\x1dV\xd3\x1e\x96\xca\xcc\xb3\xcf\xfc\xe9Nt\xf6W\xf3y&\x17\xe4\xc8nE-\xab\xad\x9a\xc3yg\xa5\xf3U\xe3\\\xf3\xe0\x8b\x96\xd4\xce~\xa5%\xb5\xd8\xf9+ZRKKj}G\xd2\x92Zi\xb4\xa4\xf6\xd0hI--\xa9\xf5\x19-\xa9\xa5%\xb5\xd2hI--\xa9\xa5%\xb5\xb4\xa4V\x19-\xa9\xa5%\xb5\xb4\xa4\x96\x96\xd4\xd2\x92ZZR;5\xff\xa7--\xa9\xa5%\xb5\x1e\xa3%\xb5\xb4\xa4\x96\x96\xd4\x96YR;\xd01\x96\x97\xd0\xe7'\x9ep1\x9c\xbeZ\x14\x0b\xdcEPO\xe7^\xeb\xe6\xe5|\xf2}\\H\xc2\xbb}d\xb9T\xde2\x12\x85\x0f\xa9\xf3\xd2V\x8e\xbc\x97g\x0e\xabF\x0c\xf6\xa9\x1c\xca7\x8d=Q(\xaf6\xde\xd7q\xfeW\x07\xc8\x90\xa3V\xee\xdc\xc9\x02T1\xee\xd4x\xf0\xd1.2\xb1\x83o\x1b\x7f\x00\xdd\xed\xa8m4\x11\xd8a\xd4Gl\xa1E\xc4AR\x86|\xd9<\xde\xe8U.\xbe\xa5/f\x1dT\xac\xc6\xee\xaeQ\n\xd7\xf2\x06\x1f\xde^U\xd4Wj\xdd=\xeb\x87y\xb3\x83l\xd2\xad\xdd\x8c\x8dQ\n~J\xc1\x8f\x0e&\xa5\xe07F)\xf8\x9d\x96\x9b\x82?\x1cp\x17C\xa4\xde\xc9\x08~\xe8p\xda\x81[\xcb\x16f?\x1d\xf0CsxH\xf5\xa1\xe3\xf3E\xc8\xd0\xecWB\x86b\xady4B\x86\x08\x19r\x1b!C\xd2\x08\x19:4B\x86\x08\x19\xf2\x19!C\x84\x0cI#d\x88\x90!B\x86\x08\x19RF\xc8\x10!C\x84\x0c\x112D\xc8\x10!CS\xf3\x7f\xda\x122D\xc8\x90\xc7\x08\x19\"d\x88\x90\xa12\xc8P\xb1\x14\xf4J\x1e\xc7\x82\x82H\x16`\x8a\x16x\xca\xca\xe1Y\x80A\xb4\xe0\x08L\xcb\xebP\x1c\x18B\xb5\xa04\xae\x05Qd\x0br\xb1-\xaf7\xf5\xfd\x1b\x9e\n@\xe0[\x10F\xb8 \x0b\xe3\xf2\xba\n\xe2]\x90\x8bxy\xbd\xa9ad`\xd2\xad\x1c\xea\x05(\xdc\x0b2\x90/H\xc3\xbe \x07\xfd\x82d\xfc\x0b\xc2\xdd\x08D\x90\x1cH\xc0r\xb0(\x18\xe4\xe0`\x90\x8a\x84A\xb8\xe29h\x98\xd7\x99\x05^a\x1f\x19\x1c\"\x16| \xe4\xbe\x18\x01L\x0c\xca\xa2b\x10\xc3\xc5 \x8c\x8cy\xcf\xc9E\xc9\xa0`\xdbM@\xca +\x83\xc0\x08%\x96\x85\x03L\x9e\x18\xf760\xb2\xfd~\xe5\xac\x13\xdd\xa2\x92E\xb5b\xe6\xf5\xa7f\xfa\x16m\xd3H \xdf\x1f\xdba\xab\xa27R$\x86\xd0FW\xbb\xaemW^\x91.Z\xc7Kq\xfa\xb4\x86\xe3\x96\x81\xd2\xb7\xbb\xb2\xa1g#\x10\x84B\xaa\xe1n\x7f\xeb\xcfw\xa3\x0cq%@^\x0d\x90:%\xe0'\xc3 a\x0e\xc9XQ\xcd\x122uKH\xd1.\xa3\x9eFm\x13\xa3_Bi\x0d\x13rtL(\xa9eB\x92\x9e\x19ue\xa7VH\xd44\xa1\x8c\xae e\xb5M8B\xdf\x84\x0c\x8d3\xeaP\xbcRSuN(\xaauB\xb6\xde X\xcd3\xeae\xaa\x89buO(\xad}B\x11\xfd\x13\xf25P(\xa9\x83B\x92\x16\x1au5I\xe9\x80\xd3C\xe1t\x9a(\x9cX\x17\x85\xd3i\xa3\x90\xa1\x8fB\x8aF\x1a\xf5d\xa7\x80\x00\xbcN\n\xa9Zi\xd4\x9b\xec'R\xf4R\xc8\xd3L\xa1\xb4n\n\xc9\xda)\x94\xd2O\x01\xa3\xa1B\xda\xd0\x11\xa9\xa5B\xc6(3IS\x8dz\xe3&\xc5\x04RW\x85\xc4\x12'\xea\xabA_\xd3\xd1,Rc\x85T\x9d5\xe8 \xa1\xc1Bi\x1d\x16\x12\xb5X\xc8\xd4cc\x0e\xb1\x9a,\x14\xd5e!M>\x04\xac>\x0b\xe9\x1a-`D\x89#\xb4Z@\xfa\x8fLX\x16\xd4m!;\xf8i\xfa- k\x9e\xa9\xe3\xc21Z.\xe0#^D\xd3\x854]\x17\x12\xb4]H\xd2w\x01\x7fS\xf2t^H\xd6z!\xa6\xf7BI\xcd\x17rt_8B\xfb\x85t\xfd\x17\x907)\xa6\x03\x03\xd6O\x9a\x1e\x0c\x855a\xc0\x163\xf2\xc4\xa6\xeb\xc3Aw\xb7\xf78\x8d\x182u\xe2\xa0C\x9d\xea#\xaa\x15C\xa6^\x1ct\xc8\xcd\xdc^P3\x86\x0c\xdd8\xe8lL\x05\x82\x98VA\xea\xc7\x10\xd7\x90\xa1\xac\x8e\x0c\x18-\x19\x12\xf5\xe4\xc8\xfd\xb7\xd2\x89\x045e\xc8\xd0\x95\x83\xce>^\xbd=Cj\xcb\x90\xa9/C\xba\xc6\x0c\xb9:3di\xcd\x10\xef\x9a\x00\xa1\xdbA\x82v\x97\xa2;C\xae\xf6\x0c9\xfa3\xc4\x83QT\x87\x06\xac\x16\x0d\xa5\xf5hH\xd0\xa4!K\x97\x8ev\xd2Qm\x1a2\xf5i8R\xa3\x86\xc2\xed=Q\xab\x86d\xbd\x1a\"\xa3\xa9\xb8\xa6+\xecr\x7f\xfb?\xd9\xfd|\xb7\xa4\xdd\xfevS/dV\x06ke\xb0\x91\x9bc\xedK\x8a\xe1\xe2\x9e\xa9v\xc3#\x03\\1\xe6Q#\x80AQ\xf6\x1e\xdf\xd7\xeb\xa6\xe2\xfb\x0e\xb1\xd0\x80$\xdd\x80\x91\xa4K\x92\xee\xc4H\xd2\x8d:$I\x17H\xd2\x9d\x18I\xba$\xe9:\x8d$]e$\xe9\x92\xa4K\x92.I\xba\x11\x87$\xe9\"\xf5\x04\x92tI\xd2%I\x97$]\x92t\xa5\x91\xa4;1\x92tI\xd2\xb5\x8c$]\xb7\x91\xa4\x1b1\xac\xc4E\x92\xaem$\xe9\x86\x0e$I\xf7\x9bI\xba\x1f\x8cF:Wu\xef\xd8\xd7\xe7\xacY\xb4\xa2\xb9\x0fBjl*G\x9cx\xb9\xa9\xea\xe6\x9a}\xe5\xea\xf5\xe3=~'\x8e\xbb\xe1\xec+\x8f\xcb\xb3\xd1\xc9.\\e\xc7\xa2\x05*\xab^\x9a\xa2\xcar\x1e;\xe8P&\x00\x97\x93(z\x06?\xaa\xf1\x0c\xf1v\x1e%WA\xdf,\xdafU\xaf\xf3\x97_\xcbD\xd9\xaf\xa5\x93\xe9\xcbQ9\xd6Mr\xbe\x04\xdb\xeb.\xb44\x1b\xa1\x9ec\x94s\x99\xda\xfd\xb8V\x80\x9d\x0d\xf4\x06\xc7^\x83\xaf\x96\xde\xcb\xc1\x89\xec\xfb\xbc\xde\xe4\xb8\xb3n>\x89\x97\xc0\xb6Zz\xe6+\x17\x1d\x93!\xbf\xe1\xb5\xbf\x9e\x88:\x9a\xe9\xdce\xc5\xd9s\xe1+\xbf\x89\xe8\x12]\xd7\xdb\x83'_8\x16\xdd\xba\x062L\x0d\xef\x02yjo\x19kT-\x9do\x9fpy\x86\xbc\xee\x8e\xfb1\x14M\xbc\xb3X-\xa7\xf8\xab\x06\xea\x86\xb3\xee9xR\x07/\xba\xb6\xef\x9f\xebv\xeb<\xc2\x91\x9f|\xdcW\xc0\x91\xb8]\x95\xffr\xdcg\xc1\xce\x85nm\xbf`r\xca\x1fz\x08='\xe1'\xc4l\x1f\xe3n7\xd1V\x13\x95\x00B[\xdc\x8c6lb\xa3w\x12\x19\xf6\xb3\x81]\xd5\xf7JvT\xbb\xde\xfcc\xcfz~\xa6~\xf78\x93\xbb\x1fH7\xa1\x0do.\xb85\xb2\x91{\x8b\xf8^>\xa2Y0)\x826-l\xdb\xcel\xbc\xe1T[\xe4\xde\x17G\x06s\xb6\xb9\x88m\xb1go\xd8z\xc3\xb7\x17\x8b%\xe2\xf9\xeak\x07\xda\xde\xc5\xc4s\xf8\x97Jny\xf1\x0cj\xde\x1b\x19\xba\x87}\xa3\x1a\xf1R)g_jG\xb3\x8dw\xaa\xf6NG\xaaV\x93\xfd\xd0\xea\x06\xd6W\x97\xaf\x87\x07\xc3\x0c\xe3z\xf8\"\xee\x99\xeb\xf6\xb8\xdf\xa0\x8b\xb6S>\xe4\xe8\xb5S\x95\x1f\xc6\xe1b\xc0-E8;2\xcep\x983>\xb4\xdb\xb1\xdc\xc1q_\xc7v\xb2_\x83?V\xddp\x93b_f\x93\xb0\xc8\xf6\xed\xfb&\x9b\x0e\xe1\xc2\x0f\xa3\xdc\xe7c\xdc\x06c\x12w\xb5\xdb\x8c\xfa\x7f\xf9Y\xb2j]Y\xd3\xa4\x8b\x17\xd6&\x1f\xe2\xee\xa8\xe9\x98\xf1a\xd1\x93H\xf6C2\xddG\xa3\x81}\xa3\x90\x19\xb6T\xc8\xc2)\xb7\xd3\x90\x17p\xf4\xca\xfe\xa7U\x8c\xe4|'\x88w\xc7\xda1\x9dd\x9e\xed\xba\xe1?\xfd~\xf6\xabn5IeX2^\xd5\x9bG\xb2\x0d\x08\x8f`\x89\xd1\x9e\x0f\xd3\x17(K\xc5\x0f\x8d\xfe\xe9u\xc8\x91\xd8!\x1a7\xc4\xec~\x11\xc1\x0cS\xf1B\x89\x0fz\xbda\xb1B\xd7,i2N\x88\xc7\x08'\x98\xa0\xd7\x1f\x1e\x1f<\x12\x1bL\xc3\x0552\xe4/v\n&\x98\x8a\x07\x06w\xb5H\xc1\x02\x93p@\x0b\xf7\xf3;\xc4a\x80(\xfc\x0f\xbb\x8b\x05\x02\xfb+\x86\xfb\x1d\x87\xf9e\xe0}E\xb0><\xce7\xc5\xf5\x02\xfd\x93\xe3\xddo\xdb \xf0\xbdSa{'\xc0\xf5R0=4\x9e7\xc1\xef\x82}x\x1c\xcbK\xc2\xf1 \xb8\x1b\x05\x16\xc3sLg\x86z\xe3T\xec\xce`u\xfe\x97`\x14\xb7;\x1a\xb3\x0b\xe2u\x88!P\xf4[\x1a?JJ\xc2\xe7d\x14%\x1e\xe7\xef\xb0\xa3\xd8\x1c\xa6d\x89\x98\\hg <\x1e\x97\x84\xc5\xc5\xd0\xb7\x1c\xe4McmN\x7fQ\xd4-\x07q\x83\xc0\xc6!1\xb4\xad\x0c\xd2\x86\xa4\xa9\xa2\x08[\x02\xba\x16\xe2%rP\xb5\x90?\x8f\x9cW\x08IK\x0b\x1e\x1eA\xc3D(\x019\xcbB\xcd\"\x91;\x1a-C\"e\x18\x94\x0c\x87\x90E\x82\x9a\x8e\x8c\xe1Q1/\"V\x04\x0dKB\xc2rP\xb0\x04\x04,\xc8B\x05\x8a\x15<\x0f\x8fx\x95B\xbb\"\xd5p\xfe\x96\x8ep\xf9vm\x88\xa2[9\xc8\x96\xc1\xb2\x9c\x0eC\xa8V\x0e\xa2\xe5\xbdP\x18\xcdJE\xb2,\xec\xca\xe9\xcf\xffi\x8b@\xb0\x02\xe8U:r\x15\xc6\xaaRp\xaa)2\xe5t\xe7\xc3\xa8R\xf1)\xf0\xee\xb4\x10\xc7\xa6Rq\xa9\x04L*\x19\x8fJ\xc3\xa2\x02\x04P\xa8TX\x1c\x04\x8b?%cOI\xb8\x93\xa7\x929x\x93\x86\x80\x02\xcf\x90\xeb\x97\x1c\x9cI#K\xee\xb6\x1d\xc2\x98\xd2\xf1%o\x07\x16\xc4\x96\x02\xb8R6\x92T\xa2\xcd% Hx\xf4\xc8\xbc\x86wUWm\x19g\xddd'z r\xc8M\xc7-\x07\xa1/\xcf\xa7f\xce\xf2\x07\xb5\xc9\xf8\x8cE\xd0{\x15\x98<\x11\xba\x8b\x14\xfe\xc5\xdd:d3zVu\x8b\xd9$\xc7@0\xac\xa6Sp9\xfb\xf0\xcf\xa6\x07L\x85\x15\xb73[z\x8f\xac\xb6\xd4\xe2\xc4\x03<\xed\x89\xedy}\x85\xa3\x98\n\x9bJ\xda\xfe\x0e&\x91\x87\n\x8b\xb0.\xd5[\xbc^\xa9\xc8\xd5=T\x9b\xbe\x85\x9e\xf1\x13\xc5\x83W\xdd\x9a\xf1\xf4X\\\xcb\xf3\xa6\"\x0d\xb7\xb7\x89\xb0\xf6\x98W\xb1\x98\x17x\xbc\xdd\xd3x\x1c\x86B\x05U\x86\xf9\xf4\x01\x19\x19\x91\xb3O\xec\xde\x17\x98\x99\xe0\xabq\x8bJ\x0f*:\xc6\xf7\x9d\x82\xd2&\xfa\xf2\xd9\xc0f\xc89\xd5\xf5l\xf2Q\xd6@\xbc\x08c\xbc\xc5{\x11\x98\xb6\x91\xad\xae]\xadz\xc6\xa1\xed`Z\\;uD\xf9hyf\xd8\x1cAT\xe5C60]\x19\x19\xcaf\xbfe]\xbd0\x7f\x93\xef\x9fE\xd5\x88\xfa\xa8\xe9\xc5;\xd6\x98\xc0\xef\x9baFw\xf6!w!\xbdmDK\x1cB\xa8\xe6@\xf7\xbd\x08\xf5'\x96\x18\xcf\xa9\xfb\x13\x07wF\xaf8\xc2\xbb\xa9\xb756\xba\xf2X\x83 \xf8\xa0\x165\xdbo\xb7`\x0d,\xec73\n@\xcd\xed\xd9\x7f\xbaX\xc1\x86\xad\xb8\x81\x804\x15d\xbe\x96\xa4P\xa1\x1e\x10u\x11\x11\xe7\xdb{`\xd5\xe2\x0e\xaa\xdd\xee\x01\xa3h\xa39\xe3\xf9\xa1XZg\x88\x88\xca\x16\xda\x02\xef\xf6Ln\xf4S7\xcbzQq6H\x96:\x82\xf2@\xdd\x90lwu\xb3\xd8\xec\x97\xb37C\xa5\xae2h\xc6\xb3;& \x04K\xca\x10\x83\x19\x8bp\x9bu.\x1f/\xfa\xd9\xdd\x9aUA\xf6\xb6\x1d\xeb5+\"\x1f\xaf\xf1y\x14\x8f\xdc\x99~\x9a\xeau\xd3v3!\xc8<\x8d\xd3K\xa8\xc8\x1c{co\xdbv\xc3\xac\x1c*\x8e\x1b\xd8\xb1\xcf\xac\xeb\xb1\xeft}\xf4\xfc\xc6\xd5\x16\xda\xd51\xf7\x930\xf1#\xae\xc1\x14\xe7$\xf9\xe2\xf9L\xf0\x87\xbaY\x881G+\x86F\xcf\xfb\xe5'\xf8\xf1\xec\x0f?\x15\x8d\x06\xaf\xd6\x93a\xdd\xbfjo/\x96r<\xf6B\x7f\xd0\xf4/>\xff\xf4B\xbeG\x9f\x8b7n\xffB\xe5\xe4Rg\xae\xd9\x00\x10\xf5\xfb\xed\xb6\xea\xee'\x11\x1b\x10\xa4\xf7\xf2\x1cY\xe0\x9a\xf5\x06[\xd2\xe9\xbdD\x8bT/jy\x81g.\x89[\x0d\x87\xc4C:\xfcI8\xa9FY\xc8z\xd5\x8b\xef\x97\xf9hB\x9f\xd6\xee\x98\x1a)_,_\xce\x8b\xa7\x0f1\x90\x93\x15\x9c\xef\x7f\xff\xe3\x8f\xdf\xfbI)\xe8\xf7\x8b\x05\xeb\xfb\xd5~sJD\xca\x0e\xbcm\xfc\x01X#1\xc6\xcc\x16\xd9\xc6\x91t\xb6\x0b5\xf8\xcc<\x1d\x89*\xcbV\xf1F\x11^3lY\xff\xb1]\x89\x16X7\xeb\x0d\x0b\x10\xf4r\x98.o\xde\xe1\xadS%\xd1\xfb\xc5\xb1~\xfa1 \x1f\x07}\xdbg\xa7\x12\xc9L$3:\x98D2\x1b#\x92\xd9iEH\xe6\x83\x80OIf\xf5\x8e\x1d\xae\xe2Z\x06\xa2\x87K\xb7\xf7\x8e):\x1d\xc3y\x94$A%?|[1\x18\xb1:N\xddo\x12\xf0L\xc03\x01\xcf\xda\x08x&\xe0y4\x02\x9e9\x01\xcfn#\xe0\xd9\x18\x01\xcf\x04<\x13\xf0\x8c\x1c%\x11\xf0<\x18\x01\xcf\xb6\x11\xf0L\xc0\xb3\xc3\x08xv\x1dC\xc03\x01\xcf\x04<\x13\xf0<5\xff\xa7-\x01\xcf\x04<{\x8c\x80g\x02\x9e x.\x03<\xa7\xf3\xbf\xef\xa7\xfc\xafV\x0dZ\x0d\xb3\xd8*\x15\xb4\xab35Y\xc8\xc7\x8f\xdei\xd5\xaa\xcdlfE\xd1\x01=o;9\x81\xa0\x9a\x97r-'\xbbz\xce\xaa\xe5\xb1\x00U\x11\xf6w\x8c\xc3\xb9\x83\xf1\xd5\xd1\x90\xf0\xae\x145d]\xe4\x1b\xda\x00\x9b3i\xf9`ry\x8a\xf9\x8e\xb3\x06\x95z\xcaO\x14\x04\xe2}1\xd1\"\xdeW\xd9\x89\x83\x1b'U\x89\xf7-\x11E\xe2}\x89\xf7\xfd\xf5\xf3\xbe\xfaA|n(\xda\xe7\x95!\x14\xfd\xdc\xaf\xf5\xa2{\xa3N7o\xfb\x11o4\x00\xb0\xfa$T\x0f\xfb\xe0\xda\xdeYx6j]\xd7\x9fY\xa3\x166\x89\xb1\xfa\xd3Q\x13\xfe\xc1z\xf9\xeb\xc3'\x8c\xaf\xaf(\xfa\xd8G\x0b\xfb\xca\xd1\xdd\xe3\xc0l\x8eb}\x07\xc4P\xae\xfc\xb3A\xd4%\xeb\xb9\xe9\x81t\xdb\xb3\x87\x85\x8e\xf4\xbd\xca\xf41\xe1\x12\x1d\x9d\xad\x9a#\xf6xFT\x1e\x90\x1a\x95\xb1T\xce(\xe8\xcc-6\x05f_K\xf3F\x10g\x8e \x83;\nW u\x0f\xe7\"\xfc\x11d2HA\x87\xc9\xfb6\x1f\xc9\"A2\x8f\x14t\x95\xbbWsQ. \x12\xd9$H\xe5\x93\xc2-{xOa\x19%(\xcd)\x01\x8eU\x82\x92\xbc\x12\x1c\xcd,A\x1e\xb7\x04\xa5\xd8%\xc8\xe2\x97\xc2\x8f\x03~\xef\xe5\x13pLpB\x96 N\xc33A\"\xd3\x04y\\S\xac\x0b\xc6\xb1MP\x96o\x82\x04\xc6 \xd29'\xc8`\x9d\x10]&v?\xe5\xa3\x99'\x88qO\x80\x1f\x9e!\xf8'H\x1c\xc5%sPAo){&cKY\x90\x89\x82$.\nJ\xb3Q\x90\xc9G\x85\xdb\x15r\xff\xe3LN\xca\xeb\x8f#\xf7=.\xc3K\x01\x1e\xfb\x01\x0c7\x05i\xec\x14\xc4\xe0\x84L\x86\n\x10~\x03\xc2h!\x9e\n\xb2\x82\x8b\xe7\xaa\x00Q\xcb\x0c\xbe\nr\x19+\xc0E\xf5h\xd6\n\xf0\xbc\x15 \x99+@sW\x80\x0bz:\x7f\x05I\x0c\x16\xc4\xf6&.\xc2bA*\x8f\x05\x99L\x16\xa4qY\x80\xb8 \xb1=\x88\xa3\xe7\xe39-(\xc8j\x01\xa6h\x81\xa7\xac\x1c\xb7\x05\x18v\x0b\x8e\xe0\xb7\xbc\x0e9b\x7f\xe1\xa2\x1c\x17DY.\xc8\xe5\xb9\xbc\xde0\xfb #\xb8.\x88\xef#\x9c\xcewy]E\xf7\x0f\xceb\xbf\xbc\xde\xa2\xfb\x06\x97c\xc0\x00\xc5\x81A\x06\x0b\x06i<\x18\xe40a\x90\xcc\x85A|;\xdcX)\xb1\xbc\x0e\x96\x11\x83\x1cN\x0cRY1\x08W<\x87\x19\xf3:C\xed\xff\x9b\xc3\x8e\x05\x1f\x08\xcc\xbe\xbf\x05\x192\x88qd\x10f\xc9\xbc\xe7\xe42fP\xb0\xed&\xb0f\x90\xc4\x9bA`\x84\x12K\xc9\x01&]\x8c\x7fk\xd3!\xf9\x91\xd2F\xa7)\x90\x0eM\xcd\xf4-\xda\xa6\x91\x82\xbe?\xb6\xb2G\xe6c\xcaN\xfdx;\x8f\xdfum\xbb\xf2\x8at\xd1:^\x8a\xd3\xa75T\xa8\xdc]\xbdS\xbe\xdd\x95\x0d=\x1b\x81 \x14R\x0dw\xfb[\x7f\xf2\x1be\x88+\x01\xf2j\x80\xd4)\x01?\x19\x06 sH\xc6\x8aj\x96\x90\xa9[B\x8av\x19\xf54j\x9b\x18\xfd\x12Jk\x98\x90\xa3cBI-\x13\x92\xf4\xcc\xa8+;\xe7B\xa2\xa6 etM(\xabm\xc2\x11\xfa&dh\x9cQ\x87\xe2\x95\x9a\xaasBQ\xad\x13\xb2\xf5N\xc0j\x9eQ/SM\x14\xab{Bi\xed\x13\x8a\xe8\x9f\x90\xaf\x81BI\x1d\x14\x92\xb4\xd0\xa8\xabI\xae\x07\x9c\x1e\n\xa7\xd3D\xe1\xc4\xba(\x9cN\x1b\x85\x0c}\x14R4\xd2\xa8';7\x04\xe0uRH\xd5J\xa3\xded?\x91\xa2\x97B\x9ef\n\xa5uSH\xd6N\xa1\x94~\n\x18\x0d\x15\xd2\x86\x8eH-\x152F\x99I\x9aj\xd4\x1b7\xb9'\x90\xba*$\x968Q_\x0d\xfa\x9a\x8ef\x91\x1a+\xa4\xea\xacAO\x08\x0d\x16J\xeb\xb0\x90\xa8\xc5B\xa6\x1e\x1bs\x88\xd5d\xa1\xa8.\x0bi\xf2!`\xf5YH\xd7h\x01#J\x1c\xa1\xd5\x02\xd2\x7fd\xc2\xb2\xa0n\x0b\xd9\xc1O\xd3o\x01Y\xf3L\x1d\x17\x8e\xd1r\x01\x1f\xf1\"\x9a.\xa4\xe9\xba\x90\xa0\xedB\x92\xbe\x0b\xf8\x9b\x92\xa7\xf3B\xb2\xd6\x0b1\xbd\x17Jj\xbe\x90\xa3\xfb\xc2\x11\xda/\xa4\xeb\xbf\x80\xbcI1\x1d\x18\xb0~\xd2\xf4`(\xac \x03\xb6\x98\x91'6]\x1f\x0e\xba\xbb\xbd\xc7i\xc4\x90\xa9\x13\x07\x1d\xea\x1c Q\xad\x182\xf5\xe2\xa0Cn\xe6\xf6\x82\x9a1d\xe8\xc6Agc\x8e\x10\xc4\xb4\nR?\x86\xb8\x86\x0ceud\xc0h\xc9\x90\xa8'G\xee\xbf\x95g$\xa8)C\x86\xae\x1ct\xf6\xf1\xea\xed\x19R[\x86L}\x19\xd25f\xc8\xd5\x99!Kk\x86x\xd7\x04\x08\xdd\x0e\x12\xb4\xbb\x14\xdd\x19r\xb5g\xc8\xd1\x9f!\x1e\x8c\xa2:4`\xb5h(\xadGC\x82&\x0dY\xbat\xb4\x93\x8ej\xd3\x90\xa9O\xc3\x91\x1a5\x14n\xef\x89Z5$\xeb\xd5\x10\x19M\xc55]a\x97\xfb\xdb\xff\xc9\xee\xe7[@\xee\xf6\xb7\x9bz!s4X\x8b\x80\x8d\xdc\x1ck_R\x0c\x17\xf7L\xb5\x1b\x1e\x19\xe0\x8a1\x8f\x1a\x01\x0c\x8a\xb2\xf7\xf8\xbe^7\x15\xdfw\x88\x85\x06$\xe9\x06\x8c$]\x92t'F\x92n\xd4!I\xba@\x92\xee\xc4H\xd2%I\xd7i$\xe9*#I\x97$]\x92tI\xd2\x8d8$I\x17\xa9'\x90\xa4K\x92.I\xba$\xe9\x92\xa4+\x8d$\xdd\x89\x91\xa4K\x92\xaee$\xe9\xba\x8d$\xdd\x88a%.\x92tm#I7t I\xba\xdfL\xd2\xfd`4\xd2\xb9\xaa{\xc7\xbe>g\xcd\xa2\x15\xcd}\x10RcS9\xe2\xc4\xcbMU7\xd7\xec+W\xaf\x1f\xef\xf1;q\xdc\x0dg_y\\\x9e\x8dNv\xe1*;\x16-PY\xf5\xd2\x14U\x96\xf3\xd8A\x872\x1d\xb8\x9cD\xd13\xf8Q\x8dg\x88\xb7\xf3(\xb5M\xc9\xa2mV\xf5:\x7f\xf9\xb5\xdc\xb0\xe4\xb5t2}9*\xc7\xbaI\xce\x97`{\xdd\x85\x96f#\xd4s\x8cr.\x13\xbd\x1f\xd7\n\xb0\xb3\x81\xde\xe0\xd8k\xf0\xd5\xd2{98\x91}\x9f\xd7\x9b\x1cw\xd6\xcd'\xf1\x12\xd8VK\xcf|\xe5\xa2c2\xe47\xbc\xf6\xd7\x13QG3\x9d\xbb\xac8{.|\xe57\x11]\xa2\xebz{\xf0\xe4\x0b\xc7\xa2[\xd7@\x86\xa9\xe1] O\xed-c\x8d\xaa\xa5\xf3\xed\x13.\x8f\xbc#o\xc5%\x0e\xef\xc7P4\xf1\xceb\xb5\x9c\xe2\xaf\x1a\xa8\x1b\xce\xba\xe7\xe0I\x1d\xbc\xe8\xda\xbe\x7f\xae\xdb\xad\xf3\x08g~\xf2P)\xdf\xd6\xbd\x14\x81\x0f\xf2\xde?S\xfbZ\xb4\x8d\x15F\xf5\xf9\xe6\x1eq[\x84\x8c\xb7|\x8e\xd2\x8d{ \xf8\xd2\xca{\x9e\xc1\xf0\xd3g6\xaaq\xb7\xc9h\x8b\x8c\xca\x0b\xa1\xcdtF\x1b\xb6\xcb\xd1{\x96\x0c;\xe7\xc0\xae\xea{%i\xaa\xfdu\xfe\xb1g=?S\xbf{\x9c\xc9}\x16\xa4\x9b\xd0\xd6:\x17\xdc\x1a5\xc9]L|/6\xd1\xe4\x98\x14X\x9b\x16\xb6mg\xb6\xf8p*9r\x97\x8d#\x839\xdb\xc6\xc4\xb6\xd8s=l\xf2\xe1\xdb\xf5\xc5\x12\x08}\xf5\xb5\x03m\xef\x97\xe29\xfcK%7\xd7x\x065\xef\x8d\xc4\xdd\xc3\xbeQ\x9b\x05,\x95*\xf7\xa5\xee\x0f\xdbG\xbc\xc3\xb6\xf7TR\xb5\x9al\xc2V7\xb0\xbe\xba|=l\xe4`\x86\x88=|\x11\xf7\xccu{\xdco\xe7E\xdb)\x1frd\xdc\xa9\xca\x0fc|1\x98\x97\x02\x9f\x1d\x19g8\xcc\x19\x1f\xda\xedX\xee\xe0\x98\xb2c;\xd9g\xc2\x1f\xabn\xb8I\xb1\xaf\xbeIXd\xfb\xf6}\xefM\x87\x87\xba\xf5\x1c<\x86r/\x11\xdfV\x1b\x93\xf8\xab\xfdm\xd4\xff\xcbO\x9f\xc3\xe4\xed\xd2\xd9\x0b\xef\x1e\"\xe2~\xa9\xc9\x9f\xe1<\xdd\xa5\xdaO\xcdt\xd3\x8e\x06\xf6\x8d\xe2s\xd8R\xf1\x11\xa7\xdc\xbbC^\xc0\xd7\xc9:\x1f_1l\xf4\x9d ^Tk\xc7\xdc\x95y\xd8\xeb\x86\xff\xf4\xfb\xd9\xaf\xba\x19%\x95a\xc9xUo\x1e\xc9\x9e#<\xc2@F\xbbBL\xe7\xa0,\x95u4b\xab\xd7!G2\x8eh\xb6\x11\xb3\xd5F\x84iLe\x19%\xab\xe8\xf5\x86e\x18]S\xb2\xc9\xec\"\x9eY\x9c0\x89^\x7fxV\xf1HF1\x8dM\xd4|\x92\xbf\xd8)Lb*\x8b\x18\xdcB#\x85ALb\x0f-\xb6\xd0\xef\x10\xc7\x1c\xa2XC\xec\x96\x19\x08\xc6\xb0\x18[x\x1cS\x98\xc1\x12\x16a\x08\xf1\xec\xe0\x94\x0d\x0c\xf4O\x9e\x8f\x1dc'`\x05O\xc5\x08\x9e\x80\x0dLa\x02\xd1,\xe0\x84\xf5\x0b\xf6\xe1q\x060\x89\xfd\x83\xe0\xd6\x17X\xe6\xcf1w\x1a\xea\x8dS\x19?\xc3\xf0\xf9_\x82Q\xb6\xefh\xa6/\xc8\xf2!\x86@\xd1\x8fk\xfc()\x89\xd5\x93Q\x94,\x9e\xbf\xc3\x8e2z\x98\x92%2y\xa1m,\xf0,^\x12\x83\x17\xe3\xecr\xf8:\xcd\xd09\xfdE\xb9\xba\x1c\x9e\x0e\x02\xbb\x94\xc48\xba2\xfc\x1c\x12\xdd\x8a\xf2r \x9c\\\x08\xce\xc8\xe1\xe2B\xfe<\xdaa!\xfe--xx\xde\x0d\x13\xa1\x04\xbe-\x8bk\x8bD\xeeh\x8e\x0d\xc9\xafa\xb85\x1c\xaf\x16 j:\x9f\x86\xe7\xd2\xbc\x8f\xe2\x91;\xd3OS\xbdn\xdan&)\x98\xa7qz \x15\x99co\xecm\xdbn\x98\x95\xfa\xc3q\x03;\xf6\x99u\xbd\xf7\x0d3\xbby\xfa\xe8\xf9\x8d\xab-j\xa8c\xee'a\xe2G\\\x83)\x84Fb\xb1\xf39\xc5\x0fu\xb3\x10o\xc0\xb6\xdf\xb6\xfd\xf3~\xf9 ~<\xfb\xc3OE\xa3\xc1\xab\xf5d\x80\xf0\xaf\xda\xdb\x8b\xa5\xdc\xf2\xe8\x85\x1e\x1a\xf7/>\xff\xf4b\xc9\xab\xf5s\xdeUM\xbfb\xdds\x0d\xfd\xe8\xb3\xd7l\xc0Q\xfa\xfdv[u\xf7\x93\xa8]4\x8bv[7\xeb7\xd7\xd5\xfaZ{\xd0`P/kP\xb3^I\xbew\x0c\xc4A`\xae\xd3\x1b\xbah\x9c\xff\x15\xcf\xc4\x18(\xa9\x90I\x9ar[-E\xd4\xbfT\x9d\x1eH\xee{\xd6\x8d\x9b8\xad\xeb\xcfl\xbe9T\xbbcj\xf4u\xb1|\x19,\xa4>\xdeP4V\xcc\xbe\xff\xfd\x8f?~\xefGq\xa0\xdf/\x16\xac\xefW\xfb\xcd)\x19\x9c\xe9\xdd\xb0\x8d?\x00\xce\"Z\xca\x0dooxW\xb9@\x1fe\x08A'F\xef\x81l+\xd7\xed\xb5\xb8\xce\xf4KY\xbd(t\xd7\xa7Z\x94\xe8J\x1d}\xa7m\xb7lhx\x1d[\xc2\xaak\x03\xbc\x84\xea\x96\x17\xac\xfe<\xaa@\x06\x85\xd3\x90C\xcf\x9a\xa5G\x80Q?\x9d48\x1f\xe4%\xe6\xb0\xb2\x19\x03\x1b\xddj\xa1\xde\x12*<\xac\xf137V\xfd\x9c\xc7\x98X\x9c\xb4NW&\xe0\xb3Zyo\xc4]\xc5\x9f\xf9\xd9M\x18\xd8\x96gj\xb1\xa8\xf78\xd1}Lo\xab\xf8g\xdd\xc9\xc6\xe5z\x84\x82Uq\xf41c\x8d\xa0\x9a\xf6\x81\xc1\xa8\xdf2\xfeE\xf4~\xfc\x8bD_\xbaC\x9d,T\x92\xa1\x13\x1e/\xce%\xbe\xae\xe0mg\x97|\xd8#\x8ff\xf7\xc1\xaeX\x9any\xf6\x13\xc1\xda\x04k\xc7\x1e\x19\x82\xb5 \xd6\x9e\xda\xa1\xe4\xa4[\xd0\xe5\xf8\x19\xa3n\x94N\xbb:\xfe\xd9\x04u\xe2!|\xcb\xe4\xd084FL\x05\xbf\x1d\xb7K\xb1\xe0\xc1\xd1\xf2\xc8\x83\x8fO(\x01\xe1\xb3_ \x08\x8f\xb5\xe6\xd1\x08\x08' \xdcm\x04\x84K# \xfc\xd0\x08\x08' \xdcg\x04\x84\x13\x10.\x8d\x80p\x02\xc2 \x08' \\\x19\x01\xe1\x04\x84\x13\x10N@8\x01\xe1\x04\x84O\xcd\xffiK@8\x01\xe1\x1e# \x9c\x80p\x02\xc2\xcb\x00\xe1\x06\x9e\xb0\x9c\x84\xbe>\x9f\xb6\x03p\xed\xc31f\x90\x89$\xb1x\xebH\x0d8\xe8\xd9\xd3\xd0\xd6Z\x02\x1bX\x03B\xb6\xd1\x88\xf1\xa9\xa9bB\xb6O\x18\xdc8lL\xc8v\x89(\x12\xb2M\xc8\xf6\xaf\x1f\xd9\x96/\xfd\x00\xa2})\x7f\x1f\x08l \xc9\xe8\xd3a\xdb.\xf7\x1b\xa6\xc6\x0dN^\xfaR\x1fyi\x1f\xf1h i;\x14\xb6y]A\x14\xd3h\xea\xc5\xa7\xc6\x9b\x879\xe8\x18\xa2\xceAJ,\xcd\xcd\x865k~\xe7\x9f\xe0B\xc8 (!d[}\xfdF\xd7\x8aa~\xeftXu\xe3\x9c\x12\\f\x10\x0b\x1d\xdb\xc8)\xfa\xe0V\xb7Cc6\xb7\xca%\x1a,y\xe5I\x1d^\xe0\x16vl}\xc3\xbe\x1e\x15\xd2_u+xs]\xad\xd17Z\xdfNy\x92\xebN\xde\xd6\xed\xc9n\xe47\x8f\x8c\xf7\xf9\xf8c\xdd\xa6F\xcc\xe3\xe9\xb6n\xd7]\xb5\xbbs\xcdo\xb6]\xb5\xd8\x9c\xaekSo\x80\x9bzY(\x9a\x01\xac\x18\x101\x05\xa9\x90\x8b\"]\xbc\x99\x7f\xcb^\xbc1\xe31\x15\x13]v5Z\x08\xf8[T\x9b\x8d\xba\x0b\x9fYW\xaf\x1c_\xb9S[V\xdcG\xbaT\xfd\xa7\x1b9x{<\xd1z\xd5\x7fz-\xc7\xaa\xb3h\x8d\xa3U\x15\xad~\xf8\xee\x17\xb5\x088\x9c\xc4)\x14\x8c\xad\xdc\xf0\xe1Q\x05\xe3/u\xe3\x0c\xc6\xb6n\xea\xed~;\x8e\xea\x87\x98\xdc\x05X\xc6\xe1C~\xd1nw\x1b\xc6\xa3\x9bd\xc8\xb8i\x1a\xc9\x1aNy\xb1\xb2]\xc7vU\xc7n\xd6U`\x87\x89o\x1d\xc3KU\xa8?U\xfd\xc1d\xd2\xd6\x84o]\x99\xcf\xd5}\x88\xa6\x02X\xee;3\xad\xa2*+c\x13\x8aa\xcf\xab5s>\xe8\x9e\x93\xd8W\xb6\xd8\xf3G\x16\xc4sU\xa8\xe2AT\x95U\xaaG(\x8a\xd8\xe0\xad\x18\xbbQ%\x8a\xc5\xce\xcd]\x1b\xf3\xf2\xd7\xc6\xa2\xaf*e\xf1\x17\x96\xb2%k\xdam\xf8\x10\xe4M\x17\x16\x8b\x802\xa4;\x0c/d\xecu[\x8fK#*\xe0\xed'\xa67o\xa9T\x15\xcd\x94B\xd5,\xa1\n\xef\xe8\xa3*\x11\xdbW\xf8\xdd\xfb\xeb\xf3\x97R\x91\xd3\x0dQI[\xb5\x84\x96.\x1a\xae_\x11\x03(\x16\xde\xd4\xd8R\x05tn\xfc\xe0\xe1\xc3nL\xfd\xf0\xad\x0d\xb7\xf7\xb0n\xd7\xad\x9cv\xf7\xab\xc8\x98g\xeeg\xc6^m]\xbd\xff\xf8\xc8\xad\x18\x1b\x08\xca\xea>\xb6K\xd2\xb0G\x92\xeebb\xdd\x7f\xfc\x81\xf3md`\xec\xbd\xf4\x80\x1eU\x8eO\xb9\xc7\x9f\x9c\x033\xba\xd0\xbe\x9f\x8f\x82T\x06\x9a\xfe\xae\xdeI-\x16\x16\xac\xe1]p\x13\xefj\xc4m\x87\x15\xab\xb7\xf7P\xc1\x1b9\xe9\x11\x18\xe7V\xbb\xdd\xcd\xa6n>\x05\x16Z\x1c9\x94\x95@`\xcd\xefo\x96Z\xb9\x89ui\x91G\x19\xd3\xe6\xf4v\x11\xc3\xb5\xc1\\\x1bn%\xca+Q@+f\xce\xed{Fc_wu\xe7!\xeab\xc5y\xb5\xdb\xbd\x15\xf1\x9d\xb4\x9eH\xe3\xa9v;\x8f7y\xab\x0e~\x1b\xd6u\xc9KL\x14p\xeb\"+\xcd\xaf\xce\xa6\xb0&\xde\x10k\xbc\xd4U\xa2\xab\xb9\xe4_\xd5\x82-]\xae\xab\xcb\xd73\x7f\xb4P\x8b\x16jE\x9fx\xec\x8b\x9b\x16j\xd1B-\xb7\xd1B-i\xb4P\xeb\xd0h\xa1\x16-\xd4\xf2\x19-\xd4\xa2\x85Z\xd2h\xa1\x16-\xd4\xa2\x85Z\xb4PK\x19-\xd4\xa2\x85Z\xb4P\x8b\x16j\xd1B-Z\xa855\xff\xa7--\xd4\xa2\x85Z\x1e\xa3\x85Z\xb4P\x8b\x16j\xe1\x17j%\xf1\xdd\xe6\xdf\xbf\xec{\xd6\xfdS\x9d\x16\xc9\xc5\xad\xb1m\x17\xf4\xad\xd4\xd8\xe1\xa3_\xae\xdaRi\xb3\xc7T\xb7`M\xc0\xeaU^\xd6`L7x\xe5{\xa9<,[\xa6\xe6V\xe4\x94Xe.\xf6L\xf7\xe3\x1a\xb6\x1f\xf4\xb5i\x1a\xdeAQ\x80f\xbf\xd9\x98sM/\xea\xe2\xd1\xf5O\x8f\x17DW\xc5\xf4\xc9WY$zX\x85\x8aN\xc0`f0\x8a\xebO8\xf5)G{\nkLY\n\x93\xbc\x84\xc7aT_*\xa0.ejK\xde\x19y\x9c\xb2t\x94\xae\x94\xa5*A\xb5\xd9\xf8\xa2\x88\xd3\x94r\x14\xa5\xd0\x87VH\xa99N\xab\xc9Pk\x8a\xe85\xc5\x15\x9b\xa8fs\x02\xd5\xe6T\xba\xcd \x94\x9b\x14\xed&W\xbd \xf6\xe11\xfd\xa6\xa0\x82\x83\xd5p\x12U\x9c\xe2:N\\\xc99Z\xcb\xa1\xf5>\xd1\x92\xe5i;NW\xb4\xde'G\xe5\x89\xe9\xb4\xdb\xb1\xdc\xc1i\x9d\x8e\xed\x98\x9c~\xffc\xd5\x0d7)\xf2\xf18\x0d\x8bl\xdf\xbe\xcf\xc7\x00\xbbu\xf00\xca\xf1\xa6\x1a\xa5\xa5\xa0[zhI\x99\x9a\x89\xdcr\xfd\x1e\xec\xf1N z\x86\xbe\xfd\xaca\x91\xaf\x11\x0e\x03\x91\xc9\xf7\xde\xf8\xadd7\xc4\x9c\x8d\x07\x0f\xaa\x13\xd9_S\x7f\x03\xf8\x8a;\x8c!\x9dc\xdf\xee\x1b\xd5bZXolg]|\xb8\xecK\xc7g\xb7\xfcEv?O\x0f\xf6Y\x91s\xc1\xf5l'\x15;\x14\x16\xb7\xf3\xc3\x89\xeaO\xdb\x1ec\xa2\xe5\x195\xd2\xb6\xc7e\x83\x1b\xdf\xb0\x97\xb6=.\x11E\xda\xf6\x98\xb6=\xfeun{|0\xe1<\xf9\x83\x7f\xde\xd9\x8a\xd8\x95}\xc6d\xd2x\xe2\x0b\xf4\xdc\x8a\x9e\xfe\xb12f\x0d\x9e\xcc\xc0L\xffa2\xb5<\xb9\x8a>\xe0\xd1\xce0;\x82h\xdbC\x8c\xe3\x17\x1d\xab\xb8\xebcH\x19b \xae\xe7%^+G\xf3\xc92\xed\xdftFv\x04\xdc\xe5\x11\xbd\x0b\xebvU\xc7=\x13S)\x85\nLM\xbe\xb6.t0=+\xe7\xb2\xe5 \xb4n>\xb7\x9b\xcf\xee\xe7\xd8\xb6h\xc5\xfe\x93\xcc\xcb\xd6\xcb\x83yY\xf1\x82\x90\x93\xaf^w\xf3;\x0bu\xef\x9f\x98\x95`\xa9\xe3\xd7\xf8\x94\xd0\xb4O1#\x92\x9ew\xfb\x85|\xdbU\x93Bx \xa7\x0bK\xd8U-\xb4m\x16l'\x1d|\xa7\x96\x04|'C\xd0U\x03\x9f\xd0\xb7\x12\x8bv\xb9k\x18\xff\xd2v\x9f\x0e&\x04i\xce\x96\xe6l\xe3O\"\xcd\xd9\xd2\x9c\xadm\xc9s\xb6\x93\xe1\x0fj\xea\xd6\xe5\xe5\xc5t\xacFko\xb5\xd1\x0c\xee\xafa\x06w\xfa\xb9Q~\n4:c\x10\xe2\x8e|3\xa1r\xf09\x8c\xbc\x02\x15*\\\x19Sf{\x1c\xee+;rR\xd7v\xe5\xfa\x0e\xe8\xd5\x94\xae\x9cI\x988\xacW\x87/\x005(\xa7\xf9\\\x9a\xcf\xa5\xf9\\\x9a\xcf-\x1cE\x9a\xcf\xa5\xf9\xdc_\xe7|\xae\x19\x19\xc9}\x0e\x86\xff\xf1\xcf\xe3\x9a \xa2\xfe\x90\xf6\x1d~\xd1\x13\xb6j\xcfx\xed`27;8yb\xaa\xf4H\xe7eg\x01\xb1\xed!F\xe6\xdfl\x86\xf0\xa3L}\x03\xf5R\xf5O\xb3\x048\xb3i\xf7\xa9\xc9G/\xbf\x94\xba\x00\x7f\xdeo\xab\xe6y\xc7\xaa\xa5\xec\xba\xec\xa41\xc1\xab\xdb\xad\xe4\xe8B\xbc7\xe3V\xcb\xab*\x85\xe8\x18B\xc5\xe0\x1d\xab\xfa}w\xda\x89\xea\xab\x19\xe9\xbcPo\x03u\xc7d\xee\x91vQ\xcb9 \xb9\x9a=4I=|\x1fUM\x80\x9c\x1d\x07\x8c{=\x97\xb7h\x9b\x86-8\xb0\xaf\x9cur\x84o\xa7\x05\xf1\xce\xec\x01|f]\xbd\xbaGD\xb2\xfd\xd2\x94\xa0\xdd_9>\xa2d\xa0\xda/\x0d\xa2Q\x17\x13Cf\xe5\x18\xe2\xae/\xe0\xbfx\xdd67\xbc>\xea\xd12\x1d\xc0\xb2\xe2\xec\xb9\xf0\x15.\xea \xd2\xc8\xa5F5\xf2\x01\x1c\x17\xef\xdd\xac\x18\xbb\xe1\xed'\xd6xz\xb3p\x1f\xaa\xcc\xdb\x93*\x8b\xf4\xa7\xcab\xbd\xaa\xb2%k\xdam\xe8\x00T\x8c\x85U[\xf1\x1c\x16p\x15\x9fW5\xf6\xba\xad\x1b\x95\xddH\xbc\x90AF]\xe7\xb0P\x153\x83\xbe\xaaYB\xe5_D`\n\x1fJ\xa4\x02\xf0\xee\xfd\xf5\xf9K\xb9\xbaT\x1d\xad\x97i\xd62\x01\xc7E\xc3\xf5\xd4\xc4\x90\xf4\xa4\x0f\xf6=`\xd6\xb7\xa9\x99\xc5\xd0\x85\xfbz\xddT|\xdf\xb1~\x18\x05\x89\x0f\x84u\xbbn\xe5\xf21\xdfj\xe8x_\xfa\xb6\xee\xe58z\xc5\x98\x8e\x9e\x0c[\xaf\x82h\xbeP\xb6uSo\xf7[XW=\xec\xbaz\xe1\xc9\xc1\x01*]\x97L\x87\xa4\xc7B\x91\xe7F\x17\xf0\xc3\xd0\x1d\x0c\x19M\xf4\xe0jY\xf1J)YjT\xe5sF\xea\x12\xa9K\xf1\xf6N\xea\x12\xa9K\xb6M\xd5%_\xeb\x91\x9f\x8e\xc3\xa7[\xbe\xa64~B^]\xbe\x9e\x07H\xbf\x04\xcc\xff\x92\xbat\x10\x9f\xdf\xba\xba\x84\xe9\x11\x94QfW\xca\xec\xea6\xca\xec*\x8d2\xbb\x1e\x1aev\xa5\xcc\xae>\xa3\xcc\xae\x94\xd9U\x1aev\x0d\xcc%SfWi\x94\xd9\x952\xbbF\xf3\x93Rf\xd7\xdc\xc8QfW\xca\xec\xea0\xca\xecJ\x99])\xb3+ev\xa5\xcc\xae\x94\xd9\x952\xbb\xfe\xe63\xbb\x12\xad\x9f\x86B\x13\xad\x7f\xc2\xe0\xc69s\xa2\xf5KD\x91h}\xa2\xf5\x7fK\xb4\xfe\x8b_\xac%\x90\xffT\xe7Gr\xb0\x0c\xa4\xd9\x9c\xe2\xaf\x1b\xf5\x9cIX\xf0\xb6\xdd\xab\xe6>p\xaa\x86$V\x19k\x07w\xc3\xcaK'\xe6\xaf\x7f{\xf4\x94\x7fQd\xce\xc7\xeaG'\xf7\xf1|W6\xa5\xefg\xf4\xa3\xa5;\x8a\xcf\x8f\xd2\xf9\xd8\xcb\xe7\x92\xf9a.\x1f{u\xaf\x98R\x8c\xc8\xc7\xf0\xf8\xe94\xbe\xa6\xee=\xfeb\xb1\x0b\x90\xf8\xd8\xc0\x1dE\xe1\x07\x19\xfc\xcc\x12 \xf8{\x04}\x1f\xbd8\x8e\xbc?\x82\xbbO\xa0\xeey\x84\xb9\x0f\x12\xf7\xc1\xfePY\x8c\xff\x02\x0ck\x1f\x8d(\xa08{\x84\x1b\x8c\x16 \xe9\x84=\x82\xa3/K\xd1#\x19\xfa<\x82>\xd6\xef\x15\xa6\xe7S\xd8\xf9B\xe4<\x8ayE!\xaf3\xc8u\xe6\x8f\xf0V\xc2[KuI\x84\xb7\x12\xde\xea6\xc2[\xa5\x11\xdezh\x84\xb7\x12\xde\xea3\xc2[ o\x95Fx+\xe1\xad\x84\xb7\x12\xde\xaa\x8c\xf0V\xc2[ o%\xbc\x95\xf0V\xc2[\xa7\xe6\xff\xb4%\xbc\x95\xf0V\x8f\x11\xdeJx+\xe1\xade\xf0VD\xea\xf3\x8b\xc3}[L\xcep\xeb\x94\xbay9\x9f9\x1f\xc9%\xde\xeds\xf9\xbc\x12@\xd3\x0b9CW5\xe2\x87u\xd7\xeeC\xdbL\xfdI\xfc\xfej8^\xf3^\xa3\x1a\xb8\xee\xaa\x86\xcb\\\xef\xa0\\\x99\xfew\x02.\xcd\xbc<1\x01y\xa4\xfc\x92\xaa\xd4\xe3\xd0\xbf\xac\x1bW`\xfe\x07\x93\xab40\xf7\xe3h\xfbZS\x9e\xed\x19\xff\xa5\xeaU\x14\x99\x7f\x0c\x07F\x99\x16m\xc2y\x84\xf2P>K\xe4\xc8\xc9XeD\x95%2\x07w4\xc8\xc1#j'\xe0\xaa\x0d\xc8Y3c\xa9\xcag\xd0\x99{\xfa+\xf0=XZ\x01\x85\xb8\n\n\x19Jh\xb8\x02\x15\xbfC\xab\xa1PJ\x11\x85LU4\xe8P\x04\x17\xad\x8c\xc2\xf1\xea($+\xa4AWZ\xb9IRI\xa1\xb4R\n\x89j)\xa4*\xa6\xe1\x96=\xa8\xa9X\xd5\x14J+\xa7\x80SO\xa1\xa4\x82\nG\xab\xa8\x90\xa7\xa4B)5\x15\xb2\x14\xd5\xf0\xe3P\xa9\x1d_\xa2\xcf\xcdI\x94U8\xa1\xba\n\xa7QX!Qe\x85<\xa55\xd6\x05\xe3\xd4V(\xab\xb8B\x82\xea\n\xe9\xca+d\xa8\xaf\x88.\xf3\x07\x84\x02\x0b%TX\x88)\xb1\x80\x1f\x9e!\x14YH\x1c\xc5%+\xb3AoR\xb5E\xa8\xb3\x90P\xca\x82*-$)\xb5PZ\xad\x85L\xc56\xdc\xae\xfa\xb8j\x0b\xf9\xca\xad\xd7\x9f\xb8bL\xbd\x85b\n.\xe0\x85H\xc0(\xb9\x90\xa6\xe6BL.\xc9Tu\x01\xe170U[H\xe1\x85\xac\xe0\xe2\x95^@\xd42C\xf1\x85\\\xd5\x17pQ=Z\xfd\x05\xbc\x02\x0cH\x15\x18\xd0J0\xe0\x82\x9e\xae\x08C\x92*\x0c!e\x18J\xa9\xc3\x90\xaa\x10C\xa6J\x0ciJ1 nBH1\x06\xcc\xf9x\xe5\x18\n\xaa\xc7\x80)Z\xe0)+\xa7$\x03FM\x86#\x14e\xafC9/\x18P\x95\xa1\xb4\xb2\x0cQu\x19r\x15f\xaf7\xf5\xfd\x1b\x9e\n@(\xcd\x10V\x9b!Kq\xf6\xba\n*\xd1\x90\xabF{\xbd\xa9ad`\xd2\xad\x9c*\x0d(e\x1a2\xd4iHS\xa8!G\xa5\x86d\xa5\x1a\xc2\xdd\x08D\xd4CHP\x10\xb1\xaa5\xe4(\xd7\x90\xaa^C\xb8\xe29*\xb6\xd7\x99\xa5\x11c\x1f\x19\x9c\x9a\x1d| \x9auX\xd1\x86\xb2\xaa6\xc4\x94m\x08\xab\xdb\xdesrUo(\xd8v\x13\xd4oHR\xc0!0B\xd1J\xd9u\xd5\xadU\xce\x8fQ\xd1\x1b\x841\xd9\xf2n\x19k\x8cn\xe6\xf45\x1cNZYt\x92\x85\xb42\xd2\xcaH+#\xad\x8c\xb42\xd2\xca\x80\xb42\xd2\xca&FZ\x992\xd2\xcaH+\xb3\x8d\xb42\x8f\x91VFZY\xf6\xf4\x1bie\xa4\x95\x85\x8c\xb42c\xd1\xa2\x91VFZ\x99e\xa4\x95\x91VFZ\x19ie\xa4\x95\x0dV\xaa\xed>\xa4V\x16J%9HfzO\x0e1\xc8\x1du4\xd5X\xcd\xc4\x8a\xde\xd3\xc4\xeb\xecg\xc6\x06\x7f\x17\xa1\xd7\x1fg\xdd\xca\x93\xa7[\x95\xf8O]\xd5Xm\xb7\x87J)yr\x8aR-\x8b\x13\x9f\xc6j)\xe7\xcc\xcd\xb8\x9d\x80oadVZw\xb3\xe7\x8b?\xfb'*\x13\xb4wj(\xb4/\xcdh\xc3\xce3:\x13\xed\xb0 \x0d\xec\xaa^g\x03W[\xd5\xfcc\xcfz~\xa6~\xf78\x93k\x81\xa5\x9b\xd0.5\x17\xdc\xea5\xe4\x86 \xbeI\x07~\xc7:&'\xb7\x9b\x16\xb6mgv\xcbp\xce\xbc\xc9\x0d+\x8e\x0cfd\xf3\xd1\x95\x91\xa1l\xf6[\xd6\xd5\x0b\xf37\xd9h4l\xa3f\xbf\xeeXc\x02\xbfo\x86 \xc7\xd9w\xc6\x85\xf4\xb6\x11\x0dq\x08\xa1\x9a\xa2\xdb\xf7\"\xd4\x9fXb<\xa7\xeeO\x1c\\\xcfCi\x85wSoklt\xe5\xb1F%\xf7\xf1\x1bj2\xdan\xc1ZS\xdfof\"\xb5\x9az\xb2\xfft\xb1\x82\x0d[q\xc3\xbbh\x00\xc6\x0c\xe6\xe5<\xbaz@\xd4ED\x9co\xef\x81U\x8b;\xa8v\xbb\x07\x8c\xa2M\xa1\x8c\xe7\x87bi\x9d!\"\xda\xab\x9c\n\xa2\xcb\x05\xf1\x8f\xbaY\xd6\x8b\x8a\xb3AQ\xd3\x11\x94\x07\xea\x86d\xbb\xab\x9b\xc5f\xbf\x9c\x0d\xd5+u\x95A\xd2\x9c\xdd1)\x90[3\xed\xe2\xa5a\xf1\x15\xb3\xce\xe5\xe3E?\xbb[\xb3*\xc8\xaf\x9b\x8e\xf5\x1ae\x90\x8f\xd7\xf8<\x8aG\xeeL?M\xf5\xbai\xbb\x99Na\x9e\xc6\xe9%Td\x8e\xbd\xb1\xb7m\xbba\xd62o\xc7\x0d\xec\xd8g\xd6MN\x0d\xdd<}\xf4\xfc\xc6\xd5\x16\xc5\xd41\xf7\x930\xf1#\xae\xc1\x14\xd2\xd3vK\xd6\xcd'*?\xd4\xcd\x82\xbd\x84E\xdbo\xdb\xfey\xbf\xfc\x04?\x9e\xfd\xe1\xa7\xa2\xd1(\xbd_\x84xM\x07\xb6\x8b\xf8\xd8\xb3\x0e\xb7[\x84td\xee\xfcd\xb3\x88\xa9\x8f'\xa6\xd6\xb4WD\x14]\xa1\xbd\"h\xaf\x88\xc3c\x10\x0b\xac1\x82\x97\xb1Th)\xe8\xcc\xad\\\x05\xa6rK\xc3K\x10\x07\x98 \x03b\nW\x80\xf2\xdf\xe4\x82M\x90\x0c7\x05]Q\xfe\x1b\xca\x7f\x93\x0b@A\x1e\x04\x05\xa5@(\xc8\x82\xa1\xc2\x8f\x03\xe5\xbfI\x83\xa3 \x11\x90\x82\xb8Q\xc4\xc1\x16\x11\xe23\xda\xc8og\xb3\x8a\xa4f\xd0\x9eU\x85v~H\x89\x16\xed\xfc\xa0\xec\xc4\xc1\x8d\xefY@;?\x94\x88\"\xed\xfc@;?\xfc\x86w~\x90p_`\xbf\x07+|\x1f{\xd6\xfdI\x1e.\x0b^3{\xdb\x07\xf9g\xd9\xe2E\xfc\xf4P\xd4\xec\x07`\x8fP\x06wS!Ez\xa9?\xb3\x06\x86\xe1\xce\xc1\x9e\x11\xea\xe2\xfa\xd7G\xbc_\xc4\x18Q\xdb\xf8\x03\x10+\xdf~\xbf\x88\x8b7\x07C\xd2\xd9\xa6\x10u\xafw\x01c_\xeb\xde\xb3\x06\xbfgR\x03\x88\x16\xdb\x87!)s\xef\xf35\xb5\x18\xc28\xd9\xd1\xcc\x1ao\xab\x02z\xebV\xfb\xa5D)U9\x7f\xfdf\xb5\xfd(!\"\xa8\x97\xea\x89\x9d\xa1D.\xdeW\x99\xec{\xf3\xdb\x91\xbe\xfa\x9f\xf7\xdb\xaay\xde\xb1j)\xdf]6{3\xee\x11\xe7ta?\xcfG\x17\xc3|\x7f\xd8^U9\xcc]t\x9e\xbfc\xdd\xb6\xee\xfb\xbam\xbc\xd9\x88BO\xba2\xef\xf3\xae\x0c_\x89@\xbb\xbd\x1c\x0b\xaa\xbf\xa6\xf4\x94\xc0\xb0\xcdI;\xf4\xdfr\xaf\x1e\xf15\xeag\xb9b\x911M\xcb\xf4\xd3s\xb0\\\xfc\xa9]\xa9+\xcdN'\x98\x9c`\xf2x\x8b&\x98\x9c`r\xdb\xa6RV\x94\x01W\x83\xc7\xe3\xf8o=\xfa\xbd\xba|=\x0f\x11\xb1\xdf\xc4~\xc7^\xd9\xf1>A\x19\xb1\xdf\xc4~\xbb\x8d\xd8oi\xc4~\x1f\x1a\xb1\xdf\xc4~\xfb\x8c\xd8ob\xbf\xa5\x11\xfbM\xec7\xb1\xdf\xc4~+#\xf6\x9b\xd8ob\xbf\x89\xfd&\xf6\x9b\xd8\xef\xa9\xf9?m\x89\xfd&\xf6\xdbc\xc4~\x13\xfbM\xec\xf7C\xb2\xdf\xbc\xb5\x04b\x8ddM\xe7QOO}\x8f\xe4\x8e\xaf\xe0\x16O\xf3\xc1P4K_\xd9\x8f\xe5\x07\x0f\xb5*7&C\x08x\x1e_K\x08\xf8 \x83\x1b\x87\x97 \x01/\x11EB\xc0 \x01\xff\xcd#\xe0/~\x91\xff\x15\x7fQ\x1e]4\xf8\x7f8h\xf0\x01\x06\xe7\x13\x80\x13\xee\xaa\xcf\xe6mf\xc0\xee \x0f\xae%\x87\xc1\xe1\x0c\x10w\xd3\xdf\xfa\xc7\xc7\x0d\x7f\x17\xa5\x18\xa3\x08wTv\xc1\xb3w%\xe0\xed\x18\xba\xed\x1b\x97\x8d\x16\x07\x99c\xa8`Yd\xdb\x07l\x7f\x83\x1a\xe6\x81\xda~L;\xdaV\x8eD\xb4\xa3\x806\xb6\x00Ypv\x14\xcd\xe6\x110;\x88ec\x8b\xeem\x95y@\xb6\x1f\xec\n\xc4\"\x1b\xc6\xc6a\x94\x05(J\x82( \xa2t\xfeN\x10\xa5e\x04Q\x12D9\x1aA\x94\x9c J\xb7\x11Di\x8c J\x82( \xa2D\x8e\x92\x08\xa2\x1c\x8c J\xdb\x08\xa2$\x88\xd2a\x04Q\xba\x8e!\x88\x92 J\x82( \xa2\x9c\x9a\xff\xd3\x96 J\x82(=F\x10%A\x94\x04Q>(D)I3\xbb7\x9aKl\xa7\x87(\x0d\x89\x11/\xb6\x92\xf2\x0c\xf3\xe2\xf1\x0e?[\x80|\xbe\x00\x1c\xf9\xe9\xec\xf5\x08\xbf\xaa\xb6\x11\xd9\xefz<\xeb\x8d|SL\xbf\xf9\xf5\xdb\x03\x96\x15\xaf\xd4\xca\x04O\xa3\x88\xf2\xb2V\xe94\x17\x9cG\xcb\xda\xb5$P\x96@\xd9\xd8\x03\x82\x01-\x80@Y\x02e\xbdG\x12(+\x8d@\xd9C#P\x96@Y\x9f\x11(K\xa0\xac4\x02e \x94%P\x96@Ye\x04\xca\x12(K\xa0,\x81\xb2\x04\xca\x12(;5\xff\xa7-\x81\xb2\x04\xcaz\x8c@Y\x02e \x94}PP\xd6\xe6Mg\xec\x8a\xe5&\x9d9M%\xd1f\"\xf0T\xfaZ.;\xd6\xf7\x13\\\xf6[\x15\x1c\xbf\xb3\xee!\xf1\x10*\xe3\xb1@\x18\x8e\xe9MB\xa3\xa6@\x94\xaeD )\x9c\xde?\xb8W\xd3\xa6\xfdX]\xc3=\x19\x17J{\x1d'\x8c\x02[\x0d\x1a\x9fOL\x14\x1e)\x055\x8d\x8em\xfc\x01\x94\xc6GA&\xcdv\xf6\x1b\x1f\x03\xeff\x85\xfeM\xfcb\xba\xb12\x0c.\xe1C%L\xe1\xc4\xc8N\x8f\x85g\xedrj\xbb\xaac\x0d\x8f\x06\xb8X\x81\x9d\x9b(\xaaB\x98\xb2;\x1d4\xde\xdd\x07Qm@_\xfd\x9d%p\xa6F\xca~\x1e\x8f.\x88\x15\x867\xa3\xdfY\xd1\\\x0f\x94:\xddlq>\xc5B\x06\x1c\xa4\xaf\x9b\xf5\xc6j\xc2n\x7f\x94\x91\x9122RFF\xca\xc8\x08\xc7gdt\xef\xeci\x06=\xf1L\x8c\x8a$\x1b\x06^W\x97\xafg\xfe\x08*#\xa8,\xf6j\x8d?\xfc\xca\x08*#\xa8\xccm\x04\x95I#\xa8\xec\xd0\x08*#\xa8\xccg\x04\x95\x11T&\x8d\xa02\x82\xca\x08*#\xa8L\x19Ae\x04\x95\x11TFP\x19Ae\x04\x95M\xcd\xffiKP\x19Ae\x1e#\xa8\x8c\xa02\x82\xca\x1e\x0dT6@@\x85\xc1\xac(QFY\x0c\xd3R\xc4Q\x16\xc3\x13\x067\xdeF)\x8ba\x89(R\x16C\xcab\xf8\x1b\xc8b\xe8Fu_\xfc2R\xca\x81\xf4\x85\x06\x8a\x9b\xef\xe1\\7\xea9\x13\xbfU\xb7\xed\x9e\xdb\xefo5\xf1\xcb\x87l\x86\xc3\x80\xc0\x85\xef>1\x01x\xdc\xf4nQ\x9c/\xca\xe0Fe <\x84V\x84\xbe\x0d\x973\x04\xb2\xc61\xd62\xd4m\x84\xb9-X\xd0<\xda\xd6\xcf\xdaF\xef\xf5\xd1\x9cm\x94\xb2\xc5\x16!\x8f\xb0-\xc7\xd7b\xc8\xb8D0\x8e\xb88\xe2\xe2\\\xbf\x13\x17g\x19qq\xc4\xc5\x8dF\\\x1c'.\xcem\xc4\xc5\x19#.\x8e\xb88\xe2\xe2\x90\xa3$\xe2\xe2\x06#.\xce6\xe2\xe2\x88\x8bs\x18qq\xaec\x88\x8b#.\x8e\xb88\xe2\xe2\xa6\xe6\xff\xb4%.\x8e\xb88\x8f\x11\x17G\\\x1cqq\x0f\xc9\xc5M5\xda\x16zVu\x8b\xbbo\x0e\xc6\xa5\xa52\x13EdK\x87t\x97^\xd029\xcbvm\xcf%\x04!oP ?\xd9\xa5\xfc}\xb2;\xe3\xb6]\xee7\xcc\xba\xb5\xfa\x9c \xc4p).\xa0N~b\xea\xf5HA\x06;\x04\xb6y]ATJ\xdbV_o8\xfb\xcao6\xacY\xf3\xbb\x93K\xef\x7f\xa9\xbe\xd6\xdb\xfd\x16\xd4\xe5\x06\xed\xbd\xed9\x88b\x1cVM\xef\xfc\xa5n\xee\xe4\xdd>\xdeV0)\xe8dc\xd1\xb7\xfd\x89\xc3\x8d[vV\xce\xe3\xaa\xb3\xf8\xabR\x9euqHx&\xe1\xd9\xf1; \xcf\x96\x91\xf0L\xc2\xf3h$\x90\xa3\xfd\xfac\xc5\x9ae,R\xbcZ\x17\x8eTJ\xd5\xaf\xab5tl\xc5:\xd6,\x18<\x95\xd3\x18zj\xe3\x99yd\xd5\x07Nh\xb2\xc9\x18\xe3\x8b\x90|6\x14M\xf4o\xea\xca\xd6J\x18q%k\x87H\x7f\x9e\xcc\x03w\x7f\xd6]\x8b\xb5n\xc5\xbawqG[\xd1\x95\xb6\x0duM\x96\xfd\xa7|\xdc\xa8k\n\x19uM\xa1\x03N\xd35\xfdEw-\x90\xd51\xed;\xd7r\x83\xd1\xa8S\nZJk;\xcd\x83\xf6\xf1\xea-uJA\x9b\xc6\n\xd1)\x05\xd6\xbc\x8c\x96\x14\xa9\x94\xaa\xffU\xce\xf5\x8e\x0bA,\x8dKvP\x83@\x81\xf0\xd5\xb1e\xdd\x99\xcf\xb0\xc8\xf1\xcb\xba\xdfm\xaa\xfb\xd0\x8a\x9f\xd1rjoo\x96\xad\xae\xa5\xe7\xb5\xc7\xbab\xba\xcf\x8f\xddf\xb6e\xb6Z4\xa5V,Kn\xb2^D\x9ciWo\xeb\xe6SF\xbf\x19\xfa\xc6\x8c\xf7\x97\x91\xbe\x12\x11Y\xf3\x1eQ\xe3\xd1M5\xff\xca~&\x1a\xcaj/\x97\xd6\xc0\xa2\xe2l\xddv\xf5\xbf\xcb\xd9D\xa7\xc7j\xcf\xef\\\x8b\xe5\x94\xe1\x0b\xf4J\xfa\x89\xce*,\xda\xe63\xeb\xfa\n5OUl\xc6\xc7\xb9K}\xdb\xd5\xeb\xba\xa96z\xc1\xb9\xeen\xac\xf29}\x0eC\x86\xe5\x8dg\xb2SY\xa1\xb6\x10yg\xe2\xde\x97\xd2\x15\xe6\xf1\xba\xd6\x08\xf5P\xc9\xf0I\xf1\x9b\xa4\x8c5\xfbm\xac[y\x0e\x97\xef?\\\xdf\\\x9d\xff|~u\xfe\xee\xf5\xf9\xcd\xf5\xdf.\xcfo>\xbe\xfbpy\xfe\xfa\xe2\xe7\x8b\xf37Y\xe7_\x9d_\xbe\xfd[\xd6\x99\xff\xfa\xf1\xfd\xf5y\xd6\x99W\xe7\xe2\xaf\xc1S\xcdz\xd9\xa3\xea\x8c\xe1\xf3G\x8b\xc6\xf7%\xbck\x917\xdeZ=\x10\xeb\xff\x03\xb7\xe5\xa5Zg9\x8e\xc1g\x89+v\x9b{\x93nb\\\xac\x10\x98H\x8c\\S\xde\xd0\xf05\xff\xb1o\xf9\xb8\x84\xa0\xc05US\x88V\xd4\xea\x7f\xd0W\x8ddkQ\x86~BQ\x9d\xa9\xb2\x83\xa9\xff\xb1GD\x94Y\x82S\x0fV\xe8\xe8Sr\xa9KxP\xb7\xf9\x00\xe1\xfb^\x0e\x11\x02\xf8\xaf4\xb5\x92x\xa0J$\x85\xd16\x9b\xc0\xcaQeC\xf6&\x11\x0c\xa3\xb8\"\xfa%\x93\xb5\xa4\xed\xf9\xd5Pt\xff\x80I\xb6\xbc\xd83\x1f\x8f\xdd+\x95\xc3e\x18\x83Xm\xbd\x87\xa7\xac\x96+\xbe\xaa\xe1\xa9~\xa6\xdb\xbc\xd7_\xdb\xa9G\xd1\xfdE-}\xdc\xf4\x8c\xf3\xba \x8c\xc5T\xa9\xafd7b\x0eV\xb7\x15\xa3G\x04\x9b_\xf8}\xf6\x1cd\xf7v\xf3\xe1\xfc\xfa\xfa\xe2\xdd\x9fP\xfd\xf9\xfc\x9c\xf3\xbf\x9e_\xfd\xed\xfd;\xff\x8d\x9e\x9f\xf0\xf3\xfb\xb7o\xdf\xff\xaf\xf3\xab\x0f\xe83\xfe\xf2\xf1\xfa\xe3+\xff8\xf9\xe0\xf0\xf3w\xd7\x17\xef\xdf\xf9\xfc\x0fo\xb4\xd4\xba\xe3R\xd1\x04\xa3\xaa\xdf\\\xd6\x8d\xc6\xbc\x9f|!\x7f \xe7\x9fYw\xdf6l\x00K%+\xc2[\xfb\x9d\x14nC\xa1\x1b\xf4R\xb1Sj\x8d3\xeb\x06\xc4O\x0d\xc4\x8b^S\xddb}A\xeb\x1a\xdb=\xdf\xcb\xc5\xf7\xa6\x08E/\xaa\x1b\x8a\xbe\xec\x8e\xb5\xbb\x0d3s\xe0\x12\n\xd1\x1d\xa9\xf6\xec\xbe\xb8\xf3zR=\x16\x1f\x0e\xcb\x8a\x97X\x96)\xdc<\xe7\xf56\xd2\xf3\xbd\xd6\x97\x95\xc7G\xbfp$>\xce\x965g\xcbo\\N\xeb+\xe7m\xd5sP\x85\x00qb\xb4\xd42\xdf\xd6\x11E\xd5E\x90)c\"\x17\xb3\xdeQ\xd6\xcaQ\x8d\xc7\xd4\x8d\xaa\xb4\x08wu\xdb\xee9T\xd0\xd7\xcdz\xe3t\x17L\xe0\x15\xfa~\xa2\xf4[\x94~\x8b\xd2oi\xfbm\xa7\xdf\xf2\xb5\x1e\x89\x05N\xe0;\xd4\xb6\x86.//\xa6\x0c\xdf\xec\x901\xa1\xd6\xf0\x03\xe5\xd3\x9a\xfdJ\xf9\xb40=\x832\xca\xa7E\xf9\xb4\xdcF\xf9\xb4\xa4Q>\xadC\xa3|Z\x94O\xcbg\x94O\x8b\xf2iI\xa3|Z\x94O\x8b\xf2iQ>-e\x94O\x8b\xf2iQ>-\xca\xa7E\xf9\xb4(\x9f\xd6\xd4\xfc\x9f\xb6\x94O\x8b\xf2iy\x8c\xf2iQ>-\xca\xa7\xf5\x90\xf9\xb4xk\xc9\xc4\x8a\xe3\x9aN\xa3\x9e>\x91\x16\xa5\x92J\xcb\xd3C\xa9\xa4N\x18\xdcx\x1b\xa5TR%\xa2H\xa9\xa4(\x95\xd4o9\x95\xd4\x8b_4\xcc\xffO\xe5\xcb\x95TJ\xd2r&\x97\x94hk\x13,.%\x9f\xd4\xe5\x88\xd1=\xea4RE\x89\xbeh2\xa8\xa8\xf8\x80\xe7\xd0\x92s=\x05\xb2\"\xc52:\xf1 Q\x03\xa8lN\x87\xc5>6\x97\xd37\x0826\x87S4\x83S\xb4L\x87pmJ\xf6&\x7f\xee\xa6\x8c\x0b#\xf26\x85\xb369\xea\x92\x91\xb3)\xf8\x1cB\xf4Y\x04T\xb6&\x1e\x80\xb4\x8cE3\x0fDK\xaa,^^e\xa8\x9c\x03\xd1\xfb:\x1a\xa2\xb9\x8f\x16\xa3\\GC\xaf\x9fw\xa4\x13v\x19\xc7\xa7?A\xe4\x19\xf8\xf5\xc6'\x9a]\x00\x91\xf0$!:\xe3Jpl\x1e\x93X\x96\x92\xa29J\xb4\xb3\xe3\x92'\xc5S'Q?1\xb3\x87\x7f\x0e\xa8\x9fp\x1b\xf5\x13\x01g\xc7d2\n\xe71\xa2\x1ebf\x0f\xfb\x04 s\x16\xfdf{\x08T\x9e\"D\x9e\x9e\x84\xe8\xe0+\\.?\x11>;QBn\xa2\xf4:\x1f\x97\x97\xc8|\x8c\x1e\x9d\x95H;\xca\xcaI\xe4\xff\x8e\x8a\xf5|\xc1^/\x1a\xcb\xf1\xbdR\"\x13Q(\x0f\x11\xb6(\xa8\x1cD\xa8\x0cD\xd1+\":\x94\xc3\x16v\\\xee!\\\xe6\xa1\x02\xf7\xfc\xe8\\\xcc\xd2M\xfc\xb1I\xc96\x14\xbd!\xca\xe2\x99\x86\xa2yp2\xce\x8eg\x19\xca\xcd1\x94\x99a\xa8@~!\x0c\xadl,\x1a\xd3\x84\xdcB\x88\xcc\x0d\xf0 y\x85\xbe}V\xa1o\x9cSh\x17\xcf(\x84|\n\x11\x9d\xa3\xb2\x83\xa9gl.!L&\xa1\x13\x156\xf2,\x94\xcd \x94\x97?(/{\x90\x95\x97\xa1P\xee\xa0X\xc42\xf3\x06\x81wm\x9f7k\x10&g\x90.mj\xc6\xa0h3\x0b\xbd\x93\xd2s\x05%f\nJ\xcd\x13\x94\x94%()GPf\x86 \\\xae\x8c\xc2\xd9\x81N\x9a\x1b\xe8\xdbg\x06z\x80\xbc@\xdf,+\x10\"'P\xf4 \xc5\xe5\xd9\xd1\xfdCJ6 \\.\xa0\xb2\xe5\xcb\xcf\x02\x14\xc8\x01\x14-\xa2\xbex<\xff\x8f\xf5\x969.\xfb\x8f\xef\xe5\"\x19\x0c\xf5\x12C\xa4\xeb\xd0 :dq\xae._\xcf|QZ\x0eJ\xcb\x11\x1bCb?\x94(-\x07\xa5\xe5p\x1b\xa5\xe5\x90Fi9\x0e\x8d\xd2rPZ\x0e\x9fQZ\x0eJ\xcb!\x8d\xd2rPZ\x0eJ\xcbAi9\x94QZ\x0eJ\xcbAi9(-\x07\xa5\xe5\xa0\xb4\x1cS\xf3\x7f\xdaRZ\x0eJ\xcb\xe11J\xcbAi9(-\xc7C\xa6\xe5p/\xc3\xdc\xd4\x93/\xb3o\x90\x9aC\xe1A\xf1\x82+V\xd5\xe4\x12\xf96\x19DJ/\xc4~Qq^-\xee\xb6\xac1\x9c\xa5oQ\xf6\xab\xf1\xc0a}\xb6\x9c\x96\xb0\xfen\x07\xe6\xae\xfal\x92\x8c\xa8\xb5\xdaCH\x0fVi[\xae\x9f\x98X=\xd2\x05\xdb\x07\xe1\xb2\x8d?\x80\xb0\x17]\xf0\x9d4\xb1\x85\xd9c40\xa9\x85~\xa8y;\xfc\xa5\xf6\xcf\\\x8e\xc1\xb6x{\xef\xd1\xe3\xc2^\x8f\xcb\x08\xf7\xf7\x10a:\x0c\x86\xbb\xd2>OC\x9d\x9dG\xc4\xea\x1aZN\x8fYP?r\x8d\xab\x01\x1f\x1b\x8b\xef\xa0\xb4\x02\x0eq\x15\x1c2\x94\xf0p\x05*~\x87V\xc3\xa1\x94\"\x0e\x99\xaax\xd0\xa1\x08.Z\x19\x87\xe3\xd5qHV\xc8\x83\xae\xb4r\x97\xa4\x92Ci\xa5\x1c\x12\xd5rHU\xcc\xc3-{P\xd3\xb1\xaa9\x94V\xce\x01\xa7\x9eCI\x05\x1d\x8eV\xd1!OI\x87Rj:d)\xea\xe1\xc7\xa1RDz\xf4\xb99\x89\xb2\x0e'T\xd7\xe14\n;$\xaa\xec\x90\xa7\xb4\xc7\xba`\x9c\xda\x0ee\x15wHP\xdd!]y\x87\x0c\xf5\x1d\xd1e\xfe\x80P\xe0\xa1\x84\n\x0f1%\x1e\xf0\xc33\x84\"\x0f\x89\xa3\xb8de>\xe8M\xaa\xf6\x08u\x1e\x12JYP\xa5\x87$\xa5\x1eJ\xab\xf5\x90\xa9\xd8\x87\xdbU\x1fW\xed!_\xb9\xf7\xfa\x13W\x8c\xa9\xf7PL\xc1\x07\xbc\x10\x0d\x18%\x1f\xd2\xd4|\x88\xc9e\x99\xaa> \xfc\x06\xa6\xea\x0b)\xfc\x90\x15\\\xbc\xd2\x0f\x88Zf(\xfe\x90\xab\xfa\x03.\xaaG\xab\xff\x80'\x00\x00I\x01\x00\x9a\x04\x00\\\xd0\xd3\x89\x00H\xa2\x02 D\x06@):\x00R \x01\xc8\xa4\x04 \x8d\x14\x00\xc4M\x08\x11\x03\x809\x1fO\x0e@Az\x000E\x0b\x10\xcd:L4@Y\xaa\x01bd\x03\x84\xe9\x06\xef9\xb9\xd4\x03\x14l\xbb \xf4\x03$\x11\x10\x10\x18\xa1\x98\xb5\xd3J\xe6\x1a\xd0\xfd\x90(fr:\x8d\xba\xdf4\x17E\xc5+\x95\x88\xc2\xce\x83\xee\xf58f\xab\xf7\xe9\xd3Yy\xc5\xcd\x96\"\xfe\xd5\xa5\xa8\x85\xdd\xdei\x1a\\\xf6\x83ac\x13\xbd\xd2y\xd8\xe3\x04vU\xdf\xab\xa9]\xb5\x13\xca?\xf6\xac\xe7g\xeaw\x8f\xb3q\x0b\x98\xd0&(\x17\xdcz\x82\xe5~\x13\xbe \x00.3\xc4U\x1d\x83\xa6\x85m\xdb\x99\xcd\x18\x9c\xb3`r?\x84#\x83\x19O\xc9\xe5\x9dC\x1a\xb6c\xf0\xed\xcfa-e\xf2\xd5\xd7\x0e\xb4\xbd\xb3\x85\xe7\xf0/\x95\xdc\x06\xe1\x19\xd4\xbc7\xd3\xfc=\xec\x1b\xa9\x84\xb0\xa5\x9a\xc9\xfcR\xf7\x87\xed#>-f\xef~\xa3j5\xe1\xc7\xea\x06\xd6W\x97\xaf\xc7\x85\xf1\xba\xfb\xeaUV?\xd7\xedq\xabL\x8b\xb6S>dO\xdd\xa9\xca\x0f\xef\x19\xf1B\x91\x93\xa3vd\x9c\xe10g|h\xb7c\xb9\x83\xfd^\xc7v2 =\xfc\xb1\xea\x86\x9b\x14\x1bYL\xc2\"\xdb\xb7o\\1\xed\xcet\xeb9x\x0c\x87\x8c\x03\x16\xb0\x83J>\xe0\xf2\xf3b\x0e\x15\x89;Dy\x08(\x0fAl\xda?\xde\x1d(K\xa51\xcc\x14\xb6\xd7!\x96\xc4(JaP\x1e\x02\xcaC0ZQ\xba\"\x85\xacH\xa2*(\x0f\xc1\xb1\x04E\x06=Q\x84\x9cH\xa7&(\x0f\xc11\x94D\n!\x91AGP\x1e\x02\xcaC@y\x08\xb0tCQ\xb2!\x87j\xa0<\x04\xbe\xc3\xa2\xf4B\x02\xb9\x80Ye\x9fB,P\x1e\x02\xcaC\x80\xa0\x0f(\x0f\x01d\x12\x06 t\x01\xe5!(@\x0fD\xc9\x81\\j\xc0\xfb\xae\xa1<\x04\x87Fy\x08(\x0f\xc1\xccJ\xac \xc7*\xfa\xc9j~\x92\x92Oy\x082\x15{\xcaC`\xecty\x08\xc6\xad\xbe\xa4\xd4.\xe7\xecg;\xd1\x9fjy\xff\xd1Y\x08\xf8lE\xfe\xb7\xc9J\x00\xae\xcd\xf2?\xb1{_\xe9g\xca\xa2V\xf4+\xfd\xd2\xb2\xf7\xc2\xb7%\xcc\xb3A\xfe\x97sv\xeb\xd9\xe4\x96\x0c\x80I9\x10\x92\xf4eb\xfe\xb6\x91\x1f\xf5\xedj\xd53.\xbe\x93\xa7\xc5\x05Ks\xe8\xd9d\xf3\x92\x9c\xdd\xf4\xbda\x9c\xcc\xe08\x82\xa8\xca\xe7\x8b\xe3l\xf6DWF\x86\xb2\xd9o\xe5fl\xfao\xb2\x7f[T\xcd\xb0\xb9\xca\x97;\xd6\x98\xc0\xef\x9ba\xc6p\xf6\xa1p!\xbdmX\xdf\x8f!Tsl\xfb^\x84\xfa\x13K\x8c\xe7\xd4\xfd\x89\x83\x1bo\xa3\x9bz[c\xa3+\x8f52\xb7\x8f\x9bP\xb3\xc9v\x0b\xd6\xa2\xf8~3S\x99\xd5\xdc\x91\xfd\xa7\x8b\x15l\xd8\x8a\x1b\xceD\x83'f4.'\xc2\xd5\x03\xa2.\"\xe2|{\x0f\xacZ\xdcA\xb5\xdb=`\x14m\xfac}\xaf'\xb0\x7fp\"\x1d\x93\xf2\x0f \x9b\xb8\xde\xb1d\xe4,\xee\xc4\xb0\xa7D\x8b\x18ve'\x0en\x9c\xbe&\x86\xbdD\x14\x89a'\x86\xfd7\xca\xb0\xf7L\xcd_\xbf\xf8E\xffk$\xdb\x95_\x17\xb7\xfeA\x1dz)\x8e\x1a\xc0u\xa9\xae\xebQ\xd2\x80\x86V\x9aU\xd7\xce\xb5\xa3 \xb0n;{bb\xf0H\x89u+.\xb6\xf1\x07\xc0{\x1e\x15\xaf\x8e\xde\xfbU|G\xde2\xe6\xd7J\x17\x1d\xf3\xe2\xd3c\x0b\xfd\xe6\xd4\xb7\xbet\xa4V\xc1\xd2\xc7J]\xec>}\x94\xd0\x15\xd4\x93\xef\x16\xe7)\xec+g]S\xc59z\x0c\x91\xfd\xb4\x1dF\xf2\xe7\xda\xaf(\x83B\x14\xeb\xde_\n\xce\xbeF\xf6\x84M\xbc\xfc\xb5\xe6s\xc2uox\x1d\xdaH\xd6Q+}\x86\xb5\xd9\xb0Y\xab\xe0\xbdJ\xf41\x07\xc4\xa3.\xec\xae\xea\xef\xa6\x9d\xfd\xa1\x85\xba\xa1\xd1\"k\x07\x00Wfe\x98\x92+\xeby\xd5y\xef\xf2h\x88\xfb=\x1a\xea\xa1\x18-\xde\x8d\x8d&\x17<\x9864\x10\x7f\xf6\x82\x07 \x81Ev\xd0U6v\x16\xbcZ\xab@\x84\xb7\x0f\x14\x8d\xd3\xfb@\x8e\xf6\xeb\x8f\x15k\x96\xb1H\xf1j]8R)U\xbf\xae\xd6\xd0\xb1\x15\xebX\xb3`\xf0T-\x1eQ\xd3\x18\xcf\xcc#\xab\xbeyb;\x10\x08c|\x11\xdekI\x17M\xf4o\xea\xca\xd6\xc2\x15q\xa5/5\xbf\xd3_lj\xae\x8a}\x0d\x05]\xbb\xfb\xb3\xeeZF\x7f\xf6\xbd\x8b;\xda\x8a\xae\xb4m\xa8k\xb2\xec?\xe5\xe3F]S\xc8\xa8k\n\x1dp\x9a\xae\xe9/\xbak\x81\xac\x8ei\xdf\xb9\xd6b\x8cF\x9dR\xd0RZ\xdbi\x1e\xb4\x8fWo\xa9S\n\xda4V\x88N)\xb0 h\xb4\xa4H\xa5T\xfd\xafr\xfaw\\%c \x80\xb2\x83\x1a4\x0b\x84\xaf\x8e-\xeb\xce|\x86E\x8e_\xd6\xfdnS\xdd\x87\x96C\x8d\x96S{\xeb3\xf1\x8d\xba\x96\x9e\xea\x1e\xeb\x8a\xe9>?v\x9b\xd9\x06PjE\x99\xe4M\x14TZ/\"\xce\xb4\xab\xb7u\xf3)\xa3\xdf\x0c}c\xc6\xfbK\xd4\xbat\xcc\xd7\xfc\xb5\x1a\x8fNr\x1c\xc8\x92?\x13\x0de\xb5\x97\xeb\x8e`Qq\xb6n\xbb\xfa\xdf+krqj\xd5\x9e\xdf\xb9V\x12*\xc3\x17\xe8\x95\xf4\x13\x9dUX\xb4\xcdg\xd6\xf5\x15j\x9e\xaa\xd8\x8c\x8f\xd5\xfa\xc6)\xab\xb6\xab\xd7uSm\xd4\x0d7\xdd\x8dU>\xa7\xcfa\xc8\xb0\xbc\xf1Lv*+\xd4\x16\"\xefL\xdc\xfbR\xba\xc2<^\xd7\x9a/\x1f*\x19>)~\x93\x94\xb1f\xbf\x8du+\xcf\xe1\xf2\xfd\x87\xeb\x9b\xab\xf3\x9f\xcf\xaf\xce\xdf\xbd>\xbf\xb9\xfe\xdb\xe5\xf9\xcd\xc7w\x1f.\xcf__\xfc|q\xfe&\xeb\xfc\xab\xf3\xcb\xb7\x7f\xcb:\xf3_?\xbe\xbf>\xcf:\xf3\xea\\\xfc5x\xaaYL|T\x9d1\x8b\x17F\x8b\xc6\xf7%\xbck\x917\xdeZZ\x11\xeb\xff\x03\xb7\xe5\xa5Z\x84:\x8e\xc1'c\xe2\x8e\xed6\xf7\x1a?\xb2Vr\x04&\x12#\xd7\x9474|\xcd\x7f\xec[>\xae\xaf(pM\xd5\x14\xa2\x15\xb5\xfa\x1f\xf4U#\xd9h\x94\xa1\x9fPTg\xaa\xec`\xea\x7f\xec\x11\x11e\x96T\xd9\x83\x15:\xfa\x94\\\xea\x12\x1e\xd4m>@\xf8\xbe\x97C\x84\x00\x1b-M-\xb3\x1e@\x13 f\xb4\xcd&\xb0\xacV\x99\\\x1b\xc4\x0d|\xaaEXD\xbf\xa4\xeby\xd9\xf6\xfcj(\xba\x7f\xc0\xa43%\x85\x9f\xf9x\xec^\xc1\xa6\x96\xe4\x97\x1e\x83Xm\xbd\x87\xa7\xac\x96\xcb\xe1\xaa\xe1\xa9~\xa6\xdb\xbc\xd7_\xdb\xa9G\xd1\xfdE-}\xdc\xf4\x8c\xf3\xba \x8c\xc5T\xa9\xafd7b\x0eV\xb7\x15\xa3G\x04\x9b_\xf8}\xf6\x1cd\xf7v\xf3\xe1\xfc\xfa\xfa\xe2\xdd\x9fP\xfd\xf9\xfc\x9c\xf3\xbf\x9e_\xfd\xed\xfd;\xff\x8d\x9e\x9f\xf0\xf3\xfb\xb7o\xdf\xff\xaf\xf3\xab\x0f\xe83\xfe\xf2\xf1\xfa\xe3+\xff8\xf9\xe0\xf0\xf3w\xd7\x17\xef\xdf\xf9\xfc\x0fo\xb4\xd4\xba\xe3\x92\xee\x04\xa3\xaa\xdf\\\xd6\x8d\xc6\xbc\x9f|!\x7f \xe7\x9fYw\xdf6l\xa0n%>\xc2[\xfb\x9d\x14nC\xa1\x1b\xf4R\xe1Tj\x018\xeb\xc6\x9cQj\x00]\xf2\x9a\xea\x16\xeb\x0bZ\xd7\xd8\xee\xf9^f&0E(zQ\xddP\xf4ew\xac\xddm\x98\x99\x03g\xcb\xb1#\xd5\x9e\xdd\x17w^O\xaa\xc7\xe2\xc3aY\xf1\x12kV\x85\x9b\xe7\xbc\xdeFz\xbe\xd7\xfa\xb2\xf2\xf8\xe8\x17\x8ed\xeb\xd9\xb2\xe6l\xf9\x8d\xcbi}\xe5\xbc\xadz\x0e\xaa\x10 N\x8c\x96\xba\xfd\xd2\x94\xc8:\xf6^\xb8\x89\\\xcczGY\xcbj5\x1cS7\xaa\xd2\"\xdc\xd5m\xbb\xe7\xd3\xad\x9dg\xee(\xd1\x18%\x1a\x8b\x0fP(\xd1\x18%\x1a\xb3-!\xd1\x98\xcd\xde\xe5g\x1a\x9b\xe0\x80\x94j\x8cR\x8d\xb9~\x8f\xbc`\xe3\xfd\x822J5F\xa9\xc6\xdcF\xa9\xc6\xa4Q\xaa\xb1C\xa3Tc\x94j\xccg\x94j\x8cR\x8dI\xa3Tc\x94j\x8cR\x8dQ\xaa1e\x94j\x8cR\x8dQ\xaa1J5F\xa9\xc6(\xd5\xd8\xd4\xfc\x9f\xb6\x94j\x8cR\x8dy\x8cR\x8dQ\xaa1J5\xf6\x90\xa9\xc6&\x99\xa4\x14\xc5ul\x1e\xac\x83\xaf\xf9H\xc6\x991\x7f\x01\xa2\xdc:\xe1\xc0 \x8a\x9d\x9a\xbe\x8bRb\xa5\xe5\x1b\xa2\x94X'\x0cn<\x99\x13\xa5\xc4*\x11EJ\x89E)\xb1~\x9d)\xb1:V\xe9\x94W\x9f\x7f\xe7\xdf\xdaY\x8c?\x02\x19\xb0\xae\x8c\x93Ky\xa0\xd2\xd3z\x98\xa5\xabT\xc7\xa8\xc1\x8cF\xd2\xcdU\xb4\xc3I&\xac\x99\xd3'\xa6\xf6\x8f5\x19\x96\x15#\xdb\xbc\xae \x8a\x92D\x93ZEe\x14\x0cGk\xc4\x90\xa7\x13C)\xad\x18\xb2\xf4\xe2\xf0\xe3P\xa9\xbc\xe7\xd1\xe7\xe6$\xba1\x9cP;\x86\xd3\xe8\xc7\x90\xa8!C\x9e\x8e\x1c\xeb\x82qZ2\x94\xd5\x93!AS\x86t]\x192\xb4eD\x97\xf9\x03B_\x86\x12\x1a3\xc4F\x81\x80\x1f\x9e!\xf4fH\x1c\xc5%\xeb\xceAoR\x93Fh\xcf\x90P\xca\x82\x1a4$\xe9\xd0PZ\x8b\x86L=:\xdc\xae\xfa\xb8&\x0d\xf9\xba\xb4\xd7\x9f\xb8bL\x9b\x86b\xfa4\xe0eV\xc0\xe8\xd4\x90\xa6UCL\x0c\xca\xd4\xac\x01\xe170\x11]H\xbf\x86\xac\xe0\xe2ul@\xd42C\xcf\x86\\M\x1bpQ=Z\xdb\x06\xbc\xbe\x0dH\x8d\x1b\xd0:7\xe0\x82\x9e\xaewC\x92\xe6\x0d!\xdd\x1bJi\xdf\x90\xaa\x7fC\xa6\x06\x0ei:8 nBH\x0f\x07\xcc\xf9x]\x1c\nj\xe3\x80)Z\xe0)+\xa7\x93\x03F+\x87#\xf4r\xafCq`H3\x87\xd2\xba9D\xb5s\xc8\xd5\xcf\xbd\xde\xd4\xf7ox*\x00\xa1\xa3CXK\x87,=\xdd\xeb*\xa8\xb3C\xae\xd6\xee\xf5\xa6\x86\x91\x81I\xb7r\x9a;\xa0tw\xc8\xd0\xde!M\x7f\x87\x1c\x0d\x1e\x92ux\x08w#\x10\xd1F!A\x1f\xc5j\xf2\x90\xa3\xcbC\xaa6\x0f\xe1\x8a\xe7h\xf4^g\x96\x02\x8e}dpZ}\xf0\x81h\xd6a\xbd\x1e\xcaj\xf6\x10\xd3\xed!\xac\xdd{\xcf\xc9\xd5\xf4\xa1`\xdbM\xd0\xf6!I\xdf\x07\xef\x08\xe54;\x11\x1by\xcdq\xce\xb0E\xa0\x16\xe0\xa6\xfb$V\xbc\xd2\x19)\xc6\xed\xa7|\xdeh\x1f*\xda\x87*\xae\xbc\xd3>T=\xedCeY\xc2>T\x03wS`Y>\xed@E\x0b\xf4\x9d\xbf\xd3\x02}\xcbh\x81>-\xd0\x1f\xad(\x98\x91\x02e$\x01\x19\xb4@\xffX\xf8\"\x03\xbc(\x02]\xa4\x03\x17\xb4@\xff\x18\xc0\"\x05\xae\xc8\x00+h\x81>-\xd0\xa7\x05\xfaX0\xa2(\x14\x91\x03D\xd0\x02}\xdfaQ\xf0!\x01z\xc0,?O\x81\x1dh\x81>-\xd0G\x80\x0b\xb4@\x1f2\xe1\x84\x040\x81\x16\xe8\x17\x00\x0f\xa2\xd0A.p\xe0}\xd7\xd0\x02\xfdC\xa3\x05\xfa\xb4@\x7ff%\x16Kca\x80d\x10 \x02\xa0\x05\xfa\x99b?-\xd07v\xba\x05\xfaj\xbf\x9eI>l\xbd\x96\xd7\xb3\\\xdd\xf2}\xaaE\xfb\xd6\xd6!j=\xb3\xaf>\x97\xa2\xa8\xf5\xf2\xb1\x94v\xdfO>\xcbCJ\xffS3k\xfc\x03|\xec\xc5;\xdc[\x83\xe9K\xc1\xa4V_\xb7r\x03\xaav\xc8\x9f.G\x0cbh\xad\xee_\xbd\x94\xbb\xa6\x0c\xf3\x13\x95\xeaO\xcef\xf1H\xdd\xd4d\x16\x11\xda\x8c+%Z\x9e\xa9,\xda\x8c\xablp\xe3\xdbH\xd1f\\%\xa2H\x9bq\xd1f\\\xbf\xe5\xcd\xb8|I\x81^\xfcb\xfe)\xfe\xae\xae\x13J\x11\x14\xde\xa6K\xce\xe1\x8b\xbf\xa8\x1cA\xc3X\xc8\x99!\xe8\x89\x89\xc6#O\x10T\x14\xd8\x8c\xa6\xf9\x89jLx\xcc0+\x8b\x8f'[O0W\xcfI\xca|D\x96\x9ep9C\x19z\xe2\xf9y\x8e\xc9\xce\x13\x10\x17\x83M\n\xa2\xcd\n\x10\x00\x17\xe2>\x01R\x04T\x96\x85q\x05\xfc%e\xe3)\x8arEa\xae\xd28\x17\x1e\xe8*\x84t\xe5A]\x01w\x89\xf9w\x8e\x04\xbbJ\xa3]\x89pWa\xbc+\x0d\xf0JD\xbcBm8#\xe3NQ\xcc\x0b\x05z\x15D\xbd\x8e\x85\xbd\xb2p\xafB\xc0W\x0e\xf2\x15p\x86\xce\xb0s\x02\xec\xebt\xe0\xd7I\xd0\xaf4\xf8\xab8\xfe\x85\x05\xc0\x8a\"`x\x08,\x19\x03K\x07\xc1\xa2]!.\x97\xce\xd10X4\x8f\x0ej@\x85@\xc2RF]\xc9XX\xe8%\x88\xce\x9e\x83+_A8,\x05\x0f+\x0c\x88\xe5!b\xa1\x16\x84\xca\x98\x93\x89\x89y\xbcqT\xb6\x9c2\xa8\x18\x9awB\xe0bI\xc0X,!D\x0e4\x16\xf3\xe9U\x81\x0b\xa1c\xe9\xc1\xc4\xe3c\xb1\xbae d\x99\x10\x19\"\x8eG\x83dh\x94\x0c\x07\x93aq2D\x90\xd3\x91\xb2\x14\xa8,\x98\xff\xa6\x08X\x96\x88\x96\xe5\xc1eIxY,\xe8\xe1\x9c7\x91s\xf1\x98Y9\xd0,Z(\xef\xf3S\x0e7C\x00g\xf9\xc8\x99\xc7\x1d\x8ff\xb8)\x8a\x9d\xc5\xc0\xb3L\xf4\xcc\xe3+\x9e\xd9\x06\x81\x9fE\xb2\xda\x94F\xd0\x8aCh~\x0c\xad$\x88\x86A\xd1\xd2a\xb4$\x1c-\x03HKE\xd2\"\x99j\xc2\xa5\xc3BBX0-\x03MK\x84\xd3\x02\xd5\xcd\x01\xd4<\xae\x10\xb9ir \xb5@\x93\x8f\xe7\xa5)\x08\xaaEs\xd2\x9c\x02V+\xd5\x16\x13\x80\xb5\x14d\xcd=>\x08\xe5\x9b\x89~\xfa\xa7\xe5\x9a)\x95i\x06\x95#\x02\x95\"b\x96\x14b\xe6\x8f2DP\x86\x08\xd7\xef\x94!\xc22\xca\x10A\x19\"F+*!\xa6\x08\x88I\xf2!e\x888V4\xcc\x90\x0c\x8b\x08\x86\xe9r!e\x888F&L\x11 \x0bK\x848\x81\xb0\xa0<\x88\x15\x07\x1d\x83w\xca\x1015\x84\x1c\x88\x1d%%K\x81\x94!\x02%\x00\xe6\xc8\x7f\x94!\xc2wXT\xf2K\x10\xfc0\xf9\x0fR\xc4>\xca\x10A\x19\"\x10\x92\x1ee\x88\x80L\x11/A\xc2\xa3\x0c\x11\x05$\xbb\xa8`\x97+\xd7y\xdf5\x94!\xe2\xd0(C\x04e\x88\x98Y\x89\xd5\xfaX!.Y\x86K\x12\xe1(CD\xa6\xf0F\x19\"\x8cQ\x86\x08c\x8f9C\x84\xb524~\x07\x86ep\xa6\xf0G\x15\xf5P_s\xad\xcc+\xb24\xb6c\xeb\xba\xe7\xacc\xcb\xe7\xc3\xf1\xfeu\xb0\xd6\x9c\xc7\xd5p\xe2\x988\xdf\xbd:\xd6\x1c7\x06I\xbc\xed\x07G\xa68\xfa\x0f\xb3\xc5\xb2\x07\x17\xd1\x87=\xe2u\xb3\xa6\xc87\xb3\x80\xda\xc6\x1f@\xc0\x8c.\xbeM\x9a\xc0\x0b,f\x8d\xef\xf4\x01\xae\xceK\xf4\xf9f\xb9k\xdd\x1f\xae\xcd\xf5\xfa\x1aC\xee<$V\xdd\xd0\x8aX\xcc\x9aX\xe7\xaa\xd8\x83F\xef\xbe%wm\xc7\xef\xaafy\xe3\x96\xdb\x95!\xee\x8a.\xc1G\xa9\x0f\x8fn\xa5\x8ao\xad\x16V\xefg+\xb8Nw\xcb\xba\xdfm\xaa\xfb\x9bc\xe7zu\xa1\xfe\xaaRb\x88W\xd3\xa8\x86\xeak\x98D\x0c*YI\xach\xe1fu\xd8Y\xcc8\x12E\x13(\x94$\xd2f\xe6\xcb\x9a=\xf3\xae\xb3\xbe\xcb\x18mwD\xdb\x1d\xc5Z+mw\xa4\x86\xf7\xb4\xdd\x911\xe7vG\x07\x8f\xa1F\xd9\x0e\xc6E(\xaa\xcd\xe5\xeb\x85k$'\xee\x14\x11mD\xb4\xc5^\xf1\xf1nA\x19\x11mD\xb4\xb9\x8d\x886iD\xb4\x1d\x1a\x11mD\xb4\xf9\x8c\x886\"\xda\xa4\x11\xd1FD\x1b\x11mD\xb4)#\xa2\x8d\x886\"\xda\x88h#\xa2\x8d\x88\xb6\xa9\xf9?m\x89h#\xa2\xcdcD\xb4\x11\xd1FD\xdb\x83\x12m\x11\x96\xe8\xdbsa\xb4\x81N\xda\xee$\xb4\x81\xce \x83\x1bo\xa3\xb4\x81N\x89(\xd2\x06:\xb4\x81\xceox\x03\x1d\x17%\x8c\xdf;\xe7\x00\xcbK\xe1\x84\x13\xf9\xe0'&F\xffy\xf0\xe0\xa2\x8c`\x14\xf2\x8d*\x1a\x05\xc8\xb6rpo\x10\xd3\xfc\xc6\x1b\xdd`\x90^\x0c\xd0\x1b\xbd\x03\x05a^\x04\xca\x8b-N)\x8c7\xd4x\xca!\xbc(\x80\xd7\x89\xef&\x82w%\xb9;\xc2\xee\xb4\x11vG\xd8\xddh\x84\xdd\x11v7\x1aaw\x9c\xb0;\xb7\x11vg\x8c\xb0;\xc2\xee\x08\xbbC\x8e\x92\x08\xbb\x1b\x8c\xb0;\xdb\x08\xbb#\xec\xcea\x84\xdd\xb9\x8e!\xec\x8e\xb0;\xc2\xee\x08\xbb\x9b\x9a\xff\xd3\x96\xb0;\xc2\xeeR@\xc2\x0e\x86m^W\x10\x95\xdcz^5\xcb\xaa\x93\xc4E\xefL\xc7\x06\x11)\x10Br \xc4J\xa7,&\x0bB0U\x19D5\xd3\xd1\xe2t\x832\x07\xe3 \xe2\x03u\xd3\xd7K6\xe9\x10\xbc^\x94\x8fh\xa1\x83Sy0\x96\xe5Z\xfcgZ\x1c\xefIv\xf3,V\x80\xe0\xe6\xf3\x00O\x8d\xac\xf3\x03\x9c\x7f\xe5\xac\x11\xafD\xab\x1c\xb3@\xfa\xf7yU&_\x80\x95\x18\x9f\xd6\x1c\xaa\xddn#eX_\xae\xacx ?\xe8\x86~\xa5.\xef\xdbEO\x1f\x15\x8b\xaf\x0d\xd4\xee\xea\xc5'\xf1\xf6o\x02\x9a\xaf\x9a\x07\xef\xda-,\xeb\xd5\x8au\xac\xe1C\xfbqO\xe8\xc5j\xf4\xb6\xee\xa5\x9e7N\xe6\xeb'X]F\x8d%\x1a\xf6e\xbc\x8c(\xaf\xef\xf9\xab\x17\x9fD$\xea\xce|\xdd\xf9\xaa\xd26\x8e\xf2\xea\xb2\xea\xbex\x12Z_'<9\xd1\xbd'\xa1r\x17gH\x141\xa2/~u\xf9z\xe6\x8b\x98\x11bFb\x9d\x1cFs\x00bF\x88\x19\xf1\x1eI\xcc\x884bF\x0e\x8d\x98\x11bF|F\xcc\x081#\xd2\x88\x19!f\x84\x98\x11bF\x94\x113B\xcc\x081#\xc4\x8c\x103B\xcc\xc8\xd4\xfc\x9f\xb6\xc4\x8c\x103\xe21bF\x88\x19!f\x04\xcf\x8c$\xf0 \xfe\xac\x10\x96\x9c\xeeN\xfd\xa0\xd4:\x17\xb9\xa0?\xe7$\xa1!\xfe\xa16s\xd1\xea\x9e\xf8\xfe\x8a$~\x90G\xea\x9f\x1e-\xcc\xe0\x05\x0e\x1eBC\x8a\xa6\x86H\x9aC\xc1\xec\xff\x86\xca\x03!\x89\x83^M\xa38\xdd\xc5\x8a{\x92\xfd\xdb\x92@\x88 \x04\x81\x88i\"\xfc\x80\x00\x1f\xf0\x17\x0d\xccq%\xc3\x0e\xc19k\x1c\xe8\xa0K\xe5%\x18\xaa\xdbv\xcfe\xf2\x87i\xa71sE;\xb0\xd1\x0el\xf1&N;\xb0\xf5\xb4\x03\x9be\xce\x1d\xd8\xdc\xe0\x8e\x1e\x80`\xc9\x1d3\x12\"t\x87\xd0\x1d\xc7\xef\x84\xeeXF\xe8\x0e\xa1;\xa3\x11\xba\xc3 \xddq\x1b\xa1;\xc6\x08\xdd!t\x87\xd0\x1d\xe4(\x89\xd0\x9d\xc1\x08\xdd\xb1\x8d\xd0\x1dBw\x1cF\xe8\x8e\xeb\x18Bw\x08\xdd!t\x87\xd0\x9d\xa9\xf9?m \xdd!t\xc7c\x84\xee\x10\xbaC\xe8\x0e\x1e\xdd9q\xba\x97\x08\x99c\xb9M\xcf\x9d\x92\x9a\xf5\x856[K\xdb\xc9\x8a6[;ap\xe3m\x946[+\x11E\xdal\x8d6[\xfb\xb5n\xb6\x86\x85j\xe5\xeej}|o5\x85\xde9\xf7S\x93?\xddU\x9f\xcd;l]\x7ff\x0d\x0c\xe3\x02\x07O\xfb\xc4\xd4\xf9Q\xe3\xb4E\x89\xbe(\x14\x1b\xd5&\xf0\x1cZ \x1c\xf6\x1b\xefy\x96\x80\xc1\x06 \xd8h\x0c\x93\x00\xd8(\xfe\x8a\xbd\x9cW#* \xbeb\xb0\xd7\"\xd0+\x02WK\xa3\xd5\x08V#X\xcd\xf5;\xc1j\x96\x11\xacF\xb0\xdah\x04\xabq\x82\xd5\xdcF\xb0\x9a1\x82\xd5\x08V#X\x0d9J\"Xm0\x82\xd5l#X\x8d`5\x87\x11\xac\xe6:\x86`5\x82\xd5\x08V#Xmj\xfeO[\x82\xd5\x08V\xf3\x18\xc1j\x04\xab\x11\xac\xf6\xa0\xb0\x9ah\x0b\xe3]\xd2*\\\xb1\xed\xbdR\xc1\x95A\xa7\x8fW\xa1tQ\x8b\xefD\xe6\x87\x12\xe4!!\x10A\x1e\xe0!\x11\xd4o:\xab\x97\x99\x83\xe1U\xb7\x1eP4\xd7~eOL\x0c\x1e-\x8d`\x05\xc56\xfe\x00\xc2]\x94cH\x9a\xb8*\x90\xdc\xcb\xdcw\xf9\x16\xb8e\xac\x81E's\xb78\xbd>@\xa9U\xf1\x9cGk\x06\xe7\xa6^z\xa2\x1d\xbe\xc7\xca\x82\xfb\xc5\xc5Dfcqh\xc3\x8fmh\xa2\xc4y\x13\xbc\xc2\x93W\xc1V\x86\xb8\x1b\xba8\x16C\xf1\x173\xc5\xc7y\xb5\xb8SZ\x85U8\xcf-\x90\x0c\xb2C\xceW\x86/\xc8\xab\xe5\xb2c}?\xbd\xed\x9e\x90\xab>)|\xcd\xa37\xf9\xe3\x11\x8d\x1dp\xd5\x03\xe4\\\xad\xb1T\xbd=\xe8\xcc=\xe9\x1a\x98\x85(\xad\xbbC\\{\x87\x0c\xfd=\\\x81\x8a\xdf\xa15x(\xa5\xc3C\xa6\x16\x1ft(\x82\x8b\xd6\xe3\xe1xM\x1e\x92u\xf9\xa0+\xad\x17&i\xf3PZ\x9f\x87D\x8d\x1eRu\xfap\xcb\x1e4|\xacV\x0f\xa5\xf5z\xc0i\xf6PR\xb7\x87\xa3\xb5{\xc8\xd3\xef\xa1\x94\x86\x0fY:~\xf8q\xa8z\xb6\x8ck\xf9p\x1a=\x1fN\xa8\xe9\xc3it}H\xd4\xf6!O\xdf\x8fu\xc18\x8d\x1f\xca\xea\xfc\x90\xa0\xf5C\xba\xde\x0f\x19\x9a?\xa2\xcb\xfc\x01\xa1\xfbC \xed\x1fb\xfa?\xe0\x87g\x08\x0e\x00\x12Gq\xc9<@\xd0\x9bd\x05\x10L\x00$\x94\xb2 \x1b\x00I|\x00\x94f\x04 \x93\x13\x08\xb7\xab>\xce\n@>/\xe0\xf5'\xae\x18c\x06\xa0\x187\x00x\xf9\x1b0\xfc\x00\xa41\x04\x10\x13\xe92Y\x02@\xf8\x0d\x08\x04\x85\xb8\x02\xc8\n.\x9e/\x00D-38\x03\xc8e\x0d\x00\x17\xd5\xa3\x99\x03\xc0s\x07\x80d\x0f\x00\xcd\x1f\x00.\xe8\xe9\x1c\x02$\xb1\x08\x10\xe2\x11\xa0\x14\x93\x00\xa9\\\x02d\xb2 \x90\xc6'\x00\xe2&\x848\x05\xc0\x9c\x8f\xe7\x15\xa0 \xb3\x00\x98\xa2\x05\x9e\xb2r\xfc\x02`\x18\x068\x82c\xf0:\x14\x07\x86X\x06(\xcd3@\x94i\x80\\\xae\xc1\xebM}\xff\x86\xa7\x02\x10|\x03\x84\x19\x07\xc8\xe2\x1c\xbc\xae\x82\xfc\x03\xe42\x10^oj\x18\x19\x98t+\xc7B\x00\x8a\x87\x80\x0c&\x02\xd2\xb8\x08\xc8a# \x99\x8f\x80p7\x02\x11\xcd\x1a\x12tk,+\x019\xbc\x04\xa42\x13\x10\xaex\x0e;\xe1uf\x91 \xd8G\x06\xc7P\x04\x1f\x88f\x1d\xe6(\xa0,K\x011\x9e\x02\xc2L\x85\xf7\x9c\\\xd6\x02\n\xb6\xdd\x04\xe6\x02\x92\xb8\x0b\x08\x8cP\xcc2k\xa9r!tP)\x16\xd6ms\xb3\xac\xf81\x92\xa0\x99\x07\x11n\x9e\xf3z\xeb\xbb5\xc32\xf0\xad\x1cB\x1eH\xc9_\xaa>\xa0\"\x0f\xab\xa8\xe5\xb1\x87\xab\xa8\xc5kI}3\xd7\x0bw\xadi\xd7 \xda5(\x9e\x1d\x80v\x0d\xeai\xd7 \xcb\x92v\x0d\x92\xc8\x10>\x0f\x83\"\xa7(\x11\x03%bp\xfcN\x89\x18,\xa3D\x0c\x94\x88a\xb4\xa2\xa0G\n\xe4\x91\x04xP\"\x86ca\x8e\x0c\x90\xa3\x08\xc4\x91\x0epP\"\x86c\x80\x8d\x14X#\x03\xd4\xa0D\x0c\x94\x88\x81\x121`A\x8b\xa2\x90E\x0e`A\x89\x18|\x87EA\x8a\x04\x88\x02\x93f \x05\x9e\xa0D\x0c\x94\x88\x01\x01BP\"\x06\xc8\x84\x1d\x12@\x07J\xc4P\x00d\x88B\x0c\xb9\x00\x83\xf7]C\x89\x18\x0e\x8d\x121P\"\x86\x99\x95X\x14\x8f\x85\x0b\x92\xc1\x82$\xa8\x80\x121d\xc2\x03\x94\x88\xc1\xd8 \x131xV\xf9[.\xd2s\x1a\xa4\xa6_PKv\xcf\x8c^\xe2+\xfe\xec\xfb9W\xf38ho>\x9d#G\xdbpi\x18Y\xbaEP\x9f\xc8\xd6$2u\x08[o\x98\xf8;\xfcD\xcf\xd0\x1b\xb24\x86\x99\x960\x0f\xcfLW\xc8\xd1\x12f\x9a\xc1\xfc\n\xd3\x0b\xe4j\x06\x8360u\x7f0\x98\xca\xd1\x06|\x1a\xc0Q\xf3\xfe\xa8\xb9~\xec\x9c~\xf6<~\xee\xdc\xbd{\x8e\xbe\xd0\xbc|\xc9\xb9\xf8B\xf3\xef\xb19\xf7\xbcy\xf6\xc0|z\xfa\x1czp\xae\x1c1?\x9e;'\xee\x99\xfb\xce\x9c\xef\xce\xd9wh\xf6\x9a\x9c\xbd\x0d\xe5\xb3a\x9d\x13z\x15fNl\x8f\x13\xd8\x87A/[7\xcf4\xfe\x98\x7f\xe9 \xa1G\x08\x88\xb3\xf2\x92|\xecM\xaf\xa8},\xd5\x0bP\xc5pr\x96|k\xd7=\xac[\xb9\x9bR;\xec{'\xbf\xb6\xeb\x95u\xa2\xec\xfe6};\x06\xa8p\xb2\xeeq\xc7\xa3\x19\xf7\x8ab\xeb1p=\x13]\xf7\xf8\x8ag\xdaC\xe0\xeb\x91,{\xa5\x11\xf6\xe2\x10\xbb\x1fc/ \xb2cP\xf6t\x98= g\xcf\x00\xdaS\x91\xf6H\xe6\xbcp\xe9\xb0\x901\x16l\xcf@\xdb\x13\xe1\xf6@us\x00w\x8f+D\xae\xbc\x1c\xc8=\xd0\xe4\xe3y\xf2\n\x82\xee\xd1\x1cy\xa7\x80\xddK\xb5\xc5\x04\xe0=\x05y\xf7\x8d\x0f\xd2\xf2\xdf!\xb2\xdfEg\x0cp\x99\xef\x8e\xc9{wl\xd6;D\xbe\xaa\xb4tU\x94\xad\x8a\xb2U\xb9~\xa7lU\x96Q\xb6*\xcaV5ZQ92E\x8cL\x92\")[\xd5\xb1\x02d\x86\xfcXD|L\x97\x1e)[\xd51\x92c\x8a\xe0XXn\xc4\x89\x8d\x05\xa5F\xac\xd0\xe8\xf8\x10\xa0lUSCH\x8b\xd8QR\xb2\xacH\xd9\xaaPbb\x8e\x94H\xd9\xaa|\x87E\xe5\xc3\x04\xf1\x10\x93\x8b)E8\xa4lU\x94\xad\n!\x0fR\xb6*\xc8\x14\x04\x13\xe4@\xcaVU@\xfe\x8b\x8a\x7f\xb9\xd2\x9f\xf7]C\xd9\xaa\x0e\x8d\xb2UQ\xb6\xaa\x99\x95\xc8\x1c\x84\x15\xf5\x92%\xbd$A\x8f\xb2Ue\x8ax\x94\xad\xca\xd8 \xb3U\x89\xb60\xde%-\xad\x0d\xebB\xbfu\xde\xaaa k\xbc\n\x0fS\xd4\xd8z]\xf1\xc1\xbb\xb9\x7f\xf1\xf9w/\x16u\xb7\xd8o*^7\xeb\x17\xbf,Y\xd3n\x03\xcbr\xad\xa9\x81\xd7\xe3y\xb2fF\xb1\xa9\xb6\xc3b\xf2\xf6\x13kz\xb0.`\xde\xe6\xdb\xaa\xfb$5\xdc\xc1\xdbd\xa2[\xad\xe7\x95e\xd1\x7f\x9b,\xe9\xb5\xae\xac\x7f~\xb4\xebz\xad\xba\xdf\xa8\x90'\xc8\x84Aq\xd7\nB\\\xe1=\xec\xb9\x94\xe6k\xdf\xc3\xab\xcb\xd7\xf3\x1e\x87\x94_R~\xc3\xd3\x9e'\x984\x0d\xbd;\xec.\x01\xe6\xcdo\xd1\xd6\xba\xd3\x98\xe6\x0b\xb0\xfb\x1f\xf5\x0c\x96\xee\x83\x87\xe2\xd5\xe2\xe3\xae\xbba_wm\xc3\x1al\xbe\x94\xf9i*/\xcd\xaaZ\xf0\xb6S\xf3\xda\xbc\x85]\xfbE}C\x99\xc3\xcd/\x13W\x8b\xb6\xf9\xcc:~\xa8\x1b\xea\x8ak\xf9s\xc9zQ\xbb\xd9\xe0\xea\xd8\xfc\x19\xa5\xdfL2eH\xfc\x9dt-3\x8b\xd8\xaf \x95kDWY\xbf\x86#\xef\x94k+'\xcb\xa3}\x9b\xc8z\x15~\x8f\xc8\x8a\xa3\xde \xfa\x9d\xa1\xc2M\x98\x10\xbd,\xfe?\xf6\xde\xaf9n\\\xc9\x13}\xefO\x91\xb7\x1f\xf6t\xcf\xba\xd5qf\xee\x93\xe3\xce\xc4\xf5\xb1\xe5n\xed\xb8m\xad$\xcf\xc6\xec\xc6\x84\x0eU\x05\x958\xae\"kI\x96m\xed\x9d\xf3\xddo\x10 \x90 \x90\xf8C\x00\xb2\xdd=\xc8\x97v\x97\xc8\xc4\x1f\x02 \x7f\x99?\x10\x7f/\x8b\x85\xd7,\x96\xc5\"y\xb1PBK\xc6?\"\xef\xd1\xd9]\xd5\xb33^\x8d\xb3\x8f\x7f\xbecC\xf5\xe73\xe5:R\xd4bL\x01s\xd0/\xae\xfa%\xebJ\"\xbdv\xda\xbe\x1c\xa4}Y)\xfbH\xc2>|8\xb0\xe5\xda\xa9\xd8\xde\xf6,D{\xb3\xba4\x96=\x93\x10m\xd9\x05\x9c\xb7.C\x0f,flN2<\x83\n/\x0f\x11\x9eB\xd0\xa6\xb7^\xa7D\xb3\xb73+Q\x1dAS\x97JRg\x10\xd3\xa5\xd2\xd2\xf1G\x96\xd3\\U\xbf\xa4\xa4\x13Lp\xf1\xdd\x9b@%\xa7\xd0\xc7\xa93\xd3$\x92s\xd0\xc8\xd13\\\xfa1\xf12g\xbc\x12\xda\xf0M\xben[\xe8\xdb\x03\xbb\x9d\xd6j\xd27\xaf\x98j\xf5\xc3\xa9ny\xf4.\x8a\xdd\xecT \xf5E\xd7\x05\xd8\x8b\x1b\xab{\x84\x91\xa4\x0d\x11\xaa\x14\xa2?8\xff\x1c\xb2\xb4\xa0\xe9\x0e^[\xcc\xbb\xe4s,0\xc9w\xc3\xe7\xb8\x0f\xde{\x07\x1f\xebN\x84\xc7I\x12\xbeE\xadE\xff\xf3\xae\x99Ok\xd0\xb1=\x1f~\xe2\x8cQ\x1d\x8f\\_o\xed\x08Y\xec\xa8:\xb8'N\xbd\xca(\xe8j<\xb2\x89\xb7J\xf6\x16o\x1e\x86\x95\xb7\x9bZ\xc9\xde\xdaV\x83\xe2\x8f\x90\x9dW\x0d\x95\x96\xbf\x85gw\xdc\xb0\x8c\xcb\xb6\x8cC\x1d\x15ku\xd2\xce\xe4\xf4I\\\xe9\xfb\xe5!\xda\xe7\xf8\xb9\xc1\x0e\x9e>\x1c\xc7\xbb\x7f`\xbb3\xb8\xf9T\x0f\x03\xeb\x9e\xc1/\xf5\xf0\xeb\xe9\xee\x19\xb0a\xa3\x06\xfd\x8c\xfd\xc7O\xab\xab\xca{/\xde\x92\x11\xf6j\xd9j\xb1\xe3\xe9N\x16\x0d\xe2s/\xaa\xd0\x0f\x8b\xdc=\xa1\xfez\xfcU\xee\x03\x89\xce\xd4*\xc6\x9a\xd3A\xad\xffO\xf0\xe2\xf2\xf2\xcd\xc5\xcb\x177\x17\xef\xde\xde\xbe\xb9x\xfb\xcf\xb7\xd77/n\xceo/\xde^\xdc\\\xbcxs\xf1?\xcf_\xdd\xbe\x7f{}y\xfe\xf2\xe2\xf5\xc5\xf9\xab\x90W\xff\xe5\xfc\xea\xe2\xb5\xfc\xfd\xfa\xe6\xc5\xd5M\xc4{\xe7WW\xef\xaeV\xbfu\xfd\xfe\xe5\xcb\xf3\xeb\xeb\x90\xf7n.~;\x7fu\xfb\xee\xfd\xcd\xf4\xb0t\xd2\xc5v\x89}\xbf\xba\xb6\x97\x9f\xc3\x0b\x9cq\xe3\xe2\xf6\xef\x18\xff\xbc\xd8^\xf3\x03\xbf\xc8\xf2\x82\x80r\xa8Ob\x16\xd2\x0f\x15\xbf9\xe0\x8e\x8d\x0b\xedG\xd6\x19w\"\x84\x15\xc0\xbf\xddB=w8\xb2\xedhD\xe5\xb9\x1d\xd5\x8b\x89p\xec\xda\x0d\xeb\xfb\xf5E\x89\x0f\xbe(lY}\xc5\x1b\xbdL\xf6\xf1\x8f\x8c\x85\xd6\xa1>\x8c\x1b\x9f\x13_\xe8\xf6\x0c>U5\xf7\x8bI\x7f\xb0\xda\x1eQL\xdbU\x9b=\xbb\xedT\x9f\x0b\xccS\xf7\x1d\xff\xb3\xdc\xadO\x0e%\xe9t\xc6\x9f\x11\xea\x97\xc4\xb5\x87j\xcb\xe4*\x81\xdacl\xa7\xce*l5a\x0e\x16a\xc9\xb7\xfbJ\xee\xb3/^\xcd\x18?\xaf\xba\xf2\xb8\xe8\x08\x9c\x1e\x06\x05sB\xf1\xd8\x85\xd7\\/V\x05\xabQ5\xa2L\xc02\x95w7\xd5~\x7f\xbb\\\xb5\x14\x85/\xab\xfd\x9eX\xbd\xc6_&w\"\xeb\xc6\x8a)\xdf\x80h\xb1\xc3\xbfl\xf7,[\xd74p\xf5\x12\xd8\xd7\xb6%\xedt\xfb\xa9a]\xffP\x1f\x15\x9f\x175\xc9\xed\x9d\x04\x81\xf5 s&\xc6\xca=\xb0\xcf\xc0\x9aM;\x1e\x00\xc62\xb0g\xf9\x18\x9f\xeb$;\x9a\xd7\xed\x11\xe8@#\xa5\x99ThP\xb5\x11\x0e\x12\xd9fu\x04\xec\xc7C\\\xf80\xb45\xea%\xd7s\xf1J\x9f\xba\xf3L\xc0\x92\xe69<6\x99QA\xa6\xd4`\xc5s\x88a5\x16\xe7>1T\x0f\xdc\x10u\xedA\xf5%\x89:\xa8vI\xf5\x1er\xc7\xe0|,\xe4.\x9e\xf1y\xbe\xcd\x18g\x12\x1aC}E]af\x84\xe1%\xe7\xd95\xfeM\xed\xbaJ\xc5\x0d k\xea(\x1f\x9c\xd3\xca\x82\xb4\x84\x0c\xe4_\xd9\xe7\x9f\xe4x\x15\xbe\xc3\xd9\x1e\xf3\x83\x0c\x9e]\xf8~\x1e\xf7l\x9a\xaa\xe9\xb0\x13W\x01r&\xa9\xb5\x9a\xf4k+\x85\xc8\xa8\xe4\xb5\x1b\x9f\x11\xcb.\xa1M\xbf`\xe9\xbe\xaa\xf7L\x9f\x1bX\x9b\xd7\xfcO\xcb\x8f\x86\x8fg\xfd`\xeb\xe1\xc9\xa9\x86\xe7\x1c:\xe5]\xb18\xad\xe0Aw\xfcLc}O\xdd\xe4[\x90\xc4\x18\xe3\xf2\xee9\x1c\xd9 0\xe4\xe2!\x94q\xf2\x0b\xcd(\x0c\x06!\x06\xdfY\x98t\x18\xfc\x0c\x99\xafN\xe7\x93\xba5\xb5\xaa\xf7{q\x98\xfdN\xd1\xa5\x1d\x99\x84\x15\x13y*\xf1\x7f\xf9\xb4\x13\x89\xbe\x83\xa0f\xdc\xe4!\xe4\x19_\xa6\x8b\xabV\x18c\xf7\xfb\xf6\xd3l\x8c\xf8\xc6\xa1\x7f\x0e\xe2\x03>\x03\xde\xd9\xe3?Dw\xbc~\xff\xe6\x19\xa8\x83\x980\x02\x7f\xa9\xdb\x95\xfe\xbdC\xf5\xf9v\xcf\x9a\xdd\xf0\x10h*'\x1cAt\xc7T\xe4\xd4t\xbbwNT\x15\xee\xeav\xd7U\xc7\x87G\xba\x15/\x1f\xaa\xbay\xd96\xf7\xf5.\xb8\x1dK\xcf\x92\xdb\xa7\xab\xe8\xa7\x8d0\xdf|\x8e\x0f\xe1\xbag\xfa\xf1\xc6\x83\xa4\xc5\xcf\xca\x95?\xa5cQ\xed\xe6-\xeb\x07\xe9w\x96\x9d[\x89{K\x86Vuh\x89_\xf5r\x82v\xa2\x03\x19\xacc\xddO\xb8\xf3\xbfcY{\x88\xed\x97\x9d\xab'\x86\xa1\x87f\xe2\x89\xe2\xdf\xe1\xaa5EV\xd6\x9d!\x9ek'\x92a\xc7\xe0%q\xf3\xeaD\xb1\xe9Dq\xe8\xcc\\9F\x1fY\x98sb\xf8r\x14^\x1cM\x9b\x85%'\x96\x1b\x87\xbe\x95\x19g\x8eQF\x04\x0f\x8e\x9d\xef&\x91\xe5&\x88\xdb&\x9c\xc3&\x81\xb9&\x96\xaf\xc6\xc6K\x93\x8d\x8d&/\x07M6\xe6\x19?\xdfL\x1c\xcb\x0c\xe5t\xb1p\xcb\xacg\x94\xf10\xc7\x0c!|1\xb1,1V6\x98H\x0e\x18\xc2[\xe2u\xd0\x1a,/\xee\x154\x92\xd1\xc5rM\xb3\xe8\xdf\xef\xfce\xc7q\xb6,\xf9Y\x14u&SK\x06~\x96\x04V\x16s\x94\xeb\x8ba\x02\x03\x8b\x85m%\x85c\xc5I\x0eb\xe1S\xf1\xb2\xa8\x98\xc4\x04\xe1\x8c)\xe6\xbb\x7f\xa3\xda\x1a\xc5\x89\x12\xd2X\x1f\xff\x89\xbdm^\xae\x93\x15\x0c'd\x9b#\xd9L\x9c\x1c&v\xe6\x12\x17_ \xd9 \xa1\xdc$>F\x12\x8d\x87$\x81}$\x80s$\x9ci\xc4\xcb/B\xd0q\x18\xc5\x11\xcf\xf8xC\xd2\xd8B\xc8J)\xbfD\xf1\x81\xd8\xb8?R\x18?\x08v\x8fXN\x0f\x92\xbf#\x81\xb5\xc3\xd8j[y9\x0c6\x8e<\x1c\x1c\xf1\xcc\x1b\x1a\xcbF\x14\xb7\x86\x95G#\x8c=\xc3\xcb\x99!\x0e\xd2>\xa6\x0c\xf1\x98\x93\x1f\xc3 \x8c0K\x0be#p3`\x04\xf2^\x04\xb0],\xaa\x9c\xc0la\xb0X$pWP<\x15q\xec\x14\x14\x13E>\xfe\x89\xf8\xaf\xeb\xe5\x9a\xf01L\xccf\x9a\x02 \xe5\xad\xbfV\xbf \xfb<\xb0n\x9c\x86\xe8 T\xbcm\x8bkU7m\xd3\xf0\xe8\x7f\xb5\xe5\x13\x8a\xf6\x8a\xfb\x0d5\xcc\xf3\xd8\xb5\xed\xbd\x01X_\x8e\xbf.\xab3G\"\xf0W\xdc5\x9b\xf5\x85;\xfc\x8e\xa7\xbbed\xb9\xf5}\xbb\x0e\xb0:\x0e\xc1\x07F\xfa $3:\x11\xc1\xe9H\x84\xac\xceD\xc8\xe9P\x04\x97S\x11\xd2\x1c\x8b\x90\xd1\xb9\x08^\x07#\xc4:\x19!\xc5\xd1H\xf5\x98\x9f\xa6;\xda\xe1H\xe8\xf2Rs\xa78\x1e uN:\xee\xbc\x0eHHwBB~G$\xa49#!\xcd!IOQ\xb2\x92\xd9\xdc\x94\x90\xddU 9\xdd\x95\x10\xe4\xb2\x84\x9cnKp\xb8.!\xd1}I\xcdq\x0b\x15v\x90S\x13\x92\x1d\x9b\x84B\x9a\xf8:\xd2\xdd \x91\x01bN\x82k\xff\xfa\x1f\xe9\x02\xa5\xcc\x9e\x83\xce\xda]\x8f4w\xa8\xa6\xccE^\x9d\xc1-\n\xb9]\xa3@\xb8G!\xddE\xaai3\x1d\xa6\x90\xe84\x05\x9f/\x11\xdcd\xd4^\x07*X\xd9]\xc3\x1d\xa9v\x1d\xc6)9\xc9\xa9\n+:\xc3\xe7\\\x05o\xbb\xbdNVX\xe7h\x05W\x7fD:\\\xc1\xe7t\x05/e\xb4\x8f,\xda\xdaI\xa1NX\x08p\xc4\x02M\n\x9d\xe0\x90\x850\xa7,\xacr\xccB\x88s\x16\xec|\xc9d\xf1\x96g}\xceZHv\xd8\x82\xab\xa2\xda\xafY\x9d\xb7\x90\xe8\xc0\xd5T\xd1d\xcdY]\xba\x90\xd9\xad\x0b>\xcae\x92l9\x8f\x8b\x17r\xbay!\xbb\xab\x17\x82\xdd\xbd\x10\xe2\xf2\x85p\xb7/\x04\xba~\xc1\xc6\x17L\x97\x1e\xea(\xf4\x13!\x07\xba\x82!\xcc\x1d\x0cT3r\xba\x85!\xd55\xac\xe9\" \x8d\xf39\x8b!\xab\xc3\x18\x92\xc7\x83\xd7q\x0c\x01\xcec0V\x1d[\xa6\xc9\xe5\xe9\xee\x9f\xd9\xa3\x9e1p<\xdd\xed\xeb\x0dg\xd5\xa0\xb2+\xa47\xd9\xbc\xd5M\xc4\xa0\x1a\x0b\xf3\xb8n\xa0-\xa6r\xb5,\xe93\xc5\x95[\\\xb9\xc5\x95[\\\xb9\xc5\x95[\\\xb9\xc5\x95[\\\xb9\x93\x14Wnq\xe5J)\xae\\\xafK\xb3\xb8r\x8b+\xd7\x90\xe2\xca\x8d\xf3\x90\x86?[\\\xb9\xc5\x95K|\x84\xe2\xca]Hq\xe5\x16Wnq\xe5\xe6p\xe5^O$A\x9a7\xf7\x81d\x12\x12&\xe3r_\xd5\xcd\x0d\xfb\xac\x1f\xdct\xc2\xa0\xe3\xf8\xdc\xed\xc0>\x0f\x81i\x83V\x8f\xb3,\xd0UM4\x82\x82z\xa9n\x90\xba[\xbf\xcc\x01&\xff \xe1\xcd\x9azC\xfc\xce\xa3\x8do7\n]\x03\xcc\x95\xb4R-\xe0\xf3\x92\x14\x96\x8c`\x9eu\x85G.\x07\x12\x8c\xda\x8f\x83\xc9\xdc\x10\x8a.\xc9\x12\x01\xdf\x00S\xd2\xc4l\xa5\xd2%\xe9\x8c&\x13w\x05\xd1\xf4\xa9\x98\xd1\xfe\xb0\x9a\xbb0\xaa\x86\xdf^\xd3\xfd4\x9e\x0b7]\xdb\xf7?->\x9d\xe0\x9f X2^\xddT\xbb\x95L%\x1d\xdb\xdd\xb2\xcf\xce\xae;\xd4M$\x99I\x06\"\x94\xb9I+\x98P\xc6\x97,<\xc5\xe3\x9fn\xba\xaa\xe9\xefY\xb7\xf6\xde\x91\xedP\xedn\x87\xf6v\xe8\xaa\xado\xb4Q\xe6\x84\x97\xdd\xde\x8co/\x87\x02\x9a\x0f1\x0d\xc6\xa7t\xf6\xc1A\xd4\xb8[\xf8\x1b\xef\xbbv\xe1_\xc0\xfd\xd7\x86\xd5\x1fg\xb7\xceD\xd9\xd9\n?H\xb3\x9dnE\xc2\xff k\xc85\x7fV\x9f\x16\x12Y\x93>$Ap\x88\xb5G\x96A\x9d\x88RV0\xac\xd8E\xff]\xc9\xb6\x19\xb4\xa4\x966?T\xc33~r\x14\x08\x89\xba\xa4\x8d\x9b\x00\xb5\xf3v\xf5G\xb6\xec\xa5\xf1\x9fu\xc7\xbf\x87>\"\xb5\x114W\x08*\xf1\xfd\xc4\x03S]\xee\xd8\xf0i4\x14\xc3'\x8e\x8at\xb6\xe19\xd1[\x06\x8cG\x92\x9a\xd3\xd5\x9bq4\xd3&\xc5\xb4\xab\x8cL\xd4\xd2\xba\x11\xb5\xf0\x9f*p/w\xf9O\xce\xd8\xb1\xd2\xfc\x9c\"\xde\xe7N\xb5z\xb3\x8e\xfd\xedm\xbd\xf90\xb6e\xa5M\xfd\xaa\x06sY\xe7\x00\xa39\xcc4\x91=4\xe2m\xcb\xf0Dj\xdb\x95\xddA0\xec:[D_-\xb1\xb0\x04\x13\xb9\xae\x95\xe5tA^*0\x1b\xc9t*Y\\\x15\x85\xda\x8el\x1c[r\x92\xf5\x1fn7\x9e\xbb\x0d`]\xed_\xf4\x1f^r;\xa9\xd5~\xbe!\x03k\xcf\x81!\xdcqT\xfd\x87\xb9\xde\xb0tI(\x95=\xf0=c\xd6\xca\xfe6n\xdc\x88\xca\x1e\xea\xa6>\x9c\x0e\xf3\x9d?S\x9d\x95\xa5k\xd3\x8e\xc7\x9a\x05\x82\xa1\xf5\xf4\x82\xd7\x8e\xe0\x9f;v\xecXu\xecvW\x19,[\xf1m\xbaD\xa5\xbfT\xbd\xb1\xa0MW#\xef* \xf5q\xe4g\xa6\xe2S\xf4`\xe5\xd0\x80(?\xf7\xc3x|\xa3\x06\xa2x\x88}f\x9b\xd3\x90\xb9Q\xe7\xa84\xb9QX9$.\x80~V{;\xa3}Dq+Y\xec rvy\xac\xce\xc2^\xbf\xc2[\x91\xed\x16\x96(\xa6z\x1b\x95\xbf\xa7l\xc3\xef\x94\x8f\x99\xde\xc1Joc\xa4'\xd8\xe8\x83Oi)\x0c\xf4\xfa\xfd\x11\xe0\xb7!\xc4U\x15\xd5\xb4\xdb_\x0e&X^\xb1\x1ad.(C\x11`\x14\xce\xe4\xa8\x0f\xb6\x0e\xc9\x87\xb9\xd5\xa3\x95\x9a\xb2\xa1\x1f9\xcf\xe8\xb4\x8cLzT\x1an5\xbb]A\xd7\x03?\x0f\xd6\xcdn\xaf\x1b\x15b1[?\x16\x82\x17\x8b\x95\xa7%y\x02\xd3?J\x90\xe9\xa3N\x9e\xe0\xb2>\x960#\xea\x14\xba^\x0f5p\x92\x8e\xa7\x8a\x1e\xf5\xa0\n\xc27\x17\xd5e\xba\x03\x14\xec\xcd\xfc&{7\xc9A:\xca]\xddFu\\\xd6V\xa4\xf2]\xc3\xb4\xfd\x89jK\xfeK\x80L\xb8+\xcde\xa1iS\xcc\xa9\xf6\x17\xc5\x1b\x00\xb4\xfb\x022\xb7,\xd5\x9d\xa1\xa9\x93V\\\x9bxO\xdc\x88\x147\x87\xa6J:=\xa8\xaf\xe3sw\x80\xcd\xe5\x01\x99\xdb\x9b\xcb\x05\x02v7\x08\x84\xb8B\xc0\xe6\x0e\x81\xcc\x0d\xce\xe5\x1e\x01\x87\x8b\x04\xc0\xee&\x01\x8b\xab\x04\x80v\x97\x00\xe52\x01\x9bYC\xb1'\x1aY\xdc'\xe0\xead\xb0\xbaQ<\xaf\xf9\xc2\x93\xa3]*\x86\xa6\x14\xbf\x8a\xa1L\xf8Y\x8c\xdf\xc3\x9d-\xe0\x18\x7f\xf9\x9c.`w\xbc\x80\xe5\xda.s\xf7\x0c\x19\x9c0\\o\xaa#\x06V9c\xc4\xd3\xb7\xfc&\xda\xa8\xa5\xdeq\xf5.\xb8\x86\xb5\xdcn\xa5^\xc1\xab\xe8J\xbd\x86wR$\x14,\x0eB\x8a\ny\xf7\xca\x84\xf2\x1c\xda\xed\xc9z\\\x99\xf9\xf2\x02N+\x06\xa7\xdd\x8a/1\x94\x0b0\xd2\x93\x1c\xad \x8eC|rc\xae\xc4\xc6r\x01\x06J\xb9\x00C\xbe\x9e5Y1!Q1!I\x910\x18\x19\xd3\x11\xf3\xa6\"fKC\xf4\xa7 fK?,\x17`\x94\x0b0V\xa4 \x96\x0b0DG\xab\x1aS\x12\x00C\xee\x84(\x17`(R.\xc0(\x17`\xac\xb8k\xc2\xff\x8c/\x11/- \xaf\\\x80!$gz\x9d5\xb5\xae\\\x80Q.\xc0X<\xe6O\x93+\x17`\xc4'\xc1\xc5\x7f]o\xf2\x9b/\xf1\xcd}\x01F*o\x99\xe1WXr\x96\xd9\xf9\xca\x08\xae\xb2\xe2\xa2+.:)\xc5E\x87R\\t\xf2\xf5\xe2\xa2+.\xba\xe2\xa2+.\xba\xe2\xa2S\xfe\xbf\xb8\xe8\x8a\x8b\xae\xb8\xe8\x8a\x8bNJq\xd1\x15\x17]q\xd1\x15\x17\x1d\x14\x17\xdd\xef\xd9E\x97HA\xb5 \x9d\xa2\x08\xa7\xc8\xfd?\xe9\x1eL!\x99\x92GiE\x9f\xe6\xcaX\x92K\xe9\xa1\xa0\xda]\xb8\xdc\x13\xa3gh\x8a\x88\xceJ\xe9\x8dO\x0f\x0c\xc3\x1b\xf9\xe0\x93\xe4D\x13\x05\xccx\x9cv\xe6E\xfd\xf7\x13\xeb\x1e\x953\xfe\x9b\xba\xf9\xf0\x97G\x99=x\xc5\xfac\xdb\xf4,8\x12q\xacI\x94\x8f\xf3\xd4\xabd4\x10\x10\x03\xfa\xbe\xc7~7X\xaa\x14/\xae\xf2\x1e\x91\x0c*bI\xcd\xec56T\xf5^\x1c\x1d\xea~>q\n\xce'E\x85-\n\xdc\x1e\x03n\xcd\x8b\x05W\x9b\x01\xac\x19\x87a\xf41RL\x1a\x99I}@\xd9$\xcbu\x12\xd7\x0c\xa1O\xabu?T\x83~\xa2\x17\x86c\xfc\x8b\xb4\x07\x96oC\xb4\x875'#\x04\xff'xqy\xf9\xe6\xe2\xe5\x8b\x9b\x8bwoo\xdf\\\xbc\xfd\xe7\xdb\xeb\x9b\x177\xe7\xb7\x17o/n.^\xbc\xb9\xf8\x9f\xe7\xafn\xdf\xbf\xbd\xbe<\x7fy\xf1\xfa\xe2\xfcU\xe8\xeb\xffr~u\xf1Z\xfe~}\xf3\xe2\xea&\xf2\xdd\xf3\xab\xabwWQo^\xbf\x7f\xf9\xf2\xfc\xfa:\xf4\xdd\x9b\x8b\xdf\xce_\xdd\xbe{\x7f\xb3xAl[\x9f\xa7t\x93\xdb\xab\xb2\xf6\x0b<\x87\x173\xfb\xdb\xbf\x9b\xfe~N\x08\xc7\x9d\xb5F\xa0\xbb\xbb<\xea\x93\x19\x85\x8d\xa3\xb2\x1b\xc6\xbd>\x1b\x0d/\x91\x81\xbe\xa2\x10\xfem\x17Ep_\xec\"\xf7e\x99\xb3t\xec\xda\x8dz\xff\xf9\xaa\xe2\xc4\x80X\x14\xb8l\x86-'\xca]\xc84r\x16\x9a\x87\xfa\xc0\xb6\xd0\x9ex\x16\xc8\x9e\xc1\xa7\xaa\xe64{2\x1c^m\x97R\x94`Q\xe8Tv\x07)6cdME\x1f4:\xb2\x991\xf0Pm%\xdf\x98\xa6\xcc\xc8\xb1\x88\xb2\xf6z.#\xf8\x0c\xad#\xa7\n\xe6\xa6\xfbY(\xa4\xd8\xd9(&\x95\xe9\xd5Y\xc9R!\xc5B\xd2\xa0(\xce\xc3Z1)\xb5\xe7l\xb9\xb3\xb6<\xab6\xf8z\x11\xec\xab\xf7j\xbe\x00U\x1c\x1d\x08+\xeaD\xae\xea\x10\xcf/`\xd1\xa6\xed\x0d\x0c\x9f\x93\x10\x1b\x1b\x86\x14\x82\x15CJ\xf4\x16&\x85-\x83Pg\x1b\xf4\x08\x91\x91\xc6\xec?\xf4j\x89a\x7f\xe0\xb6\xb2k\x0fb\x8e\x8f\nd\x9dT\xd3\xa9\xfb\xaa\xde5\x0b\x04\x89\x1f\x13\xc6w\xf8nj\x9c\xa1h\xb3\xa9\xcdA\x84\x99\x13\xeb\x85u\x1e_\xe3\xdf\x97\xf4 \xf3\"c[\x04\x84\x8e\xf8ik\xb9\xf3\x05|c\x05\xe6\xaa\xffj\x9c\xfd\x94\x15D\x9e\x03\xef0\xcdn\x99!\xa7\x8a\xe5\xb2\xba\xa9\xac\xc0\xcaXg\xea\xaf\xe4Qy\xb9\xd6\x89\x03*\xaf\xed\xf8\x8c\xad,\x9c\xa9:\x95\xf3(\xf7U\xbdg\xd4\xbc\xc3\xda\xbd\xe6\x7f^~d|\xe5\xc9>0\xdf(\xa5\xf5\xe9\xf9\xa8\x02\xbbjqv\x9c#\x80\xc66\xcc\x9c\xd0`g<\x06W\xb1\xf7V\xe6cP\x16\xbc\xf5\xec\xc7\x9fFk\xa4\x10\x1f\xa3\xf0d\xc7\xa7\xa9\xe3\xf9\xa4zM-\xeb\xfd^d`~\xa7\xe9[\xb22.]\x114Ou\x85:\xb9w\xc3\x9b\xcb\xfa\x1d\x10V6\xcc\xedARE\x0f\xa7n\x9e\xf2B\x9d\xdc\\\xf2\xd8\x08\xbecoa\xc7\x062\x0d\xf5\xd4\xa3\x9fP\xac(\xf56\xdc1\xf3\x8e/\x89\xab\x9d2\xb8\x92\xean\x99\xbc\xbc\x80\xa6\xff\xc61\xcc\x1c\xbb)\xeb;6\xc7\x85\xe5\x05\xda`R\xfd\xf9Jx{l. I_dk\xc1r\x1f\xc3?1\xefp}\x98\xbf\xc08B6\xf34k#\xa3\x17\x1fJ\xbcx\xacv\"\x03\xff\xb9\xae\xear\xfa\x93\x960>\xfd\xdc\x891\xa2}\xf3 W\\\xc3>\x0f\xcbtb\x08\xb1\x19\xee(\nc\x7f#K\x91\x07\x99\xf1\x9f2\xeb\xbe\x17\xdb\xc9\xcbj7Qy\xe1\xdf5%\xff{\x9c$\xfc\xf5Q\xdd\xd8\x01\x0c\x0em?\x00\xe3\xc11<\x8e\xe6\x0c.\x06\xc5]\x7f\x1c\x1e\xa1\xbe\xd7\x07\xd1\x03\xeb\x18\x8fnjZ8\xb4\x9d\xdci-BK\x86v\xa8Bc0#\xa81\xb8z\xde\x1b\xfc\x1f3o\x8b\x0c\xacR\xe2\x81\xf4\xfa\xab\x1d\xc5w\xcf\xb7\\\x89\xbe\xc5\x1e\x97\x8a\x9e\x0d\xcf\xa0\x1ez\x19\x15\xd6\xc3\xa9\xc1A\xb4\xc5\xe0\x9dO\xb52l\xec\xdf\x10\x8b\x14v\xb2\x96!V\x13\x1cR7\xb0\xbb\xba|9\x0dD\x89S\xf4\xe3V\xb4c\xda\xc6y\xd3v\xf8 \xc7P\xa45\x95\xd0\xc6\xb8\x83\xe1'\x0c\xb5\x99\x8b\xb6\xc9'\xaf\xdb\xc3\\)\xf2\x1e\x8e\x8e\x1d\xf9R \x7f\xa9\xba\xa9gm\xf7\xc2,\xda\xc8\x07\x97\x8e\x9c!\x98A{\xb6\xfc\x16|\xed\xfa\"\xdbl,3\xfa\x1a\x83\x86\xe4,ve9s\xd8\xc9\xe0Ug\xb9\"\x103%\x94k/\x80\xf9\\_\xdeS\xec\xbc\xb1w\xd0\x8cz`\x8f\xae_\xa6I6\x8d\xaf\xb8J\xc7\"-\x14\xd6\x92\x05mq\x9e\x14\\\xe7\x04\x8f\xf7\xc6sR\xc8\x82\xbb\xb8\x90\x97\xd0\x1aXN\x7f1\xf8\x0b\xa9\xc8\xe4\xff\x97B`0\x81(\x8c\xb3m\x14\x12\xb3\x1e \x08W\x10\x80\xc6\x84\xbeM\xe11\xa1\xef\xd2\x88L\x88g]{%\x07*\xe3\xc3e\xd6\x7f\x0f\xd5\xfdo(\xfbw\x0c\x9euc3\xc1\x1d\x99\x86\xce\x84\x16\x93\x0d\x9f -0\x11\xa1 \x19I90\x1a7J\xe32[Y\x91\x1a\x12\xab\x89^+(\xbf\xb2\xd7@{`\x92\x08\xdc&\x04\xb9\xc9V\xadH\xfc\xc6\x03@\xb8W\xad(h\x87\xd4d\xeb@\x8fc\xd1\xe7Z\xf4n\x1b\xc0\xff\x01\xc0\xdb\x0d `\x96U\x98\x90U\x93\x03+\xf2\xa2E\x19\x1b\x93\x0f3\nF\x8d\xfc\xb8\x91\x139\xf26\xde3\x98\xf3\xe2Gv\x04\x89\xc6\x90\xec(R2\x8e\x94\x84$E\x1ba+\x9e\x94\x07QJ\xb6\x0c\x0e\\\xc9;\x92\x002cK^tiM\x95\x1c3;/\xc6dG\x99\xec8S2\xd2\x94\xfc\xe1\x1dx\xd3\x9a^\x8e\xc1\x9c\x9c\xa8\x93\xb3p7\xaa\x93\x1f{\xf2\xa0O9\xea\x9a\x0d\x83\nD\nbq(\x13\x89*\x8e\xfd\xe2\xd8/\x8e\xfd\xdf\x89c?\x046\x9e\xbd\xf9\xc69V\xfc.\x12:pL\x8f\xed\x15\xda\x84\xf7^\xf7\xd9!\x168\x1e\x02\xb4\x9b4\x1d\xce\xe7\xe9v\xe3?\nD\x8c7o\xaf\x00|\x01\x86\xaa\xdb\xb1\xd0\xcb\xe6\xe8\xc9\xba\xec\xc6`\xc4\x00\xef\xcc6|\x9fa0\xf0\xfcr\x01\x80\xcb:Q\xd6\x89\xdf\xe3:A\xf7\x92\xcb2\xfb\xa1_\xcd\xaf\xa5c\xbe\xb3\xd9\x08@{-\x958#\xed]\xf0\xa2\xe1Ex)#N<\xa6\x1bn\xe3\x11y@I\xb5\xce^\x0cw*a\xfd\n\xfam\xa3\xb7\xea*\xb1e\xfd \x97 y\x8b\x93$9\x1bZs\x19\x13\x7f\xa3K^\xed\xda\x19H2\xb3\xf9o\x8e\x03\xb4\x0f\xa8\x82\xbc\xf4f(v\x923\x94|Tg(\xd9\x08\xcfP\xac\xb4g(C<\xf9\x19J.\n4\x147\x11\x1aJ\x14\x1d\x1aJ4)\x1a\xddw\x8fGy\x03\x15E\x8d\x86\x12M\x90FjC\x87\x86\x85&\x0d%\x85,\x8dTx:B\xc5\xdbj)/\x828\x8dTd%SCI\xa4T\x93J\x02\x88\xd5\xc87\x83\xc9\xd6P\x12(\xd7P\x12\x88\xd7l\x13\xddR\xd5l\x94l(y\x89\xd9P\xb2\xd1\xb3\xa1\xf8I\xdaP\xb2Q\xb5\xa1\xd8\x08\xdbPRh\xdbh[AP\xb9\xa1\x0c!\x84n(\xb1\xb4n\xa42\x1b\xd5\x1bJ$\xe1\x1b\x8a\x15\x90\xf1l)\xacgW\x94\x90\x1dG$\x1d\x1cmL%E\x1c~#\xed\x19_m\xd2\x08\xe2\x0cu\x9c0\x8e\xa0\x89C\xc9@\x16\x87\x92F\x19g\xa8\xe3;\x1ar\xf3\x90H\x1fg\x96d\xd0\xc9\xa1\xa4\x90\xca\xa18\xd9\xd6P,\x04s(^\x9a9\x14\x82\xe1\x8aK8\xe5\x1c\x8aM\x8f\xc1)\x94HB\x87\x12\xde9>B:\x14_/x\xc9\xe9PVP\xd4\xa18z'\x92\xae\x0e\xc5IZ\x87b\xa7\xae\x9b\xfen%\xb0CqtZ(\x99\x1d\x8a\x8f\xd2\x0eE#\xb6CI\xa0\xb7C \xb9C \xa7\xbaC\xf1\x12\xde\xa1\xd8:\xd1$\xbfC\xb1>\xef#\xc2CI\xa3\xc3CqT\xd9\xf8=\x89 \xcf\xd0\xa6\x11\xe6\xa1\xa4\xd0\xe6\x99%\x184z(Idzf\x95\x97\xe4z(9)\xf6P\xacD{(\x06\xdd\x1eJ\x1e\xd2=\x94l\xd4{(y \xf8P\xc2h\xf8P\xbcd|(\xc2\xe1\xe3\xa3\xe4[<\xec$\xe6C!\xa6\x17\x904n(\xa1dnn\xaa>\xa1+\x8c\xb0O<\xec\xa7\xedC!\x1a\x94\x93\xc2\x0f%\x89\xc8\xcf\xd0f\x10\xfb\xa1\xe4\xa3\xf7S\x8a\xc9B\xf2\x87\x92:F\xbc\x84\x7fB\x9d\x87\xf6\x0fE_\x9a\xecQg\x02'\xa5\x03o\xf88\xf9<\xb0n4\x07\xe8\xdfW<\xd8D\x80\xec\xa6m\x1a\xb6\x19('\xee\x14rE^s\x8cr\x9c\xaf\xe3\x9dEb\xb1K\xe2\xbea\x11\xb2\xcb_t\xd7X\xd7\x1a\xe7V7\xae\x00\x9e\xc5\xa1\x11\x02B\xde\\\x0e{\xf0\x9f\xb0!\xe0\xe0*%\xd6yoU\xb8<\x85Z\xb6\x81\x91N|\xab2\x87s\x1fb\x1d\xfcVm\xbcR\x1e'?\xe4p\xf4C\xbc\xb3\xdf\xaa\xaf\nr\xf8C\x9a\xd3\x1fb\x1d\xff\xf6j\xcb[R|\xce\x7f\x88\x04\x00\xac\xca\xe6\x9bS\xdc \x00$\x00\x01v\x85\xe26\x15\x07\x18\x009\x01\x01\xf0\x83\x02\x90\x0b\x18\x80$p\x00\xd6\x03\x04\x90\x03$\x80\x04\xa0\xc0a\x9f\xc8\xd3\xd1,\x99\x01\x03x\"\xd0\x00\xf2\x03\x07\xb0\x02<\x80h\x00\xc1i\xc3\xdd \x02D\x01 VU\xee{afY\x01(@nP\x01\xbc\xc0\x02\xa4\x82\x0b\x90!\xe3\xc3\x034\xc0\x8a]RN\xc0\x01\xbc\xa0\x03\x04\xd6,\x0e| U\xc95\xc2\x0d@@N\x10\x02\xd2\x80\x08R\x9fX\xe8\xed\x1b\x9b\x04@\x82\xd4G\xdfq3K:0\x01a\xfew\xf0\x01\x14\x10\x0eR\x80\xcb\xeb\x18\x01V\x80G\x9f\xc5\xd3\x92\x01\xb8\x80\xd5\x9d\x17\x06`@`\x0f\x05\x02\x19\x10\x03f\x80\xbf\xe7\x92@\x0d\x08\x036 \x00\xdc\x80 \x80\x03\xfc\x9d\xba\x0e\xe8\x80`\xb0\x03l\x80\x07\xe4\x00=`\x0d\xf0\x01\x11\xe0\x07\x84\x03 \xe0\xe9d\x1b\x10\x02\xbe\xf7\xc2\x00\x11\xc8\x04\x8a\x80\xaf:\x96\x99\x11\x05\x90\x90\x9a,\xb7\n\xcd\x92\x15(\x01\x07X\x02 \x80 \xa9\x8c\xba\x91h\x96\x04\xe0\x84\xd4g?\xdaz\x00\x15\xb0\x83*\x90\x19X\x81$p\x85TG\x01.\x10\x0b\xba\xb8\xec\x96\xc5G\x0d+\xc1\x18\x08\x07d`-(\x03\xab\x80\x19\xb0Oop8\xdfa\x85\x03>\x04\xa4\x81\xb5@\x0d\xac\x01k\xc0\xde\xc8\x04\xd0\xc61\x87\xa8\xbf$\x809\xf4\xd8\xb6\x01:\x10\x0d\xea\xd0\xaal@\x0f<\x01\xd8\x03\x99\xc6\\ \xe8\x03\xc1\xc0\x0fXVs7\xed@\xca\x85\xedt\x7f\xcf\xd4*\x96\x0d\x92\xfd\x12\xf7Y\x9c|\x0b\x05n)p\x0b\xb9\xe3)pK\x81[\n\xdc\xa2(*pK\x81[\n\xdc2K\x81[&)pK\x81[\n\xdc\x02\xab\x11\x83\x02\xb7,d]\xe7\x15\xb8E\x95\x02\xb7\x14\xb8e\x96\x02\xb7(R\xe0\x96\x02\xb7\x14\xb8\xc5*\x05n\xa1_(pK\x81[\xbei\xb8\xe5zbu\xd6\x10\x97\x07\x92\xfa\xd9q6\xba\xdcWus\xc3>\x0f\x16\x86\xe7\xe3\xf8\xf7\xdb\x81}6\xf8\x1a\xc1\x7f\xc0\xf7`FS\xd1\x8eF\xa0\xf1\x17\x0c\xdbu\x03m\xb7\xb5\x9c\x8e\xc7C\xa8\xf0\x0eZ\xfd\xbfS\xbf-\xfe\x8a\xecg\x9b\xb6\xb9\xafw\x96\xdc!\xce7\xf6\x92?\xb1\xb4\xee\xf8\x96\x18\x0ft\xfe\x90\xae1.o(\xe2F\"\x9f{\xc2\xda(5{\x0bS\xa0\xb8\xb3a\xc9\xd2l\xa8\xab{~\xf7\xc7r\x9d{b*l\xaaU\xeb\xd9\xb1%+\xba\xa1\xcb\xa4\xcc\xf6\xd0\x91\x92l\x81\xa2\n\xe3\xca\xc9j\xee\xdb\xab\x1a\xa8\x9b\x81u?A\xdb\xc1\xa6k\xfb\xfe'sD.\x87\xb0\xd2\xe5\x85o\xb4\xf0\x8d\x16\xbe\xd1\xea\x8f\xc27\xda/:k\xc1G=n\x16\xc5\xddN\xea\xab?\xcf\xef\xc2\xd8\x95x\xb0\xee\xce\xc2\xc0Y\x188\x0b\x03\xe7\xd30p\x8aO\xba\xe4\xde\xf4\xd1aZ\x998U%?\xdb\xb4(\x9c\x9c\x0eJ\xce\x8bf\xd3\x1e\xeaf\xf7\xea\xa6\xda\xddtU\xd3\xdf\xb3Nt\xe0zZN\xf1Y\x9e\x98\x99s;T\xbb\xdb\xa1\xbd\x1d\xbaj\xbbf9\xb2/7\xbc\xf1\xed\xcd\xa8oi\xfcq\x06\x88Ut|\nw\xe6S\x00\x80\xa1i\x10]\xd8\xb1-\xdcw-\xe1\x1c\xc7\x0f\xbaa\xf5\xc7\x19\xc3\x90\xc3Y@\xf4=k\xf4\x0d\x12\xfe\x94\xa5\xb1\xd7\\\x95\xbe\xaa\xca\x8cn\x89\xaal\xb8\x91\x10\xcde\xfc_fkE\xbd\xbf[\xfe\x86m\xcbR\xd7+\xd9QZm\xad\x1d\xf8P\x8d\xb6\xcb\x0c\x9a\x91\x91\x14\xcf\xb8\x9d7\xbf\xca\xae\xfe\xc8\x96\xdd?\xfe\xb3\xee\xf8GW\x87*YUb\xf2\xcc5\x86J\x8c\x1c\xf1\xc0T\xd9;6|b\xac\x81\xe1\xd3r\xd1:\xf5\xac\x9bQ\x17\xaaD9A\x95Bp\x1f\x84\xbb\x07\x1e\xc31\x0dX\xadX\xdc\xe0\xa9Mj?U\xdd\xb6W\xfbd|y\xac\x85\xf8\xa9\xec\x16\xcan\xa1\xec\x16\xbe\xe0n\x01 \x96J\xdf\xc1\xf4\x1d\xb2\xd2\x87s\x7f\xbb\xb4\x05\xb2\x81_V]uX\xbf\xc98\xf2\xd7\xe2,Q\xbd\xf9`\x9e\xc1\xad\x87y\xfbQ\xfeP7\xb7{\xd6\xec\x86\x07\xf38\xef\xf4\xa78B%\x0e\xd5\xe7\xcc:m\x96\xe1\xad\xe8\x06\xfc\x00\xda\xb8\xea\xaa\x03\x1bX7\xae-{>\xb0\xc5\xaa(?\x9f\xa6Kv\xa9\xfa\xfb\xb8AK\xee\xe2\x8e\xedn\xd9\xe7U]\xf1\xbb\xfa*\xe3\xc4 \xfe\x00\x929~|I\xed\xe9\xbb\xbaM\xee\xe8'k\xe1_\xeavu\x03\xef\xeav\xd7U\xc7\x07\x15\nl\xbbj\xb3O\x9f\xb3h\x18o\xebmd3\x89\xa5\x17\x9c\x9bW\x80k^\xe4\xc5+}\xfbz\xf1Jn\\\xb1m\xa2nb\xcd\xdbT\xfb=\x19\xf97\xb4\xf0\x91u\xf5=\xdf\xa1P\xce\xd1m5\xe8A\x9cU\xff\xe1\x96\xaf\xe0_\xae\xd5/\xfa\x0f/\xf9\xe1Ak\xf5\xbc\x03\xc1V\xf35\x1e\xbdxU\xff\xc1\xdc\x8c\x8d2\xb7\x97j\xdc\x81\xbb|\xbfh\xe3~\xab\x1b\xb2q\x87\xba\xa9\x0f\xa7\x03\xe0\xb1Im\xe3|`$\xd4m\xda\xc3q\xcf\x06\xab\xbb\x9b\xb7_\x04\xc0B\x7f\xdalX\xdfs\xb4Y{\xf6\xd8\xb1c\xd5\xb1\xdb]e\xb9\x05\xe2)\xfa\xe2\x12\x0b\xfd\xa5\xea\x8d\xd3\xe4Av\xc3\xae\x92[9\xbe\xe3\xda\x9e8\xf8H#\x19\xd8\x08\xdeV\xaa/\xfaa\xdc1Q\x13G{\x98}f\x9b\xd3\xf0\x85;\xe3\x1c\x0b\xcd\xd6\x19\xd8\x08\x04$\xa8\xde\xf0u\xc2=c\xb7X\xb2\xad\x0f\x96^\x19)\x86wf\xf9Rt\xaa\xcd\x965\xed\x81\xfe\x93\xe7\xa3\x8cbk \x8a\xe7u\x1f\x862\xca\xcb\xb6\x9ew\xd8\x15\x0c\xed\x07&\x10\x93\n\xab.\xb7\xdbU\xb3\xe5\x01\xa0\xbcB\xb6h\xc4\xb7\xefn\xce\x9f\xf3\xc0\x08\xf1\xf11\xc2\xa0\xe6\xb1\xa3\x17\xcd \xcc\xde\x14\xaf\xab\x02\xb0\xa4B\xe1\xc7#\xff6a\x84=?\xe9\xd4\x1d\x02\x03\xbbv\xd7r\xb4\xd3\x0cZp\x8d\xe3\xd7\x8c\xbd8P\x16n\x1e\xc6\xf7\x8cM\x81\xea\xd5\xa3\x1b\xd3\x1bZ9\x1dm&\xce>\x88u\xa7\xa9\x94w\xfc\x8d\xe0\xbd\xc5\x8cJ9\xa4\xaep\xb2&\x1a\x0e\xf1\xe9\x85\x91I\x85F*\x96;\x950*\x810*mpN\x0f\xa4L)\x95,\x18\x93\"\xa8\xa4\x02j\xda,\x89\x81\xb1\xe9\x80S\xda\x9f\xde\x1a\"R2&\xf5\xcf\x9e\xe2\x97\x98\xd8\x17\x94\xce\x17\x9e\xb6\x97\x90\xac\x17\x9b\xa2gK\xc5\xcb\x96\x80\x977\xed.[\xb2\x9d?\xc5..\xb1\x8e\xe8L[:\xdd\xfa$:O\xb2\xdc\x10\x92\"\x17\x9b\x18gM\x80\x8bL{#\x92\xdd\xac\x0be\x18\x14e\xac\xa0\x91Ils\xb2\x1a\xd5\xbf\xdf\xf9\xcb\x8eKS[\xa6\xa4)\xea\xcc\xe4\xb4\x0c)i \x89h\xe6(\xd7\x17\xc3\x84\xa43K\x82YJZ\x993\x1f\xca\x92B\xe6M\x1c3s1\xc2\x93\xc4\xccw\xffF\xb55*\x0d,\xa4\xb1\xbe\x94/{\xdb\xbc\xe9]+\x92\xba\xc86G&p9\xd3\xb6\xec\xc9Z\xae\x14-\xb2\x13B\xd3\xb1|IXZ\xeaUB\xc2U@\x9aUxr\x957\xa5\x8a\xc8@2\x8a#\x9e\xf1\xa5J\xa5%H\x91\x95R~\x89J\x81\xb2\xa5;\xa5$9\x11 M\xb1iLd\xcaRB\xa2\x92\xb1\xd5\xb6\xa6\"\x19 Hy\xd2\x8e\xe2\x93\x8d\xb4\xc4\xa2\xa8t\"k\xeaPX\xc2\x907M(09($%\xc8\xc8\x911K\x0bM\xc0p'\xfd\x04\xa6\xfa\x04$\xf8,\xaa\x9c\x90\xccc$\xee$\xa4\xebP\xa99q 9T\xf2M\xbe\x94\x9b\xf8\xaf\xebM\xaf\xf1%\xd5\x10w\xd6\xff\xd3\"\x92Es\xb1\x05\xb9\xf0\x04\xbe|u\xf9Rhrz\xf2\xae\xf8Q5\xd8w'\x809\xc5w\x87~\xcbk\xfc]\xf5\xa4W\n\x8a\xb7@\xf7\xe6w\xc3\xfd~k\xce2\xa2J\xbf\x1ay9|\xf0b\xf6\x84\xcc\xd1\x11i\x05\xa6\xdb\xda\xc2\xc5\xb6\xa6\xd09\xa3I)\x985\xd2\xd1\xc0\x0b\x1f\x9f\x11\xc8\xd8\"\xa5\xe9\xbe\xaa\xf7lkt\xf3k\xfe\xf3\xb2\x97\xf1\xd1\xe4\x1e\xe6>\x8fu\x8d=\x1f_\xc1\xc6\xa1\x07\xc7\xe0\xcc\x1b\xeb&\xf3\x97\xc4K8\xe0\x96MX`\xbf\xe8\x98!\x01b\xc8\x08/DB\x0b9a\x85,\x90B>8!\x0b\x94\xe0\x86\x11\xe2!\x04\x124\xc8\n\x18\x10\x87\x87\xa5=\xc8\n\x14D\x80\x04!\x1b\x01\x12\x18\xb0\xafM9\x01\x81a\x02\x03\xe8\xf2r\x80\x00*\x99\xca\x04\x00$:\xff\xd3\x1d\xff\x8b\xa5&\xaf\xab?\xd6\xcdo\xf5z\x13\xee}\xa7k\x7f\xe9K\x0cs\xe9/\xdf\xf9\x9b\xde\x96\xd5n|_c\\\xee{\xba\xfeN\xb7}\xa0\xcb\xdehW\x84\xab\xde\xea\xa6\xa7]\xf46\xf7\xbc\xd1\xc8\x10\xb7\xbc\xcb%\xaf\xb8\xe3#]\xf1\x1e7|\x98\x0b\xde\xe9~\xd7\xbc\xdc\x0b\xf5\xda\xdf\\\xee\xf6xW\xbbQ\x01\xf1\x7f\xd9\xdc\xeb\x19]\xeb\xd9\xdc\xea\xb9\\\xea\xa4;}\xe1JOw\xa3gq\xa1\xe7s\x9f\xfb]\xe7N\xb7y\x80\xcb\xdc\xe7._\xf8\x9d\x97\xdaC\x9d\xa8v\x17y\x80{\xdc\xe3\x1a\x9f\xaa\x97\xcb%\x9e\xd1\x1d\x9e\xc7\x15\x9e\xc7\x0d\x1e\xf7\xe5\x9c\xeeo\x97\xeb{4\x97\xbb\xee\xb89\xdbU\x03\xfbT=\x9eu\xa7f\xa8\x0f\xec\xec|v\xd4\x058R\xfcn\xbdM\xbb5\xf6\xb7u3\xb0\x9d\x12\xc0-7\xb8u3\xfc\xc3\xdf\x8b_E\x0f:uo\xd9P\xd5\xfb'&\x80\x18,\xb7v\x90[u\x14_\n@&\xef\x11\x8a\xebV\x8e<\x9e$\x94x\x7f\x92\xa1\xca\x1a\xfc\x1a\xedeB\x89\xf65\x19\x9a|\xb7i\xac\xf6;\xa1$z\x9f\x88\xde\xb2\xde\x9a\x91\xe8\x892\xf4Yo\xc9H\xf4J\x19\xfal\xb7b\xe4\xf3U\xa1$x\xac\xa4\x82l~+\x94H\xef\xd5T\x9bl>,\x94,\x9e,\x94|\xfe,\x94,^-\x14\x7f\x88l\x8a\x87\xcb\xb4\xa2\xd6['R\xfc^\x862\xfa\x96 b/AY\xa94\x9f\x98\xa1\x8e\xbaM\"\xc2S\x86B\xde\x1e\xe1X\x8a\x1d\xc9\xf6\xbeU:\xd2\x8ff\x1a.\xeb\xad\x10\xae\x1a\xe4\xf0\xac-\x14R\xb7?$z\xd9P\xd2}m\x0bu\xe6\x82\x9b\xe8}[\xe8\x1a\x88[\x1db\xfdq(\x9e\x8b\x08\xac\xb77x\x83oi*\xf40o\x9d\xfd\xfd\xbf\xd1m_\xed\xbfC k\xbc/\x14\xd7\xddRo8n\xb0w\x0f\xc5\xd2\x03\x11\x9e>\x14\xcfm\n\xae[\x14\xdc\xb7'X:%\xc4\x0f\x88\xe2\x0b\xd0%nG\x88\xf4\x0c\xa2\x04\x84\xe9\x86z Q\xbc\xa1\xba\x96\xeb\x02\x88b\xc9\xe7|!\xbb)\x9eD\x14K\xf5\x16\xbfe\xf3-\xa2d\xf40\xa2d\xf33\xa2\xe4\xf26\xa28n\x13 n\x11H\xf7?\xa2d\xf1B\xa2\xe4\xf3E\xa2\xf8=\x92(\xdep\xde \xef\xe4\xe2A\x0f\xcb?A|O\x95\x1a\xea\xfb\xf2\xb1\xf9\x07\xf8.\xc5\x83\xfe\xe0^\xa3\xf2\xb9\xbc\x99(\x19}\x9a(y<\x9b(y\xfc\x9b()\xdf\xdb\x1b\xea\xeb\x0f\xf6\xc5\x95A\x84\xf1q>\x80q/\xf9P\x1f\xfb\xb3\x8f\x7f\xc6\x8c\xfa\xbf\xec\xdb\xcd\x87\xf5\xac\x1a<\xfe\xb5\x0d#*a\xd0Z\x85Vb\xeb\xa9\x84P\xaf\x12\x82\xa2t\xac\xeaM\xba G\xb1\xbe\xe3\xdd\x15W\xa8WG\xfa\xa7Dys\xc7LQ\x89\xa2\x86\x86\xbe{\xdd+\xd3\x9f\xee\xfac\xb5a\x04 X\xc0\x81\x95$\x05r\xf0\xec\x8a\xc2\\\xf4_\xb2BP7}\xbde3\xa7\xbd\xa1\x8d\xb7X\xd0H\x19\x7f\xbccD\x1f\xb8z\xfb}\xcf:\xfe\xf5\xf5\xaa\xddW\x9ba\xf2aN\xa3\x94\xf7\xb4\x18\x06\xe3\xef\xbb\xfa\xa3F\xb4/\x86\xd2\xb2jc\x9d\xe5\x07(\x1c\xb2\x85C\xb6p\xc8~A\x0eY\x07\x13\xecrA\x0dI\x9f\xc17\\\xd93\xf4\xd2}\xa5\xfe\xbaz\x05_\xe8|\xda\x85\x9c_\x12\xa2gz\x84\xac\xa1/\xf1E\xdd\x8e\n}0\xf1\x93\xcf-Y\x96;N\x0c\xd6\x1d\xabnx\\_8us\x8a\xa2\xd0XI\xf9\xf6\x81\xaf$u\xf3\xb1\xdd\x7f\xc49A3\xbb[*\xfc\x8d,\xa1\xf5\xd6XB\xc7\x11k_?\xd5\x06A\xdd\x9bk(\xf7(+\xbf\xbaV\x8a\xab\xa52\xac\xc7\xd0\x9d6\x98F\xb1(l\xb9\x03\xb9P\x89\xe1\x07\x04\xff6\xec\xc8\xdf\xfb\x1e\xa1\xb1\xefy\xcb\xbaj:\x83\xf2l\x9b=4l\xf8\xd4v\x1f\xfa\xb2\xa2\x96\x15\xb5\xac\xa8\xdf\xd6\x8aJ\xaes\xce\x85U}\xfb\xe7\xc5\xeb4\xcf\x9c\xb1\xbe\xaa\xef\x04\xaf\xa8\xc62G\x0e\xed\xd4\xa5\x8d^\xd4\x9cEE\xadZT\xd9\xe4\xfaD\x16m\x99\xbc\xd4\xc4\xcd\xb2\x0e9V\xa0y\xed\xa1\xc7X\xccz\x93i\xa5\xb1\x0d\xbf\xe9\x04\x19<\xf6\x0c_\x89k@\xe4\xf1\x8f\x18\x9e\x11\x7f\x91\x11\xde\x10\xdd\x0fB\x16\xb2\xf8\xb0\x89\x8e\x0e\xd5\xb1\xf1\x85\xc7{\x80\xebBw\x14\x99N\x0b\xcd]A;*2\xba(4\xe7\x84tK\x88\xa1-\x1b\xc2\x93\x87\x7f\xe9\xaafM\xde\x7f\x9e\xce\xbf0\xad\x08\xd9\xab|i\xdf\x8dU\x14\xad\xe4\xf1DU\xb3\x91\x03\x1e\xff\x168\xc7^\x10\x93\x89\xf7\xab\xbf\x84BS\xba6Z3[\xac\xa65Rs\x88\x8f\xd3\xcc\x15\xa5YhJQ\nM\xa9|=k\x03\xb6\xb3\x8b\xf53x\xf7*~Y\xbf\x80\x8a\x17\xa3LB\xc6m\xeb\xbc\xf0p/\x91\x16%F\x18\xe0\xf5\x1b\xb5_O\x87\xaa\xf9\xa9c\xd5\x96\xcf\x165\xce*\xe7&\xed\x9d\xbc\x18q\xab\x1b\xf6\xba\xa7\n\x1a:V\xf5\xa7.\xd4\xae\xda\xec\xc4\x95v\x11\xe4\x86Ox\xd1\x9b<0\xa7\xdd\xd4|\x88s\x1f\xefb\xcbQ5\x86cm\x8e\x16; \xab\xbbi\x9b\x86m\x06`\x9f\x07\xd6\x8d\xed\xab\xd4\x08\x99\xa1\x85\x8f\xac\xab\xef\x1fy;uef\xab\xdbO\xcdZF\x1bk\x8e\x7f\xfb\xa9\xb1\x0e\x13\xf2\xaa\xf4\x95%M\xfd$\x94\xe9\xea\xeb\xb6\xb9\x1d\xea\xe0\xe1('\xc3\xb6\x1a\xd8O\xe3{T\x15\x06yw-\xf7Y\xd6\xce\xa1:\xfb\xe6o\xef\x19\xbb\x1d\xda\x0f\xac\xe9\xa9\xca\xac\xe2\x97Y\x1dZ\xbaeM{0\x7fvn\x87\x00\xaa\xc38NW\xbe\xe6\x0b\xc5x\xd9\xd6\x8a#\x02x\x8f\x08l\x03\xab)\xdd\x12U\xb3\xe5\x81\x1a\xbc\x12T4\xc1\xdbw7\xe7\xcf90\x83\xcf\x08\xf4\xa3\xe6\xfe\x8d\x8bf\x10\xfb\xf4\xc9\x15\xaa:\x9f\x0de\xc2\x8e\x1b\xbf\xf7\xf5\xae\xa9\x86S\xc7z\xbe\xc8\xd5\x1d\x82t\xbbv\xd7r\x0f\xf0Y\x90\x05xS\xf7<\xa0\xf1\x9e1\xd1b\xde\xd4\x1e\x1b. \x1b\x0fuS\x1fN\x07\xd8U=\x1c\xbbz3v\x10F\xb6i\xea\xc49\x84\x1csr;:M\x8c)\xe8e\xbf\xd7\xf6\xa4\xaf\xf8\x92\xb5T\xb1X\x18\xb5\x95\xcb\xe9\xe7\x91\x8b\xa3,7|a\x8c8Z\xca7\x9f\xf6l\x99\xfdH\xb9z%\x8d=4\xad[O\x13\x0fLkWU\xdb\xba\x1aR\x16aP2\xaf\xae\x99\xd7Wr\x85%\xd7\xd8\x90\xe6G\xad\xb3\x96\x956\xa2<\xc7j\xeb\\o\x83&\x0e\xbd\xe6F\xad\xbaA\xeb\xae}\xe5\xb5\xac\xbd\xce\xd5\xd7\xbd\xfe:V`\xcf\x1a\xecZ\x85=\xaf\xfaV\xe2\x9ckq\xe6\xd5\xd8\xbe\x1e\xaf]\x91]\x96#\xf3\xaa\xec^\x97\x93W\xe6\xe2%*^\xa2\xe2%\xfa\x1a^\xa2%\x08jl[\xd7l\x8b\xb9\xd3Hh\xf3\xef\x90\xdf\xf7\xac+\x14\x87\xb3\x84@2\x85\xe2\xb0\xa4\x90\x96\x14RJ[I!-)\xa4%\x85\x14J\n\xe9RJ\niI!-)\xa4\xde\xda\x94\x14R()\xa4PRHK\niI!-)\xa4\x86\x94\x14\xd2\x92B*\xa5\xa4\x90BI!-)\xa4%\x85\xd4?F\xbeD\ni\xa18,\xfei\xf2\xcf\xc5?]\xfc\xd3\xc5?]\xfc\xd3\xc5?MH\xf1O\x17\xff\xb4\x7f\xc7Q\xfc\xd3\xc5?\xbd\x90\xe2\x9f\x16R\xfc\xd3\xc5?]\xfc\xd3Q\xce^\xf2\xe7\xe2\x9f\xd6\x7f,\xfe\xe9\xe2\x9f.\xfeiSB}\x8f\xc5?]\xfc\xd3\xbe1\xf2%\xfc\xd3\x85\xe2\xb0$\xe7\x94\xe4\x9c\x92\x9c#$49\x07\xe6\xcf\x9aDq\xf8O\x8b\xec\x1e:\xe5\xc6\x99\xe2\xa3\xbe\xfe\xf3\xf2}\xd9_aL1\xe3\xbb\x9c!\xf1\xb7\xf1\x8bv\xeb\x13~\x0e\xf8^T\xc6\xcfb>\x15cV\x8cY1f_\xd0\x98\x91\x99\x866{\xb0\xce\x1a\xa9\x1a\xd6\x1a\xa2\xd5\x16\x88\xef\x88\xa2l\x865\x910a\x86\\\xbc\xf2\xe5\x0b\xd6=V\xd9dp\x14\x04}ONw*9\x0dm\x15\xab{\x84\x16\x14\x85\x19\xab\xe4f$Q\xf7\xb7\x90\x9b\xd8\x8bo\xa3\xf5\x12\x9e\x86\xdaK/\xe5\xc8\xbaC\xdd\xf7KvR\xb0\xac\x97\xe0\xe6b\xb2W\xc9\xb0\xcf\x97s\xb1\xd8\xddrM\x99\xd2D\xdb\x89\x0b`\xec\x9d\x1e\x8eU7\xc8Vh\xca\x96m\x92\x9fSN\\\xfd\xf02\xfe\xd4\xde\xa3\xd6\xef\xc0kp\x82,\x8dncV\xa76\xf3\xb7\xd6\xefrxk\xe269\xdf@Zs\x8aM\xb2[%\x97\x11\x88's\x8d\xb0MOJ|\x1bb\xa3\x9e\x802\x89\xb4TOI\x9ad\x96e\xb5Xv\x9b\xe5a\xb1qU\x8e\xf0\xc8d\xb5]\xba\xf5\x8a\xb0_\xe5\x8cR\xce(\xe5\x8c\xf2\x0d\x9dQ\xc2N'\xfa\x9ea=\x1f\x8ab\x88V\xef\x1cH+\xbab\xfb\xb0\x98\x02[6T\xf5>N\xd1\xb7\xb0\x0f1\xb9T\xc6o\xa4\xac\xf1so\xd1\x0b\xfd\x93\xedE\xcc\x0d\xc8\xca\x9a\x8d\xcb\x84Q\xa7y\x85Y..|u\x9f5\x92MY\x1d\xe8N\xd5\x00\xdc\x1f\x0d\xb4J\xaamfj\x93\x85}3^\x9f\x1f\xb1\x97Lm\x13\xc0\xbeU\x80\xe0*\xab\xfb\x83\x1e\xb3\x0d\xe4V`\xf1\x92\xe6 X\xe8\xb0\xae\xfc\xb9\xbf\x0e\xd7J\x8c[\xf0\x8c]\xf0\x8c_\x00b\xd3*\x86\xb2\xb9\xa7\x83o\xf4\x9bY\xf6f\xf3\xd3\xaf\xb8\xe5\xd3n:@k\xa8p\xd8i\x1f\xcd\xbaz,\x0c:.\x89\xab\xfc[j+\x9cK\xc8\xb5z\x1dP\xc0jA\xda^\xb2g-\xf6\xd6ni\xc3.\x121\xcb\xd5\x87%=\x18mC\xd0\x7f}\x06qUHD\xc1\xe1\x17\x83,\x8fjd\xdf\n\x9d\xeb\xae\x01!\x8ff.\xf5\xe1\x97~\x88\x17\xa2\xaf\xfb G\xa6\xf8\x9f\xe0\xa1\x998\"W\xf1\x10\x87\x7f\xa3p\xd6\xe1\xd5\xdfg\x0d\xc7\xb0\xc9.\xec\xd2\xbc8\xa1d\xe4\x12\xce\xc6\"\xac\xb5Nc\x0ev5m5[\xb0\xc1\x13\xbcB\xbb\x85\x1b\xd8\xc2\n\xec\x1c\xb4&\x13\xb0(r\x08\xe4\x00\xf6\xb0\xff>\xc5F\x9d\xe4\xf7\xb5.\xc34\xa7\xaf\xe5q\x97\x87!\x9a\xc1WU\x92B\xdd;/\xb9\xb3\x843\xf4Rs0#+\xaf\x8d\x8fW\xda\xf0i\xc8\xaea\xe2\xa5\x0c\xf8t\x9e\x0d\xb6\xe0\xd96\x17\x91\xeed\xea\xf0\x96k\xa9_\xe96N\xacB\xb8{8\xcbJf8\x83\xf3\xaee\x8b\x90\xb2\x9c\xee\nr\xd7\xbf\xde\x93\xabTP9\xac\x86\xf8l\xc5\xbc9\xb6\xfd\xc0\xe7\xcc\x8ba\xa86\x0f\xa3=\xf9\xe2\x93faoB\xb6\xe7c\xa5\xd5\x04\xfa\xd14N\xd5WtM\x8b\xbej`\xc5\xba\xcfF\x8b*\xbfl\xdbS\xbb\xecU\x8dP\xb6\xd6\xae\xda)\x1b\x91\xa9\"y&\xde\xc5\xfd4(\x8c\xce\xe0\x19\xce\xea\nG.\xa7\xf4b:\x90$\x01\xd6\xb5\xd4\x9d\x18\x97\x91\x12\xc0N\x06\x90\x8f\x06 \x1b\x01\x805\xf5\x7f\x88O\xfa\xcf\x95\xee\xefN\xf4\x8fJ\xf1\x8fN\xee\xe7\xed\xd5\xf1)kZ\x7ftB?\xceMM\x9b%\x95?%\x89\x9f'\xec\xeb\xad!rDb\x12\xf7\xedI\xfa\x89\xe9\xf9A\x89\xf9\xe1I\xf8 \xe9\xf7 \x89\xf7\x84\xc1\xc8\x98^\x9f7\xb1>[J\xbd?\x99>[\x1a\xbd-\x81>%u\x9eL\x93\x1fB\x12\xe4cS\xe3\xadi\xf0\x91 \xf0D\xea\xbbu\xa1\x0c\x83\xb0\x8d\x1542\xc5}Ng\xa7\xfa\xf7;\x7f\xd9i \xed\x98\xc0\xae\xa83S\xd93$\xb1\xa7\xa5\xafk\xa3\\_\x0c\x13S\xd6EG\xab\x1aS\x92\xd3\x9d\x99\xd7\x96\x84to*\xba\x99Q\x1a\x9e~n\xbe\xfb7\xaa\xadQ\xc9\xe6!\x8d\xf5%\x98\xdb\xdb\xe6M*_\x91NN\xb692\x85\xdc\x99\x0e\xf6\xc6\xf0\xc7\xe9at#\xa2A\xa6\n\xe9\x8f\xd9G1kNFF\x08\xc0Op\xf9\xee\xfa\xe6\xf6\xea\xfc\xf5\xf9\xd5\xf9\xdb\x97\xe7\xb77\xffzy~\xfb\xfe\xed\xf5\xe5\xf9\xcb\x8b\xd7\x17\xe7\xaf\x02\xdf\xb8:\xbf|\xf3\xaf\x81\xcf\xfe\xf7\xf7\xefn\xce\x03\x9f\xbd:\x1f\x7f\xd5\x1e\x160\xee\xf3\x95uwsc\x04\xf4\xc5sx\xdb*K\xaf-\xa4\xc8\xddI\xcf1\x0cwV\xb3X\x81;v\xdc?J\x10j\xbe\x82cq\xb8\xf2\x94\xc2\xbb\xd7]\xca\xff>\xb5\xc3\x1cU\x14U\n~\x18oc\x94y\xe5(\xe7\xa8\x07\xa0\xa38Fs\x90\x93o\x9a\xe7\xf3\xfc%\xcb\xe6\xc8_\xe6\xc2)\xd2\x1aQ\x92Q+\xdd\xa4\xff\xa9\xe7F]\x06lOQ\xfc\xba\xc2\x13\xc6z\xee\x89\xfb\xbe\xa6\x84\xc0\xb1\x192\x9d\x9a\x9c}\xd2\x03\xd5\xf6\xc3\xd5T!\xfbR\xc5\xbf\xa8i~\xa4)\x87}=.Ir\xa1P\x86F\x0f?\xb0\x9a\xc7'V\xd3@\x7f6\x0d\x91\x0e\xc7\xe4\x8f\x93\xc1=\xee\x1fo{6\x0cu\xb33=\x12W|\x96\xc8?c\x7f\xd2.\x08\xed\xfb\xe9F\xf0'\xe0s\xf2\xf6\xfa\xfc\xe6\xe6\xe2\xed/\x16\xe3\xa1?u\xfe/\xe7W\xff\xfa\xee\xed\xb9\xe3\x91\xd7\xef\xde\xbcy\xf7?\xce\xaf\xae\x1d\xcf\xfc\xf6\xfe\xe6\xfd\x8b7\xae\x07\xce\xdf\xde\\\xbc{;\xeb\x98\x0c\x9f\xbf\xd6vc\xe7h\xb30pJ\xe7\xd2F\xce\xd6!\xcf\xe1\xfc#\xeb\x1e\xdb\x86M\x10=\x0f\xa1\x1dZ\xd5\xb0\xe9_\xca\xd5}\xcf\xe1]\xb3\x7f\x14\xb1\xde\xac\x9b\"\nq\x7f\x91X\n~\x00Q\x84\xa2\xf5p\x1aN<\x1d@\x16\x9aX\x8c\xf8\x8c\xa2\xa0#k\x8f{&]\x00<\xf0Z\xcc~\xa1\x8b.N\x940e\xb0n\xab\xc1\x97>\xe6\xcd`})\xb3W\xc7'\x88\x0d\x18\x0fZa\xdbz`\xdb,\xe5)\x9b\xb07U?\x00\xaa^\xe4\xce*\xa5\xaf\xc8-~7>j\xa8PL\x9b\x99TY7X]\x9e\x8ez\xd7\x9e\x86e\x14\x83\xc5\xbd\xce\x0b\xba\xe9\xaa\xa6\xbfg\x9d \x88\xc0*\x1a\x9b\xbc/\xear\xe7Q2st\xcbQ\xe4`\x0d\xa2\xa6B\x83\xb1\xce&\x15\x8ec\x95\x1f\xff\xe4\x88\x95\xe5u\x8a{\xbf\xd9\x86~E=\x87\x9b\xbf*\x1e\xea\xd8\x86\xd5\x1f#5\xc9\x97\xd5Q1-\xd0\xb6\xcf\xaa\xefe\xf0G\xa5S\xf1\x081\xbe\xd9?\xd4Gh%A\x98X$\xef\xbb\xf6\xa0\xb4Cn\xea\x94\xbaP\x03lZ\x83\x83G\xd5\xf2\xb8\xe0=(\x04\xae\x8b\xe1[\xeb\xb0\x03A\xd8Q \xe8\x10\xb0z\xfb\xefZ\x0b3l\xf9\x9fz\xb3\xff\xd4\xdb\xfc'\xdd\xe0\xe759\xf4F\xde\xdc\xc2G\x14\xb2\xd8\xb0\xa7n\xd5\xf9\xd6\\\xd1\xa7o\xd2C\xb6\xe7\xa9\x1bs\xa7u\xb9\x99\x8c\x86\xd1U\xaa-\xf0\xce\x0f\xe7s\xaa\x0d\xf0\xcf\x7f\xef\xdc_5\xef\xe99\xefm\x8fo\xbe?\xe5\\\x7f\xcay\xfe\x84s\x9c\x1a\xa7|\xf9\xe9\x96\xf45\xdb\xfa\x9e\xffu\xe0C\xae_\xacNTF>\xe7\xd4\xbah6\xed\xa1nv\xb6Ez=\xeb\xa2X\xc8\x9f\xd8\x87\xf7E\x99\x12\xc36\x7f(\x86=\x16\xcasU*hS\x88\xa2o\x0d\x85F{M\x02\xb6\x89(\xe6f1R\xf7b\xe3\xb8xP\xf3\xef$m\"\x17\x9a\xd4\x0de\xf8V\xd2^79Q\x14pz|w/xm\xe4q\x08'9?FMU\x93SE\xd1v\xa8\xc6\xc5\xaf\xfdTu\xdb^]\xd0\x88\xea\x90\x8c\xc8\xc2V\x987\xe4\xf0:\xcc?/\xae\xc6\x01\xdb\xfc+\\\xcaB\n\x97r\xe1R&\x1e\x0e\xe5R\xa6\xd3\x9e\xd7-\xc0V\x9aL\xa1M\xa1\x96@\xb6L\xaff\xe5z\x983\xdb\xfe\x00\x03'Wo\x02\x8eJT(\xf9\n\xfd\x1a\xb8\"Dg=Qw\x9f\x84D\x8b\x82jBc\"F\xa7\xd7\x89\xce\x0ba\xca\x16\xa5R\xf7\xf6h\xdf\xa5\xdd\xef_4\xfd\xa7\x98{\xc3*|\xef\xf7\xbaA#\x90\x9f\x89\xda\xad\xdeZ\xc2Ru\x94]aL\"\xee+\xd8\xb7\x1b%v\x15\xe5\x8bl\xec\x14\xcaI\xb3\xa6Zu\xf6\xfb\xa7\xe4\xe2\x1e\xf5\x83\xc62\xc5\xc7\xcd\x92\x19s\xa1F\x0c\xac\xdb\xba\xd9\xb2\xcff\xb4\x105\xccP\x9cWW\xd8\xc8\x99C\x9a\x83\x15\x99@\x0d\xac\x9f\xeac\xb8\x14i\xcdb.\x11\xb5#\xd9\xc5\xd7\xees1\x88\x8c\x97!\xee/\xe5\x1d\xfc\x9d\xf1\x1e\xbfP\x10\xfb\xd9\xa4-\x17\x1f\x80\xd3\xc8(\xaf\x97\xab1\xcav\xael\xe7\xbe\xe0vN\xff\xa4\xb6\x159h\xc5\x9f_\x13\xda\xae._\xca\xc6\xfa\xf6\x00\xfd0g\x0eG\xec\x03\xe6w\xff@{\x81\xe0|\x99\xc5\xe2f\xa8\xa1(\x15\xcd0\x10\x82\xec\x11\xe5\x8b\xec\x16\"H Q\xf2\xef\x1b\x1c\xe4\x90(\x06E\xa4x\x9f\x1eI\xe0 ;\x1eH\xd2\xc8\xf9o\x8eHS7\xfd\x15JF\x1aI\x14;\x99$J>JI\x94l\xc4\x92(VzI\x94!\x9ed\x12%\x17\xd5$\x8a\x9bp\x12%\x8av\x12%\x9a|\x92\xee;\xee\xab\xb7RP\xa2D\x13Q\x92\xda\xd0fX\xe8(QRH)I\x85\xa7#T\xbc\xad\x96\xf2\"\x08*IEV\xd2J\x94D\xeaJ\xa9$\x80\xc0\x92|3\x98\xd4\x12%\x81\xda\x12%\x81\xe0\xd26\xd1-U\xcdF}\x89\x92\x97\x00\x13%\x1b\x0d&\x8a\x9f\x0c\x13%\x1b%&\x8a\x8d\x18\x13%\x85\x1e\x93\xb6\x15\x04e&\xca\x10B\x9c\x89\x12K\x9fI*\xb3Qj\xa2D\x12k\xa2\x10\xf4\x9a(\x9e-\x85\xf5H\x8c\x12\xb2\xe3\x88\xa4\xdd\xa4\x8d\xe9\x84!\x0f\x0b\xf2M\x14_m\xd2\x888\x0du\x9c\x98\x93\xa0\xe3D\xc9@\xca\x89\x92F\xcdi\xa8\xe3;\x1ar\xf3\x90H\xd3i\x96d\xd0v\xa2\xa4\x90w\xa28Y-Q,D\x9e(^:O\x14\x82I\x90K8\xb5'\x8aM\x8f\xc1\xdd\x96H\xf6\x89\x12\xde9>\xe2O\x14_/xI@QVP\x81\xa28z'\x92\x16\x14\xc5I\x0e\x8ab\xa7\x08\x9d\xfen%\nEqtZ(i(\x8a\x8f:\x14E#\x10EI\xa0\x11E \x13E \xa7\x14E\xf1\x12\x8b\xa2\xd8:\xd1$\x19E\xb1>\xef#\x1cEI\xa3\x1dEqT\xd9\xf8=\x89\x88\xd4\xd0\xa6\x11\x93\xa2\xa4\xd0\x93\x9a%\x18t\xa5(I\xa4\xa5f\x95\x97$\xa6(9\xa9LQ\xac\x84\xa6(\x06\xad)J\x1erS\x94l\x14\xa7(y\x89NQ\xc2\xe8NQ\xbc\xa4\xa7(\xc2\xe1\xe3\xa3>]<\xec$@E!\xa6\x17\x90t\x99(\xa1\xa4\x99nJT\xa1+\x8c\x18U<\xec\xa7GE!\x1a\x94\x93*\x15%\x890\xd5\xd0f\x10\xa8\xa2\xe4\xa3QU\x8a\xc9B\xa6\x8a\x92:F\xbc\xc4\xaaB\x9d\x87^\x15E_\x9a\x84\x13\xdaM\xb5\xbax4\x81p\x15\n\xe2Z\x10\xd7\x82\xb8~\x15\xc4\xf5?4\xc4\x95\xc4?\xc3\xef\x93\xd6\x14\x04\x85]\xf5\xc3j\x9c\xf58\xd1\x06\x92/\xd0/\x81\x0b7M\x98\x15\xc1\xf0\xa8\x85\xc8\x0f,\x94\x82\xe0\x04\x11\xbd\xd1y\x89\xf4\x82@\x80\x9a \x9d\xe4\xa2\x1b\x04\x1b\xe5 \xb8\xca\x14\x8aWP\x0f\xf2\xb7\x16\xf4\x83+\x0b\xb0\xd0\x10\x02IEH\xab\x08\xa5#\x04\xdb\xb8\x06'\x8eKS\x13\x02\xb8B\xc5\x1c\x17\xe1[k\x80\xe2\xc2\x93\xc1Ee\x05~\x0f0\xf8\x00|)\xf6\xb8\x05)1\xccP6&7\xb0\xd3[\x81\x9d\xe2\n~\xd7\xed%\x19\xb2F\xb1\x90\xc2AXkEC\x12\xc9\xe1TM\xd1\x04q\x8a\x92\xf5\xcc\x88`eG\x842\xefr\x8e\xc32\xef\x84\xfc\x11\xe7\xddZrF \x1a\xa1\xcc\xb8\xb5#\xd0F\xe2\x08\x7f\xd0\x19\xe7j\xafu\xc6Y\x02\xe3 \xac\xb5\xa2!\xb9x!\xc1\xcf\x0d \xab*\xb6\x9e#Ry9\x8e'RQ\x10\xcc\x15 \xa0\xf3E\x82c\xba;8Y\xed\x9b\xfd\x04\xfeH 8$C\x8a\xb4rI\x82\x8bO\xd2\xa9\xd9\x7f\x1cK\xe2\x96\x04'\xbf$\xc4}\x93\xa8\x80U\xd2\x92\x8b/\xe9\xe1\x9d\x04\xff\x0c\xa1\xf9'!\x84\x94a\xc5[4\x0f\xa5\xfdy\x9a\x8b\xd2\xfe<\xc9G k\xc9)\xf4W\xdd\xbc\x94\x10\xd2G>\xe2\x8a\x10uyh,BJ\xcaCj\x11RR\x16\x8a\x0bU,\x91\xf3\xe0\x9f\x01\xdee\xda\xf05\xb9x+\x01\xec\xdc\x95\x90\xaf2\x96\xfdB\x1cA\x0e\xa9jI\x9ac\xe1\xb3\x84@\xd2\x9cYD\xfd\xa3\xe9s\x0cM\xb9\xb8-\xc1\xc1o\xa9\x14\x17\xc2q \xae\xefL\x19\xdc0\xbeK\xeaI\x82\xf3\x92z\x8c\xe2\xbd\xa4\x9e3\xb8/\xc9\x87t\xfeKX\xc7\x81 ^\xe3\x9a\x81\x0b\x93R\x93\xcc\x87I)}\x1aNL\xaa\xa4'\xe2\xc5$\x8b\xca\xc9\x8d v~L\x08\xd9\xe1\x99\xbc\x950\xcfG\x1fW&8\xf92!\xb9\xfcu\xdc\x99`\xf2gB\xc0\xf6\xf9\x1d\xc9\xa3 Ks\x1a\xc3\xa59)0`\xaa\xb0$\xc4~\x08@\xbf\xae\x11\x9a\x19\x9f^\x9fmx|zb\xf7\xa7\xcb3\xcc\x81\x9a\xd9q3Y\xbd\xf8\xf4\xbbt\xf4\xcc\x9e\x14\x18\xddi>\x14\xcd\x81\xa39\xcb6'l\x08\x96F\xa1i+\x8bq j6L\x8d\xac\xed\nT-\xfa\xc0i\xc7\xd6\xdc>G\x87\xd7\xd1\xebw\xf4{\x1e=\xbeG\xef\xae\x1a\xc5\xbb\xb7F\xf1{\xe4\xa2|r\x0em\x96\xbb]gq\xf8!\xff\x08m\xb7z$\x9d(@`\xcb\xf3!\x01\x99\xb0\x80IM\x1c\n\xe7\xc2\xe1\xca\x1cU$\xff8-s\xd4\xf6\xe7\xc4\x96\x7f\xbbs4\x06\xb1\xb3avev*\x92w\x84Zn\xa8\x9e\xe5\x0f<;\xad\xf7\xbb\xa18\xc0\xb3\xc0\x96\x874)\x06\xf6sY\x1c\x1a\x10\x0c\x82\x04\xd7\xb5*\x0e\x16\x9c\x0f+\xd1\xc0\xe0\xa4b\x154H\x81\x83.\xbb\xe2\xa4Hs\x9d_\x12AB\x1a&\x0c)\xd8 \x15z\xc0\xc2\xe4\xb3g2d\xe8\x03\x0d\xa3\xbf\x95\xc5\xf6\xbb\xed>\x7f\xd55|C\x00\xc4\x80\xf9d\x07\x11\x03 \xb2U\xef\xd9\x81\xc4\xf5P\xe2j01 N\xf4\xf9\xbc\xa5x\xfbk\x1d\xa4\xf8%A\xc5/ +~1`\xd1 -\x06\xcc\x8d\x80}\x83\xe1\x8e\xf3\x01\x8cn\x881k\xa5\xac\xab~F\xa8q\x05\xd8\xb8\x16n\\x\xc8\x13\x01GW\x9f\xc4\xa3\x90\x86*\x03\x95t\xe3\x92S\xadB\x91I\xe7\xf0\xb0]G\x1a\x86\xeaQ\xcfZ\x10\xcap\x8c2\x10\xa5\x0c\xc4)W#\x95~\xbb\x9d \xad|\"\xbc\xf2K\"\x96_\x14\xb3\xfc\x02\xa8\xa5\x13\xb7\x0c\xdal\xd2\xd8\xe14gC\xd0K\x1f~\x99\xa3\x1e\xebQL\x12\xc7\x0c\xd9\xdf\xdb\xb1\xcc\x85\xad\x8eC3K\x8em\xc9\xb1-9\xb6_#\xc7v\xc9jLA\xfe!\x11\x05\xea{B_0\xaf\xb1d\xf3/q\x06%\xce \xa4\xd3J\x9c\x01\xad\xa6\xc4\x19\xd8\xfe\x18p\xb0\x06\xdf\xe0\x9b\xc5w\xc0\x86\xecHA\xc10\xffSb\x98%\xce\xc0\x94oz\x9c\x969j\xfbsb\xcb\xbf\xdd9Z\xe2\x0cT\xf9fGh\x893(q\x06\xb3\xaciU\x893\xd0uM\xb6\xb8\xc4\x19\x948\x03|\xd87\x9fJ\x9cAH\x9b|x\x15\x8a\xb7\xbfJ\x9c\x81\xab\xac\x12g\x90\xb7R%\xce\xc0\xd4U\xe2\x0cJ\x9c\x81\"%\xce\xc0^V\x893(q\x06\xcb\xa2J\x9cA\x893(q\x06\x8a\xb2?d\x9c\x01\x85\xf9\x873y/^\x97\x8du\x12\x1a\xf0\xcd\xcf5.\xb18L\x8d\xe1\xa9nm\xfc\x1b\x1a\xcf6\xc6\xb7yqnY\x9c\x1b\x95\xc0\xed =8\x13\xb7\"Y7 O\xbf\xed\xf8\x02\x9b\x8d'\xdcb\xa8\xdbv1r\x97\xe7\x92c\xdb\xf7\xf5\xf8Z\xb7\xdc\xd9\xf3\x1bK\xc4IeS5\xfc\x92NbJ\x08\x04D\x9d\x0d\xceH\x1b\x0d \xcd\xbb\xc5\xb4\xcb\x03\xecz\xbf\xb6\x89\xab-<\xf5_\xb0\x12\x8a\x0b}\x01h\x91UH\x01\xac\"\x01*\xfd\xf3\xbe\x97\x1e\xf0o\xf6\xd3\x1a\xa0\xcc\xd7\xf8\xb4\x1a:\xb2\xc0\x0d\\\x9f6\x06\xd0\x98\xf7h$L\xe1*.\x14\x86\x88\x80\x1d\x8c\x81\xd3\xb3\xeeE\xd3\x7f\x92\x9b\xf7\x90\xf1CE\xc8E|\xc0\xc5\xbe\xefz\n\x89\xdbZ\xe2\xcet\xf8A\xb9\x12\x7f\xe1I\xda\xb7\x1b%,\xcdp\xd7ETT\xbb\x99\xbf\xea\xfbvS[\xea2\x15\xbb\xdf\x13\xc5\xea\xc1ytX\x1eQ\xecx\xeai\xa7\x1e\x19K\xe4\xdfL\xdcg-\xaa#\x14\xe0\x9f\xfa\xdbz\x9c ,.\\\xd2\x8c\"tW\x15\x8b\x9a\xd6n\xac\x81:\x17/\xc5\xcd~/\xc4\x9f\xd4Z\x8cS(lb\xbc@s*\xcbA\x13\xcb5\x8e\xeb\xa5\xec\xaa\xc5\xdc\x98\xc6\xf7\xd2\xb6*\xaf\x02\xbf\xbfZ\xbc(\xe6G\xc7*\xbc\xfe\xf5\xec\xe3\x9f\xcf^w\x8c\x8d\x06\x9a[\x81\xcb\xaa\xabd\x8f\x05L\x16\xd6\x8ck\xbd1\x10\xee\xdav\xcf\xaaFo\xdf\xffx`\xdc7\xb8(\x11\xa6\xca(vF\xe8\x15\n\x0e\xd5\xe7\xdb=kv\xc3C\xd2\x88\xbby`\xa3*@U\xb8\xb5\xf0TEl7\x80\x1f(v\xb7\xec\xb3\xe7C\xda\x8fQWlw\xfe\x19\xcbd\xd5\xe6A+X\x147\x9e\x16\xd8fP\x0f\xa3\xdc\xb7_\xf7\x12\x88\x1cZ\xd8\xd7\x87z\xb4\xfa\xd50\xaf\x0b=\xdf\x1cI\x97\xb2\xf0\xbdb[\xce\xd4\xf1B|km\x1f\x86\xbf\x8d\x07\x95e\x0d\xf1r\xf5\xa9\x83,c\x89\x1fi\xae\xc4/\xab\xe3\x9f\xa5\xaa(o\xc6\xd7\xbaqHVz\x8e\x1c>\x9eT?\x0f\x89\xa8d\xa9\x13\xee\x98Z\xaa.\x94\xe1\x04\xebEC\x89\xd7\x1eM\xa5j\xbb9\xe5-\xe2zr\xf2\xd3\x82\x13\xe6\x1d_\xa1\xa3!\xac\xfd \x01\xd7\x86\x03\xbc\x18\xb7\x0f?w\xacoO\xddF\\c\xca\xa7\xea\x89\xc7g\xef\x1f\xa1\xde\x8e\xc7\x9e\xfb\xda\xbc\xe5\x9bP7\xdf\xf0I\x01;\x96\xeb\xc7\x113\x12m\x80\xc3iv\x0b\x8e\x9b\xbc=\xab\xfa\x81\xd26\x9eS\xbf\xff\xf9\xfb\xd9\x14\x9cq;\xb7\xaf\xfa\x01z\xb6;(\xb7\n\xbe\xbfz\xf3\xa7\x1e\x8e\xd5\xf0\xc0\xd5\x13\xca\xa65\x84*i n}\xe5=%\xd4\xf3>\xf9\xa1\xe2\x97\x92\x13\xaf\xffu,\xd8z\xad\xe2_\x7f\xc4zs\x85\xf3:06\x9e\xd0\xb5\xa9\x9a\xb6\xa97\xfc\x9cK\xddt\x0e\xf0\x03;\xdb\x9d=\x1b\xbb\x8d{\x9a\xbe?\xfb~\x9c\x13M;@\xb5\xd9\xb0\xe3\xc0\xb6?\xd2W\xfe_4p\x1c;\xb2\xde\xb0g0\xb0\xd1\x18\x9e\xfaS56\xfb\xd8\xb1M{8\xd6\xfb\xb1^\x02*\xbe\xab\x9b\xaa{\x84J,\xcbK\x19{D\x1ca\x87\x07F\xa2|\xec\xf3h\xf0\xa1\xe6\x13\xf9\xd43y\x13\xee\xf8\xe9E(\xfd\x8b\xe6\xf1\x0c~m?\xb1\x8f\xac\xc3\x8bq\xdf_\xbd\xa1\xc0E\xb4\x03\xe2\x82^\xaa\xb0~\xf3\xc0\x0e\x0c\xfe\xfa0\x0c\xc7\xbf>\xc3\xff\xf6\x7f}\x06m\x07M+\xfe\xfa\x8c\x8f\xa8q5\x91\xbbt<\x8e\x13\xeaN\xc7\xf1\x14G\xde\xbe\xcb\xe7\xc0G~\x0dp5\xc0\xa1:\xf68<\xc6\x9a\x8f-\x95~<\xee\x90\xacq\xc9\xadz\xe1\xb5\xe8\x9f\x93_\xe6\xef\xe0\xe2~\xae\xe7\xf89\xe5}\xcaSS\x84\xdd;\x1d\xd8\x96\xbc\x1c\xfc\xef\xe0E\x03\xbf\xde\xdc\\\xc2/\xe77\xd06\xd3\x81\x87O7\xbcN\xb82/\x19\xbdy<\xb2\x7f\xfb_\xffF(\x04\xe9]m\xe4H@\xbb\xc9\xfb\xf4\xd8\xb5\xdb\xd3f\xdc/\x02\xeb\xba\xb6\xa3n\x8e\xfe;xq<\xee\xebM%\xfa\xa0c\xe3Xj?\xe1\xee{Sm\xc6\xb9\xdc\xb6\x1fN\xc7\xc9\x89\x89+qk\xde\xfc\x0f\x16s\x04x\xa5r\xdb\xf1\xed\xcc\xf8\xd0A\x19\xcb[\x1c\xcc\x95l\xc0\xf8\xef\x8fm\xbd\x85\x8a\xb8\xf2\x1f\xf8 d\xac\x0e\x9f\xae\x1d\xbbo;\xf6L\xbe:j\xac\x86\xfa\xae\xde\xd7\xc3#4\x8cm\xa5\xbb\x98\x9b\x95\xee\xa3%p\xa3mF\xf3\xd5\xec\x18\x7f\x9c\xcf\x9a3\xf8\xe1}\xcf\xe0#\xebzt6\x0d\xf2~i\x1c?US\xed\xe8\xb6\xdeu\xac\xfa\xc0\xfdK\xa8\xf2\xecGj$\xbcm\x07\xf6\x1c\xcf\x1a\xf7\xa7f\x83#}\xac\xb5\xb0\x12\x9bS\xd7qTA\xf5\xc67\x96\x0en9\x08a\xba\xe1AZ\xfb\xbb\xd3\xfdx\xc0cU\xcf\x9e\xf1\xbb{\xebA\x16\xc47l\xdc/<\xcd\x8f;\xb6\xab\x9b\x86\x0eg\x18\x97X\xd28\x9bW\xd8\xd2\xf6\xed\x9a\xcf\x9e\x1e!\x80qz6\xba=\x80\x1fD:\x1cb(8\xdd~\x84C\xbd{\xa0\xac\xc0\x1d9\xfdy\xb3x\xf8B}8\xee\xd9a\xbanX\xf8a7\xd0\xb3C\xd5\x0c\xf5\xa6\xd7\xa7\x05\xb1W\x00\xdf\x12o\xc5\xa6 h\xfd\xffm\x9c\xfew\x0c\xaa\xb1\xf0z\xab,\xe0\xc6j-\xcf\x80w\xedGr\xe9\x9f\x02l\xf8\x17Y<\xe1\xae\x07^.>#\x81\x0dT\xdd]=\xf0\xbb\xe1\x1d\xf5\x11\x96TSV\xed\xdbf'\xee\x12\xd7?\xcfh\xef\xb8Y\xc6\xfa\xdc\x99[\x1a\xb5<\xb9;1\x06\xd3\xa5~\x81\xbd\xb0\xc6=\xf4\xa7\xe3\xb1\xed\xf8\x8av\xac6\x1f~\xc6{\xe5\xc7u\x0c\xbfmO\xcf$j)o\xef\xe14\xa09\x91\xd3\xb4\x1f\x0d\x99r\x19:w\x00qw\xc5tO=6\xe2\x85a\xbf\xf0\x93\xe8e\xc8\x8b\xa6\xff\xfc\x1c.\xc7z\x8e\xf3ST\xb9\x9a\x16\xaa\xba\x81\x97\xff\xf5\xbf\x92\x8b\xca\xeb\xb6\x85\xfb\xb6\x85\x7f\x84\xb3\xb33\n^\x1a\x1b^5\x8f\xd4\x9f\xaa\xe6\xf1l,\xf4u\xd7\x1e~\xb8o\xdb\x1f\xa9\x87\xce\xce\xa8\x95\xa3\xbe\x87\x1f\xc6\xd7\xdf\xf3\xaa\xde\xb4?\xfc\x97\xf1\xfd\x1f-\xd7]\xd3:\x8cK\xc8e_\xfc\xbd\xa7/\xfe[\xf5\xb1J\xea\x0c\xf8G\xbe\xaf\x195G\xb6\xbb\xee\x7fx\xdd\xb6g\x9b}\xd5\xf7\xd6fcU\xc6\xc7\xb1\x15\xca+T\x89\xd6\xfe\xf8\x07O\x7f\\>\x0e\x0f\xe3Q\x9b\xd0\x89Ux\xdd\xb6?\x9c\x9d\x9dQi\x1cSo\xfc`\xf9+\x1f!\xbc\x97\xd6t\xd2\xf8\xe2\x05\xf6\xd1\xab\xf3\xeb\x97W\x17\x977\xef\xae~4\xed*\x88Bp\x1c\xd9\x8a\xc1\x82,\xbd\xf3\x7f{z\xe7\x97\x96\x0cp\x1b{\xe6\xf9?\xc2\x7f9\xde\x9d\xbdn\xdb\xff\xef\xec\xecL\xbf\x1d\x9dK\xd5<>\x1b7P\xe3\xb3U\xf3x\xbc;{\xcb>Y\xebY\xdf\xf3g\xff\xaf\x7f\x84\xa6\xde\xdb\xee~\xa7;\xcd\xb8\x9c\xdd\xf5\xacVy\xf2UQ\x17\xac\xf7\xd9\xfb\xe6Pu\xfdC\xb5\xbfiq\xc8\xa7TT\xfb\xf5\x86\xbbn6\x1f&\x1b(\xb7\xc6p\xf78oA\xa4\xa5F\x9c\xeeQ\xc2\xaf\xe3b\xad+\xfc\x13\xb1\xa1\xf8y<\xfd\x9d\xf1?\x8c\x1b\xb1?\x8d;\xf6i\xe5\x18W\x95\xf1\xfb\x9bv\x1dG\x84^\xc0d\xac\x9b\xfd\xa3<\xb3\x18\xc7\xcbi\xd3\x07\xd5\xfd\xc0pW\xc2O\xb6\x7f\xfa\xf9O\xbaBqp\x92\x95\xc1\x93\x12\x13#\xf4\xfb\xfb\xb6=\xbb\xab:\xde\x8c\xcf??\x9e\xfd\x9f\xef\xb1\x17p\xcfO\x1dbx\xb1\xdf\x8fO\x8eK\x86\xf6\xc7\xffv\xfd\xee\xad\xf1\xe3\xf8\x11\xc6?\xcc\xc7h\xdc\xf2\xb4\xe3d\x14\xeb;\x1e\x17N=\x93\xe1\x01\xbb\xd3\xbe\xeatM\xa6\x02\xc4=\xe6u\xf9\xd9\x1c\x81!&\xda3\xb1\xdc\x1b\x87oe\xad\xbc\xe7\xad\xfd\xeb\xff;\xb6\xf7\xaf\xe2\xbc\xb8p\xff\xc9\xde;\x93s\xfb9\xb9\xa7\xad6\x1f\xc6\xa9=\x9f\x93\xee\xeb=\xa3\x0c\xaa4\x02\x97\xac\xeb\xdb\xc62\xca\x85\xcb\xe3\xbe\xee\xfa\xe1\x96w\xbb-NC>\xca\x83\xc4\xc4\x93\x7f\x1fd\xc8G\xa1K\xff\x9e\xf7\xc6\xf7\xcf\xe1{j\xc8/\x9bx\x86\xed\xf8\xfe\x19\xad\x89\xb7\xe0mu\x18\xb5\xfd?X\xd5\x7f\xb2<:\xb6@{2\xa4\x19\x17\xf7bg\xbe\xfc\xf6\xf8\xdd\xea\x1e>\xb1\xfd\xfe\xa7\x0fM\xfb\xa9\xe1\x93\xf1\x81{\x827\xa7~h\x0fb\xcc.\xf5-\x07\xda3\xdc\x17j\xa3o\x0e\xa9\x12\x85\x8e\x03\xaa\xd9\x19\x8e\x19>\xb8\xf4\x02\xfe\xca\x07\xbc\x1ck\x0f\xed~\x8b\x03M\xa9\x13w\xf2\x881\n\xc2\xad\"\x86\xa8\xae\x8d\x171\x8dM\xf8a\x9c\xe2\xb2\x0b\x8cS\xbbt-\xfd\xdb\xff\xfa\xb7\x1f\xc9a\x9c6\x1e\x96\x85\xd8\x86\x04o\xfe\xa8\xec\xcfg\x7f\xff\xe7\xbf\xef\xbf'?\xf2\xfc\xef\xf4{\x0d\xa53\xf6;\xed)\xe9\x94\xd7\xa0\xd4j\xa8\x10GU\xa2\x0b\x97:\xc4\xfb\xff\xb1\x88y\xd2]\xfc!\xbc*S\x0d\xae._\n]z\x88\x93\x1dK\xe8\x11\xacX\x0d)\x1c\x15<\x8b|\x85~\x0d\xbe\x1c\xa00v\xd2\xe4\xc1\xef'\x04\xa6\xea\x18\x1eF\x155\x1d\xdb\xd5\xfd\xc0:\xb6\xbd5\xa1\x12\xa5\x14\x01\xec(\x90\xf2\xd5\xf4\xa6\xecP\x0d\xf0\"\x1a\xb8\xca5o\x00\x81R\x06\x12\x10\x9c\xfe\xba\x04\x06\xbd\xd5\xb4B\x84\xa3\xdcw\x8c\xdd\x9a\x0c&\xd6N\xb1`\x7f\xdfFW\xac\xc5H\xa5PX\xe9T\x84\x15\xed\x01'\xe2\x03\x90 C\x95\xa2c\xa9S!i0\xce:\x8c\x95P\x10\x0b\xb6\x12\xaa\x96\xf0+\x80;.D3s$&\xab\x8c\\i\xae k\xf5\xddwf\x1dpH;\x0d\xb9f_\xc3\xc3W\x97\n\xc8\xc0U\x87U_m\xcf']\xbaI\x0f\x8a\xfb\xf8\x9d\xd0d\xf9 ek\x9a^\xb6\xbaE@\xcbvv\xac\x0c\x9c]\x01\x10\xb3\xc5ql5\xe0\xfeK\x8fm\x89\xf7N+\x15b\xa7\xb2\x03\xce>\xc897\xe8\x9c\x19v\xf6\x00\xcf\xc9\xd0s^\xf09\x04~N\x00\xa0\xf3B\xd0A t^\x18:\x00\x88\xce\x0eE{\xc0\xe888\x9aT\xe4\x84\xa8\xb3\x80\xd4\x8105\xf9\xe6*\xe8:\x19\xbc\xce\x0d_\xdb\x01\xec\xcc\x10\xf6S\x80\xd8\x99a\xecP ;3\x94\xed\x06\xb3\xb3\xc3\xd9v@{\x05\xa4\x1d\x0fj\x93\xca8\xd0m\x81\xb5\x93\x80m+\xb4\xed\xddR8\xe1\xed\xb0\x1dG>\x88\xdb\x0dr\xfbk\x93\x15\xe8vC\xdd\xd9\xc0\xeeT\xb8\xdbP\xc7w4\xe4\xe6!/\xe4m\x03\xbd\xd3a\xef\x00\xac\xd7 }\x07\x82\xdfV\x0cl%\x00n\xd7C`\x05\xc90\xf8\x9a\xce \x81\xc2\xfd\xbd\x10\x04\x87\xaf\x06\xc4\x9d\xbd\x93\x00\x8a\x07\xc0\xe2>`\xdc\x0f\x8d;;m\x0d<\x1e\x06\x90\x93\x10y2H\x1e\x0c\x93\xaf\x05\xca\x03\xa1r{'\xd2p\xb9\xe3\xf9\x10\xc8<\x07h\xee\xac\xb2\xf1{\x12tnh#\xa0\xf4\xac`\xba\x0dNO\x04\xd4\xcd*\x9b\x00{~\x88\xdd\x03\xb2[`\xf6\x9c@{f\xa8\xfd)\xc0\xf65p{ \xe0\xbe\nr\x0f\x07\xdd-\xb0\xbb\x0dh\x0d\x87Z\xfd\xd0\xfb*\xf0=\x18~'\x1b\x94\x1b\x82\xcf\x0b\xc2[`\xf8\xdc@|n(>}\x8c\x04\xc1\xf1a\x80\xbc\xbe\xb2\xe5a\xf74\x80\xf9th\xbe0\x00\x15\x06\xa0\xc2\x00\xf45\x18\x80, j\x10|\xaa\x03\xa7+\xe3a\xf4\x08\x89\x08\x08\xd5\x11E\xb2\xc2x|\x85\xf8\x18Ns\xaac\xa3s{\x14\x8dO\x94\xe8*K\xa2\xacy\xff\xd0v\xc3C\xd5lo7\xed\x96Lv\xb5\xc7p\x89{\x80&\x150\xaa\xa0\xa8\x18\x88r%\xff\x865\xc7\xd6^,\x06F\xf0\xfd\xc6\x0c{ }l;\xce\xdf\x06N=\x92\x0fP\x85S\x06\xce\x1c\xa1\x0e\xf6\x0ew\x8f\n\xb0w\xe1\xd6\x9b\xe2\x1c\xc0>\x1bmSdMT\x83\xd1\x88\xd0\xc8\x06\xfd\xc5\x98\x18\x07c\x82\xfe\x91\xc2\x1d\xe2&\xf4\x13\x87\x17\xb8\x86\xa1{j\x87\xec\x04S\xa6\xb7s\x82\x87\x14\x9e:\xc9m\xfb\x98\x8c\x13\x9d\x9e\xea\xdad/\xbb\xdd\xb2\xdb-\xbb\xddoa\xb7k]\xe2R\x16\xd8\xde\xbf\xc2^-\xb6\xab\x01+i..\xaf\xd4\xa0\xbd'\xa0\xe9\n\x0f\xce\xcb\xc6\xd3\xe5 \xc2\xd3\x96\xa7\x15\x86y \x83\xed\xac6\xc8\x0d0g\x0c\xad\xb3\x07\xd5\xe5\x0b\xa7\xcb\x16Hg\x0d\xa1\x1b\xe2\x83\xe7r\x85\xcd\xb9\x03\xe6\xa2B\xe5\xa2\x83\xe4x{\xf5\xd8.kx\\t`\x1c\xceNM\x9b%$.%\x18\x8e\x07\xbe\xe9\xad!\xb0\x96\x98\x008{\xb0[b\x98[P\x80[x0[B\x18[B\x00\x1ba02\x86\xa9\xe5\x0dP\xcb\x16\x9a\xe6\x0fJ\xcb\x16\x8ef\x0bDK A#\xc3\xcd\x86\x90@\xb3\xd8\x103k8Yd \xd9\x1a/O\xd8 \xc6XA#C\xc5\xac\xb7}\x0c\x8b 1{\xd9i\x81a\x18\x08\xa6\xa83C\xc22\x04\x83\xa5\x85\x81i\xa3\\_\x0c\x13C\xbfDG\xab\x1aS\x82\xbc\x9c\x11L\x96\xc0.oH\x97\x19\x99\x11\x1e\xc6e\xbe\xfb7\xaa\xadQA[!\x8d\xf5\x05j\xd9\xdb\xe6\x0d\xceZ\x11\x96E\xb692\x14\xcb\x19\x84e\x0f\xbfr\x05^\x91\x9d\x10\x1al\xe5\x0b\xb3\xd2\x02\xac\x12B\xab\x02\x82\xaa\xc2\xc3\xa9\xbc\x81TD<\x92Q\x1c\xf1\x8c/`*-T\x8a\xac\x94\xf2KR`\x94\x1e\x08\x95\x12\x02E\x84<%\x05;\xe9\xc1M9\xc3\x9a\xac\x01MF(S\x9e \xa6l\xe1Ky\x03\x97\xc2B\x96\xbc\xc1J\x81aJ!\x01JF$\x8fYZh\xa8\x89;\x1c)0\x10) \x04iQ\xe5\x9caGI\x01Gf\x80Q\xbe\xd0\xa2|AE\xf1_\xd7\x1bH\xe4\x0b!\x92fZ\x0f\x1b\"\xb7\xe9\xfeP\xa1\xb4 !\xda\x8d\xaa\xfb^\xbf\x05\x87\xeazX0\xa3c\xd3\x06N\xd9\x80?\xd7\xb7\x8c\x05\xfb,0\x9f\xab\xa8\x14hO\xf7\xed\xa7\xc2y3\x84'\xban\xc6\xee\xc2\x06\xe1\x97\xbb\x7f \x96fDG\xb8\x9cm\xb0\xf1\xea\xbb\xdf\x95v,\x8cn\xdfB\x1f\x11\xdc}_h:;hm\xdc\xc1H\xa8=\x85\xce\xc6\xe8\x04\xb0\xa2\x10$o\x0b=\x9e \xdf\x98\"ik\xac\x0d\xf7Q\xd6|\xb1\xe6\xc6\xd0\xd3\xd8\xa8ih\xdb\x0d!\xb1Y\xe9t4\x14\x15\x0d9\x03\xc0\x8b\xfc\xaf\xa3\x9fY\xbe\x1b\xcb<3\xb5\x0f\x15\xeaF=\x91_F\x0f\xc0 \xed\xd1\xb1\xed\x06n\x8d\xd6\x1a\x9f\xa1j\xb6U\xc7'~\xff\xe4!NO\x1a=4\xd6_\xbd\x0eH\xeb6\xf5=\xb2\x12\xae\xf0\x9d\x9b\xf1?\xcb\xa2\xaccr\xb5r\"=W\xb9\x9d\xeb\xfc\xf3\xc0\x9aq\xef\xaf\x94\xa15Z\x1e\xd17\xd5xH\xad\xcdD\xa2\xeax\xdcs\xa4U\x0dq\xa1K\xbf\x16\x03\xe2\nU\xdb6\xba\xe2)Y\x03>\xdfpZ,\xb4\x1d\xeb\xcd\x87q\x924\x1ax\x8b\xf0@\xd7\x1e`[\xdf\xf3\xeb\xec\x86\xe9{)\x86\x94\xa8\xe1\x9b\x1a/\xd2\x9fq\x0b1rQ\x1d\xaev\x0d\xfb4\xab\xe3\xf5\x1a+2\xb6\xa1V\x07\x99\xcc\x1fS~j\x1b\xb6 j\xa2\xa6\xea\xa1\xdd\x9e\xf6b\xc6\xb2\xd1 \x90\x13\x91\x87X|\x05\xc2<\xeb\x84\x06\xcb\xa4\x06jb\x83}r\x83\x87\xb5\xc7\x9c\xe4\xe0\x99\xe8\xe0\x99\xec\x900\xe1\xc16\xe9\xc1=7!|\xf2\x83\xdb\x00@pA\x16\xd6\x80\x04c@\xea\xab\x07\xda \x80\xb3&i\x86\xc1Pw\xc7\xac\xc6\x01\x82\x0d\x048j\x9c\xd3P\x00m,@5\x18\xb0\xdehL/\x10\xb6\xc2\x1e\xc5\x85\xb1[\xa2\x0c:\\ki\x84\xf0\x8b\xad6B\xd8]qF\xe8ke%\xf4\x18~\xa5sv>Q\"B\x80\x01\"L\x8f\xb5\x0f\x82\xcc\x8d\xd5\xd0\xf8\xd4\x1a\x13$\xc1\xac\x98{\x0c\xc2\xa0\x88r\xad\xf6B^\xa9\x8f\xc3\x15C3\xa7\xc6\xaa\x13c9~}\x13C\x94\x17>1\xd6/\xcf_d\xaf\xfc\x95\xd3\x01,3\xa9\xec\xe1i\xe5_w\x0f\x1f7\xc7J,\x7f\x89\xe5/\xb1\xfc_#\x96\x9fZ}\xc2\xd6\xb5\xd0\x1d\xdf\xf8\xff\x11\xeb\xda\xf8Z\x94)\xf8\n;>&\xea;\x83S\x9b\x8e\x05]\xb5\x9aX\x1b,VyF\xec\x07n\xebm\xfaq{\xed2j[D\xc5:Nv\x90\x82\x80\xc0<'\x02{J\x14\xa8\xacn\xbf\xc9\xd8?~C\xf9\x02[3:j\xfc\x81\xad\xbd[ay#\xb7T\xa2<:T\xdd\x8e\xe9\x8c\xf36\xef\x85\xddw1\x94\xabm\x0d\xc9\x96\x1a\x01>\x86\xe1!>E\x022\xa6I\x807U\x02b\xd3% %e\x82\xea1?\xabpt\xea\x04\xa1\xcb\xcb(\x9c\x92BA\xa8+W\xdb\xa6\xa5U@Zj\x05=E\xc9JfK\xb8\x80\xecI\x17\x903\xf1\x02\x82\x92/ g\x02\x06\x94\xabm\xa9b\"\x137\xa0\\m\x1b\x97\xd8\xa1)+W\xdb\x96\xabm\x03t\x94\xabm\x97R\xae\xb6-W\xdb\x06>\xebK;\x81\xe4\xd4\x13(W\xdb\x0e\x81\xc9)\x909A\x05|\xac\xbb\xe5j[\x7f\xe2\n\x84$\xaf@x\x02\x0b\x04&\xb1@\xb9\xda6(\xc1\x05R\x93\\4]\xe5j[BY\x00\x93\xeer\xe9\x90`(\xf7\x98Z=\xda\xdcQ\\\xb7\xcd\xed\xb6\x1aB\x1d\xc3\xf2\x8c4\xbe\xf2\xd3P\x1f(\xd0\x16n\xea\x03_\xb2\x0d'\xfe\xa7\xaa7\xfc\xf7\x13\xba\xc9\x9f\xb0D\x1c\xf1\xfdy\xbdQ\xdb\xb0DYT(\xc4\x0f\xb2\xf0\xa2\xc21\x96\x98\xe0\x01\xfe\xde\x1f4x \x04\x94\xb1\xc7\x10d\xa8\x951\x94\x1d\xf0\x8c\x1d\xa0\xb1@4n\x90&.\xdaa\x05Pc\x81jB\xe2\x13\xa2\xe0\x1a\x1b`\x13R\xa0\x1f\xb4\xa1a\x1b\x07p\xe3\x0e;\x1d\xcae\x91\xe5\xb2\xc8rYd\x0c\xb0\x13\x00\xedd\x07w\xcae\x91(\xab\xc0\xa0d8(7 T.\x8bT%\x0c\x1a\xca\x0c\x0e\x95\xcb\"\xcbe\x91\x1e\xd0\xa8\\\x16\xb9\x1e@2\xd4\x0d\xe5\xb2\xc808\xc9\x7fMb\x18\xa4T.\x8b\xe4\xb2\x12b*\x97E\xa2\x84@N\xe5\xb2H\x94rY\xa4\xfecFx\xaa\\\x16\x99\x15\xba\xca\x0c^=\x05|\xb5\x06\xc0\n\x84\xb0V\x81X\xe10V\xb9,2\x06\xd4\xca\x0bk\x95\xcb\"\xf3_\x16\x19\ns9\x81\xae P\x82\x06\xbb\xe2\xe0\xaex\xc0\xabd\xf2\x95L\xbe\x92\xc9\xf7\x153\xf9\x16Pp\x18\xc8\xec\xcd\xe4\xbbR\xf8\x17\x8c\xa9\xfc\xd5h\xe4\xac\xd9\xe1\x19\x89 =Y\xe0Z\xfe7\xd9Fo\xce7\x99\xed\xedR\xb5\x98\xbci\xb9\xdd2\x97{ah\xd4Q\x15\x93\xcfM\x0d\xa0\xe3\x94\xce\xf9\xed\x0c _\x84@\xb6\xd2\x17\xeb#\x19\x030\x84G^\x98\x88\xff\xba\xd1\x1c\x88\xf2\x1b\xf8\xbekD\xae\xc6\xf4M4\xdf\xa5\xde\x8d\xe0\xeb\xd8\xfd\x8a\xcd\xc6Pn\x9aJG\xe1\xcbMSa\x08;oo\xb9ijr]D\xa5G&b\xe4A\xe8x8\x12\x9e\x80\x81'\xa0\xdf\x84\xc1\xc8\x88q\xe7E\xb7\xb3\xe1\xda~D;\x1b\x96]n\x9a*7M\xad@\x95\xcbMS\xa2\xa3U\x8d)\x08q\xc8\xe5K\xe5\xa6)E\xcaMS\xe5\xa6\xa9\x15\x97:\xf9\x9f\xf1\xa1\xadi8k\xb9iJHNL\xb4\xdc4\xc5%\x0c\xef\xf4\"\x9d\x81\x18g\x08\xbaYn\x9a\x9au%\xa1\x95\xe5\xa6\xa9\xc0\x9b\xa6B0G\x0b\xdaH\xee\xe8\xed\x08\xe3Zl1\x0eU4\xfd\xc9K\x06\xf0`\xbfr\x01\x06\xf2\x01\x03SYil\xec3\xfb\xbaP\xa7p\xb0\xfb\x98\xd7\xc5\xb8\x18\xcf?\xfb\xc7)\x1b\xf2e\xddmN\xfbj\xa8\x9b\xdd\xea\x8c\xc8\xcd\xfc\xee-\xaaut\xbc\xde\x11\xb6\xd2\xed \xdc\xf8+\x02q\xcakB\xdb\xd5\xe5K\xd9\x0f:2\xa75\xf8\xa6\x1d\xaa\xfd\xea\xa6r\x886\xb8\x91fA!\xad\xe2/\xa8\xe0\xe2\xff\x1f\x00\x00\xff\xffPK\x07\x08N\xf6\xc7X\x11\xc9\x00\x00?\x97\x0c\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(N\xf6\xc7X\x11\xc9\x00\x00?\x97\x0c\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00C\x00\x00\x00T\xc9\x00\x00\x00\x00" fs.Register(data) } diff --git a/client/docs/swagger-ui/swagger.yaml b/client/docs/swagger-ui/swagger.yaml index 0668a37c97..58bf43ed9d 100644 --- a/client/docs/swagger-ui/swagger.yaml +++ b/client/docs/swagger-ui/swagger.yaml @@ -4696,6 +4696,27 @@ paths: type: string format: date-time title: the creation time of the subspace + additional_fee_tokens: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + title: >- + List of fee token denoms with default minimum gas prices + allowed inside the subspace title: Subspace contains all the data of a Desmos subspace pagination: type: object @@ -5023,6 +5044,26 @@ paths: type: string format: date-time title: the creation time of the subspace + additional_fee_tokens: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + title: >- + List of fee token denoms with default minimum gas prices + allowed inside the subspace title: Subspace contains all the data of a Desmos subspace title: >- QuerySubspaceResponse is the response type for the Query/Subspace @@ -19533,6 +19574,26 @@ definitions: type: string format: date-time title: the creation time of the subspace + additional_fee_tokens: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + title: >- + List of fee token denoms with default minimum gas prices allowed + inside the subspace title: Subspace contains all the data of a Desmos subspace title: QuerySubspaceResponse is the response type for the Query/Subspace method desmos.subspaces.v3.QuerySubspacesResponse: @@ -19570,6 +19631,26 @@ definitions: type: string format: date-time title: the creation time of the subspace + additional_fee_tokens: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + title: >- + List of fee token denoms with default minimum gas prices allowed + inside the subspace title: Subspace contains all the data of a Desmos subspace pagination: type: object @@ -20233,6 +20314,23 @@ definitions: type: string format: date-time title: the creation time of the subspace + additional_fee_tokens: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + title: >- + List of fee token denoms with default minimum gas prices allowed + inside the subspace title: Subspace contains all the data of a Desmos subspace desmos.subspaces.v3.UserGroup: type: object diff --git a/proto/desmos/subspaces/module/v1/module.proto b/proto/desmos/subspaces/module/v1/module.proto index 9d403c8e5c..ff4b61c1d1 100644 --- a/proto/desmos/subspaces/module/v1/module.proto +++ b/proto/desmos/subspaces/module/v1/module.proto @@ -14,4 +14,9 @@ message Module { // of module names which provide a subspaces hooks instance. If no order is // provided, then hooks will be applied in alphabetical order of module names. repeated string hooks_order = 1; + + + // authority defines the custom module authority. If not set, defaults to the + // governance module. + string authority = 2; } \ No newline at end of file diff --git a/proto/desmos/subspaces/v3/models.proto b/proto/desmos/subspaces/v3/models.proto index 35154aadc2..bc716fe7a5 100644 --- a/proto/desmos/subspaces/v3/models.proto +++ b/proto/desmos/subspaces/v3/models.proto @@ -3,6 +3,7 @@ package desmos.subspaces.v3; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; +import "cosmos/base/v1beta1/coin.proto"; option go_package = "github.com/desmos-labs/desmos/v5/x/subspaces/types"; @@ -37,6 +38,13 @@ message Subspace { (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"creation_time\"" ]; + + // List of fee token denoms with default minimum gas prices allowed inside the subspace + repeated cosmos.base.v1beta1.Coin additional_fee_tokens = 8 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"additional_fee_tokens\"" + ]; } // Section contains the data of a single subspace section diff --git a/proto/desmos/subspaces/v3/msgs.proto b/proto/desmos/subspaces/v3/msgs.proto index eac9fa4037..e4d7d8bc63 100644 --- a/proto/desmos/subspaces/v3/msgs.proto +++ b/proto/desmos/subspaces/v3/msgs.proto @@ -2,6 +2,9 @@ syntax = "proto3"; package desmos.subspaces.v3; import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; import "desmos/subspaces/v3/msgs_treasury.proto"; import "desmos/subspaces/v3/msgs_feegrant.proto"; @@ -78,6 +81,11 @@ service Msg { // RevokeAllowance allows a granter to revoke any existing treasury allowance // that has been granted to the grantee rpc RevokeAllowance(MsgRevokeAllowance) returns (MsgRevokeAllowanceResponse); + + // UpdateSubspaceFeeTokens allows subspace admins to update the list of fee tokens inside the subspace via a governance proposal + // + // Since: Desmos 6.0.0 + rpc UpdateSubspaceFeeTokens(MsgUpdateSubspaceFeeTokens) returns (MsgUpdateSubspaceFeeTokensResponse); } // -------------------------------------------------------------------------------------------------------------------- @@ -492,3 +500,34 @@ message MsgSetUserPermissions { // MsgSetUserPermissionsResponse defines the Msg/SetPermissionsResponse // response type message MsgSetUserPermissionsResponse {} + +// -------------------------------------------------------------------------------------------------------------------- + +// MsgUpdateSubspaceFeeTokens represents the message to be used to update the accepted fee tokens +// inside a given subspace, using an on-chain governance proposal +// +// Since: Desmos 6.0.0 +message MsgUpdateSubspaceFeeTokens { + option (cosmos.msg.v1.signer) = "authority"; + + // Id of the subspace where the list of allowed fee tokens will be updated + uint64 subspace_id = 1 [ + (gogoproto.customname) = "SubspaceID", + (gogoproto.moretags) = "yaml:\"subspace_id\"" + ]; + + // List of tokens allowed to be fee tokens inside the given subspace, represented as their gas prices + repeated cosmos.base.v1beta1.Coin additional_fee_tokens = 2 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"additional_fee_tokens\"" + ]; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} + +// MsgUpdateSubspaceFeeTokensResponse represents the Msg/UpdateSubspaceFeeTokens response type +// +// Since: Desmos 6.0.0 +message MsgUpdateSubspaceFeeTokensResponse {} \ No newline at end of file diff --git a/x/posts/client/cli/cli_test.go b/x/posts/client/cli/cli_test.go index aa66ac7df0..f5a8fba0d5 100644 --- a/x/posts/client/cli/cli_test.go +++ b/x/posts/client/cli/cli_test.go @@ -59,6 +59,7 @@ func (s *IntegrationTestSuite) SetupSuite() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, []subspacestypes.Section{ diff --git a/x/posts/keeper/genesis_test.go b/x/posts/keeper/genesis_test.go index 7c88857831..1226c955cc 100644 --- a/x/posts/keeper/genesis_test.go +++ b/x/posts/keeper/genesis_test.go @@ -31,6 +31,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), subspacestypes.NewSubspace( 2, @@ -40,6 +41,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } @@ -306,6 +308,7 @@ func (suite *KeeperTestSuite) TestKeeper_ImportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } @@ -339,6 +342,7 @@ func (suite *KeeperTestSuite) TestKeeper_ImportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } @@ -402,6 +406,7 @@ func (suite *KeeperTestSuite) TestKeeper_ImportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } @@ -435,6 +440,7 @@ func (suite *KeeperTestSuite) TestKeeper_ImportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } @@ -492,6 +498,7 @@ func (suite *KeeperTestSuite) TestKeeper_ImportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } diff --git a/x/posts/keeper/invariants_test.go b/x/posts/keeper/invariants_test.go index 16b2413cf9..03b1ca3a9d 100644 --- a/x/posts/keeper/invariants_test.go +++ b/x/posts/keeper/invariants_test.go @@ -30,6 +30,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } @@ -54,6 +55,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } diff --git a/x/posts/legacy/v2/store_test.go b/x/posts/legacy/v2/store_test.go index 1f9feefd42..c16f5430a4 100644 --- a/x/posts/legacy/v2/store_test.go +++ b/x/posts/legacy/v2/store_test.go @@ -40,7 +40,7 @@ func TestMigrateStore(t *testing.T) { paramsSubspace := newMockSubspace(types.Params{}) - sk := subspaceskeeper.NewKeeper(cdc, keys[subspacestypes.StoreKey], nil, nil) + sk := subspaceskeeper.NewKeeper(cdc, keys[subspacestypes.StoreKey], nil, nil, "authority") testCases := []struct { name string @@ -59,6 +59,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) sk.SaveSubspace(ctx, subspacestypes.NewSubspace( @@ -69,6 +70,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, shouldErr: false, diff --git a/x/profiles/abci_test.go b/x/profiles/abci_test.go index f169f922e3..820f9ce1aa 100644 --- a/x/profiles/abci_test.go +++ b/x/profiles/abci_test.go @@ -47,7 +47,7 @@ func TestBeginBlocker(t *testing.T) { ctx := sdk.NewContext(ms, tmproto.Header{ChainID: "test-chain"}, false, log.NewNopLogger()) cdc, legacyAmino := app.MakeCodecs() - sk := subspaceskeeper.NewKeeper(cdc, keys[subspacestypes.StoreKey], nil, nil) + sk := subspaceskeeper.NewKeeper(cdc, keys[subspacestypes.StoreKey], nil, nil, "authority") rk := relationshipskeeper.NewKeeper(cdc, keys[relationshipstypes.StoreKey], sk) ak := authkeeper.NewAccountKeeper(cdc, keys[authtypes.StoreKey], authtypes.ProtoBaseAccount, app.GetMaccPerms(), "cosmos", authtypes.NewModuleAddress("gov").String()) k := keeper.NewKeeper(cdc, legacyAmino, keys[types.StoreKey], ak, rk, nil, nil, nil, authtypes.NewModuleAddress("gov").String()) diff --git a/x/reactions/client/cli/cli_test.go b/x/reactions/client/cli/cli_test.go index 2598f91982..45e713aef2 100644 --- a/x/reactions/client/cli/cli_test.go +++ b/x/reactions/client/cli/cli_test.go @@ -63,6 +63,7 @@ func (s *IntegrationTestSuite) SetupSuite() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, nil, nil, nil, nil, nil, diff --git a/x/reactions/keeper/genesis_test.go b/x/reactions/keeper/genesis_test.go index 7a4e1945a2..c6694e0882 100644 --- a/x/reactions/keeper/genesis_test.go +++ b/x/reactions/keeper/genesis_test.go @@ -30,6 +30,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } diff --git a/x/reactions/keeper/invariants_test.go b/x/reactions/keeper/invariants_test.go index 0ff7432955..fbf1cada8e 100644 --- a/x/reactions/keeper/invariants_test.go +++ b/x/reactions/keeper/invariants_test.go @@ -30,6 +30,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } @@ -55,6 +56,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } @@ -80,6 +82,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), } diff --git a/x/reactions/legacy/v2/store_test.go b/x/reactions/legacy/v2/store_test.go index 9f595d26e4..94d8239cee 100644 --- a/x/reactions/legacy/v2/store_test.go +++ b/x/reactions/legacy/v2/store_test.go @@ -37,7 +37,7 @@ func TestMigrateStore(t *testing.T) { authKeeper := authkeeper.NewAccountKeeper(cdc, keys[authtypes.StoreKey], authtypes.ProtoBaseAccount, app.GetMaccPerms(), "cosmos", authtypes.NewModuleAddress("gov").String()) - sk := subspaceskeeper.NewKeeper(cdc, keys[subspacestypes.StoreKey], nil, nil) + sk := subspaceskeeper.NewKeeper(cdc, keys[subspacestypes.StoreKey], nil, nil, "authority") rk := relationshipskeeper.NewKeeper(cdc, keys[relationshipstypes.StoreKey], sk) ak := profileskeeper.NewKeeper(cdc, legacyAminoCdc, keys[profilestypes.StoreKey], authKeeper, rk, nil, nil, nil, authtypes.NewModuleAddress("gov").String()) pk := postskeeper.NewKeeper(cdc, keys[poststypes.StoreKey], ak, sk, rk, authtypes.NewModuleAddress("gov").String()) @@ -59,6 +59,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) sk.SaveSubspace(ctx, subspacestypes.NewSubspace( @@ -69,6 +70,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, shouldErr: false, @@ -89,6 +91,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) sk.SaveSubspace(ctx, subspacestypes.NewSubspace( @@ -99,6 +102,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, shouldErr: false, diff --git a/x/reactions/types/msgs.go b/x/reactions/types/msgs.go index 8d6f2c5f10..4208d443eb 100644 --- a/x/reactions/types/msgs.go +++ b/x/reactions/types/msgs.go @@ -190,6 +190,9 @@ func (msg MsgAddRegisteredReaction) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgAddRegisteredReaction) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgEditRegisteredReaction returns a new MsgEditRegisteredReaction instance @@ -252,6 +255,9 @@ func (msg MsgEditRegisteredReaction) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgEditRegisteredReaction) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgRemoveRegisteredReaction returns a new MsgRemoveRegisteredReaction instance @@ -302,6 +308,9 @@ func (msg MsgRemoveRegisteredReaction) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgRemoveRegisteredReaction) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgSetReactionsParams returns a new MsgSetReactionsParams instance @@ -354,3 +363,6 @@ func (msg MsgSetReactionsParams) GetSigners() []sdk.AccAddress { addr, _ := sdk.AccAddressFromBech32(msg.User) return []sdk.AccAddress{addr} } + +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgSetReactionsParams) IsManageSubspaceMsg() {} diff --git a/x/reports/client/cli/cli_test.go b/x/reports/client/cli/cli_test.go index 21aaa77052..8704c5a039 100644 --- a/x/reports/client/cli/cli_test.go +++ b/x/reports/client/cli/cli_test.go @@ -58,6 +58,7 @@ func (s *IntegrationTestSuite) SetupSuite() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, nil, nil, nil, nil, nil, diff --git a/x/reports/keeper/common_test.go b/x/reports/keeper/common_test.go index 2e36184071..d040fdc199 100644 --- a/x/reports/keeper/common_test.go +++ b/x/reports/keeper/common_test.go @@ -76,7 +76,7 @@ func (suite *KeeperTestSuite) SetupTest() { suite.cdc, suite.legacyAminoCdc = app.MakeCodecs() // Define keeper - suite.sk = subspaceskeeper.NewKeeper(suite.cdc, keys[subspacestypes.StoreKey], nil, nil) + suite.sk = subspaceskeeper.NewKeeper(suite.cdc, keys[subspacestypes.StoreKey], nil, nil, authtypes.NewModuleAddress("gov").String()) suite.rk = relationshipskeeper.NewKeeper(suite.cdc, keys[relationshipstypes.StoreKey], suite.sk) authKeeper := authkeeper.NewAccountKeeper(suite.cdc, keys[authtypes.StoreKey], authtypes.ProtoBaseAccount, app.GetMaccPerms(), "cosmos", authtypes.NewModuleAddress("gov").String()) suite.ak = profileskeeper.NewKeeper(suite.cdc, suite.legacyAminoCdc, keys[profilestypes.StoreKey], authKeeper, suite.rk, nil, nil, nil, authtypes.NewModuleAddress("gov").String()) diff --git a/x/reports/keeper/external_hooks_test.go b/x/reports/keeper/external_hooks_test.go index 69b56a263f..5dd368ef74 100644 --- a/x/reports/keeper/external_hooks_test.go +++ b/x/reports/keeper/external_hooks_test.go @@ -28,6 +28,7 @@ func (suite *KeeperTestSuite) TestKeeper_AfterSubspaceSaved() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, ), check: func(ctx sdk.Context) { storedReasonID, err := suite.k.GetNextReasonID(ctx, 1) @@ -50,6 +51,7 @@ func (suite *KeeperTestSuite) TestKeeper_AfterSubspaceSaved() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 2) suite.k.SetNextReasonID(ctx, 1, 2) @@ -62,6 +64,7 @@ func (suite *KeeperTestSuite) TestKeeper_AfterSubspaceSaved() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, ), check: func(ctx sdk.Context) { storedReasonID, err := suite.k.GetNextReasonID(ctx, 1) diff --git a/x/reports/keeper/genesis_test.go b/x/reports/keeper/genesis_test.go index e34623f027..633eb5b287 100644 --- a/x/reports/keeper/genesis_test.go +++ b/x/reports/keeper/genesis_test.go @@ -26,6 +26,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 1) suite.k.SetNextReportID(ctx, 1, 2) @@ -38,6 +39,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 2, 3) suite.k.SetNextReportID(ctx, 2, 4) diff --git a/x/reports/keeper/invariants_test.go b/x/reports/keeper/invariants_test.go index 5b240324d4..9e1cd63c1c 100644 --- a/x/reports/keeper/invariants_test.go +++ b/x/reports/keeper/invariants_test.go @@ -29,6 +29,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, expBroken: true, @@ -44,6 +45,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 1) @@ -61,6 +63,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 1) suite.k.SetNextReportID(ctx, 1, 1) @@ -112,6 +115,7 @@ func (suite *KeeperTestSuite) TestValidReasonsInvariant() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveReason(ctx, types.NewReason( @@ -134,6 +138,7 @@ func (suite *KeeperTestSuite) TestValidReasonsInvariant() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 1) @@ -157,6 +162,7 @@ func (suite *KeeperTestSuite) TestValidReasonsInvariant() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 2) @@ -180,6 +186,7 @@ func (suite *KeeperTestSuite) TestValidReasonsInvariant() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 2) @@ -240,6 +247,7 @@ func (suite *KeeperTestSuite) TestValidReportsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveReport(ctx, types.NewReport( @@ -265,6 +273,7 @@ func (suite *KeeperTestSuite) TestValidReportsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveReason(ctx, types.NewReason( @@ -297,6 +306,7 @@ func (suite *KeeperTestSuite) TestValidReportsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 1) @@ -330,6 +340,7 @@ func (suite *KeeperTestSuite) TestValidReportsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 2) @@ -363,6 +374,7 @@ func (suite *KeeperTestSuite) TestValidReportsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 2) @@ -396,6 +408,7 @@ func (suite *KeeperTestSuite) TestValidReportsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 2) diff --git a/x/reports/keeper/msg_server_test.go b/x/reports/keeper/msg_server_test.go index 118f41692d..0afac73b14 100644 --- a/x/reports/keeper/msg_server_test.go +++ b/x/reports/keeper/msg_server_test.go @@ -66,6 +66,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 1) }, @@ -92,6 +93,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 1) @@ -128,6 +130,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 1) @@ -171,6 +174,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 1) @@ -224,6 +228,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 1) @@ -297,6 +302,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReportID(ctx, 1, 1) @@ -428,6 +434,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgDeleteReport( @@ -448,6 +455,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveReport(ctx, types.NewReport( @@ -478,6 +486,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveReport(ctx, types.NewReport( @@ -508,6 +517,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.sk.SetUserPermissions(ctx, @@ -558,6 +568,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteReport() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.sk.SetUserPermissions(ctx, @@ -648,6 +659,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SupportStandardReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetParams(ctx, types.NewParams(nil)) @@ -670,6 +682,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SupportStandardReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetParams(ctx, types.NewParams([]types.StandardReason{ @@ -694,6 +707,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SupportStandardReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.sk.SetUserPermissions(ctx, @@ -725,6 +739,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SupportStandardReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 1) @@ -826,6 +841,7 @@ func (suite *KeeperTestSuite) TestMsgServer_AddReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgAddReason( @@ -847,6 +863,7 @@ func (suite *KeeperTestSuite) TestMsgServer_AddReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.sk.SetUserPermissions(ctx, @@ -875,6 +892,7 @@ func (suite *KeeperTestSuite) TestMsgServer_AddReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 1) @@ -904,6 +922,7 @@ func (suite *KeeperTestSuite) TestMsgServer_AddReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextReasonID(ctx, 1, 1) @@ -994,6 +1013,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RemoveReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgRemoveReason( @@ -1014,6 +1034,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RemoveReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveReason(ctx, types.NewReason( @@ -1041,6 +1062,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RemoveReason() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveReason(ctx, types.NewReason( diff --git a/x/reports/legacy/v2/store_test.go b/x/reports/legacy/v2/store_test.go index 1a1817b017..2c89ed67c0 100644 --- a/x/reports/legacy/v2/store_test.go +++ b/x/reports/legacy/v2/store_test.go @@ -43,7 +43,7 @@ func TestMigrateStore(t *testing.T) { paramsSubspace := newMockSubspace(types.Params{}) - sk := subspaceskeeper.NewKeeper(cdc, keys[subspacestypes.StoreKey], nil, nil) + sk := subspaceskeeper.NewKeeper(cdc, keys[subspacestypes.StoreKey], nil, nil, "authority") testCases := []struct { name string @@ -62,6 +62,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) sk.SaveSubspace(ctx, subspacestypes.NewSubspace( @@ -72,6 +73,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, shouldErr: false, diff --git a/x/reports/types/msgs.go b/x/reports/types/msgs.go index f229b517ed..d278562fd0 100644 --- a/x/reports/types/msgs.go +++ b/x/reports/types/msgs.go @@ -6,6 +6,8 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + + subspacestypes "github.com/desmos-labs/desmos/v5/x/subspaces/types" ) var ( @@ -14,6 +16,10 @@ var ( _ sdk.Msg = &MsgSupportStandardReason{} _ sdk.Msg = &MsgAddReason{} _ sdk.Msg = &MsgRemoveReason{} + + _ subspacestypes.ManageSubspaceMsg = &MsgSupportStandardReason{} + _ subspacestypes.ManageSubspaceMsg = &MsgAddReason{} + _ subspacestypes.ManageSubspaceMsg = &MsgRemoveReason{} ) // NewMsgCreateReport returns a new MsgCreateReport instance @@ -183,6 +189,9 @@ func (msg MsgSupportStandardReason) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{sender} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgSupportStandardReason) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgAddReason returns a new MsgAddReason instance @@ -232,6 +241,9 @@ func (msg MsgAddReason) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{sender} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgAddReason) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgRemoveReason returns a new MsgRemoveReason instance @@ -280,6 +292,9 @@ func (msg MsgRemoveReason) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{sender} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgRemoveReason) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- func NewMsgUpdateParams(params Params, authority string) *MsgUpdateParams { diff --git a/x/subspaces/ante/common_test.go b/x/subspaces/ante/common_test.go index 4e36c9f49a..24b21edf48 100644 --- a/x/subspaces/ante/common_test.go +++ b/x/subspaces/ante/common_test.go @@ -42,7 +42,11 @@ func (suite *AnteTestSuite) SetupTest() { ctrl := gomock.NewController(suite.T()) defer ctrl.Finish() - suite.ctx = sdktestutil.DefaultContext(sdk.NewKVStoreKey("kv_test"), sdk.NewTransientStoreKey("transient_test")) + suite.ctx = sdktestutil. + DefaultContext(sdk.NewKVStoreKey("kv_test"), sdk.NewTransientStoreKey("transient_test")). + WithMinGasPrices(sdk.NewDecCoins(sdk.NewDecCoin("stake", sdk.NewInt(1)))). + WithIsCheckTx(true) + suite.bk = testutil.NewMockBankKeeper(ctrl) suite.sk = testutil.NewMockSubspacesKeeper(ctrl) suite.ak = testutil.NewMockAccountKeeper(ctrl) diff --git a/x/subspaces/ante/fee.go b/x/subspaces/ante/fee.go index cf474d5b98..dd82880e7a 100644 --- a/x/subspaces/ante/fee.go +++ b/x/subspaces/ante/fee.go @@ -34,7 +34,7 @@ func NewDeductFeeDecorator( txFeeChecker ante.TxFeeChecker, ) DeductFeeDecorator { if txFeeChecker == nil { - txFeeChecker = ante.CheckTxFeeWithValidatorMinGasPrices + txFeeChecker = CheckTxFeeWithSubspaceMinPrices(ante.CheckTxFeeWithValidatorMinGasPrices, sk) } return DeductFeeDecorator{ diff --git a/x/subspaces/ante/testutil/expected_keepers_mocks.go b/x/subspaces/ante/testutil/expected_keepers_mocks.go index 0419f82237..e6032ab45c 100644 --- a/x/subspaces/ante/testutil/expected_keepers_mocks.go +++ b/x/subspaces/ante/testutil/expected_keepers_mocks.go @@ -9,6 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" types0 "github.com/cosmos/cosmos-sdk/x/auth/types" + types1 "github.com/desmos-labs/desmos/v5/x/subspaces/types" gomock "github.com/golang/mock/gomock" ) @@ -182,6 +183,21 @@ func (m *MockSubspacesKeeper) EXPECT() *MockSubspacesKeeperMockRecorder { return m.recorder } +// GetSubspace mocks base method. +func (m *MockSubspacesKeeper) GetSubspace(ctx types.Context, subspaceID uint64) (types1.Subspace, bool) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSubspace", ctx, subspaceID) + ret0, _ := ret[0].(types1.Subspace) + ret1, _ := ret[1].(bool) + return ret0, ret1 +} + +// GetSubspace indicates an expected call of GetSubspace. +func (mr *MockSubspacesKeeperMockRecorder) GetSubspace(ctx, subspaceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSubspace", reflect.TypeOf((*MockSubspacesKeeper)(nil).GetSubspace), ctx, subspaceID) +} + // UseGrantedFees mocks base method. func (m *MockSubspacesKeeper) UseGrantedFees(ctx types.Context, subspaceID uint64, grantee types.AccAddress, fees types.Coins, msgs []types.Msg) bool { m.ctrl.T.Helper() diff --git a/x/subspaces/ante/tx_checker.go b/x/subspaces/ante/tx_checker.go new file mode 100644 index 0000000000..4b9ff0dfb0 --- /dev/null +++ b/x/subspaces/ante/tx_checker.go @@ -0,0 +1,68 @@ +package ante + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/ante" + antetypes "github.com/desmos-labs/desmos/v5/x/subspaces/ante/types" + + "github.com/desmos-labs/desmos/v5/x/subspaces/types" +) + +// hasManageSubspaceMsg checks if tx has manage subspace msg or not +func hasManageSubspaceMsg(tx sdk.Tx) bool { + for _, msg := range tx.GetMsgs() { + if _, ok := msg.(types.ManageSubspaceMsg); ok { + return true + } + } + return false +} + +// CheckTxFeeWithSubspaceMinPrices returns the tx checker that including the subspace allowed tokens into minimum prices list +func CheckTxFeeWithSubspaceMinPrices(txFeeChecker ante.TxFeeChecker, sk antetypes.SubspacesKeeper) ante.TxFeeChecker { + return func(ctx sdk.Context, tx sdk.Tx) (sdk.Coins, int64, error) { + // Perform default tx fee checker if tx is not subspace tx + subspaceID, isSubspaceTx := GetTxSubspaceID(tx) + if !isSubspaceTx { + return txFeeChecker(ctx, tx) + } + + // Perform default tx fee checker if tx includes manage subspace msg + if hasManageSubspaceMsg(tx) { + return txFeeChecker(ctx, tx) + } + + // Perform default tx fee checker if subspace not found + subspace, found := sk.GetSubspace(ctx, subspaceID) + if !found { + return txFeeChecker(ctx, tx) + } + + // Perform custom tx fee checker with subspace additional fee tokens + newMinPrices := MergeMinPrices(ctx.MinGasPrices(), sdk.NewDecCoinsFromCoins(subspace.AdditionalFeeTokens...)) + newCtx := ctx.WithMinGasPrices(newMinPrices) + return txFeeChecker(newCtx, tx) + } +} + +// MergeMinPrices adds the other coins to the original if it does not exist inside the original +func MergeMinPrices(original sdk.DecCoins, other sdk.DecCoins) sdk.DecCoins { + for _, coin := range other { + if !contains(original, coin) { + original = append(original, coin) + } + } + + return original.Sort() +} + +// contains checks the coins slice has the target's denom +func contains(slice sdk.DecCoins, target sdk.DecCoin) bool { + for _, v := range slice { + if v.Denom == target.Denom { + return true + } + } + + return false +} diff --git a/x/subspaces/ante/tx_checker_test.go b/x/subspaces/ante/tx_checker_test.go new file mode 100644 index 0000000000..3acc17285f --- /dev/null +++ b/x/subspaces/ante/tx_checker_test.go @@ -0,0 +1,262 @@ +package ante_test + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/ante" + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/require" + + relationshipstypes "github.com/desmos-labs/desmos/v5/x/relationships/types" + subspacesante "github.com/desmos-labs/desmos/v5/x/subspaces/ante" + "github.com/desmos-labs/desmos/v5/x/subspaces/types" +) + +func (suite *AnteTestSuite) TestCheckTxFeeWithSubspaceMinPrices() { + signer := sdk.MustAccAddressFromBech32("cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5") + msg := relationshipstypes.NewMsgCreateRelationship("cosmos1x5pjlvufs4znnhhkwe8v4tw3kz30f3lxgwza53", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", 1) + manageSubspaceMsg := types.NewMsgAddUserToUserGroup(1, 1, "cosmos1x5pjlvufs4znnhhkwe8v4tw3kz30f3lxgwza53", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5") + nonSubspaceMsg := testdata.NewTestMsg(signer) + + testCases := []struct { + name string + setup func() + fees sdk.Coins + buildTx func(fees sdk.Coins) sdk.Tx + check func(ctx sdk.Context) + shouldErr bool + }{ + { + name: "standard tx returns no error", + fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(nonSubspaceMsg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(100) + return txBuilder.GetTx() + }, + shouldErr: false, + }, + { + name: "standard tx with insufficient fees returns error", + fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(10))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(nonSubspaceMsg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(100) + return txBuilder.GetTx() + }, + shouldErr: true, + }, + { + name: "standard tx with subspace fees returns error", + fees: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(nonSubspaceMsg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(1000) + return txBuilder.GetTx() + }, + shouldErr: true, + }, + { + name: "subspace not found returns no error", + setup: func() { + suite.sk.EXPECT(). + GetSubspace(gomock.Any(), uint64(1)). + Return(types.Subspace{}, false) + }, + fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(msg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(100) + return txBuilder.GetTx() + }, + shouldErr: false, + }, + { + name: "subspace not found returns error - with subspace fee token", + setup: func() { + suite.sk.EXPECT(). + GetSubspace(gomock.Any(), uint64(1)). + Return(types.Subspace{}, false) + }, + fees: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(msg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(100) + return txBuilder.GetTx() + }, + shouldErr: true, + }, + { + name: "manage subspace tx with subspace fees returns error", + setup: func() { + suite.sk.EXPECT(). + GetSubspace(gomock.Any(), uint64(1)). + Return( + types.Subspace{ + AdditionalFeeTokens: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(1))), + }, + true, + ) + }, + fees: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(manageSubspaceMsg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(100) + return txBuilder.GetTx() + }, + shouldErr: true, + }, + { + name: "manage subspace tx returns no error", + setup: func() { + suite.sk.EXPECT(). + GetSubspace(gomock.Any(), uint64(1)). + Return( + types.Subspace{ + AdditionalFeeTokens: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(1))), + }, + true, + ) + }, + fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(manageSubspaceMsg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(100) + return txBuilder.GetTx() + }, + shouldErr: false, + }, + { + name: "non manage subspace tx with insufficient subspace fees returns error", + setup: func() { + suite.sk.EXPECT(). + GetSubspace(gomock.Any(), uint64(1)). + Return( + types.Subspace{ + AdditionalFeeTokens: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(1))), + }, + true, + ) + }, + fees: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(msg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(1000) + return txBuilder.GetTx() + }, + shouldErr: true, + }, + { + name: "non manage subspace tx returns no error", + setup: func() { + suite.sk.EXPECT(). + GetSubspace(gomock.Any(), uint64(1)). + Return( + types.Subspace{ + AdditionalFeeTokens: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(1))), + }, + true, + ) + }, + fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(msg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(100) + return txBuilder.GetTx() + }, + shouldErr: false, + }, + { + name: "non manage subspace tx with subspace fees returns no error", + setup: func() { + suite.sk.EXPECT(). + GetSubspace(gomock.Any(), uint64(1)). + Return( + types.Subspace{ + AdditionalFeeTokens: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(1))), + }, + true, + ) + }, + fees: sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(100))), + buildTx: func(fees sdk.Coins) sdk.Tx { + txBuilder := suite.clientCtx.TxConfig.NewTxBuilder() + txBuilder.SetMsgs(msg) + txBuilder.SetFeeAmount(fees) + txBuilder.SetGasLimit(1) + return txBuilder.GetTx() + }, + shouldErr: false, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + if tc.setup != nil { + tc.setup() + } + + tx := tc.buildTx(tc.fees) + coins, _, err := subspacesante.CheckTxFeeWithSubspaceMinPrices(ante.CheckTxFeeWithValidatorMinGasPrices, suite.sk)(suite.ctx, tx) + if tc.shouldErr { + suite.Require().Error(err) + } else { + suite.Require().NoError(err) + suite.Require().Equal(coins, tc.fees) + } + }) + } +} + +func TestAnte_MergeMinPrices(t *testing.T) { + testCases := []struct { + name string + original sdk.DecCoins + others sdk.DecCoins + result sdk.DecCoins + }{ + { + name: "merge existing coin does not update amount properly", + original: sdk.NewDecCoins(sdk.NewDecCoin("udsm", sdk.NewInt(1000))), + others: sdk.NewDecCoins(sdk.NewDecCoin("udsm", sdk.NewInt(5000))), + result: sdk.NewDecCoins(sdk.NewDecCoin("udsm", sdk.NewInt(1000))), + }, + { + name: "merge non-existing coin properly", + original: sdk.NewDecCoins(sdk.NewDecCoin("udsm", sdk.NewInt(1000))), + others: sdk.NewDecCoins(sdk.NewDecCoin("minttoken", sdk.NewInt(5000))), + result: sdk.NewDecCoins( + sdk.NewDecCoin("udsm", sdk.NewInt(1000)), + sdk.NewDecCoin("minttoken", sdk.NewInt(5000)), + ), + }, + } + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + require.Equal(t, tc.result, subspacesante.MergeMinPrices(tc.original, tc.others)) + }) + } +} diff --git a/x/subspaces/ante/types/expected_keepers.go b/x/subspaces/ante/types/expected_keepers.go index f1293a66ae..93361ce1be 100644 --- a/x/subspaces/ante/types/expected_keepers.go +++ b/x/subspaces/ante/types/expected_keepers.go @@ -3,6 +3,7 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/desmos-labs/desmos/v5/x/subspaces/types" ) // DONTCOVER @@ -27,6 +28,7 @@ type BankKeeper interface { // SubspacesKeeper represents the expected keeper used to interact with x/subspaces type SubspacesKeeper interface { UseGrantedFees(ctx sdk.Context, subspaceID uint64, grantee sdk.AccAddress, fees sdk.Coins, msgs []sdk.Msg) bool + GetSubspace(ctx sdk.Context, subspaceID uint64) (types.Subspace, bool) } // AuthDeductFeeDecorator represents the expected keeper used to interact with auth.DeductFeeDecorator diff --git a/x/subspaces/client/cli/cli_test.go b/x/subspaces/client/cli/cli_test.go index 901223ee03..e657c5f20c 100644 --- a/x/subspaces/client/cli/cli_test.go +++ b/x/subspaces/client/cli/cli_test.go @@ -64,6 +64,7 @@ func (s *IntegrationTestSuite) SetupSuite() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), types.NewSubspace( 2, @@ -73,6 +74,7 @@ func (s *IntegrationTestSuite) SetupSuite() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, ), types.NewSubspace( 3, @@ -82,6 +84,7 @@ func (s *IntegrationTestSuite) SetupSuite() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, ), }, []types.Section{ @@ -195,6 +198,7 @@ func (s *IntegrationTestSuite) TestCmdQuerySubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + sdk.Coins{}, ), }, }, @@ -247,6 +251,7 @@ func (s *IntegrationTestSuite) TestCmdQuerySubspaces() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + sdk.Coins{}, ), }, }, diff --git a/x/subspaces/keeper/common_test.go b/x/subspaces/keeper/common_test.go index 7938bedcc1..f12c05c77b 100644 --- a/x/subspaces/keeper/common_test.go +++ b/x/subspaces/keeper/common_test.go @@ -70,5 +70,5 @@ func (suite *KeeperTestSuite) SetupTest() { suite.authzKeeper = authzkeeper.NewKeeper(keys[authzkeeper.StoreKey], suite.cdc, &baseapp.MsgServiceRouter{}, suite.ak) // Define keeper - suite.k = keeper.NewKeeper(suite.cdc, suite.storeKey, suite.ak, suite.authzKeeper) + suite.k = keeper.NewKeeper(suite.cdc, suite.storeKey, suite.ak, suite.authzKeeper, authtypes.NewModuleAddress("gov").String()) } diff --git a/x/subspaces/keeper/genesis_test.go b/x/subspaces/keeper/genesis_test.go index 5ce25de5c6..139ff5b863 100644 --- a/x/subspaces/keeper/genesis_test.go +++ b/x/subspaces/keeper/genesis_test.go @@ -34,6 +34,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 1, 2) suite.k.SetNextGroupID(ctx, 1, 3) @@ -46,6 +47,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 2, 10) suite.k.SetNextGroupID(ctx, 2, 11) @@ -65,6 +67,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), types.NewSubspace( 2, @@ -74,6 +77,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, ), }, []types.Section{ @@ -139,6 +143,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -162,6 +167,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, ), }, []types.Section{ @@ -194,6 +200,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextGroupID(ctx, 1, 2) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -215,6 +222,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextGroupID(ctx, 2, 2) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -244,6 +252,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), types.NewSubspace( 2, @@ -253,6 +262,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, ), }, []types.Section{ @@ -300,6 +310,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveGrant(ctx, types.NewGrant( @@ -330,6 +341,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, []types.Section{ @@ -368,6 +380,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextGroupID(ctx, 1, 2) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -409,6 +422,7 @@ func (suite *KeeperTestSuite) TestKeeper_ExportGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, []types.Section{ @@ -508,6 +522,7 @@ func (suite *KeeperTestSuite) TestKeeper_InitGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, }, @@ -522,6 +537,7 @@ func (suite *KeeperTestSuite) TestKeeper_InitGenesis() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), stored) }, }, diff --git a/x/subspaces/keeper/grpc_query_test.go b/x/subspaces/keeper/grpc_query_test.go index b5c70794f0..52d8383086 100644 --- a/x/subspaces/keeper/grpc_query_test.go +++ b/x/subspaces/keeper/grpc_query_test.go @@ -37,6 +37,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Subspaces() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSubspace(ctx, types.NewSubspace( 2, @@ -46,6 +47,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Subspaces() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, req: &types.QuerySubspacesRequest{ @@ -64,6 +66,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Subspaces() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, }, @@ -108,6 +111,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Subspace() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, request: types.NewQuerySubspaceRequest(1), @@ -121,6 +125,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Subspace() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, }, @@ -169,6 +174,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Sections() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -218,6 +224,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Sections() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -296,6 +303,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Section() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, req: types.NewQuerySectionRequest(1, 1), @@ -312,6 +320,7 @@ func (suite *KeeperTestSuite) TestQueryServer_Section() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -377,6 +386,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserGroups() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -428,6 +438,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserGroups() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -524,6 +535,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -591,6 +603,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserGroupMembers() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, req: types.NewQueryUserGroupMembersRequest(1, 1, nil), @@ -607,6 +620,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserGroupMembers() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -678,6 +692,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, req: types.NewQueryUserPermissionsRequest( @@ -704,6 +719,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -796,7 +812,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserAllowances() { { name: "user grants query without grantee returns the correct data", store: func(ctx sdk.Context) { - suite.k.SaveSubspace(ctx, types.NewSubspace(1, "test", "test", "owner", "treasury", "creator", time.Now())) + suite.k.SaveSubspace(ctx, types.NewSubspace(1, "test", "test", "owner", "treasury", "creator", time.Now(), nil)) suite.k.SaveGrant(ctx, types.NewGrant( 1, @@ -832,7 +848,7 @@ func (suite *KeeperTestSuite) TestQueryServer_UserAllowances() { { name: "valid query returns the correct data", store: func(ctx sdk.Context) { - suite.k.SaveSubspace(ctx, types.NewSubspace(1, "test", "test", "owner", "treasury", "creator", time.Now())) + suite.k.SaveSubspace(ctx, types.NewSubspace(1, "test", "test", "owner", "treasury", "creator", time.Now(), nil)) suite.k.SaveGrant(ctx, types.NewGrant(1, "cosmos1cjf97gpzwmaf30pzvaargfgr884mpp5ak8f7ns", @@ -900,7 +916,7 @@ func (suite *KeeperTestSuite) TestQueryServer_GroupAllowances() { { name: "group grants query without group id returns the correct data", store: func(ctx sdk.Context) { - suite.k.SaveSubspace(ctx, types.NewSubspace(1, "test", "test", "owner", "treasury", "creator", time.Now())) + suite.k.SaveSubspace(ctx, types.NewSubspace(1, "test", "test", "owner", "treasury", "creator", time.Now(), nil)) suite.k.SaveUserGroup(ctx, types.NewUserGroup(1, 0, 1, "test", "tets", nil)) suite.k.SaveUserGroup(ctx, types.NewUserGroup(1, 0, 2, "test", "tets", nil)) @@ -936,7 +952,7 @@ func (suite *KeeperTestSuite) TestQueryServer_GroupAllowances() { { name: "valid group grants query returns the correct data", store: func(ctx sdk.Context) { - suite.k.SaveSubspace(ctx, types.NewSubspace(1, "test", "test", "owner", "treasury", "creator", time.Now())) + suite.k.SaveSubspace(ctx, types.NewSubspace(1, "test", "test", "owner", "treasury", "creator", time.Now(), nil)) suite.k.SaveUserGroup(ctx, types.NewUserGroup(1, 0, 1, "test", "tets", nil)) suite.k.SaveUserGroup(ctx, types.NewUserGroup(1, 0, 2, "test", "tets", nil)) diff --git a/x/subspaces/keeper/hooks_test.go b/x/subspaces/keeper/hooks_test.go index 5555ff4bd1..63d91af5de 100644 --- a/x/subspaces/keeper/hooks_test.go +++ b/x/subspaces/keeper/hooks_test.go @@ -73,6 +73,7 @@ func (suite *KeeperTestSuite) TestHooks_AfterSubspaceSaved() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, } @@ -109,6 +110,7 @@ func (suite *KeeperTestSuite) TestHooks_AfterSubspaceDeleted() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, subspaceID: 1, diff --git a/x/subspaces/keeper/invariants_test.go b/x/subspaces/keeper/invariants_test.go index 0647dfd7b9..f583555713 100644 --- a/x/subspaces/keeper/invariants_test.go +++ b/x/subspaces/keeper/invariants_test.go @@ -27,6 +27,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, expBroken: true, @@ -43,6 +44,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, expBroken: true, @@ -59,6 +61,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.DeleteNextSectionID(ctx, 1) }, @@ -76,6 +79,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.DeleteNextGroupID(ctx, 1) }, @@ -93,6 +97,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Time{}, + nil, )) suite.k.SetNextSectionID(ctx, 1, 1) suite.k.SetNextGroupID(ctx, 1, 1) @@ -111,6 +116,7 @@ func (suite *KeeperTestSuite) TestValidSubspacesInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 1, 1) suite.k.SetNextGroupID(ctx, 1, 1) @@ -163,6 +169,7 @@ func (suite *KeeperTestSuite) TestValidSectionsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -186,6 +193,7 @@ func (suite *KeeperTestSuite) TestValidSectionsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 1, 1) @@ -210,6 +218,7 @@ func (suite *KeeperTestSuite) TestValidSectionsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 1, 2) @@ -234,6 +243,7 @@ func (suite *KeeperTestSuite) TestValidSectionsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 1, 2) @@ -258,6 +268,7 @@ func (suite *KeeperTestSuite) TestValidSectionsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 1, 2) @@ -318,6 +329,7 @@ func (suite *KeeperTestSuite) TestValidUserGroupsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -342,6 +354,7 @@ func (suite *KeeperTestSuite) TestValidUserGroupsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -374,6 +387,7 @@ func (suite *KeeperTestSuite) TestValidUserGroupsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextGroupID(ctx, 1, 1) @@ -407,6 +421,7 @@ func (suite *KeeperTestSuite) TestValidUserGroupsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextGroupID(ctx, 1, 2) @@ -440,6 +455,7 @@ func (suite *KeeperTestSuite) TestValidUserGroupsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextGroupID(ctx, 1, 2) @@ -502,6 +518,7 @@ func (suite *KeeperTestSuite) TestValidUserGroupMembersInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.AddUserToGroup(ctx, 1, 1, "cosmos1wq7mruftxd03qrrf9f7xnnzyqda9rkq5sshnr4") @@ -519,6 +536,7 @@ func (suite *KeeperTestSuite) TestValidUserGroupMembersInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.AddUserToGroup(ctx, 1, 0, "cosmos1wq7mruftxd03qrrf9f7xnnzyqda9rkq5sshnr4") @@ -536,6 +554,7 @@ func (suite *KeeperTestSuite) TestValidUserGroupMembersInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -596,6 +615,7 @@ func (suite *KeeperTestSuite) TestValidUserPermissionsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -618,6 +638,7 @@ func (suite *KeeperTestSuite) TestValidUserPermissionsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -643,6 +664,7 @@ func (suite *KeeperTestSuite) TestValidUserPermissionsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -707,6 +729,7 @@ func (suite *KeeperTestSuite) TestValidUserGrantsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveGrant(ctx, types.NewGrant( 1, @@ -728,6 +751,7 @@ func (suite *KeeperTestSuite) TestValidUserGrantsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveGrant(ctx, types.NewGrant( 1, @@ -781,6 +805,7 @@ func (suite *KeeperTestSuite) TestValidGroupGrantsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveGrant(ctx, types.NewGrant(1, "cosmos1wq7mruftxd03qrrf9f7xnnzyqda9rkq5sshnr4", @@ -801,6 +826,7 @@ func (suite *KeeperTestSuite) TestValidGroupGrantsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -830,6 +856,7 @@ func (suite *KeeperTestSuite) TestValidGroupGrantsInvariant() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, diff --git a/x/subspaces/keeper/keeper.go b/x/subspaces/keeper/keeper.go index 33c789c5b7..726c4e118b 100644 --- a/x/subspaces/keeper/keeper.go +++ b/x/subspaces/keeper/keeper.go @@ -16,15 +16,21 @@ type Keeper struct { ak types.AccountKeeper authzk types.AuthzKeeper + + // the address capable of executing a MsgUpdateParams message. Typically, this + // should be the x/gov module account. + authority string } // NewKeeper creates new instances of the subspaces keeper -func NewKeeper(cdc codec.BinaryCodec, storeKey storetypes.StoreKey, ak types.AccountKeeper, authzKeeper types.AuthzKeeper) Keeper { +func NewKeeper(cdc codec.BinaryCodec, storeKey storetypes.StoreKey, ak types.AccountKeeper, authzKeeper types.AuthzKeeper, authority string) Keeper { return Keeper{ storeKey: storeKey, cdc: cdc, ak: ak, authzk: authzKeeper, + + authority: authority, } } diff --git a/x/subspaces/keeper/keeper_test.go b/x/subspaces/keeper/keeper_test.go index 7a4028db8c..957b44900d 100644 --- a/x/subspaces/keeper/keeper_test.go +++ b/x/subspaces/keeper/keeper_test.go @@ -29,7 +29,7 @@ func TestKeeper_SetHooks(t *testing.T) { for _, tc := range testCases { tc := tc t.Run(tc.name, func(t *testing.T) { - subspaceKeeper := keeper.NewKeeper(nil, nil, nil, nil) + subspaceKeeper := keeper.NewKeeper(nil, nil, nil, nil, "authority") k := subspaceKeeper.SetHooks(tc.hooks) if tc.shouldErr { diff --git a/x/subspaces/keeper/msg_server.go b/x/subspaces/keeper/msg_server.go index a8c5897e7f..bde3daf630 100644 --- a/x/subspaces/keeper/msg_server.go +++ b/x/subspaces/keeper/msg_server.go @@ -10,6 +10,7 @@ import ( "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) type msgServer struct { @@ -35,7 +36,7 @@ func (k msgServer) CreateSubspace(goCtx context.Context, msg *types.MsgCreateSub } // Create and validate the subspace - subspace := types.NewSubspace(subspaceID, msg.Name, msg.Description, types.GetTreasuryAddress(subspaceID).String(), msg.Owner, msg.Creator, ctx.BlockTime()) + subspace := types.NewSubspace(subspaceID, msg.Name, msg.Description, types.GetTreasuryAddress(subspaceID).String(), msg.Owner, msg.Creator, ctx.BlockTime(), nil) if err := subspace.Validate(); err != nil { return nil, err } @@ -831,3 +832,43 @@ func (k msgServer) SetUserPermissions(goCtx context.Context, msg *types.MsgSetUs return &types.MsgSetUserPermissionsResponse{}, nil } + +// UpdateSubspaceFeeTokens defines a rpc method for MsgUpdateSubspaceFeeTokens +func (k msgServer) UpdateSubspaceFeeTokens(goCtx context.Context, msg *types.MsgUpdateSubspaceFeeTokens) (*types.MsgUpdateSubspaceFeeTokensResponse, error) { + if msg.Authority != k.authority { + return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.authority, msg.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + // Check if the subspace exists + subspace, exists := k.GetSubspace(ctx, msg.SubspaceID) + if !exists { + return nil, errors.Wrapf(sdkerrors.ErrInvalidRequest, "subspace with id %d not found", msg.SubspaceID) + } + + // Update the subspace and validate it + updated := types.NewAdditionalFeeTokensUpdate(msg.AdditionalFeeTokens...).Update(subspace) + err := updated.Validate() + if err != nil { + return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, err.Error()) + } + + k.SaveSubspace(ctx, updated) + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeyAction, sdk.MsgTypeURL(msg)), + sdk.NewAttribute(sdk.AttributeKeySender, msg.Authority), + ), + sdk.NewEvent( + types.EventTypeUpdateSubspaceFeeToken, + sdk.NewAttribute(types.AttributeKeySubspaceID, fmt.Sprintf("%d", updated.ID)), + sdk.NewAttribute(types.AttributeKeyUser, msg.Authority), + ), + }) + + return &types.MsgUpdateSubspaceFeeTokensResponse{}, nil +} diff --git a/x/subspaces/keeper/msg_server_feegrant_test.go b/x/subspaces/keeper/msg_server_feegrant_test.go index 6040ddc44b..212b0a5704 100644 --- a/x/subspaces/keeper/msg_server_feegrant_test.go +++ b/x/subspaces/keeper/msg_server_feegrant_test.go @@ -40,6 +40,7 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgGrantAllowance( @@ -61,6 +62,7 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -96,6 +98,7 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -124,6 +127,7 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -168,6 +172,7 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -220,6 +225,7 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -317,6 +323,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgRevokeAllowance( @@ -337,6 +344,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -364,6 +372,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -391,6 +400,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -442,6 +452,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeAllowance() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, diff --git a/x/subspaces/keeper/msg_server_test.go b/x/subspaces/keeper/msg_server_test.go index fb6702ccb5..dbfca26f9f 100644 --- a/x/subspaces/keeper/msg_server_test.go +++ b/x/subspaces/keeper/msg_server_test.go @@ -4,6 +4,7 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/desmos-labs/desmos/v5/x/subspaces/keeper" "github.com/desmos-labs/desmos/v5/x/subspaces/types" @@ -85,6 +86,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateSubspace() { "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), subspace) // Make sure the default group has been created @@ -139,6 +141,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateSubspace() { "cosmos17qcf9sv5yk0ly5vt3ztev70nwf6c5sprkwfh8t", "cosmos18atyyv6zycryhvnhpr2mjxgusdcah6kdpkffq0", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), subspace) // Make sure the subspace id has increased @@ -198,6 +201,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateSubspace() { "cosmos1y4emx0mm4ncva9mnv9yvjrm7nrq3psvmwhk9ll", "cosmos1y4emx0mm4ncva9mnv9yvjrm7nrq3psvmwhk9ll", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), subspace) // Make sure the subspace id has increased @@ -276,6 +280,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", blockTime, + nil, )) }, msg: types.NewMsgEditSubspace( @@ -297,6 +302,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", blockTime, + nil, ), subspace) }, }, @@ -311,6 +317,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", blockTime, + nil, )) }, msg: types.NewMsgEditSubspace( @@ -332,6 +339,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", blockTime, + nil, ), subspace) }, }, @@ -346,6 +354,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", blockTime, + nil, )) suite.k.SetUserPermissions(ctx, @@ -386,6 +395,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", blockTime, + nil, ), subspace) }, }, @@ -448,6 +458,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteSubspace() { "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgDeleteSubspace(1, "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5"), @@ -463,6 +474,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteSubspace() { "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), subspace) }, }, @@ -477,6 +489,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteSubspace() { "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -565,6 +578,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgCreateSection( @@ -587,6 +601,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -617,6 +632,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.DeleteNextSectionID(ctx, 1) @@ -655,6 +671,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 1, 2) @@ -693,6 +710,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetNextSectionID(ctx, 1, 2) @@ -808,6 +826,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgEditSection( @@ -830,6 +849,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -860,6 +880,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -897,6 +918,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -1002,6 +1024,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgMoveSection( @@ -1023,6 +1046,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -1052,6 +1076,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection(1, 1, 0, "Child section", "")) @@ -1082,6 +1107,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -1111,6 +1137,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) // Create the following subspaces sections @@ -1152,6 +1179,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection(1, 1, 0, "Child section", "")) @@ -1256,6 +1284,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgDeleteSection( @@ -1276,6 +1305,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -1304,6 +1334,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteSection() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( @@ -1404,6 +1435,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateUserGroup() { "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgCreateUserGroup( @@ -1428,6 +1460,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateUserGroup() { "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgCreateUserGroup( @@ -1452,6 +1485,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateUserGroup() { "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -1483,6 +1517,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -1524,6 +1559,7 @@ func (suite *KeeperTestSuite) TestMsgServer_CreateUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -1639,6 +1675,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgEditUserGroup( @@ -1661,6 +1698,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -1691,6 +1729,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -1728,6 +1767,7 @@ func (suite *KeeperTestSuite) TestMsgServer_EditUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -1838,6 +1878,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgMoveUserGroup( @@ -1859,6 +1900,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -1888,6 +1930,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( 1, @@ -1924,6 +1967,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( 1, @@ -1967,6 +2011,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( 1, @@ -2017,6 +2062,7 @@ func (suite *KeeperTestSuite) TestMsgServer_MoveUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveSection(ctx, types.NewSection( 1, @@ -2145,6 +2191,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserGroupPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgSetUserGroupPermissions( @@ -2166,6 +2213,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserGroupPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2195,6 +2243,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserGroupPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2231,6 +2280,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserGroupPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2262,6 +2312,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserGroupPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2312,6 +2363,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserGroupPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2413,6 +2465,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgDeleteUserGroup( @@ -2433,6 +2486,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2461,6 +2515,7 @@ func (suite *KeeperTestSuite) TestMsgServer_DeleteUserGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2560,6 +2615,7 @@ func (suite *KeeperTestSuite) TestMsgServer_AddUserToGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgAddUserToUserGroup( @@ -2581,6 +2637,7 @@ func (suite *KeeperTestSuite) TestMsgServer_AddUserToGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2610,6 +2667,7 @@ func (suite *KeeperTestSuite) TestMsgServer_AddUserToGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2641,6 +2699,7 @@ func (suite *KeeperTestSuite) TestMsgServer_AddUserToGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2742,6 +2801,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RemoveUserFromGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgRemoveUserFromUserGroup( @@ -2763,6 +2823,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RemoveUserFromGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2792,6 +2853,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RemoveUserFromGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2821,6 +2883,7 @@ func (suite *KeeperTestSuite) TestMsgServer_RemoveUserFromGroup() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( 1, @@ -2924,6 +2987,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgSetUserPermissions( @@ -2946,6 +3010,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, msg: types.NewMsgSetUserPermissions( @@ -2968,6 +3033,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -2997,6 +3063,7 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserPermissions() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -3059,3 +3126,149 @@ func (suite *KeeperTestSuite) TestMsgServer_SetUserPermissions() { }) } } + +func (suite *KeeperTestSuite) TestMsgServer_UpdateSubspaceFeeTokens() { + testCases := []struct { + name string + store func(ctx sdk.Context) + msg *types.MsgUpdateSubspaceFeeTokens + shouldErr bool + expEvents sdk.Events + check func(ctx sdk.Context) + }{ + { + name: "invalid authority return error", + msg: types.NewMsgUpdateSubspaceFeeTokens( + 1, + sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(10))), + "invalid", + ), + shouldErr: true, + }, + { + name: "subspace not found returns error", + msg: types.NewMsgUpdateSubspaceFeeTokens( + 1, + sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(10))), + authtypes.NewModuleAddress("gov").String(), + ), + shouldErr: true, + }, + { + name: "invalid allowed fee tokens returns error", + store: func(ctx sdk.Context) { + suite.k.SaveSubspace(ctx, types.NewSubspace( + 1, + "Test subspace", + "This is a test subspace", + "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", + "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", + "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, + )) + }, + msg: types.NewMsgUpdateSubspaceFeeTokens( + 1, + sdk.Coins{{Denom: "minttoken", Amount: sdk.NewInt(-10)}}, + authtypes.NewModuleAddress("gov").String(), + ), + shouldErr: true, + }, + { + name: "invalid subspace returns error", + store: func(ctx sdk.Context) { + suite.k.SaveSubspace(ctx, types.NewSubspace( + 0, + "Test subspace", + "This is a test subspace", + "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", + "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", + "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, + )) + }, + msg: types.NewMsgUpdateSubspaceFeeTokens( + 1, + sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(10))), + authtypes.NewModuleAddress("gov").String(), + ), + shouldErr: true, + }, + { + name: "subspace is updated correctly", + store: func(ctx sdk.Context) { + suite.k.SaveSubspace(ctx, types.NewSubspace( + 1, + "Test subspace", + "This is a test subspace", + "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", + "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", + "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, + )) + }, + msg: types.NewMsgUpdateSubspaceFeeTokens( + 1, + sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(10))), + authtypes.NewModuleAddress("gov").String(), + ), + shouldErr: false, + expEvents: sdk.Events{ + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeyAction, sdk.MsgTypeURL(&types.MsgUpdateSubspaceFeeTokens{})), + sdk.NewAttribute(sdk.AttributeKeySender, authtypes.NewModuleAddress("gov").String()), + ), + sdk.NewEvent( + types.EventTypeUpdateSubspaceFeeToken, + sdk.NewAttribute(types.AttributeKeySubspaceID, "1"), + sdk.NewAttribute(types.AttributeKeyUser, authtypes.NewModuleAddress("gov").String()), + ), + }, + check: func(ctx sdk.Context) { + subspace, _ := suite.k.GetSubspace(ctx, 1) + expected := types.NewSubspace( + 1, + "Test subspace", + "This is a test subspace", + "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", + "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", + "cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69", + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(10))), + ) + + suite.Require().Equal(expected, subspace) + }, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + ctx, _ := suite.ctx.CacheContext() + if tc.store != nil { + tc.store(ctx) + } + + // Run the message + service := keeper.NewMsgServerImpl(suite.k) + _, err := service.UpdateSubspaceFeeTokens(sdk.WrapSDKContext(ctx), tc.msg) + + if tc.shouldErr { + suite.Require().Error(err) + } else { + suite.Require().NoError(err) + suite.Require().Equal(tc.expEvents, ctx.EventManager().Events()) + + if tc.check != nil { + tc.check(ctx) + } + } + }) + } +} diff --git a/x/subspaces/keeper/msg_server_treasury_test.go b/x/subspaces/keeper/msg_server_treasury_test.go index d7fc830a52..df609929bd 100644 --- a/x/subspaces/keeper/msg_server_treasury_test.go +++ b/x/subspaces/keeper/msg_server_treasury_test.go @@ -43,7 +43,8 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantTreasuryAuthorization() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) }, msg: types.NewMsgGrantTreasuryAuthorization( @@ -64,7 +65,8 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantTreasuryAuthorization() { "", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) suite.k.SetUserPermissions(ctx, @@ -92,7 +94,8 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantTreasuryAuthorization() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) suite.k.SetUserPermissions(ctx, @@ -120,7 +123,8 @@ func (suite *KeeperTestSuite) TestMsgServer_GrantTreasuryAuthorization() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) suite.k.SetUserPermissions(ctx, @@ -231,7 +235,8 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeTreasuryAuthorization() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) }, msg: types.NewMsgRevokeTreasuryAuthorization( @@ -251,7 +256,8 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeTreasuryAuthorization() { "", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) suite.k.SetUserPermissions(ctx, @@ -278,7 +284,8 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeTreasuryAuthorization() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) suite.k.SetUserPermissions(ctx, @@ -305,7 +312,8 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeTreasuryAuthorization() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) suite.k.SetUserPermissions(ctx, @@ -332,7 +340,8 @@ func (suite *KeeperTestSuite) TestMsgServer_RevokeTreasuryAuthorization() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", - time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC)), + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil), ) suite.k.SetUserPermissions(ctx, diff --git a/x/subspaces/keeper/permissions_test.go b/x/subspaces/keeper/permissions_test.go index 3c54ad474f..fc6cb5c2c5 100644 --- a/x/subspaces/keeper/permissions_test.go +++ b/x/subspaces/keeper/permissions_test.go @@ -95,6 +95,7 @@ func (suite *KeeperTestSuite) TestKeeper_HasPermission() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, subspaceID: 1, @@ -114,6 +115,7 @@ func (suite *KeeperTestSuite) TestKeeper_HasPermission() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -149,6 +151,7 @@ func (suite *KeeperTestSuite) TestKeeper_HasPermission() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -412,6 +415,7 @@ func (suite *KeeperTestSuite) TestKeeper_GetUsersWithRootPermissions() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -442,6 +446,7 @@ func (suite *KeeperTestSuite) TestKeeper_GetUsersWithRootPermissions() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SetUserPermissions(ctx, @@ -469,6 +474,7 @@ func (suite *KeeperTestSuite) TestKeeper_GetUsersWithRootPermissions() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( diff --git a/x/subspaces/keeper/sections_test.go b/x/subspaces/keeper/sections_test.go index 76ec75541d..8bdf13b7cb 100644 --- a/x/subspaces/keeper/sections_test.go +++ b/x/subspaces/keeper/sections_test.go @@ -277,6 +277,7 @@ func (suite *KeeperTestSuite) TestKeeper_IsSectionPathValid() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) // Create the following subspaces sections @@ -305,6 +306,7 @@ func (suite *KeeperTestSuite) TestKeeper_IsSectionPathValid() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) // Create the following subspaces sections @@ -330,6 +332,7 @@ func (suite *KeeperTestSuite) TestKeeper_IsSectionPathValid() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) // Create the following subspaces sections diff --git a/x/subspaces/keeper/subspaces_test.go b/x/subspaces/keeper/subspaces_test.go index 51d1a8e2bd..b5238a1858 100644 --- a/x/subspaces/keeper/subspaces_test.go +++ b/x/subspaces/keeper/subspaces_test.go @@ -106,6 +106,7 @@ func (suite *KeeperTestSuite) TestKeeper_SaveSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), check: func(ctx sdk.Context) { subspace, found := suite.k.GetSubspace(ctx, 1) @@ -118,6 +119,7 @@ func (suite *KeeperTestSuite) TestKeeper_SaveSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), subspace) store := ctx.KVStore(suite.storeKey) @@ -137,6 +139,7 @@ func (suite *KeeperTestSuite) TestKeeper_SaveSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, subspace: types.NewSubspace( @@ -147,6 +150,7 @@ func (suite *KeeperTestSuite) TestKeeper_SaveSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), check: func(ctx sdk.Context) { subspace, found := suite.k.GetSubspace(ctx, 1) @@ -159,6 +163,7 @@ func (suite *KeeperTestSuite) TestKeeper_SaveSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), subspace) }, }, @@ -204,6 +209,7 @@ func (suite *KeeperTestSuite) TestKeeper_HasSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, subspaceID: 1, @@ -249,6 +255,7 @@ func (suite *KeeperTestSuite) TestKeeper_GetSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, id: 1, @@ -261,6 +268,7 @@ func (suite *KeeperTestSuite) TestKeeper_GetSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, } @@ -308,6 +316,7 @@ func (suite *KeeperTestSuite) TestKeeper_DeleteSubspace() { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( diff --git a/x/subspaces/legacy/v3/store_test.go b/x/subspaces/legacy/v3/store_test.go index 00d48d8314..7eba9b657e 100644 --- a/x/subspaces/legacy/v3/store_test.go +++ b/x/subspaces/legacy/v3/store_test.go @@ -46,6 +46,7 @@ func TestMigrateStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ) kvStore.Set(types.SubspaceStoreKey(1), cdc.MustMarshal(&subspace)) }, diff --git a/x/subspaces/legacy/v5/store.go b/x/subspaces/legacy/v5/store.go index 764624d8de..74c1037c30 100644 --- a/x/subspaces/legacy/v5/store.go +++ b/x/subspaces/legacy/v5/store.go @@ -43,6 +43,7 @@ func migrateSubspaces(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.B oldSubspace.Owner, oldSubspace.Creator, oldSubspace.CreationTime, + oldSubspace.AdditionalFeeTokens, ) store.Set(types.SubspaceStoreKey(oldSubspace.ID), cdc.MustMarshal(&newSubspace)) } diff --git a/x/subspaces/legacy/v5/store_test.go b/x/subspaces/legacy/v5/store_test.go index 8ecd1762f6..82bc35dd77 100644 --- a/x/subspaces/legacy/v5/store_test.go +++ b/x/subspaces/legacy/v5/store_test.go @@ -53,6 +53,7 @@ func TestMigrateStore(t *testing.T) { "cosmos10ya9y35qkf4puaklx5fs07sxfxqncx9usgsnz6", "cosmos10ya9y35qkf4puaklx5fs07sxfxqncx9usgsnz6", time.Date(2023, 1, 11, 1, 1, 1, 1, time.UTC), + nil, ) ctx.KVStore(keys[types.StoreKey]).Set(types.SubspaceStoreKey(1), cdc.MustMarshal(&oldSubspace)) }, @@ -68,6 +69,7 @@ func TestMigrateStore(t *testing.T) { "cosmos10ya9y35qkf4puaklx5fs07sxfxqncx9usgsnz6", "cosmos10ya9y35qkf4puaklx5fs07sxfxqncx9usgsnz6", time.Date(2023, 1, 11, 1, 1, 1, 1, time.UTC), + nil, ), newSubspace) }, }, diff --git a/x/subspaces/module.go b/x/subspaces/module.go index f607da85b7..e7af59720d 100644 --- a/x/subspaces/module.go +++ b/x/subspaces/module.go @@ -18,8 +18,10 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" @@ -212,6 +214,11 @@ func (AppModule) GenerateGenesisState(simState *module.SimulationState) { simulation.RandomizeGenState(simState) } +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return simulation.ProposalMsgs(*am.keeper) +} + // RegisterStoreDecoder performs a no-op. func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { sdr[types.ModuleName] = simulation.NewDecodeStore(am.cdc) @@ -247,8 +254,9 @@ func init() { type ModuleInputs struct { depinject.In - Cdc codec.Codec - Key *storetypes.KVStoreKey + Config *modulev1.Module + Cdc codec.Codec + Key *storetypes.KVStoreKey AccountKeeper authkeeper.AccountKeeper BankKeeper bankkeeper.Keeper @@ -264,11 +272,18 @@ type ModuleOutputs struct { func ProvideModule(in ModuleInputs) ModuleOutputs { + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + k := keeper.NewKeeper( in.Cdc, in.Key, in.AccountKeeper, in.AuthzKeeper, + authority.String(), ) m := NewAppModule( diff --git a/x/subspaces/simulation/decoder_test.go b/x/subspaces/simulation/decoder_test.go index 99acbe25cf..b7ff643e17 100644 --- a/x/subspaces/simulation/decoder_test.go +++ b/x/subspaces/simulation/decoder_test.go @@ -27,6 +27,7 @@ func TestDecodeStore(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ) group := types.NewUserGroup( 1, diff --git a/x/subspaces/simulation/genesis.go b/x/subspaces/simulation/genesis.go index 4f749d8ce9..63ee100f4e 100644 --- a/x/subspaces/simulation/genesis.go +++ b/x/subspaces/simulation/genesis.go @@ -46,6 +46,7 @@ func randomSubspaces(r *rand.Rand, accs []simtypes.Account) (subspaces []types.S randData.Owner, randData.Creator, time.Now(), + randData.AdditionalFeeTokens, ) } return subspaces diff --git a/x/subspaces/simulation/proposal.go b/x/subspaces/simulation/proposal.go new file mode 100644 index 0000000000..193922a624 --- /dev/null +++ b/x/subspaces/simulation/proposal.go @@ -0,0 +1,55 @@ +package simulation + +import ( + "math/rand" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/desmos-labs/desmos/v5/x/subspaces/keeper" + "github.com/desmos-labs/desmos/v5/x/subspaces/types" +) + +// DONTCOVER + +// Simulation operation weights constants +const ( + DefaultWeightMsgUpdateParams int = 100 + + OpWeightMsgUpdateSubspaceFeeTokens = "op_weight_msg_update_subspace_fee_tokens" //nolint:gosec +) + +// ProposalMsgs defines the module weighted proposals' contents +func ProposalMsgs(k keeper.Keeper) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + simulation.NewWeightedProposalMsg( + OpWeightMsgUpdateSubspaceFeeTokens, + DefaultWeightMsgUpdateParams, + SimulateMsgUpdateSubspaceFeeTokens(k), + ), + } +} + +// SimulateMsgUpdateParams returns a random MsgUpdateParams +func SimulateMsgUpdateSubspaceFeeTokens(k keeper.Keeper) simtypes.MsgSimulatorFn { + return func(r *rand.Rand, ctx sdk.Context, _ []simtypes.Account) sdk.Msg { + // use the default gov module account address as authority + var authority sdk.AccAddress = address.Module("gov") + + var subspaceID uint64 + + subspaces := k.GetAllSubspaces(ctx) + if len(subspaces) > 0 { + subspace := RandomSubspace(r, subspaces) + subspaceID = subspace.ID + } + + return types.NewMsgUpdateSubspaceFeeTokens( + subspaceID, + GenerateRandomFeeTokens(r), + authority.String(), + ) + } +} diff --git a/x/subspaces/simulation/utils.go b/x/subspaces/simulation/utils.go index 267455840b..fab1cffefa 100644 --- a/x/subspaces/simulation/utils.go +++ b/x/subspaces/simulation/utils.go @@ -10,6 +10,7 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/desmos-labs/desmos/v5/x/subspaces/types" @@ -43,6 +44,7 @@ func GenerateRandomSubspace(r *rand.Rand, accs []simtypes.Account) types.Subspac creator, creator, RandomDate(r), + GenerateRandomFeeTokens(r), ) } @@ -120,3 +122,14 @@ func GetAccount(address string, accs []simtypes.Account) *simtypes.Account { func RandomGrant(r *rand.Rand, grants []types.Grant) types.Grant { return grants[r.Intn(len(grants))] } + +// GenerateRandomFeeTokens generates a list of fee tokens +func GenerateRandomFeeTokens(r *rand.Rand) sdk.Coins { + coins := make(sdk.Coins, r.Intn(10)) + + for i := range coins { + coins[i] = sdk.NewCoin(simtypes.RandStringOfLength(r, 10), sdk.NewInt(r.Int63n(1000000))) + } + + return coins.Sort() +} diff --git a/x/subspaces/types/codec.go b/x/subspaces/types/codec.go index a34bed313a..c11a91fc00 100644 --- a/x/subspaces/types/codec.go +++ b/x/subspaces/types/codec.go @@ -7,6 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" + govcodec "github.com/cosmos/cosmos-sdk/x/gov/codec" ) func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { @@ -39,6 +40,8 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterInterface((*Grantee)(nil), nil) cdc.RegisterConcrete(&UserGrantee{}, "desmos/UserGrantee", nil) cdc.RegisterConcrete(&GroupGrantee{}, "desmos/GroupGrantee", nil) + + cdc.RegisterConcrete(&MsgUpdateSubspaceFeeTokens{}, "desmos/MsgUpdateSubspaceFeeTokens", nil) } func RegisterInterfaces(registry types.InterfaceRegistry) { @@ -68,6 +71,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgRevokeTreasuryAuthorization{}, &MsgGrantAllowance{}, &MsgRevokeAllowance{}, + &MsgUpdateSubspaceFeeTokens{}, ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) @@ -93,4 +97,8 @@ func init() { // Register all Amino interfaces and concrete types on the authz Amino codec so that this can later be // used to properly serialize MsgGrant and MsgExec instances RegisterLegacyAminoCodec(authzcodec.Amino) + + // Register all Amino interfaces and concrete types on the gov Amino codec so that this can later be + // used to properly serialize MsgSubmitProposal instances + RegisterLegacyAminoCodec(govcodec.Amino) } diff --git a/x/subspaces/types/events.go b/x/subspaces/types/events.go index 4ddfd515ed..c6351cf734 100644 --- a/x/subspaces/types/events.go +++ b/x/subspaces/types/events.go @@ -21,6 +21,7 @@ const ( EventTypeRevokeTreasuryAuthorization = "revoke_treasury_authorization" EventTypeGrantAllowance = "grant_allowance" EventTypeRevokeAllowance = "revoke_allowance" + EventTypeUpdateSubspaceFeeToken = "update_subspace_fee_token" AttributeValueCategory = ModuleName AttributeKeySubspaceID = "subspace_id" diff --git a/x/subspaces/types/genesis_test.go b/x/subspaces/types/genesis_test.go index 1895a8e1ba..ff7ab97a33 100644 --- a/x/subspaces/types/genesis_test.go +++ b/x/subspaces/types/genesis_test.go @@ -54,6 +54,7 @@ func TestValidateGenesis(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), types.NewSubspace( 1, @@ -63,6 +64,7 @@ func TestValidateGenesis(t *testing.T) { "cosmos1vkuuth0rak58x36m7wuzj7ztttxh26fhqcfxm0", "cosmos1vkuuth0rak58x36m7wuzj7ztttxh26fhqcfxm0", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, nil, nil, nil, nil, nil), shouldErr: true, @@ -78,6 +80,7 @@ func TestValidateGenesis(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, nil, nil, nil, nil, nil), shouldErr: true, @@ -214,6 +217,7 @@ func TestValidateGenesis(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), types.NewSubspace( 2, @@ -223,6 +227,7 @@ func TestValidateGenesis(t *testing.T) { "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", "cosmos1a0cj0j6ujn2xap8p40y6648d0w2npytw3xvenm", time.Date(2020, 1, 2, 12, 00, 00, 000, time.UTC), + nil, ), }, []types.Section{ diff --git a/x/subspaces/types/keys.go b/x/subspaces/types/keys.go index dda510133b..64ef9f8c96 100644 --- a/x/subspaces/types/keys.go +++ b/x/subspaces/types/keys.go @@ -28,6 +28,7 @@ const ( ActionAddUserToUserGroup = "add_user_to_user_group" ActionRemoveUserFromUserGroup = "remove_user_from_user_group" ActionSetUserPermissions = "set_user_permissions" + ActionUpdateSubspaceFeeTokens = "update_subspace_fee_tokens" ActionGrantTreasuryAuthorization = "grant_treasury_authorization" ActionRevokeTreasuryAuthorization = "revoke_treasury_authorization" diff --git a/x/subspaces/types/models.go b/x/subspaces/types/models.go index 8c9f6f76a3..878317552e 100644 --- a/x/subspaces/types/models.go +++ b/x/subspaces/types/models.go @@ -41,15 +41,16 @@ func ParseSubspacesIDs(value string) (ids []uint64, err error) { } // NewSubspace is a constructor for the Subspace type -func NewSubspace(subspaceID uint64, name, description, treasury, owner, creator string, creationTime time.Time) Subspace { +func NewSubspace(subspaceID uint64, name, description, treasury, owner, creator string, creationTime time.Time, additionalFeeTokens sdk.Coins) Subspace { return Subspace{ - ID: subspaceID, - Name: name, - Description: description, - Treasury: treasury, - Owner: owner, - Creator: creator, - CreationTime: creationTime, + ID: subspaceID, + Name: name, + Description: description, + Treasury: treasury, + Owner: owner, + Creator: creator, + CreationTime: creationTime, + AdditionalFeeTokens: additionalFeeTokens, } } @@ -84,6 +85,11 @@ func (sub Subspace) Validate() error { return fmt.Errorf("invalid subspace creation time: %s", sub.CreationTime) } + err = sub.AdditionalFeeTokens.Validate() + if err != nil { + return fmt.Errorf("invalid additional fee tokens: %s", sub.AdditionalFeeTokens) + } + return nil } @@ -111,6 +117,7 @@ func (sub Subspace) Update(update SubspaceUpdate) Subspace { update.Owner, sub.Creator, sub.CreationTime, + sub.AdditionalFeeTokens, ) } @@ -131,6 +138,35 @@ func NewSubspaceUpdate(name, description, owner string) SubspaceUpdate { } } +// AdditionalFeeTokensUpdate contains data related to a subspace that can be updated after update addition fee tokens proposal performed. +type AdditionalFeeTokensUpdate struct { + // Additional fee tokens of the subspace + AdditionalFeeTokens sdk.Coins +} + +// NewAdditionalFeeTokensUpdate returns a new AdditionalFeeTokensUpdate instance +func NewAdditionalFeeTokensUpdate(tokens ...sdk.Coin) AdditionalFeeTokensUpdate { + return AdditionalFeeTokensUpdate{ + AdditionalFeeTokens: tokens, + } +} + +// Update updates the additional fee tokens field of a subspace without validating it. +// Before storing the updated subspace, a validation with Validate() should +// be performed. +func (update AdditionalFeeTokensUpdate) Update(sub Subspace) Subspace { + return NewSubspace( + sub.ID, + sub.Name, + sub.Description, + sub.Treasury, + sub.Owner, + sub.Creator, + sub.CreationTime, + update.AdditionalFeeTokens, + ) +} + // -------------------------------------------------------------------------------------------------------------------- const ( diff --git a/x/subspaces/types/models.pb.go b/x/subspaces/types/models.pb.go index 59315f7e21..f46413ef79 100644 --- a/x/subspaces/types/models.pb.go +++ b/x/subspaces/types/models.pb.go @@ -5,6 +5,8 @@ package types import ( fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" @@ -44,6 +46,8 @@ type Subspace struct { Creator string `protobuf:"bytes,6,opt,name=creator,proto3" json:"creator,omitempty" yaml:"creator"` // the creation time of the subspace CreationTime time.Time `protobuf:"bytes,7,opt,name=creation_time,json=creationTime,proto3,stdtime" json:"creation_time" yaml:"creation_time"` + // List of fee token denoms with default minimum gas prices allowed inside the subspace + AdditionalFeeTokens github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,8,rep,name=additional_fee_tokens,json=additionalFeeTokens,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"additional_fee_tokens" yaml:"additional_fee_tokens"` } func (m *Subspace) Reset() { *m = Subspace{} } @@ -128,6 +132,13 @@ func (m *Subspace) GetCreationTime() time.Time { return time.Time{} } +func (m *Subspace) GetAdditionalFeeTokens() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.AdditionalFeeTokens + } + return nil +} + // Section contains the data of a single subspace section type Section struct { // Id of the subspace inside which the section exists @@ -380,47 +391,53 @@ func init() { func init() { proto.RegisterFile("desmos/subspaces/v3/models.proto", fileDescriptor_ca57465af0d8b734) } var fileDescriptor_ca57465af0d8b734 = []byte{ - // 634 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x94, 0x3f, 0x6f, 0xd3, 0x40, - 0x14, 0xc0, 0xe3, 0x24, 0x6d, 0xe3, 0x4b, 0xff, 0x71, 0xad, 0x90, 0xd5, 0x21, 0x67, 0x5d, 0x01, - 0x65, 0x28, 0xb6, 0x68, 0x85, 0x84, 0x2a, 0x31, 0x10, 0x81, 0xaa, 0x4a, 0x0c, 0xd5, 0x15, 0x16, - 0x96, 0xca, 0x89, 0x8f, 0x60, 0x29, 0xce, 0x59, 0x77, 0x4e, 0xa1, 0x2b, 0x9f, 0xa0, 0x23, 0x0b, - 0x52, 0x67, 0x3e, 0x05, 0x63, 0xc7, 0x8e, 0x4c, 0x57, 0xe4, 0x2c, 0x0c, 0x4c, 0xfe, 0x04, 0xc8, - 0x77, 0xb6, 0xe3, 0x48, 0x05, 0x15, 0x09, 0xb6, 0x77, 0xf7, 0x7e, 0xef, 0xac, 0xf7, 0x7b, 0xe7, - 0x03, 0xb6, 0x4f, 0x45, 0xc8, 0x84, 0x2b, 0x26, 0x7d, 0x11, 0x79, 0x03, 0x2a, 0xdc, 0xd3, 0x3d, - 0x37, 0x64, 0x3e, 0x1d, 0x09, 0x27, 0xe2, 0x2c, 0x66, 0x70, 0x43, 0x13, 0x4e, 0x49, 0x38, 0xa7, - 0x7b, 0x5b, 0x9b, 0x43, 0x36, 0x64, 0x2a, 0xef, 0x66, 0x91, 0x46, 0xb7, 0xd0, 0x90, 0xb1, 0xe1, - 0x88, 0xba, 0x6a, 0xd5, 0x9f, 0xbc, 0x75, 0xe3, 0x20, 0xa4, 0x22, 0xf6, 0xc2, 0x48, 0x03, 0xf8, - 0x63, 0x03, 0xb4, 0x8e, 0xf3, 0x73, 0xe0, 0x36, 0xa8, 0x07, 0xbe, 0x65, 0xd8, 0x46, 0xb7, 0xd9, - 0xdb, 0x48, 0x24, 0xaa, 0x1f, 0x3e, 0x4f, 0x25, 0x32, 0xcf, 0xbc, 0x70, 0xb4, 0x8f, 0x03, 0x1f, - 0x93, 0x7a, 0xe0, 0xc3, 0x6d, 0xd0, 0x1c, 0x7b, 0x21, 0xb5, 0xea, 0xb6, 0xd1, 0x35, 0x7b, 0x6b, - 0xa9, 0x44, 0x6d, 0x0d, 0x64, 0xbb, 0x98, 0xa8, 0x24, 0x7c, 0x02, 0xda, 0x3e, 0x15, 0x03, 0x1e, - 0x44, 0x71, 0xc0, 0xc6, 0x56, 0x43, 0xb1, 0x77, 0x53, 0x89, 0xa0, 0x66, 0x2b, 0x49, 0x4c, 0xaa, - 0x28, 0x74, 0x41, 0x2b, 0xe6, 0xd4, 0x13, 0x13, 0x7e, 0x66, 0x35, 0x55, 0xd9, 0x46, 0x2a, 0xd1, - 0x9a, 0x2e, 0x2b, 0x32, 0x98, 0x94, 0x10, 0x7c, 0x00, 0x16, 0xd8, 0xfb, 0x31, 0xe5, 0xd6, 0x82, - 0xa2, 0xd7, 0x53, 0x89, 0x96, 0x35, 0xad, 0xb6, 0x31, 0xd1, 0x69, 0xb8, 0x03, 0x96, 0x06, 0x9c, - 0x7a, 0x31, 0xe3, 0xd6, 0xa2, 0x22, 0x61, 0x2a, 0xd1, 0xaa, 0x26, 0xf3, 0x04, 0x26, 0x05, 0x02, - 0x3d, 0xb0, 0xa2, 0xc2, 0x80, 0x8d, 0x4f, 0x32, 0x67, 0xd6, 0x92, 0x6d, 0x74, 0xdb, 0xbb, 0x5b, - 0x8e, 0x16, 0xea, 0x14, 0x42, 0x9d, 0x57, 0x85, 0xd0, 0x9e, 0x7d, 0x29, 0x51, 0x2d, 0x95, 0x68, - 0xb3, 0x72, 0x66, 0x51, 0x8e, 0xcf, 0xaf, 0x91, 0x41, 0x96, 0x8b, 0xbd, 0xac, 0x68, 0xbf, 0xf5, - 0xe9, 0x02, 0x19, 0x3f, 0x2e, 0x90, 0x81, 0x3f, 0xd7, 0xc1, 0xd2, 0x31, 0x1d, 0xa8, 0xfe, 0x5f, - 0x80, 0x76, 0x31, 0xd7, 0x93, 0x72, 0x18, 0xf7, 0x12, 0x89, 0x40, 0x31, 0x26, 0x35, 0x94, 0xdc, - 0x63, 0x05, 0xc5, 0x04, 0x14, 0xab, 0x43, 0x3f, 0x1f, 0x65, 0x36, 0xa3, 0x95, 0xdf, 0x8f, 0xf2, - 0x29, 0x30, 0x23, 0x8f, 0xd3, 0x71, 0x9c, 0x7d, 0xa9, 0xa1, 0x58, 0x3b, 0x91, 0xa8, 0x75, 0xa4, - 0x36, 0x55, 0xc5, 0xba, 0xae, 0x28, 0x31, 0x4c, 0x5a, 0x3a, 0x3e, 0x9c, 0xdd, 0x84, 0xe6, 0x5f, - 0xdc, 0x84, 0x85, 0x5b, 0xdf, 0x84, 0x8a, 0x9f, 0x9f, 0x75, 0x60, 0xbe, 0x16, 0x94, 0x1f, 0x70, - 0x36, 0x89, 0xfe, 0x95, 0xa1, 0x67, 0x00, 0x08, 0xed, 0xfc, 0xa4, 0x34, 0x85, 0x13, 0x89, 0xcc, - 0x7c, 0x12, 0xea, 0x90, 0x3b, 0xf9, 0x21, 0x25, 0x88, 0x89, 0x99, 0x2f, 0x4a, 0xc9, 0x8d, 0x3f, - 0x4b, 0xfe, 0xbf, 0x96, 0xe0, 0x01, 0x68, 0x47, 0x94, 0x87, 0x81, 0x10, 0x01, 0x1b, 0x0b, 0x6b, - 0xd1, 0x6e, 0x74, 0xcd, 0xde, 0xfd, 0x59, 0x65, 0x25, 0x89, 0xbf, 0x5c, 0xa3, 0xf6, 0xd1, 0x6c, - 0x4d, 0xaa, 0x95, 0x15, 0xdd, 0x5f, 0x0d, 0xb0, 0x9a, 0xe9, 0x9e, 0xa1, 0xd0, 0xbd, 0xc9, 0xf9, - 0xea, 0xbc, 0xf3, 0x39, 0xbb, 0x3b, 0x37, 0xd8, 0x5d, 0x99, 0xb3, 0x5b, 0x15, 0x09, 0x41, 0x73, - 0x22, 0x28, 0xd7, 0xef, 0x04, 0x51, 0x31, 0x7c, 0x34, 0xdf, 0x58, 0x53, 0x35, 0xb6, 0x76, 0xbb, - 0x16, 0x7a, 0x2f, 0x2f, 0x93, 0x8e, 0x71, 0x95, 0x74, 0x8c, 0xef, 0x49, 0xc7, 0x38, 0x9f, 0x76, - 0x6a, 0x57, 0xd3, 0x4e, 0xed, 0xdb, 0xb4, 0x53, 0x7b, 0xb3, 0x3b, 0x0c, 0xe2, 0x77, 0x93, 0xbe, - 0x33, 0x60, 0xa1, 0xab, 0xdf, 0xd1, 0x87, 0x23, 0xaf, 0x2f, 0xf2, 0xd8, 0x3d, 0x7d, 0xec, 0x7e, - 0xa8, 0x3c, 0xbd, 0xf1, 0x59, 0x44, 0x45, 0x7f, 0x51, 0xfd, 0xed, 0x7b, 0xbf, 0x02, 0x00, 0x00, - 0xff, 0xff, 0x9b, 0xca, 0x1a, 0xe0, 0x9b, 0x05, 0x00, 0x00, + // 734 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x95, 0xbf, 0x6f, 0xd3, 0x40, + 0x14, 0xc7, 0xe3, 0x24, 0x6d, 0x93, 0x4b, 0x7f, 0x71, 0x29, 0xc8, 0x54, 0x28, 0x67, 0x5d, 0x01, + 0x65, 0x68, 0x7d, 0x6a, 0x2b, 0x24, 0x54, 0x89, 0x81, 0xf0, 0xa3, 0xaa, 0xc4, 0x50, 0xb9, 0x65, + 0x61, 0x89, 0x9c, 0xf8, 0x1a, 0xac, 0xc6, 0x3e, 0xcb, 0xe7, 0x04, 0xfa, 0x5f, 0x74, 0x64, 0x41, + 0x74, 0x60, 0xe2, 0xaf, 0x60, 0xec, 0xd8, 0x91, 0xc9, 0x45, 0xee, 0xc2, 0xc0, 0xe4, 0xbf, 0x00, + 0xf9, 0xce, 0x76, 0x1c, 0xa9, 0xa0, 0x22, 0xc1, 0xe4, 0xbb, 0x7b, 0xdf, 0xf7, 0x9e, 0xee, 0xf3, + 0xbe, 0xb6, 0x81, 0x66, 0x51, 0xee, 0x30, 0x4e, 0xf8, 0xa8, 0xc7, 0x3d, 0xb3, 0x4f, 0x39, 0x19, + 0x6f, 0x13, 0x87, 0x59, 0x74, 0xc8, 0x75, 0xcf, 0x67, 0x01, 0x83, 0x4d, 0xa9, 0xd0, 0x73, 0x85, + 0x3e, 0xde, 0x5e, 0x5d, 0x19, 0xb0, 0x01, 0x13, 0x71, 0x92, 0xac, 0xa4, 0x74, 0x15, 0x0d, 0x18, + 0x1b, 0x0c, 0x29, 0x11, 0xbb, 0xde, 0xe8, 0x88, 0x04, 0xb6, 0x43, 0x79, 0x60, 0x3a, 0x5e, 0x2a, + 0x68, 0xf5, 0x99, 0xe8, 0xd6, 0x33, 0x39, 0x25, 0xe3, 0xcd, 0x1e, 0x0d, 0xcc, 0x4d, 0xd2, 0x67, + 0xb6, 0x2b, 0xe3, 0xf8, 0x73, 0x15, 0xd4, 0x0e, 0xd2, 0x3e, 0x70, 0x0d, 0x94, 0x6d, 0x4b, 0x55, + 0x34, 0xa5, 0x5d, 0xed, 0x34, 0xa3, 0x10, 0x95, 0xf7, 0x9e, 0xc7, 0x21, 0xaa, 0x9f, 0x98, 0xce, + 0x70, 0x07, 0xdb, 0x16, 0x36, 0xca, 0xb6, 0x05, 0xd7, 0x40, 0xd5, 0x35, 0x1d, 0xaa, 0x96, 0x35, + 0xa5, 0x5d, 0xef, 0x2c, 0xc5, 0x21, 0x6a, 0x48, 0x41, 0x72, 0x8a, 0x0d, 0x11, 0x84, 0x8f, 0x41, + 0xc3, 0xa2, 0xbc, 0xef, 0xdb, 0x5e, 0x60, 0x33, 0x57, 0xad, 0x08, 0xed, 0x9d, 0x38, 0x44, 0x50, + 0x6a, 0x0b, 0x41, 0x6c, 0x14, 0xa5, 0x90, 0x80, 0x5a, 0xe0, 0x53, 0x93, 0x8f, 0xfc, 0x13, 0xb5, + 0x2a, 0xd2, 0x9a, 0x71, 0x88, 0x96, 0x64, 0x5a, 0x16, 0xc1, 0x46, 0x2e, 0x82, 0x0f, 0xc1, 0x0c, + 0x7b, 0xe7, 0x52, 0x5f, 0x9d, 0x11, 0xea, 0xe5, 0x38, 0x44, 0xf3, 0x52, 0x2d, 0x8e, 0xb1, 0x21, + 0xc3, 0x70, 0x1d, 0xcc, 0xf5, 0x7d, 0x6a, 0x06, 0xcc, 0x57, 0x67, 0x85, 0x12, 0xc6, 0x21, 0x5a, + 0x94, 0xca, 0x34, 0x80, 0x8d, 0x4c, 0x02, 0x4d, 0xb0, 0x20, 0x96, 0x36, 0x73, 0xbb, 0x09, 0x53, + 0x75, 0x4e, 0x53, 0xda, 0x8d, 0xad, 0x55, 0x5d, 0x02, 0xd7, 0x33, 0xe0, 0xfa, 0x61, 0x06, 0xbc, + 0xa3, 0x9d, 0x87, 0xa8, 0x14, 0x87, 0x68, 0xa5, 0x50, 0x33, 0x4b, 0xc7, 0xa7, 0x97, 0x48, 0x31, + 0xe6, 0xb3, 0xb3, 0x24, 0x09, 0x7e, 0x52, 0xc0, 0x6d, 0xd3, 0xb2, 0xec, 0xe4, 0xc0, 0x1c, 0x76, + 0x8f, 0x28, 0xed, 0x06, 0xec, 0x98, 0xba, 0x5c, 0xad, 0x69, 0x95, 0x76, 0x63, 0xeb, 0xae, 0x2e, + 0x67, 0xa7, 0x27, 0xb3, 0xd3, 0xd3, 0xd9, 0xe9, 0xcf, 0x98, 0xed, 0x76, 0xf6, 0xd3, 0x56, 0xf7, + 0x64, 0xab, 0x6b, 0xab, 0xe0, 0x2f, 0x97, 0xa8, 0x3d, 0xb0, 0x83, 0xb7, 0xa3, 0x9e, 0xde, 0x67, + 0x0e, 0x49, 0x8d, 0x20, 0x1f, 0x1b, 0xdc, 0x3a, 0x26, 0xc1, 0x89, 0x47, 0xb9, 0x28, 0xc8, 0x8d, + 0xe6, 0xa4, 0xc6, 0x4b, 0x4a, 0x0f, 0x45, 0x85, 0x9d, 0xda, 0x87, 0x33, 0xa4, 0xfc, 0x38, 0x43, + 0x0a, 0xfe, 0x58, 0x06, 0x73, 0x07, 0xb4, 0x2f, 0x26, 0xf4, 0x02, 0x34, 0x32, 0x67, 0x76, 0x73, + 0xbb, 0xdc, 0x8f, 0x42, 0x04, 0x32, 0x23, 0x09, 0xdb, 0xa4, 0x93, 0x2e, 0x48, 0xb1, 0x01, 0xb2, + 0xdd, 0x9e, 0x95, 0x9a, 0x2d, 0x71, 0xd1, 0xc2, 0xef, 0xcd, 0xf6, 0x04, 0xd4, 0x3d, 0xd3, 0xa7, + 0x6e, 0x90, 0x74, 0xaa, 0x08, 0xad, 0x16, 0x85, 0xa8, 0xb6, 0x2f, 0x0e, 0x45, 0xc6, 0xb2, 0xcc, + 0xc8, 0x65, 0xd8, 0xa8, 0xc9, 0xf5, 0xde, 0xc4, 0xab, 0xd5, 0xbf, 0xf0, 0xea, 0xcc, 0x8d, 0xbd, + 0x5a, 0xe0, 0xf3, 0xb3, 0x0c, 0xea, 0xaf, 0x39, 0xf5, 0x77, 0x7d, 0x36, 0xf2, 0xfe, 0x15, 0xa1, + 0xa7, 0x00, 0x70, 0xc9, 0xbc, 0x9b, 0x93, 0xc2, 0x51, 0x88, 0xea, 0xe9, 0x24, 0x44, 0x91, 0x5b, + 0x69, 0x91, 0x5c, 0x88, 0x8d, 0x7a, 0xba, 0xc9, 0x21, 0x57, 0xfe, 0x0c, 0xf9, 0xff, 0x52, 0x82, + 0xbb, 0xa0, 0xe1, 0x51, 0xdf, 0xb1, 0x39, 0xb7, 0x99, 0xcb, 0xd5, 0x59, 0xad, 0xd2, 0xae, 0x77, + 0x1e, 0x4c, 0x32, 0x0b, 0xc1, 0xc4, 0xb3, 0x8d, 0xfd, 0xc9, 0xde, 0x28, 0x66, 0x16, 0x70, 0x7f, + 0x55, 0xc0, 0x62, 0x82, 0x7b, 0x22, 0x85, 0xe4, 0x3a, 0xe6, 0x8b, 0xd3, 0xcc, 0xa7, 0xe8, 0xae, + 0x5f, 0x43, 0x77, 0x61, 0x8a, 0x6e, 0x11, 0x24, 0x04, 0xd5, 0x11, 0xa7, 0xbe, 0xfc, 0x92, 0x19, + 0x62, 0x0d, 0x37, 0xa7, 0x2f, 0x56, 0x15, 0x17, 0x5b, 0xba, 0xd9, 0x15, 0x3a, 0xaf, 0xce, 0xa3, + 0x96, 0x72, 0x11, 0xb5, 0x94, 0xef, 0x51, 0x4b, 0x39, 0xbd, 0x6a, 0x95, 0x2e, 0xae, 0x5a, 0xa5, + 0x6f, 0x57, 0xad, 0xd2, 0x9b, 0xad, 0xc2, 0x4b, 0x2b, 0xff, 0x04, 0x1b, 0x43, 0xb3, 0xc7, 0xd3, + 0x35, 0x19, 0x3f, 0x22, 0xef, 0x0b, 0x3f, 0x0f, 0xf1, 0x12, 0xf7, 0x66, 0xc5, 0xf7, 0x68, 0xfb, + 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0xf8, 0xce, 0xe1, 0x5d, 0x06, 0x00, 0x00, } func (this *Subspace) Equal(that interface{}) bool { @@ -463,6 +480,14 @@ func (this *Subspace) Equal(that interface{}) bool { if !this.CreationTime.Equal(that1.CreationTime) { return false } + if len(this.AdditionalFeeTokens) != len(that1.AdditionalFeeTokens) { + return false + } + for i := range this.AdditionalFeeTokens { + if !this.AdditionalFeeTokens[i].Equal(&that1.AdditionalFeeTokens[i]) { + return false + } + } return true } func (this *Section) Equal(that interface{}) bool { @@ -603,6 +628,20 @@ func (m *Subspace) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.AdditionalFeeTokens) > 0 { + for iNdEx := len(m.AdditionalFeeTokens) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AdditionalFeeTokens[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintModels(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CreationTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreationTime):]) if err1 != nil { return 0, err1 @@ -858,6 +897,12 @@ func (m *Subspace) Size() (n int) { } l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreationTime) n += 1 + l + sovModels(uint64(l)) + if len(m.AdditionalFeeTokens) > 0 { + for _, e := range m.AdditionalFeeTokens { + l = e.Size() + n += 1 + l + sovModels(uint64(l)) + } + } return n } @@ -1191,6 +1236,40 @@ func (m *Subspace) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdditionalFeeTokens", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthModels + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthModels + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdditionalFeeTokens = append(m.AdditionalFeeTokens, types.Coin{}) + if err := m.AdditionalFeeTokens[len(m.AdditionalFeeTokens)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipModels(dAtA[iNdEx:]) diff --git a/x/subspaces/types/models_test.go b/x/subspaces/types/models_test.go index 2eaf9f83a0..52ad53e7b3 100644 --- a/x/subspaces/types/models_test.go +++ b/x/subspaces/types/models_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/desmos-labs/desmos/v5/x/subspaces/types" @@ -69,6 +70,7 @@ func TestSubspace_Validate(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), shouldErr: true, }, @@ -82,6 +84,7 @@ func TestSubspace_Validate(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), shouldErr: true, }, @@ -95,6 +98,7 @@ func TestSubspace_Validate(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), shouldErr: true, }, @@ -108,6 +112,7 @@ func TestSubspace_Validate(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), shouldErr: true, }, @@ -121,6 +126,7 @@ func TestSubspace_Validate(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zw", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), shouldErr: true, }, @@ -134,6 +140,21 @@ func TestSubspace_Validate(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Time{}, + nil, + ), + shouldErr: true, + }, + { + name: "invalid subspace fee tokens returns no error", + subspace: types.NewSubspace( + 1, + "Test subspace", + "This is a test subspace", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + sdk.Coins{{Denom: "minttoken", Amount: sdk.NewInt(-10)}}, ), shouldErr: true, }, @@ -147,6 +168,7 @@ func TestSubspace_Validate(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), shouldErr: false, }, @@ -182,6 +204,7 @@ func TestSubspace_Update(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), update: types.NewSubspaceUpdate( types.DoNotModify, @@ -196,6 +219,7 @@ func TestSubspace_Update(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, { @@ -208,6 +232,7 @@ func TestSubspace_Update(t *testing.T) { "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), update: types.NewSubspaceUpdate( "New subspace name", @@ -222,6 +247,7 @@ func TestSubspace_Update(t *testing.T) { "cosmos10ya9y35qkf4puaklx5fs07sxfxqncx9usgsnz6", "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, } @@ -613,3 +639,35 @@ func getRandomSubspaceIDs(size int) []uint64 { } return subspaceIDs } + +func TestAdditionalFeeTokensUpdate_Update(t *testing.T) { + subspace := types.NewSubspace( + 1, + "Test subspace", + "This is a test subspace", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, + ) + + updated := types.NewAdditionalFeeTokensUpdate( + sdk.NewCoin("minttoken", sdk.NewInt(10)), + sdk.NewCoin("ustar", sdk.NewInt(10)), + ).Update(subspace) + + require.Equal(t, types.NewSubspace( + 1, + "Test subspace", + "This is a test subspace", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + "cosmos1s0he0z3g92zwsxdj83h0ky9w463sx7gq9mqtgn", + time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + sdk.NewCoins( + sdk.NewCoin("minttoken", sdk.NewInt(10)), + sdk.NewCoin("ustar", sdk.NewInt(10)), + ), + ), updated) +} diff --git a/x/subspaces/types/msgs.go b/x/subspaces/types/msgs.go index ce18da0e14..0071a1d6b8 100644 --- a/x/subspaces/types/msgs.go +++ b/x/subspaces/types/msgs.go @@ -7,6 +7,7 @@ import ( errors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" ) // SubspaceMsg represents a generic message that is related to a subspace @@ -17,6 +18,13 @@ type SubspaceMsg interface { GetSubspaceID() uint64 } +// ManageSubspaceMsg represents a generic message that is related to a management purpose +type ManageSubspaceMsg interface { + SubspaceMsg + + IsManageSubspaceMsg() +} + var ( _ sdk.Msg = &MsgCreateSubspace{} _ sdk.Msg = &MsgEditSubspace{} @@ -33,7 +41,21 @@ var ( _ sdk.Msg = &MsgAddUserToUserGroup{} _ sdk.Msg = &MsgRemoveUserFromUserGroup{} _ sdk.Msg = &MsgSetUserPermissions{} - _ sdk.Msg = &MsgGrantTreasuryAuthorization{} + + _ ManageSubspaceMsg = &MsgEditSubspace{} + _ ManageSubspaceMsg = &MsgDeleteSubspace{} + _ ManageSubspaceMsg = &MsgCreateSection{} + _ ManageSubspaceMsg = &MsgEditSection{} + _ ManageSubspaceMsg = &MsgMoveSection{} + _ ManageSubspaceMsg = &MsgDeleteSection{} + _ ManageSubspaceMsg = &MsgCreateUserGroup{} + _ ManageSubspaceMsg = &MsgEditUserGroup{} + _ ManageSubspaceMsg = &MsgMoveUserGroup{} + _ ManageSubspaceMsg = &MsgSetUserGroupPermissions{} + _ ManageSubspaceMsg = &MsgDeleteUserGroup{} + _ ManageSubspaceMsg = &MsgAddUserToUserGroup{} + _ ManageSubspaceMsg = &MsgRemoveUserFromUserGroup{} + _ ManageSubspaceMsg = &MsgSetUserPermissions{} ) // NewMsgCreateSubspace creates a new MsgCreateSubspace instance @@ -142,6 +164,9 @@ func (msg MsgEditSubspace) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgEditSubspace) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgDeleteSubspace returns a new MsgDeleteSubspace instance @@ -183,6 +208,9 @@ func (msg MsgDeleteSubspace) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgDeleteSubspace) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgCreateSection returns a new MsgCreateSection instance @@ -237,6 +265,9 @@ func (msg MsgCreateSection) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgCreateSection) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgEditSection returns a new MsgEditSection instance @@ -291,6 +322,9 @@ func (msg MsgEditSection) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgEditSection) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgMoveSection returns a new MsgMoveSection instance @@ -343,6 +377,9 @@ func (msg MsgMoveSection) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgMoveSection) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgDeleteSection returns a new MsgDeleteSection instance @@ -389,6 +426,9 @@ func (msg MsgDeleteSection) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgDeleteSection) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgCreateUserGroup creates a new MsgCreateUserGroup instance @@ -458,6 +498,9 @@ func (msg MsgCreateUserGroup) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgCreateUserGroup) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgEditUserGroup returns a new NewMsgEditUserGroup instance @@ -508,6 +551,9 @@ func (msg MsgEditUserGroup) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgEditUserGroup) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgMoveUserGroup returns a new NewMsgMoveUserGroup instance @@ -560,6 +606,9 @@ func (msg MsgMoveUserGroup) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgMoveUserGroup) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgSetUserGroupPermissions returns a new MsgSetUserGroupPermissions instance @@ -612,6 +661,9 @@ func (msg MsgSetUserGroupPermissions) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgSetUserGroupPermissions) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgDeleteUserGroup creates a new MsgDeleteUserGroup instance @@ -658,6 +710,9 @@ func (msg MsgDeleteUserGroup) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgDeleteUserGroup) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgAddUserToUserGroup creates a new MsgAddUserToUserGroup instance @@ -715,6 +770,9 @@ func (msg MsgAddUserToUserGroup) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgAddUserToUserGroup) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgRemoveUserFromUserGroup creates a new MsgRemoveUserFromUserGroup instance @@ -772,6 +830,9 @@ func (msg MsgRemoveUserFromUserGroup) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgRemoveUserFromUserGroup) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgSetUserPermissions creates a new MsgSetUserPermissions instance @@ -834,3 +895,62 @@ func (msg MsgSetUserPermissions) GetSigners() []sdk.AccAddress { addr, _ := sdk.AccAddressFromBech32(msg.Signer) return []sdk.AccAddress{addr} } + +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgSetUserPermissions) IsManageSubspaceMsg() {} + +// -------------------------------------------------------------------------------------------------------------------- + +var ( + _ sdk.Msg = &MsgUpdateSubspaceFeeTokens{} + _ legacytx.LegacyMsg = &MsgUpdateSubspaceFeeTokens{} +) + +// NewMsgUpdateSubspaceFeeTokens creates a new MsgUpdateSubspaceFeeTokens instance +func NewMsgUpdateSubspaceFeeTokens( + subspaceID uint64, + additionalFeeTokens sdk.Coins, + authority string, +) *MsgUpdateSubspaceFeeTokens { + return &MsgUpdateSubspaceFeeTokens{ + SubspaceID: subspaceID, + AdditionalFeeTokens: additionalFeeTokens, + Authority: authority, + } +} + +// Route implements legacytx.LegacyMsg +func (msg MsgUpdateSubspaceFeeTokens) Route() string { return RouterKey } + +// Type implements legacytx.LegacyMsg +func (msg MsgUpdateSubspaceFeeTokens) Type() string { return ActionUpdateSubspaceFeeTokens } + +// ValidateBasic implements sdk.Msg +func (msg MsgUpdateSubspaceFeeTokens) ValidateBasic() error { + if msg.SubspaceID == 0 { + return errors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid subspace id: %d", msg.SubspaceID) + } + + err := msg.AdditionalFeeTokens.Validate() + if err != nil { + return err + } + + _, err = sdk.AccAddressFromBech32(msg.Authority) + if err != nil { + return err + } + + return nil +} + +// GetSignBytes implements legacytx.LegacyMsg +func (msg MsgUpdateSubspaceFeeTokens) GetSignBytes() []byte { + return sdk.MustSortJSON(AminoCodec.MustMarshalJSON(&msg)) +} + +// GetSigners implements sdk.Msg +func (msg MsgUpdateSubspaceFeeTokens) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{addr} +} diff --git a/x/subspaces/types/msgs.pb.go b/x/subspaces/types/msgs.pb.go index 9f15e617a6..2130954c4f 100644 --- a/x/subspaces/types/msgs.pb.go +++ b/x/subspaces/types/msgs.pb.go @@ -6,6 +6,10 @@ package types import ( context "context" fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -1756,6 +1760,112 @@ func (m *MsgSetUserPermissionsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSetUserPermissionsResponse proto.InternalMessageInfo +// MsgUpdateSubspaceFeeTokens represents the message to be used to update the accepted fee tokens +// inside a given subspace, using an on-chain governance proposal +// +// Since: Desmos 6.0.0 +type MsgUpdateSubspaceFeeTokens struct { + // Id of the subspace where the list of allowed fee tokens will be updated + SubspaceID uint64 `protobuf:"varint,1,opt,name=subspace_id,json=subspaceId,proto3" json:"subspace_id,omitempty" yaml:"subspace_id"` + // List of tokens allowed to be fee tokens inside the given subspace, represented as their gas prices + AdditionalFeeTokens github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=additional_fee_tokens,json=additionalFeeTokens,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"additional_fee_tokens" yaml:"additional_fee_tokens"` + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,3,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (m *MsgUpdateSubspaceFeeTokens) Reset() { *m = MsgUpdateSubspaceFeeTokens{} } +func (m *MsgUpdateSubspaceFeeTokens) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateSubspaceFeeTokens) ProtoMessage() {} +func (*MsgUpdateSubspaceFeeTokens) Descriptor() ([]byte, []int) { + return fileDescriptor_35d68359a074bdd9, []int{30} +} +func (m *MsgUpdateSubspaceFeeTokens) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateSubspaceFeeTokens) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateSubspaceFeeTokens.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateSubspaceFeeTokens) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateSubspaceFeeTokens.Merge(m, src) +} +func (m *MsgUpdateSubspaceFeeTokens) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateSubspaceFeeTokens) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateSubspaceFeeTokens.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateSubspaceFeeTokens proto.InternalMessageInfo + +func (m *MsgUpdateSubspaceFeeTokens) GetSubspaceID() uint64 { + if m != nil { + return m.SubspaceID + } + return 0 +} + +func (m *MsgUpdateSubspaceFeeTokens) GetAdditionalFeeTokens() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.AdditionalFeeTokens + } + return nil +} + +func (m *MsgUpdateSubspaceFeeTokens) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +// MsgUpdateSubspaceFeeTokensResponse represents the Msg/UpdateSubspaceFeeTokens response type +// +// Since: Desmos 6.0.0 +type MsgUpdateSubspaceFeeTokensResponse struct { +} + +func (m *MsgUpdateSubspaceFeeTokensResponse) Reset() { *m = MsgUpdateSubspaceFeeTokensResponse{} } +func (m *MsgUpdateSubspaceFeeTokensResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateSubspaceFeeTokensResponse) ProtoMessage() {} +func (*MsgUpdateSubspaceFeeTokensResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_35d68359a074bdd9, []int{31} +} +func (m *MsgUpdateSubspaceFeeTokensResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateSubspaceFeeTokensResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateSubspaceFeeTokensResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateSubspaceFeeTokensResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateSubspaceFeeTokensResponse.Merge(m, src) +} +func (m *MsgUpdateSubspaceFeeTokensResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateSubspaceFeeTokensResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateSubspaceFeeTokensResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateSubspaceFeeTokensResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgCreateSubspace)(nil), "desmos.subspaces.v3.MsgCreateSubspace") proto.RegisterType((*MsgCreateSubspaceResponse)(nil), "desmos.subspaces.v3.MsgCreateSubspaceResponse") @@ -1787,96 +1897,111 @@ func init() { proto.RegisterType((*MsgRemoveUserFromUserGroupResponse)(nil), "desmos.subspaces.v3.MsgRemoveUserFromUserGroupResponse") proto.RegisterType((*MsgSetUserPermissions)(nil), "desmos.subspaces.v3.MsgSetUserPermissions") proto.RegisterType((*MsgSetUserPermissionsResponse)(nil), "desmos.subspaces.v3.MsgSetUserPermissionsResponse") + proto.RegisterType((*MsgUpdateSubspaceFeeTokens)(nil), "desmos.subspaces.v3.MsgUpdateSubspaceFeeTokens") + proto.RegisterType((*MsgUpdateSubspaceFeeTokensResponse)(nil), "desmos.subspaces.v3.MsgUpdateSubspaceFeeTokensResponse") } func init() { proto.RegisterFile("desmos/subspaces/v3/msgs.proto", fileDescriptor_35d68359a074bdd9) } var fileDescriptor_35d68359a074bdd9 = []byte{ - // 1341 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0xef, 0xda, 0x4e, 0xd2, 0x8c, 0x13, 0x27, 0xd9, 0xb6, 0xa9, 0xbb, 0x05, 0x6f, 0x34, 0x4d, - 0x9a, 0xa6, 0x34, 0xb6, 0x94, 0x08, 0x51, 0x8a, 0x38, 0xc4, 0x6d, 0xa9, 0x22, 0x70, 0x5b, 0x6d, - 0x8b, 0x90, 0x90, 0x90, 0xb5, 0xce, 0x4e, 0x9d, 0x55, 0xed, 0x5d, 0x6b, 0x67, 0x9d, 0x10, 0xae, - 0x15, 0x17, 0x84, 0x44, 0xc5, 0x07, 0xe0, 0x04, 0x27, 0x3e, 0x05, 0x27, 0x7a, 0xec, 0x91, 0xd3, - 0x0a, 0x39, 0xe2, 0xc0, 0x85, 0x83, 0x3f, 0x01, 0xda, 0x99, 0xdd, 0xd9, 0x59, 0xdb, 0xe3, 0x5d, - 0x47, 0x01, 0x02, 0xdc, 0xd6, 0x6f, 0x7e, 0x33, 0xef, 0xbd, 0xdf, 0xfb, 0x33, 0x7f, 0x0c, 0x4a, - 0x06, 0xc2, 0x6d, 0x1b, 0x57, 0x70, 0xb7, 0x81, 0x3b, 0xfa, 0x1e, 0xc2, 0x95, 0x83, 0xed, 0x4a, - 0x1b, 0x37, 0x71, 0xb9, 0xe3, 0xd8, 0xae, 0x2d, 0x5f, 0xa0, 0xe3, 0x65, 0x36, 0x5e, 0x3e, 0xd8, - 0x56, 0x2e, 0x36, 0xed, 0xa6, 0x4d, 0xc6, 0x2b, 0xfe, 0x17, 0x85, 0x2a, 0xeb, 0xa2, 0xa5, 0xea, - 0xae, 0x83, 0x74, 0xdc, 0x75, 0x8e, 0x12, 0x81, 0xcf, 0x10, 0x6a, 0x3a, 0xba, 0xe5, 0x52, 0x20, - 0x7c, 0x25, 0x81, 0xa5, 0x1a, 0x6e, 0xde, 0x75, 0x90, 0xee, 0xa2, 0x27, 0x01, 0x5a, 0xbe, 0x06, - 0x72, 0x96, 0xde, 0x46, 0x45, 0x69, 0x45, 0xba, 0x31, 0x5b, 0x5d, 0xe8, 0x7b, 0x6a, 0xfe, 0x48, - 0x6f, 0xb7, 0xee, 0x40, 0x5f, 0x0a, 0x35, 0x32, 0x28, 0xdf, 0x06, 0x79, 0x03, 0xe1, 0x3d, 0xc7, - 0xec, 0xb8, 0xa6, 0x6d, 0x15, 0x33, 0x04, 0xbb, 0xdc, 0xf7, 0x54, 0x99, 0x62, 0xb9, 0x41, 0xa8, - 0xf1, 0x50, 0xf9, 0x3a, 0x98, 0xb2, 0x0f, 0x2d, 0xe4, 0x14, 0xb3, 0x64, 0xce, 0x62, 0xdf, 0x53, - 0xe7, 0xe8, 0x1c, 0x22, 0x86, 0x1a, 0x1d, 0x96, 0x6f, 0x81, 0x99, 0x3d, 0xdf, 0x30, 0xdb, 0x29, - 0xe6, 0x08, 0x52, 0xee, 0x7b, 0x6a, 0x81, 0x22, 0x83, 0x01, 0xa8, 0x85, 0x10, 0xd8, 0x00, 0x57, - 0x86, 0x3c, 0xd1, 0x10, 0xee, 0xd8, 0x16, 0x46, 0xf2, 0x7d, 0x90, 0x0f, 0xb9, 0xa8, 0x9b, 0x06, - 0x71, 0x2c, 0x57, 0x5d, 0xed, 0x79, 0x2a, 0x08, 0xa1, 0xbb, 0xf7, 0x22, 0xd3, 0x39, 0x28, 0xd4, - 0x40, 0xf8, 0x6b, 0xd7, 0x80, 0x5f, 0x65, 0xc0, 0x42, 0x0d, 0x37, 0xef, 0x1b, 0xa6, 0xcb, 0xc8, - 0x3a, 0x9d, 0xa5, 0x19, 0xe7, 0x99, 0x09, 0x38, 0xcf, 0x9e, 0x80, 0xf3, 0xdc, 0x78, 0xce, 0x37, - 0xc0, 0x34, 0x36, 0x9b, 0x3e, 0x70, 0x8a, 0x00, 0x97, 0xfa, 0x9e, 0x3a, 0x1f, 0x98, 0x4e, 0xe4, - 0x50, 0x0b, 0x00, 0xf0, 0x0a, 0xb8, 0x3c, 0xc0, 0x45, 0x48, 0x37, 0xfc, 0x92, 0xa6, 0xd5, 0x3d, - 0xd4, 0x42, 0x5c, 0x5a, 0x9d, 0x12, 0x53, 0x91, 0x89, 0x99, 0x24, 0x13, 0xaf, 0x92, 0x9c, 0x88, - 0x9b, 0xc1, 0x8c, 0xfc, 0x21, 0x03, 0x16, 0xa3, 0x8c, 0x41, 0x7b, 0x84, 0xa7, 0x7f, 0x47, 0x34, - 0xdf, 0x07, 0xb3, 0x1d, 0xdd, 0x41, 0x96, 0xeb, 0xdb, 0xe8, 0x47, 0x74, 0xbe, 0xba, 0xd2, 0xf3, - 0xd4, 0xf3, 0x8f, 0x89, 0x90, 0x58, 0xb8, 0x48, 0xd7, 0x60, 0x30, 0xa8, 0x9d, 0xa7, 0xdf, 0xbb, - 0x06, 0x5f, 0x58, 0x53, 0xc9, 0x85, 0xf5, 0x19, 0x28, 0x0e, 0xd2, 0xc4, 0xea, 0x6a, 0x07, 0x00, - 0x4c, 0x45, 0x21, 0x5b, 0xf3, 0x55, 0xd8, 0xf3, 0xd4, 0xd9, 0x00, 0x48, 0x4c, 0x59, 0x0a, 0xc8, - 0x62, 0x40, 0xa8, 0xcd, 0x06, 0x3f, 0x76, 0x0d, 0xf8, 0x7d, 0x06, 0x14, 0xc2, 0x3c, 0x3a, 0xdd, - 0x20, 0xc4, 0x8d, 0xcb, 0x9c, 0xc0, 0x38, 0x16, 0xc7, 0xec, 0x04, 0x71, 0xcc, 0xa5, 0x8f, 0xe3, - 0x06, 0x98, 0x46, 0x86, 0x19, 0xc5, 0x81, 0x4b, 0x65, 0x2a, 0x87, 0x5a, 0x00, 0x80, 0x45, 0xb0, - 0x1c, 0x67, 0x89, 0xe5, 0xf1, 0xb7, 0x94, 0xc0, 0x9a, 0x7d, 0x80, 0xce, 0x1e, 0x81, 0x1f, 0x82, - 0x79, 0x0b, 0x1d, 0xd6, 0xa3, 0x6c, 0xcd, 0x92, 0x55, 0xd6, 0x7b, 0x9e, 0x9a, 0x7f, 0x88, 0x0e, - 0xb9, 0x84, 0xbd, 0x18, 0x10, 0xcb, 0xa3, 0xa1, 0x96, 0xb7, 0x18, 0x88, 0xaf, 0xfc, 0x5c, 0x52, - 0xe5, 0x53, 0xba, 0x38, 0x4e, 0x18, 0x5d, 0x3f, 0x4b, 0xa4, 0xec, 0x83, 0xa6, 0x70, 0xe6, 0x08, - 0x8b, 0x7c, 0xcc, 0x26, 0xf9, 0xa8, 0x90, 0xc2, 0x8c, 0x39, 0xc2, 0xbc, 0xfc, 0x29, 0x0b, 0x64, - 0x56, 0xb5, 0x1f, 0x63, 0xe4, 0x3c, 0x70, 0xec, 0x6e, 0xe7, 0xff, 0x53, 0x59, 0x8f, 0xc0, 0x05, - 0x03, 0x3d, 0xd3, 0xbb, 0x2d, 0xb7, 0xde, 0x41, 0x4e, 0xdb, 0xc4, 0xd8, 0xb4, 0x2d, 0x5c, 0x9c, - 0x5a, 0xc9, 0xde, 0x98, 0xad, 0x96, 0xfa, 0x9e, 0xaa, 0x84, 0x2b, 0x0c, 0x81, 0xa0, 0x26, 0x07, - 0xd2, 0xc7, 0x91, 0x50, 0xbe, 0x0b, 0x16, 0x4c, 0xcb, 0x74, 0x4d, 0xbd, 0x55, 0x6f, 0xa3, 0x76, - 0x03, 0x39, 0xb8, 0x38, 0x4d, 0x16, 0x53, 0xfa, 0x9e, 0xba, 0x4c, 0x17, 0x1b, 0x00, 0x40, 0xad, - 0x10, 0x48, 0x6a, 0x54, 0xc0, 0x37, 0xde, 0x99, 0xe4, 0xc6, 0xfb, 0x09, 0x50, 0x86, 0x43, 0xc8, - 0x5a, 0xef, 0xbb, 0xe0, 0x7c, 0xd3, 0x17, 0x44, 0x8d, 0xb7, 0xd4, 0xf3, 0xd4, 0x19, 0x02, 0x22, - 0xfc, 0x2f, 0xd0, 0x75, 0x43, 0x10, 0xd4, 0x66, 0xc8, 0xe7, 0xae, 0x01, 0xbf, 0xa3, 0x3b, 0x9f, - 0xdf, 0x4c, 0x4e, 0x3d, 0x35, 0x78, 0xb3, 0x32, 0x13, 0x99, 0xf5, 0x37, 0x34, 0xdb, 0xb4, 0x47, - 0x1b, 0x5a, 0x59, 0x31, 0x7e, 0x58, 0x65, 0xbd, 0xa4, 0xe4, 0xf9, 0xad, 0xe5, 0x2c, 0x91, 0xf7, - 0x08, 0x14, 0xfc, 0xd6, 0xc9, 0x95, 0x25, 0xed, 0xb4, 0x1b, 0x3d, 0x4f, 0x9d, 0x7b, 0x88, 0x0e, - 0xf9, 0xca, 0xbc, 0x14, 0xb5, 0x5a, 0xbe, 0x3a, 0xe7, 0xac, 0x08, 0x36, 0x51, 0xb3, 0xa5, 0x74, - 0xc5, 0x18, 0x61, 0x74, 0xbd, 0xc8, 0x90, 0x2c, 0x7e, 0x82, 0x22, 0x2a, 0xf9, 0xb2, 0xfa, 0xe7, - 0x89, 0xbb, 0x0d, 0xf2, 0x7c, 0x87, 0xc8, 0x92, 0xa2, 0xe6, 0x12, 0x2a, 0xd6, 0x19, 0x78, 0xe8, - 0x24, 0x0c, 0xad, 0x02, 0x28, 0x26, 0x21, 0x6a, 0xda, 0x12, 0x69, 0xda, 0xb4, 0xa3, 0x9f, 0xa5, - 0xe4, 0x9a, 0x60, 0x53, 0x7a, 0x83, 0x84, 0x7b, 0xc0, 0x05, 0xe6, 0xe1, 0xef, 0x12, 0xb8, 0x54, - 0xc3, 0xcd, 0x1d, 0xc3, 0xf0, 0xc7, 0x9e, 0xda, 0x67, 0xac, 0xfd, 0x74, 0x31, 0x73, 0x91, 0x6b, - 0x3f, 0xbe, 0x14, 0x6a, 0x64, 0x70, 0x92, 0x98, 0xab, 0xe0, 0xcd, 0x91, 0xae, 0x32, 0x32, 0xfe, - 0x90, 0x08, 0x57, 0x1a, 0x6a, 0x07, 0x95, 0xf3, 0x81, 0x63, 0xb7, 0xff, 0xcb, 0x8c, 0xd0, 0x2a, - 0x10, 0xf8, 0xcb, 0x68, 0xf9, 0x31, 0x43, 0x72, 0x24, 0x28, 0x96, 0xbf, 0xa0, 0x59, 0x9c, 0xce, - 0xe9, 0x25, 0x99, 0x99, 0x81, 0xce, 0x92, 0x3b, 0x49, 0x67, 0x99, 0x4a, 0x97, 0x65, 0xc3, 0x64, - 0x85, 0x74, 0x6e, 0xfd, 0xb6, 0x08, 0xb2, 0x35, 0xdc, 0x94, 0xf7, 0x41, 0x61, 0xe0, 0x99, 0xe7, - 0x7a, 0x79, 0xc4, 0xd3, 0x53, 0x79, 0xe8, 0x11, 0x45, 0x29, 0xa7, 0xc3, 0xb1, 0x93, 0x49, 0x03, - 0xcc, 0xc5, 0x5e, 0x48, 0x56, 0x45, 0xf3, 0x79, 0x94, 0x72, 0x2b, 0x0d, 0x8a, 0xe9, 0xd8, 0x07, - 0x85, 0x81, 0xd7, 0x05, 0xa1, 0x37, 0x71, 0x9c, 0xd8, 0x9b, 0xd1, 0xcf, 0x04, 0x32, 0x02, 0xf3, - 0xf1, 0x27, 0x82, 0xb5, 0x04, 0x3a, 0x28, 0x4c, 0xd9, 0x4c, 0x05, 0x63, 0x6a, 0xea, 0x20, 0xcf, - 0x5f, 0x81, 0xaf, 0x8d, 0x65, 0x23, 0x50, 0xf1, 0x56, 0x0a, 0x10, 0xaf, 0x80, 0xbf, 0x22, 0x0a, - 0x15, 0x70, 0x20, 0xb1, 0x82, 0x11, 0x17, 0x2b, 0x9f, 0xa8, 0xf8, 0xa5, 0x6a, 0x2d, 0x81, 0xe9, - 0x24, 0xa2, 0x46, 0xde, 0x6c, 0xe4, 0xe7, 0x60, 0x61, 0xf0, 0x56, 0xb3, 0x3e, 0x9e, 0x6a, 0x06, - 0x54, 0x2a, 0x29, 0x81, 0xbc, 0x4f, 0xf1, 0x53, 0xf2, 0xda, 0x38, 0xca, 0x23, 0x45, 0x9b, 0xa9, - 0x60, 0xbc, 0x9a, 0xf8, 0x79, 0x72, 0x6d, 0x1c, 0xf1, 0x29, 0xd4, 0x8c, 0x3c, 0x8b, 0xc9, 0x2f, - 0x24, 0x70, 0x59, 0x74, 0x10, 0x13, 0x52, 0x23, 0x98, 0xa0, 0xbc, 0x33, 0xe1, 0x04, 0x3e, 0x80, - 0x83, 0x27, 0x9c, 0xf5, 0xf1, 0x29, 0x90, 0x22, 0x80, 0x82, 0x03, 0x87, 0xec, 0x02, 0x79, 0xc4, - 0x61, 0xe3, 0xa6, 0x68, 0x99, 0x61, 0xac, 0xb2, 0x95, 0x1e, 0x1b, 0x23, 0x5a, 0xb4, 0xad, 0x0b, - 0x5d, 0x10, 0x4c, 0x10, 0x13, 0x9d, 0xb0, 0x91, 0xfa, 0xbe, 0x8f, 0xd8, 0x44, 0x6f, 0x26, 0xc4, - 0x8d, 0x8f, 0xf1, 0x56, 0x7a, 0x2c, 0xd3, 0xfa, 0xb5, 0x04, 0x94, 0x07, 0x8e, 0x6e, 0xb9, 0x4f, - 0x83, 0xff, 0x24, 0x76, 0xba, 0xee, 0xbe, 0xed, 0x98, 0x5f, 0xe8, 0xa4, 0x29, 0x08, 0x97, 0x14, - 0xcf, 0x51, 0xee, 0x4c, 0x3e, 0x87, 0x99, 0xf3, 0x8d, 0x04, 0xae, 0x6a, 0xe8, 0xc0, 0x7e, 0x8e, - 0x46, 0xdb, 0xb3, 0x2d, 0x66, 0x57, 0x38, 0x49, 0x79, 0xef, 0x04, 0x93, 0xf8, 0xad, 0x8b, 0xd8, - 0xbd, 0xd3, 0x6a, 0xd9, 0x87, 0xba, 0x35, 0x6e, 0xeb, 0x8a, 0xe3, 0xc4, 0x5b, 0x57, 0x1c, 0xc7, - 0x57, 0x1a, 0x35, 0x28, 0x52, 0xb5, 0x3e, 0xde, 0xf2, 0x48, 0x57, 0x25, 0x25, 0x30, 0x54, 0x56, - 0xfd, 0xe8, 0x55, 0xaf, 0x24, 0xbd, 0xee, 0x95, 0xa4, 0x5f, 0x7b, 0x25, 0xe9, 0xe5, 0x71, 0xe9, - 0xdc, 0xeb, 0xe3, 0xd2, 0xb9, 0x5f, 0x8e, 0x4b, 0xe7, 0x3e, 0xdd, 0x6a, 0x9a, 0xee, 0x7e, 0xb7, - 0x51, 0xde, 0xb3, 0xdb, 0x15, 0xba, 0xe8, 0x66, 0x4b, 0x6f, 0xe0, 0xe0, 0xbb, 0x72, 0xf0, 0x76, - 0xe5, 0x73, 0xee, 0x9f, 0x2a, 0xf7, 0xa8, 0x83, 0x70, 0x63, 0x9a, 0xfc, 0x3f, 0xb5, 0xfd, 0x67, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x31, 0x72, 0x53, 0xda, 0x3e, 0x1b, 0x00, 0x00, + // 1543 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4d, 0x6f, 0x1b, 0xc5, + 0x1b, 0xcf, 0xda, 0x79, 0x69, 0xc6, 0x89, 0xd3, 0x6c, 0xdf, 0x9c, 0x6d, 0xff, 0xde, 0x68, 0xdb, + 0x34, 0x69, 0xff, 0x8d, 0xad, 0x26, 0x02, 0x4a, 0x11, 0x87, 0xb8, 0x6f, 0x8a, 0x20, 0x6d, 0xb5, + 0x6d, 0x85, 0x84, 0x84, 0xac, 0xb5, 0x77, 0xea, 0xac, 0x62, 0xef, 0x5a, 0x3b, 0x6b, 0x87, 0x70, + 0xa4, 0xe2, 0x82, 0x90, 0xa8, 0xf8, 0x00, 0x70, 0x81, 0x0b, 0x5c, 0x38, 0xf0, 0x05, 0x38, 0xd1, + 0x0b, 0x52, 0xc5, 0x89, 0xd3, 0x82, 0xdc, 0x03, 0x42, 0x48, 0x1c, 0xfc, 0x09, 0xd0, 0xce, 0x8c, + 0x67, 0x67, 0x1d, 0x8f, 0x77, 0x1d, 0x05, 0x08, 0x70, 0xb2, 0x3d, 0xf3, 0x9b, 0xe7, 0xe5, 0xf7, + 0xbc, 0xec, 0xb3, 0x63, 0x90, 0x37, 0x21, 0x6a, 0x38, 0xa8, 0x88, 0x5a, 0x15, 0xd4, 0x34, 0xaa, + 0x10, 0x15, 0xdb, 0xeb, 0xc5, 0x06, 0xaa, 0xa1, 0x42, 0xd3, 0x75, 0x3c, 0x47, 0x3e, 0x41, 0xf6, + 0x0b, 0x6c, 0xbf, 0xd0, 0x5e, 0x57, 0x4e, 0xd6, 0x9c, 0x9a, 0x83, 0xf7, 0x8b, 0xc1, 0x37, 0x02, + 0x55, 0xf2, 0x55, 0x07, 0x8b, 0xaa, 0x18, 0x08, 0x16, 0xdb, 0x57, 0x2b, 0xd0, 0x33, 0xae, 0x16, + 0xab, 0x8e, 0x65, 0xd3, 0xfd, 0x05, 0xb2, 0x5f, 0x26, 0x07, 0xc9, 0x0f, 0xba, 0x75, 0x86, 0x1e, + 0x6d, 0xa0, 0x5a, 0xb1, 0x7d, 0x35, 0xf8, 0xa0, 0x1b, 0xcb, 0x22, 0xf3, 0xca, 0x9e, 0x0b, 0x0d, + 0xd4, 0x72, 0xf7, 0x62, 0x81, 0x8f, 0x21, 0xac, 0xb9, 0x86, 0xed, 0x11, 0xa0, 0xf6, 0x4c, 0x02, + 0xf3, 0x5b, 0xa8, 0x76, 0xc3, 0x85, 0x86, 0x07, 0x1f, 0x50, 0xb4, 0x7c, 0x1e, 0x8c, 0xdb, 0x46, + 0x03, 0xe6, 0xa4, 0x45, 0x69, 0x65, 0xba, 0x34, 0xd7, 0xf5, 0xd5, 0xcc, 0x9e, 0xd1, 0xa8, 0x5f, + 0xd7, 0x82, 0x55, 0x4d, 0xc7, 0x9b, 0xf2, 0x35, 0x90, 0x31, 0x21, 0xaa, 0xba, 0x56, 0xd3, 0xb3, + 0x1c, 0x3b, 0x97, 0xc2, 0xd8, 0xd3, 0x5d, 0x5f, 0x95, 0x09, 0x96, 0xdb, 0xd4, 0x74, 0x1e, 0x2a, + 0x5f, 0x04, 0x13, 0xce, 0xae, 0x0d, 0xdd, 0x5c, 0x1a, 0x9f, 0x39, 0xde, 0xf5, 0xd5, 0x19, 0x72, + 0x06, 0x2f, 0x6b, 0x3a, 0xd9, 0x96, 0xaf, 0x80, 0xa9, 0x6a, 0x60, 0x98, 0xe3, 0xe6, 0xc6, 0x31, + 0x52, 0xee, 0xfa, 0x6a, 0x96, 0x20, 0xe9, 0x86, 0xa6, 0xf7, 0x20, 0x5a, 0x05, 0x2c, 0xec, 0xf3, + 0x44, 0x87, 0xa8, 0xe9, 0xd8, 0x08, 0xca, 0xb7, 0x40, 0xa6, 0xc7, 0x45, 0xd9, 0x32, 0xb1, 0x63, + 0xe3, 0xa5, 0x0b, 0x1d, 0x5f, 0x05, 0x3d, 0xe8, 0xe6, 0xcd, 0xd0, 0x74, 0x0e, 0xaa, 0xe9, 0xa0, + 0xf7, 0x6b, 0xd3, 0xd4, 0x3e, 0x4c, 0x81, 0xb9, 0x2d, 0x54, 0xbb, 0x65, 0x5a, 0x1e, 0x23, 0xeb, + 0x70, 0x44, 0x33, 0xce, 0x53, 0x23, 0x70, 0x9e, 0x3e, 0x00, 0xe7, 0xe3, 0xc3, 0x39, 0xbf, 0x04, + 0x26, 0x91, 0x55, 0x0b, 0x80, 0x13, 0x18, 0x38, 0xdf, 0xf5, 0xd5, 0x59, 0x6a, 0x3a, 0x5e, 0xd7, + 0x74, 0x0a, 0xd0, 0x16, 0xc0, 0x99, 0x3e, 0x2e, 0x7a, 0x74, 0x6b, 0x1f, 0x90, 0xb4, 0xba, 0x09, + 0xeb, 0x90, 0x4b, 0xab, 0x43, 0x62, 0x2a, 0x34, 0x31, 0x15, 0x67, 0xe2, 0x59, 0x9c, 0x13, 0x51, + 0x33, 0x98, 0x91, 0x5f, 0xa4, 0xc0, 0xf1, 0x30, 0x63, 0x60, 0x15, 0xf3, 0xf4, 0xcf, 0x88, 0xe6, + 0xeb, 0x60, 0xba, 0x69, 0xb8, 0xd0, 0xf6, 0x02, 0x1b, 0x83, 0x88, 0xce, 0x96, 0x16, 0x3b, 0xbe, + 0x7a, 0xec, 0x3e, 0x5e, 0xc4, 0x16, 0x1e, 0x27, 0x32, 0x18, 0x4c, 0xd3, 0x8f, 0x91, 0xef, 0x9b, + 0x26, 0x5f, 0x58, 0x13, 0xf1, 0x85, 0xf5, 0x0e, 0xc8, 0xf5, 0xd3, 0xc4, 0xea, 0x6a, 0x03, 0x00, + 0x44, 0x96, 0x7a, 0x6c, 0xcd, 0x96, 0xb4, 0x8e, 0xaf, 0x4e, 0x53, 0x20, 0x36, 0x65, 0x9e, 0x92, + 0xc5, 0x80, 0x9a, 0x3e, 0x4d, 0x7f, 0x6c, 0x9a, 0xda, 0xe7, 0x29, 0x90, 0xed, 0xe5, 0xd1, 0xe1, + 0x06, 0x21, 0x6a, 0x5c, 0xea, 0x00, 0xc6, 0xb1, 0x38, 0xa6, 0x47, 0x88, 0xe3, 0x78, 0xf2, 0x38, + 0x5e, 0x02, 0x93, 0xd0, 0xb4, 0xc2, 0x38, 0x70, 0xa9, 0x4c, 0xd6, 0x35, 0x9d, 0x02, 0xb4, 0x1c, + 0x38, 0x1d, 0x65, 0x89, 0xe5, 0xf1, 0x27, 0x84, 0xc0, 0x2d, 0xa7, 0x0d, 0x8f, 0x1e, 0x81, 0x6f, + 0x80, 0x59, 0x1b, 0xee, 0x96, 0xc3, 0x6c, 0x4d, 0x63, 0x29, 0xcb, 0x1d, 0x5f, 0xcd, 0xdc, 0x85, + 0xbb, 0x5c, 0xc2, 0x9e, 0xa4, 0xc4, 0xf2, 0x68, 0x4d, 0xcf, 0xd8, 0x0c, 0xc4, 0x57, 0xfe, 0x78, + 0x5c, 0xe5, 0x13, 0xba, 0x38, 0x4e, 0x18, 0x5d, 0xdf, 0x49, 0xb8, 0xec, 0x69, 0x53, 0x38, 0x72, + 0x84, 0x85, 0x3e, 0xa6, 0xe3, 0x7c, 0x54, 0x70, 0x61, 0x46, 0x1c, 0x61, 0x5e, 0x7e, 0x9b, 0x06, + 0x32, 0xab, 0xda, 0x47, 0x08, 0xba, 0x77, 0x5c, 0xa7, 0xd5, 0xfc, 0xef, 0x54, 0xd6, 0x3d, 0x70, + 0xc2, 0x84, 0x8f, 0x8d, 0x56, 0xdd, 0x2b, 0x37, 0xa1, 0xdb, 0xb0, 0x10, 0xb2, 0x1c, 0x1b, 0xe5, + 0x26, 0x16, 0xd3, 0x2b, 0xd3, 0xa5, 0x7c, 0xd7, 0x57, 0x95, 0x9e, 0x84, 0x7d, 0x20, 0x4d, 0x97, + 0xe9, 0xea, 0xfd, 0x70, 0x51, 0xbe, 0x01, 0xe6, 0x2c, 0xdb, 0xf2, 0x2c, 0xa3, 0x5e, 0x6e, 0xc0, + 0x46, 0x05, 0xba, 0x28, 0x37, 0x89, 0x85, 0x29, 0x5d, 0x5f, 0x3d, 0x4d, 0x84, 0xf5, 0x01, 0x34, + 0x3d, 0x4b, 0x57, 0xb6, 0xc8, 0x02, 0xdf, 0x78, 0xa7, 0xe2, 0x1b, 0xef, 0x5b, 0x40, 0xd9, 0x1f, + 0x42, 0xd6, 0x7a, 0x5f, 0x05, 0xc7, 0x6a, 0xc1, 0x42, 0xd8, 0x78, 0xf3, 0x1d, 0x5f, 0x9d, 0xc2, + 0x20, 0xcc, 0xff, 0x1c, 0x91, 0xdb, 0x03, 0x69, 0xfa, 0x14, 0xfe, 0xba, 0x69, 0x6a, 0x9f, 0x92, + 0x27, 0x5f, 0xd0, 0x4c, 0x0e, 0x3d, 0x35, 0x78, 0xb3, 0x52, 0x23, 0x99, 0xf5, 0x17, 0x34, 0xdb, + 0xa4, 0xa3, 0x0d, 0xa9, 0xac, 0x08, 0x3f, 0xac, 0xb2, 0x9e, 0x12, 0xf2, 0x82, 0xd6, 0x72, 0x94, + 0xc8, 0xbb, 0x07, 0xb2, 0x41, 0xeb, 0xe4, 0xca, 0x92, 0x74, 0xda, 0x4b, 0x1d, 0x5f, 0x9d, 0xb9, + 0x0b, 0x77, 0xf9, 0xca, 0x3c, 0x15, 0xb6, 0x5a, 0xbe, 0x3a, 0x67, 0xec, 0x10, 0x36, 0x52, 0xb3, + 0x25, 0x74, 0x45, 0x18, 0x61, 0x74, 0x3d, 0x49, 0xe1, 0x2c, 0x7e, 0x00, 0x43, 0x2a, 0xf9, 0xb2, + 0xfa, 0xfb, 0x89, 0xbb, 0x06, 0x32, 0x7c, 0x87, 0x48, 0xe3, 0xa2, 0xe6, 0x12, 0x2a, 0xd2, 0x19, + 0x78, 0xe8, 0x28, 0x0c, 0x5d, 0x00, 0x9a, 0x98, 0x84, 0xb0, 0x69, 0x4b, 0xb8, 0x69, 0x93, 0x8e, + 0x7e, 0x94, 0x92, 0x6b, 0x84, 0x87, 0xd2, 0x39, 0x1c, 0xee, 0x3e, 0x17, 0x98, 0x87, 0xbf, 0x4a, + 0xe0, 0xd4, 0x16, 0xaa, 0x6d, 0x98, 0x66, 0xb0, 0xf7, 0xd0, 0x39, 0x62, 0xed, 0xa7, 0x85, 0x98, + 0x8b, 0x5c, 0xfb, 0x09, 0x56, 0x35, 0x1d, 0x6f, 0x8e, 0x12, 0x73, 0x15, 0xfc, 0x6f, 0xa0, 0xab, + 0x8c, 0x8c, 0xdf, 0x25, 0xcc, 0x95, 0x0e, 0x1b, 0xb4, 0x72, 0x6e, 0xbb, 0x4e, 0xe3, 0xdf, 0xcc, + 0x08, 0xa9, 0x02, 0x81, 0xbf, 0x8c, 0x96, 0xaf, 0x52, 0x38, 0x47, 0x68, 0xb1, 0xfc, 0x09, 0xcd, + 0xe2, 0x70, 0xa6, 0x97, 0x78, 0x66, 0xfa, 0x3a, 0xcb, 0xf8, 0x41, 0x3a, 0xcb, 0x44, 0xb2, 0x2c, + 0xdb, 0x4f, 0x16, 0xa3, 0xf3, 0x7b, 0xd2, 0x80, 0x1f, 0x35, 0x4d, 0xee, 0x62, 0xe4, 0x36, 0x84, + 0x0f, 0x9d, 0x1d, 0x78, 0x78, 0x9c, 0x7e, 0x26, 0x81, 0x53, 0x86, 0x69, 0x5a, 0x01, 0x3f, 0x46, + 0xbd, 0xfc, 0x18, 0xc2, 0xb2, 0x87, 0x15, 0xe4, 0x52, 0x8b, 0xe9, 0x95, 0xcc, 0xda, 0x42, 0x81, + 0x5e, 0x71, 0x55, 0x0c, 0x04, 0x0b, 0xf4, 0x3e, 0xac, 0x70, 0xc3, 0xb1, 0xec, 0xd2, 0xfd, 0x67, + 0xbe, 0x3a, 0xd6, 0xf5, 0xd5, 0x73, 0x44, 0xc5, 0x40, 0x29, 0xda, 0x97, 0x3f, 0xa9, 0x2b, 0x35, + 0xcb, 0xdb, 0x6e, 0x55, 0x0a, 0x55, 0xa7, 0x41, 0xef, 0xcb, 0xe8, 0xc7, 0x2a, 0x32, 0x77, 0x8a, + 0xde, 0x5e, 0x13, 0x22, 0x2c, 0x10, 0xe9, 0x27, 0x42, 0x19, 0xa1, 0xa3, 0x2f, 0x83, 0x69, 0xa3, + 0xe5, 0x6d, 0x3b, 0xae, 0xe5, 0xed, 0xd1, 0xb8, 0xe5, 0x7e, 0xf8, 0x66, 0xf5, 0x24, 0xb5, 0x6b, + 0xc3, 0x34, 0x5d, 0x88, 0xd0, 0x03, 0xcf, 0xb5, 0xec, 0x9a, 0x1e, 0x42, 0xaf, 0x67, 0xdf, 0xff, + 0xe5, 0xeb, 0xcb, 0xe1, 0x6f, 0x9a, 0xc4, 0x02, 0x3a, 0x7b, 0xac, 0xaf, 0xfd, 0x36, 0x0f, 0xd2, + 0x5b, 0xa8, 0x26, 0x6f, 0x83, 0x6c, 0xdf, 0xe5, 0xda, 0xc5, 0xc2, 0x80, 0x4b, 0xc4, 0xc2, 0xbe, + 0xab, 0x2b, 0xa5, 0x90, 0x0c, 0xc7, 0xe6, 0xc1, 0x0a, 0x98, 0x89, 0xdc, 0x4b, 0x5d, 0x10, 0x9d, + 0xe7, 0x51, 0xca, 0x95, 0x24, 0x28, 0xa6, 0x63, 0x1b, 0x64, 0xfb, 0xee, 0x74, 0x84, 0xde, 0x44, + 0x71, 0x62, 0x6f, 0x06, 0x5f, 0xce, 0xc8, 0x10, 0xcc, 0x46, 0x2f, 0x66, 0x96, 0x62, 0xe8, 0x20, + 0x30, 0x65, 0x35, 0x11, 0x8c, 0xa9, 0x29, 0x83, 0x0c, 0x7f, 0xf1, 0x70, 0x7e, 0x28, 0x1b, 0x54, + 0xc5, 0xff, 0x13, 0x80, 0x78, 0x05, 0xfc, 0x8b, 0xb9, 0x50, 0x01, 0x07, 0x12, 0x2b, 0x18, 0xf0, + 0x3a, 0x1b, 0x10, 0x15, 0x7d, 0x95, 0x5d, 0x8a, 0x61, 0x3a, 0x8e, 0xa8, 0x81, 0xef, 0x93, 0xf2, + 0x0e, 0x98, 0xeb, 0x7f, 0x97, 0x5c, 0x1e, 0x4e, 0x35, 0x03, 0x2a, 0xc5, 0x84, 0x40, 0xde, 0xa7, + 0xe8, 0xbb, 0xc9, 0xd2, 0x30, 0xca, 0x43, 0x45, 0xab, 0x89, 0x60, 0xbc, 0x9a, 0xe8, 0x14, 0xbf, + 0x34, 0x8c, 0xf8, 0x04, 0x6a, 0x06, 0x4e, 0xc0, 0xf2, 0x13, 0x09, 0x9c, 0x11, 0x8d, 0xbf, 0x42, + 0x6a, 0x04, 0x07, 0x94, 0x57, 0x46, 0x3c, 0xc0, 0x07, 0xb0, 0x7f, 0xae, 0x5c, 0x1e, 0x9e, 0x02, + 0x09, 0x02, 0x28, 0x18, 0xf3, 0x64, 0x0f, 0xc8, 0x03, 0x46, 0xbc, 0xcb, 0x22, 0x31, 0xfb, 0xb1, + 0xca, 0x5a, 0x72, 0x6c, 0x84, 0x68, 0xd1, 0x30, 0x25, 0x74, 0x41, 0x70, 0x40, 0x4c, 0x74, 0xcc, + 0xf8, 0x12, 0xf8, 0x3e, 0x60, 0x74, 0xb9, 0x1c, 0x13, 0x37, 0x3e, 0xc6, 0x6b, 0xc9, 0xb1, 0x4c, + 0xeb, 0x47, 0x12, 0x50, 0xee, 0xb8, 0x86, 0xed, 0x3d, 0xa4, 0xff, 0x04, 0x6d, 0x90, 0x07, 0xd6, + 0x7b, 0x06, 0x6e, 0x0a, 0x42, 0x91, 0xe2, 0x33, 0xca, 0xf5, 0xd1, 0xcf, 0x30, 0x73, 0x3e, 0x96, + 0xc0, 0x59, 0x1d, 0xb6, 0x9d, 0x1d, 0x38, 0xd8, 0x9e, 0x75, 0x31, 0xbb, 0xc2, 0x43, 0xca, 0x6b, + 0x07, 0x38, 0xc4, 0x3f, 0xba, 0xb0, 0xdd, 0x1b, 0xf5, 0xba, 0xb3, 0x6b, 0xd8, 0xc3, 0x1e, 0x5d, + 0x51, 0x9c, 0xf8, 0xd1, 0x15, 0xc5, 0xf1, 0x95, 0x46, 0x0c, 0x0a, 0x55, 0x2d, 0x0f, 0xb7, 0x3c, + 0xd4, 0x55, 0x4c, 0x08, 0x8c, 0xe4, 0xbc, 0x68, 0xb4, 0x13, 0x0a, 0x13, 0x1c, 0x10, 0xe7, 0x7c, + 0xcc, 0xb4, 0x53, 0x7a, 0xf3, 0x59, 0x27, 0x2f, 0x3d, 0xef, 0xe4, 0xa5, 0x9f, 0x3b, 0x79, 0xe9, + 0xe9, 0x8b, 0xfc, 0xd8, 0xf3, 0x17, 0xf9, 0xb1, 0x1f, 0x5f, 0xe4, 0xc7, 0xde, 0x5e, 0xe3, 0x86, + 0x36, 0x22, 0x7c, 0xb5, 0x6e, 0x54, 0x10, 0xfd, 0x5e, 0x6c, 0xbf, 0x54, 0x7c, 0x97, 0xfb, 0x97, + 0x12, 0x0f, 0x71, 0x95, 0x49, 0xfc, 0xdf, 0xe4, 0xfa, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x13, + 0x96, 0xfb, 0x94, 0x8e, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1934,6 +2059,10 @@ type MsgClient interface { // RevokeAllowance allows a granter to revoke any existing treasury allowance // that has been granted to the grantee RevokeAllowance(ctx context.Context, in *MsgRevokeAllowance, opts ...grpc.CallOption) (*MsgRevokeAllowanceResponse, error) + // UpdateSubspaceFeeTokens allows subspace admins to update the list of fee tokens inside the subspace via a governance proposal + // + // Since: Desmos 6.0.0 + UpdateSubspaceFeeTokens(ctx context.Context, in *MsgUpdateSubspaceFeeTokens, opts ...grpc.CallOption) (*MsgUpdateSubspaceFeeTokensResponse, error) } type msgClient struct { @@ -2115,6 +2244,15 @@ func (c *msgClient) RevokeAllowance(ctx context.Context, in *MsgRevokeAllowance, return out, nil } +func (c *msgClient) UpdateSubspaceFeeTokens(ctx context.Context, in *MsgUpdateSubspaceFeeTokens, opts ...grpc.CallOption) (*MsgUpdateSubspaceFeeTokensResponse, error) { + out := new(MsgUpdateSubspaceFeeTokensResponse) + err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/UpdateSubspaceFeeTokens", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // CreateSubspace allows to create a subspace @@ -2160,6 +2298,10 @@ type MsgServer interface { // RevokeAllowance allows a granter to revoke any existing treasury allowance // that has been granted to the grantee RevokeAllowance(context.Context, *MsgRevokeAllowance) (*MsgRevokeAllowanceResponse, error) + // UpdateSubspaceFeeTokens allows subspace admins to update the list of fee tokens inside the subspace via a governance proposal + // + // Since: Desmos 6.0.0 + UpdateSubspaceFeeTokens(context.Context, *MsgUpdateSubspaceFeeTokens) (*MsgUpdateSubspaceFeeTokensResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -2223,6 +2365,9 @@ func (*UnimplementedMsgServer) GrantAllowance(ctx context.Context, req *MsgGrant func (*UnimplementedMsgServer) RevokeAllowance(ctx context.Context, req *MsgRevokeAllowance) (*MsgRevokeAllowanceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RevokeAllowance not implemented") } +func (*UnimplementedMsgServer) UpdateSubspaceFeeTokens(ctx context.Context, req *MsgUpdateSubspaceFeeTokens) (*MsgUpdateSubspaceFeeTokensResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateSubspaceFeeTokens not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -2570,6 +2715,24 @@ func _Msg_RevokeAllowance_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Msg_UpdateSubspaceFeeTokens_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateSubspaceFeeTokens) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateSubspaceFeeTokens(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/desmos.subspaces.v3.Msg/UpdateSubspaceFeeTokens", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateSubspaceFeeTokens(ctx, req.(*MsgUpdateSubspaceFeeTokens)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "desmos.subspaces.v3.Msg", HandlerType: (*MsgServer)(nil), @@ -2650,6 +2813,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "RevokeAllowance", Handler: _Msg_RevokeAllowance_Handler, }, + { + MethodName: "UpdateSubspaceFeeTokens", + Handler: _Msg_UpdateSubspaceFeeTokens_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "desmos/subspaces/v3/msgs.proto", @@ -3760,6 +3927,78 @@ func (m *MsgSetUserPermissionsResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *MsgUpdateSubspaceFeeTokens) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateSubspaceFeeTokens) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateSubspaceFeeTokens) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintMsgs(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0x1a + } + if len(m.AdditionalFeeTokens) > 0 { + for iNdEx := len(m.AdditionalFeeTokens) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AdditionalFeeTokens[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMsgs(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.SubspaceID != 0 { + i = encodeVarintMsgs(dAtA, i, uint64(m.SubspaceID)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateSubspaceFeeTokensResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateSubspaceFeeTokensResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateSubspaceFeeTokensResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintMsgs(dAtA []byte, offset int, v uint64) int { offset -= sovMsgs(v) base := offset @@ -4286,6 +4525,37 @@ func (m *MsgSetUserPermissionsResponse) Size() (n int) { return n } +func (m *MsgUpdateSubspaceFeeTokens) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SubspaceID != 0 { + n += 1 + sovMsgs(uint64(m.SubspaceID)) + } + if len(m.AdditionalFeeTokens) > 0 { + for _, e := range m.AdditionalFeeTokens { + l = e.Size() + n += 1 + l + sovMsgs(uint64(l)) + } + } + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovMsgs(uint64(l)) + } + return n +} + +func (m *MsgUpdateSubspaceFeeTokensResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovMsgs(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -7533,6 +7803,191 @@ func (m *MsgSetUserPermissionsResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgUpdateSubspaceFeeTokens) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateSubspaceFeeTokens: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateSubspaceFeeTokens: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SubspaceID", wireType) + } + m.SubspaceID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SubspaceID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdditionalFeeTokens", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMsgs + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMsgs + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdditionalFeeTokens = append(m.AdditionalFeeTokens, types.Coin{}) + if err := m.AdditionalFeeTokens[len(m.AdditionalFeeTokens)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMsgs + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMsgs + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipMsgs(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMsgs + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateSubspaceFeeTokensResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateSubspaceFeeTokensResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateSubspaceFeeTokensResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipMsgs(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMsgs + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipMsgs(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/subspaces/types/msgs_feegrant.go b/x/subspaces/types/msgs_feegrant.go index e3203b49df..654dd45159 100644 --- a/x/subspaces/types/msgs_feegrant.go +++ b/x/subspaces/types/msgs_feegrant.go @@ -19,6 +19,9 @@ var ( _ legacytx.LegacyMsg = &MsgGrantAllowance{} _ legacytx.LegacyMsg = &MsgRevokeAllowance{} + _ ManageSubspaceMsg = &MsgGrantAllowance{} + _ ManageSubspaceMsg = &MsgRevokeAllowance{} + _ codectypes.UnpackInterfacesMessage = &MsgGrantAllowance{} _ codectypes.UnpackInterfacesMessage = &MsgRevokeAllowance{} ) @@ -123,6 +126,9 @@ func (msg MsgGrantAllowance) UnpackInterfaces(unpacker codectypes.AnyUnpacker) e return unpacker.UnpackAny(msg.Grantee, &grantee) } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgGrantAllowance) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- // NewMsgRevokeAllowance creates a new MsgRevokeAllowance instance @@ -182,3 +188,6 @@ func (msg MsgRevokeAllowance) UnpackInterfaces(unpacker codectypes.AnyUnpacker) var grantee Grantee return unpacker.UnpackAny(msg.Grantee, &grantee) } + +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgRevokeAllowance) IsManageSubspaceMsg() {} diff --git a/x/subspaces/types/msgs_test.go b/x/subspaces/types/msgs_test.go index 51ba49fe42..af4a36f409 100644 --- a/x/subspaces/types/msgs_test.go +++ b/x/subspaces/types/msgs_test.go @@ -1272,3 +1272,81 @@ func TestMsgSetUserPermissions_GetSigners(t *testing.T) { addr, _ := sdk.AccAddressFromBech32(msgSetUserPermissions.Signer) require.Equal(t, []sdk.AccAddress{addr}, msgSetUserPermissions.GetSigners()) } + +// -------------------------------------------------------------------------------------------------------------------- + +var msgUpdateSubspaceFeeTokens = types.NewMsgUpdateSubspaceFeeTokens( + 1, + sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(10))), + "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", +) + +func TestMsgUpdateSubspaceFeeTokens_Route(t *testing.T) { + require.Equal(t, types.RouterKey, msgUpdateSubspaceFeeTokens.Route()) +} + +func TestMsgUpdateSubspaceFeeTokens_Type(t *testing.T) { + require.Equal(t, types.ActionUpdateSubspaceFeeTokens, msgUpdateSubspaceFeeTokens.Type()) +} + +func TestMsgUpdateSubspaceFeeTokens_ValidateBasic(t *testing.T) { + testCases := []struct { + name string + msg *types.MsgUpdateSubspaceFeeTokens + shouldErr bool + }{ + { + name: "invalid subspace id returns error", + msg: types.NewMsgUpdateSubspaceFeeTokens( + 0, + sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(10))), + "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", + ), + shouldErr: true, + }, + { + name: "invalid additional fee tokens returns error", + msg: types.NewMsgUpdateSubspaceFeeTokens( + 1, + sdk.Coins{{Denom: "minttoken", Amount: sdk.NewInt(-10)}}, + "cosmos1m0czrla04f7rp3zg7d", + ), + shouldErr: true, + }, + { + name: "invalid authority returns error", + msg: types.NewMsgUpdateSubspaceFeeTokens( + 1, + sdk.NewCoins(sdk.NewCoin("minttoken", sdk.NewInt(10))), + "cosmos1m0czrla04f7rp3zg7d", + ), + shouldErr: true, + }, + { + name: "valid message returns no error", + msg: msgUpdateSubspaceFeeTokens, + }, + } + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + err := tc.msg.ValidateBasic() + if tc.shouldErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestMsgUpdateSubspaceFeeTokens_GetSignBytes(t *testing.T) { + expected := `{"type":"desmos/MsgUpdateSubspaceFeeTokens","value":{"additional_fee_tokens":[{"amount":"10","denom":"minttoken"}],"authority":"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5","subspace_id":"1"}}` + require.Equal(t, expected, string(msgUpdateSubspaceFeeTokens.GetSignBytes())) +} + +func TestMsgUpdateSubspaceFeeTokens_GetSigners(t *testing.T) { + addr, _ := sdk.AccAddressFromBech32(msgUpdateSubspaceFeeTokens.Authority) + require.Equal(t, []sdk.AccAddress{addr}, msgUpdateSubspaceFeeTokens.GetSigners()) +} diff --git a/x/subspaces/types/msgs_treasury.go b/x/subspaces/types/msgs_treasury.go index 7e2ba8d1bb..8ecf597bfe 100644 --- a/x/subspaces/types/msgs_treasury.go +++ b/x/subspaces/types/msgs_treasury.go @@ -20,6 +20,9 @@ var ( _ legacytx.LegacyMsg = &MsgGrantTreasuryAuthorization{} _ legacytx.LegacyMsg = &MsgRevokeTreasuryAuthorization{} + _ ManageSubspaceMsg = &MsgGrantTreasuryAuthorization{} + _ ManageSubspaceMsg = &MsgRevokeTreasuryAuthorization{} + _ codectypes.UnpackInterfacesMessage = &MsgGrantTreasuryAuthorization{} ) @@ -77,6 +80,9 @@ func (msg MsgGrantTreasuryAuthorization) UnpackInterfaces(unpacker codectypes.An return msg.Grant.UnpackInterfaces(unpacker) } +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgGrantTreasuryAuthorization) IsManageSubspaceMsg() {} + // -------------------------------------------------------------------------------------------------------------------- func NewMsgRevokeTreasuryAuthorization(subspaceID uint64, granter string, grantee string, msgTypeUrl string) *MsgRevokeTreasuryAuthorization { @@ -127,3 +133,6 @@ func (msg MsgRevokeTreasuryAuthorization) GetSigners() []sdk.AccAddress { addr, _ := sdk.AccAddressFromBech32(msg.Granter) return []sdk.AccAddress{addr} } + +// IsManageSubspaceMsg implements subspacestypes.ManageSubspaceMsg +func (msg MsgRevokeTreasuryAuthorization) IsManageSubspaceMsg() {} diff --git a/x/subspaces/wasm/common_test.go b/x/subspaces/wasm/common_test.go index 6fee90113b..01559dca12 100644 --- a/x/subspaces/wasm/common_test.go +++ b/x/subspaces/wasm/common_test.go @@ -191,7 +191,7 @@ func (suite *TestSuite) SetupTest() { "cosmos", authtypes.NewModuleAddress("gov").String(), ) - suite.k = keeper.NewKeeper(suite.cdc, suite.storeKey, suite.ak, nil) + suite.k = keeper.NewKeeper(suite.cdc, suite.storeKey, suite.ak, nil, "authority") } func TestKeeperTestSuite(t *testing.T) { diff --git a/x/subspaces/wasm/querier_test.go b/x/subspaces/wasm/querier_test.go index e67c9c6f51..68aff8b298 100644 --- a/x/subspaces/wasm/querier_test.go +++ b/x/subspaces/wasm/querier_test.go @@ -46,6 +46,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, shouldErr: false, @@ -60,6 +61,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, Pagination: &query.PageResponse{NextKey: nil, Total: 1}, @@ -78,6 +80,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, shouldErr: false, @@ -91,6 +94,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, ), }, ), @@ -110,6 +114,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -150,6 +155,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -187,6 +193,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveUserGroup(ctx, types.NewUserGroup( @@ -221,6 +228,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) }, shouldErr: false, @@ -249,6 +257,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveGrant(ctx, types.NewGrant( 1, @@ -288,6 +297,7 @@ func (suite *TestSuite) TestSubspacesWasmQuerier_QueryCustom() { "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", "cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5", time.Date(2020, 1, 1, 12, 00, 00, 000, time.UTC), + nil, )) suite.k.SaveGrant(ctx, types.NewGrant( 1,