From 5db08b08fc1cdb211c800a7045abae6cf1d36f1c Mon Sep 17 00:00:00 2001
From: Maxime Graulich <maxime.graulich@gmail.com>
Date: Fri, 12 Jul 2013 11:52:47 +0000
Subject: [PATCH] Edit for real device (iPad)

---
 .../iOS/Onelab.xcodeproj/project.pbxproj      |  60 ++----------------
 .../mobile/iOS/Onelab/DetailViewController.mm |   8 ++-
 contrib/mobile/iOS/Onelab/EAGLView.h          |   2 +
 contrib/mobile/iOS/Onelab/EAGLView.mm         |  25 ++++++--
 contrib/mobile/iOS/ic_launcher.png            | Bin 579 -> 3687 bytes
 contrib/mobile/iOS/ic_launcher_retina.png     | Bin 792 -> 9362 bytes
 6 files changed, 31 insertions(+), 64 deletions(-)

diff --git a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
index 43bd42f3b0..13fe83bc84 100644
--- a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
+++ b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
@@ -25,20 +25,9 @@
 		9C96089D1712C7F600E1D4A0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C96089C1712C7F600E1D4A0 /* QuartzCore.framework */; };
 		9C96089F1712C8EB00E1D4A0 /* emulatorFix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C96089E1712C8EB00E1D4A0 /* emulatorFix.c */; };
 		9C9608AC1712EF0900E1D4A0 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9C9608AA1712EF0900E1D4A0 /* MainStoryboard.storyboard */; };
-		9C99753617379C440036EC24 /* BH.pro in Resources */ = {isa = PBXBuildFile; fileRef = 9C99752C17379C440036EC24 /* BH.pro */; };
-		9C99753717379C440036EC24 /* machine_magstadyn_a.pro in Resources */ = {isa = PBXBuildFile; fileRef = 9C99752D17379C440036EC24 /* machine_magstadyn_a.pro */; };
-		9C99753817379C440036EC24 /* magnet_data.pro in Resources */ = {isa = PBXBuildFile; fileRef = 9C99752E17379C440036EC24 /* magnet_data.pro */; };
-		9C99753917379C440036EC24 /* magnet.geo in Resources */ = {isa = PBXBuildFile; fileRef = 9C99752F17379C440036EC24 /* magnet.geo */; };
-		9C99753A17379C440036EC24 /* magnet.pro in Resources */ = {isa = PBXBuildFile; fileRef = 9C99753017379C440036EC24 /* magnet.pro */; };
-		9C99753B17379C440036EC24 /* Magnetostatics.pro in Resources */ = {isa = PBXBuildFile; fileRef = 9C99753117379C440036EC24 /* Magnetostatics.pro */; };
-		9C99753C17379C440036EC24 /* pmsm_data.geo in Resources */ = {isa = PBXBuildFile; fileRef = 9C99753217379C440036EC24 /* pmsm_data.geo */; };
-		9C99753D17379C440036EC24 /* pmsm_rotor.geo in Resources */ = {isa = PBXBuildFile; fileRef = 9C99753317379C440036EC24 /* pmsm_rotor.geo */; };
-		9C99753E17379C440036EC24 /* pmsm_stator.geo in Resources */ = {isa = PBXBuildFile; fileRef = 9C99753417379C440036EC24 /* pmsm_stator.geo */; };
-		9C99753F17379C440036EC24 /* pmsm.geo in Resources */ = {isa = PBXBuildFile; fileRef = 9C99753517379C440036EC24 /* pmsm.geo */; };
-		9C9975411737A4840036EC24 /* pmsm.pro in Resources */ = {isa = PBXBuildFile; fileRef = 9C9975401737A4840036EC24 /* pmsm.pro */; };
-		9C9975431737B55E0036EC24 /* pmsm_8p_circuit.pro in Resources */ = {isa = PBXBuildFile; fileRef = 9C9975421737B55E0036EC24 /* pmsm_8p_circuit.pro */; };
 		9C9F8BCD174B5A1B004332C5 /* ic_launcher_retina.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C9F8BCC174B5A1B004332C5 /* ic_launcher_retina.png */; };
 		9C9F8BCF174B5A23004332C5 /* ic_launcher.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C9F8BCE174B5A23004332C5 /* ic_launcher.png */; };
+		9CC85C021790286C00F241C4 /* files in Resources */ = {isa = PBXBuildFile; fileRef = 9CC85C011790286C00F241C4 /* files */; };
 		9CE08E10178AEB1600A83B4B /* GetDP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CE08E0D178AEB1600A83B4B /* GetDP.framework */; };
 		9CE08E11178AEB1600A83B4B /* Gmsh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CE08E0E178AEB1600A83B4B /* Gmsh.framework */; };
 		9CE08E12178AEB1600A83B4B /* petsc.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CE08E0F178AEB1600A83B4B /* petsc.framework */; };
