From 3b2e9036d178831e9be9aa90403c4aad42793cb6 Mon Sep 17 00:00:00 2001 From: yusufgungor Date: Wed, 9 Dec 2020 20:32:34 +0300 Subject: [PATCH] Preserve nodePort support with --preserve-nodeports flag (#3095) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * -> Preserve nodePort support when restoring via "--preserve-nodeports" flag Signed-off-by: Yusuf Güngör * -> Added changelog. Signed-off-by: Yusuf Güngör * -> Unit test added. -> Using boolptr.IsSetToTrue for bool ptr check. Signed-off-by: Yusuf Güngör * -> Unit test added. -> Using boolptr.IsSetToTrue for bool ptr check. Signed-off-by: Yusuf Güngör * -> Other restore errors log level changed from info to error. -> Documentation updated about Velero nodePort restore logic and preservation of them. Signed-off-by: Yusuf Güngör Co-authored-by: Yusuf Güngör --- changelogs/unreleased/3095-yusufgungor | 1 + config/crd/bases/velero.io_restores.yaml | 5 ++ config/crd/crds/crds.go | 2 +- design/CLI/PoC/base/CRDs.yaml | 4 ++ pkg/apis/velero/v1/restore.go | 5 ++ pkg/apis/velero/v1/zz_generated.deepcopy.go | 5 ++ pkg/builder/restore_builder.go | 6 +++ pkg/cmd/cli/restore/create.go | 8 +++ pkg/cmd/util/output/restore_describer.go | 4 ++ pkg/restore/restore.go | 2 +- pkg/restore/service_action.go | 10 +++- pkg/restore/service_action_test.go | 52 +++++++++++++++++++- site/content/docs/main/debugging-restores.md | 2 + site/content/docs/main/restore-reference.md | 50 +++++++++++++++++++ site/content/docs/v1.5/debugging-restores.md | 2 + site/content/docs/v1.5/restore-reference.md | 50 +++++++++++++++++++ 16 files changed, 203 insertions(+), 5 deletions(-) create mode 100644 changelogs/unreleased/3095-yusufgungor diff --git a/changelogs/unreleased/3095-yusufgungor b/changelogs/unreleased/3095-yusufgungor new file mode 100644 index 000000000..92f45d45d --- /dev/null +++ b/changelogs/unreleased/3095-yusufgungor @@ -0,0 +1 @@ +Added "--preserve-nodeports" flag to preserve original nodePorts when restoring. diff --git a/config/crd/bases/velero.io_restores.yaml b/config/crd/bases/velero.io_restores.yaml index 12f1b6f42..e0018bcf0 100644 --- a/config/crd/bases/velero.io_restores.yaml +++ b/config/crd/bases/velero.io_restores.yaml @@ -1574,6 +1574,11 @@ spec: target namespace names to restore into. Any source namespaces not included in the map will be restored into namespaces of the same name. type: object + preserveNodePorts: + description: PreserveNodePorts specifies whether to restore old nodePorts + from backup. + nullable: true + type: boolean restorePVs: description: RestorePVs specifies whether to restore all included PVs from snapshot (via the cloudprovider). diff --git a/config/crd/crds/crds.go b/config/crd/crds/crds.go index 0e7671451..252162795 100644 --- a/config/crd/crds/crds.go +++ b/config/crd/crds/crds.go @@ -36,7 +36,7 @@ var rawCRDs = [][]byte{ []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4YKs#\xb7\x11\xbe\xf3Wt\xad\x0f\x8a\xabġ\xbdN\xa5R\xbc\xedJٔ\x12[\xab\x12e]\xb6\xf6\x00\x0e\x9aC\x843\x00\x82Ɛ˸\xfc\xdfS\r`\xc8y\x91\xa2\xec\xac3\x17\x89x\xf4\v\xfd\xf8ИL\xa7Ӊ\xb0\xea\x19\x1d)\xa3\xe7 \xac\xc2/\x1e5\xff\xa2l\xf3Wʔ\x99m\xbf_\xa2\x17\xdfO6J\xcb9\xdc\xd4\xe4M\xf5\x88dj\x97\xe3-\xae\x94V^\x19=\xa9\xd0\v)\xbc\x98O\x00\x84\xd6\xc6\v\x1e&\xfe\t\x90\x1b\xed\x9d)Kt\xd3\x02u\xb6\xa9\x97\xb8\xacU)\xd1\x05\x0e\r\xff\xedw\xd9\x0f\xd9w\x13\x80\xdca\xd8\xfe\xa4*$/*;\a]\x97\xe5\x04@\x8b\n\xe7`\x8dܚ\xb2\xaep)\xf2Mm)\xdbb\x89\xced\xcaL\xc8b\x1ed\x902\b&\xca\a\xa7\xb4Gw\xc3\x1b\xa2@S\xf8\xc7\xe2\xe3\xfd\x83\xf0\xeb9d䅯)\xb3kA\x18\x84\x95H\xb9S\xd6\a\x91\x1e\x8c\x84\xe7\xc0\n\xde\a^\x10\xd7\x03\xd5\xf9\x1a\x04\xc1=\xeefw\xfa\xc1\x99\xc2!Q \x10e\\\x84ua\xc0\xef-\u0381\xbcS\xba8\xc1\x9e\xbcp\xfe\xa0\xeeP\x0e\x9e\x82\xdd\x1a5\xf8\xb5\"\x88z\xc3N\x10\x84\x9d([\x9co\xd8zi$\xb2\x96\xc2〱\xc5<\xb3Ff\xbc\x89\xac\xc8G\xb4\xbfo\xa6\xc0\xac\xc0\xaf\x91\r\x1f\x0eS(\xadt\x11\x86\xe2A\x807\xb0\xc4 \x17J\xa8mK\x9c\xfb\x0e\xfd\xb3\xb6h\x8b4.\xcd\xef\x11\xe4\xc1\xc8\xcbD\x88\x94\xce\v\xf0\"\xb7\xe7#\x91\x17\x19:\xb4\xe6N\xa2\xf6j\xa5\xd0\r\x19?\"y\x95\x03/#\xe5\x8dۃ:\xac\x86\x95qm\xa7h\x89\x90\xb6=\xa25\x97\xc9\x11),\xbcq\xa2\xc0\x1fM\x1e\x82\xf0\xbc\x1dRT\xa4=\xd0lb_u\xd8qVZ\x9b\xba\x94l.\xf2\xc6u<\xb6\xbf\xfbEi\x9bl\x93\r2E\x8b\xea\xbb\x02\x871P8S\xdb9\x1c\x13F\\\x9d\x12ULr\x0fF\xc6\xd3{\u007f\xb4h\xa9\xc8\xffsl\xf6GE>\xac\xb0e\xedD9LNa\x92\x94.\xeaR\xb8\xc1\xf4\x04\xc0:$t[\xfcYo\xb4\xd9\xe9\x0f\nKIsX\x892d$ʍm\x87\x11\x1b\x8e\xea\xa5K9\x98\xe6\xf0˯\x13\x80\xad(\x95\f\xb6\x88\xaa\x18\x8b\xfa\xdd\xc3\xdd\xf3\x0f\x8b|\x8d\x95\x88\x83\xcc\xccXt^5\x1a\xf3ת\x01\x87\xb1ޑ_1\xa9\xb8\x06$g}\xa4\x18\x06q\f%P`\x13\xddB\x11\xfb*\xab\xa5\xfd\xf1@\x9bϬ@h0\xcb\u007fa\xee3X\xb0\xea\x8e\x1a\xf7ȍޢ\xf3\xe007\x85V\xff9P&\x8e5fY\n\x8f\xc9\xe4\xcd\x17\x12\xbc\x16%\x1b\xa1\xc6k\x10ZB%\xf6\xe0\x90y@\xad[\xd4\xc2\x12\xca\xe0'\xe3\x10\x94^\x999\xac\xbd\xb74\x9f\xcd\n囪\x97\x9b\xaa\xaa\xb5\xf2\xfbY\xa8]jY{\xe3h&q\x8b\xe5\x8cT1\x15._+\x8f\xb9\xaf\x1d΄U\xd3 \xb8\x0eE/\xab\xe47\x87\xe3\xb9jI\xdas\xe9\xf8\x05\x9f;iw\xf69P\x04\"m\x8b\xf2\x1f\xcd\xdbd\xbfǿ-\x9e\xa0a\x1a\x8e\xa0k\xf3`\xed\xe36:\x1a\x9e\r\xa5\xf4\nS\x16Y9S\x05\x8a\xa8\xa55J\xfb\xf0#/\x15\xea\xaeѩ^V\xca\xf3I\xff\xbbF\xf2|>\x19܄\xda\xcfA^[\x8e8\x99\xc1\x9d\x86\x1bQay#\b\xbf\xba\xd9\xd9\xc24e\x93\xbel\xf86d\xe9.\x8c\xd6:\f7\x98b\xf4\x84z\xe9`a1\xe7\xf3b\xa3\xf1>\xb5R)#r\x9e\x16\xfd\xe5Y\x8b\xecXh\xf27\x9a\x95\xbbKz2\xbd\x1f\xdb\xd1H\xa5[ٻI\xcdqe\x8f$@\xd9\xcf\xe6\xecx\x83RD)\xa1g\xbd\xfd\xa3F\xe7O\x1b\x89g\xe5\xbf7\x12\xc7\xc4\xe5\x8d\xe0\xd7\"\xfa$c3\xce4\xb5\x0e\x18\xc0\xe8\x8b\x05\xb0F\x9e\xe5\x9f(\vp\xb8B\x87:\xc7&\xf9\x9c\xc3\x1d\x03\xf3\xb5\x91A_\xb6S\x87\r'\xf3\xf1\xa8\xa4\xef\x1e\xee\x9a\x1c\xdc\x18)\xc9\xec\xfb\x1c\xcfZ\x84\xbf\x15\x17\x9eP`_\xe2zu\xb7\x8alBF\xf2\x06\x04X\x85\x11&\x1eR;(M\x1e\x85\x8c\x83#$\x018p\x1d\xa6\xf5\xd71\xff\xa44w,\alk\x10\xb1\xbe\x05\f0\xfb\xbb\x89\xb2\x8e\xd2\x14y\x8e\x14`\xb1\xc7\n\xb5\xbf>@u\x89\xa4\x1cJ\x06\xe6\x98UB\xab\x15\x92\xcf\x12\at\xf4\xe9\xed\xe71\x9b\x01|0\x0e\xf0\x8b\xa8l\x89נ\xa2\x95\x0f\t\xb5q\x10E\xd1\x10\az\xb0S~\xad\xc6\x15\x17\xecHI\xe1]Pԋ\r\x82I\x8a\xd6\b\xa5\xda\xe0\x1c\xde\x04Xv\x14\xf1\x17\x8e\x86_ߌ\xd2\xfcS\f\xd27\xbc\xe4M\x14\xecP3\xdbAt\x140F\x92SE\x81\r\x1e\xeb\u007f\xa1\x10p\x82\xfd\x16\x8ccݵi\x11\bd\xf9\xccb\xa2C9\x10\xf8\xd3\xdb\xcf'\xa4\xed\xda\t\x94\x96\xf8\x05ނJ7\x1ck\xe4\xb7\x19<\x05\x8f\xd8k/\xbe0\x9f|m\b5\x18]\xeeǥ5\xb0\x16[\x042|[²\x9cF\xac\"a'\xf6\xac\u007fs\\\xeca\x02\xacp\xbe\x8bFF\xa9>}\xbc\xfd8\x8fR\xb1\v\x15!\x93r\x95[)\xc6\x1c\f6b\xe5d\x9f\f樣sx\x03\xf9Z\xe8\x91\xc4\n\x01\xb4\x04\xeb\xaej\xaee\xd9\xd5k\xa3\xb5\x0f\x1b\x9ao\x04>\xf4\x13\xc3\xff\xa9\b_\xa4V\x80\xee/\xaaվ\x81\x9cUkS/\xd1i\xf4\x184\x93&'V*G\xebif\xb6\xe8\xb6\nw\xb3\x9dq\x1b\xa5\x8b);\xe24z\x02\xcd\u00ad`\xf6M\xf8\xf3\x9b\xb4\b`\xfd2U:w쯩\x0f\xf3\xa1٫\xd5ip\xe5\xa5U\xe9j\x91\x90O\u007f'\x87\xc4n\xad\xf2usI8f\xcf\xd1\x18\xa9\x84\x8c)W\xe8\xfdWw[6d\xedX\x9e\xfd4u\xac\xa6BK\xfe\x9f\x14y\x1e\u007f\xb5\xe5juA\x90\xfe|w\xfb\xc78s\xad^\x1d\x91\xa3\x808\xfaD\xbbgq\x16N=v\x966\xc0n\x04I\x1e\xd6\\\x8c\xe4\xbc(\x06\x00\xaa\xdd\xfa;\r\xb2\xce\xe8\xdc\xed\xbc\x89\x82@8\x04\x01\x95\xb0|N\x1b\xdcOc\x91\xb6Bq\x8d\xe52z\xecn\bkK5RNS)Np1!o\xbe֊\x82\xc6\xf5\x1d\xb1z\xdc}\xd6ک]9\x02\x9f\x13\xeb\x88K\x0e\x10\xba\xdd\xc2\x1a\xfa\xef\x00\xb8\x9e\xb0\x1b\xdf\x02\x19]\xb5E\x9b\x8e_]:+\x18\xd2w\x06\xac\x91\x9d\xdf#\xbd\xb1f\xaaէ;c\xb6\xd8a\xbd\xf8\xfe\x16ۻ\xc9z1\x1f\xf8\xa6\xe9\xcbX\xe1\xb7\xdc\xe0r\xc3ر\xdb\xd1>w\x847\xc3\xf5\xa1!\xe2d\x14˫\x8a\xfd\xb1\xd5\x05N\x1c\x86\x970h\x11\x8b\xfbB\xdeeZ(\x03\xb4cԹ\x12\xaaD\tM;\xbd\xbfg@\xb3Mc\x89+NU\xb5-\x8d\x90ͥ(\x89\xd64y\x9e\xf86\x1c\xfa\rWt\x92bM(\xc3-yD\xfd~yX\x19W\t\x1f\xbbz\xd3\x11\x82\xba.K\xb1,q\x0e\xde\xd5\xfdɓ\xa1_!\x91(·\xd7OqM\xbc\x1f\xa6\r \x96\xa6\xf6\x87\vb'į(y\xcf\xe5\xb7ӑ+X\xd7e\x05\x03fJ\xf0\xb1,ÎvX\x1f\xdf[\x82O \xf5Z\x9f\x1b9x\xf0\xbf\x01\x00\x00\xff\xff-\xbc\x85&\xc9\x1f\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_\x8f\x1b\xb7\x11\u007fק\x18\\\x1e\xae\x01\xacU\xec\x14E\xa17\xe7\\\x17\xd7&g\xe1t\xf1\x8b\xe1\aj9Ҳ\xda%\xb7\xe4\xacd5\xc8w/\x86\xe4\xfe_ɺC\x9d\xee\x8b-r8\xf3\x9b\xe1\xfc\xe3\xdcl>\x9f\xcfD\xa9>\xa2u\xca\xe8%\x88R\xe1\x17BͿ\\\xb2\xff\xabK\x94Y\x1c^o\x90\xc4\xeb\xd9^i\xb9\x84\xbbʑ)\x1eљʦ\xf8\x0e\xb7J+RF\xcf\n$!\x05\x89\xe5\f@hmH\xf0\xb2\xe3\x9f\x00\xa9\xd1dM\x9e\xa3\x9d\xefP'\xfbj\x83\x9bJ\xe5\x12\xad\x97P\xcb?\xfc\x90\xfc\x98\xfc0\x03H-\xfa\xe3O\xaa@G\xa2(\x97\xa0\xab<\x9f\x01hQ\xe0\x12J#\x0f&\xaf\n\xb4\xe8\xc8Xt\xc9\x01s\xb4&Qf\xe6JL=\b)=2\x91\xaf\xac҄\xf6\x8eO\x04Ds\xf8\xc7\xfa\xc3\xc3JP\xb6\x84đ\xa0\xca%e&\x1cz\xb4\x12]jUI\x1e\xd3c\x90\x00\x81\n\\\x95f \x1c\xdc\xeb\x955;\x8b\xce-\xeeLQ\xe6H(\xfd\xe1\x00p\xed\xa9\xfd\x02\x9dJ\\\x82#\xab\xf4n$\xba\xc44)\x8dL\xf8\x94+E:\x01\xe0\xa1\xde\x02\xb3eŽ1\x85\xd2J\xef\x802\x84`\b \x03\x1b\x84h\x8f.\x94\x87\x1e\xeb\xab\xd1L\x03y!\x86\x95\x91\xd7I\x0f\x8c\xce\xcbn\x05E)\x1d!\x1f۳\x17\xe5\xc4\xeb\x8eחlN\x84\xee\x9d\xd1SR\xabb\x83\x96\xe5z\xa2)\xcd~\xf2\x1b\xcd\xf1\xe7\b&C\"\xf7\xe7ǒ\x9fx\x0f\xf4@\xfeY\xfb\x06\xf2\x96\xd7\x150\x1c\tKM|M P\x05\xc21C\xed/8\xca\x04S\xa2\xf5\x91\tG\xe1\xc0\xf3\x18\xfa}\xb3\x12@HAx\x06B\x1a\x02\xa7\x1b\xe7/ÑND`?*\xcfc\xa9\xf3V2\xca9\x1dfow8f\xb3\xb3\xa6*\x97\xd0f\x9e@\x1dS^H\x97+#\x83[>v\xdc5W\x8e\xfe9\xb9\xfd\xb3r\xe4Iʼ\xb2\"\x9fHt~\xd7)\xbd\xabra\xc7\xfb3\x80ҢC{\xc0_\xf5^\x9b\xa3~\xaf0\x97n\t[\x91\xfb\xf4\xe6RSv\xb3\x02\xdb\xc7U\x1b\x1b3\xba[\xc2o\xbf\xcf\x00\x0e\"W\xd2\xdb#\xa8cJ\xd4oW\xf7\x1f\u007f\\\xa7\x19\x16\",\xb20\xbe\tR\xb5\xd6\xfcu*J\xb36\xb8\xd4[f\x15h@r\ra\xe7\xe6<\x12\xd6P\x82\xf3b\xd8\xf5)S\x1cy^-\x1d\xaaJ\x87-0\x89\xd0`6\xff\u0094\x12X\xb3\xeaց\xcbL\x95\xfb}x\xf7a\x19P\xb1\v\xed|\x1e\xe3*\xb3U\\\xf3\xb9؇\xca\xc5>\xe9\xcdQ\x05\xe7 \x03i&\xf4DZ\x03\xdf4x\xebn+\xae%\xc9\xeds\xa3uX\xb6\xebo\xa2|\x0f\x13\xc3\xff\xa9\b^\xa5\x96o\x9f\xbf\xaa\xd6Cǟ/\xaa\xb5\xaf6h5\x12zͤI\x1d+\x95bIna\x0eh\x0f\n\x8f\x8b\xa3\xb1{\xa5wsv\xc4y\xf0\x04\xb7\xf0\x9d\xf9\xe2;\xffϋ\xb4\xf0\xcd\xf2u\xaa4\xaf\xf5o\xad\x0f\xcbq\x8bg\xabS\xf7u\xd7V\xa5\xdbul<\x86'9$\x8e\x99J\xb3\xbaIo\xb3\xe7d\x8c\x14B\x86\x94+\xf4電-\x1b\xb2\xb2\x8c\xe74\x8f\xf3\xa7\xb9В\xff\xef\x94#^\u007f\xb6\xe5*uE\x90\xfez\xff\xee\x8fq\xe6J=;\"'\x1b\xd2\xe0\x13\xa5\xb9\x97l\xbe\xadB{\xb1\x9bz\xec\x91\xd6]\xe0D\x1f\xd7\xd0\\\xdd\xc89-J\x97\x19\xba\u007fw\x11\xc1\xba!\xab\xa5\xb7&\x8f\xed[\xcdi03\xb9\x1aI`s\x11E軧\xba\xe0\x88!t\f~\x85;\xd0\x17!\xe1\xe7\x10\xb79]$\xf3\xe9\x0e\xbeGQ\x1a\xd9\xfbݿ\xdf\xdeVk\xf4\xderg\x14\xd7E8|\xcc\xf8Q\xce\xf5ϙ0E\x8d6\v\xf1I\xf5l\x95k\xf7\x8b\x1e4\x13\x83\xa4\x8b7w7\xa6\xf7\x13\x02+\x03.R\x05\xfa\xd7B\x186\xf5FL㦢\xe5\x16\x0e\xfaL\xc8\xccP\xfaf\x8b\xfb\xc0\xadP9Jh\xc6\xd5\xf0\xc4\xef9\xffd\xbe\x1d\xe7ʚM\xe5P\xfaw\xde\x04\xe0ᩭ\xb1\x85\xa00\x9c\x9a3\x83\xc1\xbe\xae\xf2\\lr\\\x02\xd9j\xb8y6\f\ntN\xec.\xc7\xc1/\x81&\xbc\xb0\xe2\x01\x10\x1bSQ\xf3Ċ\x01\x11տu\xf1Ư\u007f\xe0e\xc2]\x06\xb1b\x8a)\xbfj\x82\xf2\x92c\x81\u007f\xbdT\xc5P\xc4\x1c\x1e\xf08Zkg\xff\xa3\xad\xfeԱ\xbb\xf3\xde{\xc0\xd5\nG\x01\x97u\x8eD\x90\x99\xbc\xf6\xdcɹq\xb4@\x1d\xe8\xe3\x17\xaa\xefy[\xbb\xb5\xe7\xebl\x15\x18\xc5\x0e>\x15ڏd\xd8;ɀT\xae\xccŸ\x85\xafu\xf0e\x8f\x9d\x93#\xa4\xf5\x8b\xd1(\xf79o\xeafh?U\x8e\xebPP\x9a\xfe\xf2\xe7\xb3\xf5Qi\xc2]/\x15\xc6\xddf,\xff\xbf\xe6}\xb6\xf8\xf6g\xf1\x97K_\x8f\xf4kY+\x0e\xe8\xc79\xab\x9b~\xc6\xe9\xa6/\xe4\x8f\xc84\x13\xa6\x19,\xb5\u007f$|\xdd\xfe\x8a\u007f\xcc\vCz\xbf\x01A-\xd9\x11\x1e\x87Qq\xa5-X\"\xe5^\v\xe5\xc3ph\u007fsӛ\xc1\xfb\x9f\xa9\xd1\xe1ωn\t\x9f>\xcf \x8e\xa8>\xd68x\xf1\xbf\x01\x00\x00\xff\xff\a\x89\x1b\xd1P\x1d\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WM\x8f\xe36\x0f\xbe\xe7W\x10\xfb\x1e\xf6\xf2\xc6\xd9\xc5^\n\xdf\xdai\x17\xd8vf:\x98l\xe7R\xf4@\xcbt\xa2\x8e,\xb9\"\x95iZ\xf4\xbf\x17\x92\xec\xc4q\x9c\xec`\x81\xfa&\x8a\x12\x1f>\xfc\x10\xbdX.\x97\v\xec\xf4\x13y\xd6Ζ\x80\x9d\xa6?\x85l\\q\xf1\xfc\r\x17ڭv\xef+\x12|\xbfxֶ.\xe1&\xb0\xb8\xf6\x91\xd8\x05\xaf\xe8{j\xb4բ\x9d]\xb4$X\xa3`\xb9\x00@k\x9d`\x14s\\\x02(g\xc5;c\xc8/7d\x8b\xe7PQ\x15\xb4\xa9\xc9'\v\x83\xfdݻ\xe2C\xf1n\x01\xa0<\xa5\xe3\x9fuK,\xd8v%\xd8`\xcc\x02\xc0bK%xb\xd1\xcaS\xe7X\x8b\xf3\x9a\xb8ؑ!\xef\n\xed\x16ܑJ(\xea:AC\xf3\xe0\xb5\x15\xf27΄6CZ\u008f\xeb\x9f\xef\x1fP\xb6%\x14,(\x81\x8bn\x8bL\tnM\xac\xbc\xee$\x81zL\xb6\xe0q0\xb6\x87\xac\x0f\x1c\xd4\x16\x90\xe1\x9e^V\x8f\x84\xf5>\x9d\xcd\x00\xd7I%\td\xdfQ\t,^\xdb\xcd\x05\xcb\x06Y\xee0b\xb4h\x15E\xaf\xcfq\xdc\"\v\x88n\tڣ*\xbc \x83\x0fvd:\xe9\x8dn\x1b\x81\xa8Q\xe2r\xe3]\xe8J82\x96\x8f\xf6\xb1\xcaq\xce^\x1f\x9dN[F\xb3\xfc4\xbb}\xabY\x92Jg\x82G3\x17\xa1\xb4\xcd\xdan\x82A\u007f\xa6\x10\rt\x9e\x98\xfc\x8e~\xb1\xcfֽ؏\x9aL\xcd%4hR\\X\xb9\xe8\xc4}\x84ڡ\xa2:\xcaB\xe5\xfb\\\xe4\x12\xfe\xfeg\x01\xb0C\xa3\xeb\x94=\xd9\x1fב\xfd\xf6\xe1\xd3Ӈ\xb5\xdaR\x8bY\x18\x8d\xb9\x8e\xbc\xe8\xc1\xed\xf8\x8dj\xe1 \x9bD\xe1m\xbc*\xeb@\x1d\xb3\x9f\x18dK\xd0\xe70\xd5\xc0\xc9\f\xb8\x06d\xab\x19<%\xb7l\xae\x87ѵ\x10UЂ\xab~'%\x05\xac\xa3랁\xb7.\x98:\x96̎\xbc\x80'\xe56V\xffu\xb8\x99A\\2iP\xa8g}\xf8R\x9a[4\x91\x84@\xff\a\xb45\xb4\xb8\aO\xd1\x06\x04;\xba-\xa9p\x01w\xce\x13h۸\x12\xb6\"\x1d\x97\xab\xd5F\xcbP\xfdʵm\xb0Z\xf6\xabTú\n\xe2<\xafjڑY\xb1\xde,ѫ\xad\x16R\x12<\xad\xb0\xd3\xcb\x04ܦ\xe2/\xda\xfa\u007f\x87\xf0\xbc\x1d!\x9d\xd4D\xfeR\xe2]\xe4=\xe6\x1dh\x06\xec\x8fe\xfcGz\xa3(\xb2\xf2\xf8\xc3\xfa3\fFS\bN9Ol\x1f\x8f\xf1\x91\xf8H\x94\xb6\r\xf9\x1c\xb8ƻ6\xddH\xb6\ue736\x92\x16\xcah\xb2\xa7\xa4s\xa8Z-1\xd2\u007f\x04b\x89\xf1)\xe0&\xf5@\xa8\bB\x17ˮ.\xe0\x93\x85\x1bl\xc9\xdc \xd3\u007fN{d\x98\x97\x91\xd2/\x13?nݧ\x8a\x99\xad\x83x謳\x11\x9a\xb6\x84uG*\x06,\xb2\x16\x0f\xeaF\xabT\x03\xd08\x0fx\xa6_\x8c.\x9e+\xce\xf8U\xa8\x9eC\xb7\x16\xe7qC\xb7N\x8d\xca\xfc\x02\xaa\xef\xe6N\f\xb0b\xd7˅J\U000ca4db\x01d\x8b2\xaaPAm\x0fe>\xe3\xc7E\xca\x13\xed\xc7\x1e\xfd1\xe5\x8eU\xfb\xab\xbe\xdc\xcd\x1c\x88\xael\xdd\v\xb8FȞ\xbc\f=ʊΜ\xf0\xc1\xbe\x1adnӟ\xea\x98Z\x8d&\u007f\x15\xe0\xe3Dy\xe0\xb9\t\xc6\xf47-\x95k;\x14]\x19\x1a\n\xb9q\xfe\f\xa2\xcew\xecsU\u007f\x1d\xbf\xbb\xf8\xdc\xd3Ṹ\x8a\xfc\xe9Tw\x9c YЃH\xa3\x80?}\x15\xc7_\x9f\x13\f\x9d\xab{\x00}\xd2r\xf4\xf3\x95\xd8cp\xb5\xa7\x93n\xb8\x9cO\xfe\x13\x8d\xb9\x8c:Q\x98F\xf3ds\xc2\xd7\x17\x9bA\x9a]^\xdf\x0e\xf2\xd0\xd4\x13\xab\x82\xf7de\x18\xa5\xe2K\xf8U\rafr\xba\x1a\xe7\xdbs\xfd\x01\x92\xb96_M\x03\xd78ߢ\xe4\x89j)üv\xfcⴊ\x95\xa1\x12ć\xe9\xe6\xe5\x8e@̸\xb9\xee\xc1]\xd6\xc9Oa\u007f\x00\xb0rA.\x10\x9b\x1e\xc5+\xd4^E\x94f\xe2\xabx\x1e\xa2\xc6\\X\xe9\xb5\xc6Ɇvjb\x19\xa7\xea3\xd9q\xca>\xd1t2\xb7q\xc1\xa7\x99\\\x9e\x88\x8e\xbf#\uf3eb\xfe\xaf!\x8f\xd8i\x03 \r\xab\xf5(Ĝk\xb3\x97\x1c\v\x04\x95\xa2N\xa8\xbe\x9fN\xd9oޜ\f\xcdi\xa9\x9c\xcd\xff-\\¯\xbf-\xf2\xadT?\r8\xa2\xf0\xdf\x00\x00\x00\xff\xff\"c\x04\x9d\xba\r\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\xbd}s㸑8\xfc\xff~\n\xd4$U\xb6/\x96<\x93ܥ\ue9aej˙\xf1n\xfcd\xc7\xe3\x1a;\xb3Oj\xb3\xb7\x05\x91-\tg\x12`\x00P\xb6\xee\xf6\xbe\xfb\xaf\xd0\x00\xf8\"Q\x12\x01\xda\x1e\uf1b8\xaa\xcbZC6\x81F\xa3\u07fbA\v\xf6\x19\xa4b\x82\xbf%\xb4`𠁛\xbf\xd4\xf4\xee\xdfՔ\x89\xb3՛\x19h\xfa\xe6\xab;\xc6ӷ\xe4]\xa9\xb4\xc8?\x81\x12\xa5L\xe0=\xcc\x19g\x9a\t\xfeU\x0e\x9a\xa6Tӷ_\x11B9\x17\x9a\x9a\x9f\x95\xf9\x93\x90Dp-E\x96\x81\x9c,\x80O\xef\xca\x19\xccJ\x96\xa5 \xf1\v\xfe\xfb\xab\xd7\xd3?L_\u007fEH\"\x01_\xbfe9(M\xf3\xe2-\xe1e\x96}E\b\xa79\xbc%\x12\x94\x16\x12\xd4t\x05\x19H1e\xe2+U@\x82\xdfNS\x9c\x10ͮ%\xe3\x1a\xe4;\x91\x95\xb9\x9dȄ\xfc\u007f7\x1f\xaf\xae\xa9^\xbe%S\xf3\xc2tF\x93\xbb\xb2\xb8\xa29\xe05f\x961\xa5\xff\xd2\xfc\xf5;\xa64\xfeK\x91\x95\x92f\xf5\xa1\xc6\x1f\x15\xe3\x8b2\xa3\xf2mcy\x85\x04\x05r\x05\u007f\xe5w\\\xdc\xf3o\x18d\xa9zK\xe64\xc3\x03\xa5\x12a\xe6g\x8e\xad*h\x82T\xa0ʙt\xbcJ\xbd%\xff\xfb\u007f_\x11\xb2\xa2\x19Kq\xadv\xaa\xa2\x00~~}\xf9\xf9\x0f7\xc9\x12rj\u007f\xdcq8\x99\"\x94|\xc6%\x13\x0f\x97\xe8%\xd5D\x02Ύk\x85{B\x8b\"c\x89\xa5V1w I\xf5\x8eB\x16RêY\f%\x9a\xca\x05h\xf2\x97r\x06\x92\x83\x06E\x92\xacT\x1a\xe4ԁ)\xa49\t\x9ay\\\x9b\xd1\xe0\xe2\xd5o\x1bk82\x8b\xb4ϐ\xd4\xf0m\xb0Su\xdc\x17R\xa2\x10\x01\x86\xe8\xf4\x92\xa9zI\xb8\x8c\x06X\x82tɉ\x98\xfd7$zJn̦HE\xd4R\x94Yj\x98\xfd\n\xa4AI\"\x16\x9c\xfdO\x05Y\x99\x05\x9aOfT\x83\xdb|?\x90Us\x9a\x99\xed)\xe1\x94P\x9e\x92\x9c\xae\x89\x04\xf3\rR\xf2\x064|DM\xc9\a\xdc\x12>\x17o\xc9R\xebB\xbd=;[0\xed\xe5V\"\xf2\xbc\xe4L\xaf\xcfP\xfa\xb0Y\xa9\x85Tg)\xac ;Sl1\xa12Y2\r\x89.%\x9cтMp\xe2\x1c\xc5\xd64O\u007fSm\xd6Qc\xa6\x1b\\\xd6\x0e\xa4\xf6\x9dx7To)Ǿf\xe7_\xa3ן\xe3O\x177\xb7M\xaab\xaa\x8ds\xc4v\x83\xd0j\xc4\x1bD1>\ai7\x0ei\xcb@\x04\x9e\x16\x82q\x8d\u007f$\x19\x03\xdeF\xba*g9\xd3f\xa7\xffQ\x822\xa4+\xa6\xe4\x1dJo2\x03R\x16欧Sr\xc9\xc9;\x9aC\xf6\x8e*xr\xb4\x1b\f\xab\x89A\xe9a\xc47\x95\x8e\xf6\x83\x16[\xd5\xcf^;\xe8\xdc!w\xbao\nHZ'ü\xc4\xe6\xfe\x18υl\x1d~\xf3ʴ\x01\xb2\xebX\x9aQ\xab\x18\xed\xdf7&\xf1\xa7\xea1C+\xe6\xf3%g\xff(\x01\xb9\xaa=\x93\xb0\xcd.\x9a\xbc\xbf9\f\tL7~\xedĠ\x19\xf0\x90de\ni\xc59\xd5ޙ^l=\x8e\xfa\x1de\xdcи\xe1\xf3f\xba\xbc\xfeWd\x90\xb4c\x96\x86\xce\x18\xb7\xd0\bkI\xfb\xcd\xc93\r\xf9ִ\xf6\xac\x89\xa0\xc2Hg\x19\xbc%Z\x96\x9b߶\xefQ)\xe9\xba\x13\x15\x9f*\xa1\xd1\a\x13\xd5\xd3\xee\x98g,\xc1-\xab\x0e3\"㗄\x87\xa5\x10w\xfb\xd7\xfeg\xf3D͍H\x82\x86\x01\x99\xc1\x92\xae\x98јp\xb5N$̀\xc0\x03$\xa5W\xcdZP\xad&#$)\x84һֽ\xebt\x91\xa6T\xdd\xfe\xa7\x9d\b\xdbZ\x8fc\x02~+\xcd\xf2Z\fAp0s\xcc\r\U000eb7d5\xa2\xb4Ϫ\xce/\x90]X 3\xaa %\xc2\xedu\x99\x81r_J\x91\xd1ԧ\xe7t\a\xe0j\xd1VVft\x06\x19Q\x90A\xa2\x85\xdc\xc4\xdea\x1c\xdaq\x98\x13\xec\xc0^\aOp\xdc\xd3\xf1\xd2&;\x10;a\x12r\xbfd\xc9Ҋ1C\x83\b\x85\xa4\x02\x14\x1e\x12\xa3V\xad\xbb\x17G\xf6\xef\xb5\x1d{\x8eI=\xf6\x1e\x98MX\xdbG\xa7\x1e\a\x99I=\x0e\xb0\x956.k-\xf2\x9f\x06\x95\x9e;\x06\x13\xe6\xe5\u058b\x8fI\x98\xa8\xe6\x1bU\xf4rN /\xf4\xfa\x940\xed\u007fEu\x1e\x9d\x16;\xd1S}\xfb\x17\xb7\x11\xa14}\xb9\xf9\xde#\xd2\xf4\xc0]\xa8>\xfd\x8b\xd9\x04d\xf67\x8e\xd7\xf7܀\xef\x9a\xef\x9c\x126\xaf6 =%s\x96i\x90\x1b;\xb1o\xb9b\xffN\fE\xc1aIeFNu\xb2\xbcx0\x1a\x88\xaa}\x8d\xbd\xb0\xb1\xf9\xaaUܼ\xee\xda\x16\xa6{\xa1\x124\x9e\x98\x84ܚd\xb7\x88\xc1\xfa\x17\xa3\xef\x91\xf3\xab\xf7\x90\xeeF\n\xe9Ca[K8ߘf\xf3\xb3N\x0f\xed\xb7\x00\xa7\xa4T:\xbc5\xafO\t%w\xb0\xb6څ1\xf6\xd1\xfb&$>|\x10\xa2\x04\xb4\xf1\x91\xa0\xee`\x8d@\x9c\xd9~\xe0\xdd~[o\xc7\x1d\xac\x0f?\xb4\x8163\x1bg`Y\xfc\x99\x1f\x10\x01h\xf2\xf5E\x19A\xa7\x8b\xe70\x87\x16E\xfa\xb2\b?<\xb6\x83\x97WmS\xc3!\x85\x1by\xa4\xec\xa6\x18j_\xb2\xa2\xd7\x02\xd1\x1f\xa5\x00τw\xba|\xa6\x19K\xab\xcfX\xfa\xbe\xe4\xa7\xe4J\xe8K\xbeKYm\x8f\x8b\a\xa6̴xJ\xde\vPWB\xe3/\x8f\x8eD;\xe5`\x14\xda\xd7\xf0\bqˆ\xcd\xfa\x9b\xbe\x9b\x83Dlǥ5ګ-a\x8a\\rcDX\\Y\xef\x9b\xfd\xd8>n\xdf\x1ey\xa9\xd09\xc3\x05\x9f\xa0\xb0\x9bv}ǡ\xb8'!7wa{Z\xd5'\xed\xe7zA\xbc5r\xc1\xbem=\x89\x19Mj\xaf5z¨\x86\x05KH\x0er\xb1[\x104Gaxv\x9f\xcf\xf7\xe2\xa5v\x04\xd1S\x1f\xd1\xec\x87c\xc6\xe9\xa1iL\xcc\xd9<\xf8\x8c\xdf\xda\x03\x0fv\xba\xbev?xh\x1d($Qo8\x80\xcdf̭/\xf7\xee\x8d\xf9m\xb9m\xa7de\\N\vs:\xff\u05c8*$\xda\xff#\x05e\xf2\xe0\t=\xc7\bC\x06\xad7\x9d\xeb\xa5\xf9\x11\x03\x9f)bvsE\xb3M\ajDz\x84\xe1\x1a\x90Y1,\xe6[\x9a\xc6)\xb9_\ne\xa5\xe2\x9cA\x96\x12\xb6O\xd32\xe3\xd5\x1d\xac_\x9dn\x9d\xf1W\x97\xfc\x95\x15\xcf['\xd6\xcb\xf2\x03\x80\x05\xcf\xd6\xe4\x15\xbe\xf9*^u\xe9Eu=\x1e\xe2\x1d.\xd2zl\x87fYm\xc0U1\v\xa3\x8a\xee\x9em\x0f\x9a+\x84\xd2\u007f\xeer~\xed\x98ɵ\u007f\xbe\xadAvx\x93\x0eX6\xce3T\xb1H\xa3u\xcd5H\xe7\x10\xb3l\xd3\xeb\xe6\x03,\x95CN\xaf\xca\xe1E\xab\xc0\xabA\xea^\n\xb0\xae\xf1Ó\xeb\xaf\xdd\x19l\x04i\xc3\x17\x0f\r_\x9d9\x81\xe6\xef\xe6\x02\x1eS\xefLD\x9eS~\x90\xb7oM\xf2\x9d}\xcfS\xae\x03c\xf7Z.J\f\x80'\xd3>\f\xf0J\x14\x85\xbb7.[\xaf\x1b\xa1\xe0\x95V\x9cuE!\xbd5\x91\x19\x18\x03\x10R\xeb.*De\xe6\xdbԒ\xcepn\xe7\xba\xfa+\x13\x1b\x8ePg\xca5\x93\xae\x1a\x84\xde\xc7_i\xc7Z\x94\xe4\x9er\xedI\xbbR\xab\nы\xb6\xc3\xf6\xd1\x0e*\x17\xbd\x9f\xdd\xca\xe8\xf2J\xa3O\xac\x02\xae\xe5\x1aS~\xfaM\xd7\x0ec\xf8\xa5\"\xb93*BN\x17pt\xa4Ȼ\x0fセ`\xd8\u007fo\xeen\a\xb31\xc6B\x8a\x15K\x8d*\xf3\x99JFg\x9910\xe7 \x81'\xa0\xc8o\x8f?\x9f\u007f\xfa\xe9\xea\xfc\xc3\xc5I\x00hc\x94\xc2CA\xb9\xa1\xb8Ryi\\\xed\xb7\x99<\xf0\x15\x93\x82\x1bԄ\xe0\xe1rN(Y\xf9\x99&U\x1e\x941l\xb2\x15\xa4\xa7.>\xe2V\x10\x82\x0f\xcb&\x19/J\xed=\x89\xf7,\xcb0ˊ'K\xca\x17\x06K\xb7\xcb\x10\xa0\r\xfc\x11\xb5\xe6\x9a>\x989\xa3\n\xa9\x12Z@\x8a\xf4Kh\x00\xc8T\x94f\xe9\xbf\xfd\xed)a\xf0\x96\xfc\xb6\xf1\x89)\xb9pP\xeb-\f\x80\x8c\xab\xe5\xb0\x02iu\\\xbb\x81\xa7D\u0082\xca4\x03\xa5\f\a\xba_\x82^B?\xa7\xa5\x1d\xd6\xf5\xe1\xb6\f\xbc\xd7\xd3P_W&[\x00\xe0\x8e,\xb7\xbb*%s\xca\xc4Y*\x12u\xa6\xa9\xbaSg\x8c\x1b\x912I\xa9\xa6\x93\x06\x13:\xb3\x12a\xe2\xa4\xd3\xc4\xdbx\x93\x8aX\xcf~#K\xce\x19_Lh\xf5\x14\xe3\x13:QKȲ\xa3\xde\xd3\r`\x9d\x0ema\xd6X\xf3\xa5\xfe\xae\xea Cَ6\u007f\xbb\xa8ؙ\xfd\xea\x94\\\t\xbd;\x93h\xf7\xa8\x189\xe2u\xda\xc9\xf1.\xaen?\xfd\xed\xfa\xe3\xe5\xd5m\x18\xa3k\xb2\xc8\u074c/\x00f7\x8b\xec`|\x81\xc7d'\x8bl3\xbe\x00\xa8\aY\xa4c|A\x9c\xf2 \x8b\x8c\x14\x1c\xfbXd\x83\xf1\x85̵\a\x8b\xc45\x04\xc0\x1cY\xe4?\x19\x8b\x04\xbe\x8ad\x8f\xdf9\xb5\xbdq\x94\xab}\x0e\x11\xcdZ`\x8c\x97\xf16\x97\x18D\x1c\xc1\xd8n;\x85\xf8\xea3m\x87\xb0ys\x99\x01pIM\xfa>S\x15\x05Ae\x01\x85\x10|\xb8vo\xc7\xfe\xc8F\xf7\xe8,E\xb3:~\x1c\x1eH\x03\x17S\xf2\xc1\xc5t)y\xf7\xd3\xe5\xfb\x8b\xab\xdb\xcbo./>\x85 \x83Ğ\x11\xe2C\xf3\x83Pr\xf4x&\x85\x1d;\f\x8bB\u008a\x89\xb2J\xcf\r\x86\xdby<\xb7N[\xf8t1p\xb0&\n\xe4\x8a%\xd0\xfd\x99\xd0\xfd\xeca\x03\x05C\xecR\bZb>\x18⣪\x05v\xf4P\x0e\x82a>\x81\x15e\xc7a[*\x18d\xadX\xecP\x17\x82!\xa2z\xf1\x1e\xe6\xb4̬\u007f\xe2իi\u007fim\xc70\xf6\xf2\x8d\x14\xbd\x1c\xc8\xcd\xd1b17\xb6x\xc3\xfbN\x1f\x83\xf1\x1e\xb9\xf4\xba\x96p\xb5\x06D\x04̬\x04oq\x04\xe4\xe6\xd4#V\x9e\x11\x1bF\x9b\xb3\xc5\aZ\xfc\x05֟`\x1e\x0e`\x13٘y\xe7\x92հ\xc00\x02\"1r\xddN+\x9c\xf5\r\xc3\a韏\xd85\xda\xf5\xcf.k\x1253\x83\x96\x98Ő!\aȏ\x18\xcdŏ\xb6\xb8n\xaa0\x8e\xf7E/\xab\xaf\xe9\x91\b\x9e@\xa1ՙX\x19)\t\xf7g\xf7B\xde\x19[\xc2p\xf6\x89\x8d\x04\xa83L\xc3?\xfb\r\xfeO\xf4\x8cn?\xbe\xff\xf8\x96\x9c\xa7)\x11\xc8FK\x05\xf32\xb3)>\x11r؏\xba\xb0\xf7\x14\xcbLOI\xc9үC\x19\xa9\x1f\x83\xe9A\x146\xcf\xebQh\xe2\x06\xa3\x93\xeb\b\x93\xb6=\fIU\xe7ޘ\xb6L+<\x14B\xa1\xfbҷ\x9f\x88\x06\xdc\xd2W\u07bc\x8a\x84SP\xadA\xf2\xb7俎\xff\xfe\xbb\x9f''_\x1f\x1f\xff\xf0z\xf2\x1f?\xfe\xee\xf8\xefS\xfc\x8f\u007f9\xf9\xfa\xe4g\xff\xc7\xefNN\x8e\x8f\u007f\xf8ˇoo\xaf/~d'?\xff\xc0\xcb\xfc\xce\xfe\xf5\xf3\xf1\x0fp\xf1cO ''_\xff6r\xc2\x0f\x93\xdaS1a\\O\x84\x9cح?P\x14\xbdo\xf8\xedx\x1c\xbe\xf3\xc9\xeb\x14\xc3D)i\xea\\_\x88A\fS\x8f\x06,\u007f\x90v\xa4 \x91\xa0_\x96g\xd5ΩQ\xe9p\xa4\xea\x06\x16\xbf\x02g\xebP\x13Ϣ\xa7\xb61\xb0\x05\x17\xc1@\xeb\x10\x1f\x14\xb5\r\v=\xfc;\b\xf6\xf2\xfb1:\x83Ggps\xfcz\x9d\xc17\xf6\xac\x8c\x9e\xe0/\xe3\t\x8e|5f\x95\x13dJ!\xc9N1s\x8b\xca\xea\n\v?wfv\xd5-\x91H!\x8a2\xa3:6\n\xbd;\xf1d\xea\x05`L\x86K\x9dWkC\xe5\xf9ଢ\xf3,#\x8c[\x91\x87\x93\xf2\xc9\x1e\x12\xacmO\xa8\"A\x87\bV\xc0u\xddM\xbaU\x0e\x89ͬ\x19_L\xc9\xf7\xcb 7\xacե\\v\x04\xe3$/3͊\fHՔ\xaf\xaa\xc9\x0f\x81\xaa\x94H\x18\xf6w\xc6\xd4\x13ۤFi\x8f^ą\xa6w!0\v\t\t\xa4\xc0\x13\xc0\xde-e\xa3\xd1\xe0lM('\x17|\x85_\vZ}Z\xda\x14N\xab:U\xf3j}\xcdf8\x04\x80\xfd\"\x89\x86昺D\x8fv\x0f\xe7 \xa6\xe76\xc8(\u05feaN\x15\x91\fQ#b\x95\xe2*\x1b#\xc2`\xd8҆\xebXj\xa5͆\xc7\x02}\x8b\xfc\xfec\x88A\x10\xab\x9a>\x95Z\xfa\xb2T\xd2'PG\x1fO\x15\x1d\xa4\x86\x0eQA\xf7\xa9\x9fѦ`}v\xbc,\x8cW\x1d\x87\xa8\x8d\xd1\xea[!a\xce\x1e\x06\xf1\x90s^\xed\va)p\xcd\xe6,B\xa37Z\x8f\x84\x028V\x96\x02M\x96\xb6y\x1bo'|\x84\xd3\xef\x17\xce}\xb6\x96\xfcc0\xea\x9b.\x9f\xc3\xc8uG\xae{x\xfc\xba\xb8\xae;\b\xbfH\x96\xfbL\x16)\xd69\xc6\x16b\xbeo\xd4J\xe2\xa9o\xde\x02\x11\xb0\xd6>\xa7\xb2n@p\x86\xdf\v9|\xd8v\xd0wU\xab\x85\x90m\x01,\xeeɒ-\f\x99e\xb0\x82\x90\xb0\xa7ծIN9]\xd8\xc6nZ\xf8\xf0\x15\x11\x92\x18F\"Y\x1aT:Y\x9b\xa1\xb8H#\xd6\f\x1b\xca\x04M\x1b\xd7e\x85,>cw@\xdeC\x91\x89\xb5\xeb\xdf\xc6S\xbc ʰ\x9d\x1b\xd0!\tY\x11\xec\x01\xd7q]fٵ\xc8X\x12\xe0\x9bo\x93\xda%\xd2XQf\x19)\x10Д|\xe4(\x1fγ{\xba\x0e\x8a7^\xc1\n\xe4)\xb9\x9c_\t}mM\xbbvM\x82\x05\x19\x00\x91\xcd\xc9[{{\r\xd1t\x81.\x84\xba\x8b\xb2\x90\xadO\x05\x80E\x01q\xcf\x14t^\xbf\xf2|G\xed7\xf8M#\n\xed\xdfOJ0\x19\x9bC\xb2N\xb2X\xaet\x9e`\x8adݼ\xb7q>\xd5Zi\bQ\x85\\\xb3\x1ctb0l\x82V\b\xae\xc06\x8b\xf2G\xb5\x9aq\xa8\xfbI\r*\xa6\x8cS\xd1\n\xa14^\xcd\x16&\xa5ۧ\xf1\xda\x031\xa4\x9e\xd0,\x83\x94\xb0<\x87\x94Q\rY\xa8_\xd9\xf7\xa4k\xf9\xe0\xf0\xe61\xd7\xee,\\\xfe/)O3\x90\u0601\xcby\xddZ\xd05Ȝq\x1a\xd6.\x80T\xe9J\xee\xb6;B\x93D\xc8\xd4u=\xf2}m\xa8\f\xf5\x8bT\x1c\r\xb5\x9d\x06\xbdnf\x9d\x05\u009de\"\xb9S\xa4\xe4\x9aeu\xa33\xdf\xe5\xcc]\x95\x15\b\xb3\xbf\x1e\xdd`#\xd5\u007fN\xaa\xb32\xc1\xbbd\xce~S\xff\x13\xfe\x10\xa6\xb4\xc6[)}:In\x8f\x8dnj\x80䀉\x80\x82C|\xa8x.\x8c\x1abȨ\xee\xf7W\t\x90)6Ë\x80ھI\x81\"[Ď@\xf4\xaeW\xe3\xa5\xf6\x18\x16\x97\x0f\xee\xf8\xd1\x1c=\x9aeFF\xe02ơ\xd95\x93a/\xbf\xf6\x99\x8b\xcdd2@\x9c\x05IR&\xb1\u007f\xfc\xdaW\rF\xc2\xf4m!\xb1{\xb6\x10\x9a\x1c\x1f\x9d\x1d\x9d\x84\xb7\xd3h\xc3\xf4\xfd?\x8c\x8e\x9c\x81\x95\x91\xa1]\x87\xbafi\xd4 \x96\x17\xd9\x1a\xf1{\x94\x9e\x12\x16\x1bmu匲\xe4~\x8f\\ӖS\xa2\xfau\xac\xdb\x1eZRߟ\xda\xc22\xa0\xb5,\xad\xfe\x10\t\xf4\xf8\xe8\xe7\xa3S\x02:9!\xf7\x82\x1fi$\x81)\xb9\x15\xc6Ώ\x84Y-u-J\xc2\xc1\xb6T\x83\x87\"c\t\xd3\xc1\xd2\xd6\x0f#\xb6\x89(\xb5m\x12\x86\xd7Qa\x13\x9c\x8b\x87\xe8]r\x97Ԋ9y\x8d\xe7ӊpB\x15\xc9\xd8\nΖ@3\xbd\x8c\x9d\xaf\xa1(.\xf8\xe4\u007f@\nl\xb0\xc3\x1d\xbc8\x9fIp\x84\xa89\x06\xe7H\x84\x1b\xea\x9b\xefF\x85\xe0\x8d\xd8\xfe\x16\x02U?\xb2u\xc7\xdb\xed\xed\xf5\xb7\xa0\xdb\x02&\x02\rf6>\xf7\x1bݺ \xe7Bn]Pxx\f\x93MK\xa1\"0B\xb6o\xbeS\xdav\x1d\xb7\xc6\x01\x8f\x89\x8f١E\xbbl\xc7e֑\xcb\xeb\xd8$\xa1\xbf\x89\xd2`iFgٺ\xeae\xa8@\x93WfڱI\xb6\x8c\xe3\x1e\xfe\x19h\x8a=#\xb9\xd2@\x83z\x05\xd5c\xe0\x91j\xcc\xe31\x94\f{k\xe1\xd2-\xacgS\xd4\xed\xd1h\xa0\xe3\xe8|\x8a\xa7\xc7\xfa\x9dbe\x8c\x84\xc22V7\xbf/\xc0\x00\xb7\xf8\x81Ž\xfb}6 G\x8e\xfa+#\xed\xe2\\'\xd1R\r\xa8\xc6b\xdc\"\xdd\x1c\x80\xe8\x99\r\xcdK%\x033%IW\xa4\xc7\xe2h\x00DW\x95\x17\x9a.\xb59\x1e\xa1R!\xb2\xf9Os<\x1dzB3v6\xc7#\xe0gH\xb2\x1f\x89I\x89k\xbf<\x04\x03\x83r\xde\xc9@m\tKA\"KN\xb7\vN\xb5 4I\xb0\xe7^ly\xae\x11\x06Ȏ\xf0\xd2\xfa\xa0Fc\r \xc3\b\xaa\x10\xa1\xfe??\x06\x14F=FY\xd4#\x14EutP\x93\x84\x97\xf9\fdlC\x01\xdfR@\xea\x16\x81ldTF\x82\xbe\xb2S\xf3AL\xafNP\xde\xf3~\xac\xed\xf1\xc6\xcc\xf2\x8f\xff\xf6o\u007f\xf8\xb7\xa9E@\x95\x9f\x19Kӗ\xe7W\xe7?\xdd|~\x87ݬ\xe2\x16\xfa\x04\xf5OX^\x1f)Q\xda\xf1h\x04d\xb0V*l\xfc\x14\xefj1V\x81\xf3\x17[\x87\xacjĞ\xa2\xcd\x05d(_\x80\x93\xc4\v\xa5\t\x1e\x97\xe7\xb4}uR܈\xe4n\xb0\xf5{t\xfb\xee\xda\x02\xaa\r\xe0\b\xccS\xee]\xb2\x8c\xafD\xb6\xb279ݾ\xbbF\xc4\xc4\xec\xa5y\x17}\xe8\xe8*[\x9b\xf9\xf9\xcag\x9bt\x12\x01\x93养\xb3\x8c\x12\t4cJ\xb3\x04\xbf\x14\x13\xf4\xf2\xc3\xcc2<;\xe5EX\xf9G\x1f}\x92Km\xf0\xc7\x1f[\xc7\x10\xba\f\xfeX3ź\t\xe2\x8a\u007fF\xad⑴\n\xa7MH\u007f\vݨUČ\x97\xa8U\xfcr$^䋅\x84\x1b-\x8aA\xd9\x01\x16ģ\xe4\x06\xf8\xfb\x85v\x85\xefI\x1a\xbc\x89\xf6.\xce\xf3\xeb\xcb\xca\xf7,ZAwL\xcd\b\x84\xa9\xcad\xe9\xe3\x1c\x1c\x94:\xc34\x80\xb2\xb0>'\u007f\x11Xh(\xb1\x90\x80\xb7*\t~Z՜#\"\x80\xdb\x1fA'\xa1\xe7\x02\xfd\".;\xc2E\xd5\xfc&\rK6H$UK\xc0\x1e\xf2\xf0\xc0\xeaKϩ\x12܆=ݦ\xb1`ә)RP\xa5l\xe0K\xd7\v\xb0\x9f\xb8\x16\xe9\xd1Q\xa8\n֘\fYH\x9a\x00)@2\x91\x12샖\x8a{Nf\xb08|W\xea\xe6p\xf4j&鏁\xd1v\x00\xa3\xa1\xd5\x1d~\x81@?\xb5Z\xfd\xbb\xe6\x1d\x89\xa8\xf3\xa3\x1d>B髝\x16\x83\xe5ZH\xfc%Ͳu}\xc8\x02\xa1\xba\xea?]m\xcd6\xb2C\xcf\x01nͳ\xe7\xc7\x18R\xc6\u007f\x8b@\xebN\xfa\xc2{\xafi\xb2\f\xa7\x82\xc04\xf61\xfd\xa6\xef\x18\xd3o\xf6\x8e1\xfdƏ1\xfdfL\xbf\x19\xd3o\xc6\xf4\x9b1\xfd\xa65^\x84cnL\xbf\x19\xd3o6ǘ~\x13<\xc6\xf4\x9b\xddcL\xbf\xd9;\xc6\xf4\x9b=cL\xbf\t\x1fc\xfa\xcd\xd6\xf8\xb5\x05\xca\xc6\xf4\x9b_k\xa0lL\xbf\xe9\xf7\xf2\x98~sp\x8c\xe97c\xfa͘~\xd3\xe3ۣV1\xa6\xdf\xfc\xba\xb5\x8a_\x8e\xc4\x1bп)\xe8%\x9fqr-\xc5,\xba\x91\xd35ƦY\xe2\xd2U\xc4<*\xa4\xee\xa72\xad\xafQo\xf4\xe9\xf5=3\x82\xae\xb4\xb5Wm\xfb\x14\x9a\xce~)\xa1M,\xfaG\xd0}\xe3%uV\b\xfb\xff\xea\xf8y#pn\xfdZ\xfdY~\x9c \r\x8f\x98\xf7\x89\x96ױ\xefЄ\xa7]\x91\xf2h\xadlh\x94<^?\x89\x8e\x8e?Md\xfc\xa9\xa2\xe2{#\xe2\xcd\xd8v\x04\xec\xadh\xf8\xae\xb8v\x8cbݘ\xdd#Ŵ\xf7Ƴ\x9b\x91\xe9\x18\xb3w+\x96\xbd\x15\x95\x8e\x80ڌcwF\xa4#`\xd61\xec]\xd1\xe8\b\xa0\x17\x0fL?]$\xfa\x11\xa3\xd0\xd1\x01\x98A\xcaj\xac/5R\x0fq\x89\xa7\xb7K\tj)\xb2@\x1e\xd7\xe2o\x1f\x18gy\x99\x9b\x83\xad\fcb\xab*\xaf5\x94cx\x9ec%\xbb\r1\x19\xb0,\x05\xbc\x8e\x8e\xb2,\xbc1\x176\x11[R\xb4\xe4U\x99$\x00\xa9\x91I\x8d\xbe~\x81\x10\xff0\xad\xd6\\ݩ\xff&\x8c\xce\xec%ih\x1d\xfd\xe1\xf7\x11\xfb\x1dnUE\xa5\x18\x1cN/@\xb8\x81\xf8\x1b\x9aZ\x10/\xd0\xe3\x9c\rO\x91N\xb0'\x95\x80\xfcM\x941V\xfe\xee4\x82\x8d\x84\x80\x18\xb9\x18\x9bB0\x80'\x0eJ\x1d؟6`p\x13\x85\x85\x9d)\x03U\xf0?\xc6\x05\x16\x9b.\x10-\xa9\x9e&M`w\x8a\x00aq\xbe\x86a\xe9\x01CS\x03\x1e\xed\xfe\xb2:\xe6=\xf0F\xea!^͡\x9e\xb4Ai\x00O\x83\x8e\xe1\xc1\xef/tOd\xe4>Ƈ\xfb\a\x85\xfa\xe3\xc3\xfcq!\xfe\xfd\xe1\xfdH'\xfc\xa0\xd0\xfe\x00b\x89s\xbeG:އ:\xdd\a:\xdc\xf7\x87\xf0#7\xee\t\x1c\xed{\x9c\xec\xe8.\x8f\x00\xd9\xed`\x1f\xea*\u007fd7yl\xe0}\u007fн\x11>\x8fR\x84;\x02\xee\xf1\xa1\xf3h\xfa\x8dc\xe8\x11\xc1\x83HV\xcc8ӌf\xef!\xa3\xeb\x1bH\x04O\x03\xb5\x9a\x8dKT\xaaS\xa9,0k'G\xb8f\xeb:\xc1%u7\xe4A\xea\xcb\x1d\xbd\xe7?\x94i\xa2ʇ\xd7\xf5\xdbuo\xf4\xb5\xff\x92^z\xf2E\xccw[$8|\xe3\xff,\ue258k\xe0\xe4\x98q\xbf\xf7'\xe1<\xcf\x19\ued77\xa6:\xbc\xe6\xec\xbey\xedA\a\xd72\xfe\xe2\x1c+\xe8RR\xea\xa9\x1b\xbdW\xeaD\xa0\x80\xf5RE(y\u007fu\xf3\xd3w\xe7\u007f\xba\xf8nJ.h\xb2l\xb6z\xe2\x84\x06\x8a5\xe45K\xba\x02BI\xc9\xd9?J{3!9\xae\xber\xf2Lw\x90GH\x0e\xc3Y\x02\x0ezkS\xbec\n\x1b\xe2 \fע@(\b\xbd\xfc\xb5-Kȅ\x01b\xf5C\x94;K\x90@\x16l\x15d\xa8\x18\x986\xff\x87дj\xfa`\x0e\xaa9%LpBg\xa2\fb\x8dK \x1c\xb49\xc1\x95_Jp\xd5\xea\x13V*\b\xba\x16pV\xe2uf\x85d9\x95,[7'H\xb3)\xb9\x12^\xe3^\x87\xe9\x02MԽ\xffxqC\xae>ޒBb\xab%\x9bm\x83\xff\x1e\xb8Q30\xdbb79\x9d\x92s\xbe\xb6`,\x97f\x8a\x185\x1bx\xd8T\x9d2\xe1/\xb1|\xf5z\x8a\xff\xf7\xca\xec\x9b4چM\x97\nZ|\xb2\x95\fj5\x176\xcb,u\x06\xeaAn\xdf\aݝ\x17\x1cR\xddH\xf5s+\xba6\b\x97P؛\x1d\x15\xa1A\xac\xde\x130n\x1b\xb2:sҲH].\xd6\xc0I\x9a\x8b\x19t\xf7t\xadex\x15\xd5Rg\xb0\x96稰\x10\xe9\x91\"\x97מ\xf8\xa6\xf6\"W\xc3\xe1\x83A\xe2\xbd\xde+\x9a\xb1\xd4NΆ+N\xc9k\xf2\x9f\xe4\x81\xfc'\xaa\xab\u007f\f\xd5G\xe3\xa5|\xbc\v\xc1ڣ\x97׃v\xea{\xc3t\f\x1c\x83]-Ȍ\xf14\xca\x1a\x81\a\r\xd20s\xb7\xe3\xcfv[\xba\x99\xfc\x8b#X\x1bݸ\x9c7o\u007f\xd5/\x8bd\x89\x99ޟ\x85\xd2W\x8e\xf9\xb4\xef\xaa5\xb3\r\x86\x88*WNu\xb2lsF\xa3\xbe+]3\x98pȩ\xc0<]\x9b\xe2\xbad\xc1n\xe6/s@c\x12JZt\xf9\x98\x14\xb4ar\xa3\xbf\xd5\xe9ŶQc\xb8\xefDzf\xa7\xac\x9bŦ\r\x11\x16\xe3\x84ڡ\xb3;\xefAL\xc1o]\xbae8]B\xb9\xadA\x99\x83\x94\xb6\u007f\xd7,<\xfbX\x81\\\xb1\x04\x82\x890\x9a\xc7\x15Rh\x91\x88\xe0\xfb\xf4ۉ\x15\x0e\bzݭ{\xf7C$-\xfd\xf5\xfd\xf5)\xb9}w\x8dWZ\u07fc\xbb\xbd\x1e\x92]Kȫ\xdbwׯ\x9e\t\x991\xae\x9eI[5\nz\xd3o]\x88I\xf3<\x17\xfeo\xf8Ќ\x910\xc9i1\xb9\x83u\x80\xe2\x18\x8b\x9b\b\xcclO\xd7.:\xa7}\x13\x92%Д\xbd\x90\x1a9\xc7D\xea9u\x17\xcb\xe5b\x15\xe4GA3\xca\xc3\x06\x9e\x16\x82\x19{ĵtnV\xd0\x05\x00\xdd{\xe7\xfcXA7V\xd0Uc\xac\xa0\x1b+\xe8\xc6\n\xba\xb1\x82\xae\xe7\x18+\xe8\xc6\n\xba\xfe\v\x1d+\xe8\xc6\n\xba\xb1\x82n\xcf\x18+\xe8\x0e\xceg\xac\xa0\xdb7\xc6\n\xba\xc6\x18+\xe8\xdac\xac\xa0\v|y\xac\xa0\x1b\xf3B\x0f\x8c\xb1\x82\xee%煎\x15t\xfb\xc6KϚ\x1d+\xe8^\x88\x97\x9e\x8c\x15tc\x05]c\x8c\x15tc\x05]5\xc6\n\xba\x9dc\xac\xa0\xb3c\xac\xa0\xdb1\xfey-\xa5\xb1\x82\xeeeYJ/\xdd\x16\x18+\xe8\xc6\n\xba\xa0\xb7\x82(\xcc_\xc9\x1f[\xb1u\xf4N\xe4E\xa9\x81|\xf2\x80\xaa\x03\x15\x96\x9f\x8a\x19\u008d\xa2\xad\xe7l\x92\x9e\b>g\x8bRb\x99ԙ\xbd\x9b}\x92\u0605M*\fM\xaaٝ=u\x9aW\xc6r\x16RDgF]\x95v\x1d\xad\xe4D\xc9\xd7a\xd2u\x90l-\xa8\xd6 \xf9[\xf2_\xc7\u007f\xff\xddϓ\x93\xaf\x8f\x8f\u007fx=\xf9\x8f\x1f\u007fw\xfc\xf7)\xfeǿ\x9c|}\xf2\xb3\xff\xe3w''\xc7\xc7?\xfc\xe5÷\xb7\xd7\x17?\xb2\x93\x9f\u007f\xe0e~g\xff\xfa\xf9\xf8\a\xb8\xf8\xb1'\x90\x93\x93\xaf\u007f\x1b8\xd1G\x95X\xed\x03\xf8\x1d\xd2J\x1d\xcdC֜\xd3\a\xc3EC\xb7?\x17%\xd76-Ԟ\xea\x8a\xf8m\xe4\xf39.\xfc\u007f\xaa\x93H\xe2E\xb0\x8b\x01\x8f\a\xf2\xe0\x18\x0f$9\xfa\xe4\xa8e\xf3HZ\xc5\xe6\x11\x8f\xa4\x17\xb4\xa1g\xf2rN\xaa92EDδ\xb1\xd2\xe7B6+]C\x93K\x99n\x99\xa2\x8e-a\xf66Ţ\xe4\xe8\xeb\xe6\x1buDB/A\xde3\x85N.\xcak\x9f\x022\x8cI\nsƃ\xd32P\xd5\f\xf68\xbfDV\x15\U000520a4\x94L\xaf\xdf\t\xae\xe1!\xc0&o\x13\xfd\x8d\x03CDa\xb3]}\x8e\x93M\x11\x0fa\xb6%Ǫ\xae\xe0\r)Dƒ\xf5\x99_\x10b\x1e\x1e\xf4Y\xc0\xb7\xfb}QSuW\xef?L\x8c\xc9Po\xf3\xd6\xf7\x9fZYD\xc9|-يe\xb0\x80\v\x95\xd0\fir\x88\xa9x\xbe\x03f\xe0\xc92(\x90\"S\xe4~\t\xe6\xe4\x12jֈ\x0e\x8b\x84r\xb2\xa0\xc1\xa9B\xb9١\xc2O̐\x99\xe1\x02Z\x91\x82J\xe0ڃ\x0fe\x89X\x94=\x13\"s9\xf1ٺ\x9e\xbb+@\xe1\xe2'\x0e\xf7?\x99o\a\xbb\xe73\xba\xa8\nc\x14\xe8-oM\xec\xb4wm\x93M\xb7.\x81\xd0잮C\xa7{\xbf\x84\xcd\xf91\xf5\x96\xbc9\xc1\xb3I\x15\xa9\xbe\x18\xcai\u007f\u007f\x82q\xc3w\xe7\xd7?\xdd\xfc\xed\xe6\xa7\xf3\xf7\x1f.\xafbآ\xd9)\b\xba\x14.\xa1\x05\x9d\xb1\x8c\x85+a[\xd9LMP(\x86\xd2\xf4,\x95\"41\x16\xb1,K\xce\x19_4ꋇ\xe4*7\xdb^ \x99\xcdۓ]H\xcaó\x16g\xeb\rb\x90%\xd7,\u007f\xb6\xc2\x1c\x9a\x0e-\xca9OSH[\xa8\b\x86\xf78ٗ\xef\xfc\x14\xd6uǍ\b\x98\x84\\\u007f\xbc\xb9\xfc\xff7(q]\xc4'\x8b=s\x1d\x03!\xe6\xc0\f\xdc\xd5O\xb6\xc2p\xdc\xd7\xce\xf1K\xaaO\xa9\xe4\xf9\x90x\xfa\xa7\x92\xb7\xbbn\x15\xb1R*\x17)Lɵ\x15ɠڰ\xe2[AP\t\xc4\x00\xe4\x9a\xd1,[\x13c\xbd\xadh\x066\x81\x1fk\xe7\x82\x15\xac\xeel\xaa9\xcdT {\x8e\x95\xabFq\xf9`L\xd4\x01;W\xc1 )p\xa1\x9d\xbd\x1cA\xf7b\x8e\xb0\x88\xb5\x99\x1bIk-\xf9\x15\xa1\x1c\xd6b\x95)\x8f\xe9\xebj\xd6\x18\x11\t\x84Y*P\xddb\xb5\xb2\xa2#r@$\xd0\x14k{\v\xaa\x976\xab\"\xa7\xea\x0eR\xfbC\x94V\xec\xbc\fv\xb6բo\xd7\x05\x909P]\x06\x87fP\x1b\xb69*\xc0\xe9,\vu`D\xb7O\xa0\xe9G\x9e\xad?\t\xa1\xbf\xa9JQ\a\x90\xed\xf7ΦiG.\x8c\x82\x1b\xca\x18pn\x13\xdc8d\x03\x8dJYOm\xa1\xce\x18\xf5\x9cL@\x96\xfc\\}+E\x19(ҷT\xebo/\xdf#/,\xad\xfd\x01\\\xcb5\xb6\x01\bg\x04\xdd\xf6\x15\xf9\xab9w\ue905\xaa,\x9e\x05\xccI\xc9\x15\xe8)\xf9@ׄfJx\xb3.ؚ\xbd\xc6,\xbf\xa6\xffe\x8a\xee9\v\x8c̄\x0e\xe5+\x1b\xe0\x90\x05l\u007f%Էg\x90i\x03\xb2\x95/\xce\xcco\x03j(Pz\a\x8a\x14\x12\x12H\x81'\x81\xb4ڈ\xad\xfe\xf1_\x9f%m\v\xa9\xfcJp\xc3@\x06\xd0\xf9%OYB\xad\x94\xa3\xbaM\xa7\xa1\x8aJ\xa9\xb4\xb7\xc9)VD#\xfb(\x15Hl\xe1\xa5e\t1[\xfd\x97r\x06\x19h\xeb\xb2\xc0\xee]T\xdb\xd6\x03,\xa7\xc1\xb7\xbbS]\x896-\bpUJpNaMR\x011\xf9en\xd1\u007f\xbd|O^\x93c\xb3\xea\x13$\xf59e\x19\x96\xfci\x1a|Q\xfa\x86\xc7c\ue9c7\xa8\xc4\x13O\x82\xbb8!\x13>%\\\x10U&K\x8fK&x\xe5\x0er\xb9\xb5\x11\x91\xb5-泋\x9d\x84\xba\xdbk\xe6\xf3\xcf\xc3N\x06\x89\xbe\xbf*\x90\x03%\xdf_\x9f\\\xf2Ż\x95\f?i\xef\x14\xb2\x01\x92\x83\xa6)\xd54\xec:|\x84\xc8\x1b\xfdbFB\xde\x00\xfa\v\x93\x8b\n\xbec\xbc|\xb0ɭC\x9d\xab7\x17\b\x8c\xb8\xe0\x89\xb5\x13B\x05NQd̶\xc8\xdb\xe8\x04m\x19y\x15N\x1c$ \xbcLCFN\xb3L\x18\xa1\x1e\xae\xf9S\x9e\x8a|k\xd9Ƙ\x83V\x1f\xf1)r\xfcP\xf8㱪\x81\x0e:V\xf1\xee\xeb\fV\x10\xdc\xfep\xb3/\xba\x81a\x8c:O'\b4\xc2+\x98\xd1\x19dV\xf9\xb2\xa7Dm\x9f\x92Hoa\x94\xabQ\x8alh\x89\xe2'\x91a\x9e(\xad\x90c\x80\xfe\np\x83\xaf\x0e\xc3\rziZ\xb8\x89\xf4&\xbf4ܔ\xc1\x1a\x17\xd9čQ\xdaڸ1@\u007f\xf1\xb8\x89t\xc1\xdf3\x9e\x8a{\xf58B\xfc{\v\xccs\xefĈ\f\xcd\xf8\"\xd81V\vr\x9ae\xad \xe9pI\xee\x13U|\xf7\xfe\x0e\xb9\x15\x1a\xd1u&]\x89\x97\x19\xb4\xdd8\x03\x85\xd7\x0e\xb9\xda%)C=\x85[r\xf5\x8bI\xcaE\xae\xe8;i\xbe\xa9\x19\xcdn\x8a\xd0V\x97d\x93\x16\xbf\xfdps\xde\x06\x18\xd7\xd7\xf0\x1e\xaf\xbd0\xb86\x10\tMs\xa6\x14\x1a\xf10[\nq\x17\x01\xf2\xd8\xe7\x17-\x98^\x96\xb3i\"\xf2F\xaa\xd1D\xb1\x85:sgrb\xf0r\x12\xf1\r\xc63\xc6\x1ba\x06\xbc\xde\xc1\x19\x88f!\x11 \x93\n\x9bHp\xaes\xb6\xcb\x10\xd8F\xf7U\\\x85\x1b6\x8ayVy\xb2MzWQ\xfd\x80\x0e\x90_$>\\3\xd1F\xc1\x98%\xc4z7\"\x80\xe2\xfe\xd9\x18\xd9\xf3\xaa|\xdec\xf2\b\x18Fω\x03e8\x99\x13<1\xe1\xf2.\xdf˖7%\x02p\x97\xff\x05\x81\xb6\xbd*Q\xc7{\xdb\x0f\xd3\xf2\xacD\xc0\xec狉\x00\xbc_\x1a\x92\xb8\x1e\xb9O#\x11\xc9SHE\xf2\xec:]L.\xb0\xad\xc0\x1f\xd4b\xfc\xa6\x01\x83\xb0V\xac#`\xcdN\x1f\xb3]F\xaa\xee\x05x\x9f\x15vFa\xffcU\xac\x107U\x9dE΅M$o\xb6\x1eq}\x96C\x88\xa5\xe4\x9ae>\xfc\x9b\x17\x99\x91ܭ\xd9\xda L\xd8u$\x8d>\xe7\xa7\x15\x1a\xea\xa6\xea\xae\xe5J\x88\xc2\xfbߥ҄Vy\xac\xbe\xe7\xc2u\xf5!\x83\xca۰Y\xba\xdb(\xb0ݟ\x16f\xd2+\x96\x02I\xd9|\x0e>\x0fw\x06\xa4\xa0\x92\xe6\xa0\xc3re\\Pl\x06\vf\x93#ŜP\x83\x86\xa3#U\x17\xff\x87`\x00S-\x99&9[,\xedA&\x94d\x82/\x88\x8fJe\x82\xa6\xc4\xf0\xd0\x00\xa8B\x92{*sBIB\x93%\x9c\xda\\䴔\xd8{V\x03M\xd7\x13\xa5Ü\x82Fu\xc6\xf8\x90\xbb'*ٮ\x82\f\xdc)\xb4pg\xa0\xa9\xcf\xd6\xf0I\x17^kk\x1e\xd8\x00\xb8\x1e\xda<\xa3\x8b\x97ҭg\xec\xa9\xdf9ƞ\xfan\x8c=\xf5\xdbc\xec\xa9?\xf6\xd4\xf7c\xec\xa9?\xf6\xd4\xef\x1ecO}\x1ccO\xfd\xb1\xa7\xfe\xd8S\u007f쩏c\xec\xa9\xdfg\x8c=\xf5\x9bc\xec\xa9\xdf\x1ccO\xfd>c\xec\xa9\xffO\xdc)r\xec\xa9\xff\xb2:E\x8e=\xf5\xf7\x8d\x97\xdeGs\xec\xa9\xffB\xbc\xf4d\xec\xa9?\xf6\xd4o\x8c\xb1\xa7\xfe\xd8S\xbf\x1acO\xfd\x9dc\xec\xa9o\xc7\xd8S\u007f\xc7\xf8絔ƞ\xfa/\xcbRz\xe9\xb6\xc0\xd8S\u007f\xec\xa9\x1f\xf4V`\x1ae\xca\x02\xbao\xf6i*\x13\xdcE\xd5\x17\xa4\x12Jf\xe5|\x0e\x12uC\x9c\xd9V\x1eI\x00X\xdf\xfa\xcf'6\xfa|\x0f\x05\xfa\x14\xbb\xd8\xd8z\x9a\x10\xed\xbfsJ\xbe\xaa\xf6\x9e\xae\x15\x91\xa0\xc2:\xe00N.>~S\x1bT\xe1\xddpb\xda\x01\xe0J>\xf2$6u\xb6\xde\xfa\x8e2\xe3\x10\x8c\xda\x04\xb2$\x13\xca\xe66Y\x14'K\xca9d\xce\xfe\bJ\xeeYREf\x00\x9c\x88\x02\xb8\xcd\x1c\xa4D1\xbeȀP\xadi\xb2\x9c\x9aه\xa8\xc8n\xdb]\x9b\xd2z\x96JK\xa0\xb9\xdd~\tyX\x83X3=B\x13)\x94\"y\x99iVT\x13$\n\xb0dG\x85f\r\xfbM\xc5\x04)\xb0i<\xb2\x84\xd3z\x05\x16)!\xd3l6\xaaC\v\xed\x14\xfbc\xe7\x85^WI\xc5@\xe6L\xaa\x90]J2\x86\x86\x00\xae\xd7\x16!\xe2\x1cO\xd1\x12\xd4\xd8n\x141\x1a\"K,Jy\x8a:Q\xa1\x15&\xc96&\xe9>\x9a2\xe5\xf4g\x15\x92@G\xb5\x17},\x87\x1a\xa3H\xba)~6|\xc6\xee\xe5\xc6\x14\x1b]l\xeb\f\xea\x10\r\xc93;\xec\\\xe6\x99\xc9i\xb3Y\xba/\xf3\b\xf22`:X\xcd4\xdd\xfa\x91\xf49\xac\xccه\x04\xd8*\xe4\xec\xd3\x1d\x9c\xefI\x19\x9f\x06\x993\x8ei\xcb\x1f@)\xba\x80렰\xd5.\x83\x0e#W5\x89\x04\xa9\xf4s\x96\xa1Ӧ֬\xea\xb4\xc9#՜r\x00\xd0ܮ\xaeJǿ\x97Lk@\x92Ŗ\x83\x18\xa7\x0f\xd2\xe9\xb7&\xd6l\xfd\xf6\xc1\u007f\xce~&D\x00*\xd4sxj\xd3\xf3g@f\x92\xc1\x9c\xcc\x19\xa7\x99\xcb!<ŖD!\xb4e\x9d!J\x19c_p\x9f\xa2\xe6\xb12%\xdf[\xb4\x84,_\x96<\xc1\x04F\x97\x8c\xceE\n\x84\xcd\xc9\x02\xf3\x1a\xa5M\xa9\xff\xd7\xd7\xff\xf1\xc7\x00\xa0\xb3\xb5\xd1I1H\xae\x85\xa6Y\xb5m\x19\xf0\x85\xa1(+ h\x16\u2e6bk\x8f\xab\xdd\xc7Kz,\x82\xdf\xfc\xfen\x16\xa5\xaakA\xceRX\x9d5\xe8q\x92\x89E\xd7\xf5G\xfd\xd5\xe4\bú\xe3\bc7\xfd\xc8C\xec{\x9c\x91\xa5\xb8\xb7\xcd<\a\x9d\xb7:%\xbe\x10E\x99\xd9`\xc67\xe6\x84\xe3^\x94\x01\xfc\x8dlW\xc3vr\xaf0\xd3\xdcOkC\u07b8d]\xbf\x8c\xa0\xb5c\x99\x9cs2W\xad\xcdJ\tS\xf2\rͲ\x19M\xeen\xc5wb\xa1>\xf2\v)\x83\xfa\x92y\x9c\xd9j \xaa4I\x96%\xbf\xb3w\x8c\xf8\xa9g\"\xc4'#J]\x94\xdaW\x1850Z\xad\x1d\xf9qP\x02\xbcU\x87\x9c\xeaҘ\x19<\u0a7bg\xe6(s\x02f\xf5!\xc2\xdc\xf0\x85L,\xaa9\xab\xe6A\xfe\xfd\xeb\u007f\xfdw\xcb@BV/ɿ\xbf\xc6\xe2\x02uj\x05\x0eJo\xa30\xe64\xcb@Ʋ\x06C\xe2]\xac\xe0I9\x81\x8e=\xf4O`\xba\xde\xde\xfe\r\xedV\xa6\x15d\xf3S[\x9a\xea\x1b\xd2\x06\x80#E\xbf\xcb(˝k+\x18bx\xc8)\xba/v\xb8\xaf~Ҡɠ\xd7\x02\x91;\xa0\xf0=$\xdb\xd22 \xeck\x1e˛\xafE\xea\xc0 K\xb5\x1d\xe8\x8d1\x18\xb8\xf9;\x8a\xfb\x86(\x01Ø\xf3\xe7\x1a7m\xdel~\x89b\xce\x16\xe2\x17b\xc98\xed\xc1\x1c\x19y\xb1[\xc0\xb0\x06!M\xf7\x86#\xa0\x86\xb9\xe3\xbc\nS\x9b\xe3\x11\f\xdcP\x8c\x9b\x1a9z{\xf4l|\xd9\"Y\x8a\x82.\"n\"\xdb\xc0\xf5&0\x92\x8250\"J\x1a\x8c9\x8a\xf0lj\\\xe1\xa0BZu\x01\x8b\x00i\v\xb1jy\xeaM\x16\xdbb\xe2>8\xe7\x9b\x10*E\xc9S\xebS\xaf\xc3+\x1f6\x10q%x\xf8t\x99r\xedɰ\xbd\x00V\x0f\x98߰A\x00\xe3\xe4\xcd\xf4\xcd\xeb_\x8e\xf8\xc65l\x88\xef\xa8\x16K\r\xbe\xf4l\xab\xf7\xf7Q\f\xc2\xc0\a\xe7v\xac/\x90`qm\xdf\xed|&\xf7\x92ihܲy\x8c\xa6\x91\xb1p\x1b\x8d\x85N³\v\x06\xdeN\x13ߟ\x9b\x10U\xce\x1e\x9d\xdf[F\x1d\x8c\x05d2]\x1ei\x15\v\xb1CT4Q\xfd\xeaU0\xc4c;\x93#\x85\x9d\a\x82\xb7:\xfa8\xb8m\xbax(\x82\x1b{\xb6\xb6\xea⡠\xe8\xf7.\xda{\x16\x8c\b'\x8cw\xefY,Ď=\xfb\x13,\xe9*B\x9e)\x96\xb3\x8c\xcalm6\xfb\xc6b\x90\xccJM\x80\xaf\x98\x14<\x8f\xb9\x87lE%\xa3\xb3\f\x88\x04l擀\"\xbf=\xfe|\xfe\t3\x8bN\x8c\xe4\f\x86\t~WJ\xc5\xf8b\x8b\xfa\x1b\xd3\x1d\xc6[^\xbd\xda\"`\x8f\x17CYᒘ\xa7\x15^\x8dƐ\x97\xba\xb4\x97w=$Y\xa9\xd8\xea\xb9\xe4E\x9c\x95Vi\xbb\xbf\x02#\xcd5Xy\xcf\x02\xf8\xc3F\x1b\x99\x9aය\xb5\x04\x86\x83Q)\xab\x1b\x8au\xa6l\x04q\b\u007f\xb9P\xb3\x87\xacs&\xbb\xb6U6\xfd\xdc^9\x1c\xe2\x1a\xd8J\xad\xc1\xa6\x81\xcf\xebV\x0e\xa3\xde\x00\n\f\xa4\xbd\x10\xaas9\x82}\xa6\xdcVJ\xed{\xc4\xdeE\xee\xee~\xa7\x0f\x98\x80gos\xef\xb521\xb7I\x11\x9f!\x03)\xbcи\xa7LW\x95\t\x8c3\xfd.\xec6B4Tl\xab\xba>\xdb\x1d\xb0\xd1=w\xa2\xd7c\x87\xb6i?9\xed!\x9f\x03_\xdf\xfdݝ/2\x9ede\n\xef\xb2Ri\x90\x9f\xfc\xb5\xef\x9b3ۈ\x8ev\xbe\xd3(:\xf0\xd7e'\xf6\x91\x89JD\xd1q\xe8e\xfdj\xa5S\xb8\t\xa5\xbe\xb0\x10\xebUܥо\xfb\x82\xd2BBg\"\x14/\xb3l#\xfd]\x96[\xa4b\x9e2\x1aBgf\xf0nM\xddO͘h\xaa\xa0=\xd1\xd4x\xdc6\xb3S\x19KЍ\xcd\xfd?\xd8\xff2\xb3u\x9f\xd8Z\x97\xdd9\x9bg\x83ɋ\x18]<Ŷ⼆o\xeb\xe5\xecg7\x17\xbdÍ\xb6\xe7\x88\xf4@\xd36\xad\xf9\xcf\a\x91R\xfd\xf4\x06\x8a<\x85\x1c\xc6\xd06q4qTS\x9a{nF\x93\xbb\xb2x\t\b\xc3\xf6\xfb7\x90\xa1\x1cߋ\xac\xef\x9aOZD\xe5\xa0\xe9\xeaʹ\xfd/\xc6Fe\x99\xc6,\xd4\x0e\xd5\xc9^܍x2*\x04\xe3)[\xb1\xb4\xa4Y\x8b\xca\x1aX\xaa\x91\x89%\n,\xdb6αI\x98{\xbb\x85S\xe2ӡ\x82\xce\xe0>\xef(\xbaJ\x8c2\xec\x12\"\xbb\x98h\xdb\x01\xb7\xf1\x82Ŝ\x8b;\xba\xdb\x0f\x94ǝc\xcdF\x93\xdfQ\xbax\xeb\x1a\xc0\xf8\xa7p\xbd\xe7W\xef\xbb\x15\x90=\xce\xeb\xf6\x15\xdf{&\xe2\xceD\xb5\xbdKZ\xb9EwIM̔W\xa7\x84\x92;X\xdb\x04J\xca]wN\x0fBBF\xfde\xb5w`S\x15\xec{\xdd\v?첾\x83=ޠ\xd6r\xcd\xf7|\x00\x18\xd7m~\xa8\x02y\xd5R\xdd}\x14\xfb\xe4\xf1\x9eh]\x0f\xe9\xef1\xd2s\xda\x15\x02\xab[\xb2\x95E\xb1\xb1\xd6\f:\r}-Y\x81E8{f\xed.\xb7w\xd8&\x9fi\xc6\xd2\n\xb8\xa5\xa8K~J\xae\x846\xffs\xf1\xc0\x94V\azL\xbf\x17\xa0\xae\x84\xc6g\a\xa1\xc4N\xaa'B\xec\xc3H\xa0\xdc\xf26,%A\xf8\xd5\xf2.\xe7\xee\xc2\n\xbb\xbe=\x8b`\x8a\\r\xc3d\xdcʫf\xd8\xca\x01\xf7\xf5B\\\xf0\tr$\x0f}\x0f\xd0jӘ\xf2\xa8\x14\xb2\x85\xaf\x1d\x1f\xda\x03s\x06\xc4}\x1e}\xb8\xf6\x1dL\xcf-2\x9a@\xea\xdb\xe8R\x83\v\xaaa\xc1\x12\x92\x83\xdc{\xf7da\xf8\xd4\xee\xad;\x18\x06\xeb\xa5\xec\x0eUM\xef\xa0\xfb\xbd\xc9\xfe\xed\x8dV\\\x1d\xbfG\x01\u05f9z\x9a\xfa\x8e\x9c\xd7\a\xf8\xd3\x01\xfcl\xcb\f\xfbQ'hia(\xfb\u007f\r;EB\xf9?RP&Ք\x9c\xbbJ\x82\xceo6\x9fw\x9aG\x13\xb4\x81\xca\xd4\xc6M\xea\x94\x13\xb0E\xb1\x9d \xc5|K\xa2\x19C[(\xcbū\x90ȫ;X\xbf:m\x9d\xbc]\tl\xaf.\xf9\xab*˾}\x0e\xbc\x9c\xb1\xed\x81_´\x9an\t\xc1N\xb0{\x05\xe3\x1e\x8a\xd8\xf9O\x95\xa6\xfb\xc1&\xd6l\xees?Z\xd8C\a[\xfdk\x9a_k\x11BS-m\xa9\xf0۟\xa3r\x01\xbaK\xd9w\xba*\x86٧䜯\xb7\xa0v\x97YW&REQE\xabú\x90.\x91\xbb\tȥ\xcd(\x9a[\xf8\x9b{\xb2\x13\xe9\x0e\xe2\xf5\xe7\xfd\x9a\xfc\xa7\xea\xb1\x0e;\xb0\xb1X\x8a-p\xdd\x02\xae?oS\x8e-%\xe0\xb4PK\xa1\xc9\xf1\x8aQW\xa8!\xca\xd4\xf5i\x97[n\xfdH\x8bN%KH\xcb\f\xba\xae\xf2\xd8\xeay\xe3\x1f\xf4\x8aK\xc9\xd9?\xca\xf6\xad&\xde\xd9\xe1\x9eަ\x85\x1a\x0f\x95%\xd7pÙ\x13\xf8'T\xb9\xfdw\x9c\t\xe3\xe0\x9aM\xee2\xa2+\x80\x96\x1c\x84\xd2Xz\xc1u\xa3˃\xb7x\x12\xd7q\xd7=\xceT5\xdbn\x8a\xd8:']\x12b\xe2\xa0o\x04/;i\xca&\x157\xdf\ue8a3\x1b\x9bz\x9c\xd0B\x97\xfe\xf2\xfe\xa4\x94؛\xbf\xee!L=f\x1c\x12\x1a@wi\xab\xce}\xc4\x04\xbfe9(M\xf3\xadK\xdf7\x9bwo>o\x90+dj'e;\xf0זg\xdd\x02\u007f\xdb\xf0\xa2\xf5E\v\xe9\xb4\x01\xd9\x02A\xf5\xc1\x00\x86\x94\xc0\n8q5\n\x18\x1e\xb5V\xed\x16\xc8[Ԗ\xe5\n\x9d\xc2\x1e\n&C΅\xb4\xad\xf1\xabio\x1e5_\x89\x9aR\r\x93\x8e\x1a\xbd\x1eg\xaa\x83\x89b>\xf3~V\x81\t\xdfN\xae&\x98\x98c\xb62\xcb\xec\xbb>\xe5\xda\xdd/~\x0f\x12\xc8\x02\xb8Aj\x87\v\xc9\xe9Y\xb6#\xbaA\xa5;\x89\x95\x1f\xe0\xd66\x8f7歝\x1a\x8a\xa5\x8aI\xee\xd2I\xcc\x03t\xb1\xe3Lt\xd5\xe0\xba\xf4\xf6O@\xd5v\xc2Hk\xf9\xdf4\x9ft\xaa\xb3]\xb9\xb5쨽\x95\xc2\xde\xe4\xc3$t\x10\xb7\x9b\x8c\xc0\xaf\xf6<\xb7\x84\x14K\xaa\xf6\xb3\xb9k\xf3Dէ\xbeq\xdc*\x0e\xf7\xa9s.\xc0\xcb|\x13\xf0\x84\\\xc1\xfd\xd6o\xdf A\u007f\xae\xee\x11\xdfz\xe0\x92_K\xb1\x90\xdb-\xa3&\xfe\xc0lQ\xc1\x84\\S\xa9\x19Ͳ\xf57]\r\xa2\xfdW\xfb\xe2I\xb5\x8e\xcd~\xb9\xd0z\xb4'c0\x8c\xa0\x83\xe0lY\xdf\v<\xd2\xf5\xad\xef\x17\x87\x0f\xf7獇7\x1cz\xb4\xbe\x91\xdf`\xc2\x1d\xc9\xe3\x8e\x1b\xb8\xd1\xf6O\xccl7\xef\x8e{&\xc7\xdc=\x95\x9c\xf1\xc5\xfe\xe5~\xef\x1e\xea\xe0f\xee\xfd\xa7\xe3g~\x82m\x8e\xb6\xc3w\x1c\xca\xd1:d\xf7\xc6O+\x90\xca:\x01\xde\xd4\u007f!\xb6l\x04\xc3\xfd\x03\xb1Ԝ6p\xef\xa6\xe2~\xa9\x15\x02[\xa3\xeb<\xe6\x16\xedw\x8c\xa7o}\x1eH\x91\x95\x92f\xee\xcfDp\xab\xed\xab\xb7\xe4\x87\x1f\xbf\"\x0e\x03\x9f\xfd<̏\xff/\x00\x00\xff\xff\x94\xf1o^B\xb1\x01\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\xbd}s㸑8\xfc\xff~\n\xd4$U\xb6/\x96<\x93ܥ\ue9aej˙\xf1n\xfcd\xc7\xe3\x1a;\xb3Oj\xb3\xb7\x05\x91-\tg\x12`\x00P\xb6\xee\xf6\xbe\xfb\xaf\xd0\x00\xf8\"Q\x12\x01\xda\x1e\uf1b8\xaa\xcbZC6\x81F\xa3\u07fbA\v\xf6\x19\xa4b\x82\xbf%\xb4`𠁛\xbf\xd4\xf4\xee\xdfՔ\x89\xb3՛\x19h\xfa\xe6\xab;\xc6ӷ\xe4]\xa9\xb4\xc8?\x81\x12\xa5L\xe0=\xcc\x19g\x9a\t\xfeU\x0e\x9a\xa6Tӷ_\x11B9\x17\x9a\x9a\x9f\x95\xf9\x93\x90Dp-E\x96\x81\x9c,\x80O\xef\xca\x19\xccJ\x96\xa5 \xf1\v\xfe\xfb\xab\xd7\xd3?L_\u007fEH\"\x01_\xbfe9(M\xf3\xe2-\xe1e\x96}E\b\xa79\xbc%\x12\x94\x16\x12\xd4t\x05\x19H1e\xe2+U@\x82\xdfNS\x9c\x10ͮ%\xe3\x1a\xe4;\x91\x95\xb9\x9dȄ\xfc\u007f7\x1f\xaf\xae\xa9^\xbe%S\xf3\xc2tF\x93\xbb\xb2\xb8\xa29\xe05f\x961\xa5\xff\xd2\xfc\xf5;\xa64\xfeK\x91\x95\x92f\xf5\xa1\xc6\x1f\x15\xe3\x8b2\xa3\xf2mcy\x85\x04\x05r\x05\u007f\xe5w\\\xdc\xf3o\x18d\xa9zK\xe64\xc3\x03\xa5\x12a\xe6g\x8e\xad*h\x82T\xa0ʙt\xbcJ\xbd%\xff\xfb\u007f_\x11\xb2\xa2\x19Kq\xadv\xaa\xa2\x00~~}\xf9\xf9\x0f7\xc9\x12rj\u007f\xdcq8\x99\"\x94|\xc6%\x13\x0f\x97\xe8%\xd5D\x02Ύk\x85{B\x8b\"c\x89\xa5V1w I\xf5\x8eB\x16RêY\f%\x9a\xca\x05h\xf2\x97r\x06\x92\x83\x06E\x92\xacT\x1a\xe4ԁ)\xa49\t\x9ay\\\x9b\xd1\xe0\xe2\xd5o\x1bk82\x8b\xb4ϐ\xd4\xf0m\xb0Su\xdc\x17R\xa2\x10\x01\x86\xe8\xf4\x92\xa9zI\xb8\x8c\x06X\x82tɉ\x98\xfd7$zJn̦HE\xd4R\x94Yj\x98\xfd\n\xa4AI\"\x16\x9c\xfdO\x05Y\x99\x05\x9aOfT\x83\xdb|?\x90Us\x9a\x99\xed)\xe1\x94P\x9e\x92\x9c\xae\x89\x04\xf3\rR\xf2\x064|DM\xc9\a\xdc\x12>\x17o\xc9R\xebB\xbd=;[0\xed\xe5V\"\xf2\xbc\xe4L\xaf\xcfP\xfa\xb0Y\xa9\x85Tg)\xac ;Sl1\xa12Y2\r\x89.%\x9cтMp\xe2\x1c\xc5\xd64O\u007fSm\xd6Qc\xa6\x1b\\\xd6\x0e\xa4\xf6\x9dx7To)Ǿf\xe7_\xa3ן\xe3O\x177\xb7M\xaab\xaa\x8ds\xc4v\x83\xd0j\xc4\x1bD1>\ai7\x0ei\xcb@\x04\x9e\x16\x82q\x8d\u007f$\x19\x03\xdeF\xba*g9\xd3f\xa7\xffQ\x822\xa4+\xa6\xe4\x1dJo2\x03R\x16欧Sr\xc9\xc9;\x9aC\xf6\x8e*xr\xb4\x1b\f\xab\x89A\xe9a\xc47\x95\x8e\xf6\x83\x16[\xd5\xcf^;\xe8\xdc!w\xbao\nHZ'ü\xc4\xe6\xfe\x18υl\x1d~\xf3ʴ\x01\xb2\xebX\x9aQ\xab\x18\xed\xdf7&\xf1\xa7\xea1C+\xe6\xf3%g\xff(\x01\xb9\xaa=\x93\xb0\xcd.\x9a\xbc\xbf9\f\tL7~\xedĠ\x19\xf0\x90de\ni\xc59\xd5ޙ^l=\x8e\xfa\x1de\xdcи\xe1\xf3f\xba\xbc\xfeWd\x90\xb4c\x96\x86\xce\x18\xb7\xd0\bkI\xfb\xcd\xc93\r\xf9ִ\xf6\xac\x89\xa0\xc2Hg\x19\xbc%Z\x96\x9b߶\xefQ)\xe9\xba\x13\x15\x9f*\xa1\xd1\a\x13\xd5\xd3\xee\x98g,\xc1-\xab\x0e3\"㗄\x87\xa5\x10w\xfb\xd7\xfeg\xf3D͍H\x82\x86\x01\x99\xc1\x92\xae\x98јp\xb5N$̀\xc0\x03$\xa5W\xcdZP\xad&#$)\x84һֽ\xebt\x91\xa6T\xdd\xfe\xa7\x9d\b\xdbZ\x8fc\x02~+\xcd\xf2Z\fAp0s\xcc\r\U000eb7d5\xa2\xb4Ϫ\xce/\x90]X 3\xaa %\xc2\xedu\x99\x81r_J\x91\xd1ԧ\xe7t\a\xe0j\xd1VVft\x06\x19Q\x90A\xa2\x85\xdc\xc4\xdea\x1c\xdaq\x98\x13\xec\xc0^\aOp\xdc\xd3\xf1\xd2&;\x10;a\x12r\xbfd\xc9Ҋ1C\x83\b\x85\xa4\x02\x14\x1e\x12\xa3V\xad\xbb\x17G\xf6\xef\xb5\x1d{\x8eI=\xf6\x1e\x98MX\xdbG\xa7\x1e\a\x99I=\x0e\xb0\x956.k-\xf2\x9f\x06\x95\x9e;\x06\x13\xe6\xe5\u058b\x8fI\x98\xa8\xe6\x1bU\xf4rN /\xf4\xfa\x940\xed\u007fEu\x1e\x9d\x16;\xd1S}\xfb\x17\xb7\x11\xa14}\xb9\xf9\xde#\xd2\xf4\xc0]\xa8>\xfd\x8b\xd9\x04d\xf67\x8e\xd7\xf7܀\xef\x9a\xef\x9c\x126\xaf6 =%s\x96i\x90\x1b;\xb1o\xb9b\xffN\fE\xc1aIeFNu\xb2\xbcx0\x1a\x88\xaa}\x8d\xbd\xb0\xb1\xf9\xaaUܼ\xee\xda\x16\xa6{\xa1\x124\x9e\x98\x84ܚd\xb7\x88\xc1\xfa\x17\xa3\xef\x91\xf3\xab\xf7\x90\xeeF\n\xe9Ca[K8ߘf\xf3\xb3N\x0f\xed\xb7\x00\xa7\xa4T:\xbc5\xafO\t%w\xb0\xb6څ1\xf6\xd1\xfb&$>|\x10\xa2\x04\xb4\xf1\x91\xa0\xee`\x8d@\x9c\xd9~\xe0\xdd~[o\xc7\x1d\xac\x0f?\xb4\x8163\x1bg`Y\xfc\x99\x1f\x10\x01h\xf2\xf5E\x19A\xa7\x8b\xe70\x87\x16E\xfa\xb2\b?<\xb6\x83\x97WmS\xc3!\x85\x1by\xa4\xec\xa6\x18j_\xb2\xa2\xd7\x02\xd1\x1f\xa5\x00τw\xba|\xa6\x19K\xab\xcfX\xfa\xbe\xe4\xa7\xe4J\xe8K\xbeKYm\x8f\x8b\a\xa6̴xJ\xde\vPWB\xe3/\x8f\x8eD;\xe5`\x14\xda\xd7\xf0\bqˆ\xcd\xfa\x9b\xbe\x9b\x83Dlǥ5ګ-a\x8a\\rcDX\\Y\xef\x9b\xfd\xd8>n\xdf\x1ey\xa9\xd09\xc3\x05\x9f\xa0\xb0\x9bv}ǡ\xb8'!7wa{Z\xd5'\xed\xe7zA\xbc5r\xc1\xbem=\x89\x19Mj\xaf5z¨\x86\x05KH\x0er\xb1[\x104Gaxv\x9f\xcf\xf7\xe2\xa5v\x04\xd1S\x1f\xd1\xec\x87c\xc6\xe9\xa1iL\xcc\xd9<\xf8\x8c\xdf\xda\x03\x0fv\xba\xbev?xh\x1d($Qo8\x80\xcdf̭/\xf7\xee\x8d\xf9m\xb9m\xa7de\\N\vs:\xff\u05c8*$\xda\xff#\x05e\xf2\xe0\t=\xc7\bC\x06\xad7\x9d\xeb\xa5\xf9\x11\x03\x9f)bvsE\xb3M\ajDz\x84\xe1\x1a\x90Y1,\xe6[\x9a\xc6)\xb9_\ne\xa5\xe2\x9cA\x96\x12\xb6O\xd32\xe3\xd5\x1d\xac_\x9dn\x9d\xf1W\x97\xfc\x95\x15\xcf['\xd6\xcb\xf2\x03\x80\x05\xcf\xd6\xe4\x15\xbe\xf9*^u\xe9Eu=\x1e\xe2\x1d.\xd2zl\x87fYm\xc0U1\v\xa3\x8a\xee\x9em\x0f\x9a+\x84\xd2\u007f\xeer~\xed\x98ɵ\u007f\xbe\xadAvx\x93\x0eX6\xce3T\xb1H\xa3u\xcd5H\xe7\x10\xb3l\xd3\xeb\xe6\x03,\x95CN\xaf\xca\xe1E\xab\xc0\xabA\xea^\n\xb0\xae\xf1Ó\xeb\xaf\xdd\x19l\x04i\xc3\x17\x0f\r_\x9d9\x81\xe6\xef\xe6\x02\x1eS\xefLD\x9eS~\x90\xb7oM\xf2\x9d}\xcfS\xae\x03c\xf7Z.J\f\x80'\xd3>\f\xf0J\x14\x85\xbb7.[\xaf\x1b\xa1\xe0\x95V\x9cuE!\xbd5\x91\x19\x18\x03\x10R\xeb.*De\xe6\xdbԒ\xcepn\xe7\xba\xfa+\x13\x1b\x8ePg\xca5\x93\xae\x1a\x84\xde\xc7_i\xc7Z\x94\xe4\x9er\xedI\xbbR\xab\nы\xb6\xc3\xf6\xd1\x0e*\x17\xbd\x9f\xdd\xca\xe8\xf2J\xa3O\xac\x02\xae\xe5\x1aS~\xfaM\xd7\x0ec\xf8\xa5\"\xb93*BN\x17pt\xa4Ȼ\x0fセ`\xd8\u007fo\xeen\a\xb31\xc6B\x8a\x15K\x8d*\xf3\x99JFg\x9910\xe7 \x81'\xa0\xc8o\x8f?\x9f\u007f\xfa\xe9\xea\xfc\xc3\xc5I\x00hc\x94\xc2CA\xb9\xa1\xb8Ryi\\\xed\xb7\x99<\xf0\x15\x93\x82\x1bԄ\xe0\xe1rN(Y\xf9\x99&U\x1e\x941l\xb2\x15\xa4\xa7.>\xe2V\x10\x82\x0f\xcb&\x19/J\xed=\x89\xf7,\xcb0ˊ'K\xca\x17\x06K\xb7\xcb\x10\xa0\r\xfc\x11\xb5\xe6\x9a>\x989\xa3\n\xa9\x12Z@\x8a\xf4Kh\x00\xc8T\x94f\xe9\xbf\xfd\xed)a\xf0\x96\xfc\xb6\xf1\x89)\xb9pP\xeb-\f\x80\x8c\xab\xe5\xb0\x02iu\\\xbb\x81\xa7D\u0082\xca4\x03\xa5\f\a\xba_\x82^B?\xa7\xa5\x1d\xd6\xf5\xe1\xb6\f\xbc\xd7\xd3P_W&[\x00\xe0\x8e,\xb7\xbb*%s\xca\xc4Y*\x12u\xa6\xa9\xbaSg\x8c\x1b\x912I\xa9\xa6\x93\x06\x13:\xb3\x12a\xe2\xa4\xd3\xc4\xdbx\x93\x8aX\xcf~#K\xce\x19_Lh\xf5\x14\xe3\x13:QKȲ\xa3\xde\xd3\r`\x9d\x0ema\xd6X\xf3\xa5\xfe\xae\xea Cَ6\u007f\xbb\xa8ؙ\xfd\xea\x94\\\t\xbd;\x93h\xf7\xa8\x189\xe2u\xda\xc9\xf1.\xaen?\xfd\xed\xfa\xe3\xe5\xd5m\x18\xa3k\xb2\xc8\u074c/\x00f7\x8b\xec`|\x81\xc7d'\x8bl3\xbe\x00\xa8\aY\xa4c|A\x9c\xf2 \x8b\x8c\x14\x1c\xfbXd\x83\xf1\x85̵\a\x8b\xc45\x04\xc0\x1cY\xe4?\x19\x8b\x04\xbe\x8ad\x8f\xdf9\xb5\xbdq\x94\xab}\x0e\x11\xcdZ`\x8c\x97\xf16\x97\x18D\x1c\xc1\xd8n;\x85\xf8\xea3m\x87\xb0ys\x99\x01pIM\xfa>S\x15\x05Ae\x01\x85\x10|\xb8vo\xc7\xfe\xc8F\xf7\xe8,E\xb3:~\x1c\x1eH\x03\x17S\xf2\xc1\xc5t)y\xf7\xd3\xe5\xfb\x8b\xab\xdb\xcbo./>\x85 \x83Ğ\x11\xe2C\xf3\x83Pr\xf4x&\x85\x1d;\f\x8bB\u008a\x89\xb2J\xcf\r\x86\xdby<\xb7N[\xf8t1p\xb0&\n\xe4\x8a%\xd0\xfd\x99\xd0\xfd\xeca\x03\x05C\xecR\bZb>\x18⣪\x05v\xf4P\x0e\x82a>\x81\x15e\xc7a[*\x18d\xadX\xecP\x17\x82!\xa2z\xf1\x1e\xe6\xb4̬\u007f\xe2իi\u007fim\xc70\xf6\xf2\x8d\x14\xbd\x1c\xc8\xcd\xd1b17\xb6x\xc3\xfbN\x1f\x83\xf1\x1e\xb9\xf4\xba\x96p\xb5\x06D\x04̬\x04oq\x04\xe4\xe6\xd4#V\x9e\x11\x1bF\x9b\xb3\xc5\aZ\xfc\x05֟`\x1e\x0e`\x13٘y\xe7\x92հ\xc00\x02\"1r\xddN+\x9c\xf5\r\xc3\a韏\xd85\xda\xf5\xcf.k\x1253\x83\x96\x98Ő!\aȏ\x18\xcdŏ\xb6\xb8n\xaa0\x8e\xf7E/\xab\xaf\xe9\x91\b\x9e@\xa1ՙX\x19)\t\xf7g\xf7B\xde\x19[\xc2p\xf6\x89\x8d\x04\xa83L\xc3?\xfb\r\xfeO\xf4\x8cn?\xbe\xff\xf8\x96\x9c\xa7)\x11\xc8FK\x05\xf32\xb3)>\x11r؏\xba\xb0\xf7\x14\xcbLOI\xc9үC\x19\xa9\x1f\x83\xe9A\x146\xcf\xebQh\xe2\x06\xa3\x93\xeb\b\x93\xb6=\fIU\xe7ޘ\xb6L+<\x14B\xa1\xfbҷ\x9f\x88\x06\xdc\xd2W\u07bc\x8a\x84SP\xadA\xf2\xb7俎\xff\xfe\xbb\x9f''_\x1f\x1f\xff\xf0z\xf2\x1f?\xfe\xee\xf8\xefS\xfc\x8f\u007f9\xf9\xfa\xe4g\xff\xc7\xefNN\x8e\x8f\u007f\xf8ˇoo\xaf/~d'?\xff\xc0\xcb\xfc\xce\xfe\xf5\xf3\xf1\x0fp\xf1cO ''_\xff6r\xc2\x0f\x93\xdaS1a\\O\x84\x9cح?P\x14\xbdo\xf8\xedx\x1c\xbe\xf3\xc9\xeb\x14\xc3D)i\xea\\_\x88A\fS\x8f\x06,\u007f\x90v\xa4 \x91\xa0_\x96g\xd5ΩQ\xe9p\xa4\xea\x06\x16\xbf\x02g\xebP\x13Ϣ\xa7\xb61\xb0\x05\x17\xc1@\xeb\x10\x1f\x14\xb5\r\v=\xfc;\b\xf6\xf2\xfb1:\x83Ggps\xfcz\x9d\xc17\xf6\xac\x8c\x9e\xe0/\xe3\t\x8e|5f\x95\x13dJ!\xc9N1s\x8b\xca\xea\n\v?wfv\xd5-\x91H!\x8a2\xa3:6\n\xbd;\xf1d\xea\x05`L\x86K\x9dWkC\xe5\xf9ଢ\xf3,#\x8c[\x91\x87\x93\xf2\xc9\x1e\x12\xacmO\xa8\"A\x87\bV\xc0u\xddM\xbaU\x0e\x89ͬ\x19_L\xc9\xf7\xcb 7\xacե\\v\x04\xe3$/3͊\fHՔ\xaf\xaa\xc9\x0f\x81\xaa\x94H\x18\xf6w\xc6\xd4\x13ۤFi\x8f^ą\xa6w!0\v\t\t\xa4\xc0\x13\xc0\xde-e\xa3\xd1\xe0lM('\x17|\x85_\vZ}Z\xda\x14N\xab:U\xf3j}\xcdf8\x04\x80\xfd\"\x89\x86昺D\x8fv\x0f\xe7 \xa6\xe76\xc8(\u05feaN\x15\x91\fQ#b\x95\xe2*\x1b#\xc2`\xd8҆\xebXj\xa5͆\xc7\x02}\x8b\xfc\xfec\x88A\x10\xab\x9a>\x95Z\xfa\xb2T\xd2'PG\x1fO\x15\x1d\xa4\x86\x0eQA\xf7\xa9\x9fѦ`}v\xbc,\x8cW\x1d\x87\xa8\x8d\xd1\xea[!a\xce\x1e\x06\xf1\x90s^\xed\va)p\xcd\xe6,B\xa37Z\x8f\x84\x028V\x96\x02M\x96\xb6y\x1bo'|\x84\xd3\xef\x17\xce}\xb6\x96\xfcc0\xea\x9b.\x9f\xc3\xc8uG\xae{x\xfc\xba\xb8\xae;\b\xbfH\x96\xfbL\x16)\xd69\xc6\x16b\xbeo\xd4J\xe2\xa9o\xde\x02\x11\xb0\xd6>\xa7\xb2n@p\x86\xdf\v9|\xd8v\xd0wU\xab\x85\x90m\x01,\xeeɒ-\f\x99e\xb0\x82\x90\xb0\xa7ծIN9]\xd8\xc6nZ\xf8\xf0\x15\x11\x92\x18F\"Y\x1aT:Y\x9b\xa1\xb8H#\xd6\f\x1b\xca\x04M\x1b\xd7e\x85,>cw@\xdeC\x91\x89\xb5\xeb\xdf\xc6S\xbc ʰ\x9d\x1b\xd0!\tY\x11\xec\x01\xd7q]fٵ\xc8X\x12\xe0\x9bo\x93\xda%\xd2XQf\x19)\x10Д|\xe4(\x1fγ{\xba\x0e\x8a7^\xc1\n\xe4)\xb9\x9c_\t}mM\xbbvM\x82\x05\x19\x00\x91\xcd\xc9[{{\r\xd1t\x81.\x84\xba\x8b\xb2\x90\xadO\x05\x80E\x01q\xcf\x14t^\xbf\xf2|G\xed7\xf8M#\n\xed\xdfOJ0\x19\x9bC\xb2N\xb2X\xaet\x9e`\x8adݼ\xb7q>\xd5Zi\bQ\x85\\\xb3\x1ctb0l\x82V\b\xae\xc06\x8b\xf2G\xb5\x9aq\xa8\xfbI\r*\xa6\x8cS\xd1\n\xa14^\xcd\x16&\xa5ۧ\xf1\xda\x031\xa4\x9e\xd0,\x83\x94\xb0<\x87\x94Q\rY\xa8_\xd9\xf7\xa4k\xf9\xe0\xf0\xe61\xd7\xee,\\\xfe/)O3\x90\u0601\xcby\xddZ\xd05Ȝq\x1a\xd6.\x80T\xe9J\xee\xb6;B\x93D\xc8\xd4u=\xf2}m\xa8\f\xf5\x8bT\x1c\r\xb5\x9d\x06\xbdnf\x9d\x05\u009de\"\xb9S\xa4\xe4\x9aeu\xa33\xdf\xe5\xcc]\x95\x15\b\xb3\xbf\x1e\xdd`#\xd5\u007fN\xaa\xb32\xc1\xbbd\xce~S\xff\x13\xfe\x10\xa6\xb4\xc6[)}:In\x8f\x8dnj\x80䀉\x80\x82C|\xa8x.\x8c\x1abȨ\xee\xf7W\t\x90)6Ë\x80ھI\x81\"[Ď@\xf4\xaeW\xe3\xa5\xf6\x18\x16\x97\x0f\xee\xf8\xd1\x1c=\x9aeFF\xe02ơ\xd95\x93a/\xbf\xf6\x99\x8b\xcdd2@\x9c\x05IR&\xb1\u007f\xfc\xdaW\rF\xc2\xf4m!\xb1{\xb6\x10\x9a\x1c\x1f\x9d\x1d\x9d\x84\xb7\xd3h\xc3\xf4\xfd?\x8c\x8e\x9c\x81\x95\x91\xa1]\x87\xbafi\xd4 \x96\x17\xd9\x1a\xf1{\x94\x9e\x12\x16\x1bmu匲\xe4~\x8f\\ӖS\xa2\xfau\xac\xdb\x1eZRߟ\xda\xc22\xa0\xb5,\xad\xfe\x10\t\xf4\xf8\xe8\xe7\xa3S\x02:9!\xf7\x82\x1fi$\x81)\xb9\x15\xc6Ώ\x84Y-u-J\xc2\xc1\xb6T\x83\x87\"c\t\xd3\xc1\xd2\xd6\x0f#\xb6\x89(\xb5m\x12\x86\xd7Qa\x13\x9c\x8b\x87\xe8]r\x97Ԋ9y\x8d\xe7ӊpB\x15\xc9\xd8\nΖ@3\xbd\x8c\x9d\xaf\xa1(.\xf8\xe4\u007f@\nl\xb0\xc3\x1d\xbc8\x9fIp\x84\xa89\x06\xe7H\x84\x1b\xea\x9b\xefF\x85\xe0\x8d\xd8\xfe\x16\x02U?\xb2u\xc7\xdb\xed\xed\xf5\xb7\xa0\xdb\x02&\x02\rf6>\xf7\x1bݺ \xe7Bn]Pxx\f\x93MK\xa1\"0B\xb6o\xbeS\xdav\x1d\xb7\xc6\x01\x8f\x89\x8f١E\xbbl\xc7e֑\xcb\xeb\xd8$\xa1\xbf\x89\xd2`iFgٺ\xeae\xa8@\x93WfڱI\xb6\x8c\xe3\x1e\xfe\x19h\x8a=#\xb9\xd2@\x83z\x05\xd5c\xe0\x91j\xcc\xe31\x94\f{k\xe1\xd2-\xacgS\xd4\xed\xd1h\xa0\xe3\xe8|\x8a\xa7\xc7\xfa\x9dbe\x8c\x84\xc22V7\xbf/\xc0\x00\xb7\xf8\x81Ž\xfb}6 G\x8e\xfa+#\xed\xe2\\'\xd1R\r\xa8\xc6b\xdc\"\xdd\x1c\x80\xe8\x99\r\xcdK%\x033%IW\xa4\xc7\xe2h\x00DW\x95\x17\x9a.\xb59\x1e\xa1R!\xb2\xf9Os<\x1dzB3v6\xc7#\xe0gH\xb2\x1f\x89I\x89k\xbf<\x04\x03\x83r\xde\xc9@m\tKA\"KN\xb7\vN\xb5 4I\xb0\xe7^ly\xae\x11\x06Ȏ\xf0\xd2\xfa\xa0Fc\r \xc3\b\xaa\x10\xa1\xfe??\x06\x14F=FY\xd4#\x14EutP\x93\x84\x97\xf9\fdlC\x01\xdfR@\xea\x16\x81ldTF\x82\xbe\xb2S\xf3AL\xafNP\xde\xf3~\xac\xed\xf1\xc6\xcc\xf2\x8f\xff\xf6o\u007f\xf8\xb7\xa9E@\x95\x9f\x19Kӗ\xe7W\xe7?\xdd|~\x87ݬ\xe2\x16\xfa\x04\xf5OX^\x1f)Q\xda\xf1h\x04d\xb0V*l\xfc\x14\xefj1V\x81\xf3\x17[\x87\xacjĞ\xa2\xcd\x05d(_\x80\x93\xc4\v\xa5\t\x1e\x97\xe7\xb4}uR܈\xe4n\xb0\xf5{t\xfb\xee\xda\x02\xaa\r\xe0\b\xccS\xee]\xb2\x8c\xafD\xb6\xb279ݾ\xbbF\xc4\xc4\xec\xa5y\x17}\xe8\xe8*[\x9b\xf9\xf9\xcag\x9bt\x12\x01\x93养\xb3\x8c\x12\t4cJ\xb3\x04\xbf\x14\x13\xf4\xf2\xc3\xcc2<;\xe5EX\xf9G\x1f}\x92Km\xf0\xc7\x1f[\xc7\x10\xba\f\xfeX3ź\t\xe2\x8a\u007fF\xad⑴\n\xa7MH\u007f\vݨUČ\x97\xa8U\xfcr$^䋅\x84\x1b-\x8aA\xd9\x01\x16ģ\xe4\x06\xf8\xfb\x85v\x85\xefI\x1a\xbc\x89\xf6.\xce\xf3\xeb\xcb\xca\xf7,ZAwL\xcd\b\x84\xa9\xcad\xe9\xe3\x1c\x1c\x94:\xc34\x80\xb2\xb0>'\u007f\x11Xh(\xb1\x90\x80\xb7*\t~Z՜#\"\x80\xdb\x1fA'\xa1\xe7\x02\xfd\".;\xc2E\xd5\xfc&\rK6H$UK\xc0\x1e\xf2\xf0\xc0\xeaKϩ\x12܆=ݦ\xb1`ә)RP\xa5l\xe0K\xd7\v\xb0\x9f\xb8\x16\xe9\xd1Q\xa8\n֘\fYH\x9a\x00)@2\x91\x12샖\x8a{Nf\xb08|W\xea\xe6p\xf4j&鏁\xd1v\x00\xa3\xa1\xd5\x1d~\x81@?\xb5Z\xfd\xbb\xe6\x1d\x89\xa8\xf3\xa3\x1d>B髝\x16\x83\xe5ZH\xfc%Ͳu}\xc8\x02\xa1\xba\xea?]m\xcd6\xb2C\xcf\x01nͳ\xe7\xc7\x18R\xc6\u007f\x8b@\xebN\xfa\xc2{\xafi\xb2\f\xa7\x82\xc04\xf61\xfd\xa6\xef\x18\xd3o\xf6\x8e1\xfdƏ1\xfdfL\xbf\x19\xd3o\xc6\xf4\x9b1\xfd\xa65^\x84cnL\xbf\x19\xd3o6ǘ~\x13<\xc6\xf4\x9b\xddcL\xbf\xd9;\xc6\xf4\x9b=cL\xbf\t\x1fc\xfa\xcd\xd6\xf8\xb5\x05\xca\xc6\xf4\x9b_k\xa0lL\xbf\xe9\xf7\xf2\x98~sp\x8c\xe97c\xfa͘~\xd3\xe3ۣV1\xa6\xdf\xfc\xba\xb5\x8a_\x8e\xc4\x1bп)\xe8%\x9fqr-\xc5,\xba\x91\xd35ƦY\xe2\xd2U\xc4<*\xa4\xee\xa72\xad\xafQo\xf4\xe9\xf5=3\x82\xae\xb4\xb5Wm\xfb\x14\x9a\xce~)\xa1M,\xfaG\xd0}\xe3%uV\b\xfb\xff\xea\xf8y#pn\xfdZ\xfdY~\x9c \r\x8f\x98\xf7\x89\x96ױ\xefЄ\xa7]\x91\xf2h\xadlh\x94<^?\x89\x8e\x8e?Md\xfc\xa9\xa2\xe2{#\xe2\xcd\xd8v\x04\xec\xadh\xf8\xae\xb8v\x8cbݘ\xdd#Ŵ\xf7Ƴ\x9b\x91\xe9\x18\xb3w+\x96\xbd\x15\x95\x8e\x80ڌcwF\xa4#`\xd61\xec]\xd1\xe8\b\xa0\x17\x0fL?]$\xfa\x11\xa3\xd0\xd1\x01\x98A\xcaj\xac/5R\x0fq\x89\xa7\xb7K\tj)\xb2@\x1e\xd7\xe2o\x1f\x18gy\x99\x9b\x83\xad\fcb\xab*\xaf5\x94cx\x9ec%\xbb\r1\x19\xb0,\x05\xbc\x8e\x8e\xb2,\xbc1\x176\x11[R\xb4\xe4U\x99$\x00\xa9\x91I\x8d\xbe~\x81\x10\xff0\xad\xd6\\ݩ\xff&\x8c\xce\xec%ih\x1d\xfd\xe1\xf7\x11\xfb\x1dnUE\xa5\x18\x1cN/@\xb8\x81\xf8\x1b\x9aZ\x10/\xd0\xe3\x9c\rO\x91N\xb0'\x95\x80\xfcM\x941V\xfe\xee4\x82\x8d\x84\x80\x18\xb9\x18\x9bB0\x80'\x0eJ\x1d؟6`p\x13\x85\x85\x9d)\x03U\xf0?\xc6\x05\x16\x9b.\x10-\xa9\x9e&M`w\x8a\x00aq\xbe\x86a\xe9\x01CS\x03\x1e\xed\xfe\xb2:\xe6=\xf0F\xea!^͡\x9e\xb4Ai\x00O\x83\x8e\xe1\xc1\xef/tOd\xe4>Ƈ\xfb\a\x85\xfa\xe3\xc3\xfcq!\xfe\xfd\xe1\xfdH'\xfc\xa0\xd0\xfe\x00b\x89s\xbeG:އ:\xdd\a:\xdc\xf7\x87\xf0#7\xee\t\x1c\xed{\x9c\xec\xe8.\x8f\x00\xd9\xed`\x1f\xea*\u007fd7yl\xe0}\u007fн\x11>\x8fR\x84;\x02\xee\xf1\xa1\xf3h\xfa\x8dc\xe8\x11\xc1\x83HV\xcc8ӌf\xef!\xa3\xeb\x1bH\x04O\x03\xb5\x9a\x8dKT\xaaS\xa9,0k'G\xb8f\xeb:\xc1%u7\xe4A\xea\xcb\x1d\xbd\xe7?\x94i\xa2ʇ\xd7\xf5\xdbuo\xf4\xb5\xff\x92^z\xf2E\xccw[$8|\xe3\xff,\ue258k\xe0\xe4\x98q\xbf\xf7'\xe1<\xcf\x19\ued77\xa6:\xbc\xe6\xec\xbey\xedA\a\xd72\xfe\xe2\x1c+\xe8RR\xea\xa9\x1b\xbdW\xeaD\xa0\x80\xf5RE(y\u007fu\xf3\xd3w\xe7\u007f\xba\xf8nJ.h\xb2l\xb6z\xe2\x84\x06\x8a5\xe45K\xba\x02BI\xc9\xd9?J{3!9\xae\xber\xf2Lw\x90GH\x0e\xc3Y\x02\x0ezkS\xbec\n\x1b\xe2 \fע@(\b\xbd\xfc\xb5-Kȅ\x01b\xf5C\x94;K\x90@\x16l\x15d\xa8\x18\x986\xff\x87дj\xfa`\x0e\xaa9%LpBg\xa2\fb\x8dK \x1c\xb49\xc1\x95_Jp\xd5\xea\x13V*\b\xba\x16pV\xe2uf\x85d9\x95,[7'H\xb3)\xb9\x12^\xe3^\x87\xe9\x02MԽ\xffxqC\xae>ޒBb\xab%\x9bm\x83\xff\x1e\xb8Q30\xdbb79\x9d\x92s\xbe\xb6`,\x97f\x8a\x185\x1bx\xd8T\x9d2\xe1/\xb1|\xf5z\x8a\xff\xf7\xca\xec\x9b4چM\x97\nZ|\xb2\x95\fj5\x176\xcb,u\x06\xeaAn\xdf\aݝ\x17\x1cR\xddH\xf5s+\xba6\b\x97P؛\x1d\x15\xa1A\xac\xde\x130n\x1b\xb2:sҲH].\xd6\xc0I\x9a\x8b\x19t\xf7t\xadex\x15\xd5Rg\xb0\x96稰\x10\xe9\x91\"\x97מ\xf8\xa6\xf6\"W\xc3\xe1\x83A\xe2\xbd\xde+\x9a\xb1\xd4NΆ+N\xc9k\xf2\x9f\xe4\x81\xfc'\xaa\xab\u007f\f\xd5G\xe3\xa5|\xbc\v\xc1ڣ\x97׃v\xea{\xc3t\f\x1c\x83]-Ȍ\xf14\xca\x1a\x81\a\r\xd20s\xb7\xe3\xcfv[\xba\x99\xfc\x8b#X\x1bݸ\x9c7o\u007f\xd5/\x8bd\x89\x99ޟ\x85\xd2W\x8e\xf9\xb4\xef\xaa5\xb3\r\x86\x88*WNu\xb2lsF\xa3\xbe+]3\x98pȩ\xc0<]\x9b\xe2\xbad\xc1n\xe6/s@c\x12JZt\xf9\x98\x14\xb4ar\xa3\xbf\xd5\xe9ŶQc\xb8\xefDzf\xa7\xac\x9bŦ\r\x11\x16\xe3\x84ڡ\xb3;\xefAL\xc1o]\xbae8]B\xb9\xadA\x99\x83\x94\xb6\u007f\xd7,<\xfbX\x81\\\xb1\x04\x82\x890\x9a\xc7\x15Rh\x91\x88\xe0\xfb\xf4ۉ\x15\x0e\bzݭ{\xf7C$-\xfd\xf5\xfd\xf5)\xb9}w\x8dWZ\u07fc\xbb\xbd\x1e\x92]Kȫ\xdbwׯ\x9e\t\x991\xae\x9eI[5\nz\xd3o]\x88I\xf3<\x17\xfeo\xf8Ќ\x910\xc9i1\xb9\x83u\x80\xe2\x18\x8b\x9b\b\xcclO\xd7.:\xa7}\x13\x92%Д\xbd\x90\x1a9\xc7D\xea9u\x17\xcb\xe5b\x15\xe4GA3\xca\xc3\x06\x9e\x16\x82\x19{ĵtnV\xd0\x05\x00\xdd{\xe7\xfcXA7V\xd0Uc\xac\xa0\x1b+\xe8\xc6\n\xba\xb1\x82\xae\xe7\x18+\xe8\xc6\n\xba\xfe\v\x1d+\xe8\xc6\n\xba\xb1\x82n\xcf\x18+\xe8\x0e\xceg\xac\xa0\xdb7\xc6\n\xba\xc6\x18+\xe8\xdac\xac\xa0\v|y\xac\xa0\x1b\xf3B\x0f\x8c\xb1\x82\xee%煎\x15t\xfb\xc6KϚ\x1d+\xe8^\x88\x97\x9e\x8c\x15tc\x05]c\x8c\x15tc\x05]5\xc6\n\xba\x9dc\xac\xa0\xb3c\xac\xa0\xdb1\xfey-\xa5\xb1\x82\xeeeYJ/\xdd\x16\x18+\xe8\xc6\n\xba\xa0\xb7\x82(\xcc_\xc9\x1f[\xb1u\xf4N\xe4E\xa9\x81|\xf2\x80\xaa\x03\x15\x96\x9f\x8a\x19\u008d\xa2\xad\xe7l\x92\x9e\b>g\x8bRb\x99ԙ\xbd\x9b}\x92\u0605M*\fM\xaaٝ=u\x9aW\xc6r\x16RDgF]\x95v\x1d\xad\xe4D\xc9\xd7a\xd2u\x90l-\xa8\xd6 \xf9[\xf2_\xc7\u007f\xff\xddϓ\x93\xaf\x8f\x8f\u007fx=\xf9\x8f\x1f\u007fw\xfc\xf7)\xfeǿ\x9c|}\xf2\xb3\xff\xe3w''\xc7\xc7?\xfc\xe5÷\xb7\xd7\x17?\xb2\x93\x9f\u007f\xe0e~g\xff\xfa\xf9\xf8\a\xb8\xf8\xb1'\x90\x93\x93\xaf\u007f\x1b8\xd1G\x95X\xed\x03\xf8\x1d\xd2J\x1d\xcdC֜\xd3\a\xc3EC\xb7?\x17%\xd76-Ԟ\xea\x8a\xf8m\xe4\xf39.\xfc\u007f\xaa\x93H\xe2E\xb0\x8b\x01\x8f\a\xf2\xe0\x18\x0f$9\xfa\xe4\xa8e\xf3HZ\xc5\xe6\x11\x8f\xa4\x17\xb4\xa1g\xf2rN\xaa92EDδ\xb1\xd2\xe7B6+]C\x93K\x99n\x99\xa2\x8e-a\xf66Ţ\xe4\xe8\xeb\xe6\x1buDB/A\xde3\x85N.\xcak\x9f\x022\x8cI\nsƃ\xd32P\xd5\f\xf68\xbfDV\x15\U000520a4\x94L\xaf\xdf\t\xae\xe1!\xc0&o\x13\xfd\x8d\x03CDa\xb3]}\x8e\x93M\x11\x0fa\xb6%Ǫ\xae\xe0\r)Dƒ\xf5\x99_\x10b\x1e\x1e\xf4Y\xc0\xb7\xfb}QSuW\xef?L\x8c\xc9Po\xf3\xd6\xf7\x9fZYD\xc9|-يe\xb0\x80\v\x95\xd0\fir\x88\xa9x\xbe\x03f\xe0\xc92(\x90\"S\xe4~\t\xe6\xe4\x12jֈ\x0e\x8b\x84r\xb2\xa0\xc1\xa9B\xb9١\xc2O̐\x99\xe1\x02Z\x91\x82J\xe0ڃ\x0fe\x89X\x94=\x13\"s9\xf1ٺ\x9e\xbb+@\xe1\xe2'\x0e\xf7?\x99o\a\xbb\xe73\xba\xa8\nc\x14\xe8-oM\xec\xb4wm\x93M\xb7.\x81\xd0잮C\xa7{\xbf\x84\xcd\xf91\xf5\x96\xbc9\xc1\xb3I\x15\xa9\xbe\x18\xcai\u007f\u007f\x82q\xc3w\xe7\xd7?\xdd\xfc\xed\xe6\xa7\xf3\xf7\x1f.\xafbآ\xd9)\b\xba\x14.\xa1\x05\x9d\xb1\x8c\x85+a[\xd9LMP(\x86\xd2\xf4,\x95\"41\x16\xb1,K\xce\x19_4ꋇ\xe4*7\xdb^ \x99\xcdۓ]H\xcaó\x16g\xeb\rb\x90%\xd7,\u007f\xb6\xc2\x1c\x9a\x0e-\xca9OSH[\xa8\b\x86\xf78ٗ\xef\xfc\x14\xd6uǍ\b\x98\x84\\\u007f\xbc\xb9\xfc\xff7(q]\xc4'\x8b=s\x1d\x03!\xe6\xc0\f\xdc\xd5O\xb6\xc2p\xdc\xd7\xce\xf1K\xaaO\xa9\xe4\xf9\x90x\xfa\xa7\x92\xb7\xbbn\x15\xb1R*\x17)Lɵ\x15ɠڰ\xe2[AP\t\xc4\x00\xe4\x9a\xd1,[\x13c\xbd\xadh\x066\x81\x1fk\xe7\x82\x15\xac\xeel\xaa9\xcdT {\x8e\x95\xabFq\xf9`L\xd4\x01;W\xc1 )p\xa1\x9d\xbd\x1cA\xf7b\x8e\xb0\x88\xb5\x99\x1bIk-\xf9\x15\xa1\x1c\xd6b\x95)\x8f\xe9\xebj\xd6\x18\x11\t\x84Y*P\xddb\xb5\xb2\xa2#r@$\xd0\x14k{\v\xaa\x976\xab\"\xa7\xea\x0eR\xfbC\x94V\xec\xbc\fv\xb6բo\xd7\x05\x909P]\x06\x87fP\x1b\xb69*\xc0\xe9,\vu`D\xb7O\xa0\xe9G\x9e\xad?\t\xa1\xbf\xa9JQ\a\x90\xed\xf7ΦiG.\x8c\x82\x1b\xca\x18pn\x13\xdc8d\x03\x8dJYOm\xa1\xce\x18\xf5\x9cL@\x96\xfc\\}+E\x19(ҷT\xebo/\xdf#/,\xad\xfd\x01\\\xcb5\xb6\x01\bg\x04\xdd\xf6\x15\xf9\xab9w\ue905\xaa,\x9e\x05\xccI\xc9\x15\xe8)\xf9@ׄfJx\xb3.ؚ\xbd\xc6,\xbf\xa6\xffe\x8a\xee9\v\x8c̄\x0e\xe5+\x1b\xe0\x90\x05l\u007f%Էg\x90i\x03\xb2\x95/\xce\xcco\x03j(Pz\a\x8a\x14\x12\x12H\x81'\x81\xb4ڈ\xad\xfe\xf1_\x9f%m\v\xa9\xfcJp\xc3@\x06\xd0\xf9%OYB\xad\x94\xa3\xbaM\xa7\xa1\x8aJ\xa9\xb4\xb7\xc9)VD#\xfb(\x15Hl\xe1\xa5e\t1[\xfd\x97r\x06\x19h\xeb\xb2\xc0\xee]T\xdb\xd6\x03,\xa7\xc1\xb7\xbbS]\x896-\bpUJpNaMR\x011\xf9en\xd1\u007f\xbd|O^\x93c\xb3\xea\x13$\xf59e\x19\x96\xfci\x1a|Q\xfa\x86\xc7c\ue9c7\xa8\xc4\x13O\x82\xbb8!\x13>%\\\x10U&K\x8fK&x\xe5\x0er\xb9\xb5\x11\x91\xb5-泋\x9d\x84\xba\xdbk\xe6\xf3\xcf\xc3N\x06\x89\xbe\xbf*\x90\x03%\xdf_\x9f\\\xf2Ż\x95\f?i\xef\x14\xb2\x01\x92\x83\xa6)\xd54\xec:|\x84\xc8\x1b\xfdbFB\xde\x00\xfa\v\x93\x8b\n\xbec\xbc|\xb0ɭC\x9d\xab7\x17\b\x8c\xb8\xe0\x89\xb5\x13B\x05NQd̶\xc8\xdb\xe8\x04m\x19y\x15N\x1c$ \xbcLCFN\xb3L\x18\xa1\x1e\xae\xf9S\x9e\x8a|k\xd9Ƙ\x83V\x1f\xf1)r\xfcP\xf8㱪\x81\x0e:V\xf1\xee\xeb\fV\x10\xdc\xfep\xb3/\xba\x81a\x8c:O'\b4\xc2+\x98\xd1\x19dV\xf9\xb2\xa7Dm\x9f\x92Hoa\x94\xabQ\x8alh\x89\xe2'\x91a\x9e(\xad\x90c\x80\xfe\np\x83\xaf\x0e\xc3\rziZ\xb8\x89\xf4&\xbf4ܔ\xc1\x1a\x17\xd9čQ\xdaڸ1@\u007f\xf1\xb8\x89t\xc1\xdf3\x9e\x8a{\xf58B\xfc{\v\xccs\xefĈ\f\xcd\xf8\"\xd81V\vr\x9ae\xad \xe9pI\xee\x13U|\xf7\xfe\x0e\xb9\x15\x1a\xd1u&]\x89\x97\x19\xb4\xdd8\x03\x85\xd7\x0e\xb9\xda%)C=\x85[r\xf5\x8bI\xcaE\xae\xe8;i\xbe\xa9\x19\xcdn\x8a\xd0V\x97d\x93\x16\xbf\xfdps\xde\x06\x18\xd7\xd7\xf0\x1e\xaf\xbd0\xb86\x10\tMs\xa6\x14\x1a\xf10[\nq\x17\x01\xf2\xd8\xe7\x17-\x98^\x96\xb3i\"\xf2F\xaa\xd1D\xb1\x85:sgrb\xf0r\x12\xf1\r\xc63\xc6\x1ba\x06\xbc\xde\xc1\x19\x88f!\x11 \x93\n\x9bHp\xaes\xb6\xcb\x10\xd8F\xf7U\\\x85\x1b6\x8ayVy\xb2MzWQ\xfd\x80\x0e\x90_$>\\3\xd1F\xc1\x98%\xc4z7\"\x80\xe2\xfe\xd9\x18\xd9\xf3\xaa|\xdec\xf2\b\x18Fω\x03e8\x99\x13<1\xe1\xf2.\xdf˖7%\x02p\x97\xff\x05\x81\xb6\xbd*Q\xc7{\xdb\x0f\xd3\xf2\xacD\xc0\xec狉\x00\xbc_\x1a\x92\xb8\x1e\xb9O#\x11\xc9SHE\xf2\xec:]L.\xb0\xad\xc0\x1f\xd4b\xfc\xa6\x01\x83\xb0V\xac#`\xcdN\x1f\xb3]F\xaa\xee\x05x\x9f\x15vFa\xffcU\xac\x107U\x9dE΅M$o\xb6\x1eq}\x96C\x88\xa5\xe4\x9ae>\xfc\x9b\x17\x99\x91ܭ\xd9\xda L\xd8u$\x8d>\xe7\xa7\x15\x1a\xea\xa6\xea\xae\xe5J\x88\xc2\xfbߥ҄Vy\xac\xbe\xe7\xc2u\xf5!\x83\xca۰Y\xba\xdb(\xb0ݟ\x16f\xd2+\x96\x02I\xd9|\x0e>\x0fw\x06\xa4\xa0\x92\xe6\xa0\xc3re\\Pl\x06\vf\x93#ŜP\x83\x86\xa3#U\x17\xff\x87`\x00S-\x99&9[,\xedA&\x94d\x82/\x88\x8fJe\x82\xa6\xc4\xf0\xd0\x00\xa8B\x92{*sBIB\x93%\x9c\xda\\䴔\xd8{V\x03M\xd7\x13\xa5Ü\x82Fu\xc6\xf8\x90\xbb'*ٮ\x82\f\xdc)\xb4pg\xa0\xa9\xcf\xd6\xf0I\x17^kk\x1e\xd8\x00\xb8\x1e\xda<\xa3\x8b\x97ҭg\xec\xa9\xdf9ƞ\xfan\x8c=\xf5\xdbc\xec\xa9?\xf6\xd4\xf7c\xec\xa9?\xf6\xd4\xef\x1ecO}\x1ccO\xfd\xb1\xa7\xfe\xd8S\u007f쩏c\xec\xa9\xdfg\x8c=\xf5\x9bc\xec\xa9\xdf\x1ccO\xfd>c\xec\xa9\xffO\xdc)r\xec\xa9\xff\xb2:E\x8e=\xf5\xf7\x8d\x97\xdeGs\xec\xa9\xffB\xbc\xf4d\xec\xa9?\xf6\xd4o\x8c\xb1\xa7\xfe\xd8S\xbf\x1acO\xfd\x9dc\xec\xa9o\xc7\xd8S\u007f\xc7\xf8絔ƞ\xfa/\xcbRz\xe9\xb6\xc0\xd8S\u007f\xec\xa9\x1f\xf4V`\x1ae\xca\x02\xbao\xf6i*\x13\xdcE\xd5\x17\xa4\x12Jf\xe5|\x0e\x12uC\x9c\xd9V\x1eI\x00X\xdf\xfa\xcf'6\xfa|\x0f\x05\xfa\x14\xbb\xd8\xd8z\x9a\x10\xed\xbfsJ\xbe\xaa\xf6\x9e\xae\x15\x91\xa0\xc2:\xe00N.>~S\x1bT\xe1\xddpb\xda\x01\xe0J>\xf2$6u\xb6\xde\xfa\x8e2\xe3\x10\x8c\xda\x04\xb2$\x13\xca\xe66Y\x14'K\xca9d\xce\xfe\bJ\xeeYREf\x00\x9c\x88\x02\xb8\xcd\x1c\xa4D1\xbeȀP\xadi\xb2\x9c\x9aه\xa8\xc8n\xdb]\x9b\xd2z\x96JK\xa0\xb9\xdd~\tyX\x83X3=B\x13)\x94\"y\x99iVT\x13$\n\xb0dG\x85f\r\xfbM\xc5\x04)\xb0i<\xb2\x84\xd3z\x05\x16)!\xd3l6\xaaC\v\xed\x14\xfbc\xe7\x85^WI\xc5@\xe6L\xaa\x90]J2\x86\x86\x00\xae\xd7\x16!\xe2\x1cO\xd1\x12\xd4\xd8n\x141\x1a\"K,Jy\x8a:Q\xa1\x15&\xc96&\xe9>\x9a2\xe5\xf4g\x15\x92@G\xb5\x17},\x87\x1a\xa3H\xba)~6|\xc6\xee\xe5\xc6\x14\x1b]l\xeb\f\xea\x10\r\xc93;\xec\\\xe6\x99\xc9i\xb3Y\xba/\xf3\b\xf22`:X\xcd4\xdd\xfa\x91\xf49\xac\xccه\x04\xd8*\xe4\xec\xd3\x1d\x9c\xefI\x19\x9f\x06\x993\x8ei\xcb\x1f@)\xba\x80렰\xd5.\x83\x0e#W5\x89\x04\xa9\xf4s\x96\xa1Ӧ֬\xea\xb4\xc9#՜r\x00\xd0ܮ\xaeJǿ\x97Lk@\x92Ŗ\x83\x18\xa7\x0f\xd2\xe9\xb7&\xd6l\xfd\xf6\xc1\u007f\xce~&D\x00*\xd4sxj\xd3\xf3g@f\x92\xc1\x9c\xcc\x19\xa7\x99\xcb!<ŖD!\xb4e\x9d!J\x19c_p\x9f\xa2\xe6\xb12%\xdf[\xb4\x84,_\x96<\xc1\x04F\x97\x8c\xceE\n\x84\xcd\xc9\x02\xf3\x1a\xa5M\xa9\xff\xd7\xd7\xff\xf1\xc7\x00\xa0\xb3\xb5\xd1I1H\xae\x85\xa6Y\xb5m\x19\xf0\x85\xa1(+ h\x16\u2e6bk\x8f\xab\xdd\xc7Kz,\x82\xdf\xfc\xfen\x16\xa5\xaakA\xceRX\x9d5\xe8q\x92\x89E\xd7\xf5G\xfd\xd5\xe4\bú\xe3\bc7\xfd\xc8C\xec{\x9c\x91\xa5\xb8\xb7\xcd<\a\x9d\xb7:%\xbe\x10E\x99\xd9`\xc67\xe6\x84\xe3^\x94\x01\xfc\x8dlW\xc3vr\xaf0\xd3\xdcOkC\u07b8d]\xbf\x8c\xa0\xb5c\x99\x9cs2W\xad\xcdJ\tS\xf2\rͲ\x19M\xeen\xc5wb\xa1>\xf2\v)\x83\xfa\x92y\x9c\xd9j \xaa4I\x96%\xbf\xb3w\x8c\xf8\xa9g\"\xc4'#J]\x94\xdaW\x1850Z\xad\x1d\xf9qP\x02\xbcU\x87\x9c\xeaҘ\x19<\u0a7bg\xe6(s\x02f\xf5!\xc2\xdc\xf0\x85L,\xaa9\xab\xe6A\xfe\xfd\xeb\u007f\xfdw\xcb@BV/ɿ\xbf\xc6\xe2\x02uj\x05\x0eJo\xa30\xe64\xcb@Ʋ\x06C\xe2]\xac\xe0I9\x81\x8e=\xf4O`\xba\xde\xde\xfe\r\xedV\xa6\x15d\xf3S[\x9a\xea\x1b\xd2\x06\x80#E\xbf\xcb(˝k+\x18bx\xc8)\xba/v\xb8\xaf~Ҡɠ\xd7\x02\x91;\xa0\xf0=$\xdb\xd22 \xeck\x1e˛\xafE\xea\xc0 K\xb5\x1d\xe8\x8d1\x18\xb8\xf9;\x8a\xfb\x86(\x01Ø\xf3\xe7\x1a7m\xdel~\x89b\xce\x16\xe2\x17b\xc98\xed\xc1\x1c\x19y\xb1[\xc0\xb0\x06!M\xf7\x86#\xa0\x86\xb9\xe3\xbc\nS\x9b\xe3\x11\f\xdcP\x8c\x9b\x1a9z{\xf4l|\xd9\"Y\x8a\x82.\"n\"\xdb\xc0\xf5&0\x92\x8250\"J\x1a\x8c9\x8a\xf0lj\\\xe1\xa0BZu\x01\x8b\x00i\v\xb1jy\xeaM\x16\xdbb\xe2>8\xe7\x9b\x10*E\xc9S\xebS\xaf\xc3+\x1f6\x10q%x\xf8t\x99r\xedɰ\xbd\x00V\x0f\x98߰A\x00\xe3\xe4\xcd\xf4\xcd\xeb_\x8e\xf8\xc65l\x88\xef\xa8\x16K\r\xbe\xf4l\xab\xf7\xf7Q\f\xc2\xc0\a\xe7v\xac/\x90`qm\xdf\xed|&\xf7\x92ihܲy\x8c\xa6\x91\xb1p\x1b\x8d\x85N³\v\x06\xdeN\x13ߟ\x9b\x10U\xce\x1e\x9d\xdf[F\x1d\x8c\x05d2]\x1ei\x15\v\xb1CT4Q\xfd\xeaU0\xc4c;\x93#\x85\x9d\a\x82\xb7:\xfa8\xb8m\xbax(\x82\x1b{\xb6\xb6\xea⡠\xe8\xf7.\xda{\x16\x8c\b'\x8cw\xefY,Ď=\xfb\x13,\xe9*B\x9e)\x96\xb3\x8c\xcalm6\xfb\xc6b\x90\xccJM\x80\xaf\x98\x14<\x8f\xb9\x87lE%\xa3\xb3\f\x88\x04l擀\"\xbf=\xfe|\xfe\t3\x8bN\x8c\xe4\f\x86\t~WJ\xc5\xf8b\x8b\xfa\x1b\xd3\x1d\xc6[^\xbd\xda\"`\x8f\x17CYᒘ\xa7\x15^\x8dƐ\x97\xba\xb4\x97w=$Y\xa9\xd8\xea\xb9\xe4E\x9c\x95Vi\xbb\xbf\x02#\xcd5Xy\xcf\x02\xf8\xc3F\x1b\x99\x9aය\xb5\x04\x86\x83Q)\xab\x1b\x8au\xa6l\x04q\b\u007f\xb9P\xb3\x87\xacs&\xbb\xb6U6\xfd\xdc^9\x1c\xe2\x1a\xd8J\xad\xc1\xa6\x81\xcf\xebV\x0e\xa3\xde\x00\n\f\xa4\xbd\x10\xaas9\x82}\xa6\xdcVJ\xed{\xc4\xdeE\xee\xee~\xa7\x0f\x98\x80gos\xef\xb521\xb7I\x11\x9f!\x03)\xbcи\xa7LW\x95\t\x8c3\xfd.\xec6B4Tl\xab\xba>\xdb\x1d\xb0\xd1=w\xa2\xd7c\x87\xb6i?9\xed!\x9f\x03_\xdf\xfdݝ/2\x9ede\n\xef\xb2Ri\x90\x9f\xfc\xb5\xef\x9b3ۈ\x8ev\xbe\xd3(:\xf0\xd7e'\xf6\x91\x89JD\xd1q\xe8e\xfdj\xa5S\xb8\t\xa5\xbe\xb0\x10\xebUܥо\xfb\x82\xd2BBg\"\x14/\xb3l#\xfd]\x96[\xa4b\x9e2\x1aBgf\xf0nM\xddO͘h\xaa\xa0=\xd1\xd4x\xdc6\xb3S\x19KЍ\xcd\xfd?\xd8\xff2\xb3u\x9f\xd8Z\x97\xdd9\x9bg\x83ɋ\x18]<Ŷ⼆o\xeb\xe5\xecg7\x17\xbdÍ\xb6\xe7\x88\xf4@\xd36\xad\xf9\xcf\a\x91R\xfd\xf4\x06\x8a<\x85\x1c\xc6\xd06q4qTS\x9a{nF\x93\xbb\xb2x\t\b\xc3\xf6\xfb7\x90\xa1\x1cߋ\xac\xef\x9aOZD\xe5\xa0\xe9\xeaʹ\xfd/\xc6Fe\x99\xc6,\xd4\x0e\xd5\xc9^܍x2*\x04\xe3)[\xb1\xb4\xa4Y\x8b\xca\x1aX\xaa\x91\x89%\n,\xdb6αI\x98{\xbb\x85S\xe2ӡ\x82\xce\xe0>\xef(\xbaJ\x8c2\xec\x12\"\xbb\x98h\xdb\x01\xb7\xf1\x82Ŝ\x8b;\xba\xdb\x0f\x94ǝc\xcdF\x93\xdfQ\xbax\xeb\x1a\xc0\xf8\xa7p\xbd\xe7W\xef\xbb\x15\x90=\xce\xeb\xf6\x15\xdf{&\xe2\xceD\xb5\xbdKZ\xb9EwIM̔W\xa7\x84\x92;X\xdb\x04J\xca]wN\x0fBBF\xfde\xb5w`S\x15\xec{\xdd\v?첾\x83=ޠ\xd6r\xcd\xf7|\x00\x18\xd7m~\xa8\x02y\xd5R\xdd}\x14\xfb\xe4\xf1\x9eh]\x0f\xe9\xef1\xd2s\xda\x15\x02\xab[\xb2\x95E\xb1\xb1\xd6\f:\r}-Y\x81E8{f\xed.\xb7w\xd8&\x9fi\xc6\xd2\n\xb8\xa5\xa8K~J\xae\x846\xffs\xf1\xc0\x94V\azL\xbf\x17\xa0\xae\x84\xc6g\a\xa1\xc4N\xaa'B\xec\xc3H\xa0\xdc\xf26,%A\xf8\xd5\xf2.\xe7\xee\xc2\n\xbb\xbe=\x8b`\x8a\\r\xc3d\xdcʫf\xd8\xca\x01\xf7\xf5B\\\xf0\tr$\x0f}\x0f\xd0jӘ\xf2\xa8\x14\xb2\x85\xaf\x1d\x1f\xda\x03s\x06\xc4}\x1e}\xb8\xf6\x1dL\xcf-2\x9a@\xea\xdb\xe8R\x83\v\xaaa\xc1\x12\x92\x83\xdc{\xf7da\xf8\xd4\xee\xad;\x18\x06\xeb\xa5\xec\x0eUM\xef\xa0\xfb\xbd\xc9\xfe\xed\x8dV\\\x1d\xbfG\x01\u05f9z\x9a\xfa\x8e\x9c\xd7\a\xf8\xd3\x01\xfcl\xcb\f\xfbQ'hia(\xfb\u007f\r;EB\xf9?RP&Ք\x9c\xbbJ\x82\xceo6\x9fw\x9aG\x13\xb4\x81\xca\xd4\xc6M\xea\x94\x13\xb0E\xb1\x9d \xc5|K\xa2\x19C[(\xcbū\x90ȫ;X\xbf:m\x9d\xbc]\tl\xaf.\xf9\xab*˾}\x0e\xbc\x9c\xb1\xed\x81_´\x9an\t\xc1N\xb0{\x05\xe3\x1e\x8a\xd8\xf9O\x95\xa6\xfb\xc1&\xd6l\xees?Z\xd8C\a[\xfdk\x9a_k\x11BS-m\xa9\xf0۟\xa3r\x01\xbaK\xd9w\xba*\x86٧䜯\xb7\xa0v\x97YW&REQE\xabú\x90.\x91\xbb\tȥ\xcd(\x9a[\xf8\x9b{\xb2\x13\xe9(\xe8\xe4\n\xaeD\n\xd7Bng\x18\xb4#\r\x9bOwX\x85\x8d\xa5\x8b,Ŝi|tk\xa1\xa8\x87:\x1d\xf4qL8\xf7\xdd\xeb\xcf\xfbW\xf1\xa9zl\xff\xf4)\xf6\xf3u\xbbq\xfdy\xc7\n\x14\xa7\x85Z\nM\x8eW\x8c\xba\xaa\x13Q\xa6\xae\xe9\xbc܊QD\xaeM%KH\xcb\f\xba\xee%\xd9j\xe0\xe3\x1f\xf4ZX\xc9\xd9?\xca\xf6\x15-\xdes\xe3\x9e\xde&\xec\x1a\x0f\x95Y\xda\xf0)\x1av\xf2'\xdc;\xff\x1dg\x8f9\xb8\x86b\xbb<\x02\x15@K\xdbBi\xac#\xe1\xbaѲ\u009bo\x89k\x1f\xec\x1eg\xaa\x9am7yo\x1d\xfa.q7q\xd07\"\xb1\x9d\a\xc4fH7\xdf\ue8a3\x1b\x9bG\x9d\xd0B\x97\xd2_hTJ\xbch\xa0n\x88L=f\x1c\x12\x1a@w\xa9\xde\xce\x17\xc6\x04\xbfe9(M\xf3\xad\x1b\xec7;\x91o>o\x90+dj'e\xaf\x13\xa8\xcd躟\xff\xb6\x15I\xeb[#\xd2i\x03\xb2\x05\x82\xba\x90\x01\f)\x81\x15p\xe2\n.0\xd6kM\xf4-\x90\xb7\xa8\xfa\xcb\x15z\xb8=\x14\xcc\xec\x9c\vi\xfb\xfcW\xd3\xdeܟ7\x1e\xde\xf0N\x9ac\u07b8\x12\xdf\x1d\xc9\xe3\x8e\xeb\xc4ё\x91\x98\xd9n^\x84\xf7L^\xc6{*9\xe3\x8b\xfd\xcb\xfd\xde=\xd4\xc1\xcd\xdc\xfbO\xc7\xcf\xfc\x04\xdb\x1cm\x87#<\x94\xa3u\xc8\ue35fV \x95\xf5h\xbc\xa9\xffBl\xd9p\x8c\xfb\ab\xa99m\xe0\xdeM\xc5\xfdR+\x04\xb6\xe0ع\xff-\xda\xef\x18O\xdf\xfa\xa4\x96\"+%\xcdܟ\x89\xe0\xd6tQo\xc9\x0f?~E\x1c\x06>\xfby\x98\x1f\xff_\x00\x00\x00\xff\xff\x06\xb0x\x95\x0f\xb2\x01\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x1c\xcbn#\xb9\xf1\xee\xaf(8\x87I\x00K\xde\xc1^\x02\xddf<\x1e\xac\xb3\x8e\xd7\x18;\xbe\x049P\xdd%\x891\x9b\xec\x90l\xd9\xcab\xff=`\x91\xfdT?؎\x1dL\x16\xe6\xc9n\x91\xc5b\xbdXU,\xf2d\xb1X\x9c\xb0\x9c?\xa06\\\xc9\x15\xb0\x9c\xe3\xb3E\xe9\xfe3\xcb\xc7?\x9b%W\xe7\xfb\x8fk\xb4\xec\xe3\xc9#\x97\xe9\n.\ncU\xf6\r\x8d*t\x82_p\xc3%\xb7\\ɓ\f-K\x99e\xab\x13\x00&\xa5\xb2\xcc}6\xee_\x80DI\xab\x95\x10\xa8\x17[\x94\xcb\xc7b\x8d낋\x145\xcdPο\xffa\xf9\xe3\xf2\x87\x13\x80D#\r\xbf\xe7\x19\x1a˲|\x05\xb2\x10\xe2\x04@\xb2\fW`\x92\x1d\xa6\x85@\xb3ܣ@\xad\x96\\\x9d\x98\x1c\x13\x9aSG\xb8\xbf\xbf\x9e\xc6\xc1\x13^0c?\xd7\vi\xe1p͌\x05\xcb3\x04\x16P\x80'fh\xfd\x1b\xa5\xc1\uee01\x16\x1d=\x124\xac\x01\xd3c\x912\x8b]\x1cJq]\x1e\x89Z\x03ܧ-\x1e\x83\xd9jU\xe4+\xa8\x05\xcf\xf7\x0e\x92\ued64\xc5\x0e\xc1\x8d\xfd\xb9\xf5\xf9\x9a\x1bK?\xe5\xa2\xd0L4䙾\x1a.\xb7\x85`z\xd5\\\xa2\x13\n\xd4{\xfc\x9b|\x94\xeaI~\xe5(R\xb3\x82\r\x13$\xbd&Q\x0e\xc7\x1b\x87I\xce\x12\x12NS\xacuPT\xb3\x82_\u007f;\x01\xd83\xc1SZ\xafGW\xe5(?\xdd^=\xfc\xe8P˘\xff8\xa4\t\xdc\x00\x83\aZ7\x94\x80\xc1\xee\x98\x05\x8d\x84\x9e\xb4\xaeG\xaeqQ\"\x9eB\x10\x12Z-j\xaeR\x9e\x94\xb2BC\x1b\x82U\xc8e\xe8\x9bk\x95\xa3\xb6\xbc\xa4\xaak\rCU}\xeb`\xfa\xc1-\xc5\xf7\U0007a0c6\x848\x18\x18L\x89\xa0\x19\x03\xb5\xf1\"T\xe1M$i\x80\x05ׅIP\xeb\u007fbb\x97p\xe7H\xaf+5H\x94ܣv\xebN\xd4V\xf2\u007fW\x90\x8d\xd3R7\xa5S\xaf\xc0䲑1\x92L8&\x14x\x06L\xa6\x90\xb1\x03hts@!\x1bШ\x8bY\xc2_\x95F\xe0r\xa3V\xb0\xb367\xab\xf3\xf3-\xb7\xa5iNT\x96\x15\x92\xdb\xc39\x19X\xbe.\xac\xd2\xe6<\xc5=\x8as÷\v\xa6\x93\x1d\xb7\x98\xd8B\xe39\xcb\xf9\x82\x10\x97d\x99\x97Y\xfa\x87J<>40\xed\xa8\xaeo$׃tw\xe2\xed\xc5\xc3\x0f\xf3\xf8\xd7\xe4\xe5\xc1\x9a|\xbb\xbc\xbbo\x8a\x0e7m\x9a\x13\xb5\x1b\xd2T\x13\xde\x11\x8a\xcb\r\x06\xdd\xdfh\x95\x11D\x94i\xae\xb8\xb4\xf4O\"8\xca6\xd1M\xb1θu\x9c\xfeW\x81\xc6:\xfe,\xe1\x826('sE\xee\xb4:]\u0095\x84\v\x96\xa1\xb8`\x06ߜ\xec\x8e\xc2f\xe1H:M\xf8\xe6\xbe\xda\xee\xe8\xa9U}.\xf7\xbf^\x0e\x95:|\x97c\xd2R\r7\x8aoxB\n@\xb6\xb5R\xf1\x96}\x1d\xd6K\x9a;tm\u007f\x1d\xb5#\xb1{]\a\"\x04\xe3\xb1\xec|\xef\xa5\x1d\xfd\x10\xf6\xbaQ\xd4\xeeC'\x87\x9a\xa3JZ\xf95\xdeT`e\xb2T\xb0T\xa0\xfa\xb1˵\xda\xf34\u0603\x0e\xf5\xc6(\xe8QڰB\xd8\a篠\xb9W\xdf\xd0X\x9e\x1c\xf7\xeb \xff\xa5wX\xc9Y4\x8e\xa2v\x87\xda)\x1e\xfd@6\xac\a*\x90F\x18LɈ\xb1\xc7\xc6\xe6묡\x10\x90\xab\x14\xf6~\x1eX\x1fJ\x84\xbb\xbc\xa8\xf9\xb1VJ \x93G\xbf\xe3s\"\x8a\x14\xd3j\xbb\xea\xa1Fg\x95\x97GCȫd\\:ir{\xacCRֿ\xbaݥw\x91L#8\xf5\xe7\xd2C\x04\xdet\xaa\xfa\x16\xc3-f\xbd\x18\x8eȝo\xceku\xbe\xe2\n\xac.\x8e\xa5\xa5\x1cϴf\x87A*}\xab6\xf1X\"U#\x82Q\x16\\uǾ\xb2>\xbc\x02\x97*\x14\xfe\xaf\x99D\x9b\xcd]\xd8kf0\xe8\xba9\xee\f\xf8\xa6bPz\x06\x1b.,\x92\xdf3\x8ebc\xeb\x9b\xe4\xd4k\x91%n\xd7t-c6\xd9]V!\xe4d\xff\x0e\x85\xbaý\xaf\\F\x12\xedM~\x122P\x86\x81k\xcc|\xde\xe2\x9et\xa0\xfeB\x9eڧ\x9b/\x98\x8e\x13\nb%\xf2h9\x9f:(7\xa7\x0fa@\xfcb\x82CUEX>\x1fu\x06\f\x1e\xf1\xe0\xbd &\xc11\x8aY\xca\xc7\x0e\x04\x12\xc7D\xa2\xc4\x18\x99\x88G<\x10\xa0\x90\xeb\x8a\x18\x1f/\x1a\xbe=\xe2!\xaec\x87\x94\x0e\xb3\x90\t\xf04u\x1f\x88 \x942\x99CF\xa0\xcc%i\bX\x15\xb3H\x98cn\xcaVr\xe2E˭\xd8\xd8J\xe3>\xe2\xe1\x83\xf1\fsڱ\xe3y\xf4\x82\x9d\x01\x06\x83\xa4Ge&\xf3\x81\t\x9eVSy}\xb8\x92c^w\xbb\xdd({%\xcf\xe0\xf2\x99\x1b\x87\x9eL\xe1\x8bBs\xa3,}y3\xc2z\xf4_DV?\x94TOz3\xef\xe8\xd1L\x90F\t\xbdoW>¬X\xc5\r\\I\x17+\x05\xbaP\x9a\x9b`Ƌ%\xa1\x94\x15\x862\xa1R\xc9\x05m\xb4˞\xb9\xa2a\x06\xf6(\xdd\xe2N\x13\xbdƴ\xd1P]@\xe7Q\xbbw{\x8f\x87\xe0\xd3\xf7\x82%\x98BZ\x10QY4Dc5\xb3\xb8\xe5\td\xa8\xb7\b\xb9\xdb\vb\xb9\x11m\x9f}\x9b-s\xb1\xaeAق\xa1OcPZ8\xbd\x8e\xeaW\xb2?\xa2so>z\xbcs\xcc\xdah\x83&?&\x82\xda\xcdc\xdf9\xbb\xc4,\xee\x1c\xfb\x0f\x1e=\xbf\xbff\x8c\x12\xa5\xbf\xba-\x92\x84\xfd7\xc8\x19\xd7QZ\xfe\x89N\xfd\x04\xb6F\x87\xac[s\"7\a7\xe08\xbeg\xa2{\xda1\xb0D\xe5,\x10\n\xef\n\xa8͑\xe7s\x06O;e\xfc\x8e\xbc\xe18\x90\x1cn7n\xe0\xf4\x11\x0f\xa7gGv\xe9\xf4J\x9ez\x17\xa1\xab\xf5\x11`+\x8fCIq\x80S\x1a}\xfa߹S\xd1\xd2\x19ّΆ\xe3\x1dq\x17ɖބ\x1bZ\x1d>:\x17z\x1c\xfbH\xd9̕\xb13\x10\xbaU\xc6\xfa\x8ch\xcb\u1757o\x03/W!\xcf\x06lcQ\x83\xb1J\x97G}\xceHv\xd2Ǝ\x8bf*\xe0p\x8c\xad\xb2w\x1e\xac\v\xe6Nk\xfd\xf6\xf6\xf7ԟ\x01\xba\xbf\xa7 &\xe4\xc0\x10\xe4\\\xab\x04\x8d\x99\x12\x9b(\v?\x91ج\x92\x9a\xcc\aKt\xb66)\xacS\xc9ֲ\xcdq\x85\x1d9g\x87\x13\x97ύ\xbc\xac3\x1f\xee\xffi\x91\x9d\x8f\x1d\x90\xd6g\x19\x93Q\x1b\xd8\x11\xa2\x17~l\xa9b\x01\x94\x0fQ\xf4\xb6 s1\xc7s\r\xc2\xf7\xfd8\x03\x19\x97W4\t||\x13\xf7\xa12\xba\xf8\xb2\xf0\xe1\xa2\x1c]\xb3\xa0\xfa\xd0\u007fH:\xd4rE\xe7\x15\x1a[\x9c<\xce\xea\xcfr\x9b\xa5\xb2\xcdԇ\x83\x9c\xab\xf4\x83\x81\r\xd7\xc6\xd6\xc8F\xc3\xe4\x86\x0eI\xdf.\x96\x93\x97Z\xbf0\x94\xfbŏm$\xe3v\xea\xa9:\xd0\x1f>\xf8\xedkt<\x86\xc07\xc0-\xa0LT!)i\xe4\x8c\x01M\xe2\xd9\x11/\xc8\x10\xbb\xef\xd5\re\x91\xc5\x12bA\x92\xc8\xe5D~\xa99\xe0+\xe3\xe2\xad\xd8hy\x86\xaa\x98ؘ\xeb֮G\xf0c[\x95\x1a\x19{\xe6Y\x91\x01\xcb\x1c#\xa2I\xee\xbc\r\x9ea[\x06\xe0\x89q\x1b*\xe9\xfc\x01\"X\x15\r2QY.\xd0\"\xacq\xa34\xe9\xbb\xe1)V[\u007f\x90\v5|\xee\xd8m\f6\x8c\x8bBG[ݙܘ\x17!\x05\xc3\xf3\xba\x81O,\n\v\"_T::ڥ\x9d\xda\tr=ǡ\xbd\xd5\xf8\xda\xeec\xae\xb9\x93E5\xe5AN@$\xff\xb2\xedA\x06\x11e\xf20\xe4BN\xc0$,\xde]\xc8w\x172\x0e\xee\xbb\v\xf9\xeeBN\xb7w\x17\xf2݅\x8c\x19\xf0\xeeB\xbe\xbb\x90\xf3Q\xf8\u07fb\x90Ә-(\xf79\xf8s\x046Q%\x04\xe3Ȏ\xce\x12\xaaa.Da,\xea\xf8\x9a۫\xfeq=\xf5\u05c9ﲠ\xbb:\xfd\xb2Q\x97[\xd4[VU\x84딭T\x14_\xaf?\xe9\x1dG\x16\xd7\x0e\xd5iǕrM\x15p\xb5k\x90\xab⩲\b\xb9\xdfj\x84\xa9\x03\xb7\xfc\x8d\x8ff5P\xbb\x0e\x8b<\xf3\x12\xdb\xef\xa8>9\xaa\xc4j\xa2\xb0j\xbc\x84[\x95s\fP\xb1\x95\x80o\x93O\xb7ʈ\xbfC\xeaM\xd6>\rW<\x85\x139\xb4l\xffq\xd9\xfeŪP\xff\x04O\xdc\xeez\x17EwP\\\xb8(\xb7\xcd\xc2\xe8R\x16\xc3\x1d\xaf.UAi\x90\\\xf4\xd748\x82\x97\xe3[\xe4\x86_r\x1f\x94\xbeH\u007f\xa7¤\xd8\x1a\xa9\x17WF\xb5\xeb\x9e\x06\r\xfc\xfc\x03\xbc9e\xe5\xf1\xb5OS\xa5Js*\x9e\x9a\xd5L# c\xeb\x9c\xe2\"\xdeɚ\xa6\x17T2E\xd7U\xbe\xcaqe\\\xad\xd2[T(ͨKj\xd7\x1bM\xc0\x9dW\x8d\x14I\xa6\x98ʣ\xd9\xf5F\xa1\xb6gb=\x11UF\x83\xd5C\x13\xa0{꘦k\x86\xa6\xc8\xdfB\xe5U*\x85^P\x1f\xf4\xbauį\xe5u\x8fU\xfbD\xd4\xf8D\xf8\xe5S\x98FT\xf1̫݉\xa0\xe1\v\xebt\xaa*\x9c\xc1\xb9\xe7V\xe7\xb4ko\x06\xc1\xc6\xd4\xe4\fT\xdc\f\xc2\x1c\xadĉ\xad\xb3\x19\x84>\xb9}OH\xce\xe8\xcfJ\xa7\xa8'\x9c\xe6x\x99\x99\x90\x97v\xf2\xab3s\xe7VCy\x1b\xd6\xf5j:\xe3\xfdtRU\xcd}\x02?s\x99z\xf2:\x19il\xcbtu\x9e\xea\x82*\x1f\x81\xa4\xb4\x17b\xe9\x82u\x82\x00\x839s\xf6*\x85\xf5\xc1\xa7\x1e\xcc\x12.Y\xb2kw\xec\x05\xb9c\xc6\x05\x96\x19\xb3pZ\xc5S\xe7\xe58\xf7\xe5t\t\xf0UU\xe1k\xf36\x9c\xe1Y.\xfaվ0\b\xa7m0/\x0f\x0f\x06\xe4\xc4H\x96\x9b\x9d*\xaf>OF\bw\xed\xfe=!zy\xf19\x11\xaaH+\xf8\x83\xece\xf2\x00\xb7\x0f\xe4\x84ЅФ\xbe*\x1b܌\xd2\xe5\xefޤ\xed\xbf\xc5>\x83$C!\xbb\xb1J\xb3-^\xab\xa4\xf1\xcc\xc7\x18M\xda\xfd[\xaf8\x04#Q&\xe5B\xf5Z\u007fx\x13V\xd4\x05W\xe7\xe2\x83\xee\xd4y\r\x87i\xbf\xfd\x18\xd5Xk\xc5\xe4\xa2\xee\xef\xaf\xfdB,\xcfp\xf9\xa5\xf0\xe9\x92EδAG\xdbr\x81~\xd0zh#\xd95_\xc2\xf9\xdcſ\xf9\x10\xce\xecU\xf8[\xf4\xa5@\x96\xe4\x9a\x16\xe1\x87\xfeq\x8d\b\xad\xc14\xd2\xe7!\xd9\x1d\x82ČQ\t'k\xe2\xe2c\x9fp\u007f\x8b\x8b\xdfÎÀ\xd2\xf7\xf9;\x8b\xbe\x87\x16\x16ի\x0f'\x13@\xfdSD\xd3\xcff\xf87\xa0\x12\x96\xdbB\x87\xbd )4]\x01w \xd0ߔ\x9e\xffpF\xfd\x06\xd2\xe8\xfb\x14\xd7U\xb7:\x9a\xab\x1fH\xfa<\xf0@\xd2]\xff\x13\x140\xf46\x85\xdf\x06\xfcCG\v\a\xbb\xf3\xfb\xa8e\x1ad6]\x91\x1f]ݭ\xebQ\x9d\xfc\x05\xb2Ұ\xf2b\xfd\xc0J\xfa\x8ev\x16p\x83OGߚ/v5\xbf\u007fe\\`\xfaP\xbd\x8a\x14\xbb\xa8\xfa\x1d%:,;R\x80\xb6\xcev:w2zL\x88\x06<\u007f0f\xe0\x8f\xfc\xd8\xd0R\x98\x9e\xb8\x95\xfc\xa9\xf3ۀ\x16\x8eh`\xbf\xf6\xf5(I\xe7S\xfdX\xdb\xc7\xfa\xbf\xf0\xb8\x9a\u007f5k\xefϘ鵪\xb4!+ag\n_j\xcdcI\x82\xb9\r\x19\xe3\xe6+Z\xa7\xa7\xf4O\xf9H\x16\xfd\x9b(\xe9\xfd>\xb3\x82\xbf\xff\xe3\x04\xc2.\xf2P\xe2\xe1>\xfe'\x00\x00\xff\xff\x97\x88٧\xd8N\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4V=\x8f\xe36\x13\xee\xf5+\x06\xf7\x16\u05fc\x92\xefpM\xa0.p\x12`\xf3\xb1Y\xac/\xdb\x04)hjd3K\x91\ng\xe8\x8d\x13\xe4\xbf\a\x1cJ\xb6%˷wE\xd4i8\x1f\x0f\x9f\xf9\xe0\x14eY\x16\xaa7O\x18\xc8xW\x83\xea\r\xfe\xc9\xe8\xd2\x1fU\xcf_Qe\xfc\xea\xf0~\x8b\xac\xde\x17\xcf\xc655\xac#\xb1\xef\x1e\x91|\f\x1a\xbf\xc1\xd68\xc3ƻ\xa2CV\x8dbU\x17\x00\xca9\xcf*\x89)\xfd\x02h\xef8xk1\x94;t\xd5s\xdc\xe26\x1a\xdb`\x90\bc\xfcû\xeaC\xf5\xae\x00\xd0\x01\xc5\xfc\xa3\xe9\x90Xu}\r.Z[\x008\xd5a\r\x84!\x19\xb1\xe2H\x01\xff\x88HL\xd5\x01-\x06_\x19_P\x8fZp4\x8d\x80S\xf6!\x18\xc7\x18\xd6\xde\xc6.\x83*\xe1\xfb\xcd\xcf\xf7\x0f\x8a\xf75T\xd9S\xd5\xef\x15\xa1\x00n\x90t0=\v\xac\x8dD\x83\x8d(\xc1c\x8e\a\xd9\x06(\xea=(\x82{|Y=\x04\xaf\x91\b\x1b\xf1\x91\xa1f+\x11\xf0\xb1O\xd89\x18\xb7+\x00v\xc1Ǿ\x863\xecl2P\x96\xe9Ρ\xb3\x8f!\xb0\x9cZC\xfc\xc3-\x8d\x1f͠\xd5\xdb\x18\x94]\xa6K\x14h\xef\x03ߟ\x83\x96@\x14\xf2\x89q\xbbhUX4.\x00\xfa\x80r\xf0\x8b{v\xfe\xc5}g\xd06TC\xab\xac0Hڧ\xbb\x8a\xeb^ia\x84\xe26\fu3\x84\xcbNk\xf8\xfb\x9f\x02ࠬi$\xeb\xf9\xd0\xf7\xe8\xbe~\xb8{\xfa\xb0\xd1{\xecT\x16.ffry0\x04\n\x06\xa0\xc0\x1e\x94N9\x01\x1dC@wJ\x9bq\xad\x0f\x9d\x84\x1b\x1c\x03\xa8\xad\x8f\f\xbcGx\x92\x9c\fW\xaf\x06\x85>\xf8\x1e\x03\x9b\x11\xbd\x98\x9c\xbb\xe7$\x9ba|\x9b.\x91u\xa0I\xfd\x82$1\x86\xaa\xc7\x06H.\b\xbe\x05\xde\x1b\x82\x80B\xae\xe3):\xe1\xa4\x05\xe5\xc0o\u007fG\xcd\xd5p{JY\x8c\xb6IMv\xc0\xc0\x10P\xfb\x9d3\u007f\x9dt\xb1\x9b\xc7+\xd3[u%\x9b\xbe]\xaf\xe4\x1f\xf2\xe3\xb23\x8e>}\x9b\xac#\xcf\xd5\xe5Ƚ\x18\xb5\x83\x1b\bѹԑ\xde%\xf1\xcc)L'\xf2\xec\xd40vW8\x16\x91ܹ\xd6\xcb2\xa2RHŹOpH\xea\x10##\xbarw+\xa7\xf9\x9b\x8f\xa2\xcf 0\u007f\xb2%|\xb9a\x1a\x1d&\xe0B\xccR\xb0,\x88S\xa4+\xf1b\xc7\fȢ\xb5jk\xb1\x06\x0eqn\x99\xedT\b\xea8\xad\x8a\xb1\x8cΫ\xdb'\v\xe4J=\xd5\xfe\xcb\x1eݭ\n\x87\x17EK\xb9\xc9n`{\xbce\xb8>\xed\xa0\xf3&\xc9eYC\x9a\xba%\x9b+\x96>\x83\x88\x85,\xe5R]\xd8\x0e\xaeH\xd8\\j\x8e\xbd?)\xf8qY\x98#\xbf\x11|!\xa93\xd1y\xe5~\u007f\xfe\x1b\xf6⼷\xca\xc1p\x8b\xe6\xe2\xe6\xc4>\xa8\xdd\xc8\xc5y\xb6\xa65\xabgl\xee\xe7+\xec\x9b7\x93]T~\xb5wy3\xa7\x1a~\xfd\xad\xc8^\xb1y\x1aq$\xe1\xbf\x01\x00\x00\xff\xff\x8a\x80\xfd\r\x9e\f\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VK\x8f#5\x10\xbe\xf7\xaf(-\x87\xbdН\x1d\xed\x05\xf5m\x14@ZX\x86\xd1f7\x17\xc4\xc1\xb1\xab\x133n۸\xcaY\x06\xc4\u007fG~\xf4$\x9d\xe9\f D\xdf\\]\x8f\xaf\xbez\xd8M۶\x8d\xf0z\x8b\x81\xb4\xb3=\b\xaf\xf17F\x9bN\xd4=|E\x9dv\xab\xe3\xcd\x0eY\xdc4\x0fڪ\x1e֑؍\x1f\x90\\\f\x12\xbf\xc6A[\xcd\xda\xd9fD\x16J\xb0\xe8\x1b\x00a\xadc\x91Ĕ\x8e\x00\xd2Y\x0e\xce\x18\f\xed\x1em\xf7\x10w\xb8\x8b\xda(\f9\xc2\x14\xff\xf8\xa6{۽i\x00d\xc0l\xfeQ\x8fH,F߃\x8d\xc64\x00V\x8c\xd8\xc3љ8\"Y\xe1\xe9\xe0\xd88Y\x82uG4\x18\\\xa7]C\x1ee\x86\xa2T\xc6'\xcc}Ж1\xac\x93i\xc1\xd5\xc2w\x9b\x1f\xef\xee\x05\x1fz\xe8\x92A\xe7\x83;j\x85!\x83.\xa1\xee\xcfE\xfc\xe8\xb1\a\xe2\xa0\xed\xfe\xd2\xc1D@\xf7\f\xfc\x99\xb7\xdb=\x9e9R\x82\xd3q\x1f\\\xf4=\x9c\xc0\x17\xed\xca]\xe1}\x9b3\xdeԌ\xdf\u05cc\xb3\x82\xd1\xc4߿\xa0\xf4^\x13gEob\x10\xe6*{Y\x87\xb4\xddG#\xc25\xad\x06\xc0\a$\fG\xfcd\x1f\xac\xfbl\xbf\xd5h\x14\xf50\bC)\x1b\x92.\xe5v\x972\xf0B\xa2J\xb2\xb8\v\xb5e\xa8\x87?\xfel\x00\x8e\xc2h\x95]\x964\x9dG{{\xffn\xfbv#\x0f8\x8a\"\x04PH2h\x9f\xf5\xae\xe4\a\x9a@\xc0\x04\x10>\x1f0 l3\x99@\xec\x02Rͥ\xba\x04\x98\x92\xa2\xae\x8a|p\x1e\x03\xeb\x89\xf3\xf4\x9d\rƓ\xec\x02\xcf\xeb\x04\xb8\xe8\x80J\xa3\x80\x04|@\xa8\r\x8d\n('\x03n\x00>h\x82\x80\x99<˧\xeaM\x9f\x1b@Xp\xbb_Pr\a\x9bDp \xa0\x83\x8bF\xa5\xf99b`\b(\xdd\xde\xeaߟ<\x13\xb0\xcb!\x8d`\xace\x9e\xbe\xdc\xeeV\x98Du\xc4/AX\x05\xa3x\x84\x80)\x06D{\xe6-\xabP\a?\xb8\x80\xa0\xed\xe0z80{\xeaW\xab\xbd\xe6i\x15H7\x8e\xd1j~\\\xe5\x81ֻ\xc8.\xd0J\xe1\x11͊\xf4\xbe\x15A\x1e4\xa3\xe4\x18p%\xbcn3p[\x86sT_<5\xc1\xeb3\xa4\x17CU\xbe\xdc\xf5WyO\xed^\xca^\xcc\n\xfe\x13\xbdI\x94X\xf9\xf0\xcd\xe6#LAs\t\xe6\x9cg\xb6Oft\">\x11\xa5퀡\x14n\bn\xcc\x1e\xd1*\xef\xb4\xe5|\x90F\xa3\x9d\x93Nq7jN\x95\xfe5\"q\xaaO\a\xeb\xbc\x10a\x87\x10}\x9ay\xd5\xc1;\vk1\xa2Y\v\xc2\xff\x9d\xf6\xc40\xb5\x89ҿ'\xfe|\x8f\xcf\x15\v[\xa7!\xaa\x1bv\xb1B˓\xba\xf1(g\x83\x92|\xe8A\xd7\xc9\x1d\\\x001c\xb3N\xf1\xb2\xb7\xeeLui\x80\xa1\\<\x83\xde\xcfe\xf3Ka\xd9\xee*=\v\xb9\xaes\x8cԎ)\x81\xe9\ni\xa7\xdc*\x86\x18j\x92y]v\xcdR\xac\v\x86kb\xd9\xdd%\xbc\x19\x82\xe9\x8eJ\x18\x12\xad\x93Q\xd9;X\xd7_^\x86b\x8f˱\x9f\xe5\x99:X\a\x9cMa\v\xb3\x1b\xf2\x05\xecĂ#\xfd\xdb\xfe\xc8FUsW{D\xc6\x10\xd0r\xf5\bn\x98\xc1\x17\xff\xbdG\xfcA\x10\xbe\xc8\xef\xb2\xef\xfbd7Qn\xf4\x80\xf2Q\x1a,\xee\xf2:\u007f\xd6Q\xff\x18j\xfa\xd0\xc6\xf1\x12U\v\xb7G\xa1\x8d\xd8\x19|\xf6\xe7\x93\x15W\xfe])\xf0B\xdd.D\xa7\x87\xd9\xcd\xe9T\x9fN\xf5!vS^\rik\xaa\x1e8\xc4\x12\xbc\xb6Z\x95\x9c\x9aAH\x89\x9eQ\xdd]\xbeo^\xbd\x9a=Q\xf2Q:[\xe6\x94z\xf8\xe9\xe7\xa6xE\xb5\x9dp$\xe1_\x01\x00\x00\xff\xffF)\xacD\xc4\n\x00\x00"), diff --git a/design/CLI/PoC/base/CRDs.yaml b/design/CLI/PoC/base/CRDs.yaml index 5a62b8d96..4b4313ee6 100644 --- a/design/CLI/PoC/base/CRDs.yaml +++ b/design/CLI/PoC/base/CRDs.yaml @@ -679,6 +679,10 @@ spec: PVs from snapshot (via the cloudprovider). nullable: true type: boolean + preserveNodePorts: + description: PreserveNodePorts specifies whether to restore old nodePorts from backup. + nullable: true + type: boolean scheduleName: description: ScheduleName is the unique name of the Velero schedule to restore from. If specified, and BackupName is empty, Velero will diff --git a/pkg/apis/velero/v1/restore.go b/pkg/apis/velero/v1/restore.go index 58bbda130..9f6de9619 100644 --- a/pkg/apis/velero/v1/restore.go +++ b/pkg/apis/velero/v1/restore.go @@ -77,6 +77,11 @@ type RestoreSpec struct { // +nullable RestorePVs *bool `json:"restorePVs,omitempty"` + // PreserveNodePorts specifies whether to restore old nodePorts from backup. + // +optional + // +nullable + PreserveNodePorts *bool `json:"preserveNodePorts,omitempty"` + // IncludeClusterResources specifies whether cluster-scoped resources // should be included for consideration in the restore. If null, defaults // to true. diff --git a/pkg/apis/velero/v1/zz_generated.deepcopy.go b/pkg/apis/velero/v1/zz_generated.deepcopy.go index 05e903a0b..73f947b6b 100644 --- a/pkg/apis/velero/v1/zz_generated.deepcopy.go +++ b/pkg/apis/velero/v1/zz_generated.deepcopy.go @@ -1272,6 +1272,11 @@ func (in *RestoreSpec) DeepCopyInto(out *RestoreSpec) { *out = new(bool) **out = **in } + if in.PreserveNodePorts != nil { + in, out := &in.PreserveNodePorts, &out.PreserveNodePorts + *out = new(bool) + **out = **in + } if in.IncludeClusterResources != nil { in, out := &in.IncludeClusterResources, &out.IncludeClusterResources *out = new(bool) diff --git a/pkg/builder/restore_builder.go b/pkg/builder/restore_builder.go index e505b798a..7ea43e73e 100644 --- a/pkg/builder/restore_builder.go +++ b/pkg/builder/restore_builder.go @@ -136,6 +136,12 @@ func (b *RestoreBuilder) RestorePVs(val bool) *RestoreBuilder { return b } +// PreserveNodePorts sets the Restore's preserved NodePorts. +func (b *RestoreBuilder) PreserveNodePorts(val bool) *RestoreBuilder { + b.object.Spec.PreserveNodePorts = &val + return b +} + // StartTimestamp sets the Restore's start timestamp. func (b *RestoreBuilder) StartTimestamp(val time.Time) *RestoreBuilder { b.object.Status.StartTimestamp = &metav1.Time{Time: val} diff --git a/pkg/cmd/cli/restore/create.go b/pkg/cmd/cli/restore/create.go index f55732284..95f733209 100644 --- a/pkg/cmd/cli/restore/create.go +++ b/pkg/cmd/cli/restore/create.go @@ -78,6 +78,7 @@ type CreateOptions struct { ScheduleName string RestoreName string RestoreVolumes flag.OptionalBool + PreserveNodePorts flag.OptionalBool Labels flag.Map IncludeNamespaces flag.StringArray ExcludeNamespaces flag.StringArray @@ -98,6 +99,7 @@ func NewCreateOptions() *CreateOptions { IncludeNamespaces: flag.NewStringArray("*"), NamespaceMappings: flag.NewMap().WithEntryDelimiter(",").WithKeyValueDelimiter(":"), RestoreVolumes: flag.NewOptionalBool(nil), + PreserveNodePorts: flag.NewOptionalBool(nil), IncludeClusterResources: flag.NewOptionalBool(nil), } } @@ -117,6 +119,11 @@ func (o *CreateOptions) BindFlags(flags *pflag.FlagSet) { // like a normal bool flag f.NoOptDefVal = "true" + f = flags.VarPF(&o.PreserveNodePorts, "preserve-nodeports", "", "Whether to preserve nodeports of Services when restoring.") + // this allows the user to just specify "--preserve-nodeports" as shorthand for "--preserve-nodeports=true" + // like a normal bool flag + f.NoOptDefVal = "true" + f = flags.VarPF(&o.IncludeClusterResources, "include-cluster-resources", "", "Include cluster-scoped resources in the restore.") f.NoOptDefVal = "true" @@ -260,6 +267,7 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { NamespaceMapping: o.NamespaceMappings.Data(), LabelSelector: o.Selector.LabelSelector, RestorePVs: o.RestoreVolumes.Value, + PreserveNodePorts: o.PreserveNodePorts.Value, IncludeClusterResources: o.IncludeClusterResources.Value, }, } diff --git a/pkg/cmd/util/output/restore_describer.go b/pkg/cmd/util/output/restore_describer.go index 37878df45..c98fddc9c 100644 --- a/pkg/cmd/util/output/restore_describer.go +++ b/pkg/cmd/util/output/restore_describer.go @@ -127,6 +127,10 @@ func DescribeRestore(restore *v1.Restore, podVolumeRestores []v1.PodVolumeRestor d.Println() describePodVolumeRestores(d, podVolumeRestores, details) } + + d.Println() + d.Printf("Preserve Service NodePorts:\t%s\n", BoolPointerString(restore.Spec.PreserveNodePorts, "false", "true", "auto")) + }) } diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 4bf26a05e..88a2e8ce9 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -1167,7 +1167,7 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso // Error was something other than an AlreadyExists if restoreErr != nil { - ctx.log.Infof("error restoring %s: %v", name, restoreErr) + ctx.log.Errorf("error restoring %s: %+v", name, restoreErr) errs.Add(namespace, fmt.Errorf("error restoring %s: %v", resourceID, restoreErr)) return warnings, errs } diff --git a/pkg/restore/service_action.go b/pkg/restore/service_action.go index 54226e9f9..8895e3a60 100644 --- a/pkg/restore/service_action.go +++ b/pkg/restore/service_action.go @@ -27,6 +27,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "github.com/vmware-tanzu/velero/pkg/plugin/velero" + "github.com/vmware-tanzu/velero/pkg/util/boolptr" ) const annotationLastAppliedConfig = "kubectl.kubernetes.io/last-applied-configuration" @@ -55,8 +56,13 @@ func (a *ServiceAction) Execute(input *velero.RestoreItemActionExecuteInput) (*v service.Spec.ClusterIP = "" } - if err := deleteNodePorts(service); err != nil { - return nil, err + /* Do not delete NodePorts if restore triggered with "--preserve-nodeports" flag */ + if boolptr.IsSetToTrue(input.Restore.Spec.PreserveNodePorts) { + a.log.Info("Restoring Services with original NodePort(s)") + } else { + if err := deleteNodePorts(service); err != nil { + return nil, err + } } res, err := runtime.DefaultUnstructuredConverter.ToUnstructured(service) diff --git a/pkg/restore/service_action_test.go b/pkg/restore/service_action_test.go index a7b899d85..4cfcd1a85 100644 --- a/pkg/restore/service_action_test.go +++ b/pkg/restore/service_action_test.go @@ -27,6 +27,8 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" + api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" + "github.com/vmware-tanzu/velero/pkg/builder" "github.com/vmware-tanzu/velero/pkg/plugin/velero" velerotest "github.com/vmware-tanzu/velero/pkg/test" ) @@ -51,6 +53,7 @@ func TestServiceActionExecute(t *testing.T) { tests := []struct { name string obj corev1api.Service + restore *api.Restore expectedErr bool expectedRes corev1api.Service }{ @@ -65,6 +68,7 @@ func TestServiceActionExecute(t *testing.T) { LoadBalancerIP: "should-be-kept", }, }, + restore: builder.ForRestore(api.DefaultNamespace, "").Result(), expectedErr: false, expectedRes: corev1api.Service{ ObjectMeta: metav1.ObjectMeta{ @@ -85,6 +89,7 @@ func TestServiceActionExecute(t *testing.T) { ClusterIP: "None", }, }, + restore: builder.ForRestore(api.DefaultNamespace, "").Result(), expectedRes: corev1api.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "svc-1", @@ -113,6 +118,7 @@ func TestServiceActionExecute(t *testing.T) { }, }, }, + restore: builder.ForRestore(api.DefaultNamespace, "").Result(), expectedRes: corev1api.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "svc-1", @@ -146,6 +152,7 @@ func TestServiceActionExecute(t *testing.T) { }, }, }, + restore: builder.ForRestore(api.DefaultNamespace, "").Result(), expectedRes: corev1api.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "svc-1", @@ -177,6 +184,7 @@ func TestServiceActionExecute(t *testing.T) { }, }, }, + restore: builder.ForRestore(api.DefaultNamespace, "").Result(), expectedRes: corev1api.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "svc-1", @@ -210,6 +218,7 @@ func TestServiceActionExecute(t *testing.T) { }, }, }, + restore: builder.ForRestore(api.DefaultNamespace, "").Result(), expectedRes: corev1api.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "svc-1", @@ -246,6 +255,7 @@ func TestServiceActionExecute(t *testing.T) { }, }, }, + restore: builder.ForRestore(api.DefaultNamespace, "").Result(), expectedRes: corev1api.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "svc-1", @@ -266,6 +276,46 @@ func TestServiceActionExecute(t *testing.T) { }, }, }, + { + name: "If PreserveNodePorts is True in restore spec then nodePort always preserved.", + obj: corev1api.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "svc-1", + }, + Spec: corev1api.ServiceSpec{ + Ports: []corev1api.ServicePort{ + { + Name: "http", + Port: 80, + NodePort: 8080, + }, + { + Name: "hepsiburada", + NodePort: 9025, + }, + }, + }, + }, + restore: builder.ForRestore(api.DefaultNamespace, "").PreserveNodePorts(true).Result(), + expectedRes: corev1api.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "svc-1", + }, + Spec: corev1api.ServiceSpec{ + Ports: []corev1api.ServicePort{ + { + Name: "http", + Port: 80, + NodePort: 8080, + }, + { + Name: "hepsiburada", + NodePort: 9025, + }, + }, + }, + }, + }, } for _, test := range tests { @@ -278,7 +328,7 @@ func TestServiceActionExecute(t *testing.T) { res, err := action.Execute(&velero.RestoreItemActionExecuteInput{ Item: &unstructured.Unstructured{Object: unstructuredSvc}, ItemFromBackup: &unstructured.Unstructured{Object: unstructuredSvc}, - Restore: nil, + Restore: test.restore, }) if assert.Equal(t, test.expectedErr, err != nil) && !test.expectedErr { diff --git a/site/content/docs/main/debugging-restores.md b/site/content/docs/main/debugging-restores.md index b0845c61f..3320349cd 100644 --- a/site/content/docs/main/debugging-restores.md +++ b/site/content/docs/main/debugging-restores.md @@ -46,6 +46,8 @@ Label selector: Restore PVs: auto +Preserve Service NodePorts: auto + Phase: Completed Validation errors: diff --git a/site/content/docs/main/restore-reference.md b/site/content/docs/main/restore-reference.md index 7fb274358..bb14977bc 100644 --- a/site/content/docs/main/restore-reference.md +++ b/site/content/docs/main/restore-reference.md @@ -36,6 +36,56 @@ Available Commands: logs Get restore logs ``` +## What happens to NodePorts when restoring Services + +**Auto assigned** NodePorts **deleted** by default and Services get new **auto assigned** nodePorts after restore. + +**Explicitly specified** NodePorts auto detected using **`last-applied-config`** annotation and **preserved** after restore. NodePorts can be explicitly specified as .spec.ports[*].nodePort field on Service definition. + +#### Always Preserve NodePorts + +It is not always possible to set nodePorts explicitly on some big clusters because of operation complexity. Official Kubernetes documents states that preventing port collisions is responsibility of the user when explicitly specifying nodePorts: + +``` +If you want a specific port number, you can specify a value in the `nodePort` field. The control plane will either allocate you that port or report that the API transaction failed. This means that you need to take care of possible port collisions yourself. You also have to use a valid port number, one that's inside the range configured for NodePort use. + +https://kubernetes.io/docs/concepts/services-networking/service/#nodeport +``` + +The clusters which are not explicitly specifying nodePorts still may need to restore original NodePorts in case of disaster. Auto assigned nodePorts most probably defined on Load Balancers which located front side of cluster. Changing all these nodePorts on Load Balancers is another operation complexity after disaster if nodePorts are changed. + +Velero has a flag to let user deciding the preservation of nodePorts. **`velero restore create`** sub command has **`--preserve-nodeports`** flag to **preserve** Service nodePorts **always** regardless of nodePorts **explicitly specified** or **not**. This flag used for preserving the original nodePorts from backup and can be used as **`--preserve-nodeports`** or **`--preserve-nodeports=true`** + +If this flag given and/or set to true, Velero does not remove the nodePorts when restoring Service and tries to use the nodePorts which written on backup. + +Trying to preserve nodePorts may cause **port conflicts** when restoring on situations below: + +- If the nodePort from the backup already allocated on the target cluster then Velero prints error log as shown below and continue to restore operation. + + ``` + time="2020-11-23T12:58:31+03:00" level=info msg="Executing item action for services" logSource="pkg/restore/restore.go:1002" restore=velero/test-with-3-svc-20201123125825 + + time="2020-11-23T12:58:31+03:00" level=info msg="Restoring Services with original NodePort(s)" cmd=_output/bin/linux/amd64/velero logSource="pkg/restore/service_action.go:61" pluginName=velero restore=velero/test-with-3-svc-20201123125825 + + time="2020-11-23T12:58:31+03:00" level=info msg="Attempting to restore Service: hello-service" logSource="pkg/restore/restore.go:1107" restore=velero/test-with-3-svc-20201123125825 + + time="2020-11-23T12:58:31+03:00" level=error msg="error restoring hello-service: Service \"hello-service\" is invalid: spec.ports[0].nodePort: Invalid value: 31536: provided port is already allocated" logSource="pkg/restore/restore.go:1170" restore=velero/test-with-3-svc-20201123125825 + ``` + + + +- If the nodePort from the backup is not in the nodePort range of target cluster then Velero prints error log as below and continue to restore operation. Kubernetes default nodePort range is 30000-32767 but on the example cluster nodePort range is 20000-22767 and tried to restore Service with nodePort 31536 + + ``` + time="2020-11-23T13:09:17+03:00" level=info msg="Executing item action for services" logSource="pkg/restore/restore.go:1002" restore=velero/test-with-3-svc-20201123130915 + + time="2020-11-23T13:09:17+03:00" level=info msg="Restoring Services with original NodePort(s)" cmd=_output/bin/linux/amd64/velero logSource="pkg/restore/service_action.go:61" pluginName=velero restore=velero/test-with-3-svc-20201123130915 + + time="2020-11-23T13:09:17+03:00" level=info msg="Attempting to restore Service: hello-service" logSource="pkg/restore/restore.go:1107" restore=velero/test-with-3-svc-20201123130915 + + time="2020-11-23T13:09:17+03:00" level=error msg="error restoring hello-service: Service \"hello-service\" is invalid: spec.ports[0].nodePort: Invalid value: 31536: provided port is not in the valid range. The range of valid ports is 20000-22767" logSource="pkg/restore/restore.go:1170" restore=velero/test-with-3-svc-20201123130915 + ``` + ## Changing PV/PVC Storage Classes Velero can change the storage class of persistent volumes and persistent volume claims during restores. To configure a storage class mapping, create a config map in the Velero namespace like the following: diff --git a/site/content/docs/v1.5/debugging-restores.md b/site/content/docs/v1.5/debugging-restores.md index b0845c61f..3320349cd 100644 --- a/site/content/docs/v1.5/debugging-restores.md +++ b/site/content/docs/v1.5/debugging-restores.md @@ -46,6 +46,8 @@ Label selector: Restore PVs: auto +Preserve Service NodePorts: auto + Phase: Completed Validation errors: diff --git a/site/content/docs/v1.5/restore-reference.md b/site/content/docs/v1.5/restore-reference.md index 7fb274358..bb14977bc 100644 --- a/site/content/docs/v1.5/restore-reference.md +++ b/site/content/docs/v1.5/restore-reference.md @@ -36,6 +36,56 @@ Available Commands: logs Get restore logs ``` +## What happens to NodePorts when restoring Services + +**Auto assigned** NodePorts **deleted** by default and Services get new **auto assigned** nodePorts after restore. + +**Explicitly specified** NodePorts auto detected using **`last-applied-config`** annotation and **preserved** after restore. NodePorts can be explicitly specified as .spec.ports[*].nodePort field on Service definition. + +#### Always Preserve NodePorts + +It is not always possible to set nodePorts explicitly on some big clusters because of operation complexity. Official Kubernetes documents states that preventing port collisions is responsibility of the user when explicitly specifying nodePorts: + +``` +If you want a specific port number, you can specify a value in the `nodePort` field. The control plane will either allocate you that port or report that the API transaction failed. This means that you need to take care of possible port collisions yourself. You also have to use a valid port number, one that's inside the range configured for NodePort use. + +https://kubernetes.io/docs/concepts/services-networking/service/#nodeport +``` + +The clusters which are not explicitly specifying nodePorts still may need to restore original NodePorts in case of disaster. Auto assigned nodePorts most probably defined on Load Balancers which located front side of cluster. Changing all these nodePorts on Load Balancers is another operation complexity after disaster if nodePorts are changed. + +Velero has a flag to let user deciding the preservation of nodePorts. **`velero restore create`** sub command has **`--preserve-nodeports`** flag to **preserve** Service nodePorts **always** regardless of nodePorts **explicitly specified** or **not**. This flag used for preserving the original nodePorts from backup and can be used as **`--preserve-nodeports`** or **`--preserve-nodeports=true`** + +If this flag given and/or set to true, Velero does not remove the nodePorts when restoring Service and tries to use the nodePorts which written on backup. + +Trying to preserve nodePorts may cause **port conflicts** when restoring on situations below: + +- If the nodePort from the backup already allocated on the target cluster then Velero prints error log as shown below and continue to restore operation. + + ``` + time="2020-11-23T12:58:31+03:00" level=info msg="Executing item action for services" logSource="pkg/restore/restore.go:1002" restore=velero/test-with-3-svc-20201123125825 + + time="2020-11-23T12:58:31+03:00" level=info msg="Restoring Services with original NodePort(s)" cmd=_output/bin/linux/amd64/velero logSource="pkg/restore/service_action.go:61" pluginName=velero restore=velero/test-with-3-svc-20201123125825 + + time="2020-11-23T12:58:31+03:00" level=info msg="Attempting to restore Service: hello-service" logSource="pkg/restore/restore.go:1107" restore=velero/test-with-3-svc-20201123125825 + + time="2020-11-23T12:58:31+03:00" level=error msg="error restoring hello-service: Service \"hello-service\" is invalid: spec.ports[0].nodePort: Invalid value: 31536: provided port is already allocated" logSource="pkg/restore/restore.go:1170" restore=velero/test-with-3-svc-20201123125825 + ``` + + + +- If the nodePort from the backup is not in the nodePort range of target cluster then Velero prints error log as below and continue to restore operation. Kubernetes default nodePort range is 30000-32767 but on the example cluster nodePort range is 20000-22767 and tried to restore Service with nodePort 31536 + + ``` + time="2020-11-23T13:09:17+03:00" level=info msg="Executing item action for services" logSource="pkg/restore/restore.go:1002" restore=velero/test-with-3-svc-20201123130915 + + time="2020-11-23T13:09:17+03:00" level=info msg="Restoring Services with original NodePort(s)" cmd=_output/bin/linux/amd64/velero logSource="pkg/restore/service_action.go:61" pluginName=velero restore=velero/test-with-3-svc-20201123130915 + + time="2020-11-23T13:09:17+03:00" level=info msg="Attempting to restore Service: hello-service" logSource="pkg/restore/restore.go:1107" restore=velero/test-with-3-svc-20201123130915 + + time="2020-11-23T13:09:17+03:00" level=error msg="error restoring hello-service: Service \"hello-service\" is invalid: spec.ports[0].nodePort: Invalid value: 31536: provided port is not in the valid range. The range of valid ports is 20000-22767" logSource="pkg/restore/restore.go:1170" restore=velero/test-with-3-svc-20201123130915 + ``` + ## Changing PV/PVC Storage Classes Velero can change the storage class of persistent volumes and persistent volume claims during restores. To configure a storage class mapping, create a config map in the Velero namespace like the following: