From d0f44c47b884d9afa6c1915ea00733ea239b9fac Mon Sep 17 00:00:00 2001 From: Triceraptodactyl Date: Wed, 25 Apr 2018 12:42:33 +0200 Subject: [PATCH 1/3] Generation Processor Formatting --- .../Scripts/Generation/GenerationProcessor.cs | 441 +++++++++--------- 1 file changed, 213 insertions(+), 228 deletions(-) diff --git a/Assets/Scripts/Generation/GenerationProcessor.cs b/Assets/Scripts/Generation/GenerationProcessor.cs index d50ef1c..2127032 100644 --- a/Assets/Scripts/Generation/GenerationProcessor.cs +++ b/Assets/Scripts/Generation/GenerationProcessor.cs @@ -3,255 +3,240 @@ using System.Collections.Generic; using UnityEngine; public class GenerationProcessor { - public enum ExtendedTileType { - BorderOuter, BorderInner, BorderSingle, Ground0, Ground1, Ground2, Ground3, DoorInner, DoorOuter, Rock, RockL, RockU, RockR, RockD, RockLU, RockLR, RockLD, RockUR, RockUD, RockRD, RockLURD, RockLUD, RockLUR, RockURD, RockLRD, Flag - } - Dictionary prefabs; - public GenerationProcessor(Dictionary prefabs) { - this.prefabs = prefabs; - } + public enum ExtendedTileType { + BorderOuter, BorderInner, BorderSingle, Ground0, Ground1, Ground2, Ground3, DoorInner, DoorOuter, Rock, RockL, RockU, RockR, RockD, RockLU, RockLR, RockLD, RockUR, RockUD, RockRD, RockLURD, RockLUD, RockLUR, RockURD, RockLRD, Flag + } - public GameObject ProcessRoom(Dictionary tiles) { - GameObject root = new GameObject { - name = "Room" - }; - foreach ( Vector2Int v in tiles.Keys ) { - ExtendedTileType type = GetRandomGroundType(); - int rotation = 0; - switch ( tiles[v].type ) { - case Room.TileType.WALL: - type = GetCorrectWallType(tiles, v); - rotation = GetCorrectWallRotation(tiles, v, type); - break; - case Room.TileType.GROUND: - type = GetRandomGroundType(); - break; - case Room.TileType.DOOR: - type = GetCorrectDoorType(tiles, v); - rotation = GetCorrectDoorRotation(type, tiles, v); - break; - case Room.TileType.ROCK: - type = GetCorrectRockType(tiles, v); - break; - } - GameObject go = CreateGOFromType(v, rotation, tiles[v].type, type, root); - // Todo dirty hack - if ( go.tag == "door" ) { - go.GetComponent().SetToOuter(GenerationProcessor.GetDirectionVector(tiles[v].position)); - } - } - return root; + Dictionary prefabs; + public GenerationProcessor(Dictionary prefabs) { + this.prefabs = prefabs; + } + + public GameObject ProcessRoom(Dictionary tiles) { + GameObject root = new GameObject { + name = "Room" + }; + foreach ( Vector2Int v in tiles.Keys ) { + ExtendedTileType type = GetRandomGroundType(); + int rotation = 0; + switch ( tiles[v].type ) { + case Room.TileType.WALL: + type = GetCorrectRockType(tiles, v); + rotation = GetCorrectWallRotation(tiles, v, type); + break; + case Room.TileType.GROUND: + type = GetRandomGroundType(); + break; + case Room.TileType.DOOR: + type = GetCorrectDoorType(tiles, v); + rotation = GetCorrectDoorRotation(type, tiles, v); + break; + case Room.TileType.ROCK: + type = GetCorrectRockType(tiles, v); + break; + } + GameObject go = CreateGOFromType(v, rotation, tiles[v].type, type, root); + // Todo dirty hack + if ( go.tag == "door" ) { + go.GetComponent().SetToOuter(GenerationProcessor.GetDirectionVector(tiles[v].position)); + } } + return root; + } - public GameObject CreateGOFromType(Vector2 v, int rotation, Room.TileType type, ExtendedTileType t, GameObject root) { - GameObject tmp = null; - if ( type != Room.TileType.GROUND ) - CreateGOFromType(v, 0, Room.TileType.GROUND, GetRandomGroundType(), root); - if ( prefabs.ContainsKey(t) && root != null ) { - tmp = Object.Instantiate(prefabs[t], root.transform); - tmp.transform.position = v; - tmp.transform.Rotate(new Vector3(0, 0, rotation)); - } - return tmp; + public GameObject CreateGOFromType(Vector2 v, int rotation, Room.TileType type, ExtendedTileType t, GameObject root) { + GameObject tmp = null; + if ( type != Room.TileType.GROUND ) + CreateGOFromType(v, 0, Room.TileType.GROUND, GetRandomGroundType(), root); + if ( prefabs.ContainsKey(t) && root != null ) { + tmp = Object.Instantiate(prefabs[t], root.transform); + tmp.transform.position = v; + tmp.transform.Rotate(new Vector3(0, 0, rotation)); } + return tmp; + } - private ExtendedTileType GetCorrectWallType(Dictionary tiles, Vector2Int position) { - int groundNumber = 0; - Vector2Int toCheck = position + new Vector2Int(0, -1); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL ) - groundNumber++; - toCheck = position + new Vector2Int(-1, 0); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL ) - groundNumber++; - toCheck = position + new Vector2Int(0, 1); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL ) - groundNumber++; - toCheck = position + new Vector2Int(1, 0); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL ) - groundNumber++; + private ExtendedTileType GetCorrectWallType(Dictionary tiles, Vector2Int position) { + int groundNumber = 0; + Vector2Int toCheck = position + new Vector2Int(0, -1); + if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL ) + groundNumber++; + toCheck = position + new Vector2Int(-1, 0); + if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL ) + groundNumber++; + toCheck = position + new Vector2Int(0, 1); + if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL ) + groundNumber++; + toCheck = position + new Vector2Int(1, 0); + if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL ) + groundNumber++; - switch ( groundNumber ) { - case 0: - return ExtendedTileType.BorderInner; - case 2: - return ExtendedTileType.BorderOuter; - default: - return ExtendedTileType.BorderSingle; - } + switch ( groundNumber ) { + case 0: + return ExtendedTileType.BorderInner; + case 2: + return ExtendedTileType.BorderOuter; + default: + return ExtendedTileType.BorderSingle; } + } - private int GetCorrectWallRotation(Dictionary tiles, Vector2Int v, ExtendedTileType type) { - switch ( type ) { - case ExtendedTileType.BorderSingle: - Vector2Int toCheck = v + new Vector2Int(0, -1); - if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) - return 0; - toCheck = v + new Vector2Int(-1, 0); - if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) - return 270; - toCheck = v + new Vector2Int(0, 1); - if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) - return 180; - toCheck = v + new Vector2Int(1, 0); - if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) - return 90; - break; - case ExtendedTileType.BorderInner: - toCheck = v + new Vector2Int(1, -1); - if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) - return 0; - toCheck = v + new Vector2Int(1, 1); - if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) - return 90; - toCheck = v + new Vector2Int(-1, 1); - if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) - return 180; - toCheck = v + new Vector2Int(-1, -1); - if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) - return 270; - break; - case ExtendedTileType.BorderOuter: - Vector2Int toCheck1 = v + new Vector2Int(0, -1); - Vector2Int toCheck2 = v + new Vector2Int(-1, 0); - if(tiles.ContainsKey(toCheck1) && tiles.ContainsKey(toCheck2) && tiles[toCheck1].type != Room.TileType.WALL && tiles[toCheck2].type != Room.TileType.WALL) - return 270; - toCheck1 = v + new Vector2Int(0, 1); - if(tiles.ContainsKey(toCheck1) && tiles.ContainsKey(toCheck2) && tiles[toCheck1].type != Room.TileType.WALL && tiles[toCheck2].type != Room.TileType.WALL) - return 180; - toCheck2 = v + new Vector2Int(1, 0); - if(tiles.ContainsKey(toCheck1) && tiles.ContainsKey(toCheck2) && tiles[toCheck1].type != Room.TileType.WALL && tiles[toCheck2].type != Room.TileType.WALL) - return 90; - toCheck1 = v + new Vector2Int(0, -1); - if(tiles.ContainsKey(toCheck1) && tiles.ContainsKey(toCheck2) && tiles[toCheck1].type != Room.TileType.WALL && tiles[toCheck2].type != Room.TileType.WALL) - return 0; - break; - } + private int GetCorrectWallRotation(Dictionary tiles, Vector2Int v, ExtendedTileType type) { + switch ( type ) { + case ExtendedTileType.BorderSingle: + Vector2Int toCheck = v + new Vector2Int(0, -1); + if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) + return 0; + toCheck = v + new Vector2Int(-1, 0); + if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) + return 270; + toCheck = v + new Vector2Int(0, 1); + if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) + return 180; + return 90; + case ExtendedTileType.BorderInner: + toCheck = v + new Vector2Int(1, -1); + if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) + return 0; + toCheck = v + new Vector2Int(1, 1); + if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) + return 90; + toCheck = v + new Vector2Int(-1, 1); + if(tiles.ContainsKey(toCheck) && tiles[toCheck].type != Room.TileType.WALL) + return 180; + return 270; + case ExtendedTileType.BorderOuter: + Vector2Int toCheck1 = v + new Vector2Int(0, -1); + Vector2Int toCheck2 = v + new Vector2Int(-1, 0); + if(tiles.ContainsKey(toCheck1) && tiles.ContainsKey(toCheck2) && tiles[toCheck1].type != Room.TileType.WALL && tiles[toCheck2].type != Room.TileType.WALL) + return 270; + toCheck1 = v + new Vector2Int(0, 1); + if(tiles.ContainsKey(toCheck1) && tiles.ContainsKey(toCheck2) && tiles[toCheck1].type != Room.TileType.WALL && tiles[toCheck2].type != Room.TileType.WALL) + return 180; + toCheck2 = v + new Vector2Int(1, 0); + if(tiles.ContainsKey(toCheck1) && tiles.ContainsKey(toCheck2) && tiles[toCheck1].type != Room.TileType.WALL && tiles[toCheck2].type != Room.TileType.WALL) + return 90; return 0; } + return 0; + } - private ExtendedTileType GetCorrectRockType(Dictionary tiles, Vector2Int position) { - int meta = 0; - Vector2Int toCheck = position + new Vector2Int(0, -1); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK ) - meta += 1; - toCheck = position + new Vector2Int(-1, 0); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK ) - meta += 2; - toCheck = position + new Vector2Int(0, 1); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK ) - meta += 4; - toCheck = position + new Vector2Int(1, 0); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK ) - meta += 8; + private ExtendedTileType GetCorrectRockType(Dictionary tiles, Vector2Int position) { + int meta = 0; + Vector2Int toCheck = position + new Vector2Int(0, -1); + if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK ) + meta += 1; + toCheck = position + new Vector2Int(-1, 0); + if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK ) + meta += 2; + toCheck = position + new Vector2Int(0, 1); + if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK ) + meta += 4; + toCheck = position + new Vector2Int(1, 0); + if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK ) + meta += 8; - switch ( meta ) { - case 1: - return ExtendedTileType.RockD; - case 2: - return ExtendedTileType.RockL; - case 3: - return ExtendedTileType.RockLD; - case 4: - return ExtendedTileType.RockU; - case 5: - return ExtendedTileType.RockUD; - case 6: - return ExtendedTileType.RockLU; - case 7: - return ExtendedTileType.RockLUD; - case 8: - return ExtendedTileType.RockR; - case 9: - return ExtendedTileType.RockRD; - case 10: - return ExtendedTileType.RockLR; - case 11: - return ExtendedTileType.RockLRD; - case 12: - return ExtendedTileType.RockUR; - case 13: - return ExtendedTileType.RockURD; - case 14: - return ExtendedTileType.RockLUR; - case 15: - return ExtendedTileType.RockLURD; - default: - return ExtendedTileType.Rock; - } + switch ( meta ) { + case 1: + return ExtendedTileType.RockD; + case 2: + return ExtendedTileType.RockL; + case 3: + return ExtendedTileType.RockLD; + case 4: + return ExtendedTileType.RockU; + case 5: + return ExtendedTileType.RockUD; + case 6: + return ExtendedTileType.RockLU; + case 7: + return ExtendedTileType.RockLUD; + case 8: + return ExtendedTileType.RockR; + case 9: + return ExtendedTileType.RockRD; + case 10: + return ExtendedTileType.RockLR; + case 11: + return ExtendedTileType.RockLRD; + case 12: + return ExtendedTileType.RockUR; + case 13: + return ExtendedTileType.RockURD; + case 14: + return ExtendedTileType.RockLUR; + case 15: + return ExtendedTileType.RockLURD; + default: + return ExtendedTileType.Rock; } + } - private ExtendedTileType GetCorrectDoorType(Dictionary tiles, Vector2Int position) { - int neighbourDoors = 0; + private ExtendedTileType GetCorrectDoorType(Dictionary tiles, Vector2Int position) { + int neighbourDoors = 0; + Vector2Int toCheck = position + new Vector2Int(0, -1); + if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) + neighbourDoors++; + toCheck = position + new Vector2Int(-1, 0); + if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) + neighbourDoors++; + toCheck = position + new Vector2Int(0, 1); + if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) + neighbourDoors++; + toCheck = position + new Vector2Int(1, 0); + if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) + neighbourDoors++; + + if(neighbourDoors == 1) + return ExtendedTileType.DoorOuter; + return ExtendedTileType.DoorInner; + } + + private int GetCorrectDoorRotation(ExtendedTileType type, Dictionary tiles, Vector2Int position) { + if(type == ExtendedTileType.DoorOuter) { Vector2Int toCheck = position + new Vector2Int(0, -1); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR ) - neighbourDoors++; + if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) + return 270; toCheck = position + new Vector2Int(-1, 0); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR ) - neighbourDoors++; + if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) + return 180; toCheck = position + new Vector2Int(0, 1); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR ) - neighbourDoors++; - toCheck = position + new Vector2Int(1, 0); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR ) - neighbourDoors++; - - switch ( neighbourDoors ) { - case 1: - return ExtendedTileType.DoorOuter; - default: - return ExtendedTileType.DoorInner; - } - } - - private int GetCorrectDoorRotation(ExtendedTileType type, Dictionary tiles, Vector2Int position) { - switch ( type ) { - case ExtendedTileType.DoorOuter: - Vector2Int toCheck = position + new Vector2Int(0, -1); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR ) - return 270; - toCheck = position + new Vector2Int(-1, 0); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR ) - return 180; - toCheck = position + new Vector2Int(0, 1); - if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR ) - return 90; - toCheck = position + new Vector2Int(1, 0); - return 0; - case ExtendedTileType.DoorInner: - Vector2Int toCheckD = position + new Vector2Int(0, -1); - if ( tiles.ContainsKey(toCheckD) && tiles[toCheckD].type == Room.TileType.DOOR ) - return 90; - return 0; - } + if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) + return 90; return 0; } + toCheck = position + new Vector2Int(0, -1); + if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) + return 90; + return 0; + } - public static Vector2Int GetDirectionVector(GenTile.Position p) { - switch ( p ) { - case GenTile.Position.TOP: - return new Vector2Int(0, 1); - case GenTile.Position.LEFT: - return new Vector2Int(-1, 0); - case GenTile.Position.RIGHT: - return new Vector2Int(1, 0); - case GenTile.Position.BOTTOM: - return new Vector2Int(0, -1); - default: - return new Vector2Int(); - } + public static Vector2Int GetDirectionVector(GenTile.Position p) { + switch(p) { + case GenTile.Position.TOP: + return new Vector2Int(0, 1); + case GenTile.Position.LEFT: + return new Vector2Int(-1, 0); + case GenTile.Position.RIGHT: + return new Vector2Int(1, 0); + case GenTile.Position.BOTTOM: + return new Vector2Int(0, -1); + default: + return new Vector2Int(); } + } - private ExtendedTileType GetRandomGroundType() { - int num = ( int ) ( UnityEngine.Random.value * 4 ); - switch ( num ) { - case 0: - return ExtendedTileType.Ground0; - case 1: - return ExtendedTileType.Ground1; - case 2: - return ExtendedTileType.Ground2; - default: - return ExtendedTileType.Ground3; - } + private ExtendedTileType GetRandomGroundType() { + int num = (int) (UnityEngine.Random.value * 4); + switch(num) { + case 0: + return ExtendedTileType.Ground0; + case 1: + return ExtendedTileType.Ground1; + case 2: + return ExtendedTileType.Ground2; + default: + return ExtendedTileType.Ground3; } + } } From 359437a7bd8f84c556911cab1e58b24eaf1a28db Mon Sep 17 00:00:00 2001 From: Triceraptodactyl Date: Wed, 25 Apr 2018 12:46:12 +0200 Subject: [PATCH 2/3] DungeonProcessor fixes --- Assets/Scripts/Generation/GenerationProcessor.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Generation/GenerationProcessor.cs b/Assets/Scripts/Generation/GenerationProcessor.cs index 2127032..a8672fc 100644 --- a/Assets/Scripts/Generation/GenerationProcessor.cs +++ b/Assets/Scripts/Generation/GenerationProcessor.cs @@ -21,7 +21,7 @@ public class GenerationProcessor { int rotation = 0; switch ( tiles[v].type ) { case Room.TileType.WALL: - type = GetCorrectRockType(tiles, v); + type = GetCorrectWallType(tiles, v); rotation = GetCorrectWallRotation(tiles, v, type); break; case Room.TileType.GROUND: @@ -193,8 +193,9 @@ public class GenerationProcessor { } private int GetCorrectDoorRotation(ExtendedTileType type, Dictionary tiles, Vector2Int position) { + Vector2Int toCheck; if(type == ExtendedTileType.DoorOuter) { - Vector2Int toCheck = position + new Vector2Int(0, -1); + toCheck = position + new Vector2Int(0, -1); if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR) return 270; toCheck = position + new Vector2Int(-1, 0); From 18241d8fe2b3fd6dbe80f83a7729579fdc551d98 Mon Sep 17 00:00:00 2001 From: Triceraptodactyl Date: Wed, 25 Apr 2018 14:00:00 +0200 Subject: [PATCH 3/3] Door Graphics refined --- .../textures/FixedObjects/Door/doorInner.png | Bin 23123 -> 22725 bytes .../textures/FixedObjects/Door/doorOuter.png | Bin 34555 -> 34252 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Assets/graphics/textures/FixedObjects/Door/doorInner.png b/Assets/graphics/textures/FixedObjects/Door/doorInner.png index 37610ac3aef19c19747a2bb2acb5b53001275325..5d203d7801a2cba604d1d71b1413b90704c74437 100644 GIT binary patch literal 22725 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 d0|EAzrcME_i>-mfU!xfTEb literal 23123 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 JdnS0T`X9D&70Cbq diff --git a/Assets/graphics/textures/FixedObjects/Door/doorOuter.png b/Assets/graphics/textures/FixedObjects/Door/doorOuter.png index 7563f40f59188552f7b780a0884a068f7685665b..0f4a5b6123d4cb493c1db39d04dd2ab817459f7c 100644 GIT binary patch literal 34252 zcmeHwdt6NG|L=%Rwuqgt#-wsjHkwFO)YvgdDn&afmC&TS(p5Efl1s%_2&G8n7LjzX zQPg%RjU>^Hs39u4QPlZ7&sx)rY3y^(KfiOnub1_D$+|r2S)c3s^Legwz{p_b=wE5S zQYe(st5+>Irch);DU_i+$>DHEYvaus@ZU(+RU6$Ylu*D0J&DjGkDHPqE+iX0xZJq38@4=e9a`jrHt@E~xpim}L zRxe++-uwCc8r7Y&)zp12*PXu5J9A9*thTj%x;teg4$eOKYUYvfh)(n4zicU!>gZTv zcq{wH{q}|Tv^J+_jlos_{PR-+KPB)}0zW12QvyFF@c&u@@7iu~>{{frA4vlxG|Tv* z6bhSJ$%6})M;Hp&#Jz{h<_{T6DkH{%3R!{ZVRZ3C@KTrlF2$(@O4f0mzPTNb#zGmQ zrZ_HFP&=Es5`A%rzWCZF_}N6isQv&64g2X$IjDlQHXF!@TZnE^%*&nOZ`zuf@K^M> z5HYGj^d4N#PCGxU!MAucoYLgsPZ=U5j*D1B%yOcy=(}z#^;!4GPdm2t%QpYYT`Jmh z;UOUlBpCc!*j4mO8ISfYhzb1HAA0|w<#24V2UVeS;9I;e74FTUKtPc?OrEd zH5SzFB6%Gr$LrOhU^xROgX#EA(dC;8g57d$6-pnVOcg!^Ofur*NdY1ygoUGf-g#Rk z1`$kQYtDUFkg?zORk@qHHaz~WYQ9#Q6pI_UlJL~(i2mRzC`L-MMc^T zY;Y{!Bqc<`EnyOv=_P)^i8Va;+G#Th{u4PE3Fdk9QbUR#dp{isORO}oN9j*LDe^A5 zj59ctK`%{iu!?Y3|M&No+}7KD&=6h`u}li9<6=T2v@iao~|ra4Oc_-p`O}+c3^%n7HpCM;WOWXj7f${ZONKSoJ@qP>Qed;z1XO zPy9&rs=>AB0|GB6Xz^}!T}%Z7w~m{j652i@Lrf9OyV{hKY}Ms^$H8;#TB82OeA*H0 zR(Vdf>3zqD8xx@vUn$o`FF3X{#5(1@U^jS8^fMJ55|x{spCPl#y+FEOO(R_Kg<8o| zhbpLlig$R^nHiSK2`B9|VhqNNhqnkP65t2^dS4_{XVMsLHF&;AZ}ieNDy1M{v0`Jb zHh(^}DLTftJ4JR(ZUPhoIK^mibpR{@pGf5F-jw#)Xxz)KN|Ej@rA?_*pniUF3?6(k zG`$w}99Gnk8V>duv{j<$^&4b{*fKE{1jHi8=6G9By@HGn{!p*p8K(0>n_a$~i%yjZ zEIfqR6ANAhxr~~lBcse*kd{O}CMUhFH4N^%1~p=g=%F|lLu~^j^SQ<%K%}zY&XBSA zQ%|*kvH2*x#}6Lz$jiP1TFzn%YP#!Y1{4x7CdBQN%fX`>dN$?FYI=W@uLrUMGE|^& zMA<$=JXWl=1gnV;$TvP{_|JcaI^Sze{)IwGnZvj5g(Q^YIzTk}cLVYlO#sO%9Ua*= z6-h!IfMN)8<`|B!oo-uq6^9NCSmL-`qt*@4dL>e!IQU>(J~~p{R8JLsN}P%*hG{$A zESp+jAFxb0K`X`}DA2MrQ!Dn-aDW58^!ahGLqpxyWgE!x@@6$n=^aQcS69ufU-oqh z3aoFUizc5{{0SCA2%Y68}V!!}V)pnvP*rVILV4Z9+4tx?vVIBoxa=iJS5 zKy92qUxozwcT}nOG&f&f2i44b=9~@>b*>->&2Zc%5%7D0M^gDcls^qZFjjnEZ&%4b z@JROj1cj+nqhHIsiAJXOos|p#68@OXs<}GRu2&3@sj{~{CVh@{qRJiFH8gA~CVOg} z?LbcKQAbDi{hN$8L^TJy1r&5GFA7*TZX6RVgmro#m*A&KLVnHJdvqjFD0;k8>mAil zO~nbPn8b{6+4!>bad(BU4tmPkwSLkTwq87 z>tZ*ZegWy!G>5<3K|5uhi&sLyoARZ=7URXbV;?*nP^=3x_{B3j2C-VZdZw$N2Al{? zSO_Y1`JSw5?e3SWnf9tsH+8|9?3u?Gs2`=+Z+Ebebn9al#FtMerIy7H<&5wh$uns&K)J&Z7on8*gG%W ze-Ghf|D|}8LmdBuXsF?+G=NZ1o97QP$?z!bGgC1`G~thnAm?$8_-x};A97JiU}l7^esoZ zJsFcA>I>yqf$lbw7X6+O`pLigA#S1~bRaB}iN(5u%l|f>oN$(LN-ZGc_BjB zk0O!;=Ge?8vw;3SCjb-9`wAv!)A`6h%GGjpw2P>KPpC~u0s}@*YmczLx8+KO0Ib_T zw6v6topla{hQ_O>Hdz=Cm+L|2YrhvUiMoh=c7WbyYGq#65LKoU0xztC!P28|JchtR z^oX<{KdND8sR3@dAuAKn5WDJP<0t90${HW`Y@cZRzTGDI9`MZ5Bm9(T>{2XOuMP|F z^0G^T_p^>l(7tuI)(wXQ_Th6DG_-bqR2y6`0iL0z7e_VZtm%?^9X%SjjNAQv&?LbK zCl68=<|AhlIoR|6lTUY6+>~#kXW;wj;dt=Z06v!4CPHC;;#;f_^@m@ZFA+Yai1kB^ zcTu|^?6$?_hB?CSG9D2muvIhSO^#+~Yw6rptKSFC&fjo#h3)y+RF4aka5EE*Eu;E~dsj zU!|c1Wnw~7!PFQ{FWEkdVuwpY&NY-n}W~a5B1K4tENTNm}mdor51W-F9dzCM|Q{)lKDQ_FLv%QjMbh9 zilu8+tnar`o{{A66sq7cQz3FtYFL9V;!PhHWIT1NzYdS%9<(8pWSn?OT+QNs_>fGH z@vAEsEcVa!Oei9H7$r`XEqW8(-;+wUZS75pjDG*m60b%m#quCbzviS4tEO6TZ1*hZ zjrS9j;9TFpKo8b1ft49X^yZ*6*T6ZM39 zU-P3ap$0pKEzv-A&ixm+1DDy?Rvj_#(NYbtw!vH=Bw}l%(vg})jyR(kb3z@uI}aG^ z8Gr%_qaK_uS^-sIG^r^qu0c*uS6ViVzTq$37a*VIfz1k0_M8~Q*)>+io) zH$Z2PHBGF&Vndpx>oiPi27=uW5jqbvLhf#{Sq$GGQ4Y6jX5HetxVVf)2>2`d5Igfi z;wS0rs|Qj%QAoTv(bvYJ8H0!D6-m#l+iK2?lSoFFe zqbni*=3BpN$0{gA{SQBlB9tNA$@l99@p1B?8JJo?x4+Yv*kB>mBBN}nsja1fD%s2= z%A!S!_5rnVTxE7M2!S(cJ(E+mB^2Eg+bC=ceJ;5;5{b6avbzN9bU%I{B*Tc;Dd#06 zB@IXF{6(Oc@Ut{t^DUKc38U)-MX~y^ACXN{sdT!t3Ro*@iV5BobZ)Tk(RSNdlvXLj zbH)%{0!u^C@xcBB#82t0$x^i4{Xy5f9H&9ZH)!8#L1Q+UWi0f*V!$GF9bsBskfERx z3CXso7KrpGm42rn!&5Q#d~2d>(eF);$nt1drHE`CM~Kc=a047GQ%%L|W4I;N&bE8W zvpmSMjI@8O&-?4;M$q?%^5+7GA{2c)m?F}SzUhX?i)3uyce<(XH8eTg?y?rzePqY4 z+9{@2U$?Wfvy{j^cyED`;+N(xHe29y7Vcdq_+)u>z3%9EG9dg(`cA_p>FOz~t!;1Y zeG^@{rT4uMR(CtVpT9sP%MqrcFU6Hzce@6H+JohR$*M#}%iZ z$sF+deMwxR3#E*we}S9(42Ar76DCUR$uW`;dU z&_6KBP-=pNIuM+FQ1=eI0m4rhO3n_7Ksdo~DA-r%dbvLqs}6@U*sK_mr%Pr=$HYuT zEJ(fY>3NQOWe`NYY_7b9uveeC>!HeV_kd5mfbdX?J%m&WIv*I`p)?pB>l>XI8U1)z zZj(iS?=YfagMxnC8~iDPR`&72Ohl{oyB*Ww)~gn!)HshuwjfZLwOUw!r|0%n0E}B5 z)#Y@pZ{o~hMhIm6G*u`%e%YXg;`Ro@kJ$Gv?CU8|WtKO^FBt+X4M@E2nWH*^xwyxO zCf}Elm!}RTtmlW{g2v6)#@_Rh(Peuztbi#SmPfP-Vvg*^bIXIT5&%S3fLw59tIs(E zX{2K!8ysksT3?wH8qZQ?qBzd?a(+=Pt?kW6Mm3l>K(51{DpruwHjMtbqSx^)Z7;h|?co1#we-8$1yYVRY@Z zar7bl3?XhmvO20(rNYGAPG5OGi}V!Wx3shrW%QKcp8o#wdH%iIfqBk_4GI3bkVwzh zy%ysa$~^+lN$0!#vKn=ckeX&K)OBq^Xc85p3!b!MLdbDun%OCR`%qQZotk>=^&ptDFK)Xyp*%JVut?$GSZ!2fTg0i zLb?MU78b^B&nHaAYGb{#_Ou`*6znRyQ@EAQX+uC&5KU0JfL>r9z7+m(#g@>SC8`Q* zl1Bo2ERTJGbH3QXGtfaX05kh)f$iJBQPu<|JzrtX>5?Kg+~q!RDp>p=3-10vyvtF% z0P)_=evRWQ82*4(+w|jOV`Jq&Xmq{H6?*XtE+YFP1*m;abG_PaKc51C%mJBV?g(!r zjiO~kNS}l%6Lp)jCB(XQgUQ4pwhgNR!wEqNK_@D2J+CW`e$~HK9vb$0{C9+*Vk>Ad zFOw@B5R^cslSH{(aUc0I@8eE`K3tOk+V*+b_*`{DHLm2Xsm zwYU>)QA45Nn)<<4`WtrrW2j)e`(vvUo}1Y(*j(+d35S9aUEdioq}#W+kKl6v zz0_kBI}*4jx1vB2y4DH#xbVTTh(2=$W$WmhMmJ8V_vd$A1(rxg2Mm^wwQV;y*e!V+ zvgL7NQ{<7C_I*C5;`Dak(vPpf?@$wfRONSA0!hU-Vlah1+YdEb13vEx z86NAIjJG{`Lpd!G%LT;Yt}-$~N0VMSU94{F+I+Bng_|k zv)HVwsLzD#>?4$GBpwHzKR~HY;WgXPL_KBPm(<9NH#t|aV;lGxn;9Z8=foOp#hT+e zyTI5{gXn(B=4+^aYS?{AYEb0SDFYmc$S~FYNwC}0L%PrWW%ty0$wILKKNQ6_)V{HP zUz<(8ia}`BUxM^R;FENlPHmm4mhDbZll5X+%;PJjzZ1m44HA)YdYYr#32C9b`ik(W z2_0v$eY%k*)YUYD7vYc*B0=-dw4gz&IgWdl&Fn66z`V|<`GXQsx6!W^*Yl1jPDhY1 zU+{S$&umyHH^gMDt<;MT5WD;54Lx+XzzETh!pzUepihP~?+0%lkB!=m%#=uT)p~5> zuT?q>1!Ft-XKsUb@^v8U2WEHRGIT|32~E6rI|22^676U*{XsHjGwq&)ZLUm1-Lo`# zqANi4b6LgRX!q6&@Bzvgoc{owOm2_nnOKRn>)Ak)V_U*LYSvnk?Q$L1CyjULCT>1G74oeG+ zPK-5ydO0ucQBWx3m2I4N0>xe7)P#A?w^iQh;g1Dh4(;~^-0z8pIw)UXqIL}>(k9Iu zb-Nhdd@f0i$L;Q9ujb=LF;SD@sZ=Ge=1`5wym?XxjE6gRl%mmjIG@%G3!}&7-b!)yH{n-6ykKO91bv)51!p)BL+FALsJm zMSwz!_||zgDd-u#$VPn~fQs?l?7MDL%oG5^Bje{wB+hQCZYq4-K z7Us1Eo~UU?+IZPlBc1>j;rnANQKAtxX4^AMnpZ%8^JI`dw}Qzr!&a56)A!(nigbQo zXLIEm#piPmr!Gd{1hKTNXx-d~&I{Fj)0dRKLfuf*TLYxzZc?yw12=KiS2U-}+U{08 z6E{6S;G6IMj+Q{bdEujOe}Wg{Txl`Ni?aBHad|bbGRDq14DO(&DOJV0iX4L`k0kA8 zA$hzQ=nSd!vaxVjAG#t`)iM3WX2lm?4|+=jhfYAxbjx`Uv$(mNK*!*+q0H9f#TzF9 z%PbE*UBEniU#xnaE@8$yDhE(i;`xN8WQ+vh}@5qh9~MP0&s>C*xEP^ee9URG@_Bg&yd z>kMY=gktO$zz^I2h39UXB>UGJH=w#V*U!cxl-m(yc_Dv7^Gi3M=)34P7h+^jU6!JL zx9(ebgNgIK0ngL3?{FpyZtC0!aa_h$2H{oLHJyG?c*L{5Rad$#_@C%Qb;-%)_MYt+ z`_&ptnTrSGQIZ6!EZ8e1KYLGy%vJv4C|roRkzDwQ|e27c@5 zoPH`~f9IJ)4S!&Op@eCZTu{_}eZsC*fZdewwy9;Ic~gvdX#hLY<=7f;bD^c|Xr9t! z6gc;3VFTeNfDA*`g*+5EL>@^v1E7W)-}$5RdXl~NtDd68N4SqUboU%jNG6a=D_-Gy zCYSeSVGnfw%g;i7%H{o{mW2|2%(4(U7cb$S_Qa8XlAV=XmM)n`Ko206HD4{@RRKOe z6aPp-m;?_z;)S5}jT-_5&dr>gkS-_`O~>u0Pj(oZSIRXnl_l*Hha=f)Le`+;4k53K z<1UMrCU6M3&Sqx37hkZ6(4*7HJGR1cMX;}z-wL@U7g0Q7D&}ynUA=lHrwxS&wH`Vm z@XOXc;0G`b(S}xo(j(BsM1(Q1bB=(C6eYE^FVkomTky@((K^FS`elWZtmg>`Ml=YO zhnXR6YJ~K|#sGF@uW1PA`)bcZlH0R~sIH91fa(D0U%e_Q1N&Qk$$$6J$fK)`b6O50 zD)04;o!j~{z{jHb^$?0R%oL*K<}kaR0SpjxC%C*5Cr%hn_y^2_CXeXFU4IB5wyB|b zgG0=$O<-fIk&P`l9q5AUdkY|U7}{%?#g@A*m_3L;5LrO8OIN{l8E@#qo|au5iaG(_ zN8mb+J7PyiO@f=OtgOOx2)-8r=R$ARzKi=+_kHlxI)rS_tMA1vq{<>)fX<{UY!o1M zM!eU9hB@INtFSRN|7QcZjtEWxTqO+SzKPrr{RP6{x_ga9Nd^sNE~Qua9xgcXKz zU)rp9HYeAYYV38*|4*-m@(h#nv(}b>?X;_5cHiCd(ea^yJ&zs;UDz{$W9-I37xXHSW!>< z_MzG#fD8lxBO4*+(15U!)vkf6I5rjj4UHfpnY{=0`W`lGJ(Gj8g5l?(w3mvnmns;) znkLS*L1SpL19%TgNgoy-LZkCD@5~}n){mtEkf>*YZCb|npTOCG;5{MHB6b?jg5SMA zc9)eprn9B%p!yO^l<$Cy*v$N#oZUOuVaFSo=ZD&I#MCmn{H~PuBmZ`mRBY;B3Ao*0 z5Q>`GI`@Nx#U?aDoR|b@rior+@r657UCAjhqz_W02Gt%q$seR3!U8!+K?GHfM{XAV z>LD6c&TuODlu10XbO59W>?4SSI>?e=qhCiW-pWv!a4007cWZP1?`3zTZOhb3BI;by zH|fI52XC6qG3aYwnJoMoVg@JTAR%Bi?$-4fjgQ_)1R~8=9D0h*`#y?sbce@3Xrq*O zrO;af`+MuG0_}Sj+BV$-*R(!w{$1w>=moxnOakhWw6PO6&6~2##}kbtZAG3APy+v{ zX>$6jGIgtmouh}IJA7i@g1>66)246Yq^=lt>e9@$%ID5~a9Ui=yX#>$$;kvA2Y^c_xF@{#Pw@U89b^VEF;K#&!6kG+q=6IlX zk;uVLeB+tD^sAd?rHWPGJ4<+4-z4_!w&#s+cDeyy6jp{72!Mi15oFMJgRDq*H;kInDn!;+P>;NI&mlC6E0nho5o~a`*pUd*Du8BF&!* zAjA;mzn7z*TnI~mIRB~5pK=hkil6rI(;j}>gRlgC+Jmq(e&WMVd-!P&!V)0uA#I7D zYwl)C)Z-w5yBKhngK&3^rT8A0VGV<8qn!Jnz3XWkn!NzXAo?=|9RoxsPKUmd7!p~( zg+libad_Ld_W3;jCyO$sZsOX7?R%#FI`+5V8H>iRs@;C5qc`E!s)*kc;toV^Nnn}0 zSISBsxj&u#)ko&H(CbU>wx3z~$Nj&;V%&4@9(IFnNdB>GmrlTz)T;A&t!rV(fD+DY z&F?oLd(7ZkFlmgUgXanH-{b#3Ik5}I<`U7Rsu~mhhhG*<|5VWOwHw=g(!1{yMvz{3zaJ6}Q_{F-4%AfB9bPL2t1=6k%TzVP%E2vF@W zFp?EfK9M>pv*2qIXdv2h2_RM27^EJ-C`@6)kmyag^E zNF87!ssqEMp-e2OL>rY+4SLG<)ZyjRZ$`IoIrnwX3LrFv0h&{|#?8G=>ghX1@lY!= z2wSx*RGL0_6Ix`I1g^Iu`C_Y|Nl=CjX76D%GsK=C258g-$bnh#}D0qaaO|Dj!g6B>HYII z?ZZZ&G6^w}!OhJSFoA?lXiJz0>>?^P+6^q~aGBtt%r8Tc#6j6ZXf<-xpvJH`$UqUH_H|Tbbo-OS>Z7=1JYNwAQ$d(Ifqm~`6&IR4E6tyu zrM;ODKzn*8Oayd)?x;R<_{xKyMj$oAYhX8vGQeJF@>_^et`Jgmaoj1SR330A4skcq ztLnK0D8nVbP54fuC-6Y{&cJ2{Tv`nx&MYx$LeWCygzTo}kLgm0dXi~R$3AM9nEwmO zBtbgyWzuVj(MHTlGQsz@=1>ZAH1>4LWJbK7JJJ@3-8gQZTZpZmBdawx^m1AvL}h8u z{UmRGXSpx8g|&=sL3$mSI)h#V!4e;!1aw>pcGGCOS>>o7w)&pN%8~e6?A%)@VzoZy z)mDQWvOIE}(Eu?qo{BYeld$d2G0t^$DLC3~3{Q-lf4{*wJ9jDe?9gXxKqq}+q;Lrq zbJ6HCK>@3Sg{BvrG}e3D*jQu(y2!s-LLl6F{ng2x+()r7G4j7Z#LhehO-G8Y;**0^ zi&*N*NO!5zgxPIq(&fq>9V*xdZ&iHoEyl(&Y~x-#i^Uj97Hfh{^q&mei}~SK02iQU zbHe!FUs@pH?G}Z-g)#(T&AaAU7g#fe=8rRX5DpIRga8g~6)D+T@eG=F60Lr^#Kpx# zZ#BT%yb*uuO`LIG(G2-hC|YmO>YtCm4AEHZfPscEb~Ky9I<_{~FA0RArH=iaqrHpC ziGCB^El+|Q05mqT{ahX&?T8tCq^onzI>L<7)yg#!WlfA6Y8)a1yZeDY#xPpUibVp; z#+Acl*Fm;D$-MihR;9T~UH9RDWUNS=g2h@|e$Ip(^!G9CO2b-8J|Ka^+Zc1OXONRs z_;eLNnK;B`gPzaR59u|vXXb#@QrKe&i1XZ& zaxTswIyKEZ)(A@AW5dZweyU~&$U>7BNHorF$|)%!zC!umePz~}R4k!ypNXWBs}*UC zT=F6JiFvyJT%c6{B-3uf{|T4lKs)1)8GB})Mxaa?8%Mx5Ws6#mtV>_wT#df?zJ!Z6E_I*wq7`vG>%Xma$02V=po;XgdQE6CF5RyAi8 zlpK<0-s46ZpUDZU1AC>+ z`EC>+K@D~RoQaNt8ME#$N34KiIQt}Mz%YaSg;NbvwSOaW_J-`Ntodl*6@x6Mm~Avq zMFq{7mb~V7FUB1uNK1UOjrC~zZlk@B>KP)*B$!hZtn@+4Q6}d&Th-y5XwkYcmm;@F zLdD-v#`2h1$3rXHfHRhdB>t#LS&M6I(K9GIc^DSf0HFl+){PLh$LvV9>W2l001*_) zXS~+h+y#@-seo)sSYHV&ih;Y6bGpo=*XyaGsn?P?-6u35pgSsD7IrR^ySn(eeBeLj zQDB@Y<7qMVgb1fF;;ldzgvG-7=FPJCzgQ=Xm$7RVViG_OWQ0~U5mX7~ z-gLR-ar9pTP{aZ0!XGRIfu`qhH%}{EL^hN}R}a&FhgAyQ{*$V1AoOm)auD!J z2%s@uzF}EU;!n@;`tl#{m`(aU_ReyE& zH<#AMQb98H>9=ZlXWX^#ILJZN*rBHRlJ@P>r^jtT-fCFK}Mj>xyM8LCmV|v@Nomw{K%!IPXSH;U*f@LzhdcJ;1 zMYF?c@=Rx#=C!5}3`b3K7{(-&tig2ciLi+iT_a{3eMOq7E~*_fic3W4^Opk5Z2H#Q zy^r%A>Dc<4Vlu@%oLxGh_BKpCFy$GABNCeFYrVOY>KN9*?lD&q9Vt=IFBS+ka@O9hqJSAC@e zodb(UzGiW+UAu->0|8;!Zpl@OCs^H|b7>7g=MP}vBcg?DmI(ZOgv?=aE@2Y`jZuRq0ikbHod-nQo_J#Y_%B`J8*Ai~G+9(b(t^ChE-SO&uaNPtbFu;=#pX4OE-)?fx7%AVqIH$~{sU<`U z3X{}T5KBEtb137L;ystvK#sKlLlw~ms5jU=;W-2@{2Kwah&dm7j$cOn%QF$({GKP8df&{A;lbuo(21oWe&g_{C^W%(AmC zFrPL#OEK^QY8!Lpe~82@wd|NoZ&fvtN<*PC{^I&1BUiB#3C}0N*MaZ z=G4lZ4!KC<=%-Te-%gT?0FL<8z+~#4Tv%Or1XUJ8Y4Qd)95{z1N^s73f0M~j8x%7I zS?Ma}UF-h3((0FlM22}R<1Hx2KuZv%h ziNs4{)0l*X5>qdxY43_Cii8?T+Vbr-f*nCSuLG98=%Q+%m4>(F_|s-Wk<-V+M@;l? z{RJeDjUCZtp_DnrESv_Q;4Xek2RCSnslLxTP$#`p@Ljx*I_U>4v!ZEpO1zJ6uv$Y|hw2C4y_5Ky{bpZdf z;6)<;#C%NBbr=>}G91KD*ga`W$i}fSi-XOm-A6yvs8rEPx8imyUul-{?yUoR+YE_@ z_4U}&l_;pAfjxs2233e2lM_{CAsY5>Nv?RSAGNj@o=5z6M<<36Gz8X`R*i*Xm{@_Y z5f1oRe?n1}g0`i4H+aFrLwKbHkc}0A7ai~|thZu?&s5w)7cHr?16kQXl31;^bm>A+ z4{Se5L1qbOaomyhuU}7xz0j!efbM7cTIo;J^{$n0;JS?>xWd4OeEhWn-%i77N+eo- zWSz4@>r=y`aHx#(he#8VU_xR?(ZN z&Egsw8lpWQ%=V(K<$BCeRrlai7I7JCOAg?-n)sYezfnPuv5u$o1u7D9PqYr*d> zqHa3t8QwxeXkI&HOdXI1uupb~Y+6hH41|Vfe1CUcAQ}UlWAKdZ>W)TUDGX3{9%v&e zxQRoD^?2wgx%F>bDxMqFwfj`$y}&*eX_NkMDC zEc&UWWFod*L9}PDB2`V1NSOohWp?Qv>dn_oJFpXtFK9~J0j#o13#-5ycuS&@DG~SD zmYhZVBF2dFGl0T}DoVepnCZFQ-(%MtLPziYhFU*t=Auow6*LX^i?BRWD|qlQe}bEh zMFZ+o5er$98w)a&D$HZ5mwb5%7(S2{5`9cDMkEu^VC5igk?CG}D!F*L&U!c%>KYI* z?w!|$ZLUuN^158R?EniYOZe!gik8yz-3V_VT3jjK%GLoehi~uex}FROC)7Yh?+fq9 z)_5i6oy@f~&86@_Km?|&O{c3xAw6vC=t7p)o^hEndnPmJEbnRNuhYlr?)hy*?dlC% zH_1HAWv`rI-{+Bj>GGo?)Q6$T4tdG1Uq1Xs#H3TlpMGMxm!9cTa`Jf-qI~r;xW}Na zSvQ3By?G#82%f;xn+6J<%OHTW|)qj3FYL_?Im@?B^M6Z{Z{C=j!>*^}FgPjF5@ISnPOefS1P;`Us*efWnp zh*p77*pq_O8J#=5OREGw{xDeL7ixbSQ}pFt)qmQ~0+5j^A(4{Eb4cHLsB#jXiym?w}jc6$PH77bXX`l~ma4Dm-C->zvyp}~5ul;Pp zbg=|=bn%Jc|GG}zYo_A9+eo)0pT`m=g|;g$2MZRPL8fSm--g?~^ET|4*~%UnX^aw; zf%y}IvzlpUuWx7UAG>eC#CF|K_eaq1V!z?Sspk2$)r|s9)j4!=@TJxbv?+PjKU|BK%yC zA?j5Uo3qXo|4T9U7ZJ_QG>xWp`DYFxOe`tK1*+-<9 z;7q7l(!Ha{+5*t}>Y+7X;mPj_-)9TgD&BgaofcsaCJFKfmh9BrU_1RK_Y7YLp&-vU zqrq8aR8i5euU7DbM^FmOTL|Z(a=C%9?tUxOyx{n5`qkE~7N<)_H6J|lv=m-H)&`T> z!AAtL7gqKK54xY3$gp^{T)b0Jea@2}xj6~m_r-hw$E!KU^M@>WyA~b`1u=BhR{PQw zVK?WOl1WGj?L#!0vIAldeSv5E?+zeQJ+n0zoO9rqm#3!bjwLNST_#lS3cMpEP=S=` z#}gDoo0t9p&qYEzp$hY3Pupg$Q9jf0koZ*z{)b7130>l@;kLM~5<5$O=nfZ*OaOKB zrp~ia$$n`Z;4&8o+C@xi7;F?h3*je&t^-YdQ^h0w+)1I?@05IN+GGl#l#tE@DL~w> z_l7mYUVk7#f)x^b_(>iEuv#W1{tyoCKlUq**~~^q+hBpHKbwHRQld24=rtjquHsKs%%BTP3DInj>Tu0t;otObWGK z|1UpD^|zyW*qx>(J43Ij3F8s6iDyw^M+XeRPlUX*{@2wOS4~QN!uwCwKE^U5nB$w6 z&|E%tZ<+_)`Ej7l?=0X!7}H6RBpQdeRQIex(nj@s=h(63@C!W1vX6=Xjg=?wA;`6P zC>iNpN6`6WnLnJK{Bf<-L47DBqFv&97gjhRAbOID3dp|N2>->6T8d=qG35+O8?#b2 z_kOEI&cA5YcM%QlpyNVBkQ;IK-QQyfkd{Y(vr8Cn*w0i4U`8WiP()30&_xvdPL*v& z2O3fkibg^qs@wjfwMFZ7kcZf$q3o}%5;N;{e}mUWJ@l(hejT!+dghoSWK1H*`b%Ge z+{U?e#U3->J;LIiDLm%8@8I7hYhN?7e%%S}VW=K5g@iMKROathF2ALPp{C4?`o3vp#q>08f5QKf%Uo{n0n9cjM`~GeCs0o zs?i4cg{`pD%lG~bRg;N&n6nJuIpHSD<1|tMd!&ZArR+u*H^_&&@7Zmfi+U*e6_A5a zq|vr6UAh$Qwp~Bu2MKE7?ZrBy-;en>Bte4VD6N?}HldqnFo_2oTno{EP!*qN+|Uq^4*t(@4_`j`QzHI$}0l7a({3(H-68JBdKz(diJp=K;IFjEv gT;~5v+_^$o_>WlxH@q74{ZLk~Fj#)|59`1F7tu*Upa1{> literal 34555 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