@@ -85,21 +74,10 @@
 		9C96089C1712C7F600E1D4A0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
 		9C96089E1712C8EB00E1D4A0 /* emulatorFix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = emulatorFix.c; sourceTree = "<group>"; };
 		9C9608AB1712EF0900E1D4A0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = "<group>"; };
-		9C99752C17379C440036EC24 /* BH.pro */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = BH.pro; path = files/BH.pro; sourceTree = "<group>"; };
-		9C99752D17379C440036EC24 /* machine_magstadyn_a.pro */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = machine_magstadyn_a.pro; path = files/machine_magstadyn_a.pro; sourceTree = "<group>"; };
-		9C99752E17379C440036EC24 /* magnet_data.pro */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = magnet_data.pro; path = files/magnet_data.pro; sourceTree = "<group>"; };
-		9C99752F17379C440036EC24 /* magnet.geo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = magnet.geo; path = files/magnet.geo; sourceTree = "<group>"; };
-		9C99753017379C440036EC24 /* magnet.pro */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = magnet.pro; path = files/magnet.pro; sourceTree = "<group>"; };
-		9C99753117379C440036EC24 /* Magnetostatics.pro */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Magnetostatics.pro; path = files/Magnetostatics.pro; sourceTree = "<group>"; };
-		9C99753217379C440036EC24 /* pmsm_data.geo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = pmsm_data.geo; path = files/pmsm_data.geo; sourceTree = "<group>"; };
-		9C99753317379C440036EC24 /* pmsm_rotor.geo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = pmsm_rotor.geo; path = files/pmsm_rotor.geo; sourceTree = "<group>"; };
-		9C99753417379C440036EC24 /* pmsm_stator.geo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = pmsm_stator.geo; path = files/pmsm_stator.geo; sourceTree = "<group>"; };
-		9C99753517379C440036EC24 /* pmsm.geo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = pmsm.geo; path = files/pmsm.geo; sourceTree = "<group>"; };
-		9C9975401737A4840036EC24 /* pmsm.pro */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = pmsm.pro; path = files/pmsm.pro; sourceTree = "<group>"; };
-		9C9975421737B55E0036EC24 /* pmsm_8p_circuit.pro */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = pmsm_8p_circuit.pro; path = files/pmsm_8p_circuit.pro; sourceTree = "<group>"; };
 		9C99754C17390DEE0036EC24 /* iosGModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iosGModel.h; sourceTree = "<group>"; };
 		9C9F8BCC174B5A1B004332C5 /* ic_launcher_retina.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_launcher_retina.png; sourceTree = "<group>"; };
 		9C9F8BCE174B5A23004332C5 /* ic_launcher.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_launcher.png; sourceTree = "<group>"; };
+		9CC85C011790286C00F241C4 /* files */ = {isa = PBXFileReference; lastKnownFileType = folder; path = files; sourceTree = "<group>"; };
 		9CE08E01178AE6BE00A83B4B /* drawContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawContext.cpp; sourceTree = "<group>"; };
 		9CE08E02178AE6BE00A83B4B /* drawContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = drawContext.h; sourceTree = "<group>"; };
 		9CE08E03178AE6BE00A83B4B /* movePosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = movePosition.h; sourceTree = "<group>"; };
@@ -181,7 +159,7 @@
 		9C9608401712C16300E1D4A0 /* Onelab */ = {
 			isa = PBXGroup;
 			children = (
-				9C9608781712C5FE00E1D4A0 /* files */,
+				9CC85C011790286C00F241C4 /* files */,
 				9C95B7F51726C88E00C0CCE2 /* main.m */,
 				9C9608AA1712EF0900E1D4A0 /* MainStoryboard.storyboard */,
 				9C9608491712C16300E1D4A0 /* AppDelegate.h */,
@@ -222,25 +200,6 @@
 			name = "Supporting Files";
 			sourceTree = "<group>";
 		};
-		9C9608781712C5FE00E1D4A0 /* files */ = {
-			isa = PBXGroup;
-			children = (
-				9C9975421737B55E0036EC24 /* pmsm_8p_circuit.pro */,
-				9C9975401737A4840036EC24 /* pmsm.pro */,
-				9C99752C17379C440036EC24 /* BH.pro */,
-				9C99752D17379C440036EC24 /* machine_magstadyn_a.pro */,
-				9C99752E17379C440036EC24 /* magnet_data.pro */,
-				9C99752F17379C440036EC24 /* magnet.geo */,
-				9C99753017379C440036EC24 /* magnet.pro */,
-				9C99753117379C440036EC24 /* Magnetostatics.pro */,
-				9C99753217379C440036EC24 /* pmsm_data.geo */,
-				9C99753317379C440036EC24 /* pmsm_rotor.geo */,
-				9C99753417379C440036EC24 /* pmsm_stator.geo */,
-				9C99753517379C440036EC24 /* pmsm.geo */,
-			);
-			name = files;
-			sourceTree = "<group>";
-		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -313,20 +272,9 @@
 			buildActionMask = 2147483647;
 			files = (
 				9C9608AC1712EF0900E1D4A0 /* MainStoryboard.storyboard in Resources */,
-				9C99753617379C440036EC24 /* BH.pro in Resources */,
-				9C99753717379C440036EC24 /* machine_magstadyn_a.pro in Resources */,
-				9C99753817379C440036EC24 /* magnet_data.pro in Resources */,
-				9C99753917379C440036EC24 /* magnet.geo in Resources */,
-				9C99753A17379C440036EC24 /* magnet.pro in Resources */,
-				9C99753B17379C440036EC24 /* Magnetostatics.pro in Resources */,
-				9C99753C17379C440036EC24 /* pmsm_data.geo in Resources */,
-				9C99753D17379C440036EC24 /* pmsm_rotor.geo in Resources */,
-				9C99753E17379C440036EC24 /* pmsm_stator.geo in Resources */,
-				9C99753F17379C440036EC24 /* pmsm.geo in Resources */,
-				9C9975411737A4840036EC24 /* pmsm.pro in Resources */,
-				9C9975431737B55E0036EC24 /* pmsm_8p_circuit.pro in Resources */,
 				9C9F8BCD174B5A1B004332C5 /* ic_launcher_retina.png in Resources */,
 				9C9F8BCF174B5A23004332C5 /* ic_launcher.png in Resources */,
+				9CC85C021790286C00F241C4 /* files in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/contrib/mobile/iOS/Onelab/DetailViewController.mm b/contrib/mobile/iOS/Onelab/DetailViewController.mm
index 5c5d85e38c..9ba0fbb9ae 100644
--- a/contrib/mobile/iOS/Onelab/DetailViewController.mm
+++ b/contrib/mobile/iOS/Onelab/DetailViewController.mm
@@ -55,6 +55,7 @@
 
 - (IBAction)pinch:(UIPinchGestureRecognizer *)sender
 {
+    if([sender numberOfTouches] != 2) return;
     scaleFactor *= [sender scale];
     scaleFactor = MAX(0.1, scaleFactor);
     glView->mContext->eventHandler(2,scaleFactor);
@@ -332,7 +333,7 @@ void messageFromCpp (void *self, std::string level, std::string msg)
         //[[NSNotificationCenter defaultCenter] postNotificationName:@"refreshParameters" object:nil];
     }
     else if(level == "Error")
-        [(__bridge id)self showAlert:msg title:level];
+        ;//[(__bridge id)self showAlert:msg title:level];
 }
 
 #pragma mark - tableView
@@ -372,8 +373,9 @@ void messageFromCpp (void *self, std::string level, std::string msg)
 -(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
      NSString *modelName = [models objectAtIndex:indexPath.row];
-     NSString *ressourcePath = [[NSBundle mainBundle] resourcePath];
-    glView->mContext->load([[NSString stringWithFormat:@"%@%@%@%@",ressourcePath,@"/",modelName,@".geo"] UTF8String]);
+     //NSString *ressourcePath = [[NSBundle mainBundle] resourcePath];
+    [glView loadMsh:[NSString stringWithFormat:@"%@%@%@",@"/",modelName,@".geo"]];
+    //glView->mContext->load([[NSString stringWithFormat:@"%@%@%@%@",ressourcePath,@"/",modelName,@".geo"] UTF8String]);
     [self hideModelsList];
     [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshParameters" object:nil];
     return indexPath;
diff --git a/contrib/mobile/iOS/Onelab/EAGLView.h b/contrib/mobile/iOS/Onelab/EAGLView.h
index 51d33100b9..db9872cafc 100644
--- a/contrib/mobile/iOS/Onelab/EAGLView.h
+++ b/contrib/mobile/iOS/Onelab/EAGLView.h
@@ -24,6 +24,8 @@
 	
 	/* OpenGL name for the depth buffer that is attached to viewFramebuffer, if it exists (0 if it does not exist) */
 	GLuint depthRenderbuffer;
+    
+    NSString *docPath;
 @public
 	/* our GModel drawing class */
     drawContext *mContext;
diff --git a/contrib/mobile/iOS/Onelab/EAGLView.mm b/contrib/mobile/iOS/Onelab/EAGLView.mm
index e0bd7a392e..27b1a2d2a7 100644
--- a/contrib/mobile/iOS/Onelab/EAGLView.mm
+++ b/contrib/mobile/iOS/Onelab/EAGLView.mm
@@ -42,8 +42,9 @@
             //[self release];
             return nil;
         }
-        NSString *ressourcePath = [[NSBundle mainBundle] resourcePath];
-        NSString *startupModel = [ressourcePath stringByAppendingPathComponent:@"pmsm.geo"];
+        [self copyRes];
+        //NSString *ressourcePath = [[NSBundle mainBundle] resourcePath];
+        NSString *startupModel = [docPath stringByAppendingPathComponent:@"pmsm.geo"];
 
         mContext = new drawContext();
         mContext->load(*new std::string([startupModel fileSystemRepresentation]));
@@ -51,6 +52,21 @@
     return self;
 }
 
+- (void) copyRes
+{
+    NSString *resPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"files"];
+    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    docPath = [paths objectAtIndex:0]; //Get the docs directory
+    
+    NSArray *resContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:resPath error:NULL];
+    
+    for (NSString* obj in resContents){
+        NSError* error;
+        if (![[NSFileManager defaultManager] copyItemAtPath:[resPath stringByAppendingPathComponent:obj] toPath:[docPath stringByAppendingPathComponent:obj] error:&error])
+            NSLog(@"Error: %@", error);;
+    }
+}
+
 - (void)drawView
 {
     [EAGLContext setCurrentContext:context];
@@ -65,8 +81,7 @@
 }
 - (void)loadMsh:(NSString*) file
 {
-    NSString *ressourcePath = [[NSBundle mainBundle] resourcePath];
-    NSString *msh = [ressourcePath stringByAppendingPathComponent: file];
+    NSString *msh = [docPath stringByAppendingPathComponent: file];
     //mContext = new drawContext();
     mContext->load(*new std::string([msh fileSystemRepresentation]));
     [self drawView];
@@ -84,7 +99,7 @@
             mContext->eventHandler(1,position.x,position.y);
         }
             break;
