Skip to content

Instantly share code, notes, and snippets.

@Thanaporn-sk
Created November 1, 2019 14:33
Show Gist options
  • Save Thanaporn-sk/452bf9ce35315765daa0f2d14e7d80ad to your computer and use it in GitHub Desktop.
Save Thanaporn-sk/452bf9ce35315765daa0f2d14e7d80ad to your computer and use it in GitHub Desktop.
Flocking
license: gpl-3.0

Flocking

This example is an implementation of a simple flocking algorithm that uses the dynamics of repulsion, attraction, and orientation zones. This example is based off of the algorithm described by Couzin.

The basic principle is that each agent has three regions in a growing radius around it: a zone of repulsion, a zone of orientation, and a zone of attraction respectively. By editing the sizes of these zones you can expect to experience different behaviour.

Color Key:

  • Black: point is not being influenced by any other points (no points in any zones)
  • Red: point is being repulsed (contains points in its zone of repulsion)
  • Blue: point is being influenced by attraction forces only (contains points only in its zone of attraction)
  • Lawn Green: point is being influenced by orientation forces only (contains points only in its zone of orientation)
  • Turquoise: point is being influenced by both attraction and orientation forces (cointains points in both its zone of attraction and zone of orientation)

Controls:

  • Use the Play button to start animation
  • Use the Pause button to stop animation
  • Use the Next button to do one time step of the algorithm.
  • Clicking a point toggles display of its zone radii and direction line.
  • While paused, points can also be dragged around and positioned.

Dragging/Zooming behavior forked from mbostock's block: Drag & Zoom II

forked from lwthatcher's block: Directional Forces

forked from lwthatcher's block: Flocking

<!DOCTYPE html>
<meta charset="utf-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<style> /* set the CSS */
.point {
fill: darkslategrey;
}
.line {
stroke: grey;
stroke-width: 1.5;
opacity: .5;
}
.repulsed {
fill: red;
stroke: red;
}
.attracted {
fill: blue;
stroke: blue;
}
.oriented {
fill: LawnGreen;
stroke: LawnGreen;
}
.ao {
fill: DarkTurquoise;
stroke: DarkTurquoise;
}
.moved {
stroke: black;
fill: black;
}
.R_r {
fill: lightsalmon;
}
.R_o {
fill: Chartreuse;
}
.R_a {
fill: lightskyblue;
}
.num {
float: left;
}
.counter {
width: 50px;
float: right;
margin-right: 40px;
}
</style>
<div class="row">
<div class="col-sm-10">
<svg id="svg" width="800" height="500"></svg>
</div>
<div class="col-sm-2">
<div class="row">
<b>Radii:</b>
</div>
<div class="row">
<div class="num">Repulsion: </div>
<input class="counter" type="number" onchange="updateR_r(this.value)" value=50></input>
</div>
<div class="row">
<div class="num">Orientation: </div>
<input class="counter" type="number" onchange="updateR_o(this.value)" value=100></input>
</div>
<div class="row">
<div class="num">Attraction: </div>
<input class="counter" type="number" onchange="updateR_a(this.value)" value=150></input>
</div>
<hr>
<div class="row">
Controls:
<br>
<button onclick="play()"><span class="glyphicon glyphicon-play"></button>
<button onclick="pause()"><span class="glyphicon glyphicon-pause"></button>
<button onclick="next()"><span class="glyphicon glyphicon-step-forward"></button>
</div>
<hr>
<div class="row">
<button class="btn btn-danger" onclick="reset()">Reset</button>
</div>
</div>
</div>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
// === VARIABLES ===
// Global vars
var R_r = 50;
var R_o = 100;
var R_a = 150;
var NUM_AGENTS = 30;
// Helper vars
var POINT_SIZE = 2.5;
var LINE_LENGTH = 30;
var TRAVEL_LENGTH = 15;
var DT = 350;
var INIT_SPARSITY = 100;
var timer;
// === INIT ===
var svg = d3.select("svg"),
width = +svg.attr("width"),
height = +svg.attr("height"),
transform = d3.zoomIdentity;
var points = d3.range(NUM_AGENTS).map(phyllotaxis(INIT_SPARSITY));
var g = svg.append("g");
// === D3 FUNCTIONS ===
var t = d3.transition()
.duration(DT-50)
.ease(d3.easeLinear);
var zoom = d3.zoom()
.scaleExtent([1 / 2.5, 8])
.on("zoom", zoomed);
function zoomed() {
transform = d3.event.transform;
g.attr("transform", d3.event.transform);
}
// === CONTROLS ===
var play = function() {
timer = d3.interval(() => {
next();
}, DT);
}
var pause = function() {
timer.stop();
}
function updateR_r(value) {
R_r = value;
d3.selectAll(".R_r").transition(t)
.attr("r", (d) => { return show_radius(d, R_r); });
}
function updateR_o(value) {
R_o = value;
d3.selectAll(".R_o").transition(t)
.attr("r", (d) => { return show_radius(d, R_o); });
}
function updateR_a(value) {
R_a = value;
d3.selectAll(".R_a").transition(t)
.attr("r", (d) => { return show_radius(d, R_a); });
}
function reset() {
svg.selectAll(".point").remove();
svg.selectAll(".line").remove();
svg.selectAll(".r").remove();
points = d3.range(NUM_AGENTS).map(phyllotaxis(INIT_SPARSITY));
start();
}
// === HELPER FUNCTIONS ===
function show_radius(d, r) {
if (d.show) return r;
else return 0;
}
// === EVENT HANDLERS ===
function onclick(d) {
d.show = !d.show;
console.info(d);
d3.select(".R_r.r--" + d.idx).transition(t)
.attr("r", (d) => { return show_radius(d, R_r); });
d3.select(".R_o.r--" + d.idx).transition(t)
.attr("r", (d) => { return show_radius(d, R_o); });
d3.select(".R_a.r--" + d.idx).transition(t)
.attr("r", (d) => { return show_radius(d, R_a); });
if (d.show) {
g.append("line")
.datum(d)
.attr('id', (d) => {return 'ln-' + d.idx})
.attr('class', 'line')
.attr('x1', (d) => d.x)
.attr('y1', (d) => d.y)
.attr('x2', (d) => d.x + LINE_LENGTH * Math.cos(toRadians(d.angle)))
.attr('y2', (d) => d.y + LINE_LENGTH * Math.sin(toRadians(d.angle)))
}
else {
g.select('#ln-'+d.idx).remove();
}
}
function dragged(d) {
dx = d3.event.x;
dy = d3.event.y;
// update point
d3.select(this)
.attr("cx", d.x = dx)
.attr("cy", d.y = dy);
// update collision state
checkCollisions();
// update line
d3.select("#ln-"+d.idx)
.attr('x1', dx)
.attr('y1', dy)
.attr('x2', dx + LINE_LENGTH * Math.cos(toRadians(d.angle)))
.attr('y2', dy + LINE_LENGTH * Math.sin(toRadians(d.angle)));
// update radius
d3.select(".R_r.r--" + d.idx)
.attr("cx", d.x = dx).attr("cy", d.y = dy)
.attr("r", (d) => { return show_radius(d, R_r); });
d3.select(".R_o.r--" + d.idx)
.attr("cx", d.x = dx).attr("cy", d.y = dy)
.attr("r", (d) => { return show_radius(d, R_o); })
d3.select(".R_a.r--" + d.idx)
.attr("cx", d.x = dx).attr("cy", d.y = dy)
.attr("r", (d) => { return show_radius(d, R_a); })
}
// === START ===
function start() {
// SETUP POINTS
g.selectAll(".point")
.data(points)
.enter().append("circle")
.attr("id", (d) => "pt-"+d.idx)
.attr("class", "point")
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
.attr("r", POINT_SIZE)
.on("click", onclick)
.call(d3.drag()
.on("drag", dragged));
// draw zones
g.selectAll(".R_a")
.data(points)
.enter().append("circle")
.attr("class", (d) => {return "r R_a r--" + d.idx;})
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
.attr("r", (d) => { return show_radius(d, R_a); })
.attr("opacity", 0.10);
g.selectAll(".R_o")
.data(points)
.enter().append("circle")
.attr("class", (d) => {return "r R_o r--" + d.idx;})
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
.attr("r", (d) => { return show_radius(d, R_o); })
.attr("opacity", 0.15);
g.selectAll(".R_r")
.data(points)
.enter().append("circle")
.attr("class", (d) => {return "r R_r r--" + d.idx;})
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
.attr("r", (d) => { return show_radius(d, R_r); })
.attr("opacity", 0.35);
// overlay points on top
g.selectAll(".point").raise();
svg.call(zoom);
checkCollisions();
}
// invoke immediately
start();
// === UPDATE FUNCTIONS ===
function next() {
// move points
g.selectAll(".point").transition(t)
.attr("cx",(d) => { d.x = d.next.x; return d.x;})
.attr("cy",(d) => { d.y = d.next.y; return d.y;});
// move radii
g.selectAll(".r").transition(t)
.attr("cx",(d) => { return d.x;})
.attr("cy",(d) => { return d.y;});
// get next positions
updateZones();
// update styles
g.selectAll(".point").transition(t)
.attr("class", (d) => {return "point " + d.next.style;});
// update lines
g.selectAll(".line").transition(t)
.attr('x1', (d) => d.x)
.attr('y1', (d) => d.y)
.attr('x2', (d) => d.next.x)
.attr('y2', (d) => d.next.y)
.attr('class', (d) => {return "line " + d.next.style;});
}
function updateZones() {
d3.selectAll(".point").each((pt1) => {
var r_pts = pointsInRadius(pt1, R_r);
var ptclass = "";
// nr > 0
if (r_pts.length > 0) {
var new_angle = r_angle(pt1, r_pts);
pt1.angle = new_angle;
ptclass = 'repulsed';
}
// nr == 0
else {
var o_pts = betweenRadii(pt1, R_r, R_o),
a_pts = betweenRadii(pt1, R_o, R_a);
if (o_pts.length > 0 || a_pts.length > 0) {
if (a_pts.length > 0 && o_pts.length === 0) {
ptclass = "attracted";
pt1.angle = a_angle(pt1, a_pts);
}
else if (o_pts.length > 0 && a_pts.length === 0) {
ptclass = "oriented"
pt1.angle = o_angle(pt1, o_pts);
}
else {
ptclass = "ao"
var dir_a = a_angle(pt1, a_pts);
var dir_o = o_angle(pt1, o_pts);
pt1.angle = (dir_a + dir_o)/2;
}
}
}
var dx = pt1.x + TRAVEL_LENGTH * Math.cos(toRadians(pt1.angle));
var dy = pt1.y + TRAVEL_LENGTH * Math.sin(toRadians(pt1.angle));
pt1.next = {"x":dx, "y":dy, "style": ptclass};
});
}
function checkCollisions() {
d3.selectAll(".point").each((pt1) => {
var pts = pointsInRadius(pt1, R_r);
var point = d3.select("#pt-"+pt1.idx);
var dx, dy;
// nr > 0
if (pts.length > 0) {
var new_angle = r_angle(pt1, pts);
pt1.angle = new_angle;
if (!point.classed('repulsed')) {
point.attr('class', 'point repulsed');
g.select("#ln-"+pt1.idx).attr('class', 'line repulsed')
.attr('x2', dx)
.attr('y2', dy);
}
g.select("#ln-"+pt1.idx)
.attr('x2', pt1.x + LINE_LENGTH * Math.cos(toRadians(pt1.angle)))
.attr('y2', pt1.y + LINE_LENGTH * Math.sin(toRadians(pt1.angle)));
}
// nr == 0
else {
var o_pts = betweenRadii(pt1, R_r, R_o),
a_pts = betweenRadii(pt1, R_o, R_a);
if (o_pts.length > 0 || a_pts.length > 0) {
if (a_pts.length > 0 && o_pts.length === 0) {
point.attr('class', 'point attracted');
pt1.angle = a_angle(pt1, a_pts);
g.select("#ln-"+pt1.idx).attr('class', 'line attracted')
.attr('x2', pt1.x + LINE_LENGTH * Math.cos(toRadians(pt1.angle)))
.attr('y2', pt1.y + LINE_LENGTH * Math.sin(toRadians(pt1.angle)));
}
else if (o_pts.length > 0 && a_pts.length === 0) {
point.attr('class', 'point oriented');
pt1.angle = o_angle(pt1, o_pts);
g.select("#ln-"+pt1.idx).attr('class', 'line oriented')
.attr('x2', pt1.x + LINE_LENGTH * Math.cos(toRadians(pt1.angle)))
.attr('y2', pt1.y + LINE_LENGTH * Math.sin(toRadians(pt1.angle)));
}
else {
point.attr('class', 'point ao');
var dir_a = a_angle(pt1, a_pts);
var dir_o = o_angle(pt1, o_pts);
pt1.angle = (dir_a + dir_o)/2;
g.select("#ln-"+pt1.idx).attr('class', 'line ao')
.attr('x2', pt1.x + LINE_LENGTH * Math.cos(toRadians(pt1.angle)))
.attr('y2', pt1.y + LINE_LENGTH * Math.sin(toRadians(pt1.angle)));
}
}
else if (point.classed('repulsed') || point.classed('attracted')) {
point.attr('class', 'point moved');
g.select("#ln-"+pt1.idx).attr('class', 'line moved');
}
}
dx = pt1.x + LINE_LENGTH * Math.cos(toRadians(pt1.angle));
dy = pt1.y + LINE_LENGTH * Math.sin(toRadians(pt1.angle));
pt1.next = {"x":dx, "y":dy}
});
}
// === MATH FUNCTIONS ===
function r_angle(d, pts) {
var sum = 0;
for (var p of pts) {
sum += Math.atan2(p.y-d.y, p.x-d.x)
}
var ave = sum / pts.length;
return toDegrees(ave) + 180;
}
function a_angle(d, pts) {
var sum = 0;
for (var p of pts) {
sum += Math.atan2(p.y-d.y, p.x-d.x)
}
var ave = sum / pts.length;
return toDegrees(ave);
}
function o_angle(d, pts) {
var sum = 0;
for (var p of pts) {
sum += p.angle;
}
var ave = sum / pts.length;
return ave;
}
function pointsInRadius(pt1, r) {
var result = [];
d3.selectAll(".point").each((d) => {
if (pt1.idx != d.idx && withinRadius(pt1, d, r)) {
result.push(d);
}
});
return result;
}
function betweenRadii(pt1, r_inner, r_outer) {
var result = [];
d3.selectAll(".point").each((d) => {
if (pt1.idx != d.idx && withinRadius(pt1, d, r_outer) && !withinRadius(pt1, d, r_inner)) {
result.push(d);
}
});
return result;
}
function withinRadius(pt1, pt2, r) {
var dx = pt1.x-pt2.x;
var dy = pt1.y-pt2.y;
return dx*dx + dy*dy <= r*r;
}
function toDegrees (angle) {
return (angle * (180 / Math.PI)) % 360;
}
function toRadians (angle) {
return angle * (Math.PI / 180);
}
function phyllotaxis(radius) {
var theta = Math.PI * (3 - Math.sqrt(5));
return function(i) {
var r = radius * Math.sqrt(i), a = theta * i;
return {
idx: i,
x: width / 2 + r * Math.cos(a),
y: height / 2 + r * Math.sin(a),
angle: toDegrees(a)+180,
show: (() => {return i === 0})() //only for the center one
};
};
}
</script>
�PNG

