From 14170b52a87d230b9b77de82a7f092fdec28ea48 Mon Sep 17 00:00:00 2001 From: "Phuong N. Hoang" Date: Wed, 12 Aug 2020 17:17:31 -0700 Subject: [PATCH] Enhance Backup to backup resources in specific order. (#2724) Signed-off-by: Phuong Hoang Co-authored-by: Phuong Hoang --- changelogs/unreleased/2724-phuong | 1 + config/crd/bases/velero.io_backups.yaml | 9 +++ config/crd/bases/velero.io_schedules.yaml | 10 ++++ config/crd/crds/crds.go | 4 +- pkg/apis/velero/v1/backup.go | 7 +++ pkg/apis/velero/v1/zz_generated.deepcopy.go | 7 +++ pkg/backup/item_collector.go | 65 ++++++++++++++++++++- pkg/backup/item_collector_test.go | 30 ++++++++++ pkg/builder/backup_builder.go | 6 ++ pkg/cmd/cli/backup/create.go | 32 ++++++++++ pkg/cmd/cli/backup/create_test.go | 34 ++++++++++- pkg/cmd/util/output/backup_describer.go | 10 +++- site/docs/main/backup-reference.md | 9 +++ 13 files changed, 219 insertions(+), 5 deletions(-) create mode 100644 changelogs/unreleased/2724-phuong diff --git a/changelogs/unreleased/2724-phuong b/changelogs/unreleased/2724-phuong new file mode 100644 index 000000000..4d0ffd22b --- /dev/null +++ b/changelogs/unreleased/2724-phuong @@ -0,0 +1 @@ +Enhance Backup to support backing up resources in specific orders and add --ordered-resources option to support this feature. diff --git a/config/crd/bases/velero.io_backups.yaml b/config/crd/bases/velero.io_backups.yaml index 45d8434fe..71792572d 100644 --- a/config/crd/bases/velero.io_backups.yaml +++ b/config/crd/bases/velero.io_backups.yaml @@ -303,6 +303,15 @@ spec: are ANDed. type: object type: object + orderedResources: + additionalProperties: + type: string + description: OrderedResources specifies the backup order of resources + of specific Kind. The map key is the Kind name and value is a list + of resource names separeted by commas. Each resource name has format + "namespace/resourcename". For cluster resources, simply use "resourcename". + nullable: true + type: object snapshotVolumes: description: SnapshotVolumes specifies whether to take cloud snapshots of any PV's referenced in the set of objects included in the Backup. diff --git a/config/crd/bases/velero.io_schedules.yaml b/config/crd/bases/velero.io_schedules.yaml index 4ba21fc9a..ae38ad776 100644 --- a/config/crd/bases/velero.io_schedules.yaml +++ b/config/crd/bases/velero.io_schedules.yaml @@ -318,6 +318,16 @@ spec: are ANDed. type: object type: object + orderedResources: + additionalProperties: + type: string + description: OrderedResources specifies the backup order of resources + of specific Kind. The map key is the Kind name and value is a + list of resource names separeted by commas. Each resource name + has format "namespace/resourcename". For cluster resources, simply + use "resourcename". + nullable: true + type: object snapshotVolumes: description: SnapshotVolumes specifies whether to take cloud snapshots of any PV's referenced in the set of objects included in the Backup. diff --git a/config/crd/crds/crds.go b/config/crd/crds/crds.go index dcba03ece..df4ae587b 100644 --- a/config/crd/crds/crds.go +++ b/config/crd/crds/crds.go @@ -29,7 +29,7 @@ import ( ) var rawCRDs = [][]byte{ - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x85\xd57\xebf\xcc\xfa\xb9f\xccx\xbc./k\xd1\xff~X\x99\x1c\xf7ي\xb9\xe9-\xfcH\xc5$&J\n\xad7;\xc0\xa2\xf4\xef\xd7 }zJ\x91\x84\xe0\xc4p\x94=\xf5\xbb\u007fs\x828W\xa77\xa7\xeb>P\xa7\u007f\xa1\x14\xeaW\xfff\x84\xc0\xce\xfe1\xfa\xfa\x85\x02\xf8\xa9\xbd\xe6\x1a\xe4\xae\x16@~\r;\xa9<\xda\x13IL\x91k\xa6%\xf1KY0\xbfS\xd1(\x84\xcf\x0e\xf7o\x14\x1d\xb9\xa6\x9e\xb3\x88\x1b\xa7KCL\x99\xa2\xea\xeef:\t\x158\x19\x94\x16\x8b\x90b>1\a\x9b'\x1c\xf9|\xfe\xfa\x05\xf3q\xa6\xc0\x12\r\xeb\x91\xf0\xf9\x04\xcd\xf6kc\x88\xbc\x8c\x80\x18\xa4\xd4\xd9E(\x17\\\x83\x80\x17|\x0fх\xd0@\x02\x11\xf4\x1a\x9a<\v\xd1\"\xd7,X\xa1^\xf0\x9d\x81\xc42\xc4\xcc\xdae\xa2\x0f\xe3\x05\xdf\xe7'\x9d\xb0\x8d\xb0\x91.\x96U\x88\u007f\xf4\x80\x19\xc09\xecR\x96\x01\x17\x91\x92\x87\x99#\n\x96\xba\x884\x12\xb7\xcf&\xaf\x16SS\xf7\b\x82\xbcrA(\xa4\xed\aY.\"\x90\\'8d\x9bHE\xa4g\xa1d^\xbf&\xe8\xf7F_\xc3W\xe37z,X\xed\x8e\xfb7\xe9b\xed\xee\x8bA\xf7\xd5x~\xf2\xe1L\f(\x9f\xcd°\x8cMH\a7L\xf4\xb7kQ\xb3J\x1c\xc6&dX\xb5H\xa4\x83\x8d\xa6\x1c\"\xf0*T\x13\xc3˦\xbc}w\x14\x95\xe3b\x936zś\xddz\xe8=\x91\xc5\v\x15\xb9-\x85>Z\xf5+\xc3\xeb\x16A|\xa2}!\xac\x0e\x95Q%2\xcc!\xaf\x98\x89\\\xd9\x13\x1e\xf72\x83\x02\xed~|#h\x8f\x92|\xf6\x92\xd7/\xf2\xa5a\x9c\xa5OK\xb6\xe64\xa23\xce\xe7\xd0X\x91m\xce\xceI\xa2\x9d\x998X\xca\x1b\x9f8G\ao\x92\x1c7\xccpS\xe49\x1f\xb4\b\xf5\xb0\xd8{/\xe6|\u007f\xdf\x0e(\x85=\xae\x10\\\xa0\xfb_ڪXi\xff\x0fJ!\xed\xac\x85~\xe6\x13\x13\x85\x9d\x95\xb1*\xd4~\t\xc1\x97\x0eH\x9aG\xa1N\v\xc2\x03d\x19\xf2\x1a\xa8\xc26lv\xbdH\xe3\x1a^\x0fƅ]q'Q\xe5 \xa7\"-\x1a\x97/\xf8~yݳ\xf1ˍ\xbe\f\xdbs\xcfb\xd3^>\x03\xd8h\xf5\x0e\x97\xbc\xf2\xf2\xdbC\x97EZ\xb7`\x12\x1f\x9f-\vf)\x9bK\xbb8-\xab\xcf`(\x14\x1d\xc7v\x81Ε\xc6\xf9\x85H<\x18\xe7C\x85\xae\x13<\x0eԆ\xa6s\x9aX\x13\x02\xb1\v\xe7^Ʀ\x13\x0erd'\xa5J\x92\x92\xc3\xc1\x02g\x0fb\x1eA\n\xa5ಱ\xd1\xe0\x1f/ñ\a\xbfBd\x1c\x16L@$U(\xad\xc9й)u\x98\xf5\xbc3\x05\xb7\xba\xd8&BR\x11\x0e\x11\xa6\x8a{i,\r\x1b\x895g\x85\xd9\xf7o\xad\x1a \x996\xfd?\xadf\xe7a\x04|\x06]\x14B\xcfn\x16=\xe4\xeeºd\n\x11L\b\xd9\xed\xbeb3^\x1a\xe9E\xa5\xf9u7\xd8B\xea\r\x03\x87O\x1f\xba\x1dCr\x89x~H}\x97V6l\xae\x1f\x04\xdb,M\xbf\xe4>4^\x0fh\xb1#\xa9~e\x98\xc39m|+=_\xc6\xe8\x80Ǖ\x83\x9d\xb4η\x91t|\xb0\xf5\xf19\x8a\xbe\xb7\xf6\x1bR\x94\xbf\x86u\xad\x02\xd0\xc1\xbc\xa6\x93\u0091ù\xa1\xc1\xc7 \br\a\xd2\x03\xea\xccT\x9a\x8b\x18d\xa4\xfc\x82\xc0\xd2\xe0Lg7\xd90\x96\x186\r\xd4U\xb1\x84\xf0\x15k\x8f\xd4\x13\xb5\x8e\xf6\xe4\x1f\x85\x9c\xaaT\xa5q\x96\x98\xbc,\xd0T\x13\x9bZ3:bz\n\xeb:G\xbc\x85x\x93EU\x80(\x88ً8J;\xb3,\xb0+_x\x15ҳw'\xa8\xec\xea\xbd!\xa3(\x15\xfae\xd9\xc0\x16wƲ-:\x99c\xbdeF\x99\x1b\r\x02vB\xaa\xca.\xf2hgptyd\x1f\x8d\xfcc\x82\xf6%\xaf]1\xf9\xb3e\xcaE\xa1ڔW-\xed\xd2@\xed\xc1\xe2G\x86H\xa5\x95\xa43\xe6c\xa3\xa4\xa8JB\xbf\u007f\x0f\x93Z\xbc\xf9\x1e&\xf5\xc6\xf70\xa93\xbe\x87I\xdfä\xc9\xf1=L\xfa\x1e&\xfd^äiLV\\\xb7\x1a\xfci\xe6\xed\xb3G\xa8㈍B\x8e\xa7\xfaw\xa1\xf7zY_\xdefx\xcd@\xdfel\xe9^q\xc7y_\xce\xcd\xd1\u007f\xe3\xe6\xebF=R\xfe\xa4\xbc\xa1\xb1t\xb2uoA#\xdePo\xe6|{\xc9\\SI\xb7'\xb1n\xecHM\x89&\xbd\xa2G}\xead\xa70\xb3\xdd\xc1 \x94j\xf7\xa6\b\xdb0\xe5W\xeaW\x9cm\xfd\x98i\xf8\x98n\xdb\x1c\xe7\xd0Ih\xdfe\x91\xed\xb4\x18\xfe\xca\x1c\x9a\xec\xcb\x18\xefƈ'\x19\xe8\xc5\xf1Ӻ\xfb\x8b7\xb17\x03^\xa5?\xf4\b\xe0\xa6IJY\xf4\xbe\xdd\x1c\x99t*^\x1f8\xe5\x1c\x18\vZ\xaa\xeb\xc1\xbe\x98\xfafE\x9b\x9d\xf0\xd72$Eg\xd9\xdbTh\xbf\xa4w\xe3\x9b;6\xba=\x19\x83N\xf6\xbcÎ\xa5-\xa4\xcb{2\xba=\x17#\x9b̂N\x8c\xb3;-\xe6\xf3\xadɮ\x8ao\xe8\xa5H}\x12S\x1b\xeeD\ał\x98c\xbe[\xe2\x9bz$\xf80o\x02\xeb\xb3:#Z]\x0f\x13 \x97\xf5C,`\xc9\\\xef\xc3\xd9\x1d\x0f\xa7]\x06\x13D\xcc\xf59\x8c\xf70L\x00\x1d\xecnXҹ0\x01\xb3\xeei\xf8\xc0~\x85\x99.\x85\x8f\xe9$\xfc\xa5\xb1\xe7X\xcf\xc1L\xa7\xc1Ld:\x85\xd5L/\xc1\xf2\x0e\x82\x19\xfe|c\xb7@\xdd\x0f0\xf8\xces{\x04\xba]\x00\x83 \x17v\x06\x8c\x9c\xfd\x0f\x82\\\xd0\x0f0s\xe2?\bvrc\x9cЈџ\x9c\x16\xa5;\x98tak2Nz\xec\xce\x1dH.\xd2u\xadL\x99*\xafa\xf7I\xe1+\x98\xef\xf0\xf0\xccN\x9e\xaf\xc2d\xcdE\xa0\xe8\xcaS\xf0szO臏L6\x9c7V\xec\xf1'\x93\xb5nڎ\xd1ߝ۹\x16\x19\x85\x9aR\xfa\xd4\a!\xd2\xfd\xbc\xeeҡ\xd81V\xd9\xe2=\xb7&\xfb\"\f\xfb\xf2\x1e\xb5<\xef\xd5$\x11OO?\x05Ľ,p\xfd\xa5\n\x89ܪ\x14\xd6!\xf1/\x11\x14\x16m\xe9σy\xed!\xacL\xa4\xf4\x87S|-r\r\x8f\xb3\xc5\xc5X\x87\xbb|I\xc1\x12\x9b\xa6\xd5\xf1yxM+\x16m\t%$6f7\xb6\xaaG`\xeb\"3E\xfb\xa1\xa3壮\xa8\r;\xe7\xe1˟^\xf8\xca\xcd]\xff\xe4I\xe92w\xac\xf8V\x96o\x98\x05\x00A\x19Ͼ\x01\x1a\xcb[\x9d\x1b\xf6S2\xb9\xeb\xcf\xe7\xab\xd46\x0fHqY\xad\xbe\xcc\xf9*\\]@\x1b\xf0h\r\xb0\xb0\x8e\x83\x01\x82\x859\xe0\x115\x18\xcd\xf52\xbe\xc1\x15\xee\xf9\x9f\xae\xe9\xe7\xaf-\x18\xb1\x1cW\x95ʈ\x96p\x1dwT\x92`!\xfenl\xff\xb0\xa6\x90\xda\xd8\x10\xbep\b\x9d\x96.\xf6\xe7|\xadu\x12\xdf\a\x9aQ\x9fN\xb5|\x15&e\x1a\xde\xe7\x87N1V\xf0\x15O\xb7\xa8p0\x81\xf9s\xfd\x15\x8dބ\x8d~\xb0fO\x11_炙\xe4\x95z\xbf<\b\xeb\xa5P\xea=\x80\x1fyk\xef\xf1\x17$\xbf0\xb2\x11\f10b6\xcd\xc38\xa9\t)\xa5\x0e\xb2\xe6Ä\xad\xa9|\xc7\xe0\x1a\x83\xedI<\xbdoMy\"\xa6\xba\x81\xecB\xa4\x1d\x10\x9d_\xe1ng\xac\x0f\xf1\xebj\x05r\x177\x96\x1eT\xf2\xce\\\xf9\n_c\x00\xe9\x9b,\xae\xd1M\x8e\x05-\nǺ\xe9\xf9\x8b\x10\\v\x16YF\xf1\t\xde8/T\xcf\a|s\xb9\x8b\xf7k\xd2.\xcc\xff\xd6\xdb\xcezL\u07b4g\xd7}\xaeU\xb1EK\x9a\xca\xc0\x02\xbf\xf8h/x=5\x9c\xd2m\x115\xbcZ\xe9=\xf9\x9bvA\x10\x8f\u007f5^\xa8\xcdXB\xdb\r\x01멉\x1c^\xdc'ʐ\x18\xb6L\xfa 9\xa1\xb9C\xba\xb4\x92\x04\x97\x1d\x84ޓ\x02YS\xed\x0fI\x03Gv\x8a\xe1\"^E\bA\xa9\xaa=\xa9t,\xac\xf9\xca\xeaVf\x1aKmy\vU\x91\xbd@U\x0e\x9f<\x87o\xc5\xc4O\xfd\xdcĻ\xc0\xab\x9d5\xc5*\xf2\x9fkfױbg\xa5\xa1\x90\x89s\x9ax\x1do\x04,\x8b\xbd,Q\x83p\x11\x97پ\x93)A\x8e'j^X\xbf,\b{\xecL\x9d\x89\xbf\x18.\xe6kx\xc4R\x90\xb1\xf5\x8dؚ\x02\xeeN?\xb4tM9z\xfa\xaaP\xf8(L\x10=\xe5\xb5\xfcu\x0fc1\xdc\xc1\xebA\xec\x04T\x9d\x00\xaa\x8b\xfa?'vj\xbe\xb3t?\x1fE=\x9fL>9H!\vn\xe0\xa5\xd8\xe7\x0fr\xd7\xcf/\xcaRɌ\xb0\xfd\xe3\xaft@r\\\x10U\\M\x06\x14\x1c=Ա\x01|\xc1\xd2bFV\xd9G\xfeA!\xed\xf7\x0e\xb1\x1b\xa9\\-\x0e\xec\xba)\xa2\xfb\xec=\x16\xe5\xc0\xbb&r\xc4fј\xe3\x13iB\x8f\x80\xf45\xab\x04*v\x02\x8c&\x85\x8b\t\xa9C\x8ds\b\xa9\x17\x8d\x11⪌\x1cЮ\x1aڊ\xea\x9c\xeb\x03\xa9z\x15\x96\x12\xedi\xeb\xf9\x8f8i \v\x89\xeb?6\x0fi\xa5!\t\xbf\u007fR\"2\xe0\xc7O\x1e5\x1f\xb3\xfb\xd4\xfc\xc7\xec[ŏ\xd7\x1dC?\x19{˼e\xda\x11\x95\xf8\xa4)\x10\x88,C\xd2ݯ\xa7߱\xbb\xbc\xe4\u007fҧ\xea\xf8\xdf\xcc谗\xba[\xf8\xcf\xff\xba\x80XgzNx\xd0\xc3\xff\x0f\x00\x00\xff\xff\x1c\xe1(\xb0\xf8O\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec<]o#9r\xef\xfe\x15\x05\xe7a\xee\x00K\xbe\xc1\xbd\x04~\x9b\xf5x\x11a7sƎ\xcfy\b\xf2@u\x97$\x9e\xd9d\x87d\xcbV\x82\xfc\xf7\xa0\x8ad\u007f\xa8?5\xeb\xbb\xc5\xe2\x86Ov\x8b,\x16\xab\x8a\xf5\xc5\"\xafV\xabՕ(\xe53Z'\x8d\xbe\x03QJ|\xf3\xa8\xe9?\xb7~\xf9W\xb7\x96\xe6\xf6\xf8q\x8b^|\xbcz\x91:\xbf\x83\xfb\xcayS\xfc\x82\xceT6\xc3ϸ\x93Zzi\xf4U\x81^\xe4\u008b\xbb+\x00\xa1\xb5\xf1\x82>;\xfa\x17 3\xda[\xa3\x14\xda\xd5\x1e\xf5\xfa\xa5\xdaⶒ*G\xcb3\xa4\xf9\x8f\u007fZ\xffy\xfd\xa7+\x80\xcc\"\x0f\u007f\x92\x05:/\x8a\xf2\x0et\xa5\xd4\x15\x80\x16\x05\xde\xc1Vd/U\xe9\xd6GTh\xcdZ\x9a+WbFs\xed\xad\xa9\xca;h~\bC\"\x1ea\r?\xf0h\xfe\xa0\xa4\xf3?\xb5>\xfe,\x9d\xe7\x1fJUY\xa1\xea\x99\xf8\x9b\x93z_)a\xd3\xd7+\x80ҢC{Ŀ\xea\x17m^\xf5\x8f\x12U\xee\xee`'\x94\xc3+\x00\x97\x99\x12\xef\xe0\vaP\x8a\f\xf3+\x80\xa3P2\xe7\xd5\x05\x9cL\x89\xfa\xd3\xe3\xe6\xf9\xcf_\xb3\x03\x16\"|\x04\xc8\xd1eV\x96\xdc/\"\aҁ\x80g^\x1a\xd8\xc8\x02\xf0\a\xe1\xe9?FE{\a\xfe\x80\x90\x89\xd2W\x16\xc1\xec\xe0\xa7j\x8bV\xa3G\x17!\x03d\xaar\x1e-8/<\x82\xf0 \xa04R{\x90\x1a\xbc,\x10\xfe\xf0\xe9q\x03f\xfb7̼\x03\xa1s\x10ΙL\n\x8f9\x1c\x8d\xaa\n\fc\xff\xb8\x8e0KkJ\xb4^&BSkIV\xfd\xedl]\x1fh\xe1\xa1\x0f\xe4$K\x18Џ\x12\x8198&\n\xad\xc3\x1f\xa4\x03\x8bq\x99L\xc0\x16X\xa0.BG\xa4\xd7\xf0\x95\xb8b\x1d\xb8\x83\xa9TN\x02xDKt\xca\xcc^\xcb\xff\xa9!;\xf0\x86\xa7T\xc2c\xe4}jR{\xb4Z(bY\x857L\x88B\x9c\xc0\"\xcd\x01\x95nA\xe3.n\r\xffn,\x82\xd4;s\a\a\xefKww{\xbb\x97>\xed\xa5\xcc\x14E\xa5\xa5?\xdd\xf2\x8e\x90\xdb\xca\x1b\xebns<\xa2\xbaur\xbf\x126;H\x8f\x191\xefV\x94rňk\xdeJ\xeb\"\xff\x97\xc4u\xf7\xa1\x85\xa9?\x91\x909o\xa5\xdeןY\xd4G\xe9N2\x1f\xc4)\f\v\xf87\xe4\xa5OD\x95_\x1e\xbe>\xb5EM\xba.͙\xda\xcd0\xd7\x10\x9e\b%\xf5\x0em`\xdcΚ\x82!\xa2\u0383\xac\xb1\x98*\x89\xbaKtWm\v\xe9\x89\xd3\xff]\xa1#q6k\xb8g\x8d\x02[\x84\xaa\xccI\nװ\xd1p/\nT\xf7\xc2\xe1ߝ\xecDa\xb7\"\x92\xce\x13\xbe\xad\b\xbb\x1d\x03\xb5\xea\xcfIe\rr(\xec\xf8\xaf%f\x9d\x8dAc\xe4Nf,\xfe\xb03\xb6Q\bA'\xad[\x00\x876e\x98h'*\xe5\x9fy#\xbb'\xf3\v:/\xb3n\x9f3t>\x0f\x0eI蠃\xd7\x03\xfa\x03Z\x92\x15\xfe\x81\xb7\xdd\x19D`\x06:\xccyω\x17\x04\x11\xb1\xe6ͫ\x14\x94&\xe9\x17\a\xdbSBt}\x06'Psk\x8cB\xd1\xd5\x01\xf8\x96\xa9*ǼV\xb8nrU\x0f\xbd\xeel\xa9\x84Դ3\xc86\x10b\xba\xf9\x95u\xad\xb0\xd8[\x18I\xa7\xd4\x01\x1ak\xd1\x03\x0e0\x84\x9a\xf4X\xf4\xb0\x1a\x11\xa5\b\xbbRJl\x15ށ\xb7\xd5\xf9\xd4a\x9c\xb0V\x9c\x06)\x91,\xf52BԽ\xa3nP2c\x1bRk\x00\xa6\xc5\xef\x88\f\ac^\xa6\x97\xfeoԣ\xd1`\x90\xb1\x83\x03[<\x88\xa346.6\x9a\x91-\x02\xbeaVy\xec˶\xf0\x90\xcb\xdd\x0e-A)\x0f¡\vfk\x8c\x04cۓ\x9a\x1dc[\x0f\xff\x86e\xc2bX\xef\x18ʴI5#ӧnh\xe4c\xe8\\\x1ee^\t\x05R;/t\x16\xd6!j\x9c\xce\xd7\x01\xe3\xec\xeca\x1b\xd4Z\u0099h\xdfQqF#\x18\v\x05i\xf3~W7\b\x1fF\x97\xbb\x15\xa4kL\x10C[)tq\xa2\x9c5g\xb3\xafoF\x00\xd7\\\b\xb6_\x89-*p\xa80\xf3\xc6\x0e\x91a\x9a\xa9\xa1\xcd\xeb\xa8\x11\xda\rh\xabF\xff\xd2\x12ۊʌ\xc2\x04x=\xc8\xec\x10\xcc2\xc9\vC\x81ܠ\xe3\xfd+\xcaR\x9d\x86\x17\aӜ\x0emb\v7mr3\x9f\xc3\xeao\xeb\xa6\xcd깦\xcdh\xbc.-k\xd6\xff\xf3\x902)\xee\x8b\x05s\xd3\x1b\xf8\x9e\x82ID\x94\xe4Zov\x80E\xe9O7 }\xfaJ\x9e\x84\xe0\xc0p\x94<\xf5ܿ;F\\*ӛ\xf3q\xef(ӿ\x92\v\xf5Կ\x1b&\xb0\xb2\xff\x1au\xfdB\x06\xfc\xdc\x1es\x03rW3 \xbf\x81\x9dT\x1e\xed\x19'\xa6\x96k\xa69\xf1kI0o\xa9\xa8\x15\xc2g\x87\x877\xf2\x8e\\\x93\xcfYD\x8d\xf3\xa1\xc1\xa7L^uטNB\x05\x0e\x06\xa5\xc5\"\x84\x98OL\xc1\xe6\v{>\x9f\xbe|\xc6|\x9c(\xb0D\xc2zK\xf8t\x86f{\xda\xe8\"/[@tR\xea\xe8\"\xa4\vn@\xc0\v\x9e\x82w!4\x10C\x04MC\x9dg!Z\xe4\x9c\x05\v\xd4\v\x9e\x18HLČ]\xc6\xfa\xd0^\xf04\xdf\xe9\x8cl\x84\x8dt1\xadB\xf4\xa3\x0fL\x00\x8ea\x97\x92\f8\x89\x944\xccܢ`\xa9\x8aH-Q\xfb\xe2\xe5\xd5lj\xf2\x1e\x81\x91\x1f\\`\nI\xfbA\x96\x8b\x16H\xaa\x13\x1c\xf2\x9eHI\xa4g\xa1d^O\x13\xe4{\xa3o\xe0\x8b\xf1\x1b=\xe6\xacv\xdbÛt1w\xf7٠\xfbb<\u007fyw\"\x06\x94/&a\x18\xc6[H\a5L\xebo\xe7\xa2f\x858\xb4M\x88\xb0j\x96H\a\x1bM1D\xa0U\xc8&\x86ɦ\xb4}\xb7\x15\x95\xe3d\x936z\xc5\xc6n=4O$\xf1BAns\xa1\x8fV=e\x98n\x11\xc4'\xb2\vatȌ*\x91a\x0ey\xc5D\xe4̞\xf0\xb8\x97\x19\x14h\xf7ㆠ\xddJ\xd2\xd9K\xa6_\xa4KC\xbbH\x9e\x96\x98\xe6Ԣ2\xce\xe7\xd0X\xd1ޜ\xed\x93X;\xd3q0\x957\xdeqn\x1dl$\xd9o\x98\xa1\xa6\xc8s>h\x11\xeaq\xb1\xf6^L\xf9\xbe\xdd\x0e(\x05\x1bW\bN\xd0\xfd/\x99*\x16\xda\xff\x83RH;\xbbC?\xf1\x89\x89\xc2\xceȘ\x15jOB\xf0\xa5\x03\xe2\xe6Q\xa8\xf3\x84\xf0\xc0\xb2\fi\rT\xc1\f\x9b]\xcfӸ\x81׃q\xc1*\xee$\xaa\x1c䔧E\xed\xfa\x05O\xd77\xbd=~\xbd\xd1\xd7\xc1<\xf7vl\xb2\xe53\x80\x8dV'\xb8\xe6\x91\xd7\xdf\xee\xba,\x92\xba\x05\x9d\xf8\xf8l\x993K\xd1\\\xb2\xe24\xac>\x83!Wt\x1c\xdb\x052W\x1a\xe7\x17\"\xf1h\x9c\x0f\x19\xba\x8e\xf38\x90\x1b\x9a\x8eibN\b\xc4.\x9c{\x19\x9bN8H\x91\x9d\xa5*\x89K\x0e\a\x13\x9c=\x88y\x04)\x94\x82\xebf\x8f\x06\xfdx\x1d\x8e=x\n\x91\xb1[0\x01\x91D\xa1\xb4&C\xe7\xa6\xc4aV\xf3\xce$\xdc\xead\x9b\bAE8D\x98J\ue976\xd4m$\xd2\\\xe4f?\xbc\xb5r\x80\xb4\xb5\xe9\xffi1\xbb\f#\xe03\xe8\xa2\x10z\xd6X\xf4\x90\xbb\x0f\xe3\xd2V\x88`\x82\xcbn\xf7\x15o㥞^\x14\x9a\xdf\xd6\xc0\x16Ro\x188||Ws\fI%\xe2\xe5.\xf5}\x1aِ\xb9\xfe\x10\xf6fi\xfa)\xf7\xa1\xf6z@\x8b\x1dN\xf53\xc3\xec\xcei\xe3[\xe1\xf92B\a<>8\xd8I\xeb|\x1bI\xc7\a[\xef\x1f\xa3\xe8\ak\xbf!D\xf9K\x18\xd7J\x00\x1d\xcck:)\x1c9\x9c\x1bj|\f\x82 w =\xa0\xceL\xa59\x89A\x9b\x94'\b$\r\xcat\xd6Ȇ\xb6dcSC]\x15K\x16\xbeb\xe9\x91z\"\xd7\xd1\xee\xfc\xa3\x90S\x99\xaa\xd4.b\x93\x97\x05\x9aj¨5\xadæ\xa70\xaes\xc4[\x887YT\x05\x88\x82\x88\xbd\x88\xa2d\x99e\x81]\xfe«\x90\x9e\xb5;AeU\xef\rm\x8aR\xa1_\x16\rlqg,\xefE's\xacMf\xe4\xb9\xd1 `'\xa4\xaa\xec\"\x8dv\x01E\x97{\xf6q\x93\xbf\x8fӾd\xda\x15/\u007f6M\xb9\xc8U\x9bҪ\xa5]\xea\xa8=Z|O\x17\xa9\xb4\x92dƼ\xaf\x97\x14EI\xe8\xd3w7\xa9E\x9b\xefnR\xaf}w\x93:\xed\xbb\x9b\xf4\xddM\x9al\xdfݤ\xefn\xd2?\xab\x9b4\x8dɊ\xf3V\x83?\xcd\xcc>{\x84:\x8e\xd8(\xe4x\xaa\u007f\x1fj\xaf\x97\xd5\xe5m\x86\xc7\f\xd4]ƒ\xee\x15W\x9c\xf7\xf9\xdc\x1c\xfd7j\xbe.\xd4#\xe1O\xc2\x1b\nK'K\xf7\x16\x14\xe2\r\xd5fΗ\x97\xcc\x15\x95tk\x12\xeb\u008eT\x94h\xd2\x14\xbdէJvr3\xdb\x15\fB\xa9vm\x8a\xb0\rQ~\xa3z\xc5\xd9ҏ\x99\x82\x8f\xe9\xb2\xcdq\n\x9d\xb9\xf6]\x12\xd9N\x89\xe1oL\xa1ɺ\x8c\xf1j\x8cx\x92\x81^\x1c?\xae\xbb\xbfx\x13k3\xe0U\xfaCo\x01\\4I!\x8b\u07b7\x8b#\x93L\xc5\xeb\x03\xe7\x94\x03cAKu3X\x17S߬h\x93\x13\xfeR\x86\xa0\xe8\xa2\xfd6\xe5\xda/\xa9\xdd\xf8抍nMƠ\x92\xbd\xec\xb0ci\t\xe9\xf2\x9a\x8cn\xcdň\x91YP\x89qq\xa5\xc5|\xbc5YU\xf1\r\xb5\x14\xa9Nb\xca\xe0NTP,\xf09\xe6\xab%\xbe\xa9F\x82\x0f\xf3&\xb0\xbe\xa82\xa2U\xf50\x01rY=\xc4\x02\x92\xcc\xd5>\\\\\xf1p^e0\xb1\x88\xb9:\x87\xf1\x1a\x86\t\xa0\x83\xd5\rK*\x17&`\xd65\r\xefX\xaf0S\xa5\xf0>\x95\x84\xbf\xd6\xf7\x1c\xab9\x98\xa94\x98\xf1L\xa7\xb0\x9a\xa9%X^A0C\x9fo\xac\x16\xa8\xeb\x01\x06缴F\xa0[\x050\brae\xc0\xc8\xd9\xff \xc8\x05\xf5\x003'\xfe\x83`'\r\xe3\x84D\x8c\xfedl\x8ev\u008d\\&\v\x13r\xd0M\xa3\x9c\xcdvVw\x9c\xeexQ\xaf\xb6[ڧ\x85\xa9+f3\xf8I\xea<\x90\x8fx\xdf2\x83|w\x91+\x12j;\xdc8*C \xcf\xdc`\x87\xa5\xb0\xc8I\xe9S\b\x8c\xdd\x1a\x1eDv\xe8v\x84\x83p\x14\x1a\x15\x03\xa5\x98\xd7u\xd4p\x9b\xc6З\xeb5\xc0\x8f\xa6\x0e\xc6\xda\xf7G\x9c,Ju\x82\xca!\\w\x87\\\xee\x14\x0f\xf0\xdbiQ\xba\x83I\x17\xf4&\xfd\xe2\xafݾ\x03\xc1d\xba\x9e\x97)S\xe55\xecAv\t}\x82\xc7g6\xea|\xf5)k.~Eӝ\x9c\xdd\xf3{a?\xbcgp鼱b\x8f?\x9b\xacu\xb3zl\xfdݾ\x9dk\xb0q\x13\xa7\x14N\xaa{\x11\xe9>fw\xe8P\xac\x10\xb3\xaaQ\xe6\x9bh\x9b0\xec\xef\xef\xd1\x1d潚\\\xc4\xd3\xd3\xcf\x01q/\v\\\u007f\xaeB\xe0\xbe*\x85uH\xf4K\v\n\x83\xb6\xf4\xe7\xc1\xbc\xf6\x10V&\xae\xf4\x87s|-rΖ\xb3\x03\x8b\xb1\x0ew7\x93\x80%2M\x8b\xe3\xf3\xf0\x98V\xec\xd1bJ\xd8\xc1f76\xaa\xb7\xc0\xd6\xc5u\x8a\xeeB\x05\xd3{]I\x1c6\xc6×}\xbd\U000156fb\xee˝\xd2\xe5\xfd\x98\xe1\xaf,\xdf(\f\x00\x820^|\xe37\xa63;/*L\xf1\xe4\xbeߟ\xaf\xce\xdb< \xc5i\xd4\xfa\xf2\xee\xabpu\xc2t\xc0\x825\xc0\xc28v\xfe\b\x16\xe6\x80G\xd4`4\xe7G\xf9\xc6^x\xd7\xe1|L?_т\x11ӯU\xa9\x8c\xc8\xd3\xceM6'>\a\xf0\xc4\xfa\xc8\x1e\xd1~p\xa3\x10\xf9j\xf2\xceء\xe5\x9fKV0\fw\x90\v\x8f\xab\x01\x80\v\xf4\u0600H\xf1a\xc1\xccU]\xee\x12v\a\x9f3\xa4\xbb\xd3ᠡ@\xe7\xc4>\xdd\xd1}%u\xb4GMN\xcd@V0\xba\xdeM\xa2\xba{_5D\xf0\"\xf3\x95\x88\xe0Sʢ\xd5\xebC\u007f\xcf)\xb3\x87\x9dT\xdc1\xbe\x10\x10\xf5\xf3\xb0\"\x91\xda\xe3\x1e\xbb\xee0\xbe\x95\xd2\xce\xeb\xf2\x87\xba\x1bQ\x84S5\xbcÛ\a3Pɽ$\x85H\x8c\xdd\v\xbb\x15{\\eFQ\xdc,\x8d>\xc7\xe8\xef\xc3\xd7\x00u\xe05\x8cނ~l\xf7L\x1eO\x14\xe6\x00%=\x8eq\x13-*q\xb0\x10\u007f3\xb6\u007f8WHmlpW9dJC\x17\xebs\xbe\xc6<\x89\xef#\xf5\xa8O#[\xba\n\x930\r\xdb\xf9\xa1S\xab\x15|\xc1s\x13\x15\x0e\xa20\u007f\xae_M\xe9u\xd8\xe8Gk\xf6\xe4\xe1\xf7~\xbaOZ\xa9\xf7ˣ\xb0^\n\xa5N\x01\xfcȬ\xbdϟ\x91\xf4\u0088!\x18\"`\xc4l\x9a\x86\xb1S\x13BH\x1dx͇G[S\xf9Άk6l\x8f\xe3i\xbe5|1\x1eS\x9eHv!\x92\x05D\xe7W\xb8\xdb\x19\xebC\xbc\xb2Z\x81\xdcE\xc3҃Jڙ3\x9d\xe1\xf5\r\x90\xbe\x89\xda\x1b\xd9d_Тp,\x9b\x9e_\x00\xe1c\x06\x91e\xe4\x9f\xe0\xad\xf3B\xf5t\xc07\xa77\xd9^\x93ta\xfeמ9\xeb\x11y\xd3\xee]\xd75W\xc56\xc4$\f,Ћ\x8fr\x83\xd6S\xc3!\xfc\x16Që\x95ޓ\xbei'\x80\xc1\x93\x86Q\n\x9c\x81\x9d\x18\xbc#>\xae\xf3\xf8W\xe3\x85ڌ%0\xba.`\xdd5-\x87\a\xf7\x17e\x88\r[^\xfa\xe0rB1\x8fti$1.;\b\xbd'\x01\xb2\xa6\xda\x1f\x92\x04\x8eX\x8a\xe1\xa4mE\bA\xa9\xaa=\x89tL\xa4\xfa\xca\xeaV\xf4\x19S\xaby\vU\x91\xbd@U\x0eW\x1a\x84\xb7\x81\xe2\xd3N\xb7\xf1\xee\xf7jgM\xb1\x8a\xf4\xe7\x1c\xe9M\x8c\f\xad4\xe42qL\x13\xaf_\x8e\x80e\xb6\x97%j\x10.\xe22[g4\xc5\xc8\xf1@\xcd\v\xeb\x979a_;]g\xfc/\x86\x8b\xf9\x1a\xbeRt+\x06N\xae\xb9\xc6\xea\xfe\xfca-\x8aLuzE*\xc4ҁ\xf5\x8e\xdc2\x8b\x1c\xb6\x84;\x97=\x88\x1d\x87\xaa\xe3@uQ\xff\xc7\xf8NͻZ\x0f\xf3^\xd4\xf3Y糃3\xda\xc1\r\xbc\xe4\xfb\xfcA\xee\xfa\xf1EY*\x99\x11\xb6\u007f\xfc\x8d\x0eĎ\v\xbc\x8a\x0f\x93\x0e\x05{\x0f\xb5o\x00\x9f\xb1\xb4\x98Ѯ\xec#\xff\xa8\x90\xec\xbdC\xecz*\x1f\x16;v\xdd\x10\xd1}\xf2\x1e\x8br`\xae\x89\x18\xb1\x194\xa6\xf8D\xea\xd0[@z\xbd,\x81\x8a\x95\x1f\xa3A\xe1\xe2\x85Ԯ\xc6%\v\xa9\a\x8d-\xc4U\x19)\xa0]5d\x8a\xea\x98\xeb\x1dW\xf5*,\x05\xdaӻ\xe7?b\xa7\x81($\x8e\u007f\xdf8\xa4\x15\x86$\xfc\xfeA\x81Ȁ\x1e?\xfb\xd4<^\xf8\xb1\xf9\x8fɷ\x8a\x8f\x15\x1eC\xfd k˼\xb5\xb5#*\xf1K\x93 \x10Y\x86$\xbb_\xce\xdf-\xbc\xbe\xe6\u007f\xd2ӄ\xfcoft\xb0\xa5\xee\x0e\xfe\xf3\xbf\xae 晞\x13\x1e\xf4\xf1\xff\x03\x00\x00\xff\xff\fi\xcb\xdd\xe8Q\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xbcXMsۼ\x11\xbe\xebW\xec\xb8\a_*\xca\xe9{\xe9\xf0\xa6\xe8\xed;\x93։5\x96\xe3\x1e\xda\xce\x04\x02\x97\x12j\x10`\xf1!G\xed\xf4\xbfw\x16\x00?DR\x92\x93i\x82\x93\b\xac\x16\xcf>\xfb\x81\x05f\xf3\xf9|\xc6j\xf1\x8c\xc6\n\xadr`\xb5\xc0\xaf\x0e\x15}\xd9\xec\xe5\x8f6\x13zqx\xb7E\xc7\xde\xcd^\x84*rXy\xebt\xf5\x88V{\xc3\xf1W,\x85\x12Nh5\xabб\x829\x96\xcf\x00\x98R\xda1\x9a\xb6\xf4\t\xc0\xb5rFK\x89f\xbeC\x95\xbd\xf8-n\xbd\x90\x05\x9a\xb0C\xb3\xff\xe1.\xfb%\xbb\x9b\x01p\x83\xe1\xefO\xa2B\xebXU砼\x943\x00\xc5*\xcca\xcb\xf8\x8b\xaf\xadӆ\xedPj\x1e\xf7\xca\x0e(\xd1\xe8L虭\x91\a$E\x11\xe01\xb96B94+-}\x15a\xcd\xe1ϛ\x87Ok\xe6\xf69d\xd61\xe7mV\xef\x99\xc5\x00\xb9@ˍ\xa8]\x00\xf6>\xec\a\x9b\xb8!ܧ\x1d!\xfe\v\xac\xe7{`\x16\x96\a&$\xdbJ\\|V\xac\xf9\x1d\xb4E\xd8\xebV\xbb;֘\x83uF\xa8\xdd\x19(\x92Y\xf7̤(Z&Ƹ\xeeG2 ,\xb8=\x02\xfd\x1b\x1cM\xd0W\xe4\v\x880\x84\x86/xe6\xa8\x048D\x1dX\xf4\xc0\x92nx>Y\x88\xa8\xe9{\x88\xb9\xf1~6\xf2\\O\xe3r\x87c5;\xa3}\x9dC\xe7\xba(\x9d\x02'\x06]\xa4?\xb1ߐ\x1f֥\xb0\xee/\xe7e\xee\x85uA\xae\x96\xde0y.p\x82\x88\x15j\xe7%3g\x84f\x00\xb5A\x8b怟Ջү\xea7\x81\xb2\xb09\x94L\x06\xafZ\xaeɮO\x84\xbef)\xac/\xba\xec\xa1/\xd95_\x11E\nW\x8b\x8e\xaa\x9e\x05\x85\x14\xce\xcc\f\xe3\nȣ\\+E^r\x1aXkϭ\x1d:o\xf0\xd7s\tFc\xeb\xf9\v\xba\xf1\xfc0\xea\x82Xӝ\xc5?\x11\no1p{\x19\xc0\x15\x9f\x01p\xb6Bs\x1d\xc5jIbm\xc43X-a\xebU!\xb1\xc1\xf2\xbaGEǷ(\x8ft\x86<\xddo&tB\xc3c(\x0e\xe9\x00n\u061c\xc2^jS1\x97\xc3\xf68Jꫦ\xd5\x06K\xf1\xf5\xaai\xeb \xd6\x10\\3\xb7\a\xa1\xac(\x10\xd8\x04\xdd\x13U\xb6\x19m\x02?\xd41\x91\xbe\xd1\x19TA\xa8\xa8\x8f\v^\x84\xf1\xd6\xf4h\xf8\xbc\x98\x19\xeb$\xd4\xda\xdd|\x87\x86kX\xb0\xa7Ss\u008a\xae/\xfd-\x16D~\xbc\b\xe3y,\u007f\xa1\xac6\xb7\x8dq\x82RK\xa1\x8dA[kUP\xfc\xbd\xad\xa8vp\xff\x1f\xa5uʁ\xf3\xd3ju\xb2\xd2p~\xb5_\x88\x9d\xff\xb7u\f\xf1\x82\xd9?\x97\xf56\\BzM\xc3\x0f\xee\x0fnz\r\x02\xb5\x9c\n\xbc\xf2\x16\x8bX\xef3\xf8\xbb\x82_\xa9\x81\xe4\xd4\xd8儑z9;\xf2\xaeү\xf4瞶\xa0\x00\xb4\nv\x85\xe6\x88Z\xf4\xd8o\x86\xa5W!%u\x8d\x06+}H\x97\xd0\xfe\xa0\x16Ϡ<\xd2\xe5[\x97p\xf8Cv\x97\xdd\xfc\xe4\xe6\x83n\xda\xd4M`\xf1\x88\a1\xbc.\x8dټ\x1f\xc97\xc9ۆ6}|i\xfaЅIb_F\xe6\x97BR\xd7<\x91\xe9\xddUp\xfc\x18\xf0~s\u007fkÓ\fu\xfc#\xa5\xaf\xe4>\x1b\x00\xd2\rJ\xa7F\xdf[\x87f\xc2٭\xaf\x84\x05\xa5Aj\xb5;I\x858R\xdb\x0f\xda@\f\x1dm\xa0@\xea\xd8)\xcb\xf9\x9e\xa9\x1dvW\xb9\x84\xbd\x87\x92\x02c\x8c\xf44:\xbah\x10j:\x14\xde\xe0\xc3'Q]Ά\xfb\x13\xd1\xe9\xe7\x96\x16u\xf2\xa5\x1c\xe7\xe4\x1b\xb8\x1eH7g(\x119w\xcdsP7\xbe\xaf\x8b\x1c\xbf2]\xb5\xfe\xbb\x1f\x9c\xc6\xe63\xdb==\xfd|\xdb\xc3c\xdf\xe5\xe3\x95$\x1a\v\xb97\x06\x95\xeb\xeanH\xa6\xa9\xda\xfb\xb6\xfb\xcf\xf2䅰\xbf2|=\xbcj\xcb\xc4y3\x98\xea\xdeX\xdfu_\xe9\x194\xbe΅\x05\x80x\xb8\xf4\x88L\x15%\xcdt\x87\x18\x9d\x1e\xb5\xc3\xe2\xd3\xf0\xb5\xee\xe6\xe6\xe4\xc9-|r:\xcf\xe3\x830\xfc\xed\x1f\xb3\xa8\x15\x8b\xe7\x06\aM\xfe/\x00\x00\xff\xff\xf4\xc0lv\x8f\x16\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4\x96\xcdn\xe46\f\x80\xef~\nb{\xd8Kdz\xc1^\n\xdf\xda\xec\x16\b\xda\x06A\xb2ͥ\xe8A#q\xc6ldI%\xa9Iӧ/$ۙ\x9f8\xc8\xf6\xb0\xbe\x89\xa2\xf8\xf3\x91\x94լV\xab\xc6$\xbaG\x16\x8a\xa1\x03\x93\b\xffQ\fe%\xed\xc3\x0f\xd2R\\\xef/6\xa8\xe6\xa2y\xa0\xe0:\xb8̢q\xb8E\x89\x99-~\xc2-\x05R\x8a\xa1\x19P\x8d3j\xba\x06\xc0\x84\x10\xd5\x14\xb1\x94%\x80\x8dA9z\x8f\xbc\xdaah\x1f\xf2\x067\x99\xbcC\xae\x1ef\xff\xfb\x0f\xed\xc7\xf6C\x03`\x19\xeb\xf1/4\xa0\xa8\x19R\a!{\xdf\x00\x043`\a\x0e=*n\x8c}ȉ\xf1\uf322\xd2\xee\xd1#ǖb#\tmq\xbc\xe3\x98S\a\x87\x8d\xf1\xfc\x14ԘЧj\xea\xa7j\xeav4Uw=\x89\xfe\xf2\x9aƯ4i%\x9f\xd9\xf8倪\x82P\xd8eoxQ\xa5\x01H\x8c\x82\xbc\xc7\xdf\xc3C\x88\x8f\xe1gB賈\xad\xf1\x82\r\x80ؘ\xb0\x83\xeb\x12u2\x16]\x03\xb07\x9e\\\xc53\xe6\x11\x13\x86\x1fo\xae\xee?\xde\xd9\x1e\a3\n\x01\x1c\x8aeJUo)\a \x01\x03S$\xa0q\n\x10b@\x88\fCd\x841Zi'\x93\x89cBV\x9a\t\x96\xef\xa8\u007f\x9eeg\xceߗ\xe8F\x1dp\xa5cP@{\x84\xa9\xee\xe8@j\xe4\x10\xb7\xa0=\t0V,a\xec\xa1#\xb3PTL\x80\xb8\xf9\v\xad\xb6pWб\x80\xf41{W\xdal\x8f\xac\xc0h\xe3.пϖ\xa5\xe4W\\z\xa3s\x81珂\"\a\xe3\v\u05cc߃\t\x0e\x06\xf3\x04\x8c\xc5\a\xe4pd\xad\xaaH\v\xbf\x158\x14\xb6\xb1\x83^5I\xb7^\xefH牱q\x18r }Z\u05fe\xa7M\xd6Ȳv\xb8G\xbf\x16ڭ\f۞\x14\xadfƵI\xb4\xaa\x81\x87:0\xed\xe0\xbe\xe3i\xbc\xe4\xfdQ\xa4\xfaT:A\x94)\xec\x9eŵ\x87_\xe5^\xfaw,\xf3xl\x8c\xff\x80\xb7\x88\n\x95\xdb\xcfw_`vZKpʼ\xd2>\x1c\x93\x03\xf8\x02\x8a\xc2\x16y,ܖ\xe3P-bp)Rк\xb0\x9e0\x9cB\x97\xbc\x19Hen\xbfR\x9f\x16.\xeb\xbd\x01\x1b\x84\x9c\x9cQt-\\\x05\xb84\x03\xfaK#\xf8ͱ\x17²*H\xdf\x06\u007f|ݝ*\x8e\xb4\x9e\xc5\xf3]\xb4X\xa1\x85\xb1\xbcKhK\xcd\n\xb8r\x96\xb6d\xeb\x18\xc062<\xf6d\xfby,O\x88>\x0fp{$^\x1a\xd8\xf2\x8d\x06ʭr*\u007f%Y\xa8u\"Ɠ^[\x1d\x99y\x93\x82\x1a\xcd\xf2\xbf8\xd4\x133\t\x9b\x991\xe8d\xa7\xde\x02K\x87\xbe&wd\x8e,\xe7y\x9f\x84\xf3\xb9\xaaԿ\x96\xa1 `\xc2\xd3t\f\xb47\n\x8fȥ\xc5m\xcc\xe5\xee@\a.\x9f\xf1\x9aP\xf48\x16\xa5\x94/q\xb4(Ҟi\x91\xe2\xf0\"\x9aW\xebP\xbe\xf2'4\x1b\x8f\x1d(g\\\xac\x9fa6O';\xa97\xf2\xa2\xd8'I\xdf\x14\x8d%\xde8\xde\xcb\xf8\x16\xf0\n7\xe4\xe1\xdc\xcb\n\xae\xf1\xf1\x85\xec*\xdcp\xdc1\x8a\xbcغ\x19I՟\xddW0Yh\xb83\xd1\xe1\x81qqXU\xe8\xab\xe9AQ7\x00\xea\xaf\xd8\x1d\x81\x15\x8dlv3\xeaC\x17\x1bk1)\xba\xeb\xf3\xe7Ļw'\uf0ba\xb418\x1a_C\xf0ǟ\xcdh\x15\xdd\xfd\x1cG\x11\xfe\x17\x00\x00\xff\xff\"\xf7\xf4 \x8c\t\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WOoܶ\x13\xbd\xebS\f\xf2;\xe4W \xd2&ȥЭuR h\x1a\x04v\xe2K\xd1\x03\x97\x9c\x95XS$\xcb\x19\xae\xe3~\xfab(i\xffhe;=to\x1a\x0e\x87\x8f\x8f\xef\r\xb9U]ו\x8a\xf6\x16\x13\xd9\xe0[P\xd1\xe27F/_\xd4\xdc\xfdH\x8d\r\x9b\xfd\x9b-\xb2zS\xddYoZ\xb8\xca\xc4a\xb8F\n9i|\x87;\xeb-\xdb\xe0\xab\x01Y\x19Ū\xad\x00\x94\xf7\x81\x95\x84I>\x01t\xf0\x9c\x82s\x98\xea\x0e}s\x97\xb7\xb8\xcd\xd6\x19Le\x85y\xfd\xfd\xeb\xe6m\xf3\xba\x02\xd0\t\xcb\xf4/v@b5\xc4\x16|v\xae\x02\xf0j\xc0\x16L\xb8\xf7.(\x93\xf0\xaf\x8c\xc4\xd4\xec\xd1a\n\x8d\r\x15EԲh\x97B\x8e-\x1c\aƹ\x13\xa0q3\xef\xa62\xd7c\x992\xe2,\xf1\xafk\xa3\x1f\xed\x94\x11]N\xca]\x82(\x83d}\x97\x9dJ\x17\xc3\x15@LH\x98\xf6\xf8\xd5\xdf\xf9p\xef\u007f\xb1\xe8\f\xb5\xb0S\x8e\xb0\x02 \x1d\"\xb6\xf0IPF\xa5\xd1T\x00{\xe5\xac)T\x8c\xb8CD\xff\xd3\xe7\x0f\xb7oot\x8f\x83\x1a\x83\x00\x06I'\x1bK\xde\x127X\x02\x05\x13\n\xe0p\x00\x06ʃJlwJ3\xecR\x18`\xab\xf4]\x8eSM\x80\xb0\xfd\x135\x03qH\xaa\xc3W@Y\xf7\xa0\xa4ژ\b.t\xb0\xb3\x0e\x9biJL!bb;\xb3,\xbf\x13}\x1db\v\xc0/eGc\x0e\x18Q\x14\x12p\x8f0\xe9\x02\rP\xd9-\x84\x1dpo\t\x12\x16*\xfd\xa8\xb1\x93\xb2 )\xcaO\xc8\x1b\xb8\x11\xba\x13\x01\xf5!;#2\xdccbH\xa8C\xe7\xed߇\xca$\xbcȒN\xf1,\x84\xf9g=c\xf2\xca\xc9Yd|\x05\xca\x1b\x18\xd4\x03$,\xecd\u007fR\xad\xa4P\x03\xbf\x85\x84`\xfd.\xb4\xd03Gj7\x9b\xce\xf2\xec(\x1d\x86!{\xcb\x0f\x9b\xe2\v\xbb\xcd\x1c\x12m\f\xee\xd1m\xc8v\xb5J\xba\xb7\x8c\x9as\u008d\x8a\xb6.\xc0}1T3\x98\xff\xa5\xc9~\xf4\xf2\x04)?\x88z\x88\x93\xf5\xdd!\\t\xfe(\xef\xa2\xf3Q\x1e\xe3\xb4\x11\xff\x91^\t\t+\xd7\xefo\xbe\xc0\xbch9\x82s\xceG\x9d\x1c\xa6ёx!\xca\xfa\x1d\xa6\xf1\xe0\x8aʤ\"z\x13\x83\xf5\\>\xb4\xb3\xe8\xcfI\xa7\xbc\x1d,\xd3,[9\x9f\x06\xaeJ_\x81-B\x8eF1\x9a\x06>x\xb8R\x03\xba+E\xf8\x9f\xd3.\fS-\x94>O\xfci;<\x999_\x9a\x87\x8bd\x99v\x8d\xd2j\xf11H\xd3\xf05Rv\xab\v\xad\nq\xfe\x95\x8b\xf39\x96\xe5\xee\x99Y\x96\tc\xc7E\x90\v;yd\xa4c\x1b\xb8\xb7\xdc\xc3}ou\xbfR\x15ʴr@\xd2_\x88\x82\xb6ű\xff\x0e\xb6\xe8\xd8&\xbc\x90G]Ds\x11\x14\xc8\xd5Z\xf1\x85\xe7\xd6\vד\x17\x9eu,+\xce\xf4ݞ-\xd93\xa9:\xa7\x84\x9e\xa7\x1a\xe5\xb6ZN\xf8\x1e\xd3Ί\xffz\xfd\xf1I\xe7\xbe;\xe6\x957\x98\xb2~\xc4\x11\x13\xd6d;\xb9[eL\xbc[\x9c\xb5$`\xfc\x9d\xde\xf1Ϟ\x1a~\x8b6\x9d\xa7\xa0\x91\b\x97\xc6x\x04\xfd\x8a\xb8\x17\xa1\xe3\xc3\xfc\xcd\xf1\xabH\xb1\x9e\x1e\xe2e\x00\xa0-\x9f\xe2/^\x9c\xbd\xad˧\x0e\xde\xd8\xf1_\x04\xfc\xfeG5VEs;\xe3\x90\xe0?\x01\x00\x00\xff\xff\x045\xfb\x0f\xc4\f\x00\x00"), @@ -37,7 +37,7 @@ var rawCRDs = [][]byte{ []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xc4Y_s۸\x11\u007fק\xd8\xf1=\xb87\x13R\x97\\\xa7\xd3\xd1\u06dd\xddt\xdc\xde9\x9eȗ\x97L\x1e b)\xa2&\x01\x16\xbb\x90\xacv\xfa\xdd;\v\x90\x92(Q\xb2\x9c\xe9\xa5zI\b,\x16\xbf\xfd\xed\x1f,\xe0I\x96e\x13՚O\xe8\xc98;\x03\xd5\x1a|f\xb4\xf2E\xf9ӟ)7n\xbaz\xbb@Vo'O\xc6\xea\x19\xdc\x04b\xd7|Dr\xc1\x17x\x8b\xa5\xb1\x86\x8d\xb3\x93\x06Yi\xc5j6\x01P\xd6:V2L\xf2\tP8\xcb\xde\xd55\xfal\x896\u007f\n\v\\\x04Sk\xf4q\x87~\xff\xd5\x0f\xf9\x8f\xf9\x0f\x13\x80\xc2c\\\xfeh\x1a$VM;\x03\x1b\xeaz\x02`U\x833h\x9d^\xb9:4\xe8\x91\xd8y\xa4|\x855z\x97\x1b7\xa1\x16\v\xd9u\xe9]hg\xb0\x9bH\x8b;Dɚ\a\xa7?E=\x1f\x93\x9e8U\x1b⿏N\xffb\x88\xa3H[\a\xaf\xea\x11\x1cq\x96\x8c]\x86Z\xf9\xe3\xf9\t@\xeb\x91Я\xf07\xfbd\xddھ7Xk\x9aA\xa9j\x92i*\\\x8b3\xb8\x17\xa4\xad*PO\x00V\xaa6:\U00091c3b\x16\xedO\x0fw\x9f~\x9c\x17\x156*\r\x8afעgӛ(\xbf=\xefn\xc7\x004R\xe1M\x1b5µ\xa8J2\xa0şH\xc0\x15B\xe7\x15\xd4@q\x1bp%pe\bE\xe5\b-8[o\xc6\xd1:\xa8\xd4\n\x81\\\x83\xb0ƺ\xceR\xaf\xa0a\xad6b\u007f\xef.\x890\x05\xad\xf2<\xec\x06F\xb5>~\xb8\xfd0K\xa8$\x84\x96\xb1\x8e\xc9)S\x1a9\xf3\xe5\xb0O'\x97\xc4d\xa4#\xa4\xe0`\aE\xa5\xecHY\x83\xd84Dv\xcb gI~\xfd\xdal=<\xb6\xfb\xdf\xc8\xf1}X\x18\xfeO\x87\xe0Ef\xc5\xd6\xf9E\xb3\xee\xf7\xe2\xf9\xacY\xd2\xc4{\x8b\x8c\xd12\xed\n\x12\xa3\nl\x99\xa6n\x85~ep=];\xffd\xec2\x93@\xccR$\xd04\xb6\xe1\xd3\xef\xe2?_eE\xec\x8c/3%\x8a~\v{d\x1f\x9a\xbeڜ\xbe\xaf\xbb\xf4T\xba\x9ew\x8d\xc7\xe1JI\x89ue\x8a\xaao\xd2w\xd5s4G\x1a\xa5S\xc9Uv\U000fb1ed\x10\x19\xbc\xe0\xd9d\xdd]0SV\xcb\xff\xc9\x10\xcb\xf8\xab\x99\v\xe6\x82$\xfd\xed\xee\xf6\xdb\x04s0\xaf\xce\xc8ц4\xc5D\xeb\xee\xb4\xd0W\x1a\xf4g\xbb\xa9\x8f\x03Ѿ\v\x1c\xe9\xe3\xb62\x177rdUK\x95\xe3\xbb۳\b\xe6[\xb1~\xf7\x1d\xe5]\xfb\xd6k\x92\x10=ӷ\x9dD\x92ԜE\x91\xfa\xee\xb1.\xb8Ð:\x868\"\x1d\xe8W!\x91됴9\xfbH\xb2\xf1\x0e~ \xd1:=\xf8\x1e\xfaw0\xb5#}0\x9c\x8cx\xf12Ê\x03]~\x9d\x89\xe2=g)?\xb9S\x12\xcf\uebfa\xd0\x14N\x9a\xb9\xe1\xe3\xcd9\xcf\xdd\x1c\xcb\xc7\x17\x02\xaf\x13.6\r\xc6\xdbBD\x00kE\xfd\x16\xc7~\x83=mia\xac\x84\xa2\ful\xb6\xa4\x0f,\x95\xa9Q\xc3\xf6\xe9\b\x1e\xe5>\x17\xaf\xcc\xd7ǵ\xb2W\x13\bu\xbc\xe7\x8d\x00>\\U:\xdf(\x9e\x81\\\x933Qp0oC]\xabE\x8d3`\x1f\x0e'O\xa6A\x83Djy>\x0f~M2\xe9\x86\xd5-\x00\xb5p\x81\xb7W\xac.!:\xf3\xaf\xa9\xf3\xf8\xe5\x17\xbcJ\xd1y\x10\x0f\"1\x16Wۤ<\x17X\x10o/\xa19\xdc\"\x83{\\\x1f\x8d\xdd\xd9\a\xef\x96\x1e\xe9\xd0\aY﨣\xf6;\x83\xf71\x02.6\xb8\xdb\xe0\xbc͝\x10T\xae\xee#ױ\xaa\xc1\x86f\x81^\f_l\x18\xa9g\xa0O\xf4\xe3\x1bj\xecyw\xbc\xed\xd6\xf7\xd5*)\xea:\xf8B\xd9\xf8$#\xd1\xc9\x0e\xb4\xa1\xb6V\xc7-|oC<\xf6$8%Cvq\xd1g\x97\xa4t\x9c{͝:¹uv\xb4#\xebS\xc1X\xfe\xd3\x1fO\x9e\x8f\xc62.\a\xa5\xb0\x9b\x15\n\u007f\x16\xfd\xffk\xdd'\x0f_b\xe5\xf9\xb2\xd25\x1f\x88\xbeT\xb5\xa2ⱚ\xb5_~\x8e\xcb\xcdp\x93oQiF\xa89\x18\xda=ؿ\xdd}E\x17e\xdd\x03}\x9c\x80d\x96\xdeۼ{\x8c\xeaFv\a\x96*\xa4\xd7B}\u007f\xf8B\u007fu5xp\x8f\x9f\x85\xb3ڤ\xbf.\xc0\xe7/\x13螨>\xf58d\xf0\xbf\x01\x00\x00\xff\xff\x98\xaaEc\xdc\x18\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4W\xcdn\xe36\x10\xbe\xfb)\x06\xdb\xc3^*y\x83\xbd\x14\xba\xb5i\x17\b\x9a\x04\vg\x9bK\xd1\x03E\x8d\xeci(\x92\xe5\f\x9d\xbaO_\x90\x92lٖ\xbd\xc1\x02\xab\x1b\x87Ùo\xbe\xf9!\xb5(\x8ab\xa1<=c`r\xb6\x02\xe5\t\xff\x15\xb4i\xc5\xe5\xcbO\\\x92[noj\x14u\xb3x!\xdbTp\x1bY\\\xb7Bv1h\xfc\x15[\xb2$\xe4\xec\xa2CQ\x8d\x12U-\x00\x94\xb5NT\x12sZ\x02hg%8c0\x14k\xb4\xe5K\xac\xb1\x8ed\x1a\f\xd9\xc3\xe8\u007f\xfb\xa1\xfcX~X\x00\xe8\x80\xf9\xf8\x17\xea\x90Eu\xbe\x02\x1b\x8dY\x00X\xd5a\x05\x01YH\a\xf4\x8eI\\ \xe4r\x8b\x06\x83+\xc9-أNn\xd7\xc1E_\xc1a\xa3?=@\xea\xc3YeC\xab\xd1\xd0.o\x19b\xf9}v\xfb\x9eX\xb2\x8a71(3\a$o3\xd9u4*\x9c)$\a> c\xd8\xe2\x1f\xf6źW\xfb\x89\xd04\\A\xab\f\xe3\x02\x80\xb5\xf3X\xc1c\x82\xea\x95\xc6f\x01\xb0U\x86\x9a\xccH\x0f\xdey\xb4?\u007f\xbe{\xfe\xf8\xa47ة^\x98,;\x8fAh\x8c1}\x93\xfc\xeee\x00\r\xb2\x0e\xe4\xb3Ex\x9fL\xf5:Ф\x8c\"\x83l\x10\x86\xbc`\x03\x9c݀kA6\xc4\x100\xc7`\xfb\x1cO\xccBRQ\x16\\\xfd7j)\xe1)\xc5\x19\x18x\xe3\xa2iR\x19l1\b\x04\xd4nm\u9ffde\x06q٥Q\x82\x03\xc5\xe3GV0Xe\x12\t\x11\u007f\x04e\x1b\xe8\xd4\x0e\x02&\x1f\x10\xed\xc4ZV\xe1\x12\x1e\\@ ۺ\n6\"\x9e\xab\xe5rM2V\xb4v]\x17-\xc9n\x99\xeb\x92\xea(.\xf0\xb2\xc1-\x9a%ӺPAoHPK\f\xb8T\x9e\x8a\f\xdc\xe6\x82.\xbb\xe6\x870\x94?\xbf\x9f \x95]J\x1bK \xbbދs\x95]\xe4=\x15\x19\x10\x83\x1a\x8e\xf5\xf8\x0f\xf4&Qbe\xf5\xdb\xd3\x17\x18\x9d\xe6\x14\x1cs\x9e\xd9>\x1c\xe3\x03\xf1\x89(\xb2-\x86>qmp]\xb6\x88\xb6\xf1\x8e\xac\xe4\x856\x84\xf6\x98t\x8euG\x922\xfdOD\x96\x94\x9f\x12ns_C\x8d\x10}\xa3\x04\x9b\x12\xee,ܪ\x0eͭb\xfc\xee\xb4'\x86\xb9H\x94~\x9d\xf8\xe98:V\xec\xd9ڋ\xc7i1\x9b\xa1\xd3\xfe\u007f\xf2\xa8S\xc2\x12k\xe9 \xb5\xa4s\x0f@\xeb\x02\xa83\xfdrbx\xae9\xd3W+\xfd\x12\xfd\x93\xb8\xa0\xd6x\xef\xf4\xa4\xcd/\xa0\xfae\xee\xc4\b+\x8d\xb8\xbeQq^\xf1\xc42\x80l\x94L:T\x14\xd9}\x9b\xcf\xc4q\x91\xf2L\xbbJ\xedj\x95\xd5\xf8)\u05ceջ\xab\xb1<\xcc\x1cH\xa1l\xdc+\xb8V\xd0NM\x8e(k<\v\"D\xfbf\x90\xfdL\xbekRi\xb5\x84\xe1*\xc0Չ\xf2\xc8s\x1b\x8d\x19,\x15\xdau^\t\xd5\x06\xc7Fn]8\x83H\xbd\x8d]\xdf\xd5\xdf\xc6\xef֙\xd8\xe1\xfen\xb8\x8a\xfc\xf9XwZ \xbd`\x00\x91B\x80p|\x05N\xbf\xa1&\x18\xbck\x06\x00C\xd1r\x8a\xf3\x8d\xd8Sr)\xe0\xd14,\xe6\x8b\xffHc\xae\xa2\x8e\x14N\xb3y\xb4y\xc2\xd7W\x87\x81(\x89\xfc\xf6q\x90\xd5Gbu\f\x01\xad\fF\xf2M\xf8M\x03\xc1(\x96I[\xa47\xd0\xd5<ߟ돐\x92)\x90$\x98vѫ\xe2\xb9~i]\xe8\x94T\x90F{\x91\x0e\x9d\xec\xa7\x17\x98\xaa\rV !\x9en^\x9e\bȬ\xd6\xd7#x\xe8u\xfa\xabp8\x00\xaavQ.\x10\x9b/\xc5+\xd4^E\xe47\x8a\xaf\xe3\xf9\x9c4\xe6Ҋou\x8e6v\xa7.\nx\xc4\xd73\xd9\nUs\xdas\x05<:\x99۸\x10\xd3L-\x9f\x88\x0eO\xec\x9b\xc3*\xd7]1<\xa9\xf3\x06@~\x996\x93\x14sߛ\x83\xe4\xd0 Jk\xf4\x82\xcd\xe3\xe9\x93\xfaݻ\xa3\x17r^jg\x1b\xea\xff\a\xe0Ͽ\x16\xbdUl\x9eG\x1cI\xf8\u007f\x00\x00\x00\xff\xfflC\xbf\xee\x8e\f\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec}mo\xe46\x92\xf0\xf7\xfc\n\xc2\x1b\xc0\xf6\xad\xbb=\xb3{\xb7\xb8\x1b\x1c\x10xg\x01M\xd7\xfe\x14P\xad\x8d\x19\x88;.\x88,y\x93\x8b=2\xfd\xf7\xb7\xa1\xdc\xf7\x1f\xcb\xdaA\xe5\xa2\xf7\xb3[\x19]^i\xf4\x89U\xc0\xb5\\c\xcaO\xbf\xe9\xdaa\f\xbfT$\xb7FE\xc8\xe9\x02\x0e\x0f\x15y\xfb\xe1\x9d\xd7\x17\f\xfb\xef\xcd\xdd\xed`6\xc6XH\xb1b\xa9Qe>S\xc9\xe8,3\x06\xe6\x1c$\xf0\x04\x14\xf9\xfa\xe8\xf3٧\x9f.\xcf>\x9c\x1f\a\x806F)\xdc\x17\x94\x1b\x8a+\x95\x97\xc6\xd5~\x9b\xc9\x03_1)\xb8AM\b\x1e.愒\x95\x9fiR\xe5A\x19\xc3&[Az\xe2\xe2#n\x05!\xf8\xb0l\x92\xf1\xa2\xd4ޓxDz\f\xb3\xacx\xb2\xa4|a\xb0t\xb3\f\x01\xda\xc0\x1fQk\xae齙3\xaa\x90*\xa1\x05\xa4H\xbf\x84\x06\x80LEi\x96\xfe\xf5\xd7'\x84\xc1\x1b\xf2u\xe3\x13Sr\xee\xa0\xd6[\x18\x00\x19W\xcba\x05\xd2\xea\xb8v\x03O\x88\x84\x05\x95i\x06J\x19\x0et\xb7\x04\xbd\x84~NK;\xac\xeb\xc3m\x19x\xaf\xa7\xa1\xbe\xaeL\xb6\x00\xc0\x1dYn\xb7UJ攉\xd3T$\xeaTSu\xabN\x197\"e\x92RM'\r&tj%\xc2\xc4I\xa7\x89\xb7\xf1&\x15\xb1\x9e\xfeN\x96\x9c3\xbe\x98\xd0\xea)\xc6't\xa2\x96\x90e\x87\xbd\xa7\x1b\xc0:\x1d\xda¬\xb1\xe6K\xfd]\xd5A\x86\xb2\x1dm\xfev^\xb13\xfb\xd5)\xb9\x14zw&\xd1\xeeQ1r\xc4봓\xe3\x9d_\xde|\xfa\xfb\xd5Nj˛0F\xd7d\x91\xbb\x19_\x00\xccn\x16\xd9\xc1\xf8\x02\x8f\xc9N\x16\xd9f|\x01P\x1fd\x91\x8e\xf1\x05q\xca\aYd\xa4\xe0\xd8\xc7\"\x1b\x8c/d\xae=X$\xae!\x00\xe6\xc8\"\u007fc,\x12\xf8*\x92=~\xe7\xd4\xf6\xc6Q\xae\xf69D4k\x811^\xc6\xdb\\b\x10q\x04c\xbb\xed\x14\xe2\xabϴ\x1d\xc2\xe6\xcde\x06\xc0%5\xe9\xfbLU\x14\x04\x95\x05\x14B\xf0\xe1ڽ\x1d\xfb#\x1b\xddc;\xde\xe1r\xc0c\xf1@\x1a\xb8\x98\x92\x0f.\xa6K\xc9۟.ޝ_\xde\\\xbc\xbf8\xff\x14\x82\f\x12{F\x88\x0f\xcd\x0fB\xc9\xe1\xe3\x99\x14v\xec0,\n\t+&\xca*=7\x18n\xe7\xf1\xdc:m\xe1\xd3\xc5\xc0\xc1\x9a(\x90+\x96@\xf7gB\xf7\xb3\x87\r\x14\f\xb1K!h\x89\xf9`\x88\x8f\xaa\x16\xd8\xd1C9\b\x86\xf9\x04V\x94\x1d\x0f\xdbR\xc1 k\xc5b\x87\xba\x10\f\x11Ջw0\xa7ef\xfd\x13\a\a\xd3\xfe\xd2ڎa\xec\xe5\xbd\x14\xbd\x1c\xc8\xcd\xd1b1\u05f6x\xc3\xfbN\x1f\x83\xf1\x1e\xba\xf4\xba\x96p\xb5\x06D\x04̬\x04oq\x04\xe4\xe6\xd4#V\x9e\x11\x1bF\x9b\xb3\xc5\aZ\xfc\x15֟`\x1e\x0e`\x13٘y\xe7\x92հ\xc00\x02\"1r\xddN+\x9c\xf5\r\xc3\a韏\xd85Z\xb8\xb8qY\x93\xa8\x99\x19\xb4\xc4,\x86\f9@~\xc4h.~\xb4\xc5uS\x85q\xbc/zY}M\x8fD\xf0\x04\n\xadN\xc5\xcaHI\xb8;\xbd\x13\xf2\xd6\xd8\x12\x86\xb3Ol$@\x9db\x1a\xfe\xe9\xef\xf0\u007f\xa2gt\xf3\xf1\xdd\xc77\xe4,M\x89@6Z*\x98\x97\x99M\xf1\x89\x90\xc3~ԅ\xbd'XfzBJ\x96~\x13\xcaH\xfd\x18L\x0f\xa2\xb0y^\x8fB\x13\xd7\x18\x9d\\G\x98\xb4\xedaH\xaa:\xf7ƴeZ\xe1\xf9\xc9K\x15Ϊ\xfd\x98A\xb4\xca禅Ȟ\t\x91\x01\xe5\x110\xfa\x86\xbf\xbaF\x9f\xb4®\xd1;D\xd65\x90\xd6\x1fC\x16\x1c\xd6\xc2\xc0\xa6ȉp\xe9H\xeaT\x887D\x95E!\xa4VU\xc1\xf0\xd4\x1c\xf6p]\x964j\x8e\xa7U\xf5\xceI\xfd\x1b\xa6\x94\xef\xac\xd9\xeb\t\xb8\xd1\xc3\xe1\x04C\xf8S.R\xb8\x8c\x9e1\x82pv\xc2Y\x82A|\x04F\x94\xa6\xbaTӥP\xfa\xe2*\x12\xb6\x05Q\x88\xf4\xe2\xea\xa4\xf5\x97\nV\xf7\xc8#\x88\xe0\xeeF\b!\xa3E\x89\xbea\x82\x15\\Ѽ\xc4uV0\xf4\x88-*\xae\xa8^\x1a\xcd\xedN2\xad!\x869\xd8a\xac)\x90\xb9\"b~b\xb8U\xadl\xaf^\x1f|1\xa5a\xee\x97\xf8([\x80\xb8r\x8a\x03B\x8e\x97\x13^\x9d\xf2Vh\x95Y\x15\r\xf2\xec\xea\xc27\xd0\xf8B\xe8\x1e&%\xaa\xadznY\xe1\x93E\xdf?\x81\xcc\xf0\xb0\xe34\x9cy\xdb1\xf3\xc6fI\xf7\xa9\x8a\xdb=2\x86}6(O\xeb^\x1bG\xf6\xc7iR\x94q\xac\u05fd\x9fC.\xe4\xfa\xc4\xff\t\xc5\x12r\x904\x9b(-$]D\xca\f?M\x9c^\xfd\x97\xfdX\x1cgn,~{\x96\xe1.\x1b\xe2|vI)\x8d-\x91\xad\xbd\x94\x87\xf4\x8bH\x9e\x8ab\xbaZ}\xf4\x1dm\x92\xae\x13N\x87\xd8a5\x8f@W\xc6Jde\x0e\xea\xa4\xd2\xe5\xa3\xc1\x1ah\xc0WdE\xa5\xfab\x16I\xcaVL\xf5K\x91\xec\x1a\x94\xaf?F1\x1f\x82\xfc\xd3N\x9fq\r\x8bh\x03f2\x1c\t\x9d\x86\x95/\xad\x16\xa5.\xcax;h.dNu\x15}\xb8/\x84B\xf7\xa5o?\x11\r\xb8\xa5\xaf\xbc>\x88\x84SP\xadA\xf27俎\xfe\xf1\xfb\x9f'\xc7\xdf\x1c\x1d\xfd\xf0j\xf2\x1f?\xfe\xfe\xe8\x1fS\xfc\x8f\u007f9\xfe\xe6\xf8g\xff\xc7\uf3cf\x8f\x8e~\xf8\xeb\x87oo\xae\xce\u007fd\xc7?\xff\xc0\xcb\xfc\xd6\xfe\xf5\xf3\xd1\x0fp\xfecO \xc7\xc7\xdf|\x1d9\xe1\xfbI\xed\xa9\x980\xae'BN\xec\xd6?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\xa8\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\xc1\xd7\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ଢ\xb3,#\x8c[\x91\x87\x93\xf2\xc9\x1e\x12\xacmO\xa8\"A\x87\bV\xc0\xb5a+|\xb3fS\x11\xa5\xa9Ԍ/\xa6\xe4\xfbe\x90\x1b\xd6\xeaR.;\x82q\x92\x97\x99fE\x06\xa4j\xcaW\xd5\xe4\x87@UJ$\x8cj\x9fzb\x9b\xd4(\xedы\xb8\xd0\xf46\x04f!!\x81\x14x\x02ػ\xa5l4\x1a\x9c\xad\t\xe5䜯\xf0kA\xabOK\x9b\xc2iU\xa7j^\xad\xaf\xd9\f\x87\x00\xb0_$\xd1\xd0\x1cS\x97\xe8\xd1\xee\xe1\x1c\xc4\xf4\xdc\x06\x19\xe5\xda7̩\"\x92!jD\xacR\\ecD\x18\f[\xdap\x1dK\xad\xb4\xd9\xf0X\xa0\x14\xf93f\xa3Ī\xa6O\xa5\x96\xbe,\x95\xf4\t\xd4\xd1\xc7SE\a\xa9\xa1CT\xd0}\xeag\xb4)X\x9f\x1d/\v\xe3U\xc7!jc\xb4\xfaVH\x98\xb3\xfbA<\xe4\x8cW\xfbBX\n\\\xb39\x8b\xd0\xe8\x8d\xd6#\xa1\x00\x8e\x95\xa5@\x93\xa5m\xde\xc6\xdb\t\x1f\xe1\xf4\xfb\x85s\x9f\xad%\xff\x18\x8c\xfa\xba\xcb\xe70rݑ\xeb><~]\\\xd7\x1d\x84_$\xcb}&\x8b\x14\xeb\x1cc\v1\xdf5j%\xf1\xd47o\x81\bXk\x9fSY7 8\xc5\xef\x85\x1c>l;軪\xd5Bȶ\x00\x16wd\xc9\x16\x86\xcc2XAH\xd8\xd3j\xd7$\xa7\x9c.lc7-|\xf8\x8a\bI\f#\x91,\r*\x9d\xac\xcdP\\\xa4\x11k\x86\re\x82\xa6\x8d;{B\x16\x9f\xb1[ \xef\xa0\xc8\xc4\xda\xf5o\xe3)\xb9\xd6T\x1b\xb6s\r:$!+\x82=\xe0:\xae\xca,\xbb\x12\x19K\x02|\xf3mR\xbb@\x1a+\xca,#\x05\x02\x9a\x92\x8f\x1c\xe5\xc3YvG\xd7A\xf1\xc6KX\x818\xbcp̵;\v\x97\xffK\xca\xd3\f$v\xe0r^\xb7\x16t\r2g\x9c\x86\xb5\v U\xba\x12:\b!%4I\x84L]\xd7#\xdf׆\xcaP\xbfH\xc5\xd1P\xdbi\xd0\xebf\xd6Y \xdcY&\x92[EJ\xaeYV7:\xf3]\xce\xdcUY\x810\xfb\xeb\xd1\r6R\xfd\xe7\xa4:+\x13\xbcK\xe6\xf4w\xf5?\xe1\x0faJk\xbc\x95ҧ\x93\xe4\xf6\xd8\xe8\xa6\x06H\x0e\x98\b(8ć\x8a\xe7¨!\x86\x8c\xea~\u007f\x95\x00\x99b3\xbc\b\xa8\xed\x9b\x14(\xb2E\xec\bDo{5^j\x8faq\xf9\xe0\x8e\x1f\xcdѣYfd\x04.c\x1c\x9a]3\x19\xf6\xf2k\x9f\xb9\xd8L&\x03\xc4Y\x90$e\x12\xfbǯ}\xd5`$L\xdf\x16\x12\xbbg\v\xa1\xc9\xd1\xe1\xe9\xe1qx;\x8d6L\xdf\xff\xc3\xe8\xc8\x19X\x19\x19\xdau\xa8k\x96F\rby\x91\xad\x11\xbf\x87\xe9\ta\xb1\xd1VW\xce(K\xee\xf7\xc85m9!\xaa_Ǻ\xed\xa1%\xf5\xfd\xa9-,\x03Z\xcb\xd2\xea\x0f\x91@\x8f\x0e\u007f>ۤ\x93\b\x98,/ܝe\x94H\xa0\x19S\x9a%\xf8\xa5\x98\xa0\x97\x1ff\x96\xe1\xd9)/\xc2\xca?\xfc\xe8\x93\\j\x83?\xfe\xd8:\x86\xd0e\xf0ǚ)\xd6M\x10W\xfc3j\x15\x8f\xa4U8mB\xfa[\xe8F\xad\"f\xbcD\xad\xe2\x97#\xf1\"_,$\\kQ\f\xca\x0e\xb0 \x1e%7\xc0\xdf/\xb4+|O\xd2\xe0M\xb4wq\x9e]]T\xbeg\xd1\n\xbacjF LU&K\x1f\xe7\xe0\xa0\xd4)\xa6\x01\x94\x85\xf59\xf9\x8b\xc0BC\x89\x85\x04\xbcUI\xf0\x93\xaa\xe6\x1c\x11\x01\xdc\xfe\b:\t=\x17\xe8\x17q\xd9\x11.\xaa\xe67iX\xb2A\"\xa9Z\x02\xf6\x90\x87{V_zN\x95\xe06\xec\xe96\x8d\x05\x9b\xceL\x91\x82*e\x03_\xba^\x80\xfdĕH\x0f\x0fCU\xb0\xc6d\xc8B\xd2\x04H\x01\x92\x89\x94`\x1f\xb4T\xdcq2\x83\xc5\xc3w\xa5n\x0eG\xaff\x92\xfe\x18\x18m\a0\x1aZ\xdd\xe1\x17\b\xf4S\xabտkޑ\x88:?\xda\xe1#\x94\xbe\xdai1X\xae\x85\xc4_\xd2,[ׇ,\x10\xaa\xab\xfe\xd3\xd5\xd6l#;\xf4\x1c\xe0\xd6<{~\x8c!e\xfc\xb7\b\xb4\xee\xa4/\xbc\xf7\x9a&\xcbp*\bLc\x1f\xd3o\xfa\x8e1\xfdf\xef\x18\xd3o\xfc\x18\xd3o\xc6\xf4\x9b1\xfdfL\xbf\x19\xd3oZ\xe3E8\xe6\xc6\xf4\x9b1\xfdfs\x8c\xe97\xc1cL\xbf\xd9=\xc6\xf4\x9b\xbdcL\xbf\xd93\xc6\xf4\x9b\xf01\xa6\xdfl\x8d_[\xa0lL\xbf\xf9\xb5\x06\xca\xc6\xf4\x9b~/\x8f\xe97\x0f\x8e1\xfdfL\xbf\x19\xd3oz|{\xd4*\xc6\xf4\x9b_\xb7V\xf1ˑx\x03\xfa7\x05\xbd\xe43N\xae\xa4\x98E7r\xba\xc2\xd84K\\\xba\x8a\x98G\x85\xd4\xfdT\xa6\xf55\xea\x8d>\xbd\xbegFЕ\xb6\xf6\xaam\x9fB\xd3\xd9/%\xb4\x89E\xff\b\xbao\xbc\xa4N\va\xff_\x1d?o\x04έ_\xab?ˏ\x13\xa4\xe1\x11\xf3>\xd1\xf2:\xf6\x1d\x9a\xf0\xb4+R\x1e\xad\x95\r\x8d\x92\xc7\xeb'\xd1\xd1\U0006724c?UT|oD\xbc\x19ێ\x80\xbd\x15\r\xdf\x15\u05ceQ\xac\x1b\xb3{\xa4\x98\xf6\xdexv32\x1dc\xf6nŲ\xb7\xa2\xd2\x11P\x9bq\xecΈt\x04\xcc:\x86\xbd+\x1a\x1d\x01\xf4\xfc\x9e駋D?b\x14::\x003HY\x8d\xf5\xa5F\xea!.\xf1\xf4f)A-E\x16\xc8\xe3Z\xfc\xed\x03\xe3,/ss\xb0\x95aLlU嵆r\f\xcfs\xacd\xb7!&\x03\x96\xa5\x80\xd7\xd1Q\x96\x857\xe6\xc2&bK\x8a\x96\xbc*\x93\x04 52\xa9\xd1\xd7/\x10\xe2\x1f\xa7՚\xab;\xf5_\x87љ\xbd$\r\xad\xa3?\xfe!b\xbfí\xaa\xa8\x14\x83\x87\xd3\v\x10n \xfe\x86\xa6\x16\xc4\v\xf48g\xc3S\xa4\x13\xecI% \u007f\x17e\x8c\x95\xbf;\x8d`#! F.Ʀ\x10\f\xe0\x89\x83R\a\xf6\xa7\r\x18\xdcDaag\xca@\x15\xfc\x8fq\x81Ŧ\vDK\xaa\xa7I\x13\u061d\"@X\x9c\xafaXz\xc0\xd0ԀG\xbb\xbf\xac\x8ey\x0f\xbc\x91z\x88Ws\xa8'mP\x1a\xc0Ӡcx\xf0\xfb\v\xdd\x13\x19\xb9\x8f\xf1\xe1\xfeA\xa1\xfe\xf80\u007f\\\x88\u007f\u007fx?\xd2\t?(\xb4?\x80X\xe2\x9c\uf44e\xf7\xa1N\xf7\x81\x0e\xf7\xfd!\xfcȍ{\x02G\xfb\x1e';\xba\xcb#@v;؇\xba\xca\x1f\xd9M\x1e\x1bx\xdf\x1fto\x84ϣ\x14ᎀ{|\xe8<\x9a~\xe3\x18zD\xf0 \x92\x153\xce4\xa3\xd9;\xc8\xe8\xfa\x1a\x12\xc1\xd3@\xadf\xe3\x12\x95\xeaT*\v\xcc\xda\xc9\x11\xaeٺNpI\xdd\ry\x90\xfarG\xef\xf9\x0fe\x9a\xa8\xf2\xe1u\xfdv\xdd\x1b}\xed\xbf\xa4\x97\x9e|\x11\xf3\xdd\x16\t\x0e\xdf\xf8\xbf\x88;\"\xe6\x1a89b\xdc\xef\xfdq8\xcfs\x86{\xed\xad\xa9\x0e\xaf9\xbb\xaf_y\xd0\xc1\xb5\x8c\xbf8\xc7\n\xba\x94\x94z*O\x9a\x03\xffخ4\av^\x86z\xb2[\xee4\xeb\x90k\xf3\xed\xc0\r\xab\xaf\xd7z\x8ds\xf6\x1c\x03=\xba\xaeX\xfe\xd7OD\x91IP\x0f&@\xd5\xe9L\x81(\xecL~j\xa72\x05B\xecH|\xeaNc\n\x84\xdbJz\x8aHa\xfa\xa2\xde\xc4GJ[ڟ\xb2D\n\x11ccG\xa5+\x8d\x96R\xaf\xb1?-i\xb4\x94\xbe\xac\xa5\xf4\xd2m\x01\xcdr\x10\xa5~1f\xc0ݒ%˦\xb6\xc1rPD\x94\xf1)\xd4F\x8fpS\xea\f\xb6=\xed\x055\xbf\"\xcb!\x82\xc2\xc2\xdc\xde\x1d>\x9f\x8d\xde+u\"P\xc0z\xa9\"\x94\xbc\xbb\xbc\xfe黳?\x9f\u007f7%\xe74Y6[=qB\x03\xc5\x1a\xf2\x9a%]\x01\xa1\xa4\xe4쟥\xbd\x99\x90\x1cU_9~\xa6;\xc8#$\x87\xe1,\x01\a\xbd\xb5)\xdf1\x85\rq\x10\x86kQ \x14\x84^\xfeږ%\xe4\xdc\x00\xb1\xfa!ʝ%H \v\xb6\n2T\fL\x9b\xffChZ5}0\a՜\x12&8\xa13Q\x06\xb1\xc6%\x10\x0eڜ\xe0\xca/%\xb8j\xf5\t+\x15\x04]\v8+\xf1:\xb3B\xb2\x9cJ\x96\xad\x9b\x13\xa4ٔ\\\n\xafq\xaf\xc3t\x81&\xea\xde}<\xbf&\x97\x1foH!\xb1ՒͶ\xc1\u007f\x0fܨ\x19\x98m\xb1\x9b\x9cN\xc9\x19_[0\x96K3E\x8c\x9a\r\xfe\xe6\xeb\xc0\x89>\xaa\xc4j\x1f\xc0\xef\x90V\xeah\x1e\xb2\xe6\x9c\xde\x1b.\x1a\xba\xfd\xb9(\xb9\xb6i\xa1\xf6TW\xc4o#\x9f\xcfq\xe1\xffS\x9dD\x12/\x82]\fx<\x90\x0f\x8e\xf1@\x92\xc3O\x8eZ6\x8f\xa4Ul\x1e\xf1HzA\x1bz&/椚#SD\xe4L\x1b+}.d\xb3\xd254\xb9\x94\xe9\x96)\xea\xd8\x12foS,J\x8e\xben\xbeQG$\xf4\x12\xe4\x1dS\xe8䢼\xf6) Ø\xa40g<8-\x03U\xcd`\x8f\xf3KdU\x11/)HJ\xc9\xf4\xfa\xad\xe0\x1a\xee\x03l\xf26\xd1_;0D\x146\xdb\xd5\xe78\xd9\x14\xf1\x10f[r\xac\xea\nސBd,Y\x9f\xfa\x05!\xe6\xe1^\x9f\x06|\xbb\xdf\x175U\xb7\xf5\xfe\xc3Ę\f\xf56o}\xff\xa9\x95E\x94\xccW\x92\xadX\x06\v8W\t͐&\x87\x98\x8ag;`\x06\x9e,\x83\x02)2E\xee\x96`N.\xa1f\x8d\xe8\xb0H('\v\x1a\x9c*\x94\x9b\x1d*\xfc\xc4\f\x99\x19.\xa0\x15)\xa8\x04\xae=\xf8P\x96\x88E\xd93!2\x97\x13\x9f\xad빻\x02\x14.~\xe2p\xf7\x93\xf9v\xb0{>\xa3\x8b\xaa0F\x81\xde\xf2\xd6\xc4N{\xd76\xd9t\xeb\x12\b\xcd\xee\xe8:t\xbawK\u061c\x1fSo\xc8\xebc<\x9bT\x91ꋡ\x9c\xf6\x0f\xc7\x187|{v\xf5\xd3\xf5߯\u007f:{\xf7\xe1\xe22\x86-\x9a\x9d\x82\xa0K\xe1\x12Z\xd0\x19\xcbX\xb8\x12\xb6\x95\xcd\xd4\x04\x85b(MOS)B\x13c\x11˲\xe4\x9c\xf1E\xa3\xbexH\xaer\xb3\xed\x05\x92ټ=م\xa4<Y\xec\x99\xeb\x18\b1\af\xe0\xae~\xb2\x15\x86\xe3\xbev\x8e_R}J%χ\xc4\xd3?\x95\xbc\xddu\xab\x88\x95R\xb9HaJ\xae\xacH\x06Ն\x15\xdf\n\x82J \x06 \u05ccfٚ\x18\xebmE3\xb0\t\xfcX;\x17\xac`ugS\xcdi\xa6\x02\xd9s\xac\\5\x8a\xcb\ac\xa2\x0eع\n\x06I\x81\v\xed\xec\xe5\b\xba\x17s\x84E\xac\xcd\xdcHZkɯ\b\xe5\xb0\x16\xabLyL_U\xb3ƈH \xccR\x81\xea\x16\xab\x95\x15\x1d\x91\x03\"\x81\xa6X\xdb[P\xbd\xb4Y\x159U\xb7\x90\xda\x1f\xa2\xb4b\xe7e\xb0\xb3\xad\x16}\xb3.\x80́\xea284\x83ڰ\xcdQ\x01NgY\xa8\x03#\xba}\x02M?\xf2l\xfdI\b\xfd\xbe*E\x1d@\xb6\xdf;\x9b\xa6\x1d\xb90\nn(c\xc0\xb9Mp\xe3\x90\r4*e=\xb5\x85:c\xd4s2\x01Y\xf23\xf5\xad\x14e\xa0H\xdfR\xad\xbf\xbdx\x87\xbc\xb0\xb4\xf6\ap-\xd7\xd8\x06 \x9c\x11t\xdbW\xe4o\xe6ܹ\x93\x16\xaa\xb2x\x160'%W\xa0\xa7\xe4\x03]\x13\x9a)\xe1ͺ`k\xf6\n\xb3\xfc\x9a\xfe\x97)\xba\xe7,02\x13:\x94\xafl\x80C\x16\xb0\xfd\x95PߞA\xa6\r\xc8V\xbe83\xbf\r\xa8\xa1@\xe9-(RHH \x05\x9e\x04\xd2j#\xb6\xfa\xa7\u007f}\x96\xb4-\xa4\xf2K\xc1\r\x03\x19@\xe7\x17\xe2S\xe4\xf8\xa1\xf0\xc7cU\x03\x1dt\xac\xe2\xdd\xd7\x19\xac \xb8\xfd\xe1f_t\x03\xc3\x18u\x9eN\x10h\x84W0\xa33Ȭ\xf2eO\x89\xda>%\x91\xde\xc2(W\xa3\x14\xd9\xd0\x12\xc5O\"\xc3\x8dD$O!\x15ɳ\xebt1\xb9\xc0\xb6\x02\u007fP\x8b\xf1\xeb\x06\f\xc2Z\xb1\x8e\x805;}\xccv\x19\xa9\xba\x17\xe0}V\xd8\x19\x85\xfd\x8fU\xb1B\xdcTu\x169\x176\x91\xbc\xd9z\xc4\xf5Y\x0e!\x96\x92k\x96\xf9\xf0o^dFr\xb7fk\x830aב4\xfa\x9c\x9fTh\xa8\x9b\xaa\xbb\x96+!\n\xef\u007f\x97J\x13Z\xe5\xb1\xfa\x9e\vWՇ\f*o\xc2f\xe9n\xa3\xc0v\u007fZ\x98I\xafX\n$e\xf39\xf8<\xdc\x19\x90\x82J\x9a\x83\x0e˕qA\xb1\x19,\x98M\x8e\x14sB\r\x1a\x0e\x0fU]\xfc\x1f\x82\x01L\xb5d\x9a\xe4l\xb1\xb4\a\x99P\x92\t\xbe >*\x95\t\x9a\x12\xc3C\x03\xa0\nI\xee\xa8\xcc\t%\tM\x96pbs\x91\xd3Rb\xefY\r4]O\x94\x0es\n\x1a\xd5\x19\xe3C\ue7a8d\xbb\n2p\xa7\xd0\u009d\x81\xa6>[\xc3']x\xad\xady`\x03\xe0zh\xf3\x8c.^J\xb7\x9e\xb1\xa7~\xe7\x18{\xea\xbb1\xf6\xd4o\x8f\xb1\xa7\xfe\xd8Sߏ\xb1\xa7\xfe\xd8S\xbf{\x8c=\xf5q\x8c=\xf5Ǟ\xfacO\xfd\xb1\xa7>\x8e\xb1\xa7~\x9f1\xf6\xd4o\x8e\xb1\xa7~s\x8c=\xf5\xfb\x8c\xb1\xa7\xfeo\xb8S\xe4\xd8S\xffeu\x8a\x1c{\xea\xef\x1b/\xbd\x8f\xe6\xd8S\xff\x85x\xe9\xc9\xd8S\u007f\xec\xa9\xdf\x18cO\xfd\xb1\xa7~5ƞ\xfa;\xc7\xd8Sߎ\xb1\xa7\xfe\x8e\xf1۵\x94ƞ\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\x04\xbb\xd8\xd8z\x9a\x10\xed\xbfsJ\xbe\xaa\xf6\x8e\xae\x15\x91\xa0\xc2:\xe00N\xce?\xbe\xaf\r\xaa\xf0n81\xed\x00p%\x1fy\x12\x9b:[o}G\x99q\bFm\x02Y\x92\tes\x9b,\x8a\x93%\xe5\x1c2g\u007f\x04%\xf7,\xa9\"3\x00ND\x01\xdcf\x0eR\xa2\x18_d@\xa8\xd64YN\xcd\xecCTd\xb7\xed\xaeMi=K\xa5%\xd0\xdcn\xbf\x84<\xacA\xac\x99\x1e\xa1\x89\x14J\x91\xbc\xcc4+\xaa\t\x12\x05X\xb2\xa3B\xb3\x86\xfd\xa6b\x82\x14\xd84\x1eY\xc2I\xbd\x02\x8b\x94\x90i6\x1bա\x85v\x82\xfd\xb1\xf3B\xaf\xab\xa4b s&U\xc8.%\x19CC\x00\xd7k\x8b\x10q\x8e'h\tjl7\x8a\x18\r\x91%\x16\xa5\x96C\x8dQ$\xdd\x14?\x1b>c\xf7rc\x8a\x8d.\xb6u\x06u\x88\x86\xe4\x99\x1dv.\xf3\xcc\xe4\xa4\xd9,ݗy\x04y\x190\x1d\xacf\x9an\xfdH\xfa\x1cV\xe6\xecC\x02l\x15r\xf6\xe9\x0e\xce\xf7\xa4\x8cO\x83\xcc\x19Ǵ\xe5\x0f\xa0\x14]\xc0UP\xd8j\x97A\x87\x91\xab\x9aD\x82T\xfa9\xcb\xd0iSkVu\xda\xe4\xa1jN9\x00hnWW\xa5\xe3\xdfI\xa65 \xc9b\xcbA\x8c\xd3\a\xe9\xf4[\x13k\xb6~\xfb\xe0?g?\x13\"\x00\x15\xea9<\xb5\xe9\xf93 3\xc9`N\xe6\x8c\xd3\xcc\xe5\x10\x9e`K\xa2\x10ڲ\xce\x10\xa5\x8c\xb1/\xb8OQ\xf3X\x99\x92\xef-ZB\x96/K\x9e`\x02\xa3KF\xe7\"\x05\xc2\xe6d\x81y\x8dҦ\xd4\xff\xeb\xab\xff\xf8S\x00\xd0\xd9\xda\xe8\xa4\x18$\xd7BӬڶ\f\xf8\xc2P\x94\x15\x104\v\xf1\xdcյ\xc7\xd5\xee\xe3%=\x16\xc1\xaf\xffp;\x8bRյ \xa7)\xacN\x1b\xf48\xc9Ģ\xeb\xfa\xa3\xfejr\x84a\xddq\x84\xb1\x9b~\xe4!\xf6=\xce\xc8R\xdc\xd9f\x9e\x83\xce[\x9d\x12_\x88\xa2\xccl0\xe3\xbd9\xe1\xb8\x17e\x00\u007f#\xdbհ\x9d\xdc+\xcc4\xf7\xd3ڐ7.Y\xd7/#h\xedX&\xe7\x9c\xccUk\xb3R\u0094\xbc\xa7Y6\xa3\xc9\xed\x8d\xf8N,\xd4G~.eP_2\x8f3[\rD\x95&ɲ\xe4\xb7\xf6\x8e\x11?\xf5L\x84\xf8dD\xa9\x8bR\xfb\n\xa3\x06F\xab\xb5#?\x0eJ\x80\xb7\xea\x90S]\x1a3\x83{D\x98\x1b\xbe\x90\x89E5g\xd5<\xc8\u007fx\xf5\xaf\xffn\x19H\xc8\xea%\xf9\xf7WX\\\xa0N\xac\xc0A\xe9m\x14Ɯf\x19\xc8X\xd6`H\xbc\x8b\x15<)'б\x87\xfe\tLכ\x9b\xbf\xa3\xddʴ\x82l~bKS}C\xda\x00\x90\x87\xa8Z\x1d:Yh\xf4\xf7\xe76\x0eW\"+sx\a+\x16\u007f\xd7^\v\x86\xaf\x86ɘ\xd2D\x84\x984\xb3L$\xb7$u`\x1a9\x86\x9b\x8d\xfe\xfbc$8\x8fr\xe7\xba\x1a\x97&Q\x92Ӣ\bu\x0ec\xb1\xa0\xa4w\xade\"\xb7`\xbc\xa9\xb1\x87\xb0\x8c\xd8\b\x87\xfdx\x982\xec\xdfl\xe0\xa7\x06\xe37\xbd\xa0\xc1\x8da\x89\xaf\xc7\xd9\xea\x10X\xb5!\xb5\xdf\t\x86\xeb\xf5!\xb3[\xc8EC\x9d\xcfс\x80\x98\xfc\xd2\x16fy\xe5CϩvvBT\x04\t\xa9\xae\x00\xa9\x982\x8a\xc5g\xa4\xe8\xb7\x19e\xb9sm\x05C\f\x0f9E\xf7\xc5\x0e\xf7\xd5O\x1a4\x19\xf4Z r\a\x14\xbe\x87d[Z\x06\x84}\xcdcy\xf3\x95H\x1d\x18d\xa9\xb6\x03\xbd1\x06\x037\u007fGq\xdf\x10%`\x18s\xfe\\\xe3\xa6͛\xcd/Q\xcc\xd9B\xfcB,\x19\xa7=\x98##/v\v\x18\xd6 \xa4\xe9\xdep\x04\xd40w\x9cWajs<\x82\x81\x1b\x8aqS#\x87o\x0e\x9f\x8d/[$KQ\xd0E\xc4Md\x1b\xb8\xde\x04FR\xb0\x06FDI\x831G\x11\x9eM\x8d+\x1cTH\xab.`\x11 m!V-O\xbd\xc9b[L\xdc\x05\xe7|\x13B\xa5(yj}\xeaux\xe5\xc3\x06\".\x05\x0f\x9f.S\xae=\x19\xb6\x17\xc0\xea\x01\xf3\x1b6\b`\x9c\xbc\x9e\xbe~\xf5\xcb\x11߸\x86\r\xf1\x1d\xd5b\xa9\xc1\x97\x9em\xf5\xfe>\x8aA\x18\xf8\xe0\u070e\xf5\x05\x12,\xae\xed\xbb\x9d\xcf\xe4N2\r\x8d[6\x8f\xd042\x16n\xa3\xb1\xd0qxv\xc1\xc0\xdbi\xe2\xfbs\x13\xa2\xca٣\xf3{˨\x83\xb1\x80L\xa6\xcb#\xadb!v\x88\x8a&\xaa\x0f\x0e\x82!\x1eٙ\x1c*\xec<\x10\xbc\xd5\xd1\xc7\xc1m\xd3\xf9}\x11\xdcس\xb5U\xe7\xf7\x05E\xbfw\xd1\u07b3`D8a\xbc{\xcfb!v\xecٟaIW\x11\xf2L\xb1\x9ceTfk\xb3\xd9\xd7\x16\x83dVj\x02|Ť\xe0y\xcc=d+*\x19\x9de@$`3\x9f\x04\x14\xf9\xfa\xe8\xf3\xd9'\xcc,:6\x923\x18&\xf8])\x15\xe3\x8b-\xeaoLw\x18o98\xd8\"`\x8f\x17CYᒘ\xa7\x15^\x8dƐ\x97\xba\xb4\x97w\xdd'Y\xa9\xd8\xea\xb9\xe4E\x9c\x95Vi\xbb\xbf\x02#\xcd5Xy\xc7\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\xf7\x98\x80gos\xef\xb521\xb7I\x11\x9f!\x03)\xbcи\xa3LW\x95\t\x8c3\xfd6\xec6B4Tl\xab\xba>\xdb\x1d\xb0\xd1=w\xa2\xd7c\x0fm\xd3~r\xdaC>\x0f|}\xf7ww\xbe\xc8x\x92\x95)\xbc\xcdJ\xa5A~\xf2\u05feo\xcel#:\xda\xf9N\xa3\xe8\xc0_\x97\x9d\xd8G&*\x11Eǡ\x97\xf5\xab\x95N\xe1&\x94\xfa\xc2B\xacWq\x97B\xfb\xee\vJ\v\t\x9d\x89P\xbc̲\x8d\xf4wYn\x91\x8ay\xcah\b\x9d\x99\xc1\xbb5u?5c\xa2\xa9\x82\xf6DS\xe3q\xdb\xccNe,A76\xf7\xff`\xff\xcb\xcc\xd6}bk]v\xe7l\x9e\r&/bt\xf1\x04ۊ\xf3\x1a\xbe\xad\x97\xb3\x9f\xdd\\\xf4\x0e7ڞ#\xd2\x03M۴\xe6?\x1fDJ\xf5\xd3\x1b(\xf2\x14\xf20\x86\xb6\x89\xa3\x89\xa3\x9a\xd2\xdcs3\x9aܖ\xc5K@\x18\xb6߿\x86\f\xe5\xf8^d}\xd7|\xd2\"*\aMW\xaf\xa7\xed\u007f16*\xcb4f\xa1v\xa8N\xf6\xe2nēQ!\x18Oي\xa5%\xcdZT\xd6\xc0R\x8dL,Q`ٶq\x8eM\xc2\xdc\xdb-\x9c\x12\x9f\x0e\x15t\x06\xf7yG\xd1Ub\x94a\x97\x10\xd9\xc5D\xdb\x0e\xb8\x8d\x17,\xe6\\\xdc\xd1\xdd~\xa0<\xee\x1ck6\x9a\xfc\x8e\xd2\xc5\x1b\xd7\x00\xc6?\x85\xeb=\xbb|\u05ed\x80\xecq^\xb7\xaf\xf8\xde3\x11w&\xaa\xed]\xd2\xca-\xbaKjb\xa6\xbc:!\x94\xdc\xc2\xda&PR\xee\xbasz\x10\x122\xea/\xab\xbd\x05\x9b\xaa`\xdf\xeb^\xf8\xc3.\xeb[\xd8\xe3\rj-\xd7|\xcf\a\x80q\xdd\xe6\x87*\x90W-\xd5\xddG\xb1O\x1e\xef\x89\xd6\xf5\x90\xfe\x1e#=\xa7]!\xb0\xba%[Y\x14\x1bk͠\xd3\xd0ג\x15X\x84\xb3g\xd6\xeer{\x87m\xf2\x99f,\xad\x80[\x8a\xba\xe0'\xe4Rh\xf3?\xe7\xf7Li\xf5@\x8f\xe9w\x02ԥ\xd0\xf8\xec \x94\xd8I\xf5D\x88}\x18\t\x94[ކ\xa5$\b\xbfZ\xde\xc5\xdc]Xa\u05f7g\x11L\x91\vn\x98\x8c[y\xd5\f[9\xe0\xbe^\x88\v>A\x8e\xe4\xa1\xef\x01Zm\x1aS\x1e\x95B\xb6\xf0\xb5\xe3C{`\u0380\xb8ϣ\x0f\u05fe\x83\xe9\xb9EF\x13H}\x1b]jpA5,XBr\x90{\xef\x9e,\f\x9fڽu\x0f\x86\xc1z)\xbbCU\xd3[\xe8~o\xb2\u007f{\xa3\x15W\xc7\xefQ\xc0u\xae\x9e\xa6\xbe#\xe7\xd5\x03\xfc\xe9\x01\xfcl\xcb\f\xfbQ'hia(\xfb\u007f\r;EB\xf9?RP&Ք\x9c\xb9J\x82\xceo6\x9fw\x9aG\x13\xb4\x81\xca\xd4\xc6M\xea\x94\x13\xb0E\xb1\x9d \xc5|K\xa2\x19C[(\xcbū\x90\xc8\xc1-\xac\x0fNZ'oW\x02\xdb\xc1\x05?\xa8\xb2\xec\xdb\xe7\xc0\xcb\x19\xdb\x1e\xf8\x00\xff\xed`\xba%\x04;\xc1\xee\x15\x8c{(b\xe7?U\x9a\xee\a\x9bX\xb3\xb9\xcf\xfdha\x0f\x1dl\xf5\xafi~\xadE\bM\xb5\xb4\xa5\xc2o\u007f\x8e\xca\x05\xe8.e\xdf\xe9\xaa\x18f\x9f\x923\xbeނ\xda]f]\x99H\x15E\x15\xad\x0e\xebB\xbaD\xee& \x976\xa3hn\xe1o\xee\xc9N\xa4;\x88W\x9f\xf7k\xf2\x9f\xaa\xc7:\xec\xc0\xc6b)\xb6\xc0u\v\xb8\xfa\xbcM9\xb6\x94\x80\xd3B-\x85&G+F]\xa1\x86(Sק]n\xb9\xf5#-:\x95,!-3\xe8\xba\xcac\xab\xe7\x8d\u007f\xd0+.%g\xff,۷\x9axg\x87{z\x9b\x16j\xe9Tg\xbbrk\xd9Q{+\x85\xbdɇI\xe8 n7\x19\x81_\xedyn\t)\x96T\xedgsW扪O}\xe3\xb8U\x1c\xeeS\xe7\\\x80\x97\xf9&\xe0\t\xb9\x84\xbb\xad\xdf\xde#A\u007f\xae\xee\x11\xdfz\xe0\x82_I\xb1\x90\xdb-\xa3&\xfe\xc0lQ\xc1\x84\\Q\xa9\x19Ͳ\xf5\xfb\xae\x06\xd1\xfe\xab}\xf1\xa4Z\xc7f\xbf\\h=ړ1\x18F\xd0Ap\xb6\xac\xef\x05\x1e\xe9\xfa\xd6\xf7\xf3\x87\x0f\xf7獇7\x1cz\xb4\xbe\x91\xdf`\xc2\x1dɣ\x8e\x1b\xb8\xd1\xf6O\xccl7\xef\x8e{&\xc7\xdc\x1d\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^\xd7\u007f!\xb6l\x04\xc3\xfd\x03\xb1Ԝ6p\xef\xa6\xe2~\xa9\x15\x02[\xa3\xeb<\xe6\x16\xed\xb7\x8c\xa7o|\x1eH\x91\x95\x92f\xee\xcfDp\xab\xed\xab7\xe4\x87\x1f\xbf\"\x0e\x03\x9f\xfd<̏\xff?\x00\x00\xff\xff\xc1T\x93\xf8ǭ\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=^\xc4\xc8dv\xb0v|\tr\xa0\xbaK\x16\xe3n\xb2C\xb2e+A\xfe=\xa8\"\xfb\xa9~\xb0\xbdv\xb0Y\x98'\x9b\"\x8b\xc5z\xb3X\xec\xb3\xd5ju&\ny\x8f\xc6J\xad6 \n\x89\xcf\x0e\x15\xfdg\u05cf\u007f\xb4k\xa9/\x0f\x1f\xb7\xe8\xc4dzG\xa9\xd2\r\\\x95\xd6\xe9\xfcg\xb4\xba4\t~ƝT\xd2I\xad\xcert\"\x15Nl\xce\x00\x84R\xda\t\xea\xb6\xf4/@\xa2\x953:\xcbЬ\x1eP\xad\x1f\xcb-nK\x99\xa5hx\x85j\xfd\xc3w\xeb\xef\xd7ߝ\x01$\x06y\xfa\x9d\xcc\xd1:\x91\x17\x1bPe\x96\x9d\x01(\x91\xe3\x06l\xb2Ǵ\xccЮ\x0f\x98\xa1\xd1k\xa9\xcfl\x81\t\xad\xf6`tYl\xa0\xf9\xc1O\n\x98\xf8]܆\xf9ܕI\xeb\xfe\xdc\xe9\xfe\"\xad㟊\xac4\"k\xadǽV\xaa\x872\x13\xa6\xe9?\x03(\fZ4\a\xfc\xabzT\xfaI\xfd(1K\xed\x06v\"\xb3\xf4\xb3Mt\x81\x1b\xf8J\x98\x14\"\xc1\xf4\f\xe0 2\x99\xf2>=n\xba@\xf5\xe9\xdb\xcd\xfd\xf7\x84G.|'@\x8a61\xb2\xe0q5\x8a -\b\xb8\xe7M\x82\t\xec\x00\xb7\x17\x0e\f2.\xcaш\xc2\xe0\xaa\xc22\x05m\x02L\x80\x02\x8dԩL\xe0\a\x91<\x96\x85\x9fj\xf7\xba\xccR\xd8\"\x98R\xad\xc3\xd8\xc2\xe8\x02\x8d\x93\x15\t\xa9\xb5\xa4\xa6\xee\xeba\xfa\x81\xb6\xe2\xc7@Jr\x82\x16\xdc\x1e!p\x1bS\xa6^.@\xef\xc0\xed\xa5m\xf0f\x92\xb4\xc0\x02\r\x11\n\xf4\xf6\x1f\x98\xb85\xdc\x12\x9d\x8d\xad\xb0M\xb4:\xa0\xa1}'\xfaA\xc9\u007fՐ-8\xcdKf\xc2a\xe0hդrh\x94Ȉ\t%^\x80P)\xe4\xe2\b\x06i\r(U\v\x1a\x0f\xb1k\xf8\x8b6\bR\xed\xf4\x06\xf6\xce\x15vsy\xf9 ]\xa5'\x89\xce\xf3RIw\xbcdi\x97\xdb\xd2ic/S<`vi\xe5\xc3J\x98d/\x1d&\xae4x)\n\xb9b\xc4\x15\xab\xc9:O\u007fWq\xd1~ha\xea\x8e$6\xd6\x19\xa9\x1e\xean\x16\xe2Q\xba\x93,{\xf1\xf0\xd3<\xfe\ry\xa9\x8b\xa8\xf2\xf3\xf5\xed][t\xa4\xedҜ\xa9ݒ\xa6\x86\xf0D(\xa9vh<\xe3vF\xe7\f\x11UZh\xa9\x1c\xff\x93d\x12U\x97\xe8\xb6\xdc\xe6\xd2\x11\xa7\xffY\xa2uğ5\\\xb1\xb5 \x99+\x8bT8L\xd7p\xa3\xe0J\xe4\x98]\t\x8boNv\xa2\xb0]\x11I\xe7\t\xdf6r݁\x9eZuwe\x8c\x069T\xe9\xf0m\x81IG5h\x96\xdcɄ\x15\x00v\xda4*n\xdb\x16k\\/y\xed0\xb4\xdb;iG\xae\x8cV\x80\xcf\xc4\xe9F_IN\x9e\xf6\xa8H\x8bL\xa9\b\xc3\x1eD\b\xc6c\xdd\xeb\x1f\xa4\x1d\xff\x80yA\xca8\x89\xda]\x18D\xa8\x11U\xd2\xda\xc9xS\x81\xb5\xc9\xd2\xc1R\x81\x1eƮ0\xfa \xd3`\x0fzԛ\xa2\xa0Gi'\xca\xcc\xdd\xeb\xac\xcc\xd1\xde\xe9\x9f\xd1:\x99\x9c\x8e\xeb!\xffypZ\xc5Y\xb4DQ\xb7GC\x8a\xc7?\xb0\r\x1b\x80\n\xac\x11\x16S6b\xe2\x11A\xc0\xd6\uf6eca\x96A\xa1S8\xf8u`{\xac\x10\xee\xf3\xa2\xe1\xc7V\xeb\f\x85:\xf9\x1d\x9f\x93\xacL1\xad}\xd3\x005z\xbb\xbc>\x99\xc2.^HE\xd2D\x0e\x95\x90Tͯ\xe4]\x067)\f\x02\xa9\xbfT\x1e\"Hfe\xd8\xea\xd0f\xa4\xc3|\x10\xc3\t\xb9\xf3\x8dB\b\xb1\xcdp\x03Δ\xa7\xd2R\xcd\x17ƈ\xe3(\x95\xaa\xd0'\x9eH\xf5\x8c`\x943\x99 \x91\xa76\xbdL\xa7\xdf\x00\x89\xf6Z?Γ\xe5O4\xaaq+\x90pD\t[܋\x83\xd4\xc6\xf6#\x11|Ƥt8\xac#\xc2A*w;4\x04\xa9\xd8\v\x8b\xb62\x12\xe3\xe4\x99R{jf\x8a\xc5'\xfbi\xd8K\x8cb\x1a\x8cm\x81\xcd\xe9\bL`\x84\xc9\xe6\x96\x05H\x95ʃLK\x91\x81T\xd6\t\x95\xf8}\x89\x1a\xb7\xa1}\xc14\xebO0\xf7f\xb4\u009f\xf8\xd2\xf1HZ!h\x039\xb9\xdfӡvt\r\x18\xdd\xfeV\x90=\xf3\xc6\x1a\f\xc5\xd3a\xb1\x94\x9d]c/.&\x80\xd7\xdc\xf1A[&\xb6\x98\x81\xc5\f\x13\xa7\xcd\x18Y\xe6\x99\xee[\x9c-\x1c\xa1\xe7\x80Ul\xec>m\xb9\xd9\xe0$P \x93\xff\xb4\x97\xc9\xde\xc7W$S\f\tR\x8d\x96m\x81(\x8a\xec8\xbeY\x98\x97\x84\xb0д9hڬa\xe8\xc3\x1c6\x11M\x8b\xb2\xa7M\x9b\xb1\xac]:\xd7\"\xf2N\xe6\xcai\xbcH\xa0oN&\xbf\xb6@\x13\x81%\x9d\xadnv\x80y\xe1\x8e\x17 ]\xd5;\x0f\x93\u00a0\x06\x87\xdf\x04\xa3^\xa2\x0f7\xfd\xb9\xaf\xac\x0f\xaf\xc0\xa5\x1a\x85\xffk&\xb1\xb3\xb9\r\xbef\x01\x83\xbe\xb4\xe7]\x80\xdc\xd5\fJ/`'3\x87\x1c\xf7L\xa3\xd8r}\xb3\x9cz-\xb2\xc4yMj\xb9p\xc9\xfe\xba>BΎ\xefQ\xa8?\xdd\xc7\xca\xd5I\xa2\xeb\xe4g!\x03g\x18\xa4\xc1\xdc\xe7-\xeeX\a\x9a\x1e\x8e\xd4>}\xfd\x8c\xe94\xa1 V\"O\xb6\xf3\xa9\x87r{\xf9p\f\x88\xdfL\b\xa8\xea\x13\x96\xcfG]\x80\x80G<\xfa(H( F\tZj\xf4 qJ$N\x8c\xb1\x89x\xc4#\x03\n\xb9\xae\x88\xf9\xf1\xa2\xe1\xdb#\x1e\xe3\x06\xf6HI\x98\x85L\x80\xa7)u0A8e\xb2\x84\x8c\xc0\x99K\xd6\x10p:f\x93\xb0\xc4\xdcT\xad\xe2ċ\xb6[\xb3\xb1\x93\xc6}\xc4\xe3\a\xeb\x19Fڱ\x97E\xf4\x86\xc9\x00\x83E֣*\x93y/2\x99\xd6Ky}\xb8QSQw\xb7}\xd5\xeeF]\xc0\xf5\xb3\xb4\x84\x9eJ\xe1\xb3F\xfbU;\xeey3\xc2z\xf4_DV?\x95UOy3O\xf4h'H\xa3\x84\u07b7\x1b\u007f¬Y%-\xdc(:+\x05\xbap\x9a\x9baƋ%\xa3\x94\x97\x963\xa1J\xab\x15;\xda\xf5\xc0Z\xd10\x03{\xb4\xe9p\xa7\x8d^k\xd9h\xa8t\xa0\xf3\xa8ݑ\xef\xf1\x10|\xfa>\x13\t\xa6\x90\x96LT\x11\r\xd1:#\x1c>\xc8\x04r4\x0f\b\x05\xf9\x82XnD\xdbg\xdf\x16\xcb\\lhP\xb5`\xe8\xd3\x18\x94V\xa4\xd7Q\xe3*\xf6G\f\x1e\xccGO\x0f\x8e\xd9\x1b;h\x8ec\"\xa8-Ҕ\x13\xb6\"\xfb\xb6\xc8K,\xe2\xcei\xfc\xe0\xd1\xf3\xfe5\x17\x9c(\xfd7\xb9H\x16\xf6\xff@!\xa4\x89\xd2\xf2O|ŗagvȺ\xb5\x17\xa25\xa4\x05\xe2\xf8Ad\xfdێ\x91-j\xb2@\x98\xf9P@\xefN\"\x9f\vx\xdak\xeb=\xf2N\xe2Hr\xb8ۤ\x85\xf3G<\x9e_\x9cإ\xf3\x1bu\xeeC\x84\xbe\xd6G\x80\xad#\x0e\xad\xb2#\x9c\xf3\xec\xf3_\x16NEKg\xe4@\xbe\x0f\x8e\x0f\xc4\xe9$[E\x134\xb5\xbe|\xa4\x10z\x1a\xfbH\xd9,\xb4u\v\x10\xfa\xa6\xad\xf3\x19\xd1N\xc0\xbb,\xdf\x06^\xaeB\x9e\r\xc4Ρ\x01봩\xae\xfa\xc8H\xf6\xd2\xc6\xc4E;w\xe0 \xc6\xd6\xd9;\x0f\x96\x0es\xe7\x8d~{\xfb{\xee\xef\x00\xe9\xef9\x88\t\a0\f\xb90:Ak\xe7\xc4&\xca\xc2\xcf$6뤦\xf0\x87%\xbe[\x9b\x15ֹdkՖ\x84\xc2D\xce\xc5lj\xeb\xe7V^\x96\xcc\a\xfd?/\xb2˱\x03\xd6\xfa<\x17*ʁ\x9d z\xe5\xe7V*\x16@\xf9#\x8ay(\xd9\\,\x89\\\x83\xf0\xfdz\x82\x81\\\xaa\x1b^\x04>\xbeI\xf8P\x1b]|\xd9\xf1\u1a9aݰ\xa0\xee\x18\xbe$\x1dk\x85\xe6\xfb\n\x83\x1dN\x9ef\xf5\x17\x85\xcdJ\xbbv\xea\x83 \x17:\xfd`a'\x8du\r\xb2\xd10\xa5\xe5Kҷ;˩kc^x\x94\xfb\xc9\xcfm%\xe3\xf6\xfa\xa9\xbe\xd0\x1f\xbf\xf8\x1dj|=\x86 w \x1d\xa0Jt\xa98iDƀ\x17\xf1\xec\x88\x17d\x88\xf5{MCU汄X\xb1$J5\x93_jO\xf8Q\xc8\xec\xad\xd8\xe8d\x8e\xba\x9cq\xccM\xeb\xd6#\xf8\xb9\x9dJ\x8d\\<˼\xccA\xe4Ĉh\x92S\xb4!s\xec\xca\x00<\t\xe9\xd8#\x11dvONG\x83Lt^d\xe8\x10\xb6\xb8ӆ\xf5\xdd\xca\x14k\xd7\x1f\xe4B\x8f\xdf;\xf6\x9b\x80\x9d\x90Yi\xa2\xad\xeeBn,;!\x05\xc3\xf3\xba\a\x9fX\x14VL\xbe\xa8tttH;\xe7\t\n\xb3$\xa0\xfdf\xf0\xb5\xc3\xc7\xc2H\x92E=\x17A\xce@\xe4\xf8\xb2\x1bA\x06\x11\x15\xea8\x16B\xce\xc0d,\xdeC\xc8\xf7\x102\x0e\xee{\b\xf9\x1eBη\xf7\x10\xf2=\x84\x8c\x99\xf0\x1eB\xbe\x87\x90\xcbQ\xf8߇\x90\xf3\x98\xad8\xf79\xfas\x046Q%\x04\xd3\xc8N\xae\x12\xaaa\xae\xb2\xd2:4\xf15\xb77\xc3\xf3\x06\xea\xaf\x13?d\xc5\x0fs\x86e\xa3)\xb7h\\V]\x84K\xcaV)\x8a\xafן\x8d\x8e#\x8bk\xc7\xea\xb4\xe3J\xb9\xe6\n\xb8\xba5\xc8u\xf1TU\x849\xaa\xc4j\xa6\xb0j\xba\x84[Wk\x8cP\xb1\x93\x80\xef\x92\xcftʈ\u007f\x85ԛ\xad}\x1a\xafx\n7r\xe8\xc4\xe1\xe3\xba\xfb\x8bӡ\xfe\t\x9e\xa4\xdb\x0fn\x8aߠ\xd0qQ=\xb4\v\xa3+Y\fo\xbc\xfaT\x05m@\xc9l\xb8\xa6\x81\b^\xcd\xef\x90\x1b~*\xfc\xa1\xf4E\xfa;wL\x8a\xad\x91zqeT\xb7\xeei\xd4\xc0/\xbf\xc0[RV\x1e_\xfb4W\xaa\xb4\xa4\xe2\xa9]\xcd4\x012\xb6\xce)\xee\xc4;[\xd3\xf4\x82J\xa6\xe8\xba\xcaW\xb9\xae\x8c\xabUz\x8b\n\xa5\x05uI\xddz\xa3\x19\xb8˪\x91\"\xc9\x14Sy\xb4\xb8\xde(\xd4\xf6\xcc\xec'\xa2\xcah\xb4zh\x06\xf4@\x1d\xd3|\xcd\xd0\x1c\xf9;\xa8\xbcJ\xa5\xd0\v\xea\x83^\xb7\x8e\xf8\xb5\xa2\xee\xa9j\x9f\x88\x1a\x9f\x88\xb8|\x0eӈ*\x9ee\xb5;\x114|a\x9dN]\x853\xba\xf6\xd2\xea\x9cn\xed\xcd(ؘ\x9a\x9c\x91\x8a\x9bQ\x98\x93\x958\xb1u6\xa3\xd0g\xdd\xf7\x8c\xe4L\xfel\x95(\xec^WOZg#\xbf\xdb\xee\xf8\x81\xa3W\xf5\xa05\xc9t\x99\xd6\xf0\x87\xb7\xc7/\xff\x8f\xf0힝\v?\xf4K\x9a'\x90\xc1}T\xa1\\\xff\x85\xe4\xf0\xebd\xf8\xe5G1\xeb\xb4\x11\x0f\xf8E'\xad\xcf7LѤ;\xbe\xf3:?0\xbfJ\xb6\x84\xaa\xa4\xe1\xb05\xec\xa8\x0f\xaeɱ\x86\x17\xc2\xcdy\x950\x1d\x96\x8bI\xcdu.\x9b\xdd\xd4\xdd\xdd\x17\xbf\x11's\\\u007f.\xfd1xU\bc\x91h[m\xd0Oڎ\x19\x88\xbd~\x82L\x87\xdd\xff\xd0\xc7\xdf gs\xf9\xbc\xbdx\x17\xfeut%\x90\x15\xb9\xe6E\xf8~x^+\xf2n1\x8d\x8f~c\xb2;\x06IX\xab\x13)\xf8M\xa8t\xe1\x19\xc7[<\xe8\x1dw\b#J?\xe4\xc7VC\x0f\xe8W\xf5k\xfe\xb3\x19\xa0\xd6\tW\xda\xf9\xcf!\xf00HD\xe1J\x13\x92\xa4Ii\xf8i/\x81@\xff\x02v\xf9\a\x112a\x9d\x17\xac\xc9\xef\x0e|\xa9\x875Q\xbau>\xdbZi\x1e<\t\xcb_\x1c\xf0\xb9Vi\xbb\x9f\x92i\xb7\x91o\x0e\xec\xb4Ʌ\xdb@*\x1c\xae\bv\xef\xf7I\xcb4\xcal~\xfa<\xb9\xbbo4\xa2\xbe\xd1\td\xe5iՃ鑝\f\xa5\xecW\xf0\x15\x9fN\xfa\xae\x15!\xdeϥ\xf9\xac<\xa6\xf7\xf5\xd7nb7\xd5|\x1f\x87/AN\x14\xa0\xab\xb3\xbd\xc1\xbdL\r\x9d\xf8\x1bx\xfe\xc2\xc3\xc2\xef婡\xe5\xe3WB;\xf9C\xef\xb7\x11-\x9c\xd0\xc0a\xed\x1bP\x92^W\xf3E\xa4\x8f\xcd\u007f\xbc\xf4*|\x01\xe9\xe0\xef\x0e\xf9\x93CiKV\x82g\n=\x8d\xe6\x89$\xc1\u0085L`\xfbSH\xe7\xe7\xfcO\xf5\xa5#\xfe7\xd1\xcaǀv\x03\u007f\xfb\xfb\x19\x04/r_\xe1A\x9d\xff\r\x00\x00\xff\xfff\xf9\xa5\xc0=J\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\x1c\xcbn#\xb9\xf1\xee\xaf((\x87I\x00K\xde\xc1^\x02\xddf=^\xc4\xd8\xc9\xec`\xc7\xf1%ȁ\xea.Y\x8c\xd9d\x87dˣ\x04\xf9\xf7\xa0\x8a\xfdV?؎\x1dl\x16\xe6ɦ\xc8b\xb1\xde,\x16\xfbb\xbd^_\x88\\ޣu\xd2\xe8-\x88\\\xe27\x8f\x9a\xfes\x9b\xc7?\xba\x8d4W\xc7\xf7;\xf4\xe2\xfdţ\xd4\xe9\x16\xae\v\xe7M\xf6\v:S\xd8\x04?\xe2^j\xe9\xa5\xd1\x17\x19z\x91\n/\xb6\x17\x00Bk\xe3\x05u;\xfa\x17 1\xda[\xa3\x14\xda\xf5\x03\xea\xcdc\xb1\xc3]!U\x8a\x96W\xa8\xd6?~\xb7\xf9~\xf3\xdd\x05@b\x91\xa7\xdf\xc9\f\x9d\x17Y\xbe\x05](u\x01\xa0E\x86[p\xc9\x01\xd3B\xa1\xdb\x1cQ\xa15\x1bi.\\\x8e\t\xad\xf6`M\x91o\xa1\xf9!L*1\t\xbb\xf8Z\xce\xe7.%\x9d\xff\xa9\xd3\xfdI:\xcf?媰B\xb5\xd6\xe3^'\xf5C\xa1\x84m\xfa/\x00r\x8b\x0e\xed\x11\xff\xa2\x1f\xb5y\xd2?JT\xa9\xdb\xc2^(G?\xbb\xc4丅τI.\x12L/\x00\x8eBɔ\xf7\x19p39\xea\x0f_n\xef\xbf'<2\x11:\x01Rt\x89\x959\x8f\xabQ\x04\xe9@\xc0=o\x12l\xc9\x0e\xf0\a\xe1\xc1\"\xe3\xa2=\x8d\xc8-\xae+,S0\xb6\x84\t\x90\xa3\x95&\x95\t\xfc \x92\xc7\"\x0fS\xdd\xc1\x14*\x85\x1d\x82-\xf4\xa6\x1c\x9b[\x93\xa3\xf5\xb2\"!\xb5\x96\xd4\xd4}=L\xdf\xd1V\xc2\x18HINЁ? \x94\xdcƔ\xa9\x97\t0{\xf0\a\xe9\x1a\xbc\x99$-\xb0@C\x84\x06\xb3\xfb;&~\x03_\x89\xce\xd6U\xd8&F\x1f\xd1Ҿ\x13\xf3\xa0\xe5?k\xc8\x0e\xbc\xe1%\x95\xf0Xr\xb4jR{\xb4Z(bB\x81\x97 t\n\x998\x81EZ\x03\n݂\xc6C\xdc\x06\xfel,\x82\xd4{\xb3\x85\x83\xf7\xb9\xdb^]=H_\xe9Ib\xb2\xac\xd0ҟ\xaeX\xda\xe5\xae\xf0ƺ\xab\x14\x8f\xa8\xae\x9c|X\v\x9b\x1c\xa4\xc7\xc4\x17\x16\xafD.\u05cc\xb8f5\xd9d\xe9\xef*.\xbaw-L\xfd\x89\xc4\xc6y+\xf5C\xdd\xcdB\xcca\x13Ѵ({ڴ\x19\xcbڥs-\"od\xae\x9cƳ\x04\xfa\xf6l\xf2K\v4\x11X\xd2\xd9\xeav\x0f\x98\xe5\xfet\t\xd2W\xbd\xf30)\fjp\xf8M0\xea9\xfap۟\xfb\xc2\xfa\xf0\x02\\\xaaQ\xf8\xbff\x12;\x9b\xaf\xa5\xafY\xc0\xa0O\xedy\x97 \xf75\x83\xd2K\xd8K\xe5\x91\xe3\x9ei\x14[\xaeo\x96S/E\x968\xafI-\x13>9\xdc\xd4G\xc8\xd9\xf1=\n\xf5\xa7\x87X\xb9:It\x9d\xfc,d\xe0\f\x83\xb4\x98\x85\xbc\xc5\x1d\xeb@\xd3Ñڇ\xcf\x1f1\x9d&\x14\xc4J\xe4\xd9v>\xf4Pn/_\x1e\x03\xe27S\x06T\xf5\t+\xe4\xa3.A\xc0#\x9eB\x14$4\x10\xa3\x04-5z\x908'\x12'\xc6\xd8D<\xe2\x89\x01\x95\xb9\xae\x88\xf9\xf1\xa2\x11\xda#\x9e\xe2\x06\xf6HI\x98\x95\x99\x80@S\xea`\x82p\xcad\t\x19\x813\x97\xac!\xe0M\xcc&a\x89\xb9\xa9Zʼngm\xb7fc'\x8d\xfb\x88\xa7w.0\x8c\xb4\xe3 \xf3\xe8\r\x93\x01\x06\x87\xacGU&\xf3^(\x99\xd6K\x05}\xb8\xd5SQw\xb7}6\xfeV_\xc2\xcd7\xe9\b=\x9d\xc2G\x83\xee\xb3\xf1\xdc\xf3j\x84\r\xe8?\x8b\xaca*\xab\x9e\x0ef\x9e\xe8\xd1N\x90F\t}h\xb7\xe1\x84Y\xb3J:\xb8\xd5tV*\xe9\xc2in\x86\x19/\x96\x8cRV8΄j\xa3\xd7\xech7\x03kE\xc3,\xd9cl\x87;m\xf4Z\xcbFC\xa5\x03]@\xed\x8e|O\x80\x10\xd2\xf7J$\x98BZ0QE4D\xe7\xad\xf0\xf8 \x13\xc8\xd0> \xe4\xe4\vb\xb9\x11m\x9fC[,s\xb1\xa1A\xd5JC\x9fƠ\xb4&\xbd\x8e\x1aW\xb1?b\xf0`>zzp\xcc\xde\xd8As\x1c\x13Am\x91\xa6\x9c\xb0\x15\xea\xcb\"/\xb1\x88;\xe7\xf1C@/\xf8\xd7Lp\xa2\xf4_\xe4\"Y\xd8\xff\r\xb9\x906J\xcb?\xf0\x15\x9f\xc2\xce\xec2\xeb\xd6^\x88\u0590\x0e\x88\xe3G\xa1\xfa\xb7\x1d#[4d\x81P\x85P\xc0\xec\xcf\"\x9fKx:\x18\x17<\xf2^\xe2Hr\xb8ۤ\x83\xd5#\x9eV\x97gviu\xabW!D\xe8k}\x04\xd8:\xe20Z\x9d`ųW\xff]8\x15-\x9d\x91\x03\xf9>8>\x10\xa7\x93l\x15M\xd0\xd4\xfa\xf2\x91B\xe8i\xec#e37\xce/@\xe8\x8bq>dD;\x01\xef\xb2|\x1b\x04\xb9*\xf3l \xf6\x1e-8olu\xd5GF\xb2\x976&.\xba\xb9\x03\a1\xb6\xce\xde\x05\xb0t\x98[5\xfa\x1d\xec\xef*\xdc\x01\xd2\xdfs\x10\x13\x0e`\x18rnM\x82\xce͉M\x94\x85\x9fIl\xd6IM\x11\x0eK|\xb76+\xacs\xc9֪-\t\x85\x89\x9c\x8b\x8f\x137\xdfZyY2\x1f\xf4\xff\xbc\xc8.\xc7\x0eX\xeb\xb3L\xe8(\av\x86\xe8u\x98[\xa9X\t*\x1cQ\xecC\xc1\xe6bI\xe4Z\n߯'\x18Ȥ\xbe\xe5E\xe0\xfd\xab\x84\x0f\xb5\xd1\xc5\xe7\x1d\x1f\xae\xab\xd9\r\v\xea\x8e\xe1Kұ\x96\x1b\xbe\xaf\xb0\xd8\xe1\xe4yV\u007fQج\x8do\xa7>\brn\xd2w\x0e\xf6\xd2:\xdf \x1b\rS:\xbe$}\xbd\xb3\x9c\xbe\xb1\xf6\x99G\xb9\x9f\xc3\xdcV2\xee`\x9e\xea\v\xfd\xf1\x8bߡ\xc6\xd7c\br\x0f\xd2\x03\xea\xc4\x14\x9a\x93Fd\fx\x91\xc0\x8exA\x86X\xbf\xd74\xd4E\x16K\x885K\xa2\xd43\xf9\xa5\xf6\x84\x1f\x85T\xaf\xc5F/34ŌcnZ\xb7\x1e!\xcc\xedTjd\xe2\x9b̊\fDF\x8c\x88&9E\x1b2î\f\xc0\x93\x90\x9e=\x12Af\xf7\xe4M4\xc8\xc4d\xb9B\x8f\xb0ý\xb1\xac\xefN\xa6X\xbb\xfeR.\xcc\xf8\xbdc\xbf\t\xd8\v\xa9\n\x1bmu\x17rc\xd9\t\xa94G\u007f\x8e\xc0&\xaa\x84`\x1a\xd9\xc9U\xcaj\x98kU8\x8f6\xbe\xe6\xf6vx\xde@\xfdu\x12\x86\xac\xf9aΰl4\xe5\x16\x8d˪\x8bpI\xd9*E\t\xf5\xfa\xb3\xd1qdq\xedX\x9dv\\)\xd7\\\x01W\xb7\x06\xb9.\x9e\xaa\x8a\x90\x87\xadF\xb9tɭ\xf0\xe2\xa3]\rԭ\xc3\xe2ȼ\xc2\xf6WT\x9f\x1cUb5SX5]\xc2m\xaa5F\xa8\xd8I\xc0w\xc9g;eĿB\xea\xcd\xd6>\x8dW<\x957r\xe8\xc5\xf1\xfd\xa6\xfb\x8b7e\xfd\x13\xf31E\x93\xee\xf8\xceW\x1cJ#Q%\xe5\xca\xea\xb5\xe1\xe3M\xb9\xa3>\xb8&\x17_\xeaN\x93\xd7 L\x87\xedǤ\xc6z\xaff7uw\xf7)l\xc4\xcb\f7\x1f\x8b\x90.Y\xe7\xc2:$\xdaV\x1b\f\x93vc\x8e\xe4`\x9e@\x99r\xf7?\xf4\xf1\xb7\xc8Y\u007f\xce\xcb,\xdeExE_\tdE\xaey\x11\xbe\x1f\x9e\xd7:\xa1\xb5\x98\xc6\xfa<&\xbbc\x90\x84s&\x91\x82\xdf\x0eK_>\xf7y\x8d\x87\xdf\xe3\x81È\xd2\x0f\xc5;\xeb\xa1\x0f-\xac\xeb\xaf>\\\xcc\x00u^\xf8\xc2\xcd\u007f6\x83\x87A\"r_\xd8\xd2\x17$\x85\xe5'\xe0\x04\x02\xc3K\xe9\xe5\x1f\xceP\xc2\xf9 X\x93ߧ\xf8T\x0fkNs·\xac|\xa5y\xf0$\x1c\u007f\x99\"\xe4\xe4\xa5\xeb~r\xa8\xddF\xbeM\x11\xdc\xc0\x16R\xe1qM\xb0{\xbfOZ\xa6Qf\xf3\x13\xf9\xc9\xdd}\xa1\x11\xf5\xcd_IV\x9eV=\xac\x1f\xd9\xc9\xd0\xd5\xce\x1a>\xe3\xd3Yߍ&\xc4\xfb9\xd7p{\x83\xe9}\xfdU\xa4\xd8M5\xdfQ\xe2˲3\x05\xe8\xealop/\xa3'\x94j\xc1\v\x17c\x0e~/\xcf\r-\x1f\xd3\x13\xda\xc9\x1fz\xbf\x8dh\xe1\x84\x06\x0ek߀\x92\xf4\xba\x9a/g\xbdo\xfe\xe3\xa5\xd7嗲\x8e᎙?M\x95\xb6d\xa5\xf4LeO\xa3y\"I0\xf7eƸ\xfdɬՊ\xff\xa9\xbe\x88\xc5\xff&F\x87\xb8\xcfm\xe1\xaf\u007f\xbb\x80ҋ\xdcWxP\xe7\u007f\x02\x00\x00\xff\xff\xdb*.\x0eeL\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VMo\xe36\x10\xbd\xebW\f\xb6\x87\xbdT\xf2\x06{)t+\xd2\x16\b\xda\x06A\xbcͥ\xe8\x81&G\xf64\x14\xa9r\x86N\xdd__\x90\x94b[\x967\xbb\x87\xd5M\xa3\xf9x|\xf3fĪ\xae\xebJ\r\xf4\x84\x81ɻ\x16\xd4@\xf8\xaf\xa0Ko\xdc<\xff\xc0\r\xf9\xd5\xfef\x83\xa2n\xaagr\xa6\x85\xdb\xc8\xe2\xfbGd\x1f\x83Ɵ\xb0#GB\xdeU=\x8a2JT[\x01(缨d\xe6\xf4\n\xa0\xbd\x93\xe0\xad\xc5Po\xd15\xcfq\x83\x9bH\xd6`\xc8\x15\xa6\xfa\xfb\x0f\xcd\xc7\xe6C\x05\xa0\x03\xe6\xf0O\xd4#\x8b\xea\x87\x16\\\xb4\xb6\x02p\xaa\xc7\x16\x18C\n\x12%\x91\x03\xfe\x13\x91\x85\x9b=Z\f\xbe!_\xf1\x80:\x15\xde\x06\x1f\x87\x16\x8e\x1fJ\xfc\b\xaa\x1ch\x9dS\xads\xaaǒ*\u007f\xb5\xc4\xf2\xeb5\x8f\xdfh\xf4\x1al\f\xca.\x03\xca\x0eLn\x1b\xad\n\x8b.\x15\xc0\x100\u007f\xf8\xc3=;\xff\xe2~!\xb4\x86[\xe8\x94e\xac\x00X\xfb\x01[\xb8O\xa8\a\xa5\xd1T\x00{e\xc9dz\xca9\xfc\x80\xeeLJ\xbb\xa7\x8fk\xbd\xc3^\x15#\x80Aց\x86\xec\xb7t\x06 \x06\x05#\x12\x10\x0fJkd\x06\x1dC@'P\x90\x02\xb9·>\x97\x1b\x13\x03\xa8\x8d\x8f\x02\xb2Cx\xcaԎgkF\x87!\xf8\x01\x83\xd0Dt\x0e9\xca\xec\xd56\xc3\xf8>\x1d\xa2\xf8\x80I\xc2B\xce5Fy\xa0\x01\xce\a\x04߁\xec\x88!`f\xcf\xc99\xba\xccI\aʁ\xdf\xfc\x8dZ\x9a\xf1\xf4\f\xbc\xf3њ\xa4\xc6=\x06\x81\x80\xdao\x1d\xfd\xf7\x9a\x99\x13\r\xa9\xa4U2\xe9`z\xc8\t\x06\xa7l\xa2?\xe2\xf7\xa0\x9c\x81^\x1d `\xaa\x01ѝd\xcb.\xdc\xc0\xef>`&\xb0\x85\x9d\xc8\xc0\xedj\xb5%\x99\x06K\xfb\xbe\x8f\x8e\xe4\xb0\xca\xe3A\x9b(>\xf0\xca\xe0\x1e\xed\x8ai[\xab\xa0w$\xa8%\x06\\\xa9\x81\xea\f\xdc\xe5\xb9jz\xf3]\x18\xa7\x90ߟ \x95C\x12\fK \xb7}5g\xa9_\xe5=ɼ\xa8\xa1\x84\x15\xfcGz\x93)\xb1\xf2\xf8\xf3\xfa\x13LEs\v\xce9\xcfl\x1f\xc3\xf8H|\"\x8a\\\x87\xa14\xae\v\xbe\xcf\x19љ\xc1\x93+ZҖН\x93\xceqӓ\xf0\xa4\xd2ԟ\x06n\xf3z\x81\rB\x1c\x8c\x124\r\xdc9\xb8U=\xda[\xc5\xf8\xcdiO\fs\x9d(}\x9b\xf8ӭx\xeeX\xd8z5O+k\xb1C\vӻ\x1eP\xa7\x9e%\xe2R,u\xa4\xf3\x18@\xe7\x03\xa8\xa5\x90\xe6M\f\xd9\xfb\xabP\x8c;\xa2\xe0\x98m\x8e4\x83o\xe1XZ\x15پS\x8c\xe7\xa6\x19\x9a\x87\xe41\xafl\xa9C}\xd0\x16K\x82\xb2)\xf0-\x10\xe9A\x17\xfby\xbd\x1a\xee\xf1\xe5\xc2\xf6\x10|ړy\x15\x9f>\x8b\xfd\x87\xf2\x8fؒ\xe3ϟ\xa6\xf8\xe4\xbf\xce\xe9\xca=Y\xb5c\x1a\bѹ4\x91\xde%\xf3,)\x9co\xe4\xd9W\x12\xec/p,\"\xb9s\x9d\xcf\u007fm\x95J*)s\x82cS\xc7\x1a\x05\xd1E\xbak=-\xcf|\x15}\x01\x81\xe5\xc9\u007f\xfe\xaf\x0fL\xab\x83\x02.Ԭ3\x96\x05s\xaata^\x9c\x98\x11Y\xb4Vm,\xb6 !\xce#K\x9c\nA\x1d\xceU1\xc9\xe8x\xc7\xf9\xac@.ܓ\xf6_v\xe8\xae)\x1c^\x14/\xf5\xa6\xa4\x81\xcd\xe1Z\xe0\xed\xebem>$E\x96-\xa4\xad[\v]\xb0\xf4\x05D,t\xa9Hu\xe1vpA\xc2\xfa\xd4s\x9a\xfd3\xc1O\x97\x859\xf2+\xc5\x17\x9a:3\x1d\xef\xa67Ƿ,\xecz\xbc\x8b\xe6\x0f\xe3)\xcc\xc9\xc9Y|Pۉ\x8b\xe3nM\u05ecA\xd0\xdc\xcfo\xa2\xefޝ])\xf3\xab\xf6\xceP\xb9Hß\u007fU%+\x9a\xa7\tG2\xfe\x1f\x00\x00\xff\xff\xee@m\x0f\xc7\v\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4V\xc1\x8e\xdc6\f\xbd\xfb+\x88\xf4\x90K\xed\xc9\"\x97·`\xdb\x02A\xd3`\x91M\xe6R\xf4\xa0\x91\xe8\x19veI\x15)\xa7ۯ/$\xcb;\xe3ٙ\xa4E\x11\xdfDS\xe4\xe3\xe3#\xa1\xa6m\xdbF\x05\xdabd\xf2\xae\a\x15\b\xff\x12t\xf9\xc4\xdd\xc3\x0fܑ\xdfL7;\x14u\xd3<\x903=\xdc&\x16?~@\xf6)j\xfc\x11\ar$\xe4]3\xa2(\xa3D\xf5\r\x80r\u038b\xcaf\xceG\x00\xed\x9dDo-\xc6v\x8f\xae{H;\xdc%\xb2\x06cɰ\xe4\x9f^u\xaf\xbbW\r\x80\x8eX\xae\u007f\xa4\x11Y\xd4\x18zp\xc9\xda\x06\xc0\xa9\x11{\x98\xbcM#\xb2S\x81\x0f^\xac\xd7s\xb2nB\x8b\xd1w\xe4\x1b\x0e\xa8s\xee}\xf4)\xf4p\xfc1\x87\xa8\xb8暶%\xda}\x8d\xf6\xaeF+\x0e\x96X~\xf9\x82\xd3;b)\x8e\xc1\xa6\xa8\xecUdŇ\xc9\xed\x93U\xf1\x9aW\x03\x10\"2\xc6\t?\xb9\a\xe7?\xbb\x9f\t\xad\xe1\x1e\x06e\x19\x1b\x00\xd6>`\x0f\xefs\x05Ai4\r\xc0\xa4,\x99r\u007f\xae\xc9\ato\xee\xden_\xdf\xeb\x03\x8ej6\x02\x18d\x1d)\x14\xbf+\xc5\x001(X\xd0\xc0\xe7\x03F\x84ma\x0eX|D\xae\xc0kH\x80\xa5\x02\xee\xaa)D\x1f0\n-\x04\xe7\xefDaO\xb63_\x9b\xf1\x1f\xe9ͦ\xccʇ\x9f\xee?\u0092\xb4\xb4`\xcdya\xfbx\x8d\x8f\xc4g\xa2\xc8\r\x18\xe7\xc6\rя%\":\x13<9)\am\tݚtN\xbb\x91$w\xfaτ,\xb9?\x1dܖ\xcd\x02;\x84\x14\x8c\x124\x1d\xbcup\xabF\xb4\xb7\x8a\xf1\x9bӞ\x19\xe66S\xfau\xe2O\x17\xe2\xdaqf\xeb8DuU]\xec\xd0\xe5I\xbd\x0f\xa8W\x83\x92c\xd0@ur\a\x1fA\xadجS|9Zw\xe2zi\x80a\xde\xe0\x03\xed\xd76\x00eL\xd9\xfe\xca\xde]\xb9w\x95\x9e\v\xb5ޖ\x1cY\x8e\xb9\x80\x10\xfdD\x06c\xbb\xd4V1\xa4X\x8b,\xbb\xb1k.\xe5:c\xb8\x16V\u009d\xc3[!\xb8\xabN\x19C\xa6u\xb94\xef\x1d\xac\xeb\xaf,C\xb5\xc7˹\x9fՙ\x15L\x11WS\xd8>\x85\xfe\xaa:DI\xe2\xff\xaa\x8fr\xa9z\xee\xaaFt\x8a\x11\x9dԈ\xe0\x87\x15|\xf5\xff5\x12\x0e\x8a\xf1\x8b\xfc^\x8e}\x97\xef-\x94[\x1aP?Z\x9c\xa3\x95m\xfeLP\xff\x1ai\xfeХ\xf1\x1cT\vo&EV\xed,>\xfb\xf3ɩ+\xff\xae\xf4\xf7B\xdb\xceL\xc7\a\xce\xcd\xf1T\xc8k\x97\a\xcd\xcd\xfcB\xc8K\xd3\xf4 1\xcdɫҪ\xe5\xa8\x05\xa55\x06A\xf3\xfe\xfc-\xf3\xe2\xc5\xea9R\x8eڻyL\xb9\x87\xdf~o\xe6\xa8h\xb6\v\x8el\xfc'\x00\x00\xff\xff\xbcn\x89\xa9\f\n\x00\x00"), } diff --git a/pkg/apis/velero/v1/backup.go b/pkg/apis/velero/v1/backup.go index d1e2cb48c..6bda247cc 100644 --- a/pkg/apis/velero/v1/backup.go +++ b/pkg/apis/velero/v1/backup.go @@ -88,6 +88,13 @@ type BackupSpec struct { // +optional // + nullable DefaultVolumesToRestic *bool `json:"defaultVolumesToRestic,omitempty"` + + // OrderedResources specifies the backup order of resources of specific Kind. + // The map key is the Kind name and value is a list of resource names separeted by commas. + // Each resource name has format "namespace/resourcename". For cluster resources, simply use "resourcename". + // +optional + // +nullable + OrderedResources map[string]string `json:"orderedResources,omitempty"` } // BackupHooks contains custom behaviors that should be executed at different phases of the backup. diff --git a/pkg/apis/velero/v1/zz_generated.deepcopy.go b/pkg/apis/velero/v1/zz_generated.deepcopy.go index 316feeb00..05e903a0b 100644 --- a/pkg/apis/velero/v1/zz_generated.deepcopy.go +++ b/pkg/apis/velero/v1/zz_generated.deepcopy.go @@ -252,6 +252,13 @@ func (in *BackupSpec) DeepCopyInto(out *BackupSpec) { *out = new(bool) **out = **in } + if in.OrderedResources != nil { + in, out := &in.OrderedResources, &out.OrderedResources + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } return } diff --git a/pkg/backup/item_collector.go b/pkg/backup/item_collector.go index 2fbf51587..acdf548ea 100644 --- a/pkg/backup/item_collector.go +++ b/pkg/backup/item_collector.go @@ -1,5 +1,5 @@ /* -Copyright 2017, 2020 the Velero contributors. +Copyright 2020 the Velero contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package backup import ( "encoding/json" + "fmt" "io/ioutil" "sort" "strings" @@ -99,6 +100,64 @@ func (r *itemCollector) getGroupItems(log logrus.FieldLogger, group *metav1.APIR return items, nil } +// sortResourcesByOrder sorts items by the names specified in "order". Items are not in order will be put at the end in original order. +func sortResourcesByOrder(log logrus.FieldLogger, items []*kubernetesResource, order []string) []*kubernetesResource { + if len(order) == 0 { + return items + } + log.Debugf("Sorting resources using the following order %v...", order) + itemMap := make(map[string]*kubernetesResource) + for _, item := range items { + var fullname string + if item.namespace != "" { + fullname = fmt.Sprintf("%s/%s", item.namespace, item.name) + } else { + fullname = item.name + } + itemMap[fullname] = item + } + var sortedItems []*kubernetesResource + // First select items from the order + for _, name := range order { + if item, ok := itemMap[name]; ok { + sortedItems = append(sortedItems, item) + log.Debugf("%s added to sorted resource list.", item.name) + delete(itemMap, name) + } else { + log.Warnf("Cannot find resource '%s'.", name) + } + } + // Now append the rest in sortedGroupItems, maintain the original order + for _, item := range items { + var fullname string + if item.namespace != "" { + fullname = fmt.Sprintf("%s/%s", item.namespace, item.name) + } else { + fullname = item.name + } + if _, ok := itemMap[fullname]; !ok { + //This item has been inserted in the result + continue + } + sortedItems = append(sortedItems, item) + log.Debugf("%s added to sorted resource list.", item.name) + } + return sortedItems +} + +// getOrderedResourcesForType gets order of resourceType from orderResources. +func getOrderedResourcesForType(log logrus.FieldLogger, orderedResources map[string]string, resourceType string) []string { + if orderedResources == nil { + return nil + } + orderStr, ok := orderedResources[resourceType] + if !ok || len(orderStr) == 0 { + return nil + } + orders := strings.Split(orderStr, ",") + return orders +} + // getResourceItems collects all relevant items for a given group-version-resource. func (r *itemCollector) getResourceItems(log logrus.FieldLogger, gv schema.GroupVersion, resource metav1.APIResource) ([]*kubernetesResource, error) { log = log.WithField("resource", resource.Name) @@ -111,6 +170,7 @@ func (r *itemCollector) getResourceItems(log logrus.FieldLogger, gv schema.Group clusterScoped = !resource.Namespaced ) + orders := getOrderedResourcesForType(log, r.backupRequest.Backup.Spec.OrderedResources, resource.Name) // Getting the preferred group version of this resource preferredGVR, _, err := r.discoveryHelper.ResourceFor(gr.WithVersion("")) if err != nil { @@ -260,6 +320,9 @@ func (r *itemCollector) getResourceItems(log logrus.FieldLogger, gv schema.Group }) } } + if len(orders) > 0 { + items = sortResourcesByOrder(r.log, items, orders) + } return items, nil } diff --git a/pkg/backup/item_collector_test.go b/pkg/backup/item_collector_test.go index a0f4420b9..f44743dfb 100644 --- a/pkg/backup/item_collector_test.go +++ b/pkg/backup/item_collector_test.go @@ -19,6 +19,7 @@ package backup import ( "testing" + "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -48,3 +49,32 @@ func TestSortCoreGroup(t *testing.T) { assert.Equal(t, expected[i], r.Name) } } + +func TestSortOrderedResource(t *testing.T) { + log := logrus.StandardLogger() + podResources := []*kubernetesResource{ + {namespace: "ns1", name: "pod1"}, + {namespace: "ns1", name: "pod2"}, + } + order := []string{"ns1/pod2", "ns1/pod1"} + expectedResources := []*kubernetesResource{ + {namespace: "ns1", name: "pod2"}, + {namespace: "ns1", name: "pod1"}, + } + sortedResources := sortResourcesByOrder(log, podResources, order) + assert.Equal(t, sortedResources, expectedResources) + + // Test cluster resources + pvResources := []*kubernetesResource{ + {name: "pv1"}, + {name: "pv2"}, + } + pvOrder := []string{"pv5", "pv2", "pv1"} + expectedPvResources := []*kubernetesResource{ + {name: "pv2"}, + {name: "pv1"}, + } + sortedPvResources := sortResourcesByOrder(log, pvResources, pvOrder) + assert.Equal(t, sortedPvResources, expectedPvResources) + +} diff --git a/pkg/builder/backup_builder.go b/pkg/builder/backup_builder.go index 75f95d950..0c88cd9a6 100644 --- a/pkg/builder/backup_builder.go +++ b/pkg/builder/backup_builder.go @@ -181,3 +181,9 @@ func (b *BackupBuilder) Hooks(hooks velerov1api.BackupHooks) *BackupBuilder { b.object.Spec.Hooks = hooks return b } + +// OrderedResources sets the Backup's OrderedResources +func (b *BackupBuilder) OrderedResources(orders map[string]string) *BackupBuilder { + b.object.Spec.OrderedResources = orders + return b +} diff --git a/pkg/cmd/cli/backup/create.go b/pkg/cmd/cli/backup/create.go index e06eaecb0..c800d674e 100644 --- a/pkg/cmd/cli/backup/create.go +++ b/pkg/cmd/cli/backup/create.go @@ -19,6 +19,7 @@ package backup import ( "context" "fmt" + "strings" "time" kbclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -96,6 +97,7 @@ type CreateOptions struct { StorageLocation string SnapshotLocations []string FromSchedule string + OrderedResources string client veleroclient.Interface } @@ -120,6 +122,7 @@ func (o *CreateOptions) BindFlags(flags *pflag.FlagSet) { flags.StringVar(&o.StorageLocation, "storage-location", "", "Location in which to store the backup.") flags.StringSliceVar(&o.SnapshotLocations, "volume-snapshot-locations", o.SnapshotLocations, "List of locations (at most one per provider) where volume snapshots should be stored.") flags.VarP(&o.Selector, "selector", "l", "Only back up resources matching this label selector.") + flags.StringVar(&o.OrderedResources, "ordered-resources", "", "mapping Kinds to an ordered list of specific resources of that Kind. Resource names are separated by commas and their names are in format 'namespace/resourcename'. For cluster scope resource, simply use resource name. Key-value pairs in the mapping are separated by semi-colon. Example: 'pods=ns1/pod1,ns1/pod2;persistentvolumeclaims=ns1/pvc4,ns1/pvc8'. Optional.") f := flags.VarPF(&o.SnapshotVolumes, "snapshot-volumes", "", "Take snapshots of PersistentVolumes as part of the backup.") // this allows the user to just specify "--snapshot-volumes" as shorthand for "--snapshot-volumes=true" // like a normal bool flag @@ -281,6 +284,28 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { return nil } +// parseOrderedResources converts to map of Kinds to an ordered list of specific resources of that Kind. +// Resource names in the list are in format 'namespace/resourcename' and separated by commas. +// Key-value pairs in the mapping are separated by semi-colon. +// Ex: 'pods=ns1/pod1,ns1/pod2;persistentvolumeclaims=ns1/pvc4,ns1/pvc8'. +func parseOrderedResources(orderMapStr string) (map[string]string, error) { + entries := strings.Split(orderMapStr, ";") + if len(entries) == 0 { + return nil, fmt.Errorf("Invalid OrderedResources '%s'.", orderMapStr) + } + orderedResources := make(map[string]string) + for _, entry := range entries { + kv := strings.Split(entry, "=") + if len(kv) != 2 { + return nil, fmt.Errorf("Invalid OrderedResources '%s'.", entry) + } + kind := strings.TrimSpace(kv[0]) + order := strings.TrimSpace(kv[1]) + orderedResources[kind] = order + } + return orderedResources, nil +} + func (o *CreateOptions) BuildBackup(namespace string) (*velerov1api.Backup, error) { var backupBuilder *builder.BackupBuilder @@ -304,6 +329,13 @@ func (o *CreateOptions) BuildBackup(namespace string) (*velerov1api.Backup, erro TTL(o.TTL). StorageLocation(o.StorageLocation). VolumeSnapshotLocations(o.SnapshotLocations...) + if len(o.OrderedResources) > 0 { + orders, err := parseOrderedResources(o.OrderedResources) + if err != nil { + return nil, err + } + backupBuilder.OrderedResources(orders) + } if o.SnapshotVolumes.Value != nil { backupBuilder.SnapshotVolumes(*o.SnapshotVolumes.Value) diff --git a/pkg/cmd/cli/backup/create_test.go b/pkg/cmd/cli/backup/create_test.go index 8315021bd..f3cf1e358 100644 --- a/pkg/cmd/cli/backup/create_test.go +++ b/pkg/cmd/cli/backup/create_test.go @@ -1,5 +1,5 @@ /* -Copyright 2019 the Velero contributors. +Copyright 2020 the Velero contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -33,6 +33,9 @@ const testNamespace = "velero" func TestCreateOptions_BuildBackup(t *testing.T) { o := NewCreateOptions() o.Labels.Set("velero.io/test=true") + o.OrderedResources = "pods=p1,p2;persistentvolumeclaims=pvc1,pvc2" + orders, err := parseOrderedResources(o.OrderedResources) + assert.NoError(t, err) backup, err := o.BuildBackup(testNamespace) assert.NoError(t, err) @@ -42,11 +45,16 @@ func TestCreateOptions_BuildBackup(t *testing.T) { IncludedNamespaces: []string(o.IncludeNamespaces), SnapshotVolumes: o.SnapshotVolumes.Value, IncludeClusterResources: o.IncludeClusterResources.Value, + OrderedResources: orders, }, backup.Spec) assert.Equal(t, map[string]string{ "velero.io/test": "true", }, backup.GetLabels()) + assert.Equal(t, map[string]string{ + "pods": "p1,p2", + "persistentvolumeclaims": "pvc1,pvc2", + }, backup.Spec.OrderedResources) } func TestCreateOptions_BuildBackupFromSchedule(t *testing.T) { @@ -87,3 +95,27 @@ func TestCreateOptions_BuildBackupFromSchedule(t *testing.T) { }, backup.GetLabels()) }) } + +func TestCreateOptions_OrderedResources(t *testing.T) { + orderedResources, err := parseOrderedResources("pods= ns1/p1; ns1/p2; persistentvolumeclaims=ns2/pvc1, ns2/pvc2") + assert.NotNil(t, err) + + orderedResources, err = parseOrderedResources("pods= ns1/p1,ns1/p2 ; persistentvolumeclaims=ns2/pvc1,ns2/pvc2") + assert.NoError(t, err) + + expectedResources := map[string]string{ + "pods": "ns1/p1,ns1/p2", + "persistentvolumeclaims": "ns2/pvc1,ns2/pvc2", + } + assert.Equal(t, orderedResources, expectedResources) + + orderedResources, err = parseOrderedResources("pods= ns1/p1,ns1/p2 ; persistentvolumes=pv1,pv2") + assert.NoError(t, err) + + expectedMixedResources := map[string]string{ + "pods": "ns1/p1,ns1/p2", + "persistentvolumes": "pv1,pv2", + } + assert.Equal(t, orderedResources, expectedMixedResources) + +} diff --git a/pkg/cmd/util/output/backup_describer.go b/pkg/cmd/util/output/backup_describer.go index a6893bbf1..9d813ce17 100644 --- a/pkg/cmd/util/output/backup_describer.go +++ b/pkg/cmd/util/output/backup_describer.go @@ -1,5 +1,5 @@ /* -Copyright 2017, 2019 the Velero contributors. +Copyright 2020 the Velero contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -218,6 +218,14 @@ func DescribeBackupSpec(d *Describer, spec velerov1api.BackupSpec) { } } + if spec.OrderedResources != nil { + d.Println() + d.Printf("OrderedResources:\n") + for key, value := range spec.OrderedResources { + d.Printf("\t%s: %s\n", key, value) + } + } + } // DescribeBackupStatus describes a backup status in human-readable format. diff --git a/site/docs/main/backup-reference.md b/site/docs/main/backup-reference.md index 797230d67..e1f26dcf2 100644 --- a/site/docs/main/backup-reference.md +++ b/site/docs/main/backup-reference.md @@ -7,3 +7,12 @@ It is possible to exclude individual items from being backed up, even if they ma ```bash kubectl label -n / velero.io/exclude-from-backup=true ``` + +## Specify Backup Orders of Resources of Specific Kind + +To backup resources of specific Kind in a specific order, use option --ordered-resources to specify a mapping Kinds to an ordered list of specific resources of that Kind. Resource names are separated by commas and their names are in format 'namespace/resourcename'. For cluster scope resource, simply use resource name. Key-value pairs in the mapping are separated by semi-colon. Kind name is in plural form. + +```bash +velero backup create backupName --include-cluster-resources=true --ordered-resources 'pods=ns1/pod1,ns1/pod2;persistentvolumes=pv4,pv8' --include-namespaces=ns1 +velero backup create backupName --ordered-resources 'statefulsets=ns1/sts1,ns1/sts0' --include-namespaces=ns1 +```