-        case 2:
+        case 3:
         {
             mContext->eventHandler(3,position.x,position.y);
         }
diff --git a/contrib/mobile/iOS/ic_launcher.png b/contrib/mobile/iOS/ic_launcher.png
index 02c7b41650a9c40f1f01022e268f2fe5a0bc5304..0f700e7b64a142a517b544a6f8ead990363456bd 100644
GIT binary patch
literal 3687
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
FV1k=X>&5^8

delta 565
zcmV-50?Pg89K!^V8Gi!+003e$Lv;WE0QOK!R7Kz4-~a#r0001hfPf$%Aolj{?d{v=
z=g-sAyWHHk(9odB$e8^6`T6<t_xJDO;>FI+oWQ_<^YiE6;K0<>sL05W>gv_j)~v<F
zio(K#`}_Cx_3Q8N-`?K5%*>eP=FQmHu+Pt)#>R~B@ZsU%!+-w%{rLFt>FLwe)vDv;
z$HT*hn3#ZETtrAnFg7+M8yga^uz;ADXpoR#Y-~uDmSk5~Iv5xb5)upv2?nUBaD;?d
zU|>KbBpAB7e6g{1etuLxKPsG@Xl7<aFfbq<9uy1=2(GSllape2cu-4AGA%70T3S4T
zfmT97EEN?F1AhYoR8%;(w|c<S(%b+500DGTPE!Ct=GbNc0004EOGiWihy@);00009
za7bBm000th000th0n7%(UH||92XskIMF-sl5DhaN5<l0H0002SNkl<ZSi{xWi4DUb
z5Cu{Hq5qzv#8QM447-3irhr$#9LK=KVvqz&L3%?h1b^v-=;161(ZM+(mVgvPECA^W
zF&)w`#AHbS5N%EbF%eQ4Vt+_?5Dm^1VhW@j!~{rrh<zcIAO=G!L)1A5h=Gu75W^r@
zA$EgghwwW$5Cb6jARdS0h1dm>AHwHkAY4ukVtq)p5D!7Bhj;{13xv@LXC|p&e5-^)
zqC8|oGA>#g3YJok*GOR(DAW`|4N63PpwJw>E?m!EEg}$&^5Qk`00000NkvXXu0mjf
DIhXvH