IHDR�����
�iCCPICC ProfileH���T���̤Z � �#��k(ҫ��@%�@P�+�
���,E\�"kAD��(v� ���.l�� ������;��w�w����o��{��\a ���lQ��'#6.��� ��@���z��T3׿��mt4���S�����<7)��r"7����)4�s��l.��]�-���(+��Q.�b�4���i��>&2� �(l���w4�����: ʖ._��-ʮ�6:��22�N�!�����o5�5�l�������,a:{����[��9tР���ç�C׬6mi����Cf�ϝ�i�S��Q3���a.�;p��iQ3��>��fEΰhi��� }~��~K�IY>3���e�pnJd� ����pVZD��/i^$���,�cF�lo��\�)���=�J��&y�H�(�xa����0=t��t?i>+'B�l6��f8�:['T�>��p���O�+�T�B��d3<�S��` 8f kK+{����'}K�~� ���\f;�h�7�c�p�)���9�7�v���^�X�3���� H@(� t�0��8w�@�q`1���D`Xփ|Pv�=��A-8N�p\��u� � ����Ax�
� H ҇L!k� �B>P�A @bh�*���R���~�NC��Pt�F�7�g�)�"��sa&�‘�"�g¹p� .�+�p3|���<����m�a"^H�$#"d R�#�H҆t!7 ����ah����Da8�L��VL)�ӌ���� b�0߰T�:��eac�<�2l>�[�m�^�`���q8g�s����p��������F\;�7����*xS� >��g�����G�����a�G��E�&�� �B1����0B� ���N�"�����XEl#� 'H�$C� )��JZO*!5�.��ޒ�d�#9��'�#������ɟ(
�e!EL�F���S�Q�R�T�;5��M�F��^�>�~���XȰd�2ke�d�e�e^�e�e=d���˞��!�R�(g �%ǖ[#W&wZ�ܸ<M�J>D>C~�������

>
\�<��
�hM��E��6Ҫh�hÊ8ECE�b�b��1��1%%[�h��JeJg�$t�n@g�����'���h��4g˜�9�s>(�)�+')(7*(Va������TiQy��Q5Q S]�z@���K5E5g5�Z�� ��갺�z��J�������~B�}5^j�5�5S5wk��բi�j�vk��z�Pbx0�%�NƘ�����X�B�G{B�P'Jg�N��#]�.S7Yw�n��^��*�z���D}�~��^�.��1� Z �*� s � Q�܌2�*�n㌙�i���{M`;��2�����)�t�i����L`Vivǜb�a�c^o>hA���`�b�j�����;�v��fig�nYe��J�*�j�U��kk�u��-����Z�V�׶��I�l�����6�u�}�w��7؏:�9$8�;�a*2C�[�W����k�8~r�w�v:�����s���g� �%ͫ�7���v�p��2\\�Jܴ��n�nO�uݹ���#��G=^yZz�<�<?x9y��j�F��� �{||�|J}����|�}����V���c��w��ai�8�:�X�C���@J`D`i�� � QP[0�+��|����-! ��+�Q�ahf�/a��а����V�»"hK"�D����� �(J�-�0�.�C�wLQ�$vn����q�q���x||t|u���{ /�[����"�E�]]��8}��%�K�KN&`b�$|a��+�㉬���1�g/�ם��;��T�4��\�������MqK)Ny����_���L���V�6��ޘA�H�8-P� :�j.]��Oh*�J2�2�d��E�YP֢��lE��t���?�s\s�r>.�^vr��r���&+������i%f%ge�*�U�W ��X]�Z���c��ڼ�����ծ'�O[��� E�m��ؖ���.o����e�E�w69o:�����g�͖}[�p �Z~���z�G�K~�ܖ��g���;p;;n�t�Y[$_�[4�+xW�n�����,�s�ض��^�^�^IIPI�>�};�})M)(�,k,W/�R�a?w�� 5�|��n�_Es�Ae�a���O����~b�TW�Z]X��FP#� ���s��;�~d{=\/�=��h�1�c� � ���������~�}"�D�I�ɆS��ʛhM�P�汖�Ik\k���m�mM�X�RsF�L�Y���ϑ�坛<�{~�]�����Pǒ�c/�� ��x��e���<��_q�r����ט�Z��_o��n���צ���7Z{{������w�p����[�[���ݎ�}���;��ܻ���{}?��ău� �=*~����7��%����ރ�O"�<� ��=��/�yO�O�G�F�Y?;3�;��|����/�������ѫS���=;6�Z�z��ַ*ok�پ��>��ć��*k?1?u}��<2�� �K�W�m��=�̘��E��VANN�M �8�;�@�����M����O���B�K�;Q�B=�4�Q���)K�`i�CY�6�ӵ(���~��|�� ����ɉ���_��f�О9�ŧ�C�P�c��[s �W��"L�BOY�iTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:exif="http://ns.adobe.com/exif/1.0/">
<exif:PixelXDimension>960</exif:PixelXDimension>
<exif:PixelYDimension>500</exif:PixelYDimension>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
��2r�IDATx��]ݡ�8�v�t@:�H��t@: p:p:p .�%���ݝ��Ȳ df|��' �~��G�}�e>�kB��P��ǟ(�?�[�����B��'���<�B�?|A�� !
��U[���W)�ȴ��S�� ����Ʉ�2!zgG�i�e��k!�[�?�͕ !�۾c�����,D�,� �A8�r����Ba�ζ�l�E�&Y�lB���u xß\���P��� �K[�ok���l�%\���T�6�+Q-�//��GX!ڏ;�e=�o�� [���\SԊ��e�J!����e؆�q�x@�R_����v���8׺��g? Ǫ�_����<P�wf�'���}i�)��,�%Io�9��2�}~Ͳ3zf��W�|��
b_/�\�R��&c�(�m� ���\}���
!D�ui���(���A�2�ߓ��sX��u�ں3�� /�t[�;�86u��E�8.d��|"�������wd��>~�x�}��)�&���)V�e>xdRK��v��~7�G?E/�X������V��z�PKfYv2��~�~I=~P8DQ�N�C�g6��`'G{̲S��~ǜ�8�����P�77�3�4~���jE�� `9>?���;��SH�"h��2Sݧ���B;8�Au�`P_e�8�d>���!�:"š��ͽ:�J�&[��rq����( ���vlBDT� �D� 0uer.�(jiج���.���R�ך�y�J��������e�H�
��w%;c��Z���x:��Ə9Te��^?�1�����A��+�a�`��K�nB�:�7�(A�:C� D��–޽8��~�G��"B���?.���k���_gǪ'!2'ue2��@�&��'��ڳ��T°Ʀ�7{��Ēc�y�p9�v���}����6���%���gq\g�q����rqa��YDx8+%��f�4x]�n �Z��+�ǝ��Y9������i���13ެd1p"��k�� ��4Yn}Uik;�cW�s�k�����1�F�p�a�8?QFo�d���о�^�Ǒ"p3Ld��J��9SX��/�s���Su��q�%�j���ߨ���4��+ҟ�u�h8 �g9e��i��4^�pq��^mrZr���kj�n�ð��Wt�`.E�-�˹b�>U���)���R� �}*���S�u�Ї�7�J���wm�c�S[$LW�۸�� ���4k_/�ytз!2���m�[K��&қ��a��۶��F������ն= �w�ڷPJ6����sT������q�_�C��sy+�*����V�)�gb�^s7���D�F���J���`��� ��gd�6�y1"�3}�i�g�6�ϫ5������$|��g���-��Ō#�I���
i�J��\�~��uj�G�K��DX�p5�S������4R�#J�=���0'0���ry�תs���یf��WՁ�g'�F�H!
��&��G�TBd�v�NG���'[ym\
�w�<2}�J�v�>0��V�[� c�� �����#4��5��y`n�3���4�'�d�&OMu���o�j��V���N�?��eN������
L]�!��h��d +����9��1� H�a�L�a�/����|��ʿ���b}0,b�� ��2��Ja?�V�����pv��[��k���;�-�y�����tk�"ok�bU����� �nw�b�=V�eɃM���GݺS{�뺶Wuyk&�1 ē�������_����,T��m8��Cz����]�������K0��=�?����u﹞�+5Z�ʼn��e[_�j�ݾ�ĝU��男����Z�����;�!}�z� a#��0�d�8���2�fߪAi����+ SY.M~5.�-kd.Dk~o���S��Cw���}/ˑ�T(I�4`"pR�7��w���gN�!uuxS���Ǎ=
��e��|�vvS|���A` ͽf}ua�.�Dg�}�9%�f6�7��tۗ�KI�(��6ӵ�ظ �ٜ0�Z/��� �������m|��ϰ��&BT��۫� ���](�wu�g��3L6^�Lf[XPmj���u�zB���P��^ ���>|m_��EG��[ �y�?�;��� lG�Ja�J+����|2�솷K���x��;��Ӄ +;�Z��Xqƽ�>�8M������mر����0z�� ��8�C����uW���w����/�1]�~"�s�%��'@�k%3�U��U�{��Ч���>��㥼�޹>c��Q��w�w0�t��vv>��1�ȧ��?�V��%#&.9%0��Z� ����P����k�haqmv36רw3�)�F�"�SЪm'�Q�ݴ��N��������$BI��w��J��!2wl.4! /=��_��� P�!��D��nj|n��D�����b��R��*.������ܫ��<e\̄���Z���9�^�+=>t�ͻ�������o���/���$�j *�f:Ql+n�tg�@�� ӥS��WJ�K��1)��������&�<�^r{����.�ʜ��G36�
���C��r�9��CZ
'5�� ���w�V���C�7P����Y@s�z�I��!~W���3gyD��}��ww3��pD>C�*ˤ1^�����ϫe�ly �h�VͰW����ZI��h�]��pr �2�AR��*E)߿�2k=HdT{F�С_�̯,w�<�Pv1ߚ��޲]�����VU�%t��ѓq=���Y7#��O���\��/*�6Ӊ�^O \^K��o}��d>���e'�ĺp�A����?���:i������5�!�������S��9�7T��������=��.��%����NHQ��P�]�������l�O)�4 K�N��n���Q���v�8!]
qe�I*4G{��2u�,�>&k�B�F�Jfʉ)؅X��5�)х��GaS�f�{�U� 9��\�D �]`��;��]��'|�uI<��r��a��`�2��AMr�- q��Q� �'�9�+�����9� s�� f8�<�4�*����o�z��S�j�i�/��:!��L��Xb��X%���
���7��ZU[�-.�ͭlH�3�r�Xdȴ�X-��mj�sg�Ma�{��ʼn6h N���?bu����xM�C��mȜ������mQ��a��з�G��3ɷX��2�"R웞jo!�:-:"Zޟ~��a6�u<������y�g���h�� �n-P��_/�+T�Wq�^+�
i��g*w�b.-��2j�[�V�H1��蕓�� P�|������P
�D�t��R���ˏ�1��r���VdM�$�t[w얦��J�覊Ά��2'��H�]���d��Mb���Ϙv��+���ǣ�j���UT��;�H�Nt8�˖��d�0t��{�佅-'a�IG۞�:��~�t��d����̱#���l��r5�8Lx��o0�Ee ~�|��8(�f>��b���2�, ��í(��p�z0������s(M7�8�,�L�����Y@��3�U�#Nf�⩧Q�\X��-�Wf.NG���˿4��:` �tV&u���� �W2|���he���9�0�-��5}\�*.ۻ�s�*Z�/p��X�i�Y ��CȞ�(À��K�ϳ"=��nQ��w!J |[�е�O���9��iW����M�W�8n�u���V!�S ��E���'A� q��W" ���w�)ٖp�{wb@��k���_І����O.��_�|��J���Ǧy��aeٽ��q�.�f)�[<�wU7���C�m��F�'�N����7�5�Ǎ' 粻B������r�pͬZ<�.�8z��H�zȟ^�%�'p@X���� 5uN���-:�Z\i�@�����/����V��)����$�0���9� W�� 59*J~��f�L&�p�еt��f��Ö���q�WO|����A͂m�3quw�u�n���5�� ����eM:�Z��Mh� �� �N�$��OF��K����������x�{���$ ��v6��Yה�vܫ��[<N{��m5�Z�����͖R4���R��xe�bXh׏� `7Ԥ��0�M������;���u$-���y=L�U8�Gڹd�=C�Ӈ03]�I�^�Y�������_�kL�j�Ã5�N�����[*��Ϲ�B��L�w�-ts���������6�����x.���-b:�k'��1O�c� �&���"� n2m&F�E�1��y˿�T��:'.����d}��(���Ÿ��۶$�np�{o����K��E5��uwg��?f���VP#^�\L;�+�} Dƞ(�"� ��i
;'�p D�����x��1~�����q�clw�s��E7���� l�r{ǣ�)<8���Kf�e`хP���i�ZG�抲Z�<p2Yӌ��Œ�������&����=eIx3����#�z�W|��Z��C(�e b�
3 ��D�`:�MT'���9��3��4�����̃��%w���\?Ө#R�[ָ��Lj� ��ϸ��X����1�R�B\ `��j] �1F��]� ��M�j0F���M��|�PK]�:0��P�l�+(���j����E�$��{X��S�2L�w�����e��6�6�%̪1�͋w�M�nӼ{H���ȣR ⍷�DIkv�I,C8e�U�n��;��|��R�D�/:o�e�r��8��0���[�wp�۟y�g���v$;��"5A��5�á�0���V�����ې�^�
�}b롟��jj{��a��R�C1�}�NA�w.�_�{��x�����-�ڄ0ݙ` ���6�X�h���A � �����[O����HԆ�-<�u�)��0�|W:���G�O��b�P]oá����Y��W ѐ����匾dɌݱg��!n�2AX���h���`��^�E��VӬ��8�|��98i�,6�=�ST�WY׸o�l�9S
!�8��3��p��E�]�?�T�����j���Xr��4�3�$��rH�(>�s�?F�:CI��s�uޢ��}a�j'����qA���8P�t���W �v����L�&P;����6n�do��,�j
� ��Q��Ќ�T�>C�k4p@��¤�E&5��L�� 4 �j��2��T���$�Oa
��"6P�H/n�伡v�9X'���0gĦ��,��E@�X�-�Yb[g,��t�΀����w�3���E������u:g�$XM R��Jϼ^0Y��g�gs��`TK*�!�6R&�-���y T���{vd���`c�-𱹮���5�EϮ�رA%��b?/YF�ܝ� ���h]��i��%�\�-��1�|��tؙ�š�6� �@nU^�.�ႁ��4� +jx�~��_ �2hc�H !r���kf.�
ꂭ-��������ؽ���N��p�kV׼��2Ɲ79~0ќ����M����&�53��˧!LJJ���}Pc�\���ֽ�} �$�~酨�0��V�"밧ar����K]�>�.0Jy�!��53�3��%���&�
�6'3��N�"�+��D 9V��8k
*ǃ�}��&L P�2x��۠f��L�v�C*/}�NCMr�U�����x&c��@�>��DMk�L��á̷�ߏ����1����Bd|��J9���iq!۪�M��E�K� gZ�z'�����"ݾI��2�)���{�փ9���N����r�*p^�7:��:b�� �)"�DB/� ��륡[�P9�w,�� �;'sQ����;��N�/� D;����>xO�sH���Z���}%~S���Yf)����bus� �:'��p~WS��{�Y���.ivn�����]��d��}C7[�8ŭ�5d3ٖ�"��6‘���LJ*Z����Ewp��%W���_�r�%�M�nq+j��z��n�5;��Owz8 ���4V���y�0�F��8l[k��6� �O%~��n���ā��(eu�q�����*������i Mv���r`�/���(���-�G?�Uf�e��8�M��v����͠2��i%/F+�uTz���C���εC�iE<�M���T�j�q�S�F��Su��<J�9fL�� u�1�`�.&u��zՙ����_�n����N$�����o���R'KS�V�B0S�l� z/���΄�%;���-�&P��� btS���z}�6%١-���]Q}��b�B��M���4�h ��,{U��� #g�y��r���E=%<�}?g쳲K�Ma�G���7�Q�dْ�X��z��MK�sqEƦ�v�y@���T �u��4�O����L��%�<3�l�[T�'�n�*aU��`���u�gn��c8�Ja��s�1���@��:�&r�2�(�j�����zt#x'���Rg-�S�?u ���ٰ���f�\�
��N���F�}m�~t��B��ך�]K�K���Q��Z��up
o*"4���"�A ��/���k6<�L?����ua�?��k��Gל0M-��LHƐ0ޒ��S����y���v� �����{�ښU7q?��:�N�I��r,]� �z0���G���6i.ٓ��?jh^�W�9 |I����сV��I�ʉ5�6������gY8 <�p!⤂��l�ʃ��+�%�"%��V]/D�� �u�})O6�f��UKBQ�g�2��AU�5M���h�����;��yiR-ɖ ���;���p���t�Y�1^���fu�߰�&��j,�n�V� j �����������W�=K���҈���ؔ��v?�m�]4W�O��c�*����oE����xI,'/|����n�9���϶M0,���f����~����PvҜ��4�����`����/2���K̮�:��;$r��Ѡ�"T���Uٟ��_t5�7'�~#��ᐁ� ��v(��}Q��^}Y%��<!�ۃY��4��&�//�C��E�?_`]x8E|k ;�˧Z8j}qZ����x�<�����.�g_�9$�hZ��r�ƅ���fn�GoiM9A.b���X@9�H�z��\��a��:�O�����3�a�%�8=1���*��?_5@�J�b],�^`��&jI\۱��Q�"3�3x��0��pu�����+�j�>�������v ��#?�y4w�U�ac��K�Y�F!�46�UD�,��K�A �!*x(�U���O `�v� ��c<�7����9i��_^7��\�e���κ"�jt�5�S��6Nr�`g��?����)���"�o ��6�ɇT�6=c�$sNz��$�7Sc��91 �G���F-d�w,q�ʫC@�X���4hȠX� g֑�)��1}���S�)c�jQ��}_��O��o���3�Scm���.���z=|v���૝e��0m�܈�`E�����&a�,��i����q.����տd��eP�~W��3�D������O�����QV����7h���.hERH���Z�d�V���X����;�WA�C��N`MU�<p��m���Vu
����8 <�=�p��3�
)��s��b��?�Za����>�`!Ղ*A�u�|G���m/�Ps����pӊw��:�_;���S�������Cׅ��H�*��eJZ[� ��Ь]��h�Vl.!ep���F� b�1���c�5E�پ�};�ΐK��\����KK��6�5OwYK@��`��|`����fﯠ�W�oi���YDn���%jc���'r��N�k�^��j�M�,uG�>������=��� ����u�O�w�e�Q�&L=s�(�~�͹
��7͐scMd }��PHM[�Rdžd�=U!���7�(�3Q8�� _<��;�j�K�Sm�=Ȼ(�K�b���RN��>1�OU|oQaJ�_2zj���[<�zӺ�'���֐NF@������灘rq5�ӂ�mۘ&?L��V���]�o���L 륀p)h$�Ǹm��=��J�� *�<������I)ѰǰA/�7��n������X
Wl n�{�\/�lwc}�p!�?�����*'�_ �J��lS�3 v ��Z�� ހ7C�*pf�̹2C�i��~��9��.�Eے �=���.��Y��NW��ߓ�1E��)T�GFx�\ b�+�l�� �p�L<�v/Λf1�[�ݎ`� �\fhq�=�Z$}�D�0Y= (�~�U�l!BǪKj+�z`�eT�� ���c�Ʒ��3��]6͸!��̓�zWB�ҿ����of.�+^��p����{f��vy'u�sk�ܻ�~P�����*�o�\ӛ���'n����l'6Q�ٰ����?�GưO>3S� �p��#x]5�7�j '��r�d�5�C���A�W@�m��)�;;����~{�M�?�8�T����Q�x�=yS$��mG�K�VO�S�RY��Xq�f��G�To?i�pƚ����}����� �M�w~�E4�c;Ju�K9����D���Vs�`���?���P�l�dSd'v`��L6gVtN 1��(��@"lu�����y��Au���檀�ښ���T�����r��Ƙ ��X���^����=IbG.E��e
�Tߚq��M�&���_5���޲�®8+�_r}TD_�)M4�K•�!��%��5��SNWr��B�؜�������nNM�2 7����V�����đ�D-r�e����N���9���+��\��U~ ��C�n<�N���ܥ�������;%��1���ys��<�{P���>�r��+���O±�U#J��T�m�W��xU,����� f��ҫ�݀4,����tХ)?F�FƑ���R��y�J�:[p�8w�;�4�t���r�V=Z _��N�M�1��"��<�6��V�ͩ����ʼnC���)�5��W�Yfpɘ�M�>zd���N�C��8@�Y��p��J`x��L�PV}���;�Wk���L ��쀖�8q������$v ��-M2׉�+�;{v¥�{@��pMW���F���[�ǣhdL���1�����R�(ȇ��U��i>�\W����M��ɺ�h�v�fW�y�g�P�|�Gl�w���J$�ˢ;�}����4u2��(��s�v*�`.N�����{��������r_8�+f�:=)+��I�5�4���!g�x �WgᚽS�c.\� �~/ctm�n�D7��9�ӳ*�ao��������y�-�텐7Q��j��z�,�n�4o�!�}vv�'�d�v���4�-�����Z9k��`⌯J��� ��S��BP pP~����W��B�a�(lM��>M��R\�7�p̷�������9P��Iȋh����_�~q��S�?��+���uD+O`gB�����};�{B�ia#�!�(��4"����Er�+ 2�+��,b'��ӡ]1]V�1&��g��Vu�+�_�Y��:O�6%�]�����Y]vi����l�
�6���}zJ�3*�ͫ`l�T�� ͭ���8�4w'c��!��{�U hةS����1d!*��!:�vͶꟓ��9ᤒ�T� ��_�M��9k�$6�������%���.Ϧv_��K)���ѱw�M-ݧI%�̓�{��K��[�j�����( ���d�Ec�V�Y����O�J�q�l�iE��Έ�w�߬����R+�P`u�IH?TI�i��!�ә���j'_�GS1�gOq�K� _Ґ[�\Y*>Ȱ*_�� ����TBd
|�J����pZ7*����!3����-�fK,������V��H���!�!�ҁ�����<`��lOSx^����j�4l)2H�y�* ���2�7N_b�e����E���>�,��Jf�q�W ���=:᫕����Z�6$�U�D���x��DӺQ����h�x��<?�m ��5h�����!�*1#�8$���aC%��~�,��9x4N���,9l�-K��kny9�g�����m���x���O�˄�������}��?^ ��� �$_���|A��*�'��S�("��D��(��D�U_���v�g�ƺ�����M��28���Yf&OO��^��?A��\� �Շ��f��AkvZ�6I��iٿ��6�NL�@�����Z��{^�b�1�rc"��-7̔y �tt� ue��-V;Xl�~cs�<��M�q{$p ��US�f��qRP(�ͼ.���� �۟P���;^r6���F��]ŕ1��d���6I�� �V��j��Ȃ[ۙל���s�q̉�K$����e��a�\i���Ȇ1 h>V�"�U���?> &�rd�Cg��P0��
����P�P*�iK�&���_C:�<����S����ecH�fB�T|l���6�sE��!sC�k�۾ϱ hvΔ��^L��[��g����Xu�)�M�n���L���r]�׌�1Zo�D�O�`1��[e�B܃~�9>�Y�|Z��y����i$%U��F *[=�rm�/l\�ow)���<`�풳��A�#m-V���j�5�T&�53�����͌1�K~c�e�c�յ����K��A�ۍ���pF�sT^Z]B��� �>����^C}�a�:��WӦ��/���`��>��~�@�s��yZ�}L��:b�X�C5�>���3܏����j��]`��J��Z�|��>���p"^fꬴ��O��U#�V0q�x�i_A7�S�
F�E<7]\?޷8�ʀ��ي���W$,W��F�SnS�Y=�k�ݯ�R5ȣ�aoz� ����S��(��{��I�ZGl�x ���lY�8��)b�bV���a5��z�,]�ޏ[y T�VT�>^���Sn��4e��7�
�ce ��u\T!���^`h|���p��3嶁ㅯ�^�_�+��^Ֆ�?`ҩ�>����#��c�Җ��h�����՟�YO�T\[�V��R�.7r�xk<�2t����e!:^��կ���x��d� �P??]�� �6�DǬ��-Mx�! ��C
�C���GL�6�Ȧ�o�d����ͻ5�=o�m���p���}�y�A���?�"�\B��|l�3a@���s5�q�s��Tv԰w��n R�m�C���Q"�iC��=������:�q��3�;%��=�@
���]h2h��tr&�����r�~�rC�jV��P�z�s���"k��n�l��I��m�A+(R��5y`��8�@�6M��)�a����(���P}d�[���G�z��9������0LB�4!}�C����\Nя�kz����F���z�V�[��Y3]݅[\} 66��lj�_�׋� �r>���k����E|��W���t�^�v��5h��{�Z>.w����}��f�O?o�1���~���`��n��x�4�0�̜A�gDͰ�v��U��x��s�1r�RRo�,�N���68~��J����"[��\�h�F<�*�!֏X�{����.?�D�Qm���c���r�ӯ`s�5�屮��T�>_1����&�5x�s�0ͧ����T��J�/*=᧋�M�w�n��2��� +�j9�wϸ�O�s������1�u�A� �[�e��nx�%X:aT�X������9������Yо=� ����5$�2]� ��YfP�@����`SY��~��Yf.\k@�y@�� ]��C:��4�~�+J��]���Z4��vf��� �x�uT��p�ZwW�ۃ�Gu]���J7:zá���^Γ��]=L�}$�uq���wX�Y�&Nϔ����3;�.3��ض�S�fr�-ʾ[��Zz,ɝ�:�c���!{���;� G|�?�� kϼCx�;��3٩�`�Z湑k�Y�}���I����%��\�1W�;*>B�V��j��r���xӺ#ֈR�Wh�~��}�(:�D�����W�?��Մ�e���C �'(Я��\cr�\4Rzy?�����)��s2�`a���p�w���r��
��ÌWt .6]��aa)�8V��a3��v���~n7|��ڔ�"6�j�)��>Dld������+Վ��5E��L��Y��z �ZgA6]Q�+'�'o��f��芇I�����4����V�-2�8�"��|3�N;W�w@_ۧg����i��bW�¶��V��0㥼�����L�p��*�Yh����;��\���F������eR��6?Ov~�g�����_wu��.x̩9T�钑` s�gl��Ӓ$����o��3g@���MTv�!<>�)=A��D��˳��t��*��KN;{λ�S�)�\U�(Wl=����+�~��L�r�4;o2�Cm�/�_�;K�R�S%�j�*Nkϴ�:e��.���ZV � Uoe*����H����o3���e���)��o^+��������D��s)��O9����[��9eZQ�;���������mpk�`�f������H�z=��<����5+K�B�<���>�ў#~��?h]"4�f����4E%Ox7\� �֜a}u����bm����Wq#����c\# X6�� 4ή�7��JT �L�Q���X��|�&>�[��^�0�N��wh)e��N!I��
v �q�U�����̭h���g��ȕeS��B�
�%�V���Jբ8��+)��-��Y�v� �� ++��M�Rns Le��s�7�3xH_p���z��*,X��<���s�mIR_ D�m�VO��ݾ�������N�_c:J����B(�W�L
୰�*D�t�$޴R �����g�6��� �z��}�N����+�Љ7q�ɱ���w�t$p3��5kr���/����ĥ�T�O.��f����ㆬ�m�[��j���p%�E�w��,�$)b�U~��p���|'���D�_��* ]��n��o�[�h)�P��M�����"�Ym"�6z-�� ����xлxAvH�b�
$�U^��)���9��:�?Z��\%�tq�dsx= ���;�\�(�\�`a�:����~���@�x����|1�*R��U��>jju@���}����ʕ�kB�߳��W'1���1��߽8��'�.�� �m���{ �D%� w����s�G������k�b�
hv%���T������vJ��Zd�DŽ�k-��)�&ɮ�:a=��7��@�n]�Na�C�0O�Y��Y
��z�]"8C���U���8v����j�!k壄8�����|Ѿͤ�)����=�u��ߙ16���Óp*� V��{��A<���8� !��� z���ޡY���7���G����a�w!�J�M�L|����m�<C�x�M�׌ɶ�#���C����w ��G��<��3 �����[߭&�!�Q��S}̉�[�GE��(�iƚ� =n$���d&�0��-a!X��;C
\�0v��0�6�� r3�g�JtD�@�(kYScvK�G0� ���!�V?J=�7���� ��~׫�"P�P Q{�5w�����p�٬�����\~��f+'!ry���{%��؍��\�9b��?a�,����uG14@.݀����� �݃��� � �">QkXT�@���z�T� ����6P��m>,Jh {Cm����� 6 <�>0d�XF�'y��ŞQ���Y�*�إ�!�~ �����s����\ C66�ܠ�.t'C)*�!#k�}��2i�m�}�i��D�J6�;~ٻ
�h� �"F���:p��T}[�� kh�6~3x��ա�Z���V�{�I`?�׽�0�Wo' �k.��T�4���U�b�|ߒN��f��_�J͗2�G�EL�x�DU��AZo���7D� =�&&w�O|H���[K�^��h+�x����m�0�|e
�:�u��(�2:߃�h����d��!���� @g���%k�ҟNRօ0�A�‘�5�I8��[?_�p�i!�oI
O���<��Q�i������eE��<����ނ�� E[�$j��{����N����q�V��*� ��b���+ �㩩L�΅B��>(WW ���7%嚬��TA-����n��j����)��H������K�h9�£xϥ� '�z ����{=t3겳��1����?�����<� ��r�]\5s� �-}D����)PFth�u�(ʁ��� ����"����3-����vѦ�֗kI `��tu��?�e��z�#����*�+ yG'p
�6�XX����P�&�R����Ú�WdNE����N(E���}�%�"�W�x���e��c,vυ �;��$��л�m{�j���­����E��GG0>V?g�l%-�BQ���ə�����$ ��> �k|��}�-��7QO�?D�K�r� ~l�͙�7�iu4�1��W��U�z�sܫ��
�9�3'axE}�{�M� ����>�D�_q�R��A�ɞ!�{���r�&���2�$�-]����1�^A��2l�^���{���2��B�D�G;c�,��k�bڛؘ�hMF>�-� G��_=�%tD�W�; �ޡgo:�R�b�H�fRu՚�b�=�=�"���Ƞ�2p���!�&\Ec6,�RK� 7 �1/Q3�FH�-�^��i�Hu���3 l���Te[�3AE�%V�E�M���Hv�m�>G� OB\67m���g��jn ��
[� BVW֌�-�g{ϦV��C,��� j�*�ƿ9[c��B��a虎27g!r�׵�2�,��H�\�u�# �����.SEDž6�z�~z)}¦��R�Z�G��&��D% 'A�ۜ��9��q}���ߖ=��zn'-%;=��
!]&�0�#�b�8z�*�;����� Y�����¸ۏ�u�����_V���d\ ���c�݃� /|=]��k :MP�[a�d8aBו�76z����k/���¦C�Q�|� 2ÑSB�=��������;�O#�.01���")��H���������t���{.�������?�e���LβfM�S=�'�6��) �!�R�E)�H�V�}tM�����5TE��k����ƧZs����:��/|�ɀ���Ӊ�:#�3�s��ݎA��.Ƽ�����y�_fn���%㜹�q���)�.�KW'�rg"�N��"��xoh`U2K��R����Lj���lU�)�PYմ0ȉ��/��m���9�ZcUڢ�͗�#�UEh�տG70������Pg���L�PK�!�;9-D���f��:X� 釵��a%�y�XHn���Ђ�;�`�,��J����|r��ւb��1�Ygp��,�3S�ĕò�Ta��t��IF8��(P͍����C\������c��g)�eR����k�����M�8��V�M��# ��l�ʠ<gx��N����c9c���֖U!� ����Es�8n�3�q ��j%f�`���{!�͈~�GsE e��-�aH�/w��A�?�t�#�(<���uۆ���s+>@�焾���˔�>O8��"�'rF�"`ڋthpN?��# � �M����v� -]��&��6����1eڳ���z7%��x��{dZ&�p�(����H�ƹ��q��u���4u{�<���9n��ꩭw0��&�������5�4u��V�X]�c��`��J`�g��:a!� ��9�!���(9��3�ic:{�� ���YB�{�pa:)�s��0靷gr!J/�ՈH�iV����K���7r�<�C�~���ƞ3 ���2�y���,�$�l����N�BS�_��ٍ�'�}%����[��-�T2��5��cݶP����p�%�H#�f-�n�Kg>;�Qcͣ�k���/p����N�6m��|�`����8�KS�%b�@�q�{s7[ƨ�K0�}
����ܥ��eJ$��D��s�u�R2�M�k�(�p��|�o��C��ܺ��`����Z��%���ah�p��.�����B�L5��d��E�|���:�d�w��Kf"-�O�">ݮ�4��*l�?9;��O�%�Ї:j�1�*�""���x����q�Oe҅X�O�L*�M��\�s���/&�z��)+^* y:o�"vVw5grX������1��sZ
f�pG���)��bM���a��24 V ��B]/�y#�| hN�y�,��M�z�}���tBʡG]:ӆV#�8MԤ$��@�H��+��2e�=J�-W��z�3`�נg�-ҫr#�<6�L�� 3b�FDŽϊZ��M�0�S-�Q2��� w
��בԷ ��&E��� ���
-m����
]�i� `���[,a:7~s��ς��`p�;f*�q#�� �{��X��7�(���BO�9��&��L))�3��1{4�ΰ ]���jv�����S较�%��Gg��{D��č�Y���0j�ޚ%�S\���2,)=�3dȮe�o��g.��&��Fd'Y�GZK�Q~��8X?����5,p�\�:u��98�T��c�>ь�8�Vn�܍�K�������$*>��}Ch`3ս~�˼��7��޼�$�Z,�J4��>׬��k�Շ�<�F�w�s�\�k�{�����X&/B�[��?V���r��nʿ��.�7���^0Wz�"�q|��;�8��j�e��k�#{������t1�j�]M�����)��0��c9�X
��N૛[�ȳ���j^tA�v����^SȞ������ʁ��au��aœSiO��M+�X:�{��b�c��4խ y�\�`�=��C��f�< Q�K6a��F ��)�\.��_9� �%���vK)�fqy����Y���~��:�M':�;l���
O���~38�L���� ����� J���e��ݔ2� � ��F�;Bȗ�}�U[��}�5oo��w���FL�0�ρ��-���������C
�z��*�`_7�� ��֦ة"T� �PڼKt[�l��|\���\���1�BW��Wn�5톛�����d�2j�p�z�N[�JZ�14m̅[x�-�ڪ���.�3�U���:��@������5�c�z�՘�gD��V3��+����8��s�P�7�?�ze^����j��3Q��=��D�
/t�c�E�G.7����K!jec}����p�v/Բ� ]J�_�hz�m�l ���H����^8��W_�l�uY8X,\Y2՝�� ��Vժ�*�MWT3`�k�;��~6�RX7�t�1�����uo"��=*��6E|��M)�oj�wI�=��1�P�5)���k��HL���y쬋-�b����0M=;bwY�/������'܎Ֆ�� ��eX$�k���Y�:}�;���1,���6?O}���EL�|��X� *�F�_ �����]�����@fO���5.��p��N3��D����Bq�\����0�[��VARC�[�#�{qS��h��;���ʬ�̔�=M�sq�m�y�[1OB�j��~Vݚ�
�e\\��E��7T��6�xi�'+&�Lq�p��⳱�Eev�f9ᜋR{�|����^+\��
З[��!~��m6\5���Mb׬l��_�"Z�n5i���m�`����0_�����n�2a`��ʬ杗u�u"W|����_]3���Í��ݖ�D���WD�gvXQ���O�fز17^��Ԧ"����՜�9�5��^)�7<���5��u�gG-h��+�X��zt�J��6'Od���ǐx�c C-Da�����m��2_����1���k��3���t��5&�ޓ�nj�6g����zbw�D�3����Z= X��lc� !���ɒvz���ϴ,D�m���qMk��u�t ��{�`�&�U��j�v��U�<���9>ͣ) �3χf�\q���`!��P⣫+�pm����p�+�����)'e�O��V6�����~7S��ޑ�� �u�-G��>)R*�\����X�Z~:Ր�ȋN` 8:"7��%x���=�@EDz@����O
`3t��<* ����<Q��b@C���yv�N+�q�#~��<�l�1����3��X ������a���<0*� �9C��k`���Hç�BX1G�%�d(�ЄV��B�jer�V���c�dy[�ɮ�U�x�i�uz <�c��f5����9�����ε�$��ZLC�AFl V�@�f`��>��jW�HT!,@�g��RA%�z'r��x��&�7��[<�+zG D�kК����.>��q��ZdpA�y������~Y�}�q�N)�ժv ��W:sؐ�Ej+���Ұ��J��8 ��iW��p�`�O�zDe��q!�� �X<s�<4j���h�(6?f���n:��7Uxo�-���{��!ٱ ���zh>�b�e���+�k_}]�E�u�^�}��5m׹ݩGa��Ŏ����\�kz%O�x��
�G0�*-�?�Z�\䡮c�$\����E�=�i �>;0��K_��hw�j��-�k�9x�W?<�E��.;�v�{���'�`�֎�}���+�au˜�SE�Mk/�w�'A*��톾�?�\᎝`�>ym��x���%�*\ND���}` N���&2��:�*�ǟ�l���g.�[0P� ����j���,8���bX�=��ґ���ȧ�ߵaɺ��ֻ6#B��YX��|�jɐ�d"K���]�if<I'���~��n~�_cQ�˽����;���fD�/\tI����(�������/� e!�#�:���ȈJ/5�B��6kB������t6�B>�9� ��K)��KH�/c8�6�j�&?x��TX�G��Y�Q
�4���ј<�7B� �62ew��@hi����ԛVd�>��R���-�*U�7�y�P=+���WU�G+
1%�lc����H�2�G�l��4��K�� KF�|���d�*��W�{���$��d�����]�K�VOcl�=SY'��/�������}|�� \C�@|/D}&2�
f�u�֧���RT<VT�� u���>SG�^7��\W{�>��:�J��u�M�}�������Й=챒0o+�7WŖ[���8���W����̎(�2�(N0s-��YR�-����y��U3�'I�i�ĸq�o�m�zu�=P�>��T�� (i�ն5(��1�����1��I�g�t���5{ Ģu���*��Q\꺇�'� u���x� f����<� �;}Jpn��� ��h"E���LD/��
�d�V+d�b���ѣc�3���$�cLZV� � ��RfX!��%[;���)*GnR�/���}~g�"P����ʵ��#Ñ�q���6�φ=��"Š�2�߭�i˕�����M9�X��Jsn��Ė�`�Փu͞�Q'��uO����|5�A��i��sp�p;��,=���WY���J� �ӹ���ۙne���M����.�߸��a�}��<��W�+�1�K���E����C�ch�1���-H0����ndCg����O����i\��ݏ2�v]�� ��Ҧ�'��d�u�2�.�F����� $����R���}����hc)@Xܞ�v�q �ur|&y��ֶ� ��ĵI&W]}�Q�A���Z�!�v����f���yl��w�7p��K��>�!�dxo�����m�x�������v �]'ߧ��<·:��ڡ�O����)Rq��qdPE��>�*c�e�Ժ�1AVI�u����� `�Tg����*ʴ�L����2[�Rߚ�5��d'��/WҤ)Ժ�~���9�e7�H[�W����>�:�$�"�:^�#��{J@� <r��,��A�2��g �))���e�ǜ���S��N8�$#�]�׏0֬^���ҐI����b�( Nu���
y�n�(�<x�ͧ�
S�V�=��vR/�Y CD��Q��,��o���,-�����v����h6E��0+�t}XL=^;��^�=m�b��5 R��*���pi��۾R��鋢�����p�|Iᦩ�kd7�d|�i7#Aݚq��T�����'��.���x�ݓ�oX.�2If���x�օ�!-V�ѕ7n��T���5o�`�v���dL����%(;t_�M�������2�!V�2�w��.�#�.�(D�(���,��ċ�MӏM$+6�\(=�I�:��į�|$w�1K�= ���EmEdjk��B"SBt!&6�37w�.T4�ׄ�C���w5��� ��������u�<����0�����:vBѠ4�7����Е%��ډ�Y
6���p$����,��E�5�Z�!9 ��(�C&s9ո�����4o@_/;�/�vfE�6Hi���Ҵu,Q:))��*k�Ǹ���T@��՗��������R�k뵩��;�"���Dh^")��`�2ͱ٫� 6 k��kt����@���'�g߸��ڲ�>� �A�l| ���n��y<%�xC�q����kB���Mq�6�h�[�莡�1�������� �~ ��ڽ��>� ��%O_���IW~�keri�C��T4�©�N��Ja�_��-� ���8����'���Q��sM�$(k�N����ӏ�JY�k�$�Q<;����XLWXW�81=8� u_����>1&#��s������f@��0���p�#]1>��b/��_����=4�F����w�R����II��{�dzȄ�C� 4j�~���<�'U`̈́�� �f0,��P�0���^���*��]�2�Sf �Ѝ����������ڪE@��労����"5����&\j���^x����D���=���=�W������%^�k•��/k
b�[�v�ɢ��x{�� �i�aM�ީu�ѹ��9~uWf� ��:��` mЁ6��!�����֧�� �Z�X4(HW Ĕ��A��āa��u0�t9��,=-�W���І��L�lr�Tf=a���mYN �1��/�1 5"�ٚc�䜔=�c��WX�|*#w�����,E)��E\i6�;rN�q�v�1ѡ�c����|���ؚ�P%�T���߼R!b�m�v�]�����\�{)x[�d�p�����.^U�dJSb��'��A� W��9^ ;�ee��M���n� p�̭aj�bH��v�)Q������T���[u�������Y�1c'nN��>|�K���'7`���D��<]6 �\��V����v��*�C]U�R��f�b/u��ټJ��R���/ 5`-M~�^X��*��E���寗{��,�7E _7,���kR��n�z���c��)���2axmDΥ���1��{IͲ�ʹkPB��"G��pT����h!,�u~�2����v0*�AI�a�q����@���":1�*,��U�|�7=cP���`
�_���y/NW[(�}�/�S!���Ak�r7n,%,u��V�D~0 7LjL�;�;5]���C�L�B$0��z�'�!������>e�⯫Y�?�!��I^���v/x%�U�#�K���>~ߩu�~�s|�|�9s���Q�!:��\�U��`1Ž���=߈�F�x�+W�f�G{7V ���1&5I@J�؏���T���t�@�Q� �2I��@��!�Dv����^v@�uK�����@倆-E�� z�:z���N�]5�br��"�K�ħ-:���ԔXy�X����ޕ�:/���,��@Y=��w���+�o��˘�^�s�}��x#Wî�Ȩ��8��֚�|.�䥾��9m�]��p �&��qu3�l#��H ���j��6�k݆�E#t���c �q6S��&�uK�U1�:�4�[���b.D�߿ ���"�,O�j����}���- p1����Z�-0��c�i�9�� � �����Bl���N�`tI�ʓ0�l�l�nn�,w�ٓ-�46ك
*�3mVy��2���$�r$܇c,���n>{fJ��I��]��N:� ���Bp?(:��6�Ҁ_��������.�i&��/����ʄѕ���ə��95e��
,�*m� )��pʆ��x��} ��7Ż6��<y4�]<��\����l�]��%��KRz�W�ec�5�C��^�mڪ^�]:Ⲋ�l�,���L�XS2�n��PUA �N�;̌�U�~���8����<Ђ�*IqR��IdJRqZ���r_>ۚ�R؃����uy�tb��"�v�GL�� ��D����:0�_Dl����!�4R�w/D��….M��q<٭ZhJ*#��a��}�~�;ި��:~�he3hi�G����ތ��q�L+��6�>�j���9�D5�BnTd�$,,":�&��iҬɜ�І �q�\�x
{�xH�)~���ٲP�2�F��"�Fi|���_>��_�1Υ����!?���`�<��k硁�Y|=2�LRY��У��8'ȯX��N> ��M,�ZuZ����j�t:9������%�s���� �=�+���!�8f&�40{ �=��A���B
��y/@l�pb
���K0�*�j�׏�|��kJ�Yq���lk��R��'�Xs7�+�ۍ�3\; o�R��5�;+ɕ��!N�vͨ���8Jj��Q�,,ޖ���CT?DxB3�i��'�Z]���#Y�i��Zyk�������y%c�����~�K�x(V��1�d��!p�$l��}��; *e;����=�mD!�Y[1!�ر}�(n~��(; �D;��p��+05u��X��``���n��ћ�#�L����Q�l(�.�puF�; ȳ���ũ\#�x|�H��롩�ɤ�|7W#n&2,��!�L�`��Pg�LV8�e@���Aa�\�f~�����ڍTc��{!��`b J2�=*6��MIk/�`)c�yC�&_���
`�g�,����8@�`�i������� $X
�P�XǮ|=���7s�vlW�7���Ǥ�Q�xÞ
k�@���
݊b� �_}X�+�"��dK�Ѧ��7����ƛw�z;�y4�;;���<q i�zD��S����ƶ�����db�����dH��`��K[b��kx`-�9��}����unW�,��'^�ćGT2D3�Q)��Ι,.�� ,F��U[��/���᭄��5��ni�6(��j�S�O�@�5�A��A�6��A[=�]�lx��؍�� �����ݹ �R8��$y�uj��<u|����1�� Hpx$D��VHy+����v�}�rw�-n��y�>y0ݎ�������vV�}�x����y*^�p!g�{P���ㄽL3I��B��`����\9sk�rs֩�ե׏�i��Bk�\�1�[����x����q���z =}����RB�����)�r�nT��� ���� wj�\,���Ø6EJ*�<��O#�[���-��~�.�+����*c �&!��z�,a�BU�rE��B} 6�ͭid�;�b�D��މ�9n�[8x���j�"Q��\���H ����3��,3�
P�:�(���p���Cy=OP e/��6��6�����n�, e���xE]3E,l;��lSOÞmE��{���� �q�ъ�m�9y�*���_2~Æ����e6���R�=*Y�qqeĐ6@�gN�KXl�H��G*�
;����-�،v���G)˩;��86����r���6��qLG ��>�p�p�ˢ����Tam������{��$Yqf��2���<m {���۲�]��/��{����̹��6��U$��{�Oa�כּ 3~�J@�SQ��S��DZ�D'p����6C$_��x�K;��ء�W򫢐3��fy���#B���̫S�Ck�h��8���Q���d풿��U�9�(p���Bt �,9"3�S*�-Dž ��E��������X�I����5ҡt��K.�����Ia1k�c.�R�V��6����{�t�C�B>Ҭ���Z������7տ:,֨ŗt'}��L���-��K����lQ�"��M��s�k-��\h< �e�jTi���؛�5I�RIe� ü�/� ��s�m[��\����v�#'6���fYp�Yؓ�+;Y[bG��C�����u���ʁ��� SM6��{���#:�����ߩ���'�ԡ��J��� �r���p+_c��ь��Q�(���b[E�ʢª��a�J-��/�a�;u��1��@�(\T�r� �c���󃹸�3�b�U&b����:dw��nl9��w�X/�&U�㦺S m�.sv.C�Ü�Oj�We"�}�R��̵��������%�Np揁����P��~Ma?�`a�����6�UI�|�/cr���0�:3�g2�����pRXsR�x��v��=Rح|� ���R���|���]�gq�<5,�?�N6g���������V�R|����g��H�BY[��t"﫺� F�>���ɜ�:V�>:$���P�Kyc�+�QN;|U�sn�{��8�����ź�� �c�4����77d�إt�ͤ���fR�+J��:��%K0B~��8�t�v�G� �/���.��3��T� kֹvH�[�ѫ�ػ�ҳ �9�8������G���੝p>�yfU�U���#vs8ub�I�/\���V(�sI�K�V��j`� q�<�9 `mQ �V�L��be� Cb�ߦX(���̴-�q�/����~މ����q�4}D�D���b5��#�����ePǿ��{�|��7���n F@�y4�`�2�%��I���㍈x^�X���c�Vf������c�X3`���WBv���L#p“�o�әO@|����BH�� ������� ���Uka�z�2WQ�S�����B���3/�{_�5kmk]N[��xɪ�.P��Z����PLJ�pX���
+0������%D%�~�*q?�u4���E}C��KԾ��uJZiC��钷��� UU���I3�����P� �:|:�S$aD��?�Ú�'xsLWw�Q?wiy�m���}��:4���%�ء z��d�׼Y\���wYf��{'����Z�IP"?�xp�[� i�M�ϙ!���ٵ��%q+Ӈ���&�:�k<�MoCs����Os�u��;����� R$�b�P�@�^�O�m��""Ja�;~w��]m'����!G��.�����3�_u//#�:h^�E櫆��B�%��w���s��t������n�ʝ[��N�К��$�qHB���g�rv�C��̅��4L�X<'�ݧt\<o�s@��}��������0I�,XɁVB�.d���7�}�~�ź!�}6�6�Ț{� Q%�88�s+)�C�H�3�����d��t�qA7�����0��ߚXr&q�s⢉ (lD������@{Oᬹ]�.�� ��1����\Z�`eN�j�d���@�)���bN;��~�p���!8v�vBp �j��8�S bb�D���l��Bs���Q���^���{�Z�P��Æ�~�U�H;S�/ڞ���b����
p�_Y��vo`_���<���¯��d��+�_p�������"�aw\1���:�����*t� �Qz��_��5�E�/���T����r��G%`hs� �Xd��4������-m�2�cf��2mU�?��5���ז��Η0 �p�s��L _��jk]� [�h5�T??�閺6��ܤ���h�K��] g�+d^��}x6lR�K4R���V��0+��ݎ/P�-�����‰E�,i�x8�Q�{��/��f�S�:���"ƾ��H޿y|��Y�� oa��N��X� `��ո�j9����L��M8t���
��9\�ϛc'��P���9�/9 �J�B\7�j9��H�n�nDfY���I���r��0=��yLg�)Q�4���`�Ze}�u�\(5��1P�\����E���� ���2�$N�&{�X#�|�m��+��L܁k6��r@�h�%�qDZ�+j>ur�sX�n��'{@DP�=V��t�3���KpᆃZ�h�@;���'�xvS�4V�t2�skzrB���Wx��bP��k��i��@�"oWV
��!?�[�e�R�?m~3?�Ѹ��ox�(����Si���p}M��?c�O��9�u.q��67n�Lb”���7xr�r��|��#ߜ��n� Qj�۠���5iЀѕ{W_��L��{�*����r��1z~M��@(
A�mGz��P|?q%�VTK���C��d�Ku��N�`b.[�r����kC�~����},-!A���X;��{��ѕ�ܺdnF�aՌ�� �VZ�q$t����3f�WK�arN�������I��T������&��`�(g��p E�2
l˾t}���@�⿾��=ޒ$�����5�[�Z�-�ϫ~C ��2��]���d��RÞ��{����ŀ2r�5yv�ɵ�@z�mȓ�C�K@�jP(O�f�.xc ��\!Z��$�W48 ˳@WF�p}{C�����9A�U e���0�<�w ���PyRM�aD�е��8�e�%�#T�]���0jM9y��G�ʺ����}1�@�J$�4�� ����Ki�Y%"������yK���/�Q'#�8qX}|V��֛��?�J`O��� ����%�z�?�/`n�oi�sڗ�9��KJ��W�T���s]�)F�ơTW4������R�i�W{����e�Kם���o�����PU�Z�'�J��"k7e�*�਻��L~�Sڽ7f����w\�ޟU �ey?���%�D�}_��CH�s�5��A�ʝz�W���e���_h2 ���ō�R�9�!Lo΃�����OO;\(C:�Pg��p
����'����=�;]|�5Ԏ{�=4)�eT�{��6:!�����Z�ZA��� �tE5���_W�#[��t�S<6Wi��D���X�w ��̾g�O�xX�*�)����82g� ge�p��y�@��Gb?�Ǧ�=��N�c��b'�@+�����N
�; P��җzD0��}R�i��h(���1���_����`�����H����,����wT �Pן%�e�'Z������4=%�vc��=1��3`�q~l0���<~ Ⱦ�A�-!�SA�}� �]g�E/�oPaĕ�iLus
����Se�[��pJ ��iO1�3<J�רs�4�c�G�Ş�e!A��6ȋ� ��\]�Y�����rѸc$�~7���uz"2>
� *ɗUI��vl�v��u�s^h�l���c�ʚ����֑fT����<x�̓���lh�JD_�
`�EC9'��ܠ~��"j����A,5'�@M���9��Ew�`�6�M��m���Q�m��`\'&�M��d�ٸ�d3tn=����:��5�xz��M35 k*�c[@�*�j�/�<��'�9���jA%�d�9E����șj�T��-��HLTێ3-A��*� ��6q��wTv�b�_!�A�x���f���/��\���G��ʌ��x�s���9􅧌D�%�F���X֪��E�g�p��W���M�x�J5���_�uo,�;����h��E�7ӫ�l@OV\N� c����n�_Ǚ��p���=�'[�c��h����<n�4H�����nA~?��*���}�����C�@} �H'��uJ���p��E��t뾭��#�~��*,W�$@�U���
6��.5��+?�8#��e�8�Lga�3� ��1��@?i��m7�<[��kbJ�_�u>����{8S.1h~�X�K�L��B!B�~�$ `n�ef�6���|��s��`h��\���Y��.���L�����Pߟ����/ǧ�y���+Ŧ���a����K�4v���/ip�?���z���b��Ou4b����m&���.��8'��:\����� ~�Z6
4����yb��=�D�$�`@�vBT����J+\+> ۃ�6�_�� �sz��� ��&U�|��,�c�$��j���g��ܒ�`��%\��o� *�"����0�5��\��&�g�T6-h���b�ن|,9�]�*������`b�cIC�E0��Y�4y��*�,���#J\��N���l�l�~[��t�q���@:Hq��6W��?�ٞb�} E[�a�A݅�*�EuFĈ���%�������D7�Կ��>
�0��p�d�p�j��v�K�� "���;��G}��]b/�͸��@�<[ۨ�����f�
��2h�]�%���iHG��?���S�2�Ea5�=�&�a6�lb�5���tV �S �-�K��%���ܹ��؋����a��vr�nF;��~��7l��LBT���3�'�hg�@.���2�ܶ�x�{�}���T\�hG9�<�sF��m�w�Oa@!�E�M2�]���)Ag����Sxf��|�I��J��t&��b�g�p�M�o�[ ��o}�=KG��7�
j�1wb�np�k^��qF��
�}�4�6��UX�a�!��-o���r����\\�0czh�돣��M��-W>$�3����C��{��`k��n��O���M���)?H���� �ۢX?���A��ɝB'n�oP,�������l�b ��(p�2D�E���`\�DL��?��q8��P#8z@��30�[��Ƕ��A@ �B��S�О�C ?�Г�<�@���'s
���t������I ��CL ���  ��Q$�p�<�+��
��j�<����=�[�o�<yu�y������ޣ��:O�����;n Gd����h3�a�Ʒ�|�W3c�+q��^B=IEND�B`�
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment