123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import sys,os
- import torch
- from RotateMatch.torchRotate import *
- from RotateMatch.rotate import *
- from io import BytesIO
- current_path = os.path.abspath(os.path.dirname(__file__))
- tailor_model_path = os.path.join(current_path,"captcha_tailor.state",)
- rotate_model_path = os.path.join(current_path,"captcha_rotate.state")
- #
- # print(tailor_model_path)
- tailor_cnnnet = CNNNet()
- tailor_cnnnet.load_state_dict(load(tailor_model_path))
- # tailor_cnnnet = torch.load(tailor_model_path,map_location=torch.device('cpu'))
- # _dict = {}
- # tailor_cnnnet.state_dict(destination=_dict)
- # save(_dict,"captcha_tailor.state")
- # tailor_cnnnet.load_state_dict(_dict)
- rotate_cnnnet = CNNNet()
- rotate_cnnnet.load_state_dict(load(rotate_model_path))
- # rotate_cnnnet = torch.load(rotate_model_path,map_location=torch.device('cpu'))
- # _dict = rotate_cnnnet.state_dict()
- # save(_dict,"captcha_rotate.state")
- # print("===========")
- rotateDataSet = RotateDataSet(False,False)
- def getMoveLength(img_b64,height):
- im = getImageFromBase64(img_b64)
- wid,heig = im.size
- _w = 0
- list_result = []
- while 1:
- _w += 5
- if _w>=wid:
- break
- new_im = tailor(im,height,_w)
- _x = rotateDataSet.imageTailor(new_im,False)
- _x = torch.tensor([_x])
- _out = tailor_cnnnet(_x)
- _out = torch.nn.Softmax()(_out)
- _prob = _out[0][1].to(float)
- list_result.append([_w,_prob])
- list_result.sort(key=lambda x:x[1],reverse=True)
- actual_w = list_result[0][0]
- # im.show()
- # img = tailor(im,height,actual_w)
- # img.show()
- # print(list_result)
- return actual_w
- def getRotateAngle(img_b64,radius):
- if isinstance(img_b64,Image.Image):
- im = img_b64
- else:
- im = getImageFromBase64(img_b64)
- # im.show()
- center_im = circle_center(im,appendColor=True,radius = radius)
- list_result = []
- step = 5
- for i in range(360//step):
- x = rotateDataSet.rotateImage_fast(im,center_im,i*step)
- _out = rotate_cnnnet(torch.tensor([x]))
- _prob = _out[0][1].to(float)
- list_result.append([i*step,_prob])
- list_result.sort(key=lambda x:x[1],reverse=True)
- angle = list_result[0][0]
- # print(list_result)
- # for _i in range(len(list_result[:10])):
- # # center_im.show()
- # r_image = imageRotate(im,center_im,list_result[_i][0])
- # r_image.show()
- # break
- return angle
- def test_move():
- b = '''
- /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAFoAk4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwC7Bbkj5utOnh2DNVo/EFinBuIx61DLrlvcybInDfSvKhh1y2PL5bGhZndJXV2VwscfPpXK2K5UEVdeZ414Nd+HpezRpDRFvVb1Np+asm21JC5G8VgeINQuVRhGvbrXFG/vhJuSRlIqKmISkS3qe7WN7HIoOQfpUt20W3NeZeG/EU8hMU7DeK6q61MiIc9q6IVoyWpSehqK8WKjmuEiHFcSfEVytw6bfkB4NQ3OuXM3ABFYVMVCJLmdZPcowJU1yniCEXEZCr83Yim2clxK+dxweua1vIBjwRyR1rmjjLmlKpZnlNzb3EUp3hhz1qu24jlmzXeapa26kjjNc29gHlGOma1VdPc6vbxMMwyMMgH61Vl3o2DXbfYI44iD1xXP3enyTFtinA70qeJjKVifrEb2MXew/ipysTzuNSPp9ypO5GOKdDZP/ECK6HOJpzoFJx95qcc4+8341eisvlqRrOodZC9pEyWDnjNRlX//AFVrG1wacLPdUuuiZVooxtrnu1N+YH7zV0I0ziq9xppz0pqsmTGvFuxkZOPvH8aaSf71WZbWSM+1V2XB5rRO50XT2G7iP4qfGx/vVF3qSP71WxmjATtHzVdUnb96qcHQVdA+Ws3uaIryZx96mK7L0bmpZB1qFh8ppsGD3UwUjzGx6VCs0zHG9qXG44qzDBnBpci7GbJrfdgFmP41ehDOx3NxUCgItOSYA4pqKJSLxUoN0bEEVZtPEz27CK5LFRxn0rMefaMDvWXevgA96HEqx6Cl1BfxhkcMDWffaFFchiAQfUVwtnqk9jPvikbGfu9q7fRfEtvfgRzMI5OnPelqiWc3d6VdWTZKlk9RT9Lumgn2gnNd9PFE0OSAQelcdqWlhZ/OgG3msqyVSNmZSV0dNYaj5i7S3aoNSt/PVsHnFZNgZY+W/OtgSh4+Wr56dL2VS8TgnFxdzlTpkxuwRuxXS2dvJFGAWP405AhfOQa1YgrKoxXoUcw5bKZvDEaWMbUJWSFju7Vw17OWc/Ma9G1i0D2b464Nec31rJFIcdK9OOIhPY6VUTM8sxOd35VIucZy1CxnPIq3FFgVsUiONGAzz+NW1iOAaAlTRkAc9KTKJ44yFFWhlEqFGHGKssMx0CZQnc8/NWTOx/vVp3R5IrJm6igBmT/e/KlBOPvH8aQdKcKRIoYjndTxIx/ipAKMUBcjvNzKvzdKpMWB+9VycYUVWYZ7ZqlsBFub+8fwp8e9mwCxp6wPJgba2dO0hmZSVqKlaNNXYpVFFBpljJIyksQB611dtGY1A9KLOyESAYxitKOAE8V4OIxXPLQ86pPnY+N22jnFEjsOrU/ygnJqrPKoBArFzbJGeYd33qY055Gc1GW4qMEscCkohYswAs2a1oXWJck4rKRhGopTOT3rOachp2NtbxmOFb6VZjDyDJOTWTYhnYHHFbH2iKADe6r9aqlhpyle2g0mzw8rItztZiTn1ru/C9ox+auc1OyNvekEfxV3HhUKYV9a+rtqdUtVc7K0iKxgVblUCPmi1QECjUFIjO30q53UbkbI5jUws0pQdvWswaSjHO0ZPpSvcFLiQP8AezUsd0Aa8CrW945W22EWkxxMHThvWrkzTeWFJ6cZqNLoHrSyS7hxWft2uoXKqWSEnIyanWwQj7tJGzbxxn2rYggbYGYYojebCKuynFEtuvTB71k6rqzKTDATnuw7VqatcJbRYBy7DAFYNvZtcHdjJJ5+tKT5dEaN2Mtnkb+Ik+9WLSBnYZ5raGj4XJWp7ewwQNvStKabepn7zIJLAvADt6CjTdJjkY+YvOe9dNFaZiA29qS1sTDNyOCeK6fq1pJocYu9zLk8OwFslFph8NWxU/uwfpXWmD92PrVcqVJHWrqQcWdCVzhrzw2IxuiUiueurKWByGU49a9XaFZRyMVRuNEjnBLpnNY2lIUos8u8sn+GpETHbmuk1PRDaSb1GVPFZptPUYrJ3TsYNNFeMcVOIFkXletKIWUgEcVbgh+bpVKTJ5ijJoYmGVWuf1TQZoBvVOlem2Fup4NXLrS4Z4iCgOR3r0aEtDqpVX1PBCME5GCKfF1roPFWhNp160iA7GOTWBGRuyOldNz0ItM07ZeBV8L8tULY8itEH5ak0RXkHNQN0qeQ/NS29u9zMsUalnc4UDuaTdlcGJp2nXGoXcdtaQmWWRtqqPWr9zYT6ZdS2t1GY54jtdD2r1vwd4cg8O2iSbQ99JgvI3VT/dFP+LfhmK+0ZfEtkgE8QAuNn8a9M/gawhXU5WRg5XZ4lcTBATVaKfABqrd3BZuMYOOR3p8OSo966S1qXPOJ61Ru5c5qwxwKzJ23SNTKY3vT0dkIOSMelRin9qbIOl0zxJcRRCCVhIg6e1b9nPFqJCKOnUV58jmNhWnaaqLWVZFzkelYTgRJHop0pDBtAwcVy2o3TafOYpMnHRvWur0LU4NTtwyyDf3U9qXWvD8OpW7DaN3OGHasPYwk/eFypowNBmF8zMe1dQIdo4rlNIsZtHnMUwBU/dYd66tJwVolgKM1oS6KKl5NztesDULaFkLbean8QX22ZVXqOuKxReu4Oc4964lgZU5+69CPZWehQmth5h2jimbccValfcSQKqSNg5r1YXtqbJWQO4FIj5OKqvJ81SwfMwq2O5q265bNXnT5Kr2MeXArYW33p7UDWpzd0hyax5j85FdbeWuAa5m6i2sfrQNlYdKctJjFKtIkk7U5RTRUi0mSQXCk7AO5q3ZaZ53UZ5pqxmSVBjPNdBasIlCgYNcuJrOKsjnrVXHQWz0eNBytblrYqqgIo/Gqlu+SK14pVVRzXiV6s3uczb6liO1VVB2rmmu6ocYA+lHnsx2oKPsrsctWUIylsiSnPMWU47VjzOxlrfuIRHGxNc5Id0xx611RpOG40TqxIxUijbzSRrxTmUt8oGai6GMZy7cVbs7VppVU9O9OgtMAMRgCrVveQwzKM85rWlTc5JW0Go3N2CzWKPAAOBXG+LIZpLhGSVgM9M4xXcxOJY9wHUViatY+ay8Z5r6KFKMYqyNo+6ZniHRPPUyRj5h6Vl6Ddy2NwI5M46c16NPAsufeud1HQwD5sQ561RSOo068WVQQe1acqedESPSuG025ltmEbetdVDeAwnPcU1PQTscZ4liFpeo68b+tUoWMlXvEj/abpI152nOabZ2wwBXzWNcVN2OSS10JoICwFXlt+AMZNWLa2+UZq4I40we4rCnTvqxqLK9pY+WdzjLdqkvb1LRNoO58dKhudSSMFIxub1rEmLyOWOST1rV1owVolaRIZmNzOZZDlj+la2mRIoGay4reWSQcHGas3l+ulxGQjIAxgUqV3LmZD8zq1tlaMECqstsI2zTfD2qJqFmkoI561sXFsGXcK9eMLxubJK2hXssMuKsXSqibh2qpFmKSrdyvmQZ9q3p1E42KSIoL9JAQTT5GVuRXGzXcmlagydYnOVPpWtb6h5uDnrXFVxS2e5PPqbAYA1ajnRlwayhNuFQSTSKciudYjl1L5lYtanDHLEVrkJLcpIVYcg1vSXxdSp61RceYTWdTFQkzKTuZotsmpFg2nitCKLIqR7bIzVRd9jKwlnMFAB7VsRzB0rD8oqaeszR1tCvKJSfKV/EWnR3lswK9O9eWXely2s74X5M8V6xPeK6EE4OK5y9tFuGJxmtFjEmdFPEcpxUAK8EVe3/Jitn+xSy5AqjfabLbIWC4wK7adXnO2FWMkZrtlq7HwHpwn1kSsAVgTcAfU1yECF3z2xXpfw+ttsdzJjqwFZ4ptU2aN6HexECRQQenP1rfgji1LQ77Tp/mjljZD9CMVgKMzfSt7QUzPIx6ba8ylKSmZ2PkW8tXttTns3GGt5mjP/ATj/Crka4H0rb8bWa23j7XFHe5LD8QD/WsgLgZr3Iu6NIEM/yoW9BWXncd3rV2+fChfWqceAeaoJsekTPwFrRg0qWRc4xT7NkGM9PeuksL62jQKdtcGJrzgvdRy1ZuOxyl1p0sA+6fqaz9j55XmvQ7l7WdcfLyKzTp0DcjbWdPHNr30Y/WWtzA0vULnTbhZYcjByQO9eraLrltqtoCWCy/xLXGRaPEwyNtXrbTmtZNykjHORQ8XCTtsa0sTFux02oWqyg8ZYc1kszxJ1+orStZ2YBJMH0q5c6ZHcQlcckVVOtJM3b6nn96WvLo7asQ6SCgLLya3rTRfs88jOvOcA1omJVTnoKudZnNOs0cZcaRIuSnNYV3G8J2uK9TSGIxnIz7Vx/ii3hWMuAATWtKpc0pVHI4snLVetR81U1Q7uemK0rROBW5qzc05F3E966KCIGKsfTkAHStuI4TFNFxRn3kI2t9K5K+jxk+9dteD90feuS1JfloZTRg4+Y08LmnbPmNWYoNwqSOUrhDTwuKuC2qVLQnnbSYcpFaRckntitGMEsKYsHlqOMZqZRtWvMxL99o83EL940XI5AnTrWhbsz496wjcLEdzHAqNvECQMPm4zXK6Ep7IlQlPY9CsbRTgsMmrl0kUERY8Cuc8I6ydXvBGowq9TXYa7oTahpzRQyGM4yHHrXZThTpe69zRUn1OK1HUEbcqHNY8SF3z61E+l31jetDeKQynhuzD1rRt4sLXLiJWbInHlHgBQBVi2gDnJpqx72xg0y81KKwt2+dQRXPSjzyshJOTHapqMVjARnB6Vzek3z3uogs3AbisLVNSlvZ2O87KTRroWl6jHpmvdw9BQ1O6FLlie4afgwpUtzah8HGayNH1BJIEIfrW+sqsK7uhg42KtpcpMoZTuBq28SsmTXn3hHXfOURSN8w4rt5L+NIj83QVlOrGMeZlSXKZd/shkyo+bvVZb9whUUXM3muz561Qd2zxXz9bHzm2o6HPKY2TDTF2+83WtXS7cyNvYfL0A9azLa2e4m/2R1NdB5i2kAx1I+WuVK75pEJXJbm6W2UDGWPQVmyzz3B2ZwPSrUFs9y29+Saupp+xvu1cKNSs7rRDaZjx2Tt1q/b6aCcmtKO3AI4qyiCMFv5120sClqwUb7mfJarAm/GPevO/FF8J7vyUPC9a7XxJrUVpaMqkb2GABXlsztJK0j8s3JrZxje0SJtbI1PD2tyaLehycwPw6+nvXqljr1teQKY5VYEdR6V4bI+Kms9SubKTMMrAenatVzJaFQuj3JnVzuBH4ULclVKtXCaN4r3hUnbB9a6iO8juFyr5zXLOu4MrnMnxIitCW9DmsLRtZH2kQO+COM102pWjXMbADORiuGvNJns7kSxggg9qxVWFR+9uNSR6bbp5kQPtSywHFZXh/VRNbIkuA4GDXSIEkUY5zV+xjLYe5iva5P3aFtcfw1tfYy7YAqRdPNY/UpXFyXMmG3xxt61O1qSvC81dNsUbpUyJubFdtKk1oxqBivak9uapzWpwa6v7GNtZt1a4Y1pUw7SBx0OQnhdWOOlQrFk4NdDPZ5Y1Qe18sk4rhcbPUxcRbOAcVcudFS6iIK/eFRWvUe1dFabXXHfFejhpLY1pOzPLtU0BtMn3KP3LHH0Ndh4DAWzuB/00/pWtq2nx3NsysvUdax/Coaxv7qybg8OvvW1dXielCV0dtCuZa6fRcAt/u1y0Ug805ra0q6WNpGJwoBJrz6cbM0tY+dvH8gf4h62wPS4x+grBDjbVnX70al4m1S9ByJrmRgfUZx/SqBGVIr1obAQXADvmq/ljPFWih5pqoaoViII/bpT180dG/KrMcWSKnEFDSe5LSKYuLlOjmpE1KZeGNSyW4qu8O3ispUoPoZukn0L0OsyJyGrWtvECOoWRsdq5YxgUsUWWzWFTB05Ij2MVqjtI9V8uZXjfKjqK7TTNSgv4QYzyBgivKoSUUBv0q/YalPYXSyRMQM/MD3pRoKOxa7HqtxCsiYAwRXJapqwtbjyG4K9a6LT9SjvrVZY2xkYK+lYHifSvtETXMfEiiuhU09GTyamZJ4h8tDsOT6Vzup3st8wZ+npTVDH73XpRInFNRS2NoxS2M4JzWnaJ0qBIctWnaxfOBV3uTJG1aR4iFaEXJAqCCM7FFW4YzuFCNKZBfI232rm76AtXW3SFiR7Vh3sWEP0qxyOUePbJirduoDVWum2zAe1OScDFQxo144wcVdgtwayoLjpWxaSA0ikR3sPlhOMZzWfcSbENbOpkGOLHof6VzOoz4BWvNqx5q7R5taN6zMy9vGL7Vbms0sztljUzjJJpsSbp0Hqa9CMVBG0Uoo9W+H1kLXTVmI+djmvR4bo4Ct93vXFeG4/J0yBfaunQ/KK8KVTmm2SWdc0GHU9PYquXAyjehrzowtE7RsuGU4Nes6bN5lu0benFcR4k07ydSeSEZDjOPeprq8FIxqRuVNFtklm2HqawviH4bmhto762VinSRB2561o+HL7dqL8Y2nBHvXe30EV/pbRuuVdcEfWvQwdNRjd7jp6HzIRgkehpM4Oc4Na2t6adO1O4tGXHluQB7dqycYr1FsdkZXRv6Pr0toAjNx2rt9L8TRSw4duRXlXY8VatriSEHa1PYmULmjpczW8m+MkH2rrLW8knT5yeK5GzUiujtMmMV5eYK8UYYjY1VfPFTovIA71XiGQK0bSL5t7V4lrysciRegRbaLPpyadBE11L5jjjPyj0FQzEyuIl7da3dOtSFGa6qVH2s+Xoi0izY2oB6Vdkt+lT20WMVPcOsa8nFe7TpqKsaJGS6CPOelY2r6rDZ27OzYOOB61d1K9IQhVyfavK/EFzczXzrMSEH3RWFaTWiIqS5UVb6+kv7ppXJwfug9hVKXpSimyH5awSszkW5Tb7xpUXJpD96poxWzehvfQVAVIxmtXT9cnsmCliVz3rNPSom6GsnBT0ZmtWes6HqcWoxAhvmxyDWtPpMVymcAk141pmtS6bdo6N8p4Ir2Hw9rkOowKyHnHK+lSsKno0dEINmc2jfZZCyDB7VpafMwwj9RW/cWyTRb19K5m4HkXi7RwaU6XsdUFrOx2FhCJhmtB4BGOlUvD7Arz3rWv1PlAj1r0qdnBM1itDJmjDLVMQFGJHStDBJxQ8e2M0+VNjcTOlvFT5TVWeVH5Nct4u1htLlh2txI2CKisfEC3CAbucVNSSSIlHQ6FwpJxVO4hDdKYl2GGc1I0m7mvMqyRiymFMbVetroJjNQsM9ahZSDxWCquGpKdjda4WSPqDgd65nVI5IbuC9gyHhbJ9x3/AEq0kzp34qR3EqEN3rdYzmVmbQrNM6G2lEyLIOjgH86x/iBr0vhzwntt323eoHyUP91cfMf6Vq6Gu+3VfQ4Fch8aLWaa60pEGUgt2bHuSK2w7UpXPQjK6ueQhtrEZzj/ADmpY2zUQQ56c1NGpr0iiUrkZpgTmpFFNbINAyRBjirA7VnmUrSi4NArlyTFVJDikeckdahLkmkxMULuPFWoYNuPWooELEGtS1hwcnr2oM2OitsAE0TBVUgelWH4Wsq6m5NAI2PD+tHT7sI5zC/BrvtyXMOV+63Q+orxrzzv4612/hXXQcWs78E4U+lRJdRjdb0c28rXESZQ8sPSsUwGRRtHXmvTJYVlQq3I6fWsCfRvskm9RmNjxUVaihHmKU+VXOTjt3H8NaNnFiQAiugGmIyAhar/ANnmKTIFYUMbTq6dSfaczLVsnQVfji2v0qtaLgD1FaaLlQa7k7m0CtJFkGue1Rdu6uqkXAzXMa30NX0FI4m/+/n3qoHxVm+PzVTqGBYiuCprZs7vmuczzVm3uChFIaZ1F3dA2wOc4FclezmSUitO4u82bc46VzrSFmJJzzWEaf7yUjncb1GyTIAq3psXm3kfpms8EnpW/osRDK3vTry5abJqOyPVNG4tYx2AreizsGK5/RTmBK6O3TOB6183Sd2xQjdF6xlKy0araiYK+3JzS28G1gRV+eL/AEYsa6kpWsxzjocCunR2V80iHBLEmupt5QbPBOcisLUHXzyo65q9DKfsn4V0Yacupy3szzj4i2S/bIL4Ly/7tv6f1rhJICcHGDivSfGriexIPYg5rho7ffzjOO9elRqc8TohPQx9pBOetTRrx0zWlLprMMqvNVjbtHwRg10I2jK5ri28icrjjNbVmMqKjvYcSkgcd6sWK5X6V5OYaWZzV3dI1IIuBWkCIovwrMRyrADrW7b2DzxqX6V5tGMpX5Fqc6RDpyl5MnqTXZWNrlQfasS1sRA+a2v7Tjs7YknHFevgMPKC/eI0SLkjLEuO9Z085lbANc5deJDcXZjj4QH73rWhbXG4Zz1616UbNlkk9uCDmuE8UacGXzkHINd/I2UNc1rgUwEH0NY4iC5LmdVXR5rnmoJTzViQbXYDtVSU81wxWpywWpGOtTr2qupqVDk1ozSSHs1QSSbga0oLXzE5qrfWXknKNkd6qnG+prSp31ZlSHmtbQ/EtxpNyjAjAPIPcVkyqQaqOOa64q53OKtZH0VoXia21OyWSKQHPDJ3FVtXmWNxL2LYrw3StXutKuvMgkYAnlexruYvEbahZfOcE9TXDjINQ0MJ02eueHLrfswewrs5IfMgPvXlXgCa9vRj7PJtU4DleD+Nesh/LjAbqBXTh1amrjgtDIjtJGmOF4z3q6+liSIo8qpxSS3wRtsYJY9hWVql/dW8O7IDY6Gtk0loacqW5V1L4c+H9XdG1CaaQr02yYxVNvhHoYX/AEC/uYD2BctXN3niHX2dmheNQDx8maoRfEHxFpkmbi2jnTvtyrfhUOae6F7ktDX1PwPrujIXhX7dbjndEPmA+lYaX6nKklXHBUjBFeh+FPiTpuusIN5iuVHzQynDL/jU/i3wNZ+JIGu9PZLbUQMh1+7J7GuOvhlOLcDOph+qPPYbsP3zV1fnArjpLi60jUJLDUITDcxNh0YfqPauh03U4ZgBnmvH9lV5rM53SkjSa33DNM8ll6Voxqjc+tSGNMcV1PDaC5S34bOWYHsaZ4/09b26hDLz5C4NT6KgjuX96ueLebq0z3h/rW1H3FY7Lv2aPnzXtIfTbncB+7Y/rWZGQTXpHjK3jk02UlegJzXmaHB9+tepB3ijaEros9qikIwaTfUbHJqimyNzTOaeaTFNEpjeakSMsQaWOMuavwQdKAY+1gJwTWmqqoIPpTIUCKAKjuZ9iUCIrqfC4FY9zKSQPWprifOaz87mJNJgJ0NWbad4nUr69qrmlUHjFSxI9V8Na0t/bCGVgJFGAfWujeJZY9jDIrx7TryS0mV0fG05r1HR9WTUrZSTiQDDVm48ysyrXEKm3l8s/d7H1oeNG696v3NuJ0IPUdDWaztGu1+GFeTVwboy9pTOeUWmRrhH+Wr8MgKc1liTkmhbkqcUqWZSTtNDhXtozXlAKGuX1sfKa6GGcSx4NY2t2zNCzIMnHSvbp141I6HQpqWh51fN+8I96qZqxeAiU5GDVaqbLENJuxzSmkPSmhXJGlLWb59R/WqA71aYYt3+o/rVUdTSW7M/tD0GXA9a6zTYwsSZrl7cZmWuptm2ov0rkxreiOeu9D0HQG3Qg/SuptyABmuA8O34yENdnFcgLnOMV49Omottm9L4ToLZhnripNSuRHZsN3Y1k292CQd1Z+t6oAhTdXZJqwT0RgzzN5zMxyc1tWrf6H+FcZNeNJcqoOfmrrLMkWgz1xUU3qedKTbOV8SJmKT05Nclp4WXkDPOK67xF80Mo9jXAabdeTdY/wBqunBNu6N6SbidlDZKycrxVe70pSwIXitXT5VliVqtzxBscZr00XGVmUry3+bNQ2/7vI9a3JIC6A1FFYrI+cc1wY6jzwuTJ3RDYRCS6G7oMV2ETqqbRWJbaf5bbxU8M581kz901xZYpe1bZEY2NtSGqG4td4JpYGyAaugblr6FK6LOUuNMAl3AYHrV21RogADmtWeIDNUyApNJoGxZJdsZ3elcd4g1BdhUda6S8kKwHHXFeda3NmYgnvXNiZ+7Yym9DJds5PqaqyHrU7dKrOea5IGEFqNXrUqnHNRJUopyLkatncKI8E4pl5KrKQD2qhnAzVzTtNvdXu0tbOFppW7DoB70otrYUZNbGTKnr3FaOm+CPEOtqG07SbmaM9GxtX9a9w8HfCex05EvNWVbm56hWGVX6V6haRx26CONVRB0VRgV3U6c7XZ2w5up826b8BfFN4VN7LbWanqGYuQPwr07wz8HNF0FVe7le+mHeT7oPsK9OLCoJTWrSehqyktvBaQ+XBGsYHQAVnXNwWfYnU8VeuNy5rhpPEcVxq0sFvICsR2sR3NZSaQXsrnWxQpCcA7mPVqytcXfF+FIt/jB3c1Hey/aIjzTVmtDnlK5za2ykdKjm0dZlP7vdmtaOALgGti1tlePHrVRh1Iijx3xJ4ae2X7bY5inhO8MhwQa9L8EeKZ5dKtHu5WbcgDPjBJ71Q1fTGvopjJI0C7sIF6ED1o8N26QK9i4TyusbD0rixUnCS6HpU4Xg3c6Dx54LtfG2kfabTEWqwKWhkA+8P7p+tfO32y/0e+kt5Q0c8TlXRjyCPWvpLT7+WwlMTHOzofUVxvxZ8IQazYHxHpaKL2Af6Sg/wCWqep9xUQrQn7rE49zgbHx08agTRN9a0bfx3A9wFkUqhOMmvOFfJyPTOPSnbq6XTi0S6UWfQHh/UobyUtE+4DBra8WQyPptvfx7fKhGyT1GTXj3w41cWb3YmlPlkrs3V6H4i11p/BOqrCCym2Zhj1U15kmo1vZsyko25TzjxdraGBoFP3hiuDU44qK4uprmTzJnLNnr+FIhr1Yx5VYuGisWCeKctRCpUqg3YY5pQpJwOtSBc1at7fJBoKsJb2/HNacEG1c0sUGADUzEIMU0wZFNIEU1kXE2etT3U+WIrLmlJJAoIInfe9Jt9K1vD3hfVvE959m0u1aXby8r8Rx+7N/SvYNE+CmjWqrJrd3NqE3UxRHyYfz+8fzFTIDwlQWYKCSx6KB1q8ujansD/2bfbOob7O+PzxX1TpmjaRokYXTNMs7MYwWhjAY/VjzWkLxx1dvzrJzGkfICnY+Dww6q3UfnW3pGpSWVyjox68ivovXvD+geJ7d4tX0+N2IO24VQksfuHHf614R4s8G3Pg/UI2W4S9024dhBdLwcjqjjs3f0PWhTi3a5TO0ttRjubdZo2zkc1Xu3R1z371yllPNEg8ljtxyK1bOSWdwJOlKonaxmyyEJAx170zZtmw3etiOyAjDVVuYgDnHSuSOXxlqxqimri27xKSucEd6la1M568HvXLarevbZ2549K1tF1+K6t0JYbwOc110qHs9iJUnHYgvvCNvJK0gGSeTXJ6voiQAiP7w6ivQr3Wra3iLyyDFcLquswXcrtCcqeK2CHMcmwPIPam4q40IYk1E8IAJHWqNiF1LW0mOxH9arAHFXo1zDIp6HFQFBnjpQuorajrUfvhW9CflFYsC4lFa0BziuTErU5q+5p2Vy9u4cHFdtpV8bqEfN0rgxyK6DwxcFZTEfWuGVPqKnKx2IkMUZO6uav7xppHJOccV0d0D5B9xXGXkoSZhWNi670I4eLgOfWu0snDWoI/u1wUc26ZQPWuytJP9HUe1OLsziMTxAPkavM8lZsj+9Xpuvn5G+hrzNzmRvWu7BLdnXh9Ys7DRLshQprqIzvQGuA0i5ClQeorubFy0Wa9FCmrM3II96fhUqRbGrlofHulW/D294cDsi/8AxVPPxJ0QcG2vz/2zT/4qnKCasDpy7Ha+WDDlfSspIGEzMO5rFi+ImjyD5be+A9Cif/FVMnjbSjz5F5/3wv8A8VXJSpU6Mm7kNW3Opt+gz2q2HwMVyieNtLwcQXfH+wv/AMVUlv40025lMaR3Kkd2VcfzrrVemluUjpJZOKzp5QqsayL7xfp9uxV4rkkf3VX/ABrMk8X2E3ypDcjPqq//ABVRLEU5LRkydtDQvrvbGSTxXAajMJrx2HQdK6O9aXUI/wBwVUH++cfyzWU3hy8VC7SwevDH/CvOqVozejOebb0RiSdKqsMmrF4wtpjE/JA/hqm1ygbo1bQhK10jSFGaWxOi0/FLaOt1II04b1bpXQweD9Ruow8c1qAem5m/+JpqnN9CXCfVGZpWl3Ws6jHZWibpX646KPWvofwd4Ns/DViqIoed/wDWTHqTXKeBtKsfDFqWuFea8fmSSMAj6DJHFdwPFFkBgRXA/wCAr/jXVSo8urN6UEtWdCOD9KQ3ASufbxPasOIrj8VH+NR/2/bsfmjm/If41s7nReJ0sd7zirOQxzXJ/wDCTWceMRT/APfI/wAaVPF9ujj91Nj6D/GlqF0Q/EDW/wDhHfCV9fqxEoTZF6ljwMfia+efCmvTWt8fNkLFySxPck5r1H4pzT+MNKsrPTSsKRS+ZL5/y7uDjG3NeVLoFzo8nnXMsLAf88ySf1Arnru0WyZzjbc9ZttXjmVQG5rbgnDxgE15Jb+JYodoWOXj2H+Nbdv4+s4FHmwXJP8Asqv+NcmDqyj/ABDl547XPRc9xV22uCo5rzpPido6fetr8/RE/wDiqnX4naMRxa3/AP37T/4uvQ9tDuNTSOz1SVZFbIyMVz+g2Oo3viMw2SMyph3djhVB9fesO4+I+kSg4tr78UT/AOKr0rwPrdnP4aEun2NwkkuXLXCqoc+vBPFRVVOsrbnTQq2ehtzeHRNErS3CpIB1A4rjdYg1fSJSZEW4sG+VpIjkY9x2rcltvEF0xkuLu1DE8qjNtH0+Wmiy1NQfMntmB6jcef0rhq0veUowLqNyR4l4n8DTJKL/AEONri3lbLQJyyE9x6iuHnSSCV4Zo3jkU4ZXGDmvpIeHZ0vRLbvEkJB3R7jgH24rP1vwDD4gsWivfIjuFB8qeJiWU9uoHFdSnPT3RQnNKzR5Fo1uIrZAPvudzfU13+rItp4J1CM/wWbA/UiotL+HWrWE8X2i7sXRMZKO+Tj221d8c6dJpfgLVJ5p4CJEWNVVjn7w9q461OpKrFpGKhLmueBqpJ2gEkdhTl65yMV1fw71yy8OeLI9Q1CCSe2ELxskaKxO7joSB0qjqejRre3E9lLGlk8ztCsuQyoTwCBkAgccGuyVWMXaTN9EtTLTp0zUqgE4Gc+gGa6jwxomgzsG1S6nlOcCKFQF/E5ya9f0OHwlpyD7JpIVvVkBJ/HNPnfRE+0SPDrHSNRusGGwupFHdYTitmPQNThUNJpt0qjqTE1fQ1vr9lGg8q0Kgdgo/wAanfxVYovz20p9ti/41cU3ui/aRfU+cHXyvlZWU+jAis28mAJUda+np9O8PeJdLe6vNNQQ4JLyIAwA6ngmvC9b8J6VqMzSeHLmaNd2PKvlAXHsVJOPwoqOMFeTsNtHnc8pwa6XwJ4Jk8XX8ks8hh063YCaQfedsfcX/PSpx8OdQFwj3d7aR25YFpIyzMB7AqBn3zXrGgnSNF0mPTtOjmWKMbjnG+Rj1Y89awWJpX5VLUnmS3Oi0qxsdFsEstPt0gtk4VF/mfU+9XhKCc1zj+J9LttTt9Pm+0LPcIXiJUbWx1HXrS674rs/D0trHdWd7Il1jyZYUUqx9OWBz+FTKXcrmi+p0TSfKarS3XlKNzfhWU3iCFyQiSjC7juA/wAa4E/FfR7q5WPyb5A7Bd7Im1cnGT83SuZ1HNP2auCaZ3d9qDS5iBJHTArzz4i3UK6Xpen+YDcG4acoD0QKVz+JNdF4pvrrw5FB5VhLfXN4jfZvJGYww4+cnH1wAa4SHwV4k1W7k1LUri3FzMdzec53fQYBwB6VOGw8vae2qaDclHRkWmR+YoUDNa9iBBdGOQfK33fatbTfBN9bDe91Zfg7f/E1oP4SuHIb7XaAj/ab/wCJr0PbU27Jk6MdbupTYfSs++jKbvetq20OeFgJL+xBH/TRv/iavTeE59Qh2Q31juJ4zI3/AMTW0JGidjxrX5vnI+vWubjnlhOYnKcdq9e1L4LeJ74tJDfaSy9QPOkyf/IeK4lfhr4qOsyaa2mOjR8tO5xCB67v8mhhdHLz3M8/+tlLj3p0AyK7o/CDX9wX7Zphz3Esn/xFWofg/r6dbzTfwkk/+IpXQ00cEImI9qa8Jwa9JHwn1tOt3p3/AH8f/wCIqCf4Z6sg5u9P/wC/j/8AxFS6kVuwPM3G1W+tQ47130/w01hvu3Nj/wB9v/8AE1l6r4F1DSdPkvby+0+OJBxmR8sfRRs5NSq1NuyYHLRtiQCtaA4xWTBE8kgAxnNdFZaTcTlQrRjPqT/hWdaEpbHNXi3sSQ4ZsGr1nKLbUUI7kVNH4dvQN3mQf99H/CpW0C9aVCJIQc9Sxx/KsPZytsZxhJa2OvnlH2Hf/s157eTlrhz7mu5Gn3c+mCIPDu29Sxx/KuA1e2m0y5ZbgqT/ALBz/OsVQqN7FVIylsiaww8o+tdfA5SJR7VwNlrFvA4Z0lOPQD/GtqPxbYKuDDc/98r/AI1Dw9XnvynM6M+xc15z9mZj/dNecnqTXXalrdvqULRwRyqSMfOAP5Guf/smdhgNH+Z/wrvwtOUY2kjtoQcY6kFjNsuQM4zXomjy7rUc54rgV0q4iYNvi49z/hXS6dq8NjFsmSQtj+AAj+ddiHUg3schK/zNVZzUkp+Zqg60jQv2Z+WtJHwtZFocVf31x1lqctVamiknyVDbztHd791Mik+SoQf3mawtujMv305dxUEBPmrUU8m96lth+9pKNokS1Oit5fuAVrOT9lb6VjWwy6VtXGE09nPpXHBe/YmKvJHnOpvvvpj7/wAqoEVanO+V39Saqn71e7BWSR6a2RZsn8q4U16v4fuRLap81eQo+1lNdt4b1cRMI3bFaxdjOornqMRDLUuKybS8DouGq+koZas5yxwtBcBarlzUEk5WncCy7ioTy1VxcAtUoOai+oiG5Hy1w3iX7mB613k4ytcnrdgZeduawxCbjoZzV0zikFNmqzcQNDIQaqyGvOW5yrcrHrUiHioXNG/atbWub8ja0Nvw/o8mva1DZRr8pO6Q+iivpPTLRLC0ihjXCKAAK83+FuiCz0r+0pl/fXPI9l7V6K9xsXO6uijG2rOqjT5UW5bjC/eqjJc7246VVkuWmfCVJGm1a1u2dRZSUotQyXB7tUckgRfes67vYoInkldUQcklulDaRJbluVRGd2wB3rwz4j+KLrXNS+xozLp1ufkX++394/0ru9Q11dQVo4XzF0471xuq6MLjc4Xmi5n7VXscTp5CTFj2q1ql4XQRhqZc2Utq7Y3YrNkLM2XrJ01KXMy9GWba8ltGBRuldx4b8W75khmZs9q8630+3uGguo5V/hINa2IlC59K6dc+cg96vm3MrBO7EAfjWB4XuFu7G3lT+IA129lbh7iE+hBrW2hla7sR+K5/7O8NQ6fD8vn/ACnHXYOv5mvMQ/2a6+78hNej+Mk+0XqRDkRR4/E81wtxZAswNc+Ipc6sTVbUi/AUubdoX5DDArjxqs+las9uXYxpIVIPsa6ew3Q4jft901x/jGBrbVnk7TAMPr3ryYU+SdpLYb1iaPi6P7fpdtrlq7C6sCJAR3TPzCuiudQGq6bpUUm1oVf7Sh+o/wDr1heDpBqDJZTJ5kR4ZT3Her2sWy6Bd21lGym1wfKHcD0rTF1H7PmjuVFPkbJdRvBbaTqd2OAlu4H4jFeQaFocusXXlj5Yl5kevQPGd59m8HeWPvXkyr/wEcn+VSeE9CNno0e9f303zN7ZqcvTp0eaXUV9NDv45xd+D4fvFrUKdx64Hyn8xWVeahbafpMl1NLtCDJJrb0yAQ2XkuqtH5ZDA8A8c15LrcGpeJ9ZksrLcNJgmIWU/cOO+e9b4asp8yZtiIaxbYXPxBv5mZbKLy1/vvyaq/2jrF4vmXE92yn0yF/Suv8AD/gi2tlV4lhll7yT8/kK7+w0e3hX/Sn84YxsCgLWkHRi7IUJP7KPF7O0v9Rm8qyguLmU9kVia7nQvh94o3pNc6s2mx9SiN5j/l90V6FFPaafCEtkhgQ9kULmqPivW7jw/wCHLjVkt47pYwCUD46nHNbKpzXUTa5sWY/sy3EX2qaeQDBeTGT+AwBVa4u2mfG1mJ59a+f9X+J/ifUmZI7qOyi/uWqYP/fRyal8DePb7QddBvbyaa1uHAkaWQsUY/xZPb1otJ7knt8kjxSgPEynsCuDT/tmKu69o1l458MvAzYlI3QSo2GjcdCDXg9t4s8ReEtQm02/f7WLdyjRXGc+2H6/nVuLWw1uezS3JbpWfcOAjSSOqovJYsAAPr0rzC4+J+r3KMLazsrUn+La0hH58VgXmp6hqnz315cT55w7/KPoOlZuhzbl2O+1nx3pVgjR2H+n3BHBTKxg+7dT+FeWazrF/rd19ov52lIyEQcJGPRR2qaf7hrNmrSNKMdkMk0+PMwruNKi71yWkR7pc122noFirQhl9J1RsGiW7hKEBvnHIrJvJWSYENgd6m+zxzLlHwTXLWrODtYiUmlsb2jaglxFw3/665nx5YM8IuVXlfvfSk0y4bTtVMUjcOePrXS38SXloyOuQRV0a3OhU6lzxdKlArS1PSzYXrIfunlTUKQfLW7NkFmP3q1t+R8oxWZbx4cVuInyKaBlGSBttUJYyHwetbUo+VqyLrr+P9KYzm5Tuc1HT3+81MoMmTwPtaru6s5PlargPyisKqMavctRPTh941DAfmqWRwgrna1MAJ3Nmp7T/WVQElW7Z/mFKa0Jex0do/zrWjrs/wBn0c+4/nWfpw3ypVfxZdnaluG49PpXNQp3qFUleaOTNQvUpqGTpXsI9Ebmp7e8a3cEVUJpmaZDPQtE8QFlCO1dvYX4mAw1eI2Vw0MvDV3/AIf1NtyAtVJnNUjY9FBytV7hDRaS70FWJE3JV7ogxfMKPir9vJuWsu/+R8+lWLCTeuax+0SamNy1UuLTepq/GNy1N5WVrZK+47Hnut6X8hcL0ri5TyR6V7DqNoHiI29a8r1y0+zXz46GvPrUuWVzCUNbmO7/ADVETvdE9SB+dTGIs2ajSNvttuPWRf51dNLc6qSVj6T0cC00m2t04CRqP0qw8rTPsT86xLbUBMqW8bruCDJ3VsW7xQp87896SqJux0WLsUaxD1NOknCKe1Y+p+JNO02EyXNzHEB3dsV5f4l+KjTh4NHXrkec/GPoK05ukUVY7zxJ4v0/Q4SbiXMh+7GnLmvHtf8AFuoa/N+8byrUHKwI3H4+tc9PczXczTXMrSytyzu2SaaDTUerBnZ+E5ZZpWQtkCvQ0sFli+7XnngR1+3FD3r120iBTha2jTTRxyWpwmr6Ero2F5rhtR0hoWbK4r227s92flrlNV0YSqx21jJOLJ5mjx6WBkZqiwa7O90Jt7YWqQ0KUtjY1Ckaqqup2/wz1kSWK2zt88ZwPpXteiOJpU9ua+e9A0y50i7W4RW2H7wr3fwPL9pikl3fdwP0rZSugi7y0LusW3nXsz9ef5CuVvbAjnbXc3gH9oTKfY/mKzb20UxMa0SImtWcG6bPaqWsafDr2mPH/wAvUIJiPf6fjWnqqeTn2rj7nxB/Z98ko+6OHHtXDiYLfqTTdnYteEJBZsp3YcH+7zXYaz4A1bxFcRanDdQRRJH+7ifO5889e1eaW+qpDq0skTZiZ9yj619OWY8rTYRj7sY/lWNOkqkWpG9Nbpnget6FNe63ptnIjCCyQvID03k4x+GK6az8lJvJTk47dqh1XWTfS+dCi75369hVqytxaw+sz8sa8rEVZKSow2RdClzSTLd7IIdNuyecQOMH3FebpfmOFI97AAABR0AArtdYRrq0ezR9nmcE+1cde2Wmac5Tz5J5sZ8pOcfU1phIO7saYtc7SRraFrJiWXKbYl5LluKTVPHsybkskUADHmScn8BXMz38syLGFWKEdEH+eax7yTtXdTwiT5mRTpOKtclvfFOrTXv2k3knmg/KTyB+HSpdU+Ieu6pok2kzNALebAcpHhiM1zspqq9dMYRTukDQwk0CmmnCtgR738GvFL3ennTbh8y2uFUnuh6f4VJ8ZvBwurIeJLFP3sAxcgfxp6/hXlnw+1VtK8XWZ3Yjn/ct+PI/WvqeHytQ08xTKskciYZT0IIpxfRlnx5GdvuKuhxtrU8c+F5fCnia4sdrfZXJltm/2Cen4VjxD5KDRajJz8lZ8v3q0Jx8tZsgy4FJgzc0ePofWusg+SJawtHgARK33GEpolmJq8/bvWXbanMkyruyg7VLqkn74islAzNkdaicL9BW0sdO4+0osgbkdD3ro9OvDc2vlv8A6xBhq47T70IqpJ0rQTVEtbtJA3yHqK82PNTqNHK04yZf1zThdW7EffXla5WCJpW2Beehrv7fZeRB0bKMMioJdHSF/NiXr96vR5tDVVbLUwrbTlhTJ5erTxDbVueRIV2Fearxhpun5VKqeZaqpmdOAuay5seZ+FdY+gT3C5HFczqun3FjOYpUK5PDDoa2vpcfOjjpPvH60ynv9803FMljqtRHctVhU0B+bFTJaEyV0WIzh6JnJpMFXpJPmrltqc1hoq5bHmqgFW7YF3GO9KewPY6rSP8AVPJ2A/WuZ1m5+0ag/ovFdK8i6bpOT9/GfxriJHLuXPVjmlhqe8jehHVsaTUDmpHNQk12o6BhpKU0mKYD4B81dfoSNuXFcxZx75VFejeHtPXYr00rmNXY6fTnOwZrVkf5KrQW4TaQtTOny1paxzGDrJOzipNIBWEZq5cWYm4NTQWnloAFrPld7gX4iNtWRIFFUASlRz3gjWtE7bhcW/kUIctxXmHiGQTagAPWul1vX1iicBsn0rgp7lprrzm9c1xV5qT0IkzptP0RZkBPfmquueGzFb+dFuyORiuh8P3MclumGrVvQjW7g9CK1pJOKNKbPHo9R1CxmzFeTRyDuGNW5PFuvumw6nNjvjin6/ZBLh3j6ZrCxVcsex2J3H3F3cXT77iWSV/V2zUdFFNFBSikpBQB0/hCcw6gh9TXummSB4lrwHw9IEvUz617ZodyDEh3VrTZx1dzo5bfemdtYt5adflroopFdKq3cAfdinUimZNHHyaerv8Adp8GkR7v9WtbJgCvzV+ztw38NZRpomxkjSx5X3K7HwNbC2sZf9qY/liovsY8r7vatnQIhDaqB3c1pJJI6KS1M7xJdmy1pM9JIQR+BxTUv1mTBasT4xvcabo2n6zb9Le48qb/AHHHH6iuE0PxzBcMscr+W/Tnpmo9pYKiabO21i3EyOR3ryHxPaPDdMnzHJ4FeqPqaTRZ35rjdZiiub7JXJHQVzYipG17mdKPNNRPPIhdWzgyRSKocbWKnHX1r7KtubNP9wfyr5se0ZIljkVTDIVBG3I5Ir6WiGIVHoAKKMk07Ho1cOqTWp4npVk/lJLcouVJKJ6c9TV7UdVtdMtXubmdY4x1J7+wqlPqqIl4B/rbeaSLZ3LBiKq6rBDr3hn7DdwRrJ99XHVHFeVKmnVfNodNGg3F8iOM1Txreaq7xWW61tjwCPvkf0qnZ7otzhmy33ju5NZsFu0MroeqnBP0rSjkwOa9WnTjFLlRzdXcnkkCJms2V9+T60XNwGb2FQCTdWgivIlVZBV2Q1Vkp2IZVpwFGPmqWNN1AJElu7W80cydY3Vx9Qa+tvDF39o0q3k7kD9RXyYke9wnqQB+Jr6n8LZhsYY/RB/KkviKlsN+InhCHxb4eeNI1+3W/wC8t375Hb6HpXzYYJbaV4ZUaORCVdT1BHWvsKM5WvJfij8P3uXfXdJg3SY/0qJOrAfxAeorRolM8QuPu1QCb7pBWlcD5WqrYR+bqCCpsaHYaXb4iHy1fufkiJpbCLZCtQ6odlq5prYTOMvZN9w1JBHlaglkDSt82ea0LYZXhaQ7oryIU6VTlnfoK1biL5c1kXKFWOKzcE3sRJJnU+ENY2Smzlbg8pn1rrbu9VLd9nJwa8itJ3trpZQ3IOa9FtJxqFkJB1I5FS9Dla1MH+3A9wY5lwQcZrpNIngl27GU1xniDT2tJvtAXg9aNLvXiYFGwRU+y63L9mnsez2YieL3rI1/TYLvyw65KnrWJp/iB1VfMVsjuKde+IYzglmzmt1tYXs5HkMg+Y00feqdx8zVHiqNxaeDtbNNFPApEE3mBlpQRUKD5qsbAtZuKM5IOKvWX7l1kdeBUVnAJZlB71ua/aQ2emK6L8+BUciZFk9DK1fU/taiIdB1rGNGaaa0UUlZHXFJIRzUJqQ1GQatDGUopKUUwLtk4SZSa9N8OXCNCBuryoHFbmj629m6gtxVJ2Mqiuj2iKRStScNXJ6Zr63CD5q6K2uBIuRV3uczLqIN1S7FWoEkp8knFO+gEFzhVNctrF75cTfNjFbGo34iibLV57rGp/aZSsbfWuOvUtojOTsZt3O08rOW+lUzU7fdqBq5EYJ3LmnahNYy5Rvl7iujOui5t+W59K5NakTO8Y9arma2K5mi1qAM+4iufuIGjb7tehWej+dFkr1rO1zw40dv5ka9K66d7XOyjU7nC0VNPA0TtlairQ6xKUUlLQBas5THKK9N8L64HiWN25FeUg4ZTW/pF6YHUhqTdtTkrxdro91stQ2r97itRJRKledaPqvnIBu5rr7K4Zl9quNW5zply4A3ZqazuFDLVadzsrIN55MvLUOpyvUdzuhOrpgd62dPHlwxe/NcfokpvpeOQo5PueldrANrIg6AU5NO1jqo7XIPFuiJ4l8JalpB63MBEZ9HHKn8wK+N8S29w0cqtHKhKup6hgcH9a+3Ij2r5z+NXgttG8R/27aRf6BqT5k2rxHPjn/vrqPfNZtGjVzndD1e4CCMysR05ate7klaWGaNsyKcjPNcVownm1CK2t42kmkICIOpJrsL+0v9OY2t5bTQ3AHIdfX+deTVws3VTitDgalCakjrdLki1qytgm0Ot3EpCe7ivc4z8ntXi3w28N36K2pXkDQWodWTzOC5HQ4r0a51R3Xy4mwPWvSoUnC6Z6tar7Tldzz2f4Y6jd+OdX1KS/ghspp2ktkDFjhhkkge9b9l8PZBcILu/XyEXA8pTuP59K2YpWVuati8c/In51o6FNu7Qo4ipGPKmZ//AAqzwi5JayeR2OS/nNn+dY+ufBzSLq2c6RcTWU4Hyh2LoT79xXa2m7cCWbJrRJrblM7tnhCfArXZoszaxYRSf3Qrt+tZl/8ABrxZZbjbpbXq9jFLg/k2K+iaKdibs+RNV0LWdHcrqemXNrjvIh2/n0rIdw38VfaEscU0RjmVZIzwVkUMD+dYVz4J8L3kPkz6BYbOT8kQU8+45qHBDufJAFWIxX0Pf/BTwnckvbtd2ZPTy5dyj8DXG6l8ENVtpf8AiWanaXcR/wCe37th/MVDgylJdTgvDlg2oeILG2C5BkDN/ujmvpPSE2Sog9Olcj4L+GZ8PvJc3sqz3ZTAMakIg9Ae9eiabpxt282U/PjhaFBp3FJ3L0b7anwHXnoagI+ZqZ5pTitbCTPOfG/wkttble+0aVbS6fl4iv7tz6+xrjtH+DXiKG9Mly9rGvYhia97E/rThMp61Nhps4DT/hkkSr9pvGOOoRa3E8A+Hwm2W18718zmumEiH+KlyKAbOY/4V94VIx/Ytr/3wKhk+GvhWRcDSoY8/wBziusINHNMk801f4OaTcoTYXEls/YHkV5j4l+F2v6OpmSJbuFerRdfyr6ZyaY6q4KsmQaVkVzNHxgmns7sNuHHBHvXVeFxJbzfZ5Put0+tezeL/htYawj3dinkXo53Jxn/ABryWXTrvSb5obnzI5UP4GsKkWtSG7m/eaZBdW7JIikMK5AaULO7aJ14HT6V2kV+kturh8nv9axNVnCyq+3PvWaqxLpVIp2ZPZ2cDIuFWrn9kQPyV5rLsL9FfBZR7bq6CGeJo871rS6tc6/dtc8XksmVjVc27Bq7A2QZjlaqSaeP7tWef7Q5nyiKXBrYlstje1QPaFaVxc5nxj5qmNTGIotQ/wAVQ2S2aWlJm6i+tanjCT/R4Yx3P8qp6JHvvYh71Y8UjfdQp7E0IlP3jlNlGK1IrPfU76VuTIWrOnnRglKYRV+W0aJmytVXGKYXK5FJipDTaB3G03JVsinGkoEzb0rUXhYfNXoeiah5yr81eUWx2tXY+H7shx81F9TCpoenxvuWifO2qllOHQVfI3rWqMzlNbSR0IHpXCTwNC+Gr1a8tBIv3a4/WNL2qSFrixEGtTGpG+pybfdqAmrMo2nHpVRzXPEzpq5KtSR/61D6GoA+KUSVai2zT2TPTtEcSW6EelatzbLJbshXOfWub8IOXtBXaJFvTmu6EXymyTR5brmhbWcotcXcQNbysCte53unCVWBXNcJ4h8PHa0kaUlc2py7nA0VJPA0LlHWo6ZuJmp4pTE3tUNFFiWrnpvgpBcJvP4V6baW/wAgxXj3gLVEtpjbytgHpXs+n3Csgx0rWnGJyTikx08XyVzt3aTTXSRRIzSOcKB612MiB0qSyjhs8uiqZj1c9vpU1KfMJR5i34e0YaXawxPJmQ/PK3q3/wBaulRBG+/rXNpcerc1bj1GUYG7OPWqiklY6krKyNzzYx13CqWsW2m6xpc+n6jbrcW0ww8b9/8AA+hqvHqaHiVce4qXfDJ9x8fWnZDOT0Dwho/hvA06zUEOT58vzSn6tW/eStNt3xQyY6F0BNSvGV5+Uj1FN2F6L9hWRSnuJ5eJG49BwKiGFX3q9Jbk1Vkt2DVDYyOMM7YrRt4Kjs4134d1FbKRxIuU5oTuAlum3k9B0qbNRGQDpUZkZui1YFneFqJ7hRUJjlPXpUZeGJvvZPtzRcCY3JZvkSgmZ/7oFMSeFmxuYf8AAak82BOT5hHstACJAWblmNWY7dV5C1VGq6cjbGlaM/7Y4rSjMToHjKkHkEUcwCbNy1Wit/JXLuzH1NXCN3tUM7j8qS1AZI9QZ+alL5phNXYQ7NLvqMmmF6AJi/y8U2OU7sGow9KPmlX3oAsi4Kfxce9TpcK/XivP/iTrcui+H5Z7eXy7hOU+pIFcHofxd1JNsd9bLKOhaNsfoaibSY0rn0D95eKiIcVwukfEnS7xQJH8lj2fiuttNYtrxQ0U8bD/AHqEDRaMuOq1keIPDeleJ7F7e9i2vj5Jl4dD7GtcujrUbwF1O2m0mtRHz3qvh3WvDepyWssUksQP7u4jXKSL6+x9qj8iWaLMq/hXd+JPGNtDfTaTF5jXSHDoVI2Z789q52KIumX25PJ+teViKHvXizlq73OJvbSWGXI3D0NPgupxGAWYHHSutu9PEq/drDm0do5MDpWqvaxp7f3bGdHdo3FPLoa55JWVjVlLpq25jEvzhWFU3Qbqd5pNNJpAUb0BVrPFXb09qpoPmqWaR2Oj8NJuvVJ7U7xI4/tNB6JUnhofvmf0FZviGXfq0nsAKqIupcso1dRittLYeViuT0+8Mb11Nvfo6D5q0THczb+wB3YWsKew3fw11krrL0qv9kEnVetXYtM4W4iaJuagrrtR0csjELXJ3Fu1u7A9KmxsncjpKKUUiyaCt7S5CjqRWJAPmrd09PmFQ9zlqHoWkXe9FFb8T7lrkNMJTbXUWjhlU1tTZCLZj3LWRqdnviPy1uJ8y1Dcxhkq6kE0DR49rFube7b5eCayHJruPEthl2IWuVlsm2/drz1G0rERikzLeTbTPOouIyj4NQ10qKO1RVj0bwHeK8XlHqK9Mix5VeE+G9QNnep82ATzXsWmX6zwA7s1tGVlYzmjQkjDVSu9PWaJgV4q+HDU/AK0ramR5L4l8ObGd414rhpYmjcgrXu2sWyyRMCua8z1jSj5rER1D0ZrGp0ORoqzPaPEzfLVcgjrRc3L+lytDMHRsYNe0+E7+W/iRIuWA+Y9h9a8TsIJbi4jhhRpJZHCoo6kk19CeG9GXQdHitdytMfmnf1f/AU1ozCUbs6ESKkXlBdxPVqBiqwNSoau5dkizvpfMqDNN3ii4ycyf7WaQSsv8VQGSoi521IFw3jJ/G1EWoTM+A7YqkI5ZfuIzfRafGjQuQ64PpWcm0BoSXj/AN9qrG5d/wCKmOCy0yNDuxXHOrLmsh2LMUrbwTWrBePH/FxWZ5exc9hVoRlkyORW6k0vMDbiuYXXlMn0oe7f+BY1P+7mszT/AJrtEfoeK2Ps4WuinLmVwZTk8+b77sR6dBQlox61dEYFPHy1oIrR2XNW47Ne9O304SU2gMPW/D4urd5rIYnAyYxwH9vY1LoF4s2nx9inysD2IrbB3Vg6lEdMvxeRr/o9wcTAdnPQ/jSQG6ZAy8VTlJp0E4daWRN1WtBFYGnGkKFGpSDtzTAY5qI09/u0wDNADh3pUJ81Pm96APlrm/F+uW+iaask06w+YdqsfXFK9gR5H8X/ABBc3OujSty/Z0Hmn3OTiuJsn6VS1S7mvtVnubidppHckue4qeyP3a527s1SOrtD8i1KmqX+mv5lndSREc4DZB/Cqlo/FLd/MtBaOt0v4x31kyxanbeao43xNz+R/pXpnhj4gaN4jUCzuo/N7xnhh+B5r5lvANzVnR3E9rdpc20rRTxnKSI2CDTUmROKPon4neF2uj/wkNjt86BMSKP4xXnuna+CoDv+dcnc/EDxRdRSRS6tIY3TYy+WoGP8awIp3Vs72/76qZ2lsjKVK6PcbKUXS5HIqzJZKxHy9K5HwVqglh8qRuR0rt/NB5qYpNHL7LWx4dn5jU6fdrP8352+tTpLU2HY0Y6kCFqqxy1cjkDNRYTMrURh8VVT71W9V/1yfSqaCpZa2Ou8ND5Xf2rn9YO7VZ/rXReG0/0eSsDU03Xsx9XNUQt2U4Dhq1YHO1aykTa61tWcBdRjmmimOM7LWpp92s3B6iqUtsdv3apRyNazfStUwOseJZUwa5vV9IV1bC1t2V6syD5uamnjEq1W6LUjzC5s2hlxtqIJXYapp4+Z9tc1JBsbFQzdO6G24+Za6PTot+MVj21uWYYWus0eyZVHy0rXOeZtWUZVVrWikKKKZbWm1OetSvEUXirtYgvRXP8AtU6WcbPvVzstw0D1UuNY2o2Wp+00GXb8LdMapjR1dPu1R0/UxcXDxluc5rrbZA8S1nFJu4up5ZrmmG3lf5a57G1q9Z8R6R5yGRF5rzW8s2hlb5cUPQ3psqxko6uOtd14Y1whVidq4UVZtLlraZXHSnc0kro9zs7gSYO7rWkASvFcF4c1gTBUL16BZOJAPeqi7s5bWZTvLcunNcrqGngNyvWvRpLQMma5rV7MMhx1pyh1FY851PTothcLXJXdptc46V2msT+WzRnrUngjw9Dr+sPc3ybtPs/mkXtM5+6n9TUJam1Nsu/DfwpNC6eIbxPLiwy2iH7xJ4Mn07CvSx+lPc+c4wm1AAFVF4AFPSA99oqvQ0AYxTgfSpkt4t3LZq5FEm7CRZppAZwjlf7qsatRaXcy/wAOPrxWvbwSdAmB+VRXOprC/lWzKSPvP1GfaqAiGiCJN9zcrGo71Hv063/1UUk7+r/KKrOXmffKzMfU81KIwvJqb9gEnuZpFI+WOP8AuouB/wDXqgZIoWzI3POB64q1K6gN6Vh3EjS3T/3VTC/nXDj8R7GnzJajSuWYtXFxqEVuUURnp9a0rgpGyZ4Bz09a4wzmG58wKx2fMAnU49K1m8QaZexLcJfW6xgDIkkCshPYg8g15eDxkqtKXPuNFq4vZX3xhs/ISPw5qSy1SdUBRuvbtWX56SzQyxtmN8gHaRkGmWDnpu6ZFed9brRr3b8hnaadcLdqrp8swPT3reiuVmBw3I4Ydwa83uLufTZUuYeR0ceoras/EFub5EmXyJZgPLndgEmPp9a+kweMhU9zaRLOyyKb/wACqCK4V/kfhqn8s7chsD1r0kIdvNKHDVCd3TrTgfXiqAnHy9KJ0jubeSCYZjcYNQg08E0WC5j2sV9prtHKrTRD/Vypzlf9odjWnHcpImQ1WA/eopbZZOY/3cnqOhoADhm9acifwVRM72z+XMuGHQ9iKsJdxu2Q3IouIbLGUqNPvVoYW5hyOtVCm1vpRe4DTjZmvCvjZranU7PSo2U7E82QehPAr268uYrO3eWVlWNBlifQV8m+LdZ/t/xRf6kP9XJJiL/cHA/PrUSeg4mMfv1es327azxVu3fbWJqjpLSX5RVuc7krJtJPu1ol8xUFIyLwd6x58K1bd4PvVi3H3jSBlc0A/NTM0ZpmdzqPDF2UuvL3Y3dPrXbjU7hV25zjvXl+mXJtrtJB2NekRiO4hjmByrrnNYvRkSWtzy0yDecVIk5Wqrn5mqPfW1gcUa8dx/tVZiu/mUGsESEVMk53LRYhwRsahIHePHpVZPvUwuXUH0p6feWsZGdrHZ+HMJYSGuevSHmd/UmtzTJPs+iPIa457zezH1q4E01e5ajO6VR2rqtKtCyKdtcpYODKpr0DR9rIlXFFPQkfTtyfdrC1DS2XcQtd2kalRVa7s1datxJPObd5LeXHTFdDaXYlTBaoNT08o+UWqVsSsuKWwGjeoHiPtXJXMG2WuwKb4qw9QttrZpM2gyHS4gziu+0u2Xyh8tefWU+y6Qdq9J0dw0KEVcERLc1I4Aq1FPGNtXsfLVW4+41XJEWOc1BBtrkdRJDN81ddqMgVDXFanKNxrlqOxNylZ3ZgvkcevNemaPeC4t0IavJs/Pmum0LVzAyoW4qadWwrnolwiyxYPeuK13R1LMUXmukg1FJk+9SXAWZeOa1lNMpTPKbuyaF/u1Sfjg16Bf6WJdxC1zGoaWU/hqFI6YVLlPS9UexmBDcV7F4Y1tL63QhuR1rw+SIo1a/hzXZdIvRlsxnqKuL6hKN9T6St7hZIlBrN1CJXZvQ1gaV4hhuolKP17VqyXodPvZ9K29ou5z3M9/C3hrV5S97LdqUxujRgpOfwrWijsdPt0s9NtVtrWP7iD+Z9Sa5PWNUNk32iJl8xex5BHpXPj4mTLKwl0mNgOhjnIP6isNtLnRT2PUEnLN/ICsy48UW0epwaZbss97cSKgRGyEz3Zv6V5Zq/jHUdZUxbvstr/wA8IGPP+8eprW+F9t9v8d2p2/JaxvOfrjaP5009Snse+W9pbwxD5MyAgFjz0qfOG4b8KZLjccPjjGPeoTIEZs1sIg1O/MYW2jblvvH2rOjxuWqss5nuHf1Jx9BUyPjFQ3qFi8mBTJJN1QiQ1G8lTcYrv8rVmTj79W55Uii8yV1jjBGWLYAycVWlB+cd+9cmMp+0ptWKRz//AC+GtJLC0eZLp7WEzgffMYJqsbVvOWQdD1rXgjLKqDnNfO4GhPnaaGtLlO8/gPoQar2xCX0yejnH41duYiyN61AbZhfGXs2G/SliMLNTul1Q+ppS24ubQgrkDrVvStOtbqF7a8gjmiYYKyLkflU+jFXm8o8rIhVhVu2s2sdS8vqjcqevFfR4fCxTVS2pmyS20j+zXxbz3AtscQvIXQf7pOSv0rVtrhk4LZFPt3BXYal8iLuleihE+xZE3LTDEe/NLEPL6cVzWoeJb/TpbkMtuwicj51I4H/1qLhY6HyznijDDruryW3+PlqLt4r/AEGYRh8ebbThjgHrtOP513mgePfDXiPCWOqRidv+Xa5/dyfgD1/CjmQWOgyf7tKHxUmwH2NBjP1qrgQ3MCXlu0R4b+FvQ155H4rhg1ibTb1JLOeI7WEnAJHp7H1r0Z0x7V5P8Udbt7m/g0uOKKSW2+aabaCykj/V5/U1DGlc6WbxrYaNbtcyXkckf91GyT9BWrpXifT/ABHo66rZPiIkq6vwyMPWvnG9G1uKyHu7iIPHFPNHG/31RyAfrUc9mVyo9u8c3F34q8OXlnoF1DKA+2XDffweVz2r59uYJbS4e3mTy5YyQy+hrrvDfjdvDGmXNrFZ+a0jlg+7AGa5S8uXvr2a6mbMszlmP1pOVwsV6liPzVFSxnD1LKNq2f7ua1YzlcVhW79K14D8tK5SIblM7qyJ7RnyQtbs8e5SapGTYvK1jKTjsRVbWxjJaOrfdqx9gJXlas+eN/3a0rS4iP39prCpWmtbHDUqTXQ542jRNxXaeF75ms3t5esZyv0qq9nDcL8lQrC9kxIXg8VCxSa21HCvfRnFP1NJSn7xpDXpHYFKnUU2nR/fFBLNIfdFSx/eFRfwipoh8y1hI53udNKfL8Luf9g1wgO6u11V/L8L49RXDpWkdi6K0ZftJfKeuz0fVVRUBauCD4qzBeNF/FVouUT2a0vUdR81XSVZa8t07XHTaC3Wuz0/VxMoy1aXMXoWb+3Ein5a542RS4z2NdUXElVpLcM2amxJQjjGyszVItqNmtZz5VY+qykxGgpHJSyeTMpFd54a1ESxKC3SvPb3O+r+hai1tMo3d6IuzNOW6PaYpQU+9UNyflNY9hqiyxD5qku78KjHdVzmrGTMHV7jZvri7yXzWNbGsXu+U/NWA5zk1505XkYt6kRqWByp4qI0+Ok9iXsbdhfyq+N9ddp85mWvPIpvLdTXW6NejaBuqqV76gjqXtldayb/AEpXVjtrdtnDoKkkiBWtnEtM8t1HS/LcnbWG9uUevT9T08OrfLXMXOlHe2EqFJ7Gyq9DM0q8ns5QQ7YrrIvEcoiXLVzqaey8baspp823O3is/ectDHeQavrD3ORurnsfNk9au3lu8TZrPMgFdSR2wSSHk16x8D7Yb9Yv3XvHAG/Asf8A2WvH5JK91+DcX2bwVLcuv/HzeyFT7AKv8xVIbPRJc7s7eewrOuLjakvzZPSnTzncRubPrXP63rENg1rDJzLdTCJF/mfwFVJ6CLEZ+apkf5qrA7WqUGs7jsWfMqJ5C1Rl6bmhsoZqEEF5pt1b3Kq1vJCyyA+mP6VV8OSSy+GtLkm3GVrVCxPU8Dr+FWZ41uLeS3k3eXIhVsNg4IwakREjRI4lVY1AVVHQADA/SkACMM+ztmrFmCJVJX7tUby8isLSa8m3eVChZti5OK1bDE0sR7HDfhU06avewMkGltJe/OrfZ/vE+o9KjNoBepDt4ztH0z/hXQROG471RxF/bwEjqshDsiHgvgDOPXrmtXSj2IuaLxQNMs3lL5idGHFYepy3DeK9CtS7RWTieUlP+W0qKCsZPpgs3vtrd2H8D0qjqempqNqFy0U8Lia3mHWKQdCP5EelapAXgdrZHUd60In8xM9+9Z4O5clee/1qxbPhsU0Bdx8rD8jXgnxl1S90/wATPp1vL5Vtc26TtjqSSQf5V77j5vrXz58e8r4xsPQ6eMfg7UpbFLc8oz83t2q/bfN1rNB+atC3/hrEtHbaB4/8Q+HdqWt801sP+Xa6zImPx5H4Gu/sPjtYeXt1PRrmKYd7Z1dD+ZBFeND7tVZBudadx8p69rPxnvNSje30Ww+xA8efMwaTHsBwP1rh/NeRmlldpJGJLMWyST61j2grST5UouOyRTvT1rElPzNWtev1rElNSJkDn5qjpXPzUCgBuKcg+an7KUJTAsQHbWtbH5RWNH8rVq2b0ho0imVrNu4vlNasfzLVa7jOw/LUFM5iUFWojuGRqsXKYaqJHzU3BNamTinuje06/JfG7NdIqiVA1cFGTG2R1rpLPXMWwVvvLwa4MRhVfmRz+wje6RxZ+8aQ0p+8aQ16ZuJUkX31qOpbf/Wigl7GhU8HLr9ahH3qntkzKPrXO9znfc1/ERKeH4lH8QFcYK7LxZ8mkwJ9K40VvHY1o7C5pabRTLLEE5Rvauh0zUGQr81cuK2dOiZ3GO9BnUR6Hp9/5yL81amdy1z+mWjooreSNttUjArXMWUyKwdRgJXFdWUBXFZV/bgq1DQXPPL2La7VWgGHUitjU49rms1E+es2dlI6HTr14lwWbHrVq8vy0X3qpWEe5KsywBkrGo2VUpqxgXEjSvzUL9Ku3MQRqpSVgjzJJqViI0oOBTSaYX2rWlrlxjck8zFXLC9MbgbqxzJ833qmtDm6Qe9bxp2OhUlY9a0a5M0KGt4DK1h+HrfFuny9q6YRfItbcpi0Zk9v5i/dqlJpgb+HrXQCDc3NPFpu/hqPZ3FY5hNHVWyVq2dLRYvu10H2P5fu1FPFtSrVNIErM838Q6escRcLXAO/ztXqniuM/wBnuUXpXksmS5+tDOum7oHf8+1fTnhqwbRvCmmaZt/eRW6mT/fPzN+prwzwF4fh1XWVvr9449L04rNcPK21Sc/KuTxyeT7V6d4j+JukaP5q2Uq3t4BhEibKA/7TdMfSpLZ1Gu+INL8M6f8AatWuVUkZihHLyH/ZX+teIHxTc+IfGcGo3C+WPPRYYt2RGm8cf41yupaleavqEl7f3Ek9zIcs7t+g9APSrOiJsvobh/uRyKfyYUpakM+in4dvqaAaRzlyfx/OjNSWKTQDSVIgqQACnAUoFPxVpEmH4lR28P3flqzbSjso6uiyKzD8hXG+LfHdxaeKrVNImV009y0mG+WVyOU+gXj61c+IHjX+xw2k6ZL/AMTBl/eyj/lgpHT/AHiPyryiL7tNKxR9QaB4gtdd0yG/smzE4wy90YdVPuKl12IXkK3VsmdQsCLq0x13r95fcMuVIrwHwp4ouPDWpecm6S1kwJ4h3H94e4r3HStVtL+3hvbOfzYm+YMjf5wfaruSzs0dXVSFYIwBXPXBFIQFqhBeeaqjdz/OrHmh/wAOtWIk6Nj8qmQbXBqqJA/HccircBDhaYF1DkV8+fH0j/hM9P8Am5/s8ZH/AANq+gox92vm748Sh/iCFByY7GIEemSxpT2HHc81j+9Wjb1mxferShrE0ReB+WoHPz08vtWq7uMigpGrZ1ofw1lWcgrR3/LQUZt+fmasaU/NWnen5jWRIakghNOSm/xVLH1piJAKdinoKXZQUR1o2R+aqFXbL79BRvQD5aW4jylPtE3KKsyRAoagls5K8i+ZqyZBhq6e/grAuY9rNVoRSElP84jioSMNRmnYRCfvGkpT940w0yRantB+9qCrFn/rKHsS9i4PvVeshumT61Tq/pgH2uP6isHucz2LvjQ4tbZP89K42uw8cP8AvbZPrXIVutjWl8KCgUAU6g0HRj51rptEi3yiueiTvXQ6POIpVzQKSueiafbjyhV3ysLVPTLhXiWtM4Za6OhzMqkVQvR+6NaL1nXf3cVmxHDanGd7VmIPnrotUg+c1jeQVesWdVFmtp4+Srzj5apWA+Sr5Hy1Fjq6GJfisaQ/NW/fp1rAnXDVzWtI86stbkZBaopEOyrsEe9afLbZXG2toCptGGfvVZtP+PhPqKjljKOQalsk3zCunsdPQ9n8MOJbGM98V1aRZQVx3hPi0QV3MA3ItbrY53uV/K+arkUQ28rSGOpoztWhIkV4F2/dqhcRZVhVx7gLUJdXoYmc1qGni5idSucjFeSeI/D0unXDyIreWTXvhgD9KwNb0ZLy3dCvXvWTRdOVjwXzJVhMIeQRMdzJuO0sOhI9qiKV0mt6BNpsx+RvL9axng3VB1dCnsLMAK1sfZrQRjqRk1XtrcebvfotSyS73J7UmzGb1se+Wc63Vja3CfcmhSQfioq0Burlfh/eG78JW8Z5a2doT/ug5X9DXYRxnbUWNE9BqJUuMUoTFRySKiO7ttRRlmLYA+pq7WC4/wDhrj/HPjWPw5bG0tHV9WlHyr1EAP8AE3v6CsbxR8SFhWSz0HbJJ0a8PKD/AHB3PvXlk7yzTPLK7SSOdzu7Elz70xIieR5ZWkkdnkYksztkknvVqP7tVkT5qsp92g1RMM1oaH4kv/Dl951o+Y2/1tu/3JB/Q+hrP/hNQONzUCaPffDfjnTNZiQRXKw3J/5d5W2uD7dm/Cutg1Eb+eG7+9fKYJFdBpfjfX9K2JHfefCvSK4XeAPr1H51VxWPpiOcHOG9xWhZyBm4/Ee9eJaX8VTtUXWnMD6xS5H/AI9XQ23xUsobpJPsN2Yx94BlpqQuVnrF3f22l6fPf3s6w20CF5HPQAV8heLtdl8S+Jr/AFeVdv2mbKJ/cQDCj8hW54p8W614id01G/mktjIXW2DYjT04HXHvXHSjc9JyuNRaGxferSg+7WfGm1qvxfdqCkPlO1aqmT5qlnPy1SJ+egZs2claaP8ALWNZmtRD8lIszb1/masuQ1fvD8zVmuaCBKmj61CKmi+9TAuR0/FMj9Knx8tSMqn71WbQhXqu4+apIDhxQUdXYH5VrTMe5KxtPk+Va3Y+UqWTIxb2D5a5m8ixmuzu4926udvYPvU0SYdvp0t9Msca9a7bSvhx58AeWTDkdKxdCuEtr5d/rXsek3ULQAhlwVzUObvYk+aT1akpT1akrcBtW7P7xqpVyy/ioexM9i4PvVo6WC17Fj1rMH3q2NEGb6P61h1OSWzI/Gsm69hT0BrmK6Hxkf8AiboP9iuerdHTS+FDqeiZahEy1WIIqDYlij2rVmCTy3UimAUH5aQHYaVqgRVBauot79XT72a8njuXifhq3rDVWXb81aKVjnlTfQ7x5w1ULiTtWbHqe5eWqU3AlZRupNmTT6kVzB5zZFZz2BVq3Y499Pe3G2psaUnqYUEflPirxA20Sx7GyKj8zCVB230KN+mVrnrkbWz71t3s/wAtYVy+aylHqctVEtkQzYrT2BlrAicq+RWvb3IfGWqE7M472ZTvbLLM4WqVlGUuFzXQugdapPabJd+2ulSOlVdLHo/hY/6OldzacrXmvhi5wqoa9BsJRtrem7ozuaZSo5AQvFTpgrSSxhkNWxmBe3Bh3Gq9vqIkbhquahb70Ncn5T203sTWM21qZyO4tpQ9WpYA6Vg6ZOSgzW8knyVdN6AmcrrmmRTwujopryPU7MWl68Q6Z4r2jV5dqvmvI9XlE2pu/ZaylubwlYyZcRoIx1PWq2zzXSJOrcUTyF5SauaXGEaW6kX5Yxxn1qeobs6jw94jt/DF1JDLBNNE8agiNgMMD1weDXoll4v0e7i3x3OCf4XjIIrw77R50zyP1JzW1pVxhlG6pqS5FdF7RPUtQ8V21tExhSSZ+w+6v515x4h1zU9bYx3Muy2B4t4+E/H1/GtOd98OaxJUyxrOlWlUV2TFto5+WL71Vnjrant+tUXgw1bXDVFRI/mqXZU6RhaUoKLmyZAfu1XP3qtuPlquRRcu5EaRfvrTyKET56YGlZjpWqh2rWbaD7tX3O1aBoo3f3mrMIy1aFwetUv4qAew5E+Wp0+Vaij+7Uv8NISIpz8tUv8AlpVqU/LVb+KmDNKzrWztSsu0FX3f5KQGVdn5mqifvVauT89VCfmoAUVIn3qjFPFAF6OrWPlqnF81aCD5aljKUg+akj+UqaszpUISmWjb05+ldJbn5a5Kyfay10tm+VWpYpEtwKxLyLqa6GVNy1kXEf3hQZnL3cTRtvTg1asfFt5p0Zj3Nt6CpryDcprCmg/e/hTsSZD/AHmpKe4+ZqbitCbjKvWY+U1SIq9Z/wCqakxTehZH3q2fD4zfJ9axBXQeHgftq1j1OWWxleLDv1th6IBWIBWz4o+bXZvoKyUHzVudVNe6iSNPmq7GBtqCMd6sJ92kaj6hlNPd9tVnfdxQMbmrEUhTo1VxT80yDUi1D5cbquRantYfNXNu5XpTRcsrc0GMono1hqCuo+atMXCla86stRZOK37TVNy8tRzWM1ozau8bTismeQip5LwOtULhw27FZtnXF6Gdez/NWVI9WLs/PVM1DZlUeo5D81TJIUORUCVJms2cctzYtrsNtBq6MOtc6ku01fgvdq8tQmxanR6ZOLaVa73S70OindXlAvR2bmtnTNcaBwHbitozsxq57Bb3AZfvVdQ7q5DTNRFxEpDV1FlJvUV1Rlc0Qtxbb1bC1z9/YD5vl5rssApWLfxjdTmtCnsYOnAo+w10kSZirIt4P33FdFaR/KtZwVjFHL63aF4nA6mvGNZBtruWI9c819BeIBFZ2ElxK2EVCxz6Cvm/Ubw32oTXB/jckD2pVUaLQqnnjua0LyT7NYxWo6n5mqHT4POut/8ACnJqtdytNcO5+g+lZlrcYHKNWlplziXFZVLHIY3yKmorxsWzvROrW/3qoI4dj9aw49TbZjdVm3ud1Z0afKmXTNR4w9U5YPmqwJ+Ka8it1rYuxQMe2mEVZlK1XJqSHoVX+9TClSH71JUkczISlESfPUmKsQRjrVKRcZFq2jqeX5UpYE+WmXJ+Q1ojZGVO/Wq2fmqS44qDNICdDU2flqCOp/4aBorS0wD5qlkpqD5qYnuadonFTSnCU22G1M0y5PyUgRlXB+eqw5apJT8zUxB81MCZBTjUgFI4oAnhrSj+7WbDWpBSYDZU+WoCNuavOPlqo4+WoLQWz7XFdPpz7ttcej7Za6LSpdzKKoGdIeUrPuUFaI5iqhc/dqSGZU8WRWDd2+Gx7/0rph861nXluDIDVEHEuPmamkUp+8aPvVVySMir1shSLnvUcFuS3NXJE8pVFJszkxtdL4aG67+grm0+Zq6nwun+kMR2FZLcwnsc54j+bXbj2x/Ks5BWnrg3a3dE/wB/H6Vn4rc64fCh4qUHC1EgqU/dpGhE5qOpHqM0BcAaXNNpCaZIxzUJ+9T3NNoJJIs7q0be4ZG+9VKJKtiP5eKyqGcl1NKK8LfxU83GV+9WVyrU7eaxuZ+0a0FuTl6qGp5DuNRcU0F7ipSk0CkNMz3Y2nBytMNArRI1UUT+YavW0jPgCs9BvdR6123h7QPPVXdeKOW5MkjV8N3Doqoa9E0yXOK5u20hIFyi1t2ZKYFbRXKQjpkf5Kxr9/mq5HP8n3qytQk+b71avYt7D7LBat+0TgVy+nz/AD4roTdrbWTyvxgUosiJwXxZ8QeTZJpsTfNN97/dH+NeKk9TW34r1c6xrtxcbsoD5afQVlWUBu72OIc5PP0rGTuzRGvbW/2bR/MK/vJP5Vkzwba6zU41itY4x1Jzj2FY8kQK0pG6jdGCQRSGr89ttqm8e2kJqxEMircUpFVsUdKZNzVjuTtxup/2g1lJIVqQS0GqkXTKT/FTfM9KreZTTJRYlku+jfUJem76mxDLYNWoP4az0c1ft/vLSsCNOIfJUFz92p4/u1XuT8tWdKMe4G41BirMv3qjAoFcfEKmI+WmIKe/3aCkVpKfEPmppG6rECfMKBS3L8Q+Sqt2flq6BtSs66+9UoEZkv3qWMfNQ4+anR/K1WBaQUjj5aeh+Wmv92gB8NaMB+as2L5WrQiPzLSYF0/dqlIPlNWxUMopDRmSZ38Vt6Q/zrWRKNrZrQ0uT97QUztYz+6Ws+8ON1W7d90S1S1H5VqSShFKPNwasPEHwayRJiVTW5FkoGHTFBm9zzAj5m+tWoIN1FFWyGaMUWKiuzuf6UUVCM2RR9a6jwtn7U/0oooW5hPZHPauc6tdn1kNUwKKK1O6GyH/AHaRzRRQAlRP96iigBpNMNFFAEZoHVaKKCC/bJurREHFFFY1TSysVZxtaofu0UVijifxEZOaSiitA6En8NNNFFJCp7iYpQKKK1RsTWgH2qLPrXs/huJfsqUUVtS3MmdMbcbM1VI2NxRRVy3EyZJ9oqldybqKKUtgY2w4lrM8f6//AGfopto2xLMNox6HrRRUrYhbniZO6t/wxaAO9y/Q/wAhRRULqbrcs394Li7b5uBwKhAzRRSOuOwySMFazbiKiigTSKDjFJRRSMGJinhKKKBDgKaRRRQURmlFFFMB6GtK2/hoopCjuag+5VS4eiig6DMk600UUUkSiZKe/wB2iimaIjCZq3AnzLRRQKW5bf5UrMuD81FFJAigeWp4FFFUBMlOP3aKKYhEPzVfjP3TRRSYy5HytEooopDRnzil0+TZNRRQDO1sHLw0zUU/dZoooK6HLSvtet3TZt0GPQUUUGUtz//Z
- '''
- # getMoveLength(b,55.20/159)
- import requests
- myheaders = {'Content-Type': 'application/json'}
- resp = requests.post("http://127.0.0.1:5000/rotate",json={"base64pic":b,"height":55.20/159,},headers=myheaders)
- print(resp.status_code)
- print(resp.content.decode("utf8"))
- def test_rotate():
- background:Image.Image = Image.open("rotate_b.jfif","r")
- rotate_im:Image.Image = Image.open("rotate.png","r")
- # filepath = "F:\\Workspace2016\\ContentExtract\\test\\images\\e8d554856a1ea89ed4c278e9ce1faa97.jpeg"
- # background:Image.Image = Image.open(filepath)
- # rotate_im = circle_center(background,True)
- #
- #
- img = imageRotate(background,rotate_im,0)
- # angle = getRotateAngle(img)
- # print("angle:",angle)
- # return
- _io = BytesIO()
- img.save(_io,format="png")
- # with open("test.jpeg","wb") as f:
- # f.write(img.tobytes())
- #
- # b = Image.open(_io)
- # b.show()
- _io.seek(0)
- # print(b64encode(_io.read()))
- import base64
- # getImageFromBase64(b64encode(_io.read())).show()
- import requests,json
- #
- # myheaders = {'Content-Type': 'application/json'}
- #
- # _io = BytesIO()
- # _io.write()
- #
- # img.save()
- resp = requests.post("http://127.0.0.1:5000/rotate",json={"base64pic":b64encode(_io.read()),"height":55.20/159,})
- print(resp.status_code)
- _result = json.loads(resp.content.decode("utf8"))
- print(_result)
- center_im = circle_center(img,appendColor=True)
- r_image = imageRotate(img,center_im,_result["angle"])
- r_image.show()
- # r_image.show()
- if __name__ == '__main__':
- # test_move()
- test_rotate()
|