diff --git a/contrib/mobile/iOS/ic_launcher_retina.png b/contrib/mobile/iOS/ic_launcher_retina.png
index 796d0a18cd57e4ed912822bac8b2a7645679ab6b..b4e47dddbd234d2893e89b54b51be51468d9c9e1 100644
GIT binary patch
literal 9362
zcmV;DByHP?P)<h;3K|Lk000e1NJLTq0058x0058(1^@s6=SJeV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmYTt)x@Tt)#DltV!P000McNliru-3JT{9UhakcxM0r048Zv
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj27Z*CxAAWdOomE>Pr001BWNkl<Z
zc-rk<S#w;~wf^?$mL*$~6I*zcCoq{VkcY&n%0tMlRQ^Ho4|t<0c?jeoIK?9=s(>WL
zg-aE2DohULP%+_#Jdg?x2J9QIlc=~U6DHe|v94qdc3V@Qaj*MurahiMJxMLoy9y+?
z`b>MTv-Vow`qo;kR=Y`H03!elAVNGC0R(`>A2P-O00aVvA^vClWuo{549RyWKAsT+
zr6*4Qz`(NWq~}PF%)Uv;j$@$YyDYt0a%;&wq_+tIvE=(ee2<7PlH5*wEtZ^>lJg4}
z&Ob}eNXUNA?unT28O1jopESL3fDwq2*+}M*k||)xdE+_HCLx}M?74&k(!qpzO=pW(
z^0joX(pyTNoAP7R2^StG|6ei*EV&4!>xF#XAwORHj9_53T8+>j{n6rZWa&xX-qM4F
z|I42VB5wI!GgqO4t2e$s^S7yq^R@DqP7E^7ZQ*@b)`S|LhMHLM^t;tqW#yW#H6dck
zQQZ<EW)s)G5ETj$>zWWbotcPr+6AeHcH2$0@l)5%=Gab8BnquXd!*XSu&_iVXdvM&
zBFg_|Q3xdJEsBq(TtzBMjpB2X;T<9Kb5SY1Nco$l-mYMX66F_4f7h-{lz+#%9aHwK
z`ujp4qQuBo=O{7Kv&j?YJN=!YKLF{{K=R#a6O~>=Tn2Xi`t`mM-5;$R(d(u<sWk;l
zZKz>t_tvSElT#P(tfVzW)S)XjKB`J4J<nRbA}cghnPSI@;18MZS+o7fa5YxKux#)^
z!k@KoQVVk|JgE7~%3fS_eeE{MFgJ#y#C0{;(5<hhB0!yeb*Z_(QiH>&c@UwE6E*+n
z)av=DrR!6<f2`Yjnzt~;kTa_W!)3@WAY?Gko7yh4w~Cq;T54gQso+7Vp({+*iJ%5T
zl+H)9PA8RwE6DIj)L>Vprnazd3z6ON*>EAUpP3{N3}iVU)4kW0gs4U2q8%YZ3qs^{
zP@8oSby#1=P+TNV1kO1)=eTj>1~})L`%GnSk2cL?cjUet%5Ve9q>M!ThD4k~z+4hM
zN5T#$*S#d*D6;O)FG33NlVTktM0E-2=gCjxzvuTNKrNZ}l<_Ab`Bo^wut*4`#=^o8
zMI6J!!}!H7et{_BiBM63w^N3H$+(Sx<B*J_ka`2z_wr{-1G7Xb{v<tE{#_EazBrG<
zMG3-Oi?<+LQ(XIOP4fR|cS9=PmIS%y=jZ!45OU!S!w_K@V*mdA*tv5j-hA^-jE|3_
zTCIXHCP%0H!xG9U>ADgcnIp{_I>MV`JBm!Ujpc^OY}%?{<AU&bo`->ff!Lg33_tqO
zkKlP8!Y~jtWCLfCT6Eb8;*eCzoo&;rG+aoFaZ&>#x+NiE1|ebwtCf|pWXT9)bW(`4
zuL;6auh%g)HkN(w?Af!Jnwr9q!-v6`gG!}Rh;}s=B9=T8Sqxq>+T|N3L?{%Z&LGj$
z#%CQudfMH(q9}svx)>fF*1mJ!efMFlUPllFT1={W!;`f4y3u(y(#B|XZHEl+CaLx=
zAeqFng=Ts+$Pnzayc#42E2ZBP_8u814W#HEYT&1nh0Z`c7M>so;QKyy?AW0ld-?KZ
zT)K1#K^P(mBXHt&OhVwskOeJe7C6GRImRqV)d?X@`<fgUaSd!on4ud1NtbMYoiM_#
zUAy*~HKJ2(;&~pHmzOa*I+_X4wr$%mHa3Q(r6mBs*w`4(oH>J$kr50I4)zV|j&5Na
z0Ax^y1SpCk1b%=p42{|+9gB;Ln3$MA7>0<VsN6Qz(Fdc_Pfkrv7BxfCQ%Hhrc6QeK
zeb#A_ND1f?2a-x0Q}*Nh(?(}baUb9Jv9hv)v9U49{!uj$0PNbe3va&pCPqg`v1Q8^
zRH_wY@Yihhwm4nV)aCe?^n5KWRHxR~Y5y&67NX|O9orQ3vOM`C(>{sqV=|uAF+V?#
z*I$1fK@cE{BJhaYl>~KG8L7lQYH<lVy;nF2WZCfSb|=&RP(+#uY4o$Gzy%?rUZ$ey
zw!#h~Xz02w4j(>TdcvN5`f1ebYY4*toD(>a;W@}^V@s1_g&VB1(a_1I601hmxhtEz
zK!O)0gaPDmf%!iv<dFR*LfxdDBd493&SyEE^3XsQZqcp@?H=^s<@-Uhb%kLF-}fcp
zu*{gAp2lx~`!ak#Koo_bG*%`(2ju57%_mGD8Y+ASSbi5jGtV=WV{LPXf;BSVTZfEj
z+Q6e*GoDlJbM)xZrjI{y;somTI>In4j|;80BSGtPaYvP0hyg>BbiywEvb3U5a??Pe
zbPROOf&y(wmbXpUPVsp-5uzy8KA!J^F@{Q|()8RdE-vEKsZ;QLFSdmQEd;}x3?&Gx
z%^l3oi6V_klqH-}9@)*0W%}Gg(!@3`4OvS<{+lW%j=Fcs*%*fXk%~d)B3Mj=?8)XL
znlclbc{OxvAb<E+fZV!^{rmT~`~p7u=%ZL(T9(jhLP4r!5y(jm;(ylTNC9s3dD9Xx
z$i6x{C`uZcO668LRGJOgf_CgOKeSBTPMW~P^YVQkLqkK@vSmwKTKtcH{3ATi%W)xf
zGReF?)Z(mATZ_^D?nVYriA_&Ww@#n8f(e~K8Jayu19H89`_yVR96o%wP=HK0kZHX0
z&O6w%XAg!32f-YtW9W3pF}QZ_px|a&HlnE%YPz1LHI>4BT-U|O$Vl7TCmk=m@Ip-Y
zNVHI=4C-#DOLuC^am2klH<(n+1Uao!GR$&ASj1PdNffg&i440nNdZ@p?I^mM>A6Ut
z)e*@|I%%IK5s^ulhMXe^0<6{7uzUCJjxEKr&pwOgrR5kGB9WD-xX$@LsyQk-fnHz=
zia}GwuoXX(=2tPeWgIPM0Z3~t{+&d&B^g<hDlFniR-ABmBw2QX@JM!rm^Mq=8&42$
z5y*leQDaGtC~NV2QvPO0x0O5vsB~9C7)9_r55wDrTk^b$#v?y_1g`5L3PTX_?7m2y
z57Jqu(i0oms5&KB{7jl()l!mhG(h0tO2(m@GA&x*WOJTK+QNFgXh9pdm)br-5Ww?1
z95`^G<G1|!>#t|HkVwMs#-vb(H^G()=a9OE8E_NRwp4^kG{$Di91AmEV#9)9`&%wJ
zDeCNbF1Bsk)-}1m|Ni^ox~?QdMob5WpAE1s5L31hRihQpHLOU#;l9eOlki=qIDXVA
zbx@XyK+Rpl3PI!_=Gw={`1p9&1ZZMn0yl5ov}z%;JtCnz-NJMdDpT{Q1hcb6rRmtz
zWI0YqG4Hs{-H{3Kvq6!iY9x{7d3mmf&wcK5UEO&(=Xl_O2NGN;%z~`;S<t<l)?Q6A
zJ4_<^pW2WR0|+VpK_S&QODsaq3XupJ*4;X8zvK3<n{VgOpT~zEeu%s8z8j7clkZhr
z=vEV=jxrKA%oHcH@tkH_baU%c#}iLH0oU`^A<)_zj*kPNfFeOkMk<-<3W<BjU=Ai0
z8Ez;F=GlU&k^u_M2<1F>+kM~1T79kS+m|@refM4b<8OaM;QNVNFJme8xiL5zg-#5#
z04g;IUfY}!75g#aNm3@ONaxVEFmu4kmbs+jGi4HS$g&-obR;#3+?wzw;)oLMbL8-m
zb$=`W<Ef`&EtH_sSr$j(He#wdM-5$iDxIj`C`M<`7M1WR<r$oI)Mp{lt{p8*?J4jm
zir@zUf*>eGRqgb6@4fdhF)@)*U)$P>n_dknb%J(Tw;5M^a&oe%^K>`J*V@_B`t+$<
zO^NdR_U*&S$Vf|fQZ|@s8wU;?z#snbhb-=<rU3~x^}8N8mCs-9YWla#$2qM^UUzK1
zRxA0Dq<w-Q0DzW-rxWAq)vJ;g(s3c`h$d)$R$E1=$!0_=j6{;lfT%_;3_M=Iz(`b)
zO=b=<YRIe*hn0|NF@P!=bV<Ne;5ygqb?n`{Z^J#52Of9;D=VuBF2uo!E6zdEFN0J&
zl7tGzB(n}78qhlD8cO*au_TO&UPEC_%FI+~C3QfG!-AAl4?|$jz}?p>Z;6Wys|}Vf
zxG7E9a3CqQbkw@WQcyDeOd!fvt5uASj%>I9EiW(QAOH9}JkLiIMj);-21PGYw^kKi
zgk;1@yi3jQCiy5e*h&VgNtFXqfnqYGhf_Dp{H~v377HYJo`=1A_o7$E4}bVWc%CQ4
z$9fspX&MJI62KMw2c-h4C>3<Irn!h*o}%x=kP0MdpGu{&A)c3QaLzO8YZ%3GG8l0l
z6bDrsB^Q9&4t(ot4fA@*!BlD(p(tliHDR2QE&O0H`3h<raZ0l-BGl`396EHU=ibuC
z9(xR~>&Dv{$!#A>Phl(ds#|EAV>I;(;<b*N9YJ!-g+dUjC|Q(9`A{I0k-QZblF`W!
zfmVrHQ5Yf!V%w)vRMk!n*LCr$U;PS!pQJ?dNH^`Y&PF87k!h|af*;9+xwP{tY&MM)
zK&DU4pNUfCi1}G!=m0Ro+LFazz|R4c@Q6Tbg;>l{ELdsDYBfRl65l6^u(npm7r*$$
zp0yQTdF2(X)z=cbN4)Jyv{tC$3`lcinrn#OlwkN08P1!V!E%0=LVvY!iS+eBi<zm^
zan0G92~BdueQ<EFr;W{}r6oN1<dg7yzq{pO*4v1Nioq0QE2e!zMUBBsnW=zXLy0_H
zBPL{e3(V}j6!%$MTf?1q-r4h${pzc)Vr6ADBc0`*8MMq#9Up6)FRultZS$-$6jfZ!
z%1VWDowURq!DwHo`yD}Hg~Lp+v-cO1H-0lFWZH)n(?D_C*E8DQ&hR`B&ph*=ax$Xi
z8IYa1SQZ~9lOtp<A*BYjsbO%Fl<U~Gux@rNDg&7}s;r8f?^CbWyF!%j)_D2lmoYat
zm+^(T;bm;M8x)Z((9?Mw&oN^PC^nQEmVhZwv@a^@V%y4cqP&Mad-lL_9BiiX{PWKz
zwWrhaFenHEHG$_COW~m4yi|@$RB)VQmOCnT)jJ})Exs4YjR!%1dcBU@Zo6&M8J?$3
zox;_tS0!6$gVcT7$2l6a5GvzMWYh_95v@oP<T57EGbCkqy-^7l$VrFk=bSRsd3=1l
z<4J<+HJ*9q8F;Q6^Mw*L9f|=A#Wgn-hXPa>MZnvPNI&VAk0tF$f{#pE4Fa8mprLzu
z%MvO36H4Z)EMQVSKe0)O$w;;#(~3<*M2L7y*Kl2TQ)-`d{Q1v+#?0(&O!weiVRR}$
zp_XJob{kjlgw04lbj$~qj3JTvV6v;sIM4>*6D2beQv1jAJnY-I51V})KYm;aw03hB
z>egN-r1daOJ4i)yr9Pl?rw6GGwDPlIyHch%KQr}072S4DyrTsYHfmhBZ~-@N+`z!V
zK*m;-(txCCXK1zcLtGu$UVE4o0tCfnUYv3mgPM1wqY4JvPAOrwSLV{`8fkr>UAOJR
ztupSr?>_jxZ`MN8Ue{`Qj*DuzmefXMG@|v@Cbis%!aU54J9*F53@{kCPq}i2$!?NL
zyTs><cm&V)!HI4O?URm~nHgNZbP2xaBZ|18s)^dXPBx06Hn{^dDo*~H=`EMn+!&RB
z!W0$m$uR{@p_Us_n1^DmAkpeqQA(If{K}7M_S}TGB@R3iqA-Hzx;U_oNrLM&9y)#;
zuII+o*QAz_jQlHtBpAgK<4_1Wi8_Z=+N`m@5@|5Dn$;?L)T|JR?x8`*iSkht;q#yW
z{4FOyQ&Us;>tFxcd>T+&_Hlcyv?$xcpfmn-I)FWxrf0N5!*z;F|5{LR#0i3FJ0{n4
z@ue?)3AgHa^2sM-(pgqEm|IFJqY#NkVZm_=!e64)jJBp(g)*HxEyDq1H>k*1ql5~G
zb|vC6f*r&;A&No-K>*G<hK7c2Spk}wn!+1zydk6k!BWw+xFjv1`BWh)QEEn8Q)=Xe
z$%t0t{ux$doebUp3NA|$8Xkoa+`5aeeB~>+)yIhwCnV}CCvGa8ZGWldoGd`8T-~rR
zs@APrPU(T661EUbWs0#Y*WYW{Kf_AGXU3c*t7;Ugi$zfgKk!khR(g`E+6|BFjW^yv
z5C%!0m2~!|=9s9&e6{xp<aI$o5`@qx0E*zKT?AO;3T3SsSxu>2*z)V;KBm1)Rqgcn
z<u8AU)zww4JWRtNcNfv-BDoNZXc#mEl>QGeW~-XC3k-Z;Q8;YWgPg7rAqad7505m}
zO=q)@m6a9z<u89h7$&w*!kv!I1g4aV5reCc)1YALw*kHHh2*B|C0?Kz=a7Qjj<`9J
zA%{lYMNQeNCi{jA83#mUIZnhjQtcC>UUzZm&_R6G#v_kBf?6%9x0o;xBrHgBc63|E
zTz$}#X$mDku9tWrgK;hfxqBm+DuL8_C&3*%cJw@1zFR}~$a<H6?~rDsp#ZNbU-lPe
zvMtsBgtEN#dcCb~I-7m`{O3Q9YfmQyJ2L`)GgZ#eY$j@B)+vmPL@LXpEuWD}umTwc
zctjpB9UB|_On6?6+<M>h!9^|9OqH_|^}?ydX^K`muaT(zlw&U<`%uJbNGWfZ$J3Zz
zjs$wVE&n{#K5<3)X8M@ks^jICUxw$oNl&sEl^5G0NUTAUUs{=o2<dYej*}Rr;vW@a
zABjI9)=1QTLdSQY8pCSy2fe=qDYb9(=x_X!^OP*+W5<pi9c!DknFkT!kw<=(BqJvE
zg}5OSucSh2Ep`<eD;bWH7^R}otax2e1lQ@6iAvLSf*`;hcie&gh{s!Ry(RVG=t(2G
zxVo5vG#8X$fp#u?sg^87C)v89D1zsE*tv6OUuuLA1OXm?_+j{-mpB<DS05{tU25+5
zEVb=YO8V-7RTyz4$7nN|;!_s9N3`p7%DlZ)OZGjUr|I~fk0VEp^rc1_@4ovk<`)*=
zr?wF3JyMIaOB-~FSNf2dBeG<~l^mlvZZYP`B2=Q04I;D0ptP)lV5~=+!}kLmJb17#
zEtW0*vBw{eJu=RvQhAb1V<`6mgOC~P@Q8)WmBli})hRFUVo+DGaDzxGw4fGrgj{2f
z4Dh(BW_iRB_&!{>jy-$!^rgiz&YeArk1u{48`L~fO6H}7FN8oRgI=Bmdgw#;x*_wt
zn7qA_QWUeb@-ArHUZ@q^=d(c9Xm|Yj#IK9ffC_kBO}EklO4aUh^nRm?4`)F((``&f
ztwo(mW+@jkETSkD9@q6SIy%~ykVabQ+&Nr$|9yl(7&8|$;+bMBOFsp(Slxn1O_Csm
z4nlH87PT}_Y6EG^d#%i`j%=z#Z3%PGjx!(6d0ZUo?z`{m<31(F(@#AG*K=bn1SHf~
z#m13-lENkvOD?NP5~>vqsWdaGrFm>Pkd|d(fyT)kQa69cv~~4BMfuG(-hcmneDvW*
zG0ivPice%Jkx5o>tYq`GMmP}6wGSE7iSA7P4kH<HHem+<vzKRaT^v1nv@aD+j^jT)
z9#dZhV>-2>Mf`^mGbBQY_#BhDL#&9gXf5wz3A`D&JDS^Wl4etddd1aG=^BHBgPW$h
zSTBvm#YJ4cd|9ryXvF853%Xh>^ET2zQYMASq1Ten^h%&m*^E$<10^GyC&+UI-}Czc
z(>BHre((eMzL(cp<YI{)(s<G^fWf4c?h#A)kQgJ=N(w`)&Y@gXFtntTK`%EV1xsz|
z$&gXbD2(9y0k&@2itXFC_a&jl;kqu~efNKIEhJ|A8g>CPgrkghtm?f<0dUpJTgPCk
zS{Sn*Fl~Q4`skz5HntJWMX5rW=+eUyT;*ATY<*jU!gLe+sdCPfit-`04h>=J)~$UB
zXmczrE#bBQdJRDkNPRf8q6i|=ObSIq>p`nmpMy1HS*cJaf{HeKiX{boOxv28;Fzk^
zw1;{aMesZq|9011{nhW#c;WdMvSdUc?j52PMUd<bg(Rlh)Q0MF_Kao9qw#tGRNhn7
zAe?M0+d5g~+gIAhblbM!O<UKn7st(;H}T?2FXaS$u6n(NP@VxRB0b7a=HzsOzz0$h
z>9m`kXdG*qj^YI}>;Xy(?wly^dmiq&=kEThcX+&d`ZQeEP11n!3ixVQM-wSNUOyT0
z(|AUJwdH%E5#5SOMi$gL2!dO(G)pgx)zwv;Jb5xJLeac2-MaDZ<i?dOVKNC`Zh=Ue
zt7j@Pi;Tk?h7sy+9bf+Pm;0;TrE&7)Nz`uC@?=EfTA<rR>p(%B0+FGp_F`2sQ}sPg
zCc(>1SfPPUFqD{0DvR+5zVG4Sfj(KRn}c(X-=F?{TyHUoz&RN#mfS-!a2n0^Dy1rQ
zN}j$*X|<P9u=7ZW>~Yi-b&jG4uIFL=7A#HIYvZMtUc&tRd}d6m6dNjBVKPXKpj0&W
zsel8qOmi>;4g`CvA(+)3PsraqB6yyUJ8r+d?|H4$_}%Y*2iNrw@zf(r)`cNoX9WX-
zTAYDF+UimvGLiQsQax-qP>U)xibD9l*Qctk<2Zf#G?tcb#)LEC8n&nHENW2<RT(v)
zd^i$1sgz*>DGkd2DSuGvfhx#gY&>&#u7{&X@91lvbskSV@i<)9%Tl5_SL`3P%(5a-
zGI>ly_;mZJs`j*y18oX;L}YAMFQ<hhMENj8#3St8yRW~Z>pae#`){nQEMv=-0Wimb
z<2d%_#TFrgQHYeX!i8miEkzX@A_@XgzE9WKxbe_K4@nj9yVZ-skxIIVY&0fwMVQ7P
zu^G=X>I~pBU7ls5$44K1goXJ9_(3W}Fl44e>9n1%v$g3Rj1A{xj);sEs9TqXAFa?e
z`WdDhJBSF!e|kLYRZqlW+{C0DLo((gnzlE=h&EK#kV@<uPNbATqpUnjgfI+IsZ{!&
zR}YNI$w^%N<YHWJk>}u|jQx-nVOJyYc4RO?qP5yS1gzE9?3L2hB8*ANktpJ~d`0=q
zHXeWCad@7e)Sl*gI6??#h@mSKR5%m2K&uhmEa58+m^zNrC(8HGxOC|f&YwS@m51px
zYtd2C#*F#vBxluYEVh_!7~4L_jvec-T91wAo_h|S>mkYlt&mE)Xobq5WT}evVa3d3
zqP$-i2>}kROo&*mUd0NM%3?tnpjxedrfNEGCM|UK+*t%+m;_oQJ^GL>G%4~Rr@D)H
zU!s9v$thA(yp)g|>7Liuzy9_9YW3(iapD9#&r8}#$+(cdtrcan%6}Fr)wALfut}g*
zCEBM+f+HiFzoLAlQbDy^#r5mgF)=ZLuYK)nw~RMAH#aBrB;!hhK{Zg$tkuob3}trq
z?AeyAs`Law5MXU>4d3|2H#Su}CI)~x4mjsnSy@4?R>OxMeu$4h{un_Jpi-%TF$dLZ
z1)Ou7KYtz*6BAfiSU{~-+q5sp>C>k%Iy#y)`fazUMO8#}SW=po7|XUSmg18v&b0;;
zdRj!W?X&B)U7JRDQo&zXT*Uvr_Z}`@yqI+(PL0Y+rII{fh#>R<0`9rz9^7@;-AM;z
zjtdvw$GLOoFf%i=VL4gNjwp(7{``5|`>k)GQmLTgI6&Hgo3WVg!C2OpBb6;el4mb8
zerD-0@4WL4wWEDjS6A`PZ+^39TM{^qgMoo6E?t_$zy9?;=H}+$d7jV>2YKB=@po>>
zhf}&Wf&f2=>l;l^Pvh@@{~IPJCwpFyUVH7e%;acS3sqB_h-r3G{3(+xCniX9h%gK=
zK0e+v!owItr4nyBpI-SCQ&*<2u&{uIg#|=W1jd~BxsuvCJOe?6!j*}j#GozDbNUk$
zms9>7A_8+5h6V?5^ynS9^UgaF1_7?kUBk6&v-tSqPkK_I{`99m;d|fv9x6@+PQ{5e
ziA`A;WJ8+sx8Hu7SgOK>&hpvTmHwMS3djXPh}D&4eCytOQLR=tOkf<xf$#gce*HS;
z=jSmwHHFz^TX7sm5{eXU<y<rhdBS1J`*o<taN>g3$>T&x4sdXRIx6@4NVh`97$zqt
z@yREjV0LyEi;Ig{uz90KwOYk1ue^fMkr50G4#uvy!@$x81A?a&uR8-0Mq?@?3~^1y
zstg6F%n+3;BqRy?9`^3rx9-Bj7>jevd>_-()A-<n4=_JJ52sQA0|OC<<2V@`Ptr2!
z_RI6X<@Krs;jw*3NbAn4#v51(iNK`|ba(IGja|EUfx&^}FwD%%;Gh5eC$3(-n&q~y
z=Lo|PzxmB?aR2@H!>Lq&N(BxvWBg05imylp0qpI!-lAB%M3oiW1B|icC$i{#T3O6<
z>-hG!|9#zr28byN|N7tqtgWu*WlbpUFE45gWzj{=1Hr!G%Ayx&l~lmuN#%+b6Ky2|
zz_a!ZxqW4!zeEw1S5|Q0!u$B>qYu|jh_-Cmf>WnXVR(2XC!Qs8AZ=UXKT?JUV~LC~
zu(#fNtF#fFR+M*L7rS@w?n*1l)Q)jo7nd(z#;2ctisj{HtgWqOf)U?~pj9}xE>H%=
zb6!wsi-U83VAm?5Va;vVO9hvckefxt_n2s_^qE#ySFpOWipi--T)cR(tL+W$z4u=H
z<R?GD(9jSnl?oiE`C=`F`;R1i0_w~;@0jp73FUHmc^UKb^SCxQhq-HWxOuY%hdD{p
zAEjP#A{<B!VWE>vDgd&^5dNJQ$dqky95GcUUHIfX(xS_RESu&NJ-1ZAv+HxacPD;l
zaBvV?2Df16*iIZfb_})J4P3i6kNNpI%+Jrmb={5$(7AKxP_Nf9FffqNUa4u1jGZ}i
zhH{mZqil@geJin_5Jhp4pzFFgc;G<Ggt63Ztk>&UU0ucW^fV?XC$YA+29^kn*hfQJ
zoT5f`AjE6W&D&2Z7_r5i8_mXZp-^MRnkL<*xLp&e_Eo|6M1hlqGOxnwI1W}<S8?Ua
z70k@cU~O#;zVEjsMBn+&cktr}AH<-fg%Wv4EM+Fz!c2CrVgV|F`=mVQwY4>T_q*S1
z3BYq*7oU9c2`*i_lo^i3?Svo*49|^L)pHWRF<p+Q000BwNkl<Z16a0}_<TqN14Z^r
z=4}bzQEVkq({bclPBf}@8w?2q(Ad6;?X<kDllVg9=jB<ZMHq&-^63>!O-{l0{gwdD
zXP<o*hYuglG*L5JsG63@XTqM98P3Yq6$C!M`qi(Nwqt6wo49=W5@u#*5d<EBAk-Jc
z@J8lZf*ag!c`-Q><CnPAsLcdSTtIcZ%LG-_7U}|Wp|8E@*>OqWNp$%+>EF?|TG8+>
zu&*+RA>V2N;NZbSIC$V-)-G#qZXVOqS5dFmO9{crlPB@x2OrE}2bMZjqAW5qB2<;r
zG@#c8PlP9SodfLJwaaS9EG{l$W_AWQuHQhdR)gnxu_q_kFM03JBCJKQaYPJ<#H}a6
zW7I`g&kNlniw_ePRB+#Iwvuj~C+;j4w_3flO=hQYUf{I}TQ=99RopW5>v1XIU9DEJ
zfB#<W-@gx@=V4`a70WkoV)6QQtgfya1?bF~Gx+}ZzmG3`;R{L7Ooospzr86VT6oYP
z2ypD!vCM`cA}lQ}VQFaz*RIWCcJ>;=FwBgx)F87@mT3G!(Mkq4Sb1xqy`A}%k_lYu
zS*ZqV(V`2QDBbR4!L?|a2KAIv;V9Cm(pFXiXOg}n8t2LHj^ki-WEdmE!`MGQjxdUF
z<N9^fYBj8`u1W^^i!Z*2haY|z)oQgVV>;Qwl6?$mkW3IF&Jjit7>jAH^9%F1GIa&B
zv$NTDl|Fn7;N^>Gn=H}AMS<Fu-(oHm3@~pkT-XxiZOsY@7Hk>Wf{VanymFcrl(seH
z9yNhau1^FbU@2>08<v#YL6n@Y$hJ$h*Y@q(F*>?EQ!6)XHO$S=V`5?g)6@TlBex%c
z<FFXxNdQ115q-{V8!*Q5Elg`%pW;58BMbu6YB%xRbI)ZSz{0}9y0v1YCc8g(GID<_
zUNbd0hKEOR=+GgIkB{TPfdd#C8blZbS(HA<g-m_O;(IL>he%0dX&t^4$xQ#&%L~#U
z_88)pEnBisl;|vp>(yv0tCn5#m=-aB;o)KI+_@85w{Gp(MzEV*3w8URQ#-a=tzzre
zt=P70TSo0@_L-|?q_tA1U~q6St1Le<GSWspzP<qUk`}5~tJt<}8@6xXo`p1;!+}cd
zm+3_qW7xWNtF)E%7i04Ze5xD<1_m%RG=!m{Ayli?3`{H|NYye?@Kn8}g4ArqhyLh&
zO_U}SRIAmdSc;_t2#85YDOb3!O>Qj#678a9DXyh#pcL!r3(jXlkeV6QW-ic5xW7L(
zpAdCLfLgskf85%`=}$p_^aZFt`U2D+eF5r^z5w+{fAj^YKh|;lKg~ye_+~ugC;$Ke
M07*qoM6N<$f;?c{IRF3v

delta 780
zcmV+n1M~cnNtgzZ8Gi!+007XK5{du-0QOK!R7Kz4-~a#r0001hfPf$%Aolj{?d{v=
z=g-sAyWHHk(9odB$e8^6`T6<t_xJDO;>FI+oWQ_<^YiE6;K0<>sL05W>gv_j)~v<F
zio(K#`}_Cx_3Q8N-`?K5%*>eP=FQmHu+Pt)#>R~B@ZsU%!+-w%{rLFt>FLwe)vDv;
z$HT*hn3#ZETtrAnFg7+M8yga^uz;ADXpoR#Y-~uDmSk5~Iv5xb5)upv2?nUBaD;?d
zU|>KbBpAB7e6g{1etuLxKPsG@Xl7<aFfbq<9uy1=2(GSllape2cu-4AGA%70T3S4T
zfmT97EEN?F1AhYoR8%;(w|c<S(%b+500DGTPE!Ct=GbNc0004EOGiWihy@);00009
za7bBm000th000th0n7%(UH||92XskIMF-sl5Dhd8K*>=t0004-Nkl<Zc-rmUi*3U&
z5Cl=rvj3g~2Z3T6v?TtI<V^*yf_Xf=J|SZsBnQm|;(rN}gU&opkR6gS5F8*m=&R=s
zBnR0C@eY!MzIYCh92EEbgXEy7=LIAO*#!{?$w3j%8)y{C7zj>4a?q#e6C?*&191h?
z<{+*?+8V?ikTwQ!52TTvC`b;n0pdQW56Kt^l0e!HL@G#|fk+3*K_fxrfV2^aJdm~l
zkqgo$Ab;{fa?l76C7>20V<0F5X>kzcAT14|21pL-2ciy0%Yvu{(xM>hf#jebAZmiN
z9ti4!ib>W$)CXxP5G_D*P&*K9Kw1VwE07ie(GH{~K(qwOLG?kj1!;B=v<4-TtbynO
z(!?P8fYj2H1(Jj6fanL(lpuP7G$Dw-AWa9NH-AVDDgr@&&?(6ph%q2d17Z|NlYkfp
z((<72TV+rg=BS>i0;T{}?g<wai)vzWP}!c4TBfKCCIyw~3B{#}CIf|9-3E2A+)-VD
zLc7jEeJy9GFQCw`C}<QWrg{T~fxUvpYhF<{LBUMMW@_H8egFV>L#=biR&oFU002ov
KP6b4+LSTZfvsT{#

-- 
GitLab