杂题乱记

本页所有动态规划内容已迁移至 动态规划 刷题记录。 P8186 [USACO22FEB] Redistributing Gifts S Problem Link 有一群人收到了礼物,每个人都有对每个礼物的喜爱度列表。他们商量后决定重新分配礼物,每个人都希望可以拿到他更喜爱的礼物,至少不能差于他原来的礼物。现在需要找到每个人重新分配后,他可以拿到的最喜欢的礼物是哪一个。所有人的答案可以不是同一轮中的。 tag: Floyd, 传递闭包 Solution 可以发现礼物的分配是由交换产生的,所以从自身向他希望得到的所有礼物连一条边。由于一开始礼物的编号和人的编号一一对应,所以连边等价于连他可以和谁交换。如果多个人 (≥2\geq 2≥2) 处于同一个环,那么说明这样交换是成立的。 如下面的数据: 1 2 3 4 5 5 4 3 2 1 1 2 5 4 3 2 3 4 1 5 5 1 4 2 3 4 5 2 1 3 可以建出如下的图: 其中 1 2 3 与 1 5 4 均成环,有两种方案。 在图中,可以通过 Floyd 传递闭包判环,设 fi,jf_{i,j}fi,j​ 为 i→ji\to ji→j 是否有边,特别的,fi,i=1f_{i,i}=1fi,i​=1。那么可以轻易写出转移方程 fi,j=fi,j or (fi,k and fk,j)f_{i,j}=f_{i,j}\ \text{or}\ (f_{i,k}\ \text{and}\ f_{k,j})fi,j​=fi,j​ or (fi,k​ and fk,j​),考虑 bitset 优化。 传递闭包部分代码: 1 2 3 4 5 6 7 8 bitset<N> f[N]; for(int k=1;k<=3;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(f[i][j]) f[i]|=f[j]; } } } 循环 333 次避免顺序问题。 若 fu,v=fv,u=truef_{u,v}=f_{v,u}=\text{true}fu,v​=fv,u​=true,则说明 u,vu, vu,v 在一个环上。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 bitset<N> f[N]; int main() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(a[i][j-1]==i) break; f[i][a[i][j]]=1; } } for(int k=1;k<=3;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(f[i][j]) f[i]|=f[j]; } } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(f[i][a[i][j]] && f[a[i][j]][i]) { printf("%d\n",a[i][j]); break; } } } return 0; } P1485 火枪打怪 Link 有 nnn 只怪物排成一排,每只怪物的血量为 mim_imi​。有 kkk 发子弹,每发子弹的威力为 ppp。射击第 iii 只怪物时,除了这个怪物受到 ppp 点伤害,它左边的怪物也可能受到溅射伤害,溅射伤害为 max⁡(0,p−(i−j)2)\max(0, p - (i - j)^2)max(0,p−(i−j)2),求最小的 ppp。 tag: 二分答案, 前缀和 Solution 考虑二分答案。 注意到操作右边要比操作左边优,check 时从后往前循环。 设当前位置为 jjj,操作 iii 时能对 jjj 产生影响当且仅当 i−j<pi-j<\sqrt{p}i−j<p ​。也就是说,只需要考虑 [j+1,j+p][j+1, j+\sqrt{p}][j+1,j+p ​] 区间操作的影响,这样的时间复杂度为 O(n2)\mathcal{O}(n^2)O(n2)。 考虑优化,设区间内共操作了 sumsumsum 次,每次操作的位置为 ri(1≤i≤sum)r_i(1\leq i\leq sum)ri​(1≤i≤sum)。那么对于 jjj 受到的伤害,满足下面的式子 ∑i=1sum[p−(ri,j)2]=sum×p−∑i=1sumri2+2j×∑i=1sumri−sum×j2\begin{aligned}&\sum_{i=1}^{sum}[p-(r_i, j)^2]\\=&sum\times p-\sum_{i=1}^{sum}r_i^2+2j\times \sum_{i=1}^{sum}r_i-sum\times j^2\end{aligned}=​i=1∑sum​[p−(ri​,j)2]sum×p−i=1∑sum​ri2​+2j×i=1∑sum​ri​−sum×j2​ 这样的复杂度仍为 O(n2)\mathcal{O}(n^2)O(n2),考虑预处理其中的变量。首先 sumsumsum 可以用后缀和优化(sumj′sum^{\prime}_jsumj′​ 表示使 j∼nj\sim nj∼n 血量清零需要的操作数)。观察到 rjr_jrj​ 和 rj2r_j^2rj2​ 都需要求和,仍然考虑后缀和优化,令 rj′r^{\prime}_jrj′​ 表示 j∼nj\sim nj∼n 所有操作位置的和,rj′2r^{\prime 2}_jrj′2​ 同理。优化为 O(n)\mathcal{O}(n)O(n)。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 bool check(int p) { int maxd = sqrt(p); for (int i = 1; i <= n; i++) { hp[i] = m[i]; } for (int j = n; j >= 1; j--) { sum[j] = sum[j + 1]; ri2[j] = ri2[j + 1]; ri[j] = ri[j + 1]; int nowsum = sum[j] - sum[j + maxd + 1]; hp[j] -= nowsum * p - (ri2[j] - ri2[j + maxd + 1]) + 2 * j * (ri[j] - ri[j + maxd + 1]) - nowsum * j * j; while (hp[j] >= 0) { hp[j] -= p; sum[j]++; ri2[j] += j * j; ri[j] += j; if (sum[j] > k) return 0; } } return 1; } P6600 「EZEC-2」字母 Link 在 0/10/10/1 矩阵中,找到有多少个满足下面要求的横长 www 竖长 hhh 的 T 字形 w≥aw\geq aw≥a h≥bh\geq bh≥b w×h≥sw\times h\geq sw×h≥s w+h≥xw+h\geq xw+h≥x tag: 二维前缀和 Solution 一眼非常像 NOIP2022 T1。 首先想如何 brute,先枚举矩阵中每个为 111 的点作为 T 的中心点,用前缀和记录它的左、右、下各有多少个 111,不妨分别设为 suml,sumr,sumdsuml, sumr, sumdsuml,sumr,sumd。然后暴力判断这些 111 能组成多少个中心点重叠的符合条件的 T。 考虑优化掉判断符合条件部分的算法,暴力枚举横长竖长,fw,hf_{w, h}fw,h​ 表示横长 www 竖长 hhh 的 T 字形是否满足条件。时间复杂度 O(n2)\mathcal{O}(n^2)O(n2)。 计算答案时,对于每个位置 (i,j)(i,j)(i,j),枚举它可能的横长竖长,显然对于这个位置 wmax=min⁡{sumli,j,sumri,j}×2−1, hmax=sumdi,jw_{max} = \min\{suml_{i, j}, sumr_{i, j}\}\times 2 - 1,\ h_{max} = sumd_{i, j}wmax​=min{sumli,j​,sumri,j​}×2−1, hmax​=sumdi,j​。即 ansi,j=∑w=3wmax∑h=2hmaxfw,hans_{i, j} = \sum_{w = 3}^{w_{max}}\sum_{h = 2}^{h_{max}} f_{w, h}ansi,j​=∑w=3wmax​​∑h=2hmax​​fw,h​,时间复杂度过高。 继续优化掉这一部分,注意到是统计区间和,想到二维前缀和,用 sumi,jsum_{i, j}sumi,j​ 表示 ∑w=3i∑h=2jfw,h\sum_{w = 3}^{i}\sum_{h = 2}^{j} f_{w, h}∑w=3i​∑h=2j​fw,h​。简单容斥一下得到 sumi,j=sumi−1,j+sumi,j−1+fi,j−sumi−1,j−1sum_{i, j} = sum_{i - 1, j} + sum_{i, j - 1} + f_{i, j} - sum_{i - 1, j - 1}sumi,j​=sumi−1,j​+sumi,j−1​+fi,j​−sumi−1,j−1​。 这样总体复杂度 O(n2)\mathcal{O}(n^2)O(n2)。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (in[i][j] == '0') suml[i][j] = 0; else suml[i][j] = suml[i][j - 1] + 1; } for (int j = m; j >= 1; j--) { if (in[i][j] == '0') sumr[i][j] = 0; else sumr[i][j] = sumr[i][j + 1] + 1; } } for (int j = 1; j <= m; j++) { for (int i = n; i >= 1; i--) { if (in[i][j] == '0') sumd[i][j] = 0; else sumd[i][j] = sumd[i + 1][j] + 1; } } for (int w = 3; w <= m; w++) { for (int h = 2; h <= n; h++) { if ((w & 1) && w >= a && h >= b && w * h >= s && w + h >= x) { f[w][h] = 1; } sum[w][h] = sum[w - 1][h] + sum[w][h - 1] + f[w][h] - sum[w - 1][h - 1]; } } int ans = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { int w = min(suml[i][j], sumr[i][j]) * 2 - 1; int h = sumd[i][j]; if (in[i][j] == '1') ans += sum[w][h]; } } cout << ans << endl; P7915 [CSP-S 2021] 回文 Link 给定一个整数序列 a1,a2,…,a2na_1, a_2,\dots, a_{2n}a1​,a2​,…,a2n​,保证包含 1∼n1\sim n1∼n 的数各两次。可以在 aaa 序列的首或尾选择一个数 push_back 到 bbb 序列中并删除 aaa 中的这个数,使得 bbb 为一个回文串。每次操作记为 L 或 R,表示从开头或结尾选择元素,输出操作串字典序最小的方案。 tag: 双端队列 Solution 以下以第一步取 a1a_1a1​ 为例,取 a2na_{2n}a2n​ 同理。 由于要构成回文串,对于有且仅有的一个 kkk 使得 a1=aka_1=a_ka1​=ak​,aka_kak​ 一定最后取到。 所以题目可以转化为,对于 a2…ak−1a_2\dots a_{k-1}a2​…ak−1​,从前向后取元素,而对于 ak+1…a2na_{k+1}\dots a_{2n}ak+1​…a2n​,从后向前取元素。 即可以把这两部分看作一个栈,从第二次操作开始,每次从栈顶取元素,那么应该从哪边取呢? 可以从最后的操作开始分析,倒数第二次操作只能取 ak−1a_{k-1}ak−1​ 或 ak+1a_{k+1}ak+1​,由于要构成回文串,就需要满足栈顶等于 aka_kak​ 两侧的元素。那么想到可以将两侧转化为双端队列,每次满足有其中一个队列的队首等于任意一个的队尾,如下图 一个 string 需要注意的点,每次 s = "L" + s 的复杂度是 O(n)\mathcal{O}(n)O(n) 的,可以通过 s.push_back("L") 最后 reverse(s.begin(), s.end()) 来解决。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 bool check_l() { int k; ans = "L"; revans = "L"; for (int i = 2; i <= n; i++) { if (a[i] == a[1]) { k = i; break; } } deque<int> st1, st2; for (int i = 2; i < k; i++) st1.push_back(a[i]); for (int i = k + 1; i <= n; i++) st2.push_front(a[i]); while (!st1.empty() || !st2.empty()) { if (st1.size() > 1 && st1.front() == st1.back()) { ans.push_back('L'); revans.push_back('L'); st1.pop_front(); st1.pop_back(); } else if (st1.size() && st2.size() && st1.front() == st2.back()) { ans.push_back('L'); revans.push_back('R'); st1.pop_front(); st2.pop_back(); } else if (st1.size() && st2.size() && st2.front() == st1.back()) { ans.push_back('R'); revans.push_back('L'); st2.pop_front(); st1.pop_back(); } else if (st2.size() > 1 && st2.front() == st2.back()) { ans.push_back('R'); revans.push_back('R'); st2.pop_front(); st2.pop_back(); } else { return 0; } } return 1; } bool check_r() { int k; ans = "R"; revans = "L"; for (int i = 1; i < n; i++) { if (a[i] == a[n]) { k = i; break; } } deque<int> st1, st2; for (int i = 1; i < k; i++) st1.push_back(a[i]); for (int i = k + 1; i < n; i++) st2.push_front(a[i]); while (!st1.empty() || !st2.empty()) { if (st1.size() > 1 && st1.front() == st1.back()) { ans.push_back('L'); revans.push_back('L'); st1.pop_front(); st1.pop_back(); } else if (st1.size() && st2.size() && st1.front() == st2.back()) { ans.push_back('L'); revans.push_back('R'); st1.pop_front(); st2.pop_back(); } else if (st1.size() && st2.size() && st2.front() == st1.back()) { ans.push_back('R'); revans.push_back('L'); st2.pop_front(); st1.pop_back(); } else if (st2.size() > 1 && st2.front() == st2.back()) { ans.push_back('R'); revans.push_back('R'); st2.pop_front(); st2.pop_back(); } else { return 0; } } return 1; } int main() { T = read(); while (T--) { n = read() * 2; for (int i = 1; i <= n; i++) { a[i] = read(); } if (check_l()) { reverse(revans.begin(), revans.end()); cout << ans + revans << endl; } else if (check_r()) { reverse(revans.begin(), revans.end()); cout << ans + revans << endl; } else { cout << -1 << endl; } } return 0; } P1053 [NOIP2005 提高组] 篝火晚会 Link ▶题意 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”。在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会。一共有 n(3≤n≤50000)n(3\le n \le 50000)n(3≤n≤50000) 个同学,编号从 111 到 nnn。一开始,同学们按照 1,2,⋯ ,n1,2,\cdots ,n1,2,⋯,n 的顺序坐成一圈,而实际上每个人都有两个最希望相邻的同学。如何下命令调整同学的次序,形成新的一个圈,使之符合同学们的意愿,成为摆在佳佳面前的一大难题。 佳佳可向同学们下达命令,每一个命令的形式如下: (b1,b2,...bm−1,bm)(b_1, b_2,... b_{m-1}, b_m)(b1​,b2​,...bm−1​,bm​) 这里 mmm 的值是由佳佳决定的,每次命令 mmm 的值都可以不同。这个命令的作用是移动编号是 b1,b2,⋯ ,bmb_1,b_2,\cdots, b_mb1​,b2​,⋯,bm​ 的这 mmm 个同学的位置。要求 b1b_1b1​ 换到 b2b_2b2​ 的位置上,b2b_2b2​ 换到 b3b_3b3​ 的位置上,……,要求 bmb_mbm​ 换到 b1b_1b1​ 的位置上。执行每个命令都需要一些代价。我们假定如果一个命令要移动 mmm 个人的位置,那么这个命令的代价就是 mmm。我们需要佳佳用最少的总代价实现同学们的意愿,你能帮助佳佳吗? 选择的 mmm 个人不必连续。 tag: 环 Solution 发现如果有 kkk 个人在初始环和目标环中位置相等,那么剩下的人只需要移动 n−kn-kn−k 次即可,因为他们的移动一定可以组成环。 但是建出来的环不一定能使 kkk 取到最大值,所以可以通过类似转一下的方式。 初始环123456 目标环234561 差值111111 注意到相同差值的位置可以通过旋转变成 000,所以 kmaxk_{max}kmax​ 就是最多的相同差值的数量,答案即为 n−kmaxn-k_{max}n−kmax​。 考虑如何构造目标环,首先设 li,ril_i, r_ili​,ri​ 分别表示第 iii 个要求的相邻的点,钦定 an=l1,a1=1a_n=l_1, a_1=1an​=l1​,a1​=1。接下来,每次判断第 iii 点的相邻两数是否在环中,若不在则加入进去,然后继续寻找新加入的这个点额相邻两数,知道环中的节点数为 nnn。 注意计算差值时,不能直接 ai−ia_i-iai​−i,需要加 nnn 后  mod n\bmod{n}modn。另外需要分别计算初始环顺时针和逆时针排列的方式。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 for (int i = 1; i <= n; i++) { if ((i != l[ l[i] ] && i != r[ l[i] ]) || (i != l[ r[i] ] && i != r[ r[i] ])) { cout << -1 << endl; return 0; } } a.push_back(0); a.push_back(1);a.push_back(l[1]); vis[1] = vis[l[1]] = 1; int now = l[1]; while (a.size() != n + 1) { if (!vis[ l[now] ]) { a.push_back(l[now]); vis[l[now]] = 1; now = l[now]; } else if (!vis[ r[now] ]) { a.push_back(r[now]); vis[r[now]] = 1; now = r[now]; } } int maxn = 0; for (int i = 1; i <= n; i++) { t[(a[i] + n - i) % n]++; } for (int i = 0; i < n; i++) { maxn = max(maxn, t[i]); } for (int i = 0; i <= n; i++) t[i] = 0; for (int i = 1; i <= n; i++) { t[(a[i] + n - (n - i + 1)) % n]++; } for (int i = 0; i < n; i++) { maxn = max(maxn, t[i]); } cout << n - maxn << endl; AT_joi2015ho_c JOI Park Link ▶题意 时值 20XX20\text{XX}20XX 年,IOI 国为了给办奥赛做准备,将要修缮 IOI 国中的 JOI 公园。JOI 公园里有 NNN 个广场,这些广场从 111 到 NNN 编号。有 MMM 条道路连接各个广场,这些道路从 111 到 MMM 编号。第 i(1≤i≤M)i(1 \leq i \leq M)i(1≤i≤M) 条道路是一条连接第 AiA_iAi​ 和第 BiB_iBi​ 个广场的双向边,长度为 DiD_iDi​。任意两个广场间一定有道路(直接或间接)相连。 修缮计划如下:首先,选择一个自然数 XXX,将和第一个广场距离等于 XXX 或在 XXX 以下的所有广场(含第一个广场)相互之间连结一条地下通道。广场 iii 和广场 jjj 的距离指,从广场 iii 到广场 jjj 经过的道路长度总和的最小值。定义 CCC 为一个与修筑地下通道花费有关的量(CCC 是整数)。修筑所有地下通道的花费为 C×XC\times XC×X。 接下来,撤去已经通过地下通道连接的广场之间的道路。撤去道路的花费不计。 最后,将没有被撤去的道路进行修补,长为 ddd 的道路修补的花费为 ddd。 修缮计划实施之前,JOI 公园没有地下通道。请求出 JOI 公园修缮花费总和的最小值。 需要注意的是删除的道路不只是 1→u1\to u1→u,还包含 1→u→v(disu<disv)1\to u\to v(dis_u<dis_v)1→u→v(disu​<disv​)。 tag: 最短路 Solution 首先注意到选择的 XXX 一定是某一个点 uuu 到 111 节点的距离,所以先 Dijkstra 跑一遍预处理 disudis_udisu​,然后从小到大排序后枚举每个 disudis_udisu​ 来计算答案。比如样例中的遍历顺序为 1,3,2,4,51, 3, 2, 4, 51,3,2,4,5,可以发现,在枚举到靠后的节点时,它前面的所有点之间的路径都要被拆掉,这些点到当前节点的路径也要被拆掉(如果存在),所以当前拆掉的边可以由上一步拆掉的边转移而来,这也是从小到大的排序的意义。 一个例子,计算完 222 后,1→21\to 21→2 边会被删掉,按照上面的计算方法,下一步计算 333,此时应该拆掉 1→31\to 31→3 和 2→32\to 32→3。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #define int ll int n, m, c; struct node { int pos, dis; bool operator<(const node& x) const { return dis > x.dis; } }; struct edge { int v, w; }; vector<edge> e[N]; bitset<N> vis; node dis[N]; int sum = 0ll; void dij(int u) { for (int i = 1; i <= n; i++) { dis[i].dis = INF; } dis[1].dis = 0ll; priority_queue<node> q; q.push({1, 0}); while (!q.empty()) { int u = q.top().pos; q.pop(); if (vis[u]) continue; vis[u] = 1ll; for (auto x : e[u]) { int v = x.v, w = x.w; if (dis[v].dis > dis[u].dis + w) { dis[v].dis = dis[u].dis + w; if (!vis[v]) q.push({v, dis[v].dis}); } } } } signed main() { n = read(); m = read(); c = read(); for (int i = 1; i <= m; i++) { int u = read(), v = read(), w = read(); e[u].push_back({v, w}); e[v].push_back({u, w}); sum += w; } for (int i = 1; i <= n; i++) { dis[i].pos = i; } dij(1); sort(dis + 1, dis + n + 1); int minn = INF; int last = 0; vis.reset(); for (int i = n; i >= 1; i--) { int ans = dis[i].dis * c; ans += sum; vis[dis[i].pos] = 1; for (auto x : e[dis[i].pos]) { int v = x.v, w = x.w; if (vis[v]) last += w; } minn = min(minn, ans - last); } cout << minn << endl; return 0; } AGC001C Shorten Diameter 给定一颗 nnn 个节点的树,你需要删除一些叶子使得树的直径小于等于 kkk。求最少的删除的点的个数。 tag: 树的直径 Solution 将题目转化为寻找一个中心,使中心左右两边最多延伸 k2\dfrac{k}{2}2k​ 个节点,记能延伸到的节点数为 tottottot。删除的点即为 n−totn-totn−tot。 如果 kkk 是偶数,一定有一个中点,枚举中点即可。 如果 kkk 是奇数,一定有相邻的两个中点,枚举即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 int tot; void dfs(int u, int fa, int step) { tot++; if (step == 0) return; for (auto v : e[u]) { if (v == fa) continue; dfs(v, u, step - 1); } } int main() { int ans = INF; if (!(k & 1)) { for (int i = 1; i <= n; i++) { tot = 0; dfs(i, 0, k / 2); ans = min(ans, n - tot); } } else { for (int u = 1; u <= n; u++) { for (auto v : e[u]) { tot = 0; dfs(v, u, k / 2); dfs(u, v, k / 2); ans = min(ans, n - tot); } } } } P8677 [蓝桥杯 2018 国 A] 采油 Link tag: 贪心 Solution 第一问显然最优情况下答案为边权和的两倍。 考虑第二问,对于一个点 uuu,至少需要耗费 SuS_uSu​ 的人。 首先认为 Bu≥SuB_u\geq S_uBu​≥Su​,因为即使 Bu<SuB_u<S_uBu​<Su​,该节点也需要 SuS_uSu​ 的人。 若只有一个节点,那么耗费的人显然为 BuB_uBu​; 若有两个节点,不妨设为 xxx 和 yyy,且 Bx−Sx>By−SyB_x-S_x>B_y-S_yBx​−Sx​>By​−Sy​,即 xxx 剩下的人数比 yyy 多,那么感性理解肯定要先走 xxx,才能充分发挥剩余的人。试图证一下,先 xxx 后 yyy 的总花费为 max⁡{Bx,Bx+By−(Bx−Sx)}=max⁡{Bx,By+Sx}\max\{B_x, B_x+B_y-(B_x-S_x)\}=\max\{B_x, B_y+S_x\}max{Bx​,Bx​+By​−(Bx​−Sx​)}=max{Bx​,By​+Sx​},则先 yyy 后 xxx 的总花费为 max⁡{By,Bx+Sy}\max\{B_y, B_x+S_y\}max{By​,Bx​+Sy​},将上面的式子移项可得 By+Sx<Bx+SyB_y+S_x<B_x+S_yBy​+Sx​<Bx​+Sy​,结论得证; 将结论推广到同一层上有 kkk 个节点,可以通过两两依次缩点的形式转化为两个节点。 再考虑更一般的情况,在满足第一问的限制下,即按照最短路径,一定是先遍历完每个子树最短。所以搜到一个点时,先将这个点为根的所有子树缩点,按照剩余人数排序,递归继续缩点。 注意搜索时需要从 B−SB-SB−S 最大的点开搜。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 struct node { int b, s; bool operator<(const node &x) const { return b - s > x.b - x.s; } node operator+(const node &x) const { node res; res.b = max(b, s + x.b), res.s = s + x.s; return res; } }a[N]; node dfs(int u, int fa) { vector<node> p; p.push_back(a[u]); for (auto v : e[u]) { if (v == fa) continue; p.push_back(dfs(v, u)); } node res; res.b = res.s = 0; sort(p.begin(), p.end()); for (auto v : p) res = res + v; return res; } int main() { n = read(); int sum = 0; int maxn = 0, maxpos = 1; for (int i = 1; i <= n; i++) { a[i].b = read(); } for (int i = 1; i <= n; i++) { a[i].s = read(); a[i].b = max(a[i].b, a[i].s); if (a[i].b - a[i].s > maxn) { maxn = a[i].b - a[i].s; maxpos = i; } } for (int i = 1; i < n; i++) { int v = read(), w = read(); e[i + 1].push_back(v); e[v].push_back(i + 1); sum += w; } cout << sum * 2 << " " << dfs(maxpos, 0).b << '\n'; return 0; } P2659 美丽的序列 Link 给定一个序列,找到一个区间使得区间最小值与区间长度的乘积最大,输出乘积。 tag: 单调栈 Solution 维护区间最小值,想到用单调栈。 单调递增栈,当遍历后面的元素时,如果此时元素比之前元素最小值小,那么之前元素的最小值地位从当前元素开始失效,也就可以得到之前元素所管辖的区间右端点。同理,也可以找到当前元素管辖区间的左端点,即为弹栈后的栈顶,也就是前面第一个大于当前元素的位置。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 for (int i = 1; i <= n; i++) { q[i].l = 1, q[i].r = n; while (!st.empty() && a[st.top()] > a[i]) { q[st.top()].r = i - 1; st.pop(); } if (!st.empty()) q[i].l = st.top() + 1; st.push(i); } int ans = 0; for (int i = 1; i <= n; i++) { ans = max(ans, (q[i].r - q[i].l + 1) * a[i]); } P12177 [蓝桥杯 2025 省 Python B] 异或和 Link 求: ∑i=1n∑j=i+1n(ai⊕aj)×(j−i)\sum_{i=1}^{n} \sum_{j=i+1}^{n} (a_i \oplus a_j) \times (j - i)i=1∑n​j=i+1∑n​(ai​⊕aj​)×(j−i) tag: 二进制按位 Solution 按位考虑,注意到为 1⊕0=11\oplus0=11⊕0=1,也就是说只有两个数当前位不同才能产生贡献。 按位枚举,对于每一位的数正向扫,统计之前有多少个数可以产生贡献 numnumnum,和产生贡献数的位置和 lsumlsumlsum。 当前枚举到第 jjj 个数。 如果当前位为 000,那么产生的贡献为 2i×(j×num−lsum)2^i\times (j\times num - lsum)2i×(j×num−lsum); 如果为 111,各变量直接用总数减去 111 的即可。 时间复杂度 O(nlog⁡n)\mathcal{O}(n\log n)O(nlogn)。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 for (int i = 0; i <= 20; i++) { int lsum = 0, num = 0; for (int j = 1; j <= n; j++) { int v = ((a[j] >> i) & 1); if (!v) { ans += (1 << i) * (num * j - lsum); } else { ans += (1 << i) * ((j - 1 - num) * j - ((j - 1) * j / 2 - lsum)); num++, lsum += j; } } } P3831 [SHOI2012] 回家的路 Link 有一个 n×nn\times nn×n 的网格图,给定起点和终点,给定若干格点作为换乘站,非换乘站只能沿之前的方向行走,在换乘站可换向。 换乘花费为 111,行走一格花费为 222,求最小花费。 tag:分层图, 最短路 Solution 考虑将起点、终点和可换乘的格点作为节点,对两两直接可达的节点连边。 显然同一行或同一列内相邻两换乘站应当连边,想到分层图。 所有行为一层、所有列为一层建图。同时,上下两层对应相同的节点连边权为 111 的边表示可以换乘。在这个图上跑最短路即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 bool cmpx(node a, node b) { if (a.x != b.x) return a.x < b.x; else return a.y < b.y; } bool cmpy(node a, node b) { if (a.y != b.y) return a.y < b.y; else return a.x < b.x; } int main() { m = read(), n = read(); for (int i = 1; i <= n; i++) { int x = read(), y = read(); p[i].x = x, p[i].y = y, p[i].id = i; e[i].push_back({i + n + 2, 1}); e[i + n + 2].push_back({i, 1}); } p[0].x = read(), p[0].y = read(), p[0].id = 0; p[n + 1].x = read(), p[n + 1].y = read(), p[n + 1].id = n + 1; sort(p, p + n + 2, cmpy); for (int i = 0; i <= n; i++) { if (p[i].y == p[i + 1].y) { int dis = abs(p[i].x - p[i + 1].x); e[p[i].id].push_back({p[i + 1].id, 2 * dis}); e[p[i + 1].id].push_back({p[i].id, 2 * dis}); } } sort(p, p + n + 2, cmpx); for (int i = 0; i <= n; i++) { if (p[i].x == p[i + 1].x) { int dis = abs(p[i].y - p[i + 1].y); e[p[i].id + n + 2].push_back({p[i + 1].id + n + 2, 2 * dis}); e[p[i + 1].id + n + 2].push_back({p[i].id + n + 2, 2 * dis}); } } int ans = INF; w.s = 0; w.dij(); ans = min({w.dis[n + 1], w.dis[n + 1 + n + 2]}); w.s = n + 2; w.vis.reset(); w.dij(); ans = min({ans, w.dis[n + 1], w.dis[n + 1 + n + 2]}); cout << ans << endl; }

2024/7/15
articleCard.readMore

字符串算法全家桶 学习笔记

由字符串全家桶入门到字符串全家桶直僵僵地镶嵌在门框里。 哈希 Hash 翻译为散列表或杂凑函数,音译为哈希,也称 Hash 表。 散列表一般由 Hash 函数和链表结构共同实现完成。 ——我不知道来源。 哈希目的是把一些数据范围很大的数据(整数)或者描述保存比较复杂(字符串)利用 Hash 函数把信息映射到一个范围比较小容易维护的范围内(有点类似离散化),由于映射后的值域范围变小,有可能造成不同的原有不同信息映射为相同的值,造成冲突(映射中的多对一,一对一最理想但是有时候比较困难)。当然没有冲突是最理想的,但是关键在于 Hash 函数的选择,我们的目标是尽量减少冲突或没有冲突。 ——我也不知道来源。 引入 一个简单的例子,我们要查找一个集合内的所有元素,朴素的做法是一个一个遍历,而我们通过按照每个数的个位数字分类保存,再使用链表查找,效率会更高。 此时,按照个位数分类保存就是一个哈希函数 Hash⁡(x)=x mod 10\operatorname{Hash}(x)=x\bmod 10Hash(x)=xmod10。但是我们会发现,这种方式会发现多个数的哈希值相同,即存在很多冲突。如果 Hash⁡(x)=x mod 11\operatorname{Hash}(x)=x\bmod 11Hash(x)=xmod11,就会发现冲突少了很多。 哈希冲突的解决 解决哈希冲突两种常见的方法是闭散列和开散列。 闭散列 也叫开放地址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置(因为定义哈希表时大小肯定不能少于原始数据的个数),那么可以把 key 存放到冲突位置中的“下一个” 空位置中去。 ——我还不知道来源。 寻找下一个空位置的方法一般有两种,即线性探测和二次探测。 线性探测 从哈希函数确定的位置依次向后移动 1,2,…,n1, 2, \dots , n1,2,…,n 个位置,直到找到空位置为止。 二次探测 从哈希函数确定的位置依次向后移动 12,−12,22,−22,…,n1^2, -1^2, 2^2, -2^2, \dots , n12,−12,22,−22,…,n 个位置,直到找到空位置为止。 当然这些不是重点,重点在后面。 开散列 开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。这种方法类似图的邻接点存储,常用数组模拟。目前在实际应用中都是用这种方法。 ——The Same… 其实说人话就是通过像上面 引入 部分的图一样,通过对于每个 Hash 冲突的 Hash\text{Hash}Hash 值建立链表。 如 A={1,5,11,15,20,21,25}A=\{1,5,11,15,20,21,25\}A={1,5,11,15,20,21,25},哈希函数为 hash⁡(x)=x mod 10\operatorname{hash}(x)=x\bmod 10hash(x)=xmod10,则哈希表可用下图表示: 程序实现 哈希表定义 哈希表通常使用结构体定义,要分别记录哈希值、每个哈希值对应的数的个数和链表中下一个的位置,与邻接表(链式前向星)基本一致。 1 2 3 4 5 6 7 8 const int MOD=1e6+3; struct node{ int val; int siz; int nxt; }; node e[N]; int h[MOD]; 哈希的程序主要包含如下三个板块:哈希值计算、插入一个值、查找一个值。 哈希值的计算即为正常的取模运算。 插入函数 也与邻接表加边操作基本一致,不同之处在于如果碰到哈希值相同,应该使 sizi+1siz_i+1sizi​+1。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 void Insert(int x) { int w=x%MOD; for(int i=h[u];i;i=e[i].nxt) { if(e[i].val==x) { e[i].siz++; return; } } e[++tot].val=x;e[tot].siz=1; e[tot].nxt=h[u];h[u]=tot; } 查找函数 遍历链表,当 vali=xval_i=xvali​=x 时,直接返回元素个数即 sizisiz_isizi​,否则返回 000。 1 2 3 4 5 6 7 8 9 inline int Find(int x) { int w=x%MOD; for(int i=h[u];i;i=e[i].nxt) { if(e[i].val==x) return e[i].siz; } return 0; } 例题 已知方程如下: a1x1−a2x2+a3x3−a4x4+a5x5−a6x6=0a_1x_1-a_2x_2+a_3x_3-a_4x_4+a_5x_5-a_6x_6=0a1​x1​−a2​x2​+a3​x3​−a4​x4​+a5​x5​−a6​x6​=0 其中:x1,x2,…,x6x_1, x_2,\dots , x_6x1​,x2​,…,x6​ 是未知数,a1,a2,…,a6a_1, a_2,\dots , a_6a1​,a2​,…,a6​ 是系数,且方程中的所有数均为正整数。 求这个方程的正整数解的个数 sss。 对于 100%100\%100% 的数据,1≤xi≤m≤100,1≤ai≤106,s≤10151\leq x_i\leq m\leq 100, 1\leq a_i\leq 10^6, s\leq 10^{15}1≤xi​≤m≤100,1≤ai​≤106,s≤1015。 思路 考虑哈希。 将原式移项得: a1x1+a3x3+a5x5=a2x2+a4x4+a6x6a_1x_1+a_3x_3+a_5x_5=a_2x_2+a_4x_4+a_6x_6a1​x1​+a3​x3​+a5​x5​=a2​x2​+a4​x4​+a6​x6​ 通过枚举左式所有可能的情况,并将左式的结果记录在一个哈希表中,然后枚举右式的所有可能情况,查找哈希表中是否有这种情况的结果。 时间复杂度 O(m3)O(m^3)O(m3)。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 #define mod 1000007 #define int ll const int N=1e6+10; int m; struct node { int val,siz,nxt; }e[N]; int h[N],tot=0; int ans=0; int Hash(int x) { return x%mod; } void Insert(int x) { int w=Hash(x); for(int i=h[w];i;i=e[i].nxt) { if(e[i].val==x) { e[i].siz++; return ; } } e[++tot].val=x;e[tot].siz++; e[tot].nxt=h[w];h[w]=tot; } int Find(int x) { int w=Hash(x); for(int i=h[w];i;i=e[i].nxt) { if(e[i].val==x) return e[i].siz; } return 0; } signed main() { m=read(); int a1=read(),a2=read(),a3=read(),a4=read(),a5=read(),a6=read(); for(int x1=1;x1<=m;x1++) { for(int x3=1;x3<=m;x3++) { for(int x5=1;x5<=m;x5++) { Insert(a1*x1+a3*x3+a5*x5); } } } for(int x2=1;x2<=m;x2++) { for(int x4=1;x4<=m;x4++) { for(int x6=1;x6<=m;x6++) { ans+=Find(a2*x2+a4*x4+a6*x6); } } } write(ans);el; return 0; } 还有一道板子 P3370 【模板】字符串哈希,太板了就不写了。 字符串哈希 未完待续…… Trie 树 未完待续…… KMP KMP 算法是一种改进的字符串匹配算法,由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称 KMP 算法)。KMP 算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。 ——Baidu Baike。 朴素的字符串匹配 设模式串 ttt 长度为 nnn,主串 sss 长度为 mmm。 最暴力的方法显然是遍历 sss,逐位匹配 ttt 的前缀,当前缀长度为 nnn 时,即为成功匹配。 复杂度显然是 O(nm)O(nm)O(nm)。 KMP 算法思想 考虑这样一组匹配: 1 2 模式串:abbc 文本串:abbabbc 前四位均匹配成功,匹配第五位时发现失配。这时,我们直接将 模式串 向右移动三位,如下所示: 1 2 模式串: abbc 文本串:abbabbc 此时模式串完全匹配成功。 这种算法一定是快速的,所以算法关键部分就是移动位数的计算。 Border 计算部分 Border 在 KMP 算法的定义是:字符串 sss 的一个非 sss 本身的子串 ttt,满足 ttt 既是 sss 的前缀,又是 sss 的后缀的 ttt 的最大长度。 设 iii 为主串 sss 的指针,从 111 开始遍历;jjj 为此时前后缀的长度。 先手算模拟大致过程,以主串为 bbacbbb\texttt{bbacbbb}bbacbbb 为例: iii子串jjj 1b0 2b b1 3bba0 4bbac0 5b bac b1 6bb ac bb2 7bb acb bb2 Border 数组即为所有 jjj。同时,不难发现,iii 是后缀最后一位的下标(如果有),jjj 是前缀最后一位的下标。 接下来就是 Border 数组应该如何计算的问题: 我们以 i=5i=5i=5 为例,此时子串末尾增加了一个 b\texttt{b}b,si=s5=b,sj+1=s1=bs_i=s_5=b, s_{j+1}=s_1=bsi​=s5​=b,sj+1​=s1​=b,即此时 si=sj+1s_i=s_{j+1}si​=sj+1​。得出结论当 si=sj+1s_{i}=s_{j+1}si​=sj+1​ 时,borderi=jborder_i=jborderi​=j,同时 j+1j+1j+1; 当 i=7i=7i=7 时,子串末尾增加了一个 b\texttt{b}b,根据上文的算法,bba\texttt{bba}bba 与 bbb\texttt{bbb}bbb 匹配失败。但此时 jjj 不能直接设为 000,因为整个字串的后缀还可能匹配其前缀(也就是后缀的后缀可以匹配到对应前缀)。 有一个性质 如果一个模式串的后缀匹配了一个前缀,那么这个后缀的后缀一定在这个前缀中出现了,因此对于某个等于后缀的前缀,它就出现在了这个前缀中。 即 Border 的 Border 还是 Border。 通过这个性质,我们可以发现,在这种情况下,我们可以通过将 jjj 跳到 borderjborder_jborderj​ 上,继续向后查找。 这部分的代码,本质上是通过 sss 串自己和自己匹配实现的: 1 2 3 4 5 6 7 8 9 for(int i=2,j=0;i<=len2;i++) { while(j!=0 && s2[i]!=s2[j+1]) { j=border[j]; } if(s2[i]==s2[j+1]) j++; border[i]=j; } 匹配部分 匹配的部分与 Border 计算一样,只不过 Border 是匹配 sss 的前缀和 sss 后缀,而匹配则是比较 sss 和 ttt。 代码: 1 2 3 4 5 6 7 8 9 for(int i=1,j=0;i<=len1;i++) { while(j!=0 && (j==len2 || s1[i]!=s2[j+1])) { j=border[j]; } if(s1[i]==s2[j+1]) j++; if(j==len2) ans[++tot]=i-len2+1; } 板子 P3375 【模板】KMP 字符串匹配 模板题,上文两部分结合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 const int N=1e6+10; string s1,s2; int border[N],ans[N]; int tot=0; int main() { //freopen(".in","r",stdin); //freopen(".out","w",stdout); cin>>s1>>s2; int len1=s1.size(),len2=s2.size(); s1=" "+s1; s2=" "+s2; for(int i=2,j=0;i<=len2;i++) { while(j!=0 && s2[i]!=s2[j+1]) { j=border[j]; } if(s2[i]==s2[j+1]) j++; border[i]=j; } for(int i=1,j=0;i<=len1;i++) { while(j!=0 && (j==len2 || s1[i]!=s2[j+1])) { j=border[j]; } if(s1[i]==s2[j+1]) j++; if(j==len2) ans[++tot]=i-len2+1; } for(int i=1;i<=tot;i++) { write(ans[i]);el; } for(int i=1;i<=len2;i++) { write(border[i]);sp; } return 0; } 时间复杂度 匹配时当前匹配位置每次增加 111,也就是说一共的增加量就到 n+mn+mn+m,跳 Border 的减少也只能减少这么多,所以就是 O(n+m)O(n+m)O(n+m)。 ——zrz 参考链接 KMP字符串匹配算法 2 - Bilibili AC 自动机 是的它不能让你直接 AC 但能让你自动 WA。 前置知识 [Trie 字典树](#Trie 树) KMP 算法思想 AC 自动机其实可以理解成在字典树上运用 KMP 的思想进行字符串匹配。 KMP 是求单字符串的匹配,而 AC 自动机是求多字符串匹配一个字符串。 暴力的方法显然是有多少个字符串跑多少遍 KMP,但明显效率极低。而 AC 自动机,则是将所有的模式串构建成一颗 Trie 树。 比如模式串为 S={he,she,hers,his}S=\{\texttt{he},\texttt{she},\texttt{hers},\texttt{his}\}S={he,she,hers,his},则可以构建如下图的一棵 Trie 树。 Fail 指针 如果一个模式串的后缀是任何一个模式串的前缀,则将该后缀的 Fail 指针指向该前缀。 形式化的,即若 faili=jfail_i=jfaili​=j,则 1∼j1\sim j1∼j 节点的字符串是 1∼i1\sim i1∼i 节点的字符串的一个后缀。 也就是说,Fail 指针是指 最长的/可以在树上找到的/当前字符串的后缀/的末尾/的下标。例如,在上图中,fail9=4fail_9=4fail9​=4。 其实看起来与 KMP 中 Border 类似,只不过 AC 自动机是查找所有模式串中的 Border。 构建 Fail 接下来看如何求 Fail。 首先可以确定的一点是,所有第二层的节点的 Fail 一定指向 root,因为没有长度比 111 还小的字符串。 另外,如果一个点的父亲的 Fail 指针(即 fafailfafailfafail)指向的节点有与当前点相同的字符 iii,则当前点的 failfailfail 直接指向 iii,因为每次求出的 Fail 都是最长的,那最长的 Fail 加一个节点也是最长的。 而上文就表现出来一个问题,就是当求 Fail 时,需要知道当前节点父亲的 Fail,也就是说,我们需要 BFS 层次遍历来求 Fail。 我们可以建立一个 000 号节点,将其所有儿子指向 111,然后将 111 的 Fail 指向 000。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 void build_fail() { for(int i=0;i<26;i++) t[0].c[i]=1; queue<int> q; q.push(1); t[1].fail=0; while(!q.empty()) { int u=q.front(); q.pop(); for(int i=0;i<26;i++) { int fafail=t[u].fail; if(!t[u].c[i]) { t[u].c[i]=t[fafail].c[i]; continue; } t[t[u].c[i]].fail=t[fafail].c[i]; q.push(t[u].c[i]); } } } 查询 Fail 还是像 KMP 一样,如果可以匹配那就继续,如果不能匹配就跳 Fail。同时,我们可以把所有经过节点的 cntcntcnt 设为 −1-1−1,表示已经经过该节点。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int query(char *s) { int len=strlen(s+1),u=1,ans=0; for(int i=1;i<=len;i++) { int now=t[u].c[s[i]-'a']; while(now!=1 && t[now].cnt!=-1) { ans+=t[now].cnt; t[now].cnt=-1; now=t[now].fail; } u=t[u].c[s[i]-'a']; } return ans; } 板子 P3808 【模板】AC 自动机(简单版) 模板题,上文两部分结合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 #include<map> #include<cmath> #include<stack> #include<queue> #include<vector> #include<cstdio> #include<string> #include<iomanip> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define ull unsigned long long #define INF 0x3f3f3f3f #define mod 1000000007 #define bug(x) cout<<"Bug "<<(x)<<endl #define el putchar('\n') #define sp putchar(' ') using namespace std; inline int read() { int s=0,w=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } inline void write(int x) { if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); return; } const int N=1e6+10; struct node { int fail; int c[26]; int cnt; }t[N]; int tot=1; // int bro[N],son[N]; int n; char s[N]; void insert(char *s) { int len=strlen(s+1),now=1; for(int i=1;i<=len;i++) { if(t[now].c[s[i]-'a']==0) { t[now].c[s[i]-'a']=++tot; } now=t[now].c[s[i]-'a']; } t[now].cnt++; } void build_fail() { for(int i=0;i<26;i++) t[0].c[i]=1; queue<int> q; q.push(1); t[1].fail=0; while(!q.empty()) { int u=q.front(); q.pop(); for(int i=0;i<26;i++) { int fafail=t[u].fail; if(!t[u].c[i]) { t[u].c[i]=t[fafail].c[i]; continue; } t[t[u].c[i]].fail=t[fafail].c[i]; q.push(t[u].c[i]); } } } int query(char *s) { int len=strlen(s+1),u=1,ans=0; for(int i=1;i<=len;i++) { int now=t[u].c[s[i]-'a']; while(now!=1 && t[now].cnt!=-1) { ans+=t[now].cnt; t[now].cnt=-1; now=t[now].fail; } u=t[u].c[s[i]-'a']; } return ans; } int main() { n=read(); for(int i=1;i<=n;i++) { scanf("%s",s+1); insert(s); } build_fail(); scanf("%s",s+1); write(query(s));el; return 0; } 参考链接 [算法]轻松掌握ac自动机 - Bilibili 题解 P3808 【【模板】AC自动机(简单版)】 Manacher 用于在 Θ(n)\Theta(n)Θ(n) 的时间复杂度内寻找字符串 SSS 中最长回文子串的长度。 朴素算法 从 1∼n1\sim n1∼n 枚举一个中间点 ccc,然后以此枚举最大可行的回文串长度,最后计算答案。 这样做法的时间复杂度显然是 Θ(n2)\Theta(n^2)Θ(n2) 的,并不够优秀。 Manacher 算法 过程 不难发现,在上文的定义中,回文串长度的奇偶性可能会对算法造成一定影响, 为了统一和方便计算,需要在字符串两两字符之间插入不属于 SSS 字符集的字符。易证此时回文子串长度(包含插入的间隔字符)长度一定为奇数。下文的回文串均默认长度为奇数。 定义一个回文串的半径 d=⌈n2⌉d=\lceil \dfrac{n}{2}\rceild=⌈2n​⌉,左右端点下标分别为 l,rl, rl,r。 参照朴素算法的思路,对于每一个位置 iii,我们仍需要计算极大的 did_idi​,例如,S′= #a#b#b#aS^\prime=\text{~\#a\#b\#b\#a}S′= #a#b#b#a 的 ddd 序列如下: i0123456789 S′S^\primeS′~#a#b#b#a# ddd1121252121 如果已经计算出 ddd,其中最大的 di−1d_i-1di​−1 即为答案。 现在问题转化为如何高效地计算 ddd。注意到回文串具有一个极其优美的性质:若我们已知 ccc 是一个回文串的中心,jjj 也是一个回文串的中心,由于回文的对称,我们可以知道 iii 也是一个合法的回文串(如图)。通过这一操作可以减少重复检查。 现在假设下一步将计算 did_idi​,而 d1∼di−1d_1\sim d_{i-1}d1​∼di−1​ 已经被计算完成,同时维护已找到的最靠右的回文子串的边界 (lc,rc)(l_c,r_c)(lc​,rc​)(即具有最大 rrr 值的回文串,称此回文串 ccc 是极大的)。容易想到可以通过下面的方式实现: 如果 iii 位于当前极大的回文串外,即 i>rci>r_ci>rc​,由于 rcr_crc​ 右侧的字符未被检查过,只能用朴素算法求得 did_idi​; 若 i≤rci\leq r_ci≤rc​,就希望通过之前求得的 ddd 获取一些信息。由于上面的结论,似乎与 iii 关于 ccc 对称的回文串 jjj 的 djd_jdj​ 是可以转移到 did_idi​,思路如图 xxx 所示。然而,有可能 jjj 区间的左端点在区间 ccc 外,也就是 lj<lcl_j<l_clj​<lc​(如图)。此时串 jjj 在 lcl_clc​ 外的部分是否回文无法保证,正确的做法是应当尝试截断回文串,即 did_idi​ 只取确定回文的长度 rc−ir_c-irc​−i,然后继续用朴素算法尝试将其扩展至回文串外 时间复杂度分析 注意到每次计算时 rcr_crc​ 是单调不降的,且每个字符扩展比较的成本是常数。可以证明整个扫描过程中右边界最多只会被更新 Θ(n)\Theta(n)Θ(n) 次,因此总体比较次数是线性的。 核心代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 n = strlen(ss+1); s[0] = '~'; s[1] = '#'; for (int i = 1; i <= n; i++) { s[++m] = ss[i]; s[++m] = '#'; } maxr = 0, mid = 0, r[1] = 1; for(int i = 2; i <= m; i++) { if (i <= maxr) { r[i] = min(r[mid * 2 - i], maxr - i + 1); } while (s[i - r[i]] == s[i + r[i]]) { r[i]++; } if (i + r[i] - 1 > maxr) { maxr = i + r[i] - 1; mid = i; } } int ans = 0; for (int i = 1; i <= m; i++) { ans = max(ans, r[i]); } cout << ans - 1 << endl;

2023/7/10
articleCard.readMore

动态规划 刷题记录

AT_DP_C Vacation 洛谷 Link ▶题意 有 NNN 天,对于每一天 iii(1≤i≤N1 \leq i \leq N1≤i≤N),可以选择以下活动之一: A:在海里游泳,获得幸福度 aia _ iai​。 B:在山上抓虫,获得幸福度 bib _ ibi​。 C:在家做作业,获得幸福度 cic _ ici​。 不能连续两天以上做同样的活动,计算最大总幸福度。 Solution DP 板子题。设 fi,jf_{i,j}fi,j​ 表示截止到第 iii 天时做第 jjj 件事的幸福值总和。 则易得转移方程为: fi,1=max⁡(fi−1,2,fi−1,3)fi,2=max⁡(fi−1,1,fi−1,3)fi,3=max⁡(fi−1,1,fi−1,2)f_{i,1}=\max(f_{i-1,2},f_{i-1,3})\\f_{i,2}=\max(f_{i-1,1},f_{i-1,3})\\f_{i,3}=\max(f_{i-1,1},f_{i-1,2})fi,1​=max(fi−1,2​,fi−1,3​)fi,2​=max(fi−1,1​,fi−1,3​)fi,3​=max(fi−1,1​,fi−1,2​) Core Code 1 2 3 4 5 6 for(int i=1;i<=n;i++) { f[i][1]=max(f[i-1][2],f[i-1][3])+a[i]; f[i][2]=max(f[i-1][1],f[i-1][3])+b[i]; f[i][3]=max(f[i-1][1],f[i-1][2])+c[i]; } AT_DP_K Stones 洛谷 Link ▶题意 NNN 个正整数组成的集合 A={a1,a2,…,aN}A = \{ a _ 1, a _ 2, \ldots, a _ N \}A={a1​,a2​,…,aN​}。太郎君和次郎君将用以下游戏进行对决。 首先,准备一个有 KKK 个石子的堆。两人依次进行以下操作。太郎君先手。 从集合 AAA 中选择一个元素 xxx,从石堆中恰好移除 xxx 个石子。 不能进行操作的人输掉游戏。当两人都按照最优策略行动时,判断谁会获胜。 Solution 显然当一名玩家操作完成后石子数量为 000,则这名玩家必胜。 设 fif_ifi​ 表示剩余 iii 枚石子当前操作的人的输赢情况 (1/01/01/0),可以发现当且仅当当前操作的上一步操作必输,当前操作才可以必胜,即如果有 aja_jaj​ 使得 fi−aj=0f_{i-a_j}=0fi−aj​​=0,则 fi=1f_i=1fi​=1。 初始化 f0=0f_0=0f0​=0,则有: fi={1,aj≤i,fi−aj=00,otherwise.f_i=\begin{cases}1,&a_j\leq i,f_{i-a_j}=0\\0 ,& \text{otherwise.}\end{cases}fi​={1,0,​aj​≤i,fi−aj​​=0otherwise.​ Core Code 1 2 3 4 5 6 7 8 f[0]=0; for(int i=1;i<=k;i++) { for(int j=1;j<=n;j++) { if(i-a[j]>=0 && !f[i-a[j]]) f[i]=1; } } AT_DP_M Candies Link KKK 颗糖分给 nnn 个人,第 iii 个人至少分得 000 颗,至多分得 aia_iai​ 颗,必须分完,求方案数,答案对 109+710^9+7109+7 取模。 tag: 背包 DP, 前缀和 Solution 类似背包的处理思路,设 fi,jf_{i,j}fi,j​ 表示第 iii 个人分完后已经分了 jjj 个糖,它可以由上一步的 (j−ai)∼j(j-a_i)\sim j(j−ai​)∼j 转移得到,所以 fi,j=∑k=max⁡(0,j−ai)jfi−1,kf_{i,j}=\sum^j_{k=\max(0,j-a_i)}f_{i-1,k}fi,j​=k=max(0,j−ai​)∑j​fi−1,k​ 考虑优化时间,滚动数组不可行。发现每一个 iii 对应的值都由 i−1i-1i−1 中连续一段的值转移而来,想到用滚动的前缀和维护 i−1i-1i−1 的所有 fff 值。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 int calc(int l,int r) { if(l==0) return sum[r]; return sum[r]-sum[l-1]; } int main() { f[0][0]=1; for(int i=1;i<=n;i++) { sum[0]=f[i-1][0]; for(int j=1;j<=m;j++) { sum[j]=(sum[j-1]+f[i-1][j]+mod)%mod; } for(int j=0;j<=m;j++) { f[i][j]=(calc(max(0ll,j-a[i]),j)+mod)%mod; } } printf("%lld\n",f[n][m]%mod); } AT_DP_P Independent Set Link 给一棵树,每一个点可以染成黑色或白色,任意两个相邻节点不能都是黑色,求方案数。 tag: 树形 DP Solution 设 fu,0/1f_{u,0/1}fu,0/1​ 表示 uuu 节点染成 W/B 颜色时的方案数。DFS 子树的方案数,可以得到: fu,0=∏v∈u(fv,0+fv,1)fu,1=∏v∈ufv,0\begin{aligned}f_{u,0}&=\prod_{v\in u}(f_{v,0}+f_{v,1})\\f_{u,1}&=\prod_{v\in u}f_{v,0}\end{aligned}fu,0​fu,1​​=v∈u∏​(fv,0​+fv,1​)=v∈u∏​fv,0​​ 注意 111 号点为根,输入无序需建双向边。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 void dfs(int u) { g.vis[u]=1; f[u][0]=f[u][1]=1; for(int i=0;i<e[u].size();i++) { int v=e[u][i]; if(!g.vis[v]) { dfs(v); f[u][0]=(f[u][0]*(f[v][0]+f[v][1]))%mod; f[u][1]=(f[u][1]*f[v][0])%mod; } } } AT_DP_Q Flowers Link 有一排花,共 nnn 个,第 iii 个的高度是 hih_ihi​,权值是 aia_iai​,保证高度互不相同。现在拿走一些花,使剩下的花高度单调递增,问剩下的花权值之和最大是多少。 tag: 线段树优化 DP Solution 带权的最长上升子序列,设 fif_ifi​ 表示第 iii 个元素结尾的最大答案,可以参照最长上升子序列写出转移方程 fi=max⁡j=1i−1{fj∣hj<hi}+aif_{i}=\max_{j=1}^{i-1}\{f_{j}|h_j<h_i\}+a_{i}fi​=j=1maxi−1​{fj​∣hj​<hi​}+ai​ 考虑优化,观察到转移方程是区间最大值,想到用值域线段树优化。将 hih_ihi​ 作为线段树的下标,对应当前高度时的 fif_ifi​。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 struct node { ll val; }t[N * 4]; struct tree { void pushup(int p) { t[p].val = max(t[p * 2].val, t[p * 2 + 1].val); } void modify(int p, int l, int r, int x, ll k) { if (l == r) { t[p].val = k; return; } int mid = (l + r) >> 1; if (x <= mid) modify(p * 2, l, mid, x, k); else modify(p * 2 + 1, mid + 1, r, x, k); pushup(p); } ll query(int p, int l, int r, int x, int y) { if (x <= l && r <= y) { return t[p].val; } ll res = 0; int mid = (l + r) >> 1; if (x <= mid) res = max(res, query(p * 2, l, mid, x, y)); if (y >= mid + 1) res = max(res, query(p * 2 + 1, mid + 1, r, x, y)); return res; } }sgt; int main() { n = read(); for (int i = 1; i <= n; i++) { h[i] = read(); } for (int i = 1; i <= n; i++) { a[i] = read(); } for (int i = 1; i <= n; i++) { f[i] = sgt.query(1, 1, n, 1, h[i]) + a[i]; sgt.modify(1, 1, n, h[i], f[i]); } cout << sgt.query(1, 1, n, 1, n) << endl; return 0; } AT_DP_T Permutation Link 有一个长为 NNN 的正整数排列。给定一个由 < 和 > 组成长为 N−1N-1N−1 的的字符串。对于任意满足 1≤i≤N−11 \le i \le N-11≤i≤N−1 的字符 sis_isi​,如果 sis_isi​ 是 < 则 Pi<Pi+1P_i<P_{i+1}Pi​<Pi+1​、如果 sis_isi​ 是 > 则 Pi>Pi+1P_i>P_{i+1}Pi​>Pi+1​。求满足这样的性质的排列 PPP 的方案数。 Solution 由于 ppp 是排列,我们不在意 ppp 中到底放了什么数,只需要关注当前一步放的数和上一步放的数的大小关系。可以得到状态 fi,jf_{i, j}fi,j​ 表示前 iii 个数形成的排列中,第 iii 个数是第 jjj 大的方案数。 在转移时,若当前填的数需大于前一个数,那么直接得到 fi,j=∑k=1j−1fi−1,k\displaystyle f_{i,j}=\sum_{k=1}^{j-1}f_{i-1,k}fi,j​=k=1∑j−1​fi−1,k​。 若小于前一个数,有 fi,j=∑k=ji−1fi−1,k\displaystyle f_{i,j}=\sum_{k=j}^{i-1}f_{i-1,k}fi,j​=k=j∑i−1​fi−1,k​。可以感性理解,由于前面一定有一个 rank 为 jjj 的数,当前数扔进去的时候,相当于是扔到了原有排列(1∼i−11\sim i-11∼i−1)中 rank 为 j−1j-1j−1 和 jjj 中间,所以说应该加上所有 rank 大于等于 jjj 的贡献,即 j∼i−1j\sim i-1j∼i−1。 注意到转移是求连续一段的和,前缀和优化即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sum[1] = 1; for (int i = 2; i <= n; i++) { for (int j = 1; j <= n; j++) { if (s[i - 1] == '<') { f[j] = (sum[i - 1] - sum[j - 1] + mod) % mod; } else { f[j] = sum[j - 1] % mod; } } for (int j = 1; j <= n; j++) { sum[j] = (sum[j - 1] + f[j]) % mod; } } int ans = 0; for (int i = 1; i <= n; i++) { ans = (ans + f[i]) % mod; } cout << ans % mod << '\n'; AT_DP_W Intervals Link 给定 mmm 条规则形如 (li,ri,ai)(l_i,r_i,a_i)(li​,ri​,ai​),对于一个 01 串,其分数的定义是:对于第 iii 条规则,若该串在 [li,ri][l_i,r_i][li​,ri​] 中至少有一个 1,则该串的分数增加 aia_iai​。 你需要求出长度为 nnn 的 01 串中的最大分数。 tag: 线段树优化 DP, 区间右端点排序 Solution 首先将区间按右端点排序,在右端点处统计答案。 考虑 DP,设 fi,jf_{i,j}fi,j​ 表示前 iii 个位置中最后一个 111 的位置为 jjj 的最大分数。 不难想到 fi,j=max⁡k=1jfi−1,k+∑lp≤k and rp=iap\displaystyle f_{i,j}=\max_{k=1}^j f_{i-1,k}+\sum_{l_p\leq k\text{ and }r_p=i} a_pfi,j​=k=1maxj​fi−1,k​+lp​≤k and rp​=i∑​ap​。即使 [l,r][l, r][l,r] 覆盖到 kkk 位置。 对上式进行优化,发现可以贪心的使 111 的位置尽量靠后,才能最大化 111 的数量,所以 fi,j=fi−1,j+∑lk≤j and rk=iak\displaystyle f_{i,j}=f_{i-1,j}+\sum_{l_k\leq j\text{ and }r_k=i}a_kfi,j​=fi−1,j​+lk​≤j and rk​=i∑​ak​。 优化后,会有 j=ij=ij=i 的特殊情况,此时上一步选的 111 可以在任意位置,取最大值即可。最终转移方程即为: fi,j={max⁡k=1j−1fi−1,k+∑rp=iap,i=jfi−1,j+∑lk≤j and rk=iak,i≠jf_{i,j}=\begin{cases}\max_{k=1}^{j-1} f_{i-1,k}+\sum_{r_p=i} a_p,&i=j\\f_{i-1,j}+\sum_{l_k\leq j\text{ and }r_k=i} a_k,&i\neq j\end{cases}fi,j​={maxk=1j−1​fi−1,k​+∑rp​=i​ap​,fi−1,j​+∑lk​≤j and rk​=i​ak​,​i=ji=j​ 滚动掉一维后,发现枚举位置 iii 时,如果 rj=ir_j=irj​=i,那么这段区间 [lj,rj][l_j, r_j][lj​,rj​] 会在 [lj,i][l_j, i][lj​,i] 中做出 aja_jaj​ 的贡献。扔到线段树上区间加区间查询最大值即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 struct query { int l, r, a; bool operator<(const query &x) const { return r < x.r; } }q[N]; struct node { int val, tag; }; struct tree { node t[4 * N]; void mktag(int p, int w) { t[p].val += w; t[p].tag += w; } void pushdown(int p) { if (t[p].tag) { mktag(p * 2, t[p].tag); mktag(p * 2 + 1, t[p].tag); t[p].tag = 0; } } void pushup(int p) { t[p].val = max(t[p * 2].val, t[p * 2 + 1].val); } void modify(int p, int l, int r, int x, int y, int w) { if (x <= l && r <= y) { mktag(p, w); return; } pushdown(p); int mid = (l + r) >> 1; if (x <= mid) modify(p * 2, l, mid, x, y, w); if (y >= mid + 1) modify(p * 2 + 1, mid + 1, r, x, y, w); pushup(p); } int query(int p, int l, int r, int x, int y) { if (x <= l && r <= y) { return t[p].val; } pushdown(p); int mid = (l + r) >> 1; int res = 0; if (x <= mid) res = max(res, query(p * 2, l, mid, x, y)); if (y >= mid + 1) res = max(res, query(p * 2 + 1, mid + 1, r, x, y)); return res; } }sgt; signed main() { n = read(); m = read(); for (int i = 1; i <= m; i++) { q[i].l = read(), q[i].r = read(), q[i].a = read(); } sort(q + 1, q + m + 1); int nw = 1; for (int i = 1; i <= n; i++) { if (i != 1) sgt.modify(1, 1, n, i, i, sgt.query(1, 1, n, 1, i - 1)); while (q[nw].r == i && nw <= m) { sgt.modify(1, 1, n, q[nw].l, i, q[nw].a); nw++; } } cout << max(0ll, sgt.query(1, 1, n, 1, n)) << endl; return 0; } TDPC_IWI イウィ 洛谷 Link 给定一个仅由字符 i\texttt{i}i 和 w\texttt{w}w 构成的字符串 sss。你可以进行若干次操作,每次从串中选取连续的三个字符 iwi\texttt{iwi}iwi 并删除;每次操作后这三个字符的左侧和右侧会连接在一起,得到一个长度比原来小 333 的新串。求可能的最大操作次数。 tag: 区间 DP Solution 区间 DP,类似合并石子。 我们定义 fi,jf_{i,j}fi,j​ 记录 iii 到 jjj 能删掉多少字符,显然最后答案应除以 333。 因为答案计算的是最大的步数,那么对于一个大区间,在一般情况下的答案就应该是其分成的两个小区间的答案之和。考虑枚举这两个区间之间的分界点 kkk,答案取最大值即可。 本题还需要特判一种特殊情况。如果 sis_isi​ 和 sjs_jsj​ 为 i,sks_ksk​ 为 w,且中间的两个小段可以被完全删除。那么,当中间的被删掉之后,左右的 i 和中间的 w 就会拼在一起,也可以删掉,那么这个区间的答案就应该是它的长度,但显然直接相加有可能会出错。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 for(int a=2;a<=len;a++) { for(int i=1;a+i-1<=len;i++) { int j=a+i-1; for(int k=i;k<j;k++) { f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]); if(s[i]=='i' && s[j]=='i' && s[k]=='w' && f[i+1][k-1] == k-i-1 && f[k+1][j-1] == j-1-k) { f[i][j]=j-i+1; } } } } write(f[1][len]/3); ABC247F Cards Link 给定 nnn 张卡片,每张卡片正反面各有一个数,给定每张卡片正面和反面的数,保证正面的数构成的序列,和反面的数构成的,分别均为 111 到 nnn 的排列,可以选择任意张卡片并获得其正反面的数,要求最终所有获得的数至少包含 111 到 nnn 每个数至少一次。求有多少种取法,对 998244353998244353998244353 取模。 tag: 并查集 Solution trick 题,记住。 想到在两个拥有相同数字的卡片连边,则一个边的两点中必须至少选一个。 由于每张卡有两个数,度数为二,则连完后必定会形成若干个简单环或自环。 根据乘法原理,对于每个环求出方案数后相乘后即为答案。 先上结论,设 fif_ifi​ 表示一个大小为 iii 的环的选择方案数,有如下转移: fi=fi−1+fi−2f_i=f_{i-1}+f_{i-2}fi​=fi−1​+fi−2​ 考虑证明它,设一个如下图的环,其中 others 表示剩余的所有点。 分类讨论,如果选 AAA 点,那么 BBB 和 CCC 点可以任取。转化为剩余一条不含 AAA 的链,这样不好考虑,将 BBB 和 CCC 连接起来,转化为少一个点的环,这个环的答案是 fi−1f_{i-1}fi−1​。但这样还少了一种 BBB 和 CCC 都不算的情况,考虑将 BBB 和 CCC 缩为一点,将个大点不选的方案数位 kkk。 如果不选 AAA 点,那么还是上面的链,但 BBB 和 CCC 必选,按照上面的处理方式,同样将 BBB 和 CCC 缩为一点,这个图的方案数是 fi−2f_{i-2}fi−2​。但这样多算了 BBB 和 CCC 都不选的贡献,可以发现这部分贡献就是 kkk。 所以可以得到: fi=fi−1+k̸+fi−2−k̸f_i=f_{i-1}+\not k+f_{i-2}-\not kfi​=fi−1​+k+fi−2​−k 用并查集存环即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 n = read(); for (int i = 1; i <= n; i++) fa[i] = i; for (int i = 1; i <= n; i++) { t[read()] = i; } for (int i = 1; i <= n; i++) { q[i] = read(); merge(i, t[ q[i] ]); } for (int i = 1; i <= n; i++) { siz[find(i)]++; } f[1] = 1ll, f[2] = 3ll; for (int i = 3; i < N; i++) { f[i] = (f[i - 1] + f[i - 2]) % mod; } int ans = 1ll; f[0] = 1ll; for (int i = 1; i <= n; i++) { ans = (ans * f[ siz[i] ] % mod + mod) % mod; } ABC336D Pyramid Link ▶题意 对于正整数 kkk,一个大小为 kkk 的“金字塔数列”为一个长度为 2k−12k-12k−1 的数列,里面的数字依次为 1,2,3,…k−1,k,k−1,…3,2,11,2,3,\dots k-1,k,k-1,\dots 3,2,11,2,3,…k−1,k,k−1,…3,2,1。 现在给一个长度为 nnn 的数列 SSS,你可以进行以下操作任意次,使得数列最后变为一个“金字塔数列”: 选择一个数 i(1≤i≤n)i(1 \le i \le n)i(1≤i≤n),把 SiS_iSi​ 减少 111。 删除整个数列的第一个或最后一个数字。 问最后生成的“金字塔数列”的最大的 kkk 是多少。 Solution 显然一个金字塔数列是由左右两部分拼接而成的。设 fif_{i}fi​ 表示前 iii 个数能组成左半部分的最长长度,gig_{i}gi​ 表示以 iii 为首的序列能组成右半部分的最长长度(差不多等价于后 iii 个数,但注意转移方程的写法)。一个明显的性质是如果满足可以构成长度为 xxx 的序列,那么一定可以通过删掉元素构成长度为 x−1x-1x−1 的序列,所以可以发现以 iii 为中间项的最长长度即为 min⁡{fi,gi}\min\{f_i, g_i\}min{fi​,gi​}。 以 fff 为例,假设 sis_isi​ 的所有值都是 +∞+\infty+∞,可以得到显然的转移方程 fi=fi−1+1f_{i}=f_{i-1}+1fi​=fi−1​+1。如果加上 sis_isi​ 的限制条件,那么 fi=min⁡{fi−1+1,si}f_i=\min\{f_{i-1}+1, s_i\}fi​=min{fi−1​+1,si​}。同理可得 gi=min⁡{gi+1+1,si}g_i=\min\{g_{i+1}+1, s_i\}gi​=min{gi+1​+1,si​}。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 n = read(); for (int i = 1; i <= n; i++) { a[i] = read(); } f[1] = g[n] = 1; for (int i = 2; i <= n; i++) { f[i] = min(f[i-1] + 1, a[i]); } for (int i = n - 1; i >= 1; i--) { g[i] = min(g[i+1] + 1, a[i]); } int ans = 0; for (int i = 1; i <= n; i++) { ans = max(ans, min(f[i], g[i])); } cout << ans << endl; SP703 Mobile Service Problem Link ▶题意 有 333 个流动员工,任何时刻只有一名员工可以移动,不允许同一位置上有 222 个及以上员工。 从位置 ppp 移动到位置 qqq 需要花费 c(p,q)c(p,q)c(p,q) 的价钱,不移动不需要花费(即 c(i,i)=0c(i,i)=0c(i,i)=0 )但不保证 c(p,q)=c(q,p)c(p,q)=c(q,p)c(p,q)=c(q,p)。 现在给出 NNN 个请求,第 iii 个请求发生在位置 xix_ixi​。公司必须按照顺序,派一名员工到位置 xix_ixi​,过程中不能去其他地方,也就是必须直接过去。 333 个流动员工的初始位置分别为 1,2,31,2,31,2,3。 求公司的最小花费。 tag: DP Solution 设 fi,x,y,zf_{i,x,y,z}fi,x,y,z​ 表示处理到第 iii 个请求,三个人分别在 x,y,zx,y,zx,y,z 位置上时的最小值。注意到三个人中一定会有一个人在上一个请求的位置,故状态可以优化为 fi,x,yf_{i,x,y}fi,x,y​,此时令 z=qi−1z=q_{i-1}z=qi−1​ 则有 fi+1,x,y=min⁡(fi+1,x,y,fi,x,y+cz,qi+1)fi+1,x,z=min⁡(fi+1,x,z,fi,x,y+cy,qi+1)fi+1,y,z=min⁡(fi+1,y,z,fi,x,y+cx,qi+1)f_{i+1,x,y}=\min(f_{i+1,x,y},f_{i,x,y}+c_{z,q_{i+1}})\\f_{i+1,x,z}=\min(f_{i+1,x,z},f_{i,x,y}+c_{y,q_{i+1}})\\f_{i+1,y,z}=\min(f_{i+1,y,z},f_{i,x,y}+c_{x,q_{i+1}})fi+1,x,y​=min(fi+1,x,y​,fi,x,y​+cz,qi+1​​)fi+1,x,z​=min(fi+1,x,z​,fi,x,y​+cy,qi+1​​)fi+1,y,z​=min(fi+1,y,z​,fi,x,y​+cx,qi+1​​) 初值 q0=1,f0,2,3=0q_0=1, f_{0,2,3}=0q0​=1,f0,2,3​=0。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 for(int i=0;i<n;i++) { for(int x=1;x<=l;x++) { for(int y=1;y<=l;y++) { int z=q[i]; if(x==y || x==z || y==z) continue; f[i+1][x][y]=min(f[i+1][x][y],f[i][x][y]+c[z][q[i+1]]); f[i+1][z][y]=min(f[i+1][z][y],f[i][x][y]+c[x][q[i+1]]); f[i+1][x][z]=min(f[i+1][x][z],f[i][x][y]+c[y][q[i+1]]); } } } int ans=INF; for(int x=1;x<=l;x++) { for(int y=1;y<=l;y++) { int z=q[n]; if(x==y || x==z || y==z) continue; ans=min(ans,f[n][x][y]); } } P4310 绝世好题 Link 和同类题 CF264B Good Sequences 给定一个长度为 nnn 的数列 aia_iai​,求 aia_iai​ 的子序列 bib_ibi​ 的最长长度 kkk,满足 bi and bi−1≠0b_i\ \text{and}\ b_{i-1} \neq 0bi​ and bi−1​=0,其中 2≤i≤k2\leq i\leq k2≤i≤k。 tag: 位运算, DP Solution 设 fif_{i}fi​ 表示最后一个数为 aia_iai​ 的最长长度,biti\text{bit}_ibiti​ 表示遍历到当前数二进制位 iii 为 111 的数量。 可以注意到只要两个数同一二进制位都为 111,那么他们与起来一定不等于 000。同时可以注意到上面的结论还可以传递,比如 (1000)2 and (1010)2 and (0010)2≠0(1000)_2\ \text{and}\ (1010)_2\ \text{and}\ (0010)_2\neq 0(1000)2​ and (1010)2​ and (0010)2​=0。 所以在每次循环时,先通过枚举 aia_iai​ 每一个二进制位更新 fif_ifi​,然后用当前情况的 fif_ifi​ 去更新 aia_iai​ 二进制为为 111 的 biti\text{bit}_ibiti​。 {fi=max⁡(fi,bitj)bitj=fi,ai and (1<<j)≠0\begin{cases}f_i&=\max(f_i, \text{bit}_j)\\\text{bit}_j&=f_i\end{cases}, a_i\ \text{and}\ (1<<j)\neq 0{fi​bitj​​=max(fi​,bitj​)=fi​​,ai​ and (1<<j)=0 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 for(int i=1;i<=n;i++) { for(int j=0;j<=32;j++) { if((1<<j)&a[i]) f[i]=max(f[i],bit[j]+1); } for(int j=0;j<=32;j++) { if((1<<j)&a[i]) bit[j]=f[i]; } } int ans=0; for(int i=1;i<=n;i++) { ans=max(ans,f[i]); } P1944 最长括号匹配 Problem Link ▶题意 对一个由 (,),[,] 括号组成的字符串,求出其中最长的括号匹配子串。 (),[] 是括号匹配的字符串。 若 A 是括号匹配的串,则 (A),[A] 是括号匹配的字符串。 若 A,B 是括号匹配的字符串,则 AB 也是括号匹配的字符串。 例如:(),[],([]),()() 都是括号匹配的字符串,而 ][,[(]) 则不是。 字符串 A 的子串是指由 A 中连续若干个字符组成的字符串,包含空串。 Solution 设 fif_ifi​ 表示到 sis_isi​ 时最长括号匹配,从头开始线性扫描,扫到后半括号时判断是否能组成匹配。 显然,当且仅当在其 前面括号匹配长度(fi−1f_{i-1}fi−1​)的前一个字符是同类型的前半括号(即类似 (xxx))。 由此可得式子 fi=fi−1+fi−fi−1−2+2f_i=f_{i-1}+f_{i-f_{i-1}-2}+2fi​=fi−1​+fi−fi−1​−2​+2。其中 i−fi−1−2i-f_{i-1}-2i−fi−1​−2 表示前半括号。 Core Code 1 2 3 4 5 6 7 8 9 10 11 for(int i=1;i<=n;i++) { if((s[i]==')' && s[i-f[i-1]-1]=='(') || (s[i]==']' && s[i-f[i-1]-1]=='[')) f[i]=f[i-1]+f[i-f[i-1]-2]+2; if(ans<f[i]) { ans=f[i]; last=i; } } for(int i=last-ans+1;i<=last;i++) { putchar(s[i]); } el; P1284 三角形牧场 Problem Link 给定多个线段,求全部使用情况下最大能围成的三角形周长。 tag: 背包 Solution 显然要用海伦公式求周长,那就需要枚举三角形三条边的长度。由于所有边都需要使用,可以优化为仅枚举两条边的长度。 设 fk,i,jf_{k,i,j}fk,i,j​ 表示第 kkk 个边时,是否存在一个两边长为 i,ji, ji,j 的三角形。 类似 01 背包思路,fkf_kfk​ 可以由 fk−1f_{k-1}fk−1​ 转移而来,当前的边可以加在 i,ji,ji,j 和第三条边上,也就可以由 fk−1,i−lk,j,fk−1,i,j−lk,fk−1,i,jf_{k-1, i-l_k, j}, f_{k-1, i, j-l_k}, f_{k-1, i, j}fk−1,i−lk​,j​,fk−1,i,j−lk​​,fk−1,i,j​ 转移而来 fk,i,j={true,fk−1,i−lk,j=true or fk−1,i,j−lk=true or fk−1,i,j=truefalse,otherwise.f_{k,i,j}=\begin{cases}\text{true}, &f_{k-1,i-l_k,j}=\text{true}\ \text{or}\ f_{k-1,i,j-l_k}=\text{true}\\text{or}\ f_{k-1,i,j}=\text{true}\\\text{false}, &\text{otherwise.}\end{cases}fk,i,j​={true,false,​fk−1,i−lk​,j​=true or fk−1,i,j−lk​​=true or fk−1,i,j​=trueotherwise.​ 同 01 背包一样,kkk 这一维可以滚动掉。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 bool check(int a,int b,int c) { if(a+b>c && a+c>b && b+c>a) return 1; else return 0; } double calc(double a,double b,double c) { double p=(a+b+c)/2.0; return 100.0*sqrt(p*(p-a)*(p-b)*(p-c)); } int main() { f[0][0]=1; for(int i=1;i<=n;i++) { for(int j=p;j>=0;j--) { for(int k=p;k>=0;k--) { if(j-l[i]>=0 && f[j-l[i]][k]) f[j][k]=1; if(k-l[i]>=0 && f[j][k-l[i]]) f[j][k]=1; } } } int ans=-1; for(int i=1;i<=p;i++) { for(int j=1;j<=p;j++) { if(check(i,j,p-i-j) && f[i][j]) ans=max(ans,(int)calc(i,j,p-i-j)); } } } P4084 [USACO17DEC] Barn Painting G Problem Link 给定一颗 NNN 个节点组成的树,你要给每个点涂上三种颜色之一,其中有 KKK 个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数。 tag: 树形 dp Solution 树形 DP,设 fi,jf_{i,j}fi,j​ 为 iii 节点颜色 jjj 的方案数。 若 iii 已经被染色 jjj 了,那显然 fi,j=1f_{i,j}=1fi,j​=1,其他为 000;若未被染色,则 fi,j=1,j∈[1,3]f_{i,j}=1, j\in [1,3]fi,j​=1,j∈[1,3]。 从下向上转移: {fu,1=∏v∈son(u)(fv,2+fv,3)fu,2=∏v∈son(u)(fv,1+fv,3)fu,3=∏v∈son(u)(fv,1+fv,2)\begin{cases}f_{u,1}=\prod_{v\in \text{son}(u)} (f_{v,2}+f_{v,3})\\f_{u,2}=\prod_{v\in \text{son}(u)} (f_{v,1}+f_{v,3})\\f_{u,3}=\prod_{v\in \text{son}(u)} (f_{v,1}+f_{v,2})\end{cases}⎩ ⎨ ⎧​fu,1​=∏v∈son(u)​(fv,2​+fv,3​)fu,2​=∏v∈son(u)​(fv,1​+fv,3​)fu,3​=∏v∈son(u)​(fv,1​+fv,2​)​ Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #define int ll vector<int> e[N]; int n,k; int f[N][5]; bool is_colored[N]; bool vis[N]; void dfs(int u) { vis[u]=1; for(int i=0;i<e[u].size();i++) { int v=e[u][i]; if(!vis[v]) { dfs(v); f[u][1]=(f[u][1]*((f[v][2]+f[v][3]+mod)%mod)+mod)%mod; f[u][2]=(f[u][2]*((f[v][1]+f[v][3]+mod)%mod)+mod)%mod; f[u][3]=(f[u][3]*((f[v][1]+f[v][2]+mod)%mod)+mod)%mod; } } } signed main() { n=read();k=read(); for(int i=1;i<n;i++) { int u=read(),v=read(); e[u].push_back(v); e[v].push_back(u); } for(int i=1;i<=k;i++) { int b=read(),c=read(); f[b][c]=1; is_colored[b]=1; } for(int i=1;i<=n;i++) { if(!is_colored[i]) f[i][1]=f[i][2]=f[i][3]=1; } dfs(1); printf("%lld\n",(f[1][1]+f[1][2]+f[1][3]+mod)%mod); return 0; } P2458 [SDOI2006] 保安站岗 Link 给定一颗树,每个点有点权 kkk,要求一条边的两个端点至少有一个被占用,求占用整棵树的代价的最小值。 tag: 树形 DP 与 P2016 战略游戏 不同,本题为守点。如 1-2-3-4 本题可以选择 1 和 4,但战略游戏不可。所以本题需要设这三个状态。 本题守点,意味着如果一个点不选,那么只需要与这个点相连的任一点选择即可,而守边则就需要与这个点相连的所有点都选。 Solution 首先不能将状态设为一个点被占或不占,这样会造成向上转移时父节点无法影响子节点。 设 fu,1/2/3f_{u,1/2/3}fu,1/2/3​ 表示 uuu 节点 自身被占用/被儿子覆盖/被父亲覆盖。 首先第一种情况显然 fu,1=∑v∈son(u)min⁡(fv,1,fv,2,fv,3)+kuf_{u,1}=\sum_{v\in \text{son}(u)}\min(f_{v,1}, f_{v,2}, f_{v,3})+k_ufu,1​=∑v∈son(u)​min(fv,1​,fv,2​,fv,3​)+ku​。 对于第三种情况,由于 uuu 被父亲覆盖,自身未被占用,那么就需要使 以 uuu 的儿子 vvv 为根的子树中的点都被覆盖。问题转化后,只有 vvv 自身被占用和 vvv 被儿子覆盖可以满足条件,即 fu,3=∑v∈son(u)min⁡(fv,1,fv,2)f_{u,3}=\sum_{v\in \text{son}(u)}\min(f_{v,1}, f_{v,2})fu,3​=∑v∈son(u)​min(fv,1​,fv,2​)。 对于第二种情况,分析方式类似第三种,首先要满足子树被覆盖。同时,要有至少一个 vvv 自身被占用,才能影响到 uuu。可以在上面的式子的基础上略加更改,若最小值全部被 fv,2f_{v,2}fv,2​ 取到,那么最后再加上所有 vvv 中 fv,1f_{v,1}fv,1​ 最小的一个即可。 最终答案即为 min⁡(froot,1,froot,2)\min(f_{\text{root},1}, f_{\text{root},2})min(froot,1​,froot,2​)。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 void dfs(int u,int fa) { int minn=INF; bool flag=0; for(auto v:e[u]) { if(v==fa) continue; dfs(v,u); f[u][1]+=min(f[v][1],min(f[v][2],f[v][3])); f[u][2]+=min(f[v][1],f[v][2]); f[u][3]+=min(f[v][1],f[v][2]); minn=min(minn,f[v][1]-f[v][2]); if(f[v][1]<f[v][2]) flag=1; } if(!flag) f[u][2]+=minn; } int main() { n=read(); for(int i=1;i<=n;i++) { int u=read(); k[u]=read(); int m=read(); f[u][1]=k[u]; for(int j=1;j<=m;j++) { int v=read(); e[u].push_back(v); e[v].push_back(u); } } dfs(1,0); cout<<min(f[1][1],f[1][2])<<endl; return 0; } P2016 战略游戏 Link 给定一颗树,一个节点可以看守相邻的所有边,求看守整棵树需要的最少的节点数。 tag: 树形 DP 本题与上一题不用的是,本题可以转化为一个点可以看守与这个点相连的所有边。 本题守边,意味着如果一个点不选,那么就需要与这个点相连的所有点都选,而守点则只需要与这个点相连的任一点选择即可。 Solution 设 fu,0/1f_{u,0/1}fu,0/1​ 表示 uuu 节点选 / 不选。 如果 uuu 不选,那么他的所有儿子必选,因为需要满足看守所有的边,fu,0=∑v∈son(u)fv,1f_{u,0}=\sum_{v\in \text{son}(u)} f_{v,1}fu,0​=∑v∈son(u)​fv,1​; 如果 uuu 选,那么他的儿子选不选并不重要,fu,0=∑v∈son(u)min⁡{fv,0,fv,1}f_{u,0}=\sum_{v\in \text{son}(u)}\min\{f_{v,0}, f_{v,1}\}fu,0​=∑v∈son(u)​min{fv,0​,fv,1​}。 Core Code 1 2 3 4 5 6 7 8 9 void dfs(int u,int fa) { f[u][1]=1; for(auto v:e[u]) { if(v==fa) continue; dfs(v,u); f[u][0]+=f[v][1]; f[u][1]+=min(f[v][0],f[v][1]); } } P3478 [POI2008] STA-Station Link 给出一个 nnn 个点的树,找出一个点,使以这个点为根的树所有点的深度之和最大 tag: 树形 DP, 换根 DP Solution 换根板子。 首先考虑如何暴力,显然是以每个点为根都跑一边 dfs,时间复杂度 O(n2)\mathcal O(n^2)O(n2)。 一般换根 DP 题的处理思路是: 先指定一个根节点,一次 dfs 自下而上,用子节点的值更新父节点; 从上一步的根出发,dfs 转移父节点对子节点的贡献。 设 fuf_{u}fu​ 为以 uuu 为根的深度和。运用人类智慧可以注意到 uuu 节点的值可以通过其父亲转移。如下图,我们已经处理好了 222 号节点的答案,那么发现以 444 为根的时,444 的子树(包括自己)的相对深度都减少了 111,而 444 上面的三个点深度都增加了 111。 可以得到转移方程: fv=fu−sizv×1+(n−sizv)×1=fu+n−2×sizvf_{v}=f_{u}-\text{siz}_{v}\times 1+(n-\text{siz}_{v})\times 1=f_u+n-2\times \text{siz}_vfv​=fu​−sizv​×1+(n−sizv​)×1=fu​+n−2×sizv​ 其中 sizv×1\text{siz}_v\times 1sizv​×1 表示 444 的子树,n−sizvn-\text{siz}_vn−sizv​ 表示 444 上面的点。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 void dfs1(int u,int fa) { g.siz[u]=1; for(auto v:e[u]) { if(v==fa) continue; g.dep[v]=g.dep[u]+1; dfs1(v,u); g.siz[u]+=g.siz[v]; } } void dfs2(int u,int fa) { for(auto v:e[u]) { if(v==fa) continue; f[v]=f[u]+n-2ll*g.siz[v]; dfs2(v,u); } } int main() { dfs1(1,0); for(int i=2;i<=n;i++) { f[1]+=g.dep[i]; } dfs2(1,0); ll ans=-INF,maxn=-INF; for(int i=1;i<=n;i++) { if(maxn<f[i]) { maxn=f[i]; ans=i; } } cout<<ans<<endl; return 0; } P3047 [USACO12FEB] Nearby Cows G Link 给你一棵 nnn 个点的树,点带权,对于每个节点求出距离它不超过 kkk 的所有节点权值和 mim_imi​。 tag: 换根 DP Solution 设 fu,df_{u,d}fu,d​ 为与 uuu 节点距离小于 kkk 的权值和。 两边 dfs,第一遍向上转移,计算子树对当前节点的贡献。注意到与 uuu 节点距离小于 kkk 的节点数可以由它的左右子树转移而来,等价于其与所有子节点距离小于 k−1k-1k−1 的节点数之和,得到 fu,d=∑v∈son(u)fv,d−1f_{u,d}=\sum_{v\in \text{son}(u)} f_{v,d-1}fu,d​=∑v∈son(u)​fv,d−1​。 第二遍时计算父亲对当前节点的贡献。同样可以由一的思路 fv,d=fu,d−1(v∈son(u))f_{v,d}=f_{u,d-1}(v\in \text{son}(u))fv,d​=fu,d−1​(v∈son(u)),但是注意到这样会重复计算子树中一部分的节点,因为到 uuu 距离为 ddd 的点包含到 vvv 距离为 d−1d-1d−1 的点,如下图的 f2,2f_{2,2}f2,2​ 就包含了 f3,1f_{3,1}f3,1​ 的贡献,所以我们简单容斥一下减去 fv,d−2f_{v,d-2}fv,d−2​ 的部分。 注意在进行第二遍 dfs 时,要注意循环顺序,防止容斥后的 fff 影响未更新的。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 void dfs1(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; dfs1(v, u); for (int d = 1; d <= k; d++) { f[u][d] += f[v][d-1]; } } } void dfs2(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; for (int d = 1; d <= k; d++) { f[v][d] += f[u][d-1]; } for (int d = k; d >= 2; d--) { f[v][d] -= f[v][d-2]; } dfs2(v, u); } } CF474E Pillars Link 给定序列长度为 nnn 的序列 aaa,和 ddd。 找出一个最长的 aaa 的子序列 bbb(设其长度为 mmm),使得对于任意的 1≤i<m1\le i\lt m1≤i<m,有 ∣bi+1−bi∣≥d|b_{i+1}-b_i|\ge d∣bi+1​−bi​∣≥d。 输出 mmm 和序列 bbb 在序列 aaa 中每个数的下标。 tag: 动态开点线段树, 线段树优化 DP Solution 设 fif_ifi​ 表示前 iii 位的最大长度,可以得到一个显然的转移方程 fi=max⁡∣bi−bj∣≥d{fj}+1=max⁡1≤j≤ai−d or ai+d≤j≤n{fj}+1\begin{aligned}f_i &= \max_{\lvert b_i - b_j\rvert \geq d}\{f_j\} + 1\\&=\max_{1\leq j\leq a_i - d\ \text{or}\ a_i + d\leq j\leq n}\{f_j\} + 1\end{aligned}fi​​=∣bi​−bj​∣≥dmax​{fj​}+1=1≤j≤ai​−d or ai​+d≤j≤nmax​{fj​}+1​ 考虑线段树优化掉两部分区间最值。使用权值线段树,每次计算完 iii 后把 fif_ifi​ 放到对应的 aia_iai​ 的位置即可。 数据范围过大,需动态开点或离散化。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 int n, d; int tot = 0; int rt; struct pr { int val, id; bool operator < (pr const& x) { return val < x.val; } }a[N], f[N], pre[N]; pr max(pr x, pr y) { if (x < y) return y; else return x; } struct node { pr val; int l, r; }t[40 * N]; struct tree { void pushup(int p) { t[p].val = max(t[t[p].l].val, t[t[p].r].val); } void modify(int &p, int l, int r, int x, pr w) { if (!p) p = ++tot; if (l == r) { if (t[p].val < w) t[p].val = w; return; } int mid = (l + r) >> 1; if (x <= mid) modify(t[p].l, l, mid, x, w); else modify(t[p].r, mid + 1, r, x, w); pushup(p); } pr query(int p, int l, int r, int x, int y) { if (!p || y < x) return {0, 0}; if (x <= l && r <= y) { return t[p].val; } int mid = (l + r) >> 1; pr res = {-INF, 0}; if (x <= mid) res = max(res, query(t[p].l, l, mid, x, y)); if (y >= mid + 1) res = max(res, query(t[p].r, mid + 1, r, x, y)); return res; } }sgt; signed main() { n = read(); d = read(); for (int i = 1; i <= n; i++) { a[i].val = read(); a[i].id = i; } pr maxn = {0, 0}; for (int i = 1; i <= n; i++) { f[i] = max(sgt.query(rt, 1, MAXN, 1, a[i].val - d), sgt.query(rt, 1, MAXN, a[i].val + d, MAXN)); bug(f[i].id); f[i].val += 1; maxn = max(maxn, {f[i].val, i}); sgt.modify(rt, 1, MAXN, a[i].val, {f[i].val, i}); } cout << maxn.val << endl; stack<int> st; for (int i = maxn.id; i >= 1; i = f[i].id) { bug(f[i].id); st.push(i); } while (!st.empty()) { cout << st.top() << " "; st.pop(); } return 0; } CF708C Centroids Link 给定一颗树,你有一次将树改造的机会,改造的意思是删去一条边,再加入一条边,保证改造后还是一棵树。 请问有多少点可以通过改造,成为这颗树的重心?(如果以某个点为根,每个子树的大小都不大于 n2\dfrac{n}{2}2n​,则称某个点为重心) tag: 树形 DP, 换根 DP Solution 根据重心的定义,如果一个点 uuu 不是重心,那么它的子树中一定有且仅有一个的 siz>⌊n2⌋siz > \lfloor\frac{n}{2}\rfloorsiz>⌊2n​⌋。如果想要把 uuu 变成重心,那么就需要在这个子树中找到一个更小的子树,把它接到 uuu 上,要解决的是是否存在一个这样的子树可以满足条件。 如果先将一个不需要操作即可满足条件的节点钦定为根,那么这棵树的所有子树都满足 siz≤⌊n2⌋siz\leq \lfloor\frac{n}{2}\rfloorsiz≤⌊2n​⌋。 所以,若在这棵新树上进行 DP,对于任何一个节点 uuu,如果它不是重心,只能因为除了它的子树以外的点数不满足要求,即 n−sizun - siz_un−sizu​。我们记录一个 gug_ugu​ 表示除了 uuu 子树以外的,不超过 ⌊n2⌋\lfloor\frac{n}{2}\rfloor⌊2n​⌋ 的最大子树大小,这个子树就是用来切下来挂到 uuu 上的。 那么,只需要判断除了上面这两部分一定合法的,剩下的那些点是否合法,即 n−sizu−gu≤⌊n2⌋n - siz_u - g_u \leq \lfloor\frac{n}{2}\rfloorn−sizu​−gu​≤⌊2n​⌋ 是否成立。 也就是说,问题转化为求 gug_ugu​。 考虑自上而下转移,gug_ugu​ 可能来自于(faufa_ufau​ 的子树)/(gfaug_{fa_u}gfau​​)/(除了子树以外所有)。由于第一种情况,还要记录一个 fuf_ufu​ 表示以 uuu 为根的子树中,不超过 ⌊n2⌋\lfloor\frac{n}{2}\rfloor⌊2n​⌋ 的最大子树大小。我们还可以发现,在转移 gug_ugu​ 时,可能 ffauf_{fa_u}ffau​​ 就表示 uuu 的子树,为了解决这种情况,需要记录最大值 fu,0f_{u, 0}fu,0​ 和次大值 fu,1f_{u, 1}fu,1​。 显然 fu,0f_{u, 0}fu,0​ 需要自下而上转移: fu,0={fv,0,sizv>⌊n2⌋sizu,sizv≤⌊n2⌋f_{u, 0}=\begin{cases}f_{v, 0}, &\text{siz}_v >\lfloor\frac{n}{2}\rfloor\\\text{siz}_u, &\text{siz}_v \leq\lfloor\frac{n}{2}\rfloor\end{cases}fu,0​={fv,0​,sizu​,​sizv​>⌊2n​⌋sizv​≤⌊2n​⌋​ 可以按下面的 trick 维护次大值,为了表示方便,用 xxx 表示需要被更新的数: {fu,1=fu,0,fu,0=x,fu,0<xfu,1=x,fu,0≤x<fu,1\begin{cases}f_{u, 1} = f_{u, 0}, f_{u, 0} = x, &f_{u, 0} < x\\f_{u, 1} = x, &f_{u, 0}\leq x < f_{u, 1}\end{cases}{fu,1​=fu,0​,fu,0​=x,fu,1​=x,​fu,0​<xfu,0​≤x<fu,1​​ 然后即可自上而下转移 gug_ugu​: gv=max⁡{fu,1,fu,0=sizvfu,0,fu,0≠sizvgun−sizv,n−sizv≤⌊n2⌋g_v=\max\begin{cases}f_{u, 1}, &f_{u, 0} = \text{siz}_v\\f_{u, 0}, &f_{u, 0} \neq \text{siz}_v\\g_u\\n - \text{siz}_v, &n - \text{siz}_v \leq \lfloor\frac{n}{2}\rfloor\end{cases}gv​=max⎩ ⎨ ⎧​fu,1​,fu,0​,gu​n−sizv​,​fu,0​=sizv​fu,0​=sizv​n−sizv​≤⌊2n​⌋​ Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 void findrt(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; findrt(v, u); siz[u] += siz[v]; if (siz[v] > n / 2) return; } if (n - siz[u] > n / 2) return; root = u; } void dfs1(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; dfs1(v, u); siz[u] += siz[v]; if (siz[v] > n / 2) { if (f[v][0] > f[u][0]) { f[u][1] = f[u][0]; f[u][0] = f[v][0]; } else if (f[v][0] > f[u][1]) { f[u][1] = f[v][0]; } } else { if (siz[v] > f[u][0]) { f[u][1] = f[u][0]; f[u][0] = siz[v]; } else if (siz[v] > f[u][1]) { f[u][1] = siz[v]; } } } } void dfs2(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; g[v] = max(g[v], g[u]); if (n - siz[v] <= n / 2) { g[v] = max(g[v], n - siz[v]); } if (f[u][0] == siz[v]) { g[v] = max(g[v], f[u][1]); } else { g[v] = max(g[v], f[u][0]); } dfs2(v, u); } if (n - siz[u] - g[u] <= n / 2 || u == root) ans[u] = 1; } int main() { n = read(); for (int i = 1; i < n; i++) { int u = read(), v = read(); e[u].push_back(v); e[v].push_back(u); } for (int i = 1; i <= n; i++) siz[i] = 1; findrt(1, 0); for (int i = 1; i <= n; i++) siz[i] = 1; dfs1(root, 0); dfs2(root, 0); for (int i = 1; i <= n; i++) { cout << ans[i] << " "; } el; } AT_joi2015ho_b Cake 2 Link nnn 个数 aia_iai​ 围成环,AAA 和 BBB 两人轮流取数,AAA 先取,两人都将采取最优策略,求最大化 AAA 取到的数的和。 tag: 区间 DP, 环 Solution 设 fi,jf_{i, j}fi,j​ 表示剩余的蛋糕区间为 [i,j][i, j][i,j] 时最大的答案,把 aaa 断环为链。 考虑如何转移,由于两人轮流取,需要分类讨论: 当前轮 AAA 取,剩余区间为 [l,r][l, r][l,r],显然一定满足的前提条件是 remain≡n(mod2)\text{remain}\equiv n \pmod 2remain≡n(mod2),其中 remain\text{remain}remain 表示的是剩余蛋糕区间长度(简单手玩即可得证)。此时,AAA 可以取 ala_lal​ 或 ara_rar​,此时 fl,r=max⁡{fl,r−1+ar,fl+1,r+al}f_{l, r}=\max\{f_{l, r-1}+a_r, f_{l+1, r}+a_l\}fl,r​=max{fl,r−1​+ar​,fl+1,r​+al​}。 当前轮 BBB 取,变量定义同上,前提条件为 remain\text{remain}remain 和 nnn 奇偶性不同。此时 BBB 一定取 max⁡{al,ar}\max\{a_l, a_r\}max{al​,ar​},那么留给 AAA 的就是其中较小的一个。 所以有如下方程: len≔l−r+1fl,r={max⁡{fl,r−1+ar,fl+1,r+al},len≡n(mod2)fl,r−1,al<ar and len≢n(mod2)fl+1,r,al>ar and len≢n(mod2)\text{len}\coloneqq l-r+1\\f_{l, r}=\begin{cases}\max\{f_{l, r-1}+a_r, f_{l+1, r}+a_l\}, &\text{len}\equiv n \pmod 2\\f_{l, r-1}, &a_l<a_r\ \text{and}\ \text{len}\not\equiv n \pmod 2\\f_{l+1, r}, &a_l>a_r\ \text{and}\ \text{len}\not\equiv n \pmod 2\end{cases}len:=l−r+1fl,r​=⎩ ⎨ ⎧​max{fl,r−1​+ar​,fl+1,r​+al​},fl,r−1​,fl+1,r​,​len≡n(mod2)al​<ar​ and len≡n(mod2)al​>ar​ and len≡n(mod2)​ 最后考虑边界,如果最后一轮是 AAA 取的,也就是 nnn 为奇数时,对于任意位置 iii,贡献都为 aia_iai​;反之由 BBB 取,那么贡献为 000。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 n = read(); for (int i = 1; i <= n; i++) { a[i] = read(); a[i + n] = a[i]; } a[0] = a[n]; if (n & 1) { for (int i = 1; i <= n * 2; i++) { f[i][i] = a[i]; } } for (int len = 2; len <= n; len++) { // len := remain cakes for (int l = 1; l + len - 1 <= n * 2; l++) { int r = l + len - 1; if ((len & 1) == (n & 1)) { // JOI f[l][r] = max({f[l][r], f[l + 1][r] + a[l], f[l][r - 1] + a[r]}); } else { // IOI if (a[l] < a[r]) f[l][r] = max(f[l][r], f[l][r - 1]); else f[l][r] = max(f[l][r], f[l + 1][r]); } } } int ans = 0; for (int i = 1;i <= n; i++) { ans = max(ans, f[i][i + n - 1]); } cout << ans << endl; P9759 [COCI2022-2023#3] Bomboni Link ▶题意 有 n×nn\times nn×n 的方格。目前在左上角。通过向右或向下移动,要前往右下角。目前所在的格子没有障碍。 在每个格子中写了一个数字表示此地为糖果或障碍。Iva 会吃掉所有经过的糖果(包括起点和终点的糖果)并且将糖果对应的数字相乘。Iva 知道她自己最喜欢的数字是 kkk,所以她希望这个乘积结果能被 kkk 整除。她想知道一共有多少条这样的路径。由于答案可能很大,她只想知道答案模 998244353998244353998244353 的结果。 tag: trick Solution 考虑从因数角度分析,发现只要一条路径上覆盖了 kkk 的因数,这条路径就是合法的。 设 fi,j,tf_{i, j, t}fi,j,t​ 为前 (i,j)(i, j)(i,j) 位置时 kkk 的因数剩余 ttt 的路径数量。那么每次转移,从上一步去掉 (i,j)(i, j)(i,j) 能贡献的因数,作为这次的答案。 最终答案即为 fn,n,1f_{n, n, 1}fn,n,1​。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 f[1][1][k / __gcd(a[1][1], k)] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i - 1 >= 1 && a[i][j] != -1) { for (auto x : f[i - 1][j]) { int nw = x.first / __gcd(x.first, a[i][j]); f[i][j][nw] = (f[i][j][nw] + x.second + mod) % mod; } } if (j - 1 >= 1 && a[i][j] != -1) { for (auto x : f[i][j - 1]) { int nw = x.first / __gcd(x.first, a[i][j]); f[i][j][nw] = (f[i][j][nw] + x.second + mod) % mod; } } } } CF360B Levko and Array Link 给定一个数列 aaa,可以对其中的元素做至多 kkk 次修改,每次修改可以将数列中的一个数改成另一个。 求经过修改后,max⁡i=2n∣ai−ai−1∣\max\limits^n_{i=2}\left|a_i-a_{i-1}\right|i=2maxn​∣ai​−ai−1​∣ 的最小值。 tag: 二分, trick Solution 注意到答案具有单调性,二分答案 xxx。 考虑 check() 函数的写法,首先可以将题目中要求的最多 kkk 次修改转化为至少保留 n−kn-kn−k 个数。 不妨进行 DP,设 fif_ifi​ 表示前 iii 个数中在保留 aia_iai​ 的情况下最多能保留的数量。两个数可以被保留,当且仅当 ∣aj−ai∣≤(j−i)×x\lvert a_j-a_i\rvert\leq (j-i)\times x∣aj​−ai​∣≤(j−i)×x。这个比较好感性理解,两个位置 (i,j)(i,j)(i,j) 之间有 j−i+1j-i+1j−i+1 个数,也就意味着有 j−ij-ij−i 个间隔,而这 j−ij-ij−i 个间隔中每个间隔最大的符合条件的差是 xxx。 那么式子就很显然了: fi=max⁡1≤j<i{fj+1∣∣aj−ai∣≤(j−i)×x}f_i=\max_{1\leq j<i}\{f_j+1 \big| \lvert a_j-a_i\rvert\leq (j-i)\times x\}fi​=1≤j<imax​{fj​+1 ​∣aj​−ai​∣≤(j−i)×x} Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 const int N = 2e3 + 10; const int MAXN = 2e9; int n, k; int a[N]; int f[N]; bool check(int x) { for (int i = 1; i <= n; i++) f[i] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j < i; j++) { if (abs(a[i] - a[j]) <= (i - j) * x) { f[i] = max(f[i], f[j] + 1); } } if (f[i] >= n - k) return 1; } return 0; } signed main() { n = read(); k = read(); for (int i = 1; i <= n; i++) { a[i] = read(); } int l = 0, r = MAXN; while (l < r) { int mid = (l + r) >> 1; if (check(mid)) r = mid; else l = mid + 1; } cout << l << endl; return 0; } P4158 [SCOI2009] 粉刷匠 Link 有 NNN 条木板需要被粉刷。每条木板被分为 MMM 个格子。 每个格子要被刷成 0/10/10/1。每次粉刷只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。只能粉刷 TTT 次,他最多能正确粉刷多少格子? tag: 背包 Solution 设 fi,jf_{i,j}fi,j​ 表示前 iii 行刷 jjj 次最多正确的格子数,发现这是一个背包,容易得到下面的转移: fi,j=max⁡1≤k≤j{fi−1,j−k+gn,k}f_{i,j}=\max_{1\leq k\leq j}\{f_{i-1,j-k}+g_{n, k}\}fi,j​=1≤k≤jmax​{fi−1,j−k​+gn,k​} 其中,gi,jg_{i, j}gi,j​ 表示当前行前 iii 格刷 jjj 次最多正确的格子数。它可以在每次枚举行的时候更新,有转移: gi,j=max⁡0≤l<i{gl,j−1+hl+1,i}g_{i,j}=\max_{0\leq l<i}\{g_{l, j-1}+h_{l+1,i}\}gi,j​=0≤l<imax​{gl,j−1​+hl+1,i​} 其中,hl,rh_{l, r}hl,r​ 表示当前行刷 [l,r][l, r][l,r] 时刷一次最多刷对的格子数,也就是区间中 000 和 111 数量的最大值。 只需要在背包的转移前维护一下 ggg 和 hhh 即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 for (int i = 1; i <= n; i++) { memset(g, 0, sizeof(g)); memset(maxn, 0, sizeof(maxn)); for (int l = 1; l <= m; l++) { for (int r = l; r <= m; r++) { int cnt0 = 0, cnt1 = 0; for (int p = l; p <= r; p++) { if (s[i][p] == '0') cnt0++; else cnt1++; } maxn[l][r] = max(cnt0, cnt1); } } for (int j = 1; j <= m; j++) { for (int k = 1; k <= t; k++) { for (int l = 0; l < j; l++) { g[j][k] = max(g[j][k], g[l][k - 1] + maxn[l + 1][j]); } } } for (int j = t; j >= 1; j--) { for (int k = 1; k <= j; k++) { f[j] = max(f[j], f[j - k] + g[m][k]); } } } P1156 垃圾陷阱 Link 卡门掉进深度为 DDD 英尺的垃圾井。她需要堆满垃圾,使垃圾高度 ≥D\geq D≥D 才能逃出。每个垃圾有扔下时间 ttt、堆放高度 hhh 和食用后维持生命时间 lll。卡门起始有 101010 小时的能量,101010 小时内若不进食将饿死。若体力为 0,吃垃圾或逃出井不会饿死。求卡门最早能逃出井的时间。 tag: 背包 Solution 看到两种选择,想到背包。用 fi,jf_{i, j}fi,j​ 表示前 iii 个物品堆放高度为 jjj 时的最大体力。 本题与普通 0/10/10/1 背包不同的地方在于,本题有两种情况的成立条件和贡献不同,需要分类讨论: 如果选择吃掉,那么 fi,j=fi−1,j+lif_{i,j}=f_{i-1,j}+l_ifi,j​=fi−1,j​+li​。需要满足转移前一步剩余的体力能够等到当前垃圾扔下,即 fi−1,j≥tif_{i-1,j}\geq t_ifi−1,j​≥ti​; 如果选择不吃,那么 fi,j=fi−1,j−hif_{i,j}=f_{i-1,j-h_i}fi,j​=fi−1,j−hi​​。需要满足转移前一步剩余的体力能够等到当前垃圾仍下,即 fi−1,j−hi≥ti (j≥hi)f_{i-1,j-h_i}\geq t_i\ (j\geq h_i)fi−1,j−hi​​≥ti​ (j≥hi​)。 需要特判 hi>dh_i>dhi​>d 的情况。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 memset(f, -INF, sizeof(f)); f[0] = 10; d = read(), g = read(); for (int i = 1; i <= g; i++) { a[i].t = read(), a[i].f = read(), a[i].h = read(); maxn = max(maxn, a[i].h); } sort(a + 1, a + g + 1); for (int i = 1; i <= g; i++) { for (int j = max(d, maxn); j >= 0; j--) { if (f[j] >= a[i].t) { f[j] = max(f[j], f[j] + a[i].f); } if (j >= a[i].h && f[j - a[i].h] >= a[i].t) { f[j] = max(f[j], f[j - a[i].h]); } } if (d > maxn) { if (f[d] >= 0) { cout << a[i].t << endl; return 0; } } else { for (int j = d; j <= maxn; j++) { if (f[j] >= 0) { cout << a[i].t << endl; return 0; } } } } P1772 [ZJOI2006] 物流运输 Link 物流公司要把一批货物从码头 111 运到码头 nnn。由于货物量比较大,需要 ttt 天才能运完。货物运输过程中一般要转停好几个码头。 每日会从 111 港口发货; 每日有可能会有港口封锁,封锁处不可走,需要换航线并加上换航线的成本。 tag: 最短路 Solution 首先想到可以对于每一天跑一遍最短路来预处理。 考虑 DP,设 fif_{i}fi​ 表示前 iii 天的最小成本。对于新的一天,有继续沿用之前的路线和走新的路线两种情况。所以设 minni,j\text{minn}_{i, j}minni,j​ 表示 iii 到 jjj 天走同一条路线的最短路径,显然可以对于每一个 i,ji, ji,j,跑一遍最短路预处理。此时有转移方程: fi=max⁡1≤i<j{fj+minnj+1,i×(i−j)+k}f_{i}=\max_{1\leq i<j}\{f_{j}+\text{minn}_{j+1, i}\times (i-j)+k\}fi​=1≤i<jmax​{fj​+minnj+1,i​×(i−j)+k} 另外还有前 iii 天都走同一条路的情况,fi=minn1,i×if_{i}=\text{minn}_{1,i}\times ifi​=minn1,i​×i。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 for (int i = 1; i <= d; i++) { p = read(), a = read(), b = read(); for (int j = a; j <= b; j++) { block[p][j] = 1; } } for (int i = 1; i <= t; i++) { for (int j = i; j <= t; j++) { mp.reset(); for (int p = 1; p <= n; p++) { for (int l = i; l <= j; l++) { if (block[p][l]) { mp[p] = 1; break; } } } minn[i][j] = dij(); } } for (int i = 1; i <= t; i++) { f[i] = minn[1][i] * i; } for (int i = 1; i <= t; i++) { for (int j = 1; j < i; j++) { f[i] = min(f[i], f[j] + minn[j + 1][i] * (i - j) + k); } } P3174 [HAOI2009] 毛毛虫 Link 给定一颗 nnn 个节点的多叉树,找出包含分支最多的一条链,输出节点数。其中分支只计算与链直连的节点。 tag: 树形 DP, 树的直径 Solution 考虑从当前节点能控制的下一层节点入手,如果当前节点 uuu 在链中,那么它所能控制的下一层节点数即为 degu−1\text{deg}_u-1degu​−1,其中 degu\text{deg}_udegu​ 表示 uuu 的度。也就是说,可以按树的直径的思路,两遍 dfs,在递归的过程中统计答案。 注意需要考虑根节点没有父亲所带来的影响,和 n=1n=1n=1 的特殊情况。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 void dfs(int u, int fa, int sum) { if (sum > maxd) { maxd = sum; maxpos = u; } for (auto v : e[u]) { if (v == fa) continue; dfs(v, u, sum + deg[u] - 1); } } int main() { n = read(), m = read(); if (n == 1) { cout << 1 << endl; return 0; } for (int i = 1; i <= m; i++) { int u = read(), v = read(); e[u].push_back(v); e[v].push_back(u); deg[u]++, deg[v]++; } dfs(1, 0, deg[1] - 1); maxd = 0; dfs(maxpos, 0, deg[maxpos] - 1); cout << maxd + 2 << '\n'; return 0; } P1131 [ZJOI2007] 时态同步 Link 给定一颗 nnn 个节点带边权的树,需要对于每颗子树调整根到叶子节点的路径 长度相等。每次操作可以对任意边权 +1+1+1。求最小操作次数。 tag: 树形 DP Solution 要使操作次数最小,对于每个子树,就要操作根节点下的第一条边。所以从下向上递归更新答案,对于每个节点 uuu 记录一个以 uuu 为根的子树到叶节点的最大距离。遍历个儿子,累加缺少的距离。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 void dfs(int u, int fa) { for (auto x : e[u]) { int v = x.v, w = x.w; if (v == fa) continue; dfs(v, u); f[u] = max(f[u], f[v] + w); } for (auto x : e[u]) { int v = x.v, w = x.w; if (v == fa) continue; ans += f[u] - (f[v] + w); } } CF1324F Maximum White Subtree Link 给定一棵 nnn 个节点无根树,每个节点 uuu 有一个颜色 aua_uau​,若 aua_uau​ 为 000 则 uuu 是黑点,若 aua_uau​ 为 111 则 uuu 是白点。 对于每个节点 uuu,选出一个包含 uuu 的连通子图,设子图中白点个数为 cnt1cnt_1cnt1​,黑点个数为 cnt2cnt_2cnt2​,请最大化 cnt1−cnt2cnt_1 - cnt_2cnt1​−cnt2​。并输出这个值。 tag: 换根 DP Solution 记 coloru\text{color}_ucoloru​ 表示 uuu 节点的颜色,黑白为 −1/1-1/1−1/1。 设 fuf_ufu​ 表示以 111 为根时 uuu 子树的贡献。自下向上转移,容易得到 fu=coloru+∑v∈son(u)max⁡{0,fv}f_u=\text{color}_u+\sum_{v\in \text{son}(u)}\max\{0, f_{v}\}fu​=coloru​+v∈son(u)∑​max{0,fv​} 考虑换根,设 gug_ugu​ 表示以 uuu 为根时的答案,答案分为两部分:以 uuu 为根的子树的贡献和剩余部分的贡献。第一部分显然为 fuf_ufu​,第二部分可以通过父亲的答案转移,也就是 gfau−fug_{fa_u}-f_ugfau​​−fu​。通过前面的式子可以知道,如果 fu<0f_u<0fu​<0,fuf_ufu​ 不会被记录到 ffauf_{fa_u}ffau​​ 中,也就是说,gfaug_{fa_u}gfau​​ 的答案不包含 fuf_ufu​。所以最终的式子 gu=fu+max⁡{0,gfau−max⁡{0,fu}}g_u=f_u+\max\{0, g_{fa_u}-\max\{0, f_u\}\}gu​=fu​+max{0,gfau​​−max{0,fu​}} Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void dfs1(int u, int fa) { f[u] = a[u]; for (auto v : e[u]) { if (v == fa) continue; dfs1(v, u); f[u] += max(0, f[v]); } } void dfs2(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; g[v] = f[v] + max(0, g[u] - max(0, f[v])); dfs2(v, u); } } g[1]=f[1] CF607B Zuma Link 给定一个序列,每次可删除任意长度的回文子串,最小化将序列清空的删除次数。 tag: 区间 DP Solution 设 fl,rf_{l,r}fl,r​ 表示清空 [l,r][l,r][l,r] 的最小操作次数。 最朴素的情况是枚举中间点,分成两部分来求,fl,r=min⁡{fl,i+fi+1,r}(i∈[l,r))f_{l,r}=\operatorname{min}\{f_{l,i}+f_{i+1,r}\}(i\in[l,r))fl,r​=min{fl,i​+fi+1,r​}(i∈[l,r))。 当 al=ara_l=a_ral​=ar​ 时, 有另外的情况: [l+1,r−1][l+1,r-1][l+1,r−1] 回文串,此时加上两端相等的值还是回文串; [l+1,r−1][l+1, r-1][l+1,r−1] 不是回文串,此时内部随便删,删到内部只剩一个的时候,又可以与两端构成回文串。 所以 fl,r=min⁡{fl,r,fl+1,r−1}(al=ar)f_{l,r}=\operatorname{min}\{f_{l,r},f_{l+1,r-1}\}(a_l=a_r)fl,r​=min{fl,r​,fl+1,r−1​}(al​=ar​)。 两情况取最小值即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 memset(f, INF, sizeof(f)); for (int i = 1; i <= n; i++) { a[i] = read(); f[i][i] = 1; } for (int len = 2; len <= n; len++) { for (int l = 1; l + len - 1 <= n; l++) { int r = l + len - 1; if (a[l] == a[r]) { if (len == 2) { f[l][r] = 1; } else { f[l][r] = f[l + 1][r - 1]; } } for (int i = l; i < r; i++) { f[l][r] = min(f[l][r], f[l][i] + f[i + 1][r]); } } }

2024/10/11
articleCard.readMore

NOIP 2024 游记

私密版 Day -n 在跟着各种金牌爷集训,感觉后面题目难度有点高啊。而且强度很可以,到后面还挺累的,休息的也不算很好,rp--。 集训的时候到考场机房去了两次,发现机子有火绒会导致神奇问题。 Day 0 白天复健了一遍之前记的 DP 的笔记和各种 tricks,打了几个板子。 晚上试机,考场机子可以无常数 1s 8e8,取模也很快啊。但是 Windows 下用不了 gdb,而且键盘放的位置很奇怪。 晚上大概 10:30 睡的觉。 Day 1 考场安检非常的慢,非常早的进去以后突然发现没去上厕所,结果出去上了个厕所回来排安检的队硬是排到了快发压缩包密码,rp--。 赶紧解压看样例,没来得及瞪出来什么特别算法,感觉有一个是树上查询类似的。 开题,发现题面都很长,看了眼 t1 好像还是可做的,t2 题面描述过于复杂,t3 t4 神秘题。 开干 t1,草稿纸上手摸了一遍样例发现贪心的找非常正确,然后就开写。写了第一份发现细节处理写的非常史,小样例调过了,但被自己 hack 了。急急急,重构第二版,小样例过了,大样例过了 6/10 个点,急急急,此时已经过去了快 2hrs。 突然发现读错题了,没有注意到题面里甚至加粗加点的只能交换相邻两个。直接慌掉了,决定先把后面题能打的暴力打完再回来想 t1。 t2 又读了一遍发现暴力很可做啊,写了个 dfs 发现有一个多测过不去。感觉调这种不算特别小的数据会浪费很多时间,并且就错了一个点,决定静态查错,查不出来也先看后面的。确实没查出来。 t3 感觉特殊性质都是可做的,但是想第二个特殊性质的时候突然发现没看懂输入里边的编号是怎么定义的,到考试结束也没想明白是输入的边的顺序。输入理解不了只能打 4pts 跑路。 看时间不算很富裕,写 t4 暴力性价比也不算很高,先回去干 t1。手摸样例发现按 0 分段,每段能匹配则匹配,匹配不了的分到分界点上好像很正确,但是不会证。不管了先写,写+调了一会成功过掉了 8/10 个大样例。然后发现不管怎么 hack 都没 hack 掉,慌。 看 t4,暴力期望 8pts,开始实现,小样例过了,大样例全是 60 多,急急急。发现题没读错但是实现的时候,想成了一道机房出的类似题。赶紧改实现,改完以后测大样例,然而在 500 次询问中好像会有十位数次答案差一点,而且越靠后差的越多。仍然发现写的很对啊,急急急。 到现在基本不剩多长时间了。最后的几分钟大概就是 t1 t2 t4 切换着看希望能看出来一点问题。但最终还是没看出来。 出考场前,甚至出考场后的很长一段时间里,都始终认为 t1 是个橙题,不应该做不出来,所以把大量的时间花在了 t1 上,而不是甚至稍微想一下 t2 的正解。这次比赛算是比 CSP 有一定的改进,至少能先打出来每个题的暴力。 时间分配和读题方面还是有很大的问题,也没有想过 NOIP 会把一道简单乘法原理放到 t2 的位置。 中午吃饭时候看到洛谷难度是蓝绿紫紫,突然发现了考试的时候安排是多么的唐。看到 u 群和洛谷群里在说的 t1 的解法好像和我的差不多,但为什么过不去大样例。 这下真的随机得分了,(∼80)+(∼10)+4+(∼0)(\sim80)+(\sim 10)+4+(\sim 0)(∼80)+(∼10)+4+(∼0),希望 t1 数据多测能给的不那么强。 出成绩了,这下这下了。

2024/12/6
articleCard.readMore

集训记录

P4823 贪心按 a+ba+ba+b 从小到大排序,小的先走,正确性反证得到: 设有两个人 iii 和 jjj,且 ai+bi>aj+bja_i+b_i>a_j+b_jai​+bi​>aj​+bj​,且两人出去的顺序为 i→ji\to ji→j,也就是高的在上面。 那么,现在交换两个人,按照反证的假设如果原来 iii 和 jjj 都能出去,那么现在只有 iii 能出去,且根据题意,其一定能出去; 若 jjj 现在都出不去,那么由于 jjj 比 iii 高,那么在不交换前,两人基准位置相同,更矮的 iii 一定出不去。矛盾,得证。 转化为选 iii 踮脚或逃的背包。fi,jf_{i,j}fi,j​ 表示前 iii 个人总高度为 jjj 最多逃多少人。注意到 jjj 可能很大,考虑把结果和状态换一下,fi,jf_{i,j}fi,j​ 表示前 iii 个人,逃 jjj 个能搭起来的最大高度。 f0≔∑i=1naifj=fj−1−ai (fj−1+bi≥h)f_0\coloneqq \sum_{i=1}^{n}a_i\\f_{j}=f_{j-1}-a_i\ (f_{j-1}+b_i\geq h)f0​:=i=1∑n​ai​fj​=fj−1​−ai​ (fj−1​+bi​≥h) 模拟赛 T2 给定一棵树,求一个删边的构造,使得任意删除新的图中的一条边图仍然联通。 [证明] 设叶子 mmm 个,则答案数 ⌈m2⌉\lceil \dfrac{m}{2}\rceil⌈2m​⌉。 按 dfn 对叶子节点编号,则每次删的边构造可以为 i→i+⌊m2⌋i\to i+\lfloor\dfrac{m}{2}\rfloori→i+⌊2m​⌋。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 bitset<N> leaf; vector<int> dfn; void dfs(int u, int fa) { if (leaf[u]) dfn.push_back(u); for (auto v : e[u]) { if (v == fa) continue; dfs(v, u); } } int main() { n = read(); for (int i = 1; i < n; i++) { int u = read(), v = read(); e[u].push_back(v); e[v].push_back(u); } int m = 0; for (int i = 1; i <= n; i++) { if (e[i].size() == 1) { leaf[i] = 1; m++; } } dfs(1, 0); cout << ((m + 1) >> 1) << '\n'; for (int i = 0; i <= (m >> 1) - 1; i++) { cout << dfn[i] << " " << dfn[i + (m >> 1)] << '\n'; } if (m & 1) { cout << dfn.front() << " " << dfn.back() << '\n'; } return 0; } CF1251D 二分枚举中位数,考虑贪心地 check。将要求转化为一段段区间,对于一个区间 iii,有三种情况:中位数大于/小于区间或在区间内。 对于前两种情况,一定不会产生中位数,为了省钱选下界; 对于第三种情况,因为此时剩余数量已经确定,故对于一半的数选中位数,另外全选下界。选下界的这一半为了省钱,在下界相对小的区间选。 check 过程中判一下如果前两种情况的数量大于中位数一定不合法即可。

2024/11/20
articleCard.readMore

板子库

8f6e41efd10e38201e5f3cb1134eb7d263cc668d7c4b8ebb6fbf2e0a5dc26ce89592486ef0b6ca16537d7e68f08822ceb9b539394d5295d84ff980c1895ced35e3c2c8174feb12b185044540d18c18b9104907cdb003b9d2ab9dd0abd558d86d6e8cff3dc7c1dbf1b177f8fa8b1dca3e40b9135f9ba6aa6b738faff1ce5df742c21707789890e537d90f7b7ad0b6c91f67f4f4c70009c9290b9612799399dbc8282498a8ec3c1134bfd4ab4a1808bef9f7d18f35e1074199c167bb68232790c62eb3e5a0043eadfe905a066ab56c44a591d0934dd349265316dac64020f536fb876e34fd9c935ab9e548e9538cfe1ab2d103d64b475bd8b1edb01722965e6fec6b9bb028e507f1f25403ec6343c4a10fad6eb76c21bf4067aadc77dae85aec7055d9378aab337c518707ba76771178587bbc8ca6d14ce4197a3f14741e9a1fa0fccbb3431a6a0d355091ddb512cda144f2adbed95f60e2280c2b236ebf16e47bb57557d7ec187ada7f68c90769cfc02e4d396c5870d54c59174d0713814756c913a27d9e15c8bb7bf5550b9af9474f278aab82e40bc4b43df9aa6b6ac563a377bd59483153cf9ef1fb9cd07acce1b15088abf3ca78d8954c7e94f19f2382a704bcc5c7d5136a30732d0f4e69ded3cb8320f930698027721710e32b7ccd108ec3fa1d7d79a58e06404417d9852ba419a11fe69b38b020883c3e3f11eaacb3b1db707bda63c94e73d592ec049e5b583a372569888d7aa58c039fe69ef2b5959a0ace9a5279a1315b693be930186ff9e6ef6f9a48619af620087204aa19b4f9aa833155da721fac24304749b908da67769dd9201d195e549902f8abc42b358ee692d9dda2328d27c949c022751633abb4a427a833c4755d62ac63c085cbc91aff00776978b5a1c37a931f9b3d87be0e2c1585f1973b8f087b216ac7cdc99b86325c811ffd2713b4372f87dd3a76665d08af9ee5355666adfe0cda573d5a0ade2caff2679fd2ca4611e4cdfbea190972051944b64e010de5c30cd534febaaab91be16076101641da2feac0204bda65cae0fd87b60a79d162e9f3ef2fa967d2cd658cf87a95804849201930636be0c97fc1b01d3fbfa4dccb5f6e3d1c0611c1953960a4324277c9fb6b8f60aa86d9157fb9f75517a913f3950175a1514c5a8e2403a26c3b4e15a9c406435018031b96bb3f1e53c27565866afdd30333b16085ab13fe1d4216b8cbf78773c80311311befd4cfb66ab95a1d0f901fd4645ab0699170dbc84ca21dbd87d8f3c9c930d0e4027558a09311bd355b1f47a02ad13812fb7ec997f93fc94d394d2ad5af7d73ce2a69ba5e89e5f174179d7950c8b1cd7e502b660191cef670a2d997c81d8696374407ce3e7dfd8278ece9f13b416d9959cb3e11ee59a73fd42baf03affb9bae13c6a4e1482be7d614f77a8ae50ce3e93a5ae3cf3e7bb49af94399f0da8fb0bd112a2cf5942994a9f2973f88b9c5b6369b53d5441da5b301ac62fe72d5dee9d905bfbfca33d5a5e058c60d21ea5836649e60e843990aae18e35e48e06f4bebe1f5310835bf2b3538135b7886df6a04c9779d2839b684b0d10f7dbc97b556164cb282b1a87c540e5d6b466f19b07f4616cad761b0b45a3a2391da7ca5ae9d23d0bf99e61cd00de17e1dd252b38cb0d395423dd0e1eec827f3cf784ebf1bdfbe7c1ad905060513aabbef024cb95875495f764c60f5c5860c26e80c65ad6d48f0de8e2be66cc92b19c2c326e195c3bc1b30b4a87aa273039e208ee4f669352311e0635d8c894bec71603961e7a38900785707508c47a3e4733dda3bb7bb1336c4cf0a57a5fe479801fb0a218c260170585731c2237c586d0ca5ee17590c5aefb02ffd2885f93c8316d077a5f7b10b2e34886c9dd3b2e613aff81a0d0809bb419249ee7136ca82d86b938847a0e64942ffcec061ef75ef6e39e2d3cc101d76522e7559c3de95fbc363a4a16041d96bc267b6848b88a46426fe40e6e4a195d9b672ceaeb7bc919c8b7ab2856830e56fbefccf5f8a22b3833b3a73c70e4873d86a50562346b81355b935a80b466f1102cd12ec2e5ad0356168efa01ded72043b305fc5b7a54561dab3d5af5b597b0bacac1fedb64b05cb7a5ebe1c900414acf623f693b13497e05805d746999e6449fcb735ea1ff868602f964970b733a65aa82388b2f90958f0ea84c9eb15394a3e7a7c953364080c3f913af8c8de38e0d7709a4467977c2e4e98d57c24be4284317969d36df4401c0adf44257bc453a6f83f2e318081d758234d124ca6dd3a8f3058aa166fb8d2a7557b5669c34381a28ac779094e8ef137ce94bb403fe5b6df2f47093a91ac9f998a4ab8251a78f86c3dd6137b5c523c7c57a3fcad8b3e302f782dc5ac426dbf6c0d5c4981ecb1730cbb1da5072103b5ff37f0f9589bb07963fd68c629a8f4769cac81bfa2e7c16e35077c630d0d0be6ea6749a7d9c1e56b0a36395d6f40bb68132bdc3d950cfcefe995cf5e26f73b06a5135a77c68a059cfb914e671278134a6ee20e30cd12a343f6f04fac9d48a5fcd7e69861ecbd31c8cb66759f850ad0d2d677d8a5eeb159ab9dbf9a94112e07a4f0227fb2454c96b4b741b925a60968ec86024d79905b8b20b15f989e19277950078f69ff75eb95f5047bfff53df53faf021655e939d912b382e9272fff5434bb4e9c0cbdf57f2d72a003ba31bf27b30be967ea7f34b8aff9b5e890483e3c3599d7bc121f9de724c30eb42cdb0fcbaca47c6fafc16d5d6374e3cd60b722100febd54b25134a75cb501815ec4aff4922b6d4dcbcb531dd0fb5f19bddac50b9fc39d029f859e1b74479cf1c94d23a8ae10ab23b72adafb922fd156ff4fd3912bf6f2b86399be0fde2bc83b1c930935569fa55972bd4cd1c3be98a3e76869d816ed3da9211f97f5832735bf85487b1916061a3505d6dbb48921f5f0da2d22ee69f76365a75b6954791ef2a196eba8635390898475fd94a6a2ebf621c781de47a80643efabf92806e957619abdd4dc98ae1adbab2f065b8447d37f7e75bc9041160923d94c5dadefd4221d2bfa012edc880f924538df3619ebe5a949a7ae97545b748773dbd49513adba3dbd1291960ed1732f9a6dc88f1e050d58265bf834d67ef8c9beecf4bab1c8eb5e567a313fd73fea966a568d425460f6eba2ad6add2af736918cff67eb5757ebe26e2b3690215653468487f0f7bff26a418fb8ce3fa366cd25a5de157076d575a67fb07df9ebc4fafa9cb6662715be61a3c1bfdbb84e90c8d3a09748f7c7fcdb4c478a57294ebe62d0f9813c75c6992476ff3bcc7a231f6912b14b862589a3f3b2224dbfec78982555c0d2bc9a7b142844a0fe54d99eada083b54dae7df01bf3f02710873958f424563d5c6d21c61f59fda2012400cc0babd12a6f88bdaef632385bf2b930125cd91875bd45c6614422000997b6d980d0f6b9582311be8e0a487f5249f2a9fd4bef2511195e6c11915b3565007766d6a9132c61ea9bf6c05ea61dd3024c2c9a7eed7143ab8e648f2688bd5e4b6f27a6bb9f68fe052f972728b8e171358a1b69e983c724834281def930a404fc0d1bca3ee11ab2b670b022940bbb75c6a7de24e4b17f899c81b549b5c3884a4f1d7a0514fb65bcc040e995aa2c6006480ae5bf1166c36d6caf52db3f695bc515fc0db4be7d626b2990d0b8e18d8a72b1acdc0ca9ed9195d51b42e3d8b496128675956b3b0feca6ea5a4c43fe123cf440c270f34ad1f264ad4f1ebc176f29e5f29dcca33d34a919117e6955e66b66b1020f998890d449e7499ea0e9991a842482b10507d2a1cce45e2bc93fc0707df6cd805fcf70d849c550f86d29b01170a5901615922b775d26e8b0cba0b793ab12b09206e766513818d8602b305a003148a8a822cfd634b9b55d087425d9e4f4e1bbfd177e13f342c8718e3cdb22187cd6ee46d9ab539a93370fadf19121e2735551a02abc33509aa489c53f9333db78429fcecdcc32bd572f63742821df2eea0b16c9362c492840772887a1a950dd21b3d8b60255a3177d21e1de21d306bb7bc70132bdbc73e1e0efc62ecb259e23edfc4664093e8dcfcec26141c859934311f432b8a187ec810b3bf2fc2469799693fece16db9c40018f7f7c7d1a95ceb72cddad9bbe0e2b4a04170aee4f9f315c41c414429d0290da9f90686374ba5fca22907c8e16f99652c8b874d412f041f2ff9e04b92e0ff7be28bb11c009e1ca02f63f51e23cd89eef1236b80621b5db324f4a2754d2aba096fe29c2b9e8e4f73c4ec3ed404e1b5fcbd853ca71001ebc5aa9e0749860751bddc797fc3d109fc6359554e6898718827a20eb5deaa9b062bccc5bac230ed5b74b77aac59c631ed07844cadd072d96633d6f4e3bbb4d8e70b899a3d35c338b6bdb346efef61713676a0bdff750e0c5bc146f299ddcd87733fdd4eb908ce860caf48e248c14cbbfa794b5ba17da4752e998413a8be841d43e8ae220fb5dade9e6626a13a4a0f51f8d778acc114b34391f76327f776bc159b8d9ee64c85c651aa0d5f1bdc7bb9d5fc90cc18b5435d950a0ab75cc7f292a1dc903683de2d7bf11b264212bf94270444374f29171685c6c8bf0c4471ac922268b046c7f44c44627313c95035dbcd334ec995e0528b4fe82b620e276c3636fc2ac5da9b78b8cea182a68154ce4cbfa688d27a5cb69b854b800ba69d779c5d82599172533f8d79f028948e7e55f88618cdd38ce56a674e3468c7270c8615f2b85de2e2fb250f7883e78c799d06e5c36d352d6ca4608dbf37dcf469d41933b2883c43e21b96838d37b9634a7cba9540a7a72801a59fb009a4fde886782180295b21121f2395b931ec94bee989a4641a5c8c627f31fb2b6b55063dced439da192c36ba9a5766690da9682ae37c10679dcc6d293e2851c5c97d6c1efd7fdf00ca2a9e9a92a0b9ffede1d4dd5dec4c219db76c992769a787ddc9c9a826cb707a655d1369e5904d5d225ca4a0c115af9efc99101b7f3f82c2c2d6e7513aedfc21bffe32b75a36086198dd6560bcd92ac2504664f3bb73a600fbe9a7e06b063bfb811000169603d83b0dec6099a333112260ac0eea926e909e2c55c22ef67bc864ab5bbff80abd34480a739645786253366a35863021e40f92cdaef3142f51319a7fdf016618529714dabfaeee7b72c53714b71471b550d86bb42303f2e53980323a7908864a45aec566008b474ee5789070df4631d3973243bd01c5687e770036c69d04b54e4ee3d75b76b3139df73e4b580fc0a8e92c406eec80c33960dda5715dd394f1ad2cb1aac6ef681bc44890aed6c3ed82dab25df3175450e31f4f364cb145dc14e5ae6753b9b20b6caf9a32f98facc01834360e7069f5288acb06e47473f3af986eb64d7bbad2b0ce753008d6bada64283b466860e30b9ac1ec265737a545bfb50a16e4669eb7f3a64f80dc023bb7f5a371935dda08270c8c5bb1d8d892b49f0b0bd54ca84c664596c629513cd9397983fa4384dd540eeca42d1b748e53da45689080f43f8a3527406391723241c14f4b55fbd8ead98d9227e77a925ac992b7af3c67b7b7f9035f09aa164e336c06df1500b94e7e4e482b74259b55eceb4e930b4ed98b1be498786d88caa7de82d9d2d2e6a52484c364b7fb0c70e2378e76958958badd49fe4b385b8766f7081141d27618657d4eb65259ef50b35d11e284652e8beb2da52b2ebc4b13f698f3f06beddea15177044f722c2677dffaad5ab309f00b306774bdf668592caf31af409d782b2650fc01de6fb0599c2bcdb2d92177d0633100a7168909f2a90eaa4e373b5911b50572050d0e487dcb4d159e7205942e50e521469a89ee3285c121e5aef986c7017c28ad346bce550d7bc5ed8c3a2647eaa07e66733f0df078270a2983044e41dbc46216ce2f7d99a36d9682657f2852780594ec33af354c0febbae64ee62662defb33a2f13c9f5118b357154a2b9e53a25b5a4d644f96ea4707e5a8783f3c503ad929eca19e06793e215178673972e587a399e45ed159e3085305cec1849bb48e1a2606a89a9be372dd4efafd3195a970b4c5d09df8386ca47b771fa7ab2067d68225c83a3586b3b7d0f54629413f5bc54f63cce314a68cc8dbb48fe51efc75e69543fbc5967325695af8ff93ceb8e5594477f1d6c6f9ea625bc61f77e1f37369ded7f2668fdf87cda6735c285963e6e344f8d7b3bb5a5ffba0df216e87778cb7ac1e3d70196f34abc0277dd1e708e4804b36a4512a16eb33eee5ec18b6a31af1630df9d724d13f322700743ed98c1a412e6a0f340546cbe1f859b62140d5998f43c78caf95b8e6b6d9511792c4ebf23c497b00171d50071a500eb630e415389ec5986c0f305279a80839f12fecb1c49d5953b3c1f3ea91ad5f3594e6e01ae5c98b4142bcdd8e6b5632ba7e8f201139bb8d6bb834bf1391b38c71d2f04145665154caa3cc12f6753d8bfe7f153e917ab991fb590918c9102316f1d8a3b0a525e6c5cde3e728c3f26f28f2337b7fbfeafff1bb83dfdee153b7421a310b3d0ab4de224c508b917ea6643b9913d5e4d2d364e77caa686622b339096fee0be206702226cbef09ced62933af8e326325a13d2d6f9424a36366166bd1bb0e887e104cf9bc23b3d368cdb314d1f2c23b81ab1e3da7ea8e51e3c6fa6e8830af4fc95be12c7eecb48205d9f40f4b904520ab23b3958c5cbd34602e9107ad2b44668f64ce3f4398197afec22a324654b0c7ec5f4fb8676631fe8f31ea9d1bd3794dbe3a19b6f27438d9874d850e3127722479bce7bd2e8eae307f99c7ece547b9a84a7dc0c157a55a38de38b3aa3154f915c2134ab5663ae160b8956613478b87042af9523764c2c7d8e5a06c592f9ad77abe1151ab9abdb670e33e000a0c09049c8316763186346d050dbaa0dd69ab972245fb2b5694360d02fe95cf2ecddb95d52eba4f3c11d5b4cd585747b0b301762387850c3f89a4dc3f88364da471f254e360bfb8fe5da598e3456348fe00fdc97f0be0f146be302ad7a423bac24233b1e4eab4f41d61e7096c5b4c03b4f269822cf84e3e7ee2e0907478ff661165d6de46e2cdcb4973b63b82e55dbcfe69a25b17f02b3ccaf09ce6047f36e05fe3fe47941f573554daddd59cdd9148a597e01d17818fc248859556d850a72a9794d14950a48a4597118e4b5a152c74d6e685c6eec7addf0bb8933b7141c28676a6f6763751f09c6603bca4d13ad5582f9740847298c00868f677e089e56dc1efb895e53a7451059c66c1ae66c4a4ef89cc1b3c91f697d542c5223aa1e7e67946be07c5ddda84184c71bfce2e09a5b70ae9acdc811a4214e0c906890768a1c3781028bf8f5d6ec50f1d6dc054eb6c6e34b92fc7224057e97f96a3a14d00d7b8b455d70e94f33a4f8852efb1c30fa4e6dbaf9566882f1485dda7e4153c7f099db43495c7d50ebebddde51ed8897a1ec417e4642a4255d7ffa912509a77ee1a10ebff97605aeded84dc37ec11b6adc017b46de4fd608c6d7ea700f7e3ce7264f698df9c4660076a719498c462574e1685c955e277717a4294bbfa285fe529fb6b92f4d958ba854e3dfabd074cf6d5b27dd8eb0a12b413bc75de5756d1aaf7627fba96e8b5b2a3ecba98a432135cb22abf93bdcd7866645de11e4301fe20b3e2ab4fa057d81ad811e06753084c88d2157d66b834d080fd5b64b25aa17645910be11e836d2bab0c2f7feaa7212a9813cf9b75f0544cca88823c92a9fe957afcec338d04322544584ba973e1105b03dda35168ffc87faa31dea48178121a5536f731ed99dd4274481f9fb673f194429698915a9562454b552098118b18141fcc086ca9122129dc07caae54e9b2f33a41fb34449f522f7cc57da4f7b5e8655d2b6b60d671321816e158594ac4478a7b58248fcae95bfbea3b60c6fe517c5ad5a4d1fb0cc23065da2da68c302f05dd810aa290362f24113d387c8d5dd397d73222f0411b954b9c69b019c875da03ee1e661095ab42c75d660463432ed03959d417dab476282f79411656fc606e193fe21a363dfcd7ddbcc2813d765ef2ae1ca1cbb5d8f76eb836aa47db69a183077aad11eb97e9b878bcb22bf110a1cc6be29a2eecce9c6164cd281a893e91786c71663332d5ecc9b53ee2bdaf76a75803bf29010f85a47f592d2035e01df35cf2a24abefe8db95f6d1efacd867d851baee7e55995b0f247fab82632b61eed78e43efcd90c4d23ec0c89fdf26e0e49943b6abf896b000641d59b4e73d7119a6e3482c83c1f1c87bcbfc3414dde2eef46842050eac5a8041e0441208be2d04d49e3364d72b6f9e007555876d4e1b0a67144051675bfbbc4397bfe14ba9d255a6e3f7e43e3092069d299734a5c9051172e098357ec552aaeedca55b7bc73947d3c7d2863bf5aaac6be279e3e9653fdf68fb4757de44f246f8a6227f226a7b4803a6e38f0bc778dc1cd72832f2eebafe34649912830492dd17056d8014ea7c099c21e3bebc413b973af5418d4ae12d3ac33bff412f773b8346281a838990c7e6b3b6e557e639ee59f5c6494fda12212536eebd16f85b71208b875d2f19c5e63262286ec912b1f6ea60b3eb7bf90f6c5cf2f3560e4c0464502260090f23efbc5f70543254ede350eef45807d514845ac5c3750658305e130ad49ca590767472b384b0141a417edcb1acbbec3c3420b6914bcad9504c2ed95d73220ccec4e8a336c34035515199cfb8dd20b2daafcba304d764ae25704e11c998d22a51188508a2855d8832f25946566d9c81be0dbd7956cb537a01cedfa6a78735b6aabff3055693793a5f2f99fee464f2e41ad38b0aebf1c971d35e871b9c85d0985e5d4d46a1a1e6cf9be8a179599ee156cef670bfca9b3d20d843c3479a077f12c287ff0565542acaa331507ca42c4e73e7fd7bfcfc65ef90ea7b0fc570a15fcb42f2605dc104b2517039c58c9faaaff426558bf8039b0846cdca836939d32bd5d00539f9b7f515c18165c4a5fc1ed0dfa75c277360e7d468d8451ab1c61c081a28e42d75c585d25d6eba1d1b40db804aab392895addb62ff73ebd8dc673e21d0e11bf39885284543e0577e4c52ed4c769c495bc223ee29002d8071987606f049c2f7b8108ee6a822804da7f4b6439e4fb456f50f764fbbaed77d581222778826dbc54c05cfda7537f3bb525875ba622ba0443401b5c57e0e37c1507dceab7a8b1094bab689be4ee95c80d16008c50a5f26483f655277ffe8409391d2b7d329dbe420a97b4084e543841eb281d0bfc595f7a762236864315c2068950d526e0d5f408105891704eedd783f617b1a4a421e921123200f1e81044a96bb4f13b2a8b379f30355f5412e876f7b50837022fae6da1c8f478fb82e1b926ec48adfa41da48a1f56989c0c77fb4d5433ae38f680ce792c7fe698f7f64cb1bfe47791d7b8261cac33faeb24115748869e9af75aeea987795737718f77b0fd6467792c281c917c8f0e9a8ef4101172457bdbaa2641c8e4f0fd1c350867c882634f542a1678f9f9c755793e664949d5f67ca0534da8ac3507ad370e106eb03e5cfbffba23fc8e2249921cd834b95b22463c3c839bc2ab3e2ce5f26fd05bd3dc3c48398228fb771c9274fa36282f0f16e8f15cc76be37b081aafcae9c234455ae13a3d83438e5b3ac4ef59c3b340b5fb1cb5c3686583e4f96e8b9f01e4ac15c2c999f2ef2a7a89bcbf2fef37973b0770a31a3c74e9a5f9035dd64b3b0ce45e7fa87b3e6119d5533f94ebaff202ad82f6701200946e8fbd7c3e8bf1549a9c8c691ad1c7251c03cfcf64b5283ece66cb8f299e03e0fddce599ec98a42d878cefaadb4bad3eeafb95635d4fb026f575f5b805bbec89be16736c9b8d4a648d4c8a678fe68508b618398662fcf28ae74dce190301ae918fc367fa9c7d88a2b1cb18a735b4acf9c040a8fb9e276d2bd6bbcb9708376006d6c70b206bb08fc54b55f4f14dab36ff3d01806d6c60f5c7bf5290602aefccc8b71b7d9f365b84f74f9b89f7ddf7cfd9793f1b6ffe9d8b9b722d596ceb21ac1094ddf2b90d0fa629544bc1a95956a4d93ee13e7a130c52a895a70723664f7a5d4ff00dae4c5c83807259a9d751cdc3bf050721e9c1555e8a59c02a4d583b2acc134a259d2ce259c09436efcd9e2f8965f3cffa1abfbf42848b807b0ba7d384fe7b90014ddd6d0cb2b441292aa2d5063be7e561dd2fa8152ad69c03c87c8aa7ff6182bee0174a694a5c83c916ff804ee9e776eea45a57d72da211158218e048d093cbb4dfba96193ecf3ef14b42260d018f3c2ee41f5af8575e684e2212c7990af892cf3429b3ba6b87e812bb0fecce0c0bd38771a83e043310b0e4376ad99d70f38999e094e0e0c95f0885b1538cd48593a7c3eede622e7745c6ce066c11fbd2574377840ce70eb4992decd1207c682d787668a4ef8e5233f5546b8c170aee33ccd536b2b298e1285476d573c636c09e75c934239d24d2aff933af2f07430bdecffcc2e515d4c7308003df3f71428a1df905cc9a376b8bd4c6e07c34a0724789431fc3f9f781044a66c361156f7f089902073d28bc0c672081754cbeba00e4cb0e1bd4777a7210758d173ba16f6e2f4c986d4b7d8e93f2e14e9976c8550ee42fe3a6de1fb61685d5222fe4212d8a0b838a28da42d751fc99d5cb394c58da7babd0c0088463b35b6644a76432993117d9e9b07f9cdbe983d919246ede84c6d1942dc7459d372eaa0d3798b0eb1432531c5310561308a3e072c0822a2940ff7eec33894c107c075272cbe671289ad43c3867c9f8e0459f61f9d8f8d9674b38558dd5db970b2586330a8e292e49b193c4da487a9d7bda5dde0f65f173a43d128ea86b88a67c58b0bbed4251a6f9773ce79397e8c3e19ab5ddb16f06a84074ab0cf431d6ddf85bc5722568cd28c18fba890242984907bf1cca96bd8ed46ac9bd9693042d0ac55a421237c71808c7c09be8af570d81343014ee3d34f7fc53785893f0763aa558cff16157da6319409a12fa9d21757f47cc83e4913ca6da71f9394b6fe5e9fe11a6c41ac6d074ed5ec2bcff2c5e43feb6283ee092d38b94004c3e7dff51d88c5ec2c4635b54eed9543d346bef6a8a84760ff13c0c22419f5f61c94a5384f32bfc03e9a965eb950b8a31d55dbc0daa44b7eb8aee0380b13ea5b84ae90fa191d9fab3fb3655b7d25f2f021358e36e513f4e3ec504df93c2ea80045bb00b3710a89a88d96f0e0b66fb868639782f74a9855cbc73c0a1c7d81de57f66115a002e04df951f2284cbe5592525adfeb143b53f82cb6729957f4f5d189d245d98e36a6a39f190338941b958c55da0167d52e29de9d09026d7ca0cce7c9fd7f3e5c95537c7896887f5a24ea4d179b8e27cc44174d7b3833426dcec708d11096321daf53f5472e794a0cf7c2f827ce6df9a55365287502badd3277db02e6e6b6a2eb29fe32ca078ad07d2937674dce1f5f0b7f42d2ee33ba133621b54aea1132056c98b9f989f30367b180b3e13b3035e01dc59710323d800681a4f89c792a65bd80a6e2d9db6dfe0fc1c4ce0e02270cac7012c2886c18428c5ea36f24b2518b74ba843fa3f6f25ca490038f093284f7a07e882ad10eb0352a86095c0bd78b2c8d042aa6dca673929342b5a6965bd775efa5c865e53008fa06b1128c6f343740a4985d775f30e85c89a41212082490aa9df72e034f8504a45e90ea4a255126d5cef84a6be649886eb6f8af253d221781aa88fc6e8aba91cb09a54d249d498b013043e7adfa64edf46eea6911e72d95ad4064d030458e169ab8552a9a36df42dd01884065ca176e803eb720ab5166dda8947ae20a61353dc076a8eaacc333a3b3d556fe0516da68ac1d6a0d6291439fb11566d33475a19253a7943176341edc3047de33625d68babd6514e7d77fdf19e20523f56ed7e5bfe81b50781dbe63c3b7d44dd9c690cb3576d8b353eb4bbe81167b5ed1889cf5f7911f2af861cd5ba87fe5151a51433f8263bb5dc1fcf1d78ece43930a75482fe58229aa900ebdfd9b22341bcad77777014cc59d6b281f27bb5eab8c3053c5c50bdaab6b9f8e6260a0bb9cbd8fdce4c5fdbe484008853fd9aca65b0e7f539ccbf41496f069cc3cf18e5c9479e8e2582bed7f122c7f149cce8c0729ab8900663954d457ac2a25a7883d31e8982355659a8acb7c159e45174953178142b51e07a22dccd72a0e5a063de0b1193344661ebdbedeaec2003dcb5764b687325606f0675a03baad758faa2c9a344919437e87bf7c12e50ef97b4cf768d91be943fe181823ad7fefb776f27fdd2b744eb297a4773c5eb338bec817882b9a775954a401a50e8ed0f99aa8d42737c382717aa5541efe5da03fe797930a5433b9c613df8d11fe42ed796f895cf34c287300feb12332f42540dff1ae73d122a62a929caf10e7c1aa24cf2255d1b1768e5c1a24123a7e0052eac3c9962abe631261fd3708c1b488a34d467e4bea03994bcb9a0f73edd16d3ed8acb01ae62096486ed64d8acd448ece4da9daa7a1bf67f9326e41164912c5ec3469a046659164b2d5f16c5d5fec07f64bbd34ce42211c552cc1ab66dcf1c149eb93b2eece47eded04439a81381b98ac0fa8c5a2632d81caecd626150ff3e6be0898ef9d40b009e8122d6e5d75e405ab2ac7365a88bccc3d29573b6415f4afcb09443ae0bb2bbb9b772259bba3baeef75325738d898592a6d084241ff1085673bba4bdf199cf620416d49f82a9d991ebf0dc05e5d6092b71690ed27c17cf5bdc84353ab8afc5e24215a7079ef37892fd690437119d8c3b93949f65d2747f71e62e81c0e8f553fe97a67db8384c2ddba49273bc3b3d5ba7984ccd4cb762f3942215c0d57508486b793f0f536217d4a9e97a29e12fbf21d629ac6fd15fe9dc7a4be252a02de8089df8fbbfe8b0d8010dc8a78ac086c77dd3a0d647f06e074043a9a124540616341cb6c3fa56b92fc56856a71285352d34b289c8e445b6dacb4bf098bdfb2266faf525b5b95319f5fcd65fe252e081be62dad0735176466803e6c166ac45b2e99c99d75d984e5f21d15c5fe5adebd20f9b47162da1e348cefbd2d0a9c228f3683c78ce4201f7cdfc7d06915a20d474c5ef0bf996403f610583bef9174c092fdd92171e5acda4f20e79abf9068b026dc8eeaf3fe0ff5567c7634783774451156deb175b49c11fc5674e38d8f527720559e8d567a18a10fef4323abb4a0b1fec885403fa853c619c7c6a849e57b9f5ac359785392db2e1adaa519d236556d596dc90b2fe5f87fc6c1ec85cd2d2df1046f285dbceee0d628b0ff872532a9e4688f8c77320f8ec438cfebb874e3e2494d802195f45ba4c3e92d04b87feea410a8c7a4afd35f2a77f7660bc0525b6a8e5f584aaf0b41ab3be870bd9910f792f4f74af7d1c839c6e2397b187dfb8a727c52e44ec5f6d87a88ae4fa60dc6889b2591f30b2a7084176707f194133ff58c02bb6c84a5fa841423a838aef903083c18e92f14e8ac82640e12d7bfaf2f4c68e0ccd53c23dbd8514ea46579edc598dd70c53378b2be9aa103f7de76a1d0a90d40dddea2e77a08defdd5db2d681dcd7bca41c2ef8c089c06bf3b0a103ba6367ff93658aab1fd959e6a0e25f6a1119e25ba083837b1aa5774cfefef80abec09911d0ee16803eb1d309a34b034f28bfa447dc48d691138230090e3f4dca9b4340252ee73816b5b8ab66f1c1b867fc1515bb8ecf5c0e93791a271ffc2d98c826da4a4174326daba022c579892d9eba36aac6167255bd7e5f0099799a06a6916828ce5c5f5793728780c275ab8bdc1037c5bbe7da1d70a6d4b6aadd6460b45e5cf6391c71409003cf5561a09b80e26fe5483402ae8617bfb671dbb94fe68c477fb06ba8b68a4ecfdae84513673e5245a889f1ba10a206147f0079003b08bdecbd3605cc3a46fe14034468c836c520f10732b98e40aacf0faa0b26dbc6ffa120670ba2ce604ea56dcbf5c74874071f96f9e4674a8d99c9e2cf9b9969d57c14ebe09df7cdd9f782c70be54f47c7fa99680e294fc45c9a2d7c21ab81b499ca06eb601bc38e997edb4bbb60bcf2fa48aff0c2afddaf0ebecd1448ec8f5c379b1292a50612ab40b1982b2f2f9fad67685b06ffa3678eeafb5e8231a4d6573e92593bf759fa16efc5f87cb17e445144ee614a2071666acdbd26d7a599a9836776591b353cc060e3a8e1a600a676d42f171bb5da2f0667cab36142de4cf6bb7cfc19f9fb32ca2258907e2fa0834b0e2246cd1de3cf6ebaaaa96f2fe3000de8e8e6b98499d58cf905c810e67eee70064f441688e411f309b0244be24596c99e9d0410cc52f897c5da8f37492105b240eab89dff0df39dc21a3cac9c01c7b78881bbb509bf5edda2f2a315913c0c895a067f3c94a9c94ee04a968955379a5a6c6de778e9fad0a00d9a6f621e3d391fce315d535fec5b16d450565d1bcaa317d6b05c27be8cd7923917cc4d394da5c3d1eec52ae39a1066d6ffe3d73013a2475403f9b22ddf3d9f2923840167fe6d9c6a4891048d8d55e23d7929c841912bbe6d6291f8d86575621c893618b23744dddec0f8882ad78e2413be41a893f36c23d59fdff6d730e28f818cec396cef90f1acb868c719c3e131da706606a8b3bb92f9bce8015958d5dc7346748b95e83f3f97ae2868145d09d1b4395ee6b78aeb56e2e323ee16918c3cee4935871c0b565db5e40e0840105ff6396498bc0dfec3809630a19a4bf587bcd62bdead14a51bf60c70c76823bf410eea197d4e3abdb66487ff81586bacdb3085dde069104b5280b40788d23de062c1220310faafd30ff3ae4c1b85fc800964ff009f0e0903684b39021702edc4a931e041714dc4406795a84a613e4c146f2b473dee20ef4fa972084054b948a30d3dc75e6f0931643d76a794105e8fafbfb3ccd235ed06d527e6185442e0c07d50887302318c49799f44e8a0fefba629e80571f4346b4116d6cbd4d3319ccc3d330f392d77d30485b526bc7dcf4d66ebec26b0b2b8d3094348ee2dbb231b92c4d960e26429bf7a869084fea71b9a0b1db54c5aa2097d6fa1f9a8348746a7db51268efa42182b34f1ba27a4f72d8393546516620f5f1fac630229ebc24d66b42c8b53178d2ce7bc157058da3e3dac54d858c0bbeca85b3cd0a94be0fa7e455f4a361c221138fe2e25c2793c788a7c1ae5a8673a3e81a99403ea2fcae81a9a67420ae92dc5b4eab6476ea809c723c8d83b0581671ebc40dc746ef0951ef3f66bc0e0e9fdb94d8a7cd08d3c88c2ae887c1b41a03f2f1d001e77e76eccb127c78e0176551ce78305ebd330c7ad85d620b4384e9ab1c27b1110dc2bc1aa3acc4427ee29f0d381d87f56dee97112b1b31cc34ec83ff5ba39eeaa2e50503fd5b29f5b1d9c152a36f8be3eb5d10f8bbe0636e74ec4908af50203071037b6d04090f3267e1764784409973c687f82a18da3ab638d8fdd8865f3d01e6b45918ea98dabed73df69915363268a672de038eefb4d95c7a15d77a95da2037747f119a92fd0bcdc8e6ab1afb3704250a154d961ef7ce629c8ce2b3bfcc386b0178b4d6283bd85eb963d6bd2f5578f9428c2ca569499db76e18840e0de176dc1a0cd5ee4fc4a794f956e08c008288272d3b6afe0704091c6d2e85dffbf3c0fa5f2730e2265b1e83fef88fb53e1c103d45e2e943050ec6334fe7efc3f08c0757da173bc9a3a581abf1de55b6acfd3300fe0ae7f9810bdc1f226ed1910d2617619d5a77e9317e54eac1d2b3b05805bb7d5224bd47fc1432ddcf9601d15598e4014ee754e186f5ca335b5348b9a9d528c2eb2f70670e95e84d9cb5bcc76e900e507bc10fab975c71a2544428a539fb9bcff95ce88dd4d2eca9295e67f075d5ead5f187bb9b3bac6dd41cfea3fe3f86d045f5f0f87ecff92faf7a0c30a1f2e64123bb9b04427e044420d69001e93da7732963837fafd48992dfa90808e471375764854eddd55e5bac2a88b9a5a667be2aa64f76fd041e5d09ba7e7048809907834acb4e328cccdd6143b049655279dc4f78261724105d050cfbb4b5b2fede566f347171d81944a8dd21086a9330a78717eec6338d5a6407c1e18c6d768a3e6509d8957fec1f5919744dd01e6b4575989838de615f582ebf27bdd827e989c0e869c3bf0ba9d2e85753d80e8fd417d1af0e141b6a20d71cfcf811d9d49b926a141452d7c18cf650c4d40690ce79ba5492ba6ab7c488ad7122f864cb3f75351bfdd1d1874a0740f4aeae71e21d77ba1cf27c4009ef50ec83fac5a1b8d84cbe9e70cf742b2e71da639419ff911f30973299c410d22c63947b23bbcc2be17d7f1e64762c22a369f7990e14d37ffd3f627b1b0b19ecd4131551f5595eadddcf9450a04ff6b4674f58164dd91374f4a0291033eb5c58f6fbfaffadd34c08771062081869b8da82c0bc9edd62f08f35b2abc3950a5217b0f935deea82c26bd260590c5b8e7793b05e2c5aafcf418738df34f2cf2269255442091edf1e6fad3b365c69e731b205f778418e4ad6143622b2bb9818f9e8897d78d8912cee7ce02703bca5beaa9a7ea5568a9bd9b93f6ed52d3855d72357037c00246332c9919ec7d6003af0a43bcd99992189c73675656fbc92fcf9621fc0acbbae3fedd1021af816de572e0c6487e9d4e0f4614ba01c448ba247fbcfbe2643ea62d8d5fd2b1d4019e2813ac58e03ea80706ab6a0c15da4bd4c402476fff68da1b1b93b4f8dad726d46827bb69d1debf56818a932a6edc7e8c6a8d59e54eb85b33890cee0cada58de68ed3fb301444e873ef8b5c1a74a1b6e70ef90a6b611fe450a8cd6faef61310fd67a45b9940c8def50687dca7408e6f9983e79e5b1e4a8923c0b72eadf86dd0eda64b00925b253a0ed019169d84376aa4445f1a878dcfe0c6bc3afb18ca991d784cd690a732058b90072167f52a8fef8e7606fa6bd903da16f92062eaf3b2728c4a4c772c5850610edc9b9f2b76687d7ac34003c0ad13a7f884aebee2397b9758924b2ade4e4ce7274ede999193541cd5ca178de699ef4ca3d5f42003ad526e93c3f3804b03035f000f3e6690ea39c9d4368e660109363ed0fd361790d4475ce9bd9dc955ecfa3cd13ab68b61eac24d40335587dd330145942e4f306f1d4c91d885ab3cbdf0bf9ab617034f11eaf26a3c3aa652dbbd06404f4df9874ae149bbfc77217c6d876a998998e10eebc49855902a1777b24c3fe2292689d362642ee163c0cf783a7dc2bb02232a2eeb9ae526fa229010ef92f86036012a74257178502dc6d79760ca12afd24ebd84dccb6890f52ca72173dd19d04d892ddc40368286c430060370dc1832e49274d5478f1b56a41e9e9c712dead6df4da02ae3a1040fecfa5432239ed5cfa6fd713908a12facaaa63b8c7e22adaaebf72376524071f9f06234610c9f1b881c54d466a7632e97cc3cfeea85a71046313103c7a390c9d62b38432ce29be29675019f577202daafe24c82422c09adad16a5a9ab58ec74edb0c5cc2e2ab25d819f8cb36ad25640f6b0c311240b6ad07b8914ebe9fe913fce085de2f83693ed5342b78b3076777a4d703b85d38520f20dfc46337e986fec03f84dc13eefe78260d8a7cad58394f8faa820b73882a98541ec88f6a581c1c87345bf88bcc146bd86dabeaedff462c7a9085e3353d2effe8c334d4570fff4996dfdd8c40557c8e1696d738b0fc297813dafae5a6d5ed1a2fcd1e25f198ee167247321749e8c07d70dfab431887c259a8227c1c05e666720b4a647e9a3cc4764c7848967c37a6ba587e3567306fa2ce1514b8ecde8a5112a17f49c5afbac6e392f6e63fa72e690d9ba33c5a9f17f6f6138d60080ee5e7aaf313e3ac9aa912051c42069435b733d162e102755567bf19069ae3497fd5e3f97b64f8eb617c4f65df7778308e8d88668a6922310b9b3ea335a01e3c60dbcf33c059971f0eecf5f480ef4ed371d410d861aa1874565edecb816510b8d9c146e4eefabfde62a3b1d25e9f3ac95b943aee3625b85a27f0572c4acce71825561ea645caf89c0120b72be272d5bce12647fa3eb474f47dc1b1f74cc0088ea8687dbbd0a027f1af5d29846b0e1b987f402e0491ee15455b8be17f3da0e1d71e05552eb13fdb6c30bb82d4ca88c0966638a9f27e2374d620f4f708bc039435ae7391e3d2e5732f0a2b395c44cf5ad01af8b7a6bb8e186f295c546d5f00edce356dd4dcd7976f9702ac5d7166f913af89e77de26b83157a5eae7fa45743e1573f2a3017a13310fbea9e480810ccaff12ed7544650deddf426997becb9a528a178386a9f95050c6960065ded7ff011667ce594e229e4529f535c936602c00ddce93f1f816ff158d3d5c1dbbf16c2a0d4f653848180a90e6f39a3d9f9b0b6c71e7031ce8886e5e7fb8a2607fb5219c138ff8a46ecdb5035d483a4d2ab96f333f7faa5d4e6d2bc1da8e71d40c74b6cb67f0bf6dfd55000f06d24510052db2666a14806503355202c7df76c7913ed9e3b2f6b1baff01a322bcbc0979d5ec10d273cf31e0b334e871e69891de795a54ade3b8249f1ea028ff1958c7436449dfd1e75be0f70d986976106e233dc671c6f1a829791416aa9bf2571d3e92c7b3d5e7af885c9e7686a430896eb4562b6bc1b7d10f656a3e28a5841376ca0882a6de716c158824ae64be18d5eb742a431eaf04387222fddec6311cee68aa7458b8607910176651bff6c4ca629e7d794f0dffc646766115783c50f62edf097f07d1aa86bca282dc7322465faf90c783cf9c7143648c556f3c91eace3bbe284dd9d9a87a784374358af7fb0c64a91b51d19c1dc0781f1540fb462461c81d7aacafdd7ab07ecab65877a9acfe9456953fae246bf7a353fb22c3ac01fbfe6b1f4e41d16ca784f5058afc6305b3276d659211e7c82679fdabe7a3cd5e155b4a1c37cf457695a256464ebb8b9773eb1ac98e1f06aab3b5d0bc59f2bab13da1973db835cf96738528fb4e43bf94b69faca4f02958ed36184f461a8f672fcdbfc9f56489ae0e27f87674cb4d9fa4a339bf0f16ad8eb22ec9c0271b9d513a9928bc8115f43a0a14142e49aed77d607d664d5d1512b499df5f0ca0df379e762d917163f779b1c4daa165b5d224deaa14c73436fd5562a1cb89080bcdddde9bab26cfcbfbc01f1759efaf2de10ccb8068a53635569f6ff86461e5bc2346c3661f7880d2c29669fb8cca93a0fcaf1d7205c7b7b0de258f79d47ecc1ffbb869d7479cf03f5f3a18ccca31c6f241f654f4885f5f9f3e2082b2a3748430568da267bfc217ca161d04024e7b38e431a8fecf1018e17596901561986b188d9a5350b64fa0b7e1506f8ac3d4e7f0fc825e9c8e65d8ad22047d2d54bbe68adab072ae7fcdc600d20a9c329ad23c684b4e9c10f0c44f9cb31d8dc2cf697123a0ccd8476b68c7a9b16119802149586b12b782477259315d7a76d73d7524e94580302a8252c856171f985e0652bab6029e0f6db338b1c75fb53064a6263badc27a222a208ab425063cb95a212a837298fd4fee96b93818dfae12c4bbd86271c4dad8057c45053f70269bbf7435c660780a1507e54f971822fb3f2e71797d524ad4f59c4dee0cdf908a70bed3f884031dd416cdf8e66fcea16a3c3c848e03de6046bbfd270954fe467debb4e30ffcffd07e13364563f595c9a69e3d92e72997091bb45c51ffd7e7e076f01263c942e0b2127b2c646a90b90c3672b4a1d275ca62f08b00971c446bb385491db661e21af9d125d6d65d26726b33583a863ad0d02df59f71f54778e67c3772cecbbb2364d421811b60d406db69cd303eeb5d398fa3933056e13ff445767224fe65cc7f97fb29a0aac8fb1651efa3800251bc0632d245a7eb37cdf71079fc3fe549132b28192cc739530c7393b6eb5ce159cb011cf8261c718a2b0be1bb7b717533b002239870a156bf35db979afb40d116d284050efea315df39e680905f3679b7342fd6504321b1f1848be5e756c8cc97c9e546c76538582154313ac0d765ae4f8c83fc564f6ca88ece14fbb8b671140d8c802628e3b83897851e7b8db898056b7528251ca4c558e847dde47f5d9c0cb9b08009cbbbaf59425be7be31ba7897a85c7fc297d39105941545b3447eec9fd21bad93e029480820744f37c5023e736dbd455b166cbcdaf7b0280a2d1f5cbce11991eb3093e88938889107377241ca7bcfafbca76207d7b7c5620f60de54e612b001cce2b50d636f5af98b2891c06d1c5b9cd734d2b37ecc55bd10ad8caee16b51cb439cf707188ac927f1fedecdad9eaf694fd5a7f180474343499a07d6a413fc50496d29bb4d303f18e8d96ee5b99fa8544116c08bd3b69274299924507a8051db53e4abbcfb78694031bb34301e19736f769dbd6d514dc9f9e893186718c06dec37f54f81773e1ce2f047280a5e8b7dde80494b20801c80633a3b247cc295a208b0ea359f4703e66b7db0c215434b6f920d55bbb4eefcb087e8bb1905ddc4e1d788443ad26b23e1803e430f6996bd4eb5bc5fc892633786420043dceac688c6ee914fb07f1628c107d5e5fc83e5a41ab2744ace0ac8523e977155aa424d82fc007da8c9752453b2f555c2d0987e4f1d7111d89ca544f314e3d467589f677d3541b4bc78c8248767d3534a86c6f9a0e7393e86feecda7512da4a6b076ab52a5c44d2f66e80a685244b431227c8e11340b92943f8858363bcd8edd9ffb9ba42914c28affdde25ea44aeea2baed94ebe4836d5bc95e036c14d6e63ab10025b19eff5423a95af3d8f0e63eea8ed4d8d5505f4bd46a5d42677c582fb510de04d024a82685ebfd79fd32f3b2d326f7761699549458669ed7f3053712eb8bb96dee3d6a1a68b569c9933944feb3a381864397dbdf9a9c76300f9393031eaef702e4209826c0525866308220a96b5c647832466a835ac0d440be07936654ae0ca090776bf9b023921bde704d57e412fd5bccbe2d3bd70a85770460990fab97e25cb9cb023557d150bc418121de3fdf4b6b9bfb8bf83b0956c5dd1cbde573c33c6d01cdc4595ffb97aa1cf3aae0e878b918578b4baf8595c593287070b0afe2d5fb13753b9625a7b397fd061c606ff4f3519478d9d8dc0cbeaaa919cd14cfd21c9c26f321ffbcbc1fb601b7981f7bef2e850449039276519ea80de7bc134a7201edc50773e6299f784c17cdceaa06b28264d9748eda32483ecaaa47e85849718f8f922d6851fffc4e722f387855e57ddb2f21170d0ca21928cf299d0fe09a5fad96e0dc3ee618611260243ae420d64d412acc131aae981d8da123cdc05c93114001887ffb5a1cc56c6cacc27b93f3db951ba60f765ae4ea5cb7d7a81164fe6004d71e2aa26302c19d0651493efec95e278f1bbbcae64d1539c0fbb512b3d96f768ce9e8fbd2677ad588938b48a763fee46c8f4b6cfcef4247ffe9009f00022d7675c8817b97c71291403b7f2f0bca4ee5801197abca0983bde038c03afac8133c790ddc88d55b2d1b505bf732ec77be936a1b73bbc55b31ae5f41ff09ce876bcbd2801c4e27dc5e30d12d1200bd38ee342ea64b5ce4f0c712d142095dc5ae8b6d9f138f1f9b72b55ef4043373af02757eb933b31f557c8389fed67adc4eb45c3a692e859d04ef3e64d8697a65a7468281be51913aa8bf60cc357bd162066423c1f6475849e694a093c023d4ff98d58970a2d714b7251da1205e4092053acfce07aa96d5e9da45a09446cbb921cd5734ed20b57af5e98738a21f8f53ea97ff31568ef81eb45c62a2f09bc1e8f1bf27620ced143540928960d831c20bf1f60d02fd781973f1b346c1d539f9c80b90ded5a4809bf4d7a33e1deadf02abfc07462850b781f116a9f98ce6bc411fedaddb8ed8ff4eb8c90c6c6fc0c4003d54748f79deab07c8b18c73f6680cad96830e2bac1e02ef12964d8ae5f23f1202cf4b1b99a09f6847b6f2859cd783ef2644c07236e322e6a768a5ebae61c0b8d89604b75b9b742148b9233603943cee12751fb6c65b852cfc8504626f44c7b903b99dc6fe06c18fd110836e1ab69a50ed7d470ab3cef57f4eaee33d73a95a04f4f500df175469ba833692cb38d38cb7efbad0ce3f35235fa93c7b50183f13e0ee2b9228f53591b621167ce8a2a17ea657092414e64f2d13e12deedaff9704f94f5f901275aa23cca672b22124a8f799befdcef9778a4f3a2e2b63c1d5d59d9bb858bce2535564127a1845bda0ff2c3d806bf173fcfeb5b2875c310a89f6d3581c14f5da3ecc91515d08291de3b77191b4f554d2295fc0a6d2296850524a5307257aed0b209eda6e4139296dc3f9e7fe45c7dc1a8b680d7466d949a21f9fa3bf85490da7d9d2e20f5389bcb5cc04aacd0f08a30f2bdd4479d3035852d30532b885794f911e7b4395dd8f521cd9064096c2abca77cf39e75c1cfe3294e9608171f302ba573cc1bfd65b5c5ed97632825e88ff4f4b2d15ecc84e29723e23eec09a0b8578cb1564c6e24a97eeecb6b5cb646cc983464e3c6236e9053d176e18b733b4e3db0eb2626f697d74cb8c4759f4bbead20f03f12e9efd7526ec9d70bc66b7676d4c124c1a8ab91b36ebe65e0e00cf00a01b7791a14da9023c3b765fb78b29c5e59bdf1148f5d7d3b576d60318821cdacc7191f2107dee67f3a95d71fd7f7adb0197cecdc1c95448a6f138b1b33db335fa306807d39d3e08c6d9c7e4c78c75e56742ad83becee34ceeff2cdf870228703c3058c71a316fd17d6b96b41ff0fad38a447aae9a4bfca8edff812e894873e61f0853cdf99afb3ec6d166a05db62d9ee41552b089f3d54274b2f10f1e99a20a04b6749da46e25d83df647e944100ccf965773aa117191ca1d08cc9fd0e185f6fc1848aad2f6aaac943363960b155d110af97b23840e3a2f42214d42d5540cae3be87fda822a3ddf252d86da0bc285298317926dc9acdcd9092039a966bb56e25f39e45095422cfaca25c6f8d34647f4614c1827e31de37f23863e1044960c1779e1408a522a1c814706963a2d160a56311cbdc85f75966258292decb3b6e5ae607b46cc51724183666e32012fddd40cf24138d99a59d2ba56325ce457a2152d7214106048098994e584f0d9c9ab33fa72262257300f33374eeddefaf709606dce769ea40823d81ecad89f6a0d9ffbced3a5c6a5f5dea7e8b06f9cf83adc13fd71c84a6b65d0fe7c5be07f7ed136cd677f1d762c12989a99cc80d79be5286fefb8b3809881250a89c963a0aab8d6af4c55fcde09f40b632f4cdc77a78119cdb7b7fe739a606213ad0be1ec1d086319a4a9bb97585d8b61d87dacfe4addbde40c37858638851f216e72bddd22002fbd38f61bc752735a0e354101a72034083ac934bddf1ca9c5cc68e054db95fc0108c18a715ef57603ce1714e725146e061fc2e447a4dc4aab3c1e89c584f2e06f5ed54433c6dafe3de6eaaef047eeffe25bf5014f653f85053b9eb63d3363fe1162d44ac5e03f7f550a8d207c480c6f0b1dec87da8955122dd7b6cb2f095a86aec10e8cbdd1bdae15127a980cf21973381c046e28995ecd0202afce8780608500ef0953249a3fb4091df5b9f81f444d32065586a4223ae355f9d554db3a70452237d726a16616b887408dcaa4648c5724edfc86a820496a6edc577b6740e153c25bf35bce0f85a8d5d20b9c039aae389847c611df2b4a379effae1a09827119a79844430e065ab84c25ba486b40fb94bd4369d4b0a64bfc5a73a509c302d2ca8a91f61167a19eec0a443e5b4bbcf4f48f913972255b6258d448ae57ce4ef1f755f8b3070af364039ed31e9cae3a52cb9a02f8ef42ba084588fce2db1ff31a8484c6955c69028d232962b36ce3eae37d373766fbe35e19818785cae339066a21ad69df6904ac33070db7e441a5838a98a598c530415dbeb4c41fe0b4dff8edf9fb3191509a9d00f4600df67e8df0b0fe6d3a4ae5995294fdcbedfdf0ae61e1802a8359e736f4f9db500ae05e14e9626161d21eaae799acee589a6c5c5800283a5e86a68cbc4dd1a02c8ef9f503da776a9e57a5bac9182aaa6e692894f748457acdb51bab9caa23c4dd21ef402e8e8ee150b21b9a074b999bc772151c27384b51fa938c11b9b5524768623477298a391852d7a0a1ca5265bd3299274ec9dc32ffbd95c5a82ce6281a94ef77975d3f6e97f7a7456ee6709866ed67d925f62f58f4779e35a7f8674c3b222c9fb62f529628a480f08a6b4d0e2dd51466812ec7614fb789eab1273d213db41b5c1648104e087e8c950f56cc2845abfbbe945d99c6572b7b4bfcbb6d44b103ebec7a5374e41c09a40ff757f3a68de34b0d37ec496221c715db6ca81d1ed69c97f93464ae0e514522cc24df859419a4254264a1f0a660ebffd22f0ba382c9b6e34ca1a4955f28920f2a420006a08e5c7e8393bb3e84c70f622e42b5d3e59ce79b0a738e04aad916e18283e972153219bba231319a1e8318cef0c19b0dc3675839757f0a2d0411706ca67dfd6ba1e45f63eadd06000f814e24f15b7250914a9f9ec49485351233ea38bbc33c9cf8408d891a3336baa11af7d150f3d8534dec12098465fc4939498acb215602dc27a037219cec188e67f524cfb60dbe30aa7540ce0273dbe7203812118091e806bfc80a7710865df3e1602429fbaa446129c7389e80150c25318045a7a3cf71b74a4683215e43968c12d91c43ca68d566d5b9945497c839813d31bfc9645ca9468a140d85ac49b5939efbb234e60c464969de02b5e92f4014f2ecdca8d01b4b5ec898a6558820363a8a2e5508016d7d2c71b19de15f95dd204eb38d716e15e60bd85e9c854697c96fc18e26c58fcc70688660a93ce0786b65621dd446058670817ede7f292e5ca44dcb89b2d797c63d4bc4b8167597c21105fb13ed036481d1883193311a1e62d2b9c1d63c070c6910a1e4fb01f997327304528bf2410705474c0f58e59fd6c739dc70a2ca02d46cb9e52f70d6131e0ab32dea0e31e8f45468bfd4877241e45199b77bbb9f93b08652456702c25938361cad89b51debe065599270990f4fab1f6d264142bf9b63c525b9e2e9ddbbf774a30ffc191cadf29d830a9a76c0e41499258c5a82895abd8e5c74facaf90839484c48d0734b08a99f3d51ac69ee699cd245b57b8a8fcf2c0e37a206f5e58790194d40a6ef92b033709dad3248a7f23d2b3be4d89efd00b8e432afbd20a46afa27c232039bfc1aeb80b0a7fa38ce652e998da8d2658680fb8961b114cbfd4d169c97954eea1f7736030dc3282ff3621a614ed41e340402076024228dc783fdb8a391131d94376fe08b7c42cd782564e3758029b7934b9afb13224d3bf995fc19c83de35706530d6b83e54727effa0a174bed263ec4df827229f4f665427e163761b5c07930c823e86736b20c4165a439eae09d3e70df19789f7ea5e9a372b30d769527fd8cb360723b03d5a0be431260b16cf04f0a12b4e99b208c74f72eb8616f9a16b40a67c214210f23a3685bab4aed0cc340c2fb184f81b68e8868437dd89b903d5ae90890ae6b85918b20bc68a0f921f179eca10c01f5ab1b9cd6fe770822231adee8191440f6cac539fc1cebe3fcea936ac9bcd5898cf28ab72e4a1101f67cc44d87615ca4033e0e4d4297eb7f670f817c859c547cf40fcd39797bc3d2cc2f247f6587c8a23f4aae4387b57e05c94d9e72b855d9eafb583d276df46c8aa7a8d6a292795b090aa2a75a0871a9fb8aba1d227fd8a6ea923a56ec9059491a9a670e91c5a7c1305b38a245ace63757b340d0dbeb49228cfa5e9e3fb93470c83a22c4594314dac3e2b96db6765fce4a8eabf3b43d4b367f88c4fc5f3273a0433527cb2a992fcf6f9c28030a50959778a1b0dd97fa76db6e25804ebc76deee5f6e646db9af67d30347a001be214a93b6c33aca7e8e648158bc027b6044b82b59eadfc53bb89ee8637903a208812e4cff4d600412bc7b10405a302d949a0268904ef3deed9f308180181da8afa5eff69892326a8efdbbd1d31f37325622b2b2ab1a65c4773fada9b5bce396a09994f8b7c767c98d98da3ab421943f01dbd92278569b269d650ee220e69f70805a91ec1760b56459672ff06b4eb27cff60ed196a400ac88ef37d25c97fbc099e608836a2b57cca8dc6dc809952721637bf6e8f79df7d34f504f72472501c117dc2866d3d8959d1243fdbec29d347757ba74e6dab2965ef28b8ac63c37fa60f337e4e0f12fe363ea1e10a06bb39f00f7dfe9aa7b17a91d6b6b90679284eb12088534927105f1ed71fdf16e7477c9db8bad6c18367a7bdc7165a6bacb38aa3a6ab59d2d05110b167889e696afa6304b55712e4cb4f9f56d469175faa3ec9c99c8f21633ad0009b1680980d70dcdc263c165c45f5f41af1d7103993116f3200fae9f88920319f2044e837a54d5f1874dc8afb416a263d3e32fe794cf197ef7a91f5c90b5628bfc71354877a21ec9c47586213a07e9b9106213ae0ac98e80bb5fc5c0281f949716927c9d496f17a2c308219c027698907de290fd108140448867af901d44a62113b735483f4c31df59cf4b37fa9e9337a72fb22460c0dbaa9af594ea9f65337608da093568d3de7ed993df235531dd818f6caa4ae6beca2656228b2e788e91363fbeabee44e9d34a8bb943a1e3361adb58da64bb22019b0572fdd6e9fda39bf315d162a90c2ad79ae6305eb7a61c0b33f9bd865684180d3061dd21f0a4a503b3fe69b97c2c411ed781cfb23c8a03d1a4efdb386e2b6868176eda6f9977e33b0348a3063684e621dc17eaf264eec4ea17a5fc4f6c63aee4347bba748010b7ec87c5f8102af7cc9e9cfe0d7dc1eca19732eff7be2444f5e5748fe714087aa8d31b3d4d8266bd9ee35df334942e7ba8f4655b6581f18e6efc521fc5417aa155091a6196615a26a8adbed62d0d7fc4a878e287ad4d59045694cb618f8328960de66643d4d15983836636f31d5c213c8c069944332879fd95ac9844f7aa8857aeb1ce4d98874a738df3c3f0eb3ae21ec9a027bfea86a33755333dc475cba931343b6e1276862e06da79bbafff2b6442c29be849cb7223af323b0618c38baa9dac2029e5b37e678a0e7d38ec967bfe91ea1950b30ac277b2eef4801fb81f9f1e416cff49fd3948e20cd9184d92d71e86e779c8c1ed45c19d6b44410b22049af501978f97cb097a13f4bebccdaa1491f0314854090ad5076c51f8ce1e56addd0d49b4bedf190325d65a46de5838a74a32968b143db5c3250e1d375679c14862b789b07daa47242c979a9d85e7ab3526c4bbbd904267cc9e15406ffa740897faa1d73ea3b093711d1cd2330f0f23c261b72bbdcf130820ea8c63c5f12043f189f9ccf01aa0c876264300ac3a00ee7d81e636076f18084f26a5e61d796e9465216d576c7b3471dd1b07b7615f02fa58ba5fa0fe75c872310e22bf6fe28928755e42cfe62fe1f4335e4ab036c45bd768aadd4c1c63900060f361bfdcc4c9e994bffd2c4bf56220d958a319ae9836513b9e70d54ffca161fce9d0aeb08fa9250a9101461af9c60e92027361f647a4d49a63ae4bc0e0282417b581d7abbad55be4b738dbd8ef832662fc9271050b3829f7ec1a34f2d8944f1d4e2f8a137ee3d5824611cf356e32a287923a528b2a87309adaa7c151ddc4bdcc10929a4a36cbefd0795c3d234602c896791b8cea809c9b51d2c2b7ea0d7e6e05be930c4b9c1425322f9e3c7fcf8dbc885bf617fa72514c167d8f2ff4f19d2cadb6352e4be76da801ba40a9293be694b112e3d44fb967cf331454a71777cbf1557c198b45276571edf49ef8278c27dc219cb0056987951d73d7d61d5c3e40cb50c983623ca6c1fe877d6fc39ae63f39d0bbb5fc4ec80e5f2e610791ae204d6ef05467c3c62e5189ce599dde96989582f01ec1cdce166916ac2601b4ef9de1b18133d4995b812601510f9ebf5e3ee6a3f88ff4ee411493c278e77f78e99a29d1913299b214e63156143037a9655ae1b0c61f3bd908e8391388fd49fa559d956df119e2238c596b639a711fa333cad8a1f1d0041a7290f5c64ebe9dced6536fd472b163d51f74fa00c5a44902c1ff1666cb5e07a6eca62f6d16816acfabe6618ffc2bc694a03cfd437d1435ec87455d4216f57647bb299a4eb726524c6b1dd3b82aaa5e4a7d4a5db19d7b57cf1c092131e7909210847493c6930fe912b72f22eb422e299f75f848bb72337a7dd3ef8e6e80e6e7dd71024c858a845a7aa3dcb0992eaa5860676cd82b4daae2d2bc17b6469cd8bbf66ba8b9cb384f6d2620e7aff3b88966ad1f494f721012ba5c735e4e6254b3ffc4a009c9113c22910faa6f7946b5cda654fef466f3fe456b954b86f76a2213e9f449c55a6935db654af76d89e21800b725d6097e8e0bb8c5c3eb494f4675784e793b647a9a338e2a40ffbcb50cc4654e5e9940ce2f6b5b3028e229f0a8b1eba62ed63ea81e05f486b434ef302e9043003025b9c08169beab2d1387793b5f029417d59253a527148b37b8227fb655d82b126a72ebe3e7e7465352b30f89e1910d5db1927b211c0e8902ed08fbfeef4c6387d67b6fc75922a283bfb296f06315d457aaa89f4f3255b3bc9475daed371f18047348af45fcc4151eb8921c992025ac3d6d12bf6ce5ca03a0e49fc0fcc0ea4727c228de8469b137cc01bfe0f5487ff0f4a1af1aa3dcc40d7f2f3e5d729c51735d6b602ae905af45f02162594761c0c83feaabbd56b72b1988986f54a7fbfdcaf23ec208721144e6a0539a7588ffd6d0665e5673e4f6d8dc557137219c7b6fa2746446af04849503e114e6f9edc842279eb3a696f70e8aaa0f35aeb6c2ba542f9476f4aa6e8454597c2ac3d13a639156709787b02412b348decea8cd60cccac01c5aee099fc4091012b2acd0b9122e8c3e2e60eb1f975b4a530232e8950a93f4b4fc9a39c5975abad5b237afd68d47a3215b7b160d94673ffaa612b477659942793de67c43ca952a3f44f078ba148868a41649eec81b078c715569e14da0eb1e0094fc3c40d2744615c54710f41a7dfb7d72acf86a0691822b4e82dd36210298b0b5ec120053c7c7a7f968aa46fade8371a8e4d1c16ed73f7fe22865074e68ed040205034ac5fdc7b990c6ac6af341e2e8421cad449d28eabb34037eb6a062b9969f5cd58497609077ec0521bdc1360c785052e6a151e74ec5069a7bd674ea7e5e3d661d50df2853157559288701adfc028449b8b01cdfe1095ddc161b013e9f2ac819d416aee4a56016717c2cff42bf332656bc9f1de9ecd5201edfff662f32eb854b7eac224a3395c0fbffcf71e97f00a4b1128ca8825b5ca25186c8cafbf4681627253958751560847a05c42af69f33635719f9f4f54c1a51e02fa726b4ae7595df691adac17e508673e15ddd39dce177d30281ede8ace35a5b2d916c0a3e927c2d95bac735b277723abea54821fc2fcb564ac2e6c0e1a74a82fc7b1bdf138329603b29aa5418407f653f55a083e9dbd743b9d07669ea4d79ac038276da342bc4b06f54a52b2bee310b036f1c54a539d91171821a50fe5e65089d2635c04ebe95560b2a54f684533c710eb55c589ab5302506f93ac73b64d2fa9f8ff2e79e58c59c99446097cba023bd3bf48e0ffbbe41d468a6d57185c2850a407fda652c4129219f223bc23ac7001623eff8558ea7eda4bbd84d8ae94048dd434016cc24ce662b0a2b6beeb7437d2cd1d730b94c681c1a1af4f3d7f7e9f33ebd2fa4e61bdf1a7ba529e2678bace260b703656a9b377a9306344e8ea68f0618e2053d997fd3dd7bd9b3e8ed440bd3b810cfdd1e77a1967f18bf82ea88a282e1eeffba8aeb08dd78734d559e1b1c66bd50a345f49eae5ef97d69267936e0753e8856a57921b70d37aadab8849d1eac612e7e79b561088b15ffb30cd99830cf1f8e0ce317e18e3755362fe8254ba49e9d585173ac4f02a83ff550c2fd91b60ec6ce880a681199218c258e6fb48d128100618f0c0661ef8fe329b3ec3fd404f484f6ab8fb4584dec7a39bcddd1b7c8ff0d03af31b6ce238b31f8fff77ce1bb64b27fb13b8a55464f6cae08ef133d5c7d2d7eb9db8ec1f3a91f5fb95c160d6b49b79a2ea5e41762481be41ef2a090cfae959838f2127be8d5d926e3f2b05eaf5193742e02f037a1e589dcb954af24bb473d1a01762a09ee2a6625128adb70964213db167f0583ff7bc5600c9194bcd8898db8b00694a3ff5eff774c8ae0e5842a29ba34133b3ec64eceb4f06ee420486ecbe0a428b9747951aaa8c05078cd814f4a81cee8597c0fafd00c5b6bdb87be96777aceb6db3ef0b95d38add5f5dcc3974a7c5333295924b219798f636bcfd1e10b98afd410df4c8a732e1779907fd55f9c0548563abf3f6d8d26a3b7b5ac242e1fd752a9ec31a9d395c63a94c70ab43b6e948e66cc279033cc36758eb9d501ef8d0e597ba07c4e0d692f0d6b2131435af1a76d2c8c3c3073d2fda913e5d732e9e8e8de00b29e6a388b604ff6541433454c395ce51aba6d39f07205eb2f6416edb98a8b512fd1c9b3d3623ce7f04af7eaf52a3dc5c7361fc131719298da88bc991a2aec74c4bf8f47c16ac07df7c55bdcde03581f107beac3d7198d9c07afab815baf8e0f43fe0c3c1cd764b89b3f3600042b4a1eb87460dc3819d230542d950935151c61952891fdb04b4db1f60f8ed89aa31b3781d2412b4bac5f4589f05e16aa19a13405143406cb194bac1ee783909144b238646a106f732fb95c36350f844925f383452c2a1d4fb5df52fbe7e1d484669e01d8b193b481ba6c09956ed9b55197644b0d021e2038fa8d4efff6ce5e8ba72454f261164aeaa9c97c702b19e7ade9404b7d697a170cdd2eb225be7d92cc57d25e08435c99ecacbb0b0dfcc1d2ef2d90fe775007f850f6aad5712ad597b2a1dda2dbba0f168cddcd8a556014a85e212a2f7fa08b4cc6a5fbccc8bf31207ac51163a4883f807d710f32b2b2125f2273fd74ec34b2e78d8323fd7c20a1d295c96b71dc291496c9a2ef14c8c1bed716e2d8241933f1b249e389d7134aac497e9e058141d792619d621c2b5fd7a8f2a4ad36bf0d64f2227abdab3f003f937a6d4f7a05b7637b0700ca493b13f258889b1506688671e4cfac67f9e5cf0b6b9808747e136ba4a2266c449c6841cd5c69fa9a9e349b7b0de4678be824224cadbf240808d8324b3b66dbd2e5e6ae495b00842d015fbfb983941cf954744d22678619abca4a57600339e4e8231a11b9ea3cb17ca285618b43550fa399e92dd79fca079cb482756a4ca1d7928e742206cce66c7d22623483552e35d4288f13624cc67446251d3694a34f3e817ba865a171b86e01511fa01c36f2c9c07ceb2c2bac05b1639e6cb3236dd95d6627201364ec24ff96cab7361c0c5759c7c3e05b3258bd25fd5a7d3ae3a04656be6624fb7b9d1d36ed3aac82ccf37d66ad7a4bf3828eda5ff4128e7cafc53c87ec20a6037ad96bb20b36db773fa681dc968a95fe7c391774cdc6147ffc16a5feea0f47e928e3cb736a26b0281eb3c8bd8254b5d0d81d24656970e92c8f01d48d9fdf394e454a9907050c5236b41776ad8bd14a97b864b49b2ecc57b736585c6cac7779d50f8138024062d128040e502ce6ba51904036ff28657d8db14984aa1063ce1ea2b0686d6c95d6a18730b4b9c128f11bca38b0074870e95f0b466a105b6edb2b8a2e6dd821c873abbdad8ee60ab52635ccd1946cbfa296e6b16c927ab478e4c25bbb76624c41b757121e7aab9d95dd1937e644d416128c35dcb086c836ad8ccfd09cdba708b5979fd03d3531afd6491973ca19ba7d0c86b392691d2eb7515b45fcb643e29f53b04de8501b0a2ba8ab2d500968692b32100bab445fe604020e2067aa8e8c93a6e01b5f825086e94c08801dbe54f31e1be2cd5b18f73ecbcaee9c79521797c6077af2363839e0ba455cd99dfbbbcaed252dce1441c2b16885359ec114ea01e293552ad0b6840fd0105b1608317576e94e3825daa427ee3bb7584a67630855066c1d135215d5c4e6d59745d212e2ada1188b422424f15ad0c0bb8bec3b9609a21a3575aabd513c8627db685ca65380e3afab38484bf5d1ba87bc22d61ccfebe92d0c33ab3fecad78714b7228739f25ed6f596363f5d3806917877eaa1ca8ed4dbbc3192180abcf137ebe5e6f35827d41977e2f5734c266d93837c7c780a303a451d4cf69b8cd19a723e2156018fb3800b904bc62e6bdb763b2150d78c56c18a21e22807f77bf4859a723d73b02b1f603e6874a479caafb3663ac4ddcf1d4ad299788b4fe758ff3c8df9c75af9164c66d43a2f060aa08ee57908e207bb121c5ba690fd45a9cf574ce1a962714b003241da48763664588965888ea2ce4166a1ed7d6dc613a82feeca9bae5cbd0bc2fc43f2af3c65af4eeb00adfd0f90c6da2176292d1edbc8b1ab13f4af37bcbfd9d63159256e55509183f96dde9ee195209569cec43cb2f2b54719c8d908336001ce3b48187ba0584616e82d5e60f383f65f91a0d25dca7141a52fee5aa98e56ded66c235c8a39722e8a6fc1421bf5bd969a621257df65185e996fcaeffe8836eb9507a1e1e4a58668d05eeeabcde3bd9f579b299187001bc78b3a1790f4bf807bb460a491e112e49870ac25b3672ce93195fe02e2d5178f7b153e6abdc9d97f690bf999cd91d9e68e609a1fea128c35dea7e9ce7185cb982705be8107ac5045ccfcee7f12c77546bcdb6a300945852d644d469ef0773693de66c08fd2de5274d3e3e1a16e9278d43d7919f7265cf04f9c6024d180af966a42c2fa461a3a3eb6fb144a401115ec0728098810b9850a0a50346b0ba760f3d01c5186fdf4d462c5e71941b0d19b46895fd060cc43b2adc2912a43eddf1475ddfe341ffa9f630bf9f3eecadbde4a715bf2b9ff3bc0c8a01abbf1a679618c99cd36a9042cdfa583673a8fd98bc4b5f170227e45cf40f802becce96e6474ca761594bb90ad6ffad3fb500a1edac1739ecfd1520c82c2a6eb68251eb644fc5451ed9c56b17d6fb2aa6631ed54d0851770a9b436050ff09618013df37cbbbf7573c24406fbba8a1d5a8540fc7ebd10d26c16b9db45658ae4f7715efe98ed553641615f39f5812fde58414c3d49466189f4dbb34cd1b93070c245de9f78138c3a0ab3b359c90e9f3eb9bdf01c21af58a62aed035446d07ca9974b92afa6e9f047b9aeb1989c22b04649eceedc71f24cd795944541fa9e61c6ea049d194c2321f37ed375b680e1a016de67753dcd0139eb098a14d0183329ad260659649e3bd35e87ae0cd70c3d173529e06528e05c28ad4f0bd1dc1dd67cef66cc776eca3791c8a814258095d082b37b737ef879db1f1c7f08eaad3cb52f153e8b013248f19419642852e161bec99bca6cdfaa4bd10ae34d1f3fbc82e38c94597aabdf80fce9a624da67edf8b8450a48bbe907ab909f502c02797fa896101f5d6c4a99814746248a5ca37565fe27f38b8b4824c8699f8974a9c90625248def443a2a7a669c53db86b787ef0ef7feed2c541d6b5f4b7c75bf49f2bfe574e12182ebefbaa9e0cb0b1b282c24002db9ce733240d184cacfdca1e839c24a8ea2f61a173fa4d1a652584a0ef29886d8166c2156a6e5ac545c8d8e29ddfcfda1b9ed80efc88a7f9884336a4763223100847ca880427052cdd349e58df0e4175903cb7e31c8f7d56c6733ee7bbe23c74c5f1f6554970f03491bd834f8ed1d205e9216e8bd87c65d2d289afbd13ed0a183acd0df4a9bcdf323d7ab2c3c316256e5f861adc8e99a0b8a0175bc0e04ef9887ceeb872e11db76ce8acc304d752cea51d7048934ecc1cee7493fe64607c6a6becce54647dbd26be87503260af419f752a0bd0ade6665d2829216bd2776bcfdcb82998eadca32010f07f8a45cb032bd131b004c1a99cd7c7ec0c56fb9bd5b43d1028d0016589f34ddac4d05a6ae045fd60ce257c938a0f57f31dfd8a86aedf653403be34ecf43b5c6c4cefe67a11e05f7f36de78c7b7d4c9d41450ffaa283e8e9342cb64c85ce7f8d229c23779be0ec2f0c11e681bab1a13ffe9d5ca8ea305aa68a3f9206ca01c4a74071acb4a6ab973f62b6fd89f3b32a5f1fb78deb56ffd573920d1b8b50fec446abd1d4cc77da56c37340ee5cde5cc6aef3a83b47d9ed1f7668021edbf0e5f6be06606c6e3c74d6c3dfd8fb6dc99f331159307435f8ab2a48e59430883fc92bf2a6b140900ac7506e81e76c8ed46283648a0bae0c3a28d7f0eaf6edc6055a457fb37252f37a94e56b499da9068ab075fde6b200219eb748e9c8d881830ca284292e44eb5bb6d63ff3cdf0c133b9d35d664e38431434fbbdf2443bd56a952bbdf964912a1f796e5043df914883b55567188d5ea0b3875d584e144ed6b65ae98fce95a9eb747c011ef7a18890af6f80e6df053deb1b3c7cc0dbac56c674626fcc209082431a0a750d64751246ae4c14ba37b66ac4d446e52f0adce7585b1cda5337bf9406c617adec1eccb92935af6fb1c556b1871d022edeb62d6e60c09e09f7a6c4894275f8b091073f47c918baed7c6aba5abef9a730573ae89805599f47cab4f04eedb115abadd03b6a82f70bd1927a32262a8cac36420d47fee0bdf865d2464d98ef2a476bd8944254a591790c5d9146daef955f8fc776c8effa5a59aee9e4ab55c30d37675e1ced79a0f29345521a4ac64f82d7c28deb987dc27c2f21d84230135731c3f1c3d17b33f009afff43bc486f7b3ef5143009b7f7ffa5cb78602a560787267fa37ea608433e4782608527cde8b1d3dea795eac709fd9846c4fa14a56ed89acf7a3b3e657e10193eb4dc9d00807392aeeadb6b96549354bfe866f5696cc52b94143b82362929e72629efcd3ac64dc2568bdb3425e241548b2827f2153a1deecc34cfe2c42cfc4ef93e69934f521f985948460203fbfb6212c9328b6b1d1c9a3fa511b12de8a53b9a4a46499884e55062c3e03f1f2920bf4b5149ecdd6ec6570107a749cdc8c9c6e269ce4130a953a9bd44c1880f7ebb3a03c1d174197aecea1f8caee283f81ce48a685a50b246a062f4c0c3fb016fbe7b0bf579e4237eb0b964d8854f4a4419d368630245a5a8b4327e7afe3db3377a4e49e7a88c97ee5e58833c01e40b03a47e50ed5e32ab0e8fb205f496348834313df569587fe61d4755913398a6262e2b29765c84638a8ef79b8ef0465e0141788125629537c921eebd4096edda9c7d76425b3d48fe6b0f519b418e35e81db1dec68ab5d1df68c7eab099936f2a4e18ae08c228c7117aeb4d7a427162cf8a2e65b0238db277cf43f2b09005380e7a675dd03a8309dc638e9c7b34af0d04c3db1bacc3eae56ce6edca9b29891fed4cff75a1be770acc9f8fb556be6a18404e4cd08b41cada55edb329749cc4c89ff17369dad84d0bc4eb4c18160b5c8e90d5059d1aa8ab1aebbeeaaadf6becfb4c130196903c84a5b86dd4f4fefa54b80cb1cb16cb3a0150b5b960b990ad5b99fe5eaead5e74e9be85bbfae165245b710e5ca3278fcb91804337977e7c870d84726871dd88070b3d7f0950b623481ef9b34db2312e459285b82d832b31fde0e7bdc3530681000ed1049af5b4bfed52928f5a58454d3a1878f20c84e883cfc20c033c777fe3814c3049571b07d5902e9efb5ef48e32789965d4756a836a3538394e27f8ec25cfca412f79ba9840753476072cefbb74c5fecf0aa8e091fef32f907938fb51d4daa3623d231606f55664adf81660799e5a19098bed9664dac0ea1edcdeb78512d54c2772da93e1c18bcd5e51d59f827a86492aeb69ae8cb115faa8bc68e8d680a2a835f97ff9602b25f81262776e38f5d8fc283ea3c47857ea31fb3776adf3c2db125b893def3553e9ed3007763e5c0e50f4de3ae41d1e4cdbd48b6f76b5ed7958a66e861be0f57bc8bd8fc44775b69e6e7f71f377a2f2fdafd54a8d24e330434274e11aa78a02642bdd0429ee56a645254fa0439dea1ceb7dc4ea0908ca22d408fd1d7020d71cbff792c213f69d3d69c1ccbd1a687fdd73848d0e66fb91058dfbd18b24ade4d08c5f13092646417e82f31513ea7d79494bdb1304dc5f06a39c887311eee947d17e53125d21d0c12268ff23219c5ee4732dca94742ccb97b7158ddb74e08bee283b2b0e01afa1d74dea3f38fb3a54466d083bd9f8869a13638e8d6a0fdf00f72c1cf4c3dcd4d994ce04a4b4b1c09aed2ebc5b0ac8a95ca409bf5a1578d3ea1fd9efce1e5dc7b93977b2bf55c73f8551e1597244fd39ac80a12ed6ddcce817ae596c20ec5c40a7fed2d5d5d805726e3a0365d77e5f7775de1c36a63247c9efcadce54591481c475609222254ed211758f626626d07d036a3eee5a6c3078533701c106505568d400e50d19d0c2350ddcd2c5881e66487f79d130d865e46d2870446099db27fa80eb1df6fd10a10a4344d3847c9d7ad3292e103b68c7ad22a657a7653ea65854d89a6e421a2779c2ff793e0be3a3592272452032e39e9b898d852080873c243c7814feeb0c07f41572b18e13e69e2104a65017d486ae36f38decb9b7f2dce418023ff537e1b962ed6d89588e4dc2de16d9ea81afbd370c52bd2399e0c83b8aa468e5d6b565d119215a24a7ae7a9e7834f12d54a379b4a99387b61b671542f45a7481c740390ead7b973128cd2ac7ec8d0b5c14e3828c3e47f23d6e4ea7df120fe70c7be45d91da3e57460920ce15d5190d3a0379789a111aed4c6e92c26cd5b384d934cc3eb6c5b5efdad192a2e26626f77e05595c72ff5832371a3072515065fe2a4df799990984a8ae831259d2e3a38a4ac66d2e7f3f926a40e253bde7a993c7a094c621b5f0f93139413e98bf5557da5c185ccd3df034405fd63865eed2763a68a5f0e34ea47a2dfd4cdca8e348c2ca9a0ead6d7be201531b9d8b15e9ff1bec7ecb6005a17ce37e6b3d441764cbfc6fc9b56fd232db63de6c4e4a5de561a96631814ccabdb288e47d1c6bd5044ebd5f1c1ef03a2cb7dd3a959de84c3ec39ad38c7635dd4c509b4ae1541fbb472641093686f18c5bff59a6af02d8d39d4f6bbdb6061d212dc19b71b63e4aa4c53d448f7a27ca78abce905814d0b47a5e49c62900931d63d326d2c20a133e40f7bf2ecbb4161dad3c9969c79944ac5d39beda90f02e71063be90021418866a5c9b40ab143f9fd1845d5bd65418c032b9003e74024f3cad9c2b0dc392d01dd58d89acc241905d50b94bacff2b00f5b59a9e665e1f6f5096511fb94425446797e61a9b5da04b246176f9d83dbb33303c920d71fe7caed0c4be3803f3c913b1184eb74ceba509294201e25ad81fe419ee874ecce4e97f1a40f1c7a98462ed5a0d7588ce9582eb0c5285159aab61874be841cdeaaad875e1bbdfdaa33bdaf381655b7af35aa849bbe1afc375ca6bfc00fd532e4e2c17fec7e18c54d46e2c582563192494db441f6743dc5df1f9eed08f0ca037e79b4e4feb394659f387ec7551b3dd2db3fc2223c60b77a347b1bab15fb6b166392c3c7f62bbda8eb915e72005bda6922cffb4d0a5336072756765d9788c5034e26f64e322d4965d3cf2465b43c23a1bf3d7db0f05d449a1ecf76f5bbf29962780ef35519e1e19e04eb1fbc8fbf0835fa1139b4759c928fce566013ce7ac006bbf9da2e8d94c22af6648949a13faba35b5095d3daefd72977b296f710d63dbae794e37468f7dceeec9740ba6bf8ac2ef298f720d60d46da04f1462fb183efd5b4fc25b36cf04e9511f3eaefc904bcc3b8c94032c9f9e8de263174e4949dd961a4f40ff29a176e816963591ba98043d9538314dad14b260e37906fd7e481840267354e141e4aa85c33d359489f7881485283231116d3e28f7b00e829d91dfbd7da2a9cfe682ee388073a7a047da9a8ec7a49a06d0b1052873443c94f898b7288b6ccd33f1f3799f53bae2d1d8528891d8b4f12b98e73aa1c3d7cd311df6c7ad7a4d57dfee30fe268123e059dafe23418227f6badce67a599de9dde5313aea8ed67f520138ac721154e07fe42558da8a00147b1fe688421a09e61a46027cd8702c98014605606e1f1c5fb02d8d3314d2c17f2d870488309d8ab09047bc803e4fa0be29591ee0bfbcdd840e186b4ef26836da01adbd9784c817259e307e60dd9dcfb29c55df9eff4368b98f40d422f825638155b10797d66c1b98ff5d846b42143262fd23993bfb57a9e6e8cc50fd8450bc5c5a3a917250f53a428fe413450dce734958d029d0d55d138ad44d8d6f6ad7e14d779dfa072ae09b2ddf7274d1908b0dcada64a63f140d49edff08ffac52a63339cf1046df39146efab6a2431d02e08191bdc4c015081062cd41c56523c4bb6b8194be5f3b8c16a97cb4e522d8eb8bfe906f72f3b0f37de99d2efec5b4e698a8a08ace98206815030120c297da564b5280721509012de62dd971662139178d02ae389a431444a2afd52c26ba027ff1c351743fba16ffca0f966a7b2744637d00c80544764fec33aaaa063df3b647f0838f309e51519200454bea42177a88e06c9d8e92147bfc814043f4330b5d41d611152f9096387ae5d1ef5d3c93fbc2ce1abd341bfcc9012592588ee19fc3c8652d1b3662f275acbedb5c9c9bc695154176d4da0b0696bd3f9eb8b32316ccdac0183ad39a3092555508fa81b13c1b6778ded1babd8d56bc82c34c751e1859bfaa54a547048e2fd0a57f4900cae788641cd1165143f6c5f670a93375dd2f4095211e72795493aba8d010fed92e94ff171751c945aa869768cf660a248aa22c0b94c7d19c90df336b35cc1ce952a62366de8a94103395d50154822ea671f1e33c4733e8d53aec73699624adc01b6780db9db851d961421d2dca19b527ea6bc08f2b56ac2b9d9de0dbd7fd661d08604547ae80ddd3a7790a02c26586098a2e176096698cba1236a23e9944c9a15057a59c5738a55a6256383bccca5d311b9512ed24b6af4282ea99e327f093fa23e200b04bf42de63dccab90f404acec60fd9eb7ec30aa252bdeb6d2970120e90c76d1ec6664e590ab127d548566630400c4fb2336a830a214a7b68046422b51b06e980b4cb56fe275c4280a4bd7dbff7219e19c20f03d6019d70ffd8c11686ff782eb72b0b87210049c45d5d15b0e331673e4eb5eb8415b8fb7b1b60f04f11eedfea15419e51b2c31129bbf082ea1d5206c0aa4d51a4445496d9dc1284450b8331da1e923fe118476b0ff1a7d962a74c033f07d13a30e81b85def32dcd36492d9ee7536fc61a9940436846d0c12ec3aa9aee3649f26a46f34c5993f0c2e844bf196403f18905bfe87f03fd909d4100b61100ec060b74491fa537ca21ba093e990ac72c9d5b2128e1325fbd24ca1835f8d18bb34e889cb40023fcfb054496f150265606a5532065972f1a90cec20f10cfb33f1d6a4a9cb4ab1d53e728899bc3dbff8ca96d021183de71387b6aa8f4bfe127a57bd645494eb28c6c826335d6acd9aafe76c27299959b54152613c18141738154c57e7a5d7b6a02029ebd9cc98d4d23991aad6985c958ab6f54473b28c222628a52b0dd18e6b1d658b5db76af695618e68f6cb632a167e5aa4be1e5073e2c495950abfb621edc3f6800ba9a7297b8b2f0775e8439fca89073e2b6b00da2c5fc09cb7b12e748fc03c54f5797f31c3e894560a9bd63c188093d5e78f4c4250f73349cdcdd4a8a6ae89fbd2a28dfccfab6b60b494719c540f594a19769d09e4cc772a600fde9b2d1e9ccaf9bd37791f5a89577cafd5e6490649e07e1c8487dc486081b497f06c14d5c011a9422744d83cddb913a42a0b2626af4a4ca1d6c5328c6373607af959c7add38c780a150514621e37020e18b0e9e3ba2cd6bf5893cc13380d8d94766e7fab468de0baa7dbf99481a62fbe08984f24829740d37269570d7a8c4a232b78f6788d895f2fb5a2e38f4f54fbefaef66bd54242bc7c56cdfc477d82f4b8e93f56f15f350c4ee0bfeaae13f0e66f9578721320e0c8b085ce9f03365815d07e7fc401c0247bd6ca0d1df1b71d23e184f8495a135af84697e15ac8734a70169ed8d391ce57d0646552741e2ce4bdfb8631deaa7032ae416b15705052774ec6c417057aa301ec811c119ce115e5d7bf6604662aa9b084d5a077b3ac2d5056b6fefb707d431527781a02e89ca6d31c127d2e94078ab0d0a6b1a2058439a9408abe30855e0868e35647483c6d4c99fad0efecf241d6a2ce1f616ee5f343555c7dc3b8374d64938084db29059dae7f870b8bc41937fe217a532ddf4bdd4a2946c37ff58d9c8dd966651e9771212d67ae4d8d6fb31bccf8f7a001565126cec280972b45e0f6c348242030bc3263dbb5c42c9af7d3f61efb03dbd109e532db9e53db0116859fe92628f50f6a5621907add60d8af77e7275f95c183fe771cc10fca79389a16b9a5cb983c518e70ce60a136e671f9cf455773c1f969c520bab4c35b98d24acd93b167635c4415ea488fc8842c161ce50652555fec479c2117c2025f94f5002f831c38197330b87448e5ee99f1f0ebb0cc06a6ec808fe50c71206d11a6546186db1835e059f5e040c0b2fcb9caf4334cd8883d0eb8a94dad479bcae8d318da6dd5c8a6c0b4bc7ec87897be561ff1b81640b94cb6ec6a079d71bfc73bfc14ce5237f01b16092e546b4f5290204c2ce4f680486fc06a5dff030c77c5d9e5241a7deed00d077e44b52384315f8ac24f40ecacd4666976e6fe116f054a8454888cee00a7aa16b0badb11b0f87ad4b7f992f84de88700f943f3e51fba861f4da4a7fa58b6d7343f7870890a04f5cfdf8421bbedd4db1f2e7fc140309a8a6703a60ada55dcd9db5000abc847969ce570184efd43535588be5fae32a2c8d62e5c780c173adbe06c0564dd7ce0ea6626e40444079003e9617bc59fd5dc2083bbe1f9e83d74b087b616a5430ac6c6bcff044f58f748ef223744408de5a1d8548456735106df7b1826f43c68ca6f3ff4de2f80ef02c1e4cf98071d6dbfc5d82fb692229855ee3a8e0add45dfe72b6b6b843802836ca33007e2ee4891dbd7850c91807dec17ae12a9d7c1a7a0890fbcded7abc0ff83498730097d81e84e9380caf630f78403fbb87dd37bc2eb6160737b1891704af982902c2bfa783e6b1f1b3006db7d31a9424e8aa5ad7f3d24718902b99d92f922320d3af15610ff6979a822a0341c4e46e5a37ba6266cb1bc520c769e7832bfb5a8c0d712af153539d85e4f4f08726d7edb26c28301a1c0bfa5e6109e8d952502cb4583a7f577cda2d6339240266946e81300433d648173a2d17744ac895e61bf6326c2e3debaa02e16c9acd30e7bec1c5bc5bccc15ff2274f52b203a0ca7813a1aacd1940e3a5854a3a4e20d21636d9cbdef7987622b7b7a57ab50b7e344a8479582e83f18d620f82e2812d28e8e9cbce750feb3b8636f7237f2f8a12a879e1f4c07ea34e48e4cae680d6f4e47ce584c60316cf97dec214f2ec06218868346d55170dfb1070732fd9908d1970ab11af48093e63b3cd36e4f3ac71591944359e0fb67e699619be924408aeda2bd58e724bce4935e7b96a333a74dd45b3ea60675d33cb500b31702a856871c062a2a1b4a9674997b083216f1203ce5c4ae66f2f748d2267d8716bd382c9fc33295860a87f63453e79aca00140936bcac7e7f656004572923792faec4dc0bed9747d5d5b08186d68f1cf2eafbd8ef60472feca810b34e06b3ce861dcfba61578684d2f2fc86c1c165579ed634addd0ce351d2a560866b3e28ad1057ba6a852f1b90fbfb44773629467592eb135766b3c6654e076384e849c4831ef1974de435a091166791d004209f8fea5b318dad5aef42ce3e8b46b7415d9995f194765cc68a69155f9a0f0b22275cfb5a39635a1f5e23c4d23fb63e825e045035ca45922fe46809e02edd30797de7f48401a74b55a320e51027826335f2487e582a8c25cce25e06f869f4d90196c0cf97c9172dce18d5062c85daf2c8db05be382098d6d8716e1891264ff0a995cd6cb11ff3a0b082c160de49d57368a22e783c2d5daa4e7d224ef274159f635a38c91c18d329c3286ee36e8a7410bbb86436e1e04486a564c0273aa605967fca7a7d24f9126e0e0872e73ef7639f47baf9635acfd763134d6f7befc1eeaf316fd4f10d6b137196fecd413832e8f797242673810d7690e5e0374aee3112d1cbda915114c03f69d8d992421d215e99cbe0db8b0638d8ca7d73ac13dbf2c91d1706820dd2008b8e5c2c28064f9af70c8a400db72290f9351832f72fb784dbcab6c2df6c4d376106dfb093a302eb9e93e7ff6c1db9b9fbf5f9de7b6f428a58f5fd8771afce740d5af51d7d6bc5688f2ad2a9e1ad5c2043fee8d307aab709244c538e73bb69c74b1e9b0010047888e7ff99e306d3f737c03947badf277701eb6dd4a337a6e3bccbd284ef116ddc5be9c14dc8cf1620479f5590b70e8544e9edc2e93a327135f49326a66b211312b58c9b795e5b99b9827373a6c8371cff62c179e3c940c4e778423ebab37ad08edb5d75445c4039dabe50d9dc5a4894970dcc354e4a6d07012fbc1eb5f0773481c7623baf288cf6951499d2da58b0978b275fc05e6a40bb058d36e8176481b1983accaedaf581d5556180efacc02dcd46aa8501eb17bea1c464690e9567dfc6d21a5e7c2ea73372e6c240ed8d3009df1f17099486e32ae46f6cc128cfe4054bd473b2f30b49597850738bc5e6cafdbc26c6af195e48e56c06dd1abc38e1481d097e0db24177e5344d5e4f0efec7dd33152d0c2f45a041b326d9333e0a0a4ff46b66ee385ad66c8dbd9f86f8524713356dfcd107f9fad9142d26eaec80c68a18094c4fea4bc11bdc3a4d79e292b3c9f6f6810c462ecbba51444a52ecb409b198adb85ae0b16b2835d1d42bf6cb65bea0f80d9311bccf31530a214057e4a4e5b3e31c418c65977e7f59486f42d94e1348755214a0a96a8734e84274235ff165701f801bf2d1352b83934fba331a2dd8b5c86db597cb17d31ceb5a1c0319aa356d2189efc65fa298bcd23c16cd7814ead43503aaeb32f45785a0197503dd0dc2465529d78299ec65b1b35b0ec04c865326aac15ec4e28bcd4204f6dc89ad0857dd27cbc870dd6a58c71f633ddf9c93f3e4da68c758f9664a60096d4ce3c540f1a14d6330ac00abdc1f5596262e77b5b2b5c695a6531f4145dbadf0c07684b1bef5bdbafa94205b63b4b3bf64b64349cd9b1846ea478f107b584c559ab7153eb6b13f78ccd07ff101c21aef3c2431f7af885f1029c28a5cb6b87114f9eb9f9efb667b26ea795d4726c0fa321b34f0c33acf15a660611f5a28a1666929d907ad6edc303c80b7edcb0f68783d0d266a5c0659d3db109cc3150d05e9ee261fc82a4e28cf0ca55f28728cb8b91de3200e1573fe815fa780eaf64e071a66019e2ec5e7a5f469fa2e5ef1463c9596b0353a647c23b99f17ccff4e096e295b595d5cb1d77969bafc8d8ef7091caeae53f8ce610fb25f288a72ae2f0ff81cd74212de401801562a22dbcdf2da4349303c4165c6615551cae78c13aa95c2298d56f58dbf547587b5f5163de8d7b00f058abc597b8de6737efd8f5269113a330c89b1644570e6ecdf95082b80e566616338ecc999ce633dd5ebdb71900b679f843128329756c0fb51a08999e414d19f87bbfe843b00dd72fad0fdc999f448a75d7a4419bb34a538b2bb54623776babeea8195f5d2c6032e38e92c0682d48c2b2c5afb100f70992a5fea2a67c3cebebc8fb390576eb22c12919b532b7ce7b7cdbb5c8872f45048b5831bcc721c735af89b4c73fc6ef6d7abb9d819c96dfb0cd926b8fbc9866982cfe2117ac77b9bf4fd40237621af605337abd67de17eedf0479604e854ee670ef39a05e11c085b5dc973a34107c8146f45cfd5e5b1862a9c37c07585c40255e0d1203ff72c55a934e4ca4787c5b1bcabe61043b326f36e53bcddb1448d0f98e42f0847e4cabc21f186fe55f8560c4f68df460d7a9fd5b9c9e8bdb2e7e19d6beabf4da6f42509dface3de38fc67d04be551cc5685f2c2ccac51626306beafeceb497337a7d37e4cb3c17c5f8be54c461d28397fcf03759cbe900d3145195d86eb27759a88d5dd57b464aa29cfac4b0e98f967029080385301c11e18b9aa74945638392277cd26f9c7c979a7b1b2fc79f847c055cd8142fc0eb00b340616d2dc674d2ca21207858c83dfb6ef5395d2c2911763c18346bf86b054539565bc412618113edd6abfe882144616390f3aecd3c18faea9e46b166556fe1ad9e2b94a92eb7690370012727fd8f0e8225c8093a1bcd89ed25688d4c6a154ba0ab840004111dfcaba628676ef771167a465c565e6b1f3d18828836aca8b5d5a0b655fb2b250e7f70af47e140e75fdfeed0b68953e65267dd5c49dd29412f3ef34b5070189c02a6d5d04e88c4c9eef623d93983a844a2fafa7dd2ad71758fdb956853a75f7df23dd45fdda52e7bb6d0e00531188cfa9ef3887d55acbc419758de18d5a83eb7eda56371167adcc171963df8efac6e963136f201493a76eef5aeae7de5c0c00e8da6a8b55b88c30d8cf94426ed590bb39474d2e3d1d9aeb6aaf0f0f8855638658a350f7c8c78e08ef0cf498dbef2a231766a0ae3b95db194abdcbbaa9d90045753eb403d29022fd3052c60c8d0e8f4f9b98ba68334101df8a4c54f0b12491a069beab95c228c3390005f49666aa85d51835f637f7e39eab8ca7d04773540773f3be53bca604abd67e37d74ea46a178792ea5da1caafb2c42f51867dba85dfea75c69daebf735d119e40b4df9c5c219483c3872dbd7252c4e651ee2ca87e45c5c162ab032aff24e911ff5cfb850d46b1f390ffcd08f0a71d3503cdf1a9f7a8306dd05620134d072ee8b35721c9eb167e4c6e56c5f9cf6d79bbd8ea3e7408915d9e7e5b595262afc1cab8af1c2338c8b2250f42ff2e74cc5ef223d984530057e5d77b505c084be1685b35c33031c9e51eb2286875d17e227f9bb2fc702fe7f934daf53fb5a41043f1c376bc24c22a658737ad8004d9cafb8474ae33d9b3e77ccbd8aa66af4d7ee1638a41cefe299f01ec63b62e97271b32a54dc952fc894b8e825d48c6917e577e545abef246092ce76222bea24e1ee3e0fcc6bfe967649280fb195a6bfc91c13b8d74a5bf4cc307933cce3b3f3731680c719ea95f41f8b915882039251f9c21a900f68ca530072ba9acf0ee6b2848683d3fe2c4665855c1923bf0763cbb24a2de114b7b23c519755a90c43174ce186e0c4d356c4192f89443a8981be5211d4049d6ef1be42fd9b9de84f3e002eb107ac16f2f6139963d544a0dd72b6da4c785a47bb2ac2d7ce8286be542cb3cf7e20c795b1aaeeb5ee4523cf3b60d00574580f98ca0ece6c0af60e06fb7bc002eee7da3b68951cec81756e0ddcde7c0d4b6fbfeed75ca08e473ef3690bbbc78a3412b569a2272c3c44275a1c1b4e4a1aea0f0decd6012867c857526f7471761bc9aeb2c193f35d3ebc5477dcc0471dc6ba6e6e22f6ad05e120e7154340e9691b5480b4b09e1ddbbd067d8f624d27a801ec20bc0cef3db2518480ab1fd5918500dff122d6a5e688728086ba4649ccd891918a2b6722f7c82c727baa2f08b8201eaeb6b571999ff145d2060ffe209ebb54ab09bea3632b627888f357c3161aa90d69ff33bb92f40fb07901521208e04f26340581080335b4a183d03d5e5f5899c63acd95b8f1b9de51bfd2c90fc0f2527706c6df2fd7ca4076929fd6a9ba5d5b38732bf6cdfb7c2d9398c2b0935305ca8a4fcaeb8ad32b0bf5fc8360d6d5f18f78a4b3355debe93593afa3d5adc14ff8bf15cf7cd486ceb369f86dee2d8fab2146e0299c9673f253281d2d8d6034321e1c747e97f25bf068a7e999f5ab26be038964f69bd57ecff85f7719551874ef20512597d146e3f0a4eee694e810e9b6b9d1aa2b44cee9ca2a3e174d38bd7edcb4369d8c2a9e516ebafa7c0579a4f38bbf1488841dfbd63723a65160c4adba3da8cd8a82374e4138d396e6532f22e090646433c64b441c477559b91cadb9a4f00cc9a86b45e99d27a97d0335b28853f5f5a40938003729739ca91abda980c5b21756f6180beeedf842817a88d5622acf3872080ebd61d6dc0e139930fe06e9b461a75b5facbfddb2ec36ca9fb119d2099f7c74fb535341194763831afddc6b256075b3bf61eca8aae9f41d319bcb8f59be5faaf37440a6678ab5e44ce21bad275d382030ab75314555e0aa34f3a2af24a9685cc502269022662a8e9d9d6c455e9695a4ced2424c3cd5162f0c3993b5352c9a1b50dbcb9dbfdb53be5346742608c6671b59fa410a618c47666a4681918e8346d06533031385ed323be889f01611dcdd61d93aa6a144eec8250b25029315b50d3d0c4a21162c070600f14bd62207db83a3af377e500ff82f8f125bb345d0cf182befcb9040e861e03b4a9b82e3705e8c31f64edf3d9fbd3063ef0ed0926f65bee598f1617fb06d4674c393a6fb40398129921f5c1c535d0fae793d412a490cedfad1e4aeb835cb164a00f56a1392f3756845eaf102b6779a5bea7e51994b6d71563d29b47be7ac63bb19f0d6faaa6b10b412c88c72992afbfe57f5323b5aada7b8a3c022c52dd2c5cb24b95e2db60bd839436458f9a15000754f4d73a5721a4d4ee8ef5969238ed8d1b4ca6de5a4ad858006ab98b57dc2e79bf757c5186a41a1780e017c0adbff9e6e44ea05d434dc07619bec0e920741a96527be2479ca721d6c69864228ec348ce1891e09b8c7bbc1ccc60cab325340c76f9184a77310c38d3b2d73eea417bb3abc455bf36c6f2e00e03fff4ad7be300af2fe42b7839bfe4ce5aec2db4b7ca4709a9763f56111f7f3f18ea4ed791d38c3e6ba23bed7772904e43140d0c64a6f09972d70fc8b41d15d1858ef6746594771b28e2c34e533925116726b8e4c34c37086bb00bd242fdf0626b74a9d4dcf102719b89495e63e1ee1cc79291d424aaff5d4d76cbcaf9e092bc756cfe837000bdcff9a4461b9bd1c5aac643ea213cb70971bd097769ed52b4ce2b881539b6b59b7b097220e8ea738921ee741b887bf85b5afecb4ab61fe9a03a17c616544020cd48655c050c0967f7cdace53e86e5d19945c4239dd2b572b94d35b43cad6ea39bec7c0a7b8a139e34f78637f6efa2ce1b2953c468e9a2192c268b98fbd4bb3c96485f1b2265376dbf2f6d85f2c4adb840fe4ac2d2bd6e5dbe7b26679f063e9beec13ab626e84c5b27ef7f236623a82a6b4a2794d36f4a82b3f3006925ec90c2d5cce849becf20774ccef75e714b545e25237621031f56a4dc03c2586b7e4bff256819caf4965c652ce0bb53407ce50044999ae50f3423e20593bb867934a81364847adb815ea76bdf72a42dddb59905c5b3d6cdb7d4febd4a1282b85a5e1998e474bee0ddd51abbcd50be2190c773eca8da8324f699542830eb1d081686fef9cd7010452ceb82bf69c3ab592aeb5a9ccbbc2daca99601b9632da620fd4fedb45a0a6e5df3d214c1a6e6858862ea69db847467ab3e023b854073d85ad021958c2375150f2ba5a94f99b599be04da31396ca48b944a1323dae8e46a064e66c3ae625402c5556ec10d88fced3091ccebe1fc57b30251fcc832e64d3db9d84c37aa7292d4ccc80bc1eaa50db2abf28f974e3917b2e3a50eb2b59ace275d20999debf6f5978600f6e73e08fd6ec777244ea65ef8eb4b0ef35ad2eb925fcf742143a85ddb5ee55614bc491379d241be3133c18bf0eb087ea099c99ddbb91470605edc7ec255cdd20a9b9edb0592577c76627102634a066e482f6ddb95a76a15386979767d4077643782f400f446f1fcd3ae3e2a82d1179b389f4e356d4fd3c296098b6cc6c0845ab903ea18897d1b05aa614e8d9d57f9a5a709dba3e7fb12c6e0f5b4d8c3ba06e06c3304648b682054ad95ef7047fc75965c1bed8f4d714a73702e2f92d409286a68c9fb508b097a20871de1b3b2e85e3bf66a351d7bf5655b633aa1afee76b1a4a03d1bea6bd113bb6a184ec090fb7e16e8e942a6c0308c7f38a8a524f1ac01fc078d0d7212b6e9612e5be34b5f02e99f4b90b594432c67bed55a0e67da15f1bf00fecd1a50710e7b66ca511e5c0a1e8b22874bc129bee65c63f47017437890f250f4e45147e3dc8f7c3a9a4a064965e3524ebb3e7011fab19ca5f4d579438a03d0ddf9eab97da9047feccbb7a9e2fa8039e573cb005a66d38631ff501e40a2ec34227264bec77207824bce1dd555f5d4ce3aacbf99003f78af449603f10cc2acfbfcd59272d44229a36a41836ef4188573bdbc5f2c4656391e5f90534ca5f11426fe590f83f4933354196bddd9487c63180efbe7ac9efa15a504a9081a7b26e00375dece33feda0c4bd23db96ab2cd19a6e860d19715e77918c87490f1c919d96eac86048603a70b3bbed5e8f1419f7724a3767e02b56a0811aebfb2e5181c420f80534d767fc37faccedf45a940e26d3ad264b97b81892c8c13ea74a56a6b0d571a32c9eb688eb08c67fc053fde7014e57eef0557eb916d2809b4d6c08b123d4584f33c73a937f67eda9a6b76371e60a12a490454ea1c7aecd6a172c96b90afd8de9dfdccd223e0891cd207c6d30ca056da540d6461b8f9a2742e541a8b7e46a7c41672ca747ecfbcace433ea6144de7ac8954094b415243f8666f9bf44dfbba33d3ba622e5b471c962db3ab61dc80b4ad2c006970e79028e81cbd96539ec6cef3d54be8fc63c54ad8b1ac94ba026c5c9237ad9d334c4528f86eac55b2d79d8af4ad89f90ab8df751e1f5f883375825906fa6469949adad6f750cb35feb3c977748196feb02dd7ab20e9769d71c73deb2e43fdde4eb9ceadc8b9bf4db64f31b727668ccf8dafa7366f6bab077d33af195795fae36db06ada70dd8fcbf3ad712ad42801b9dce88f0e684247cc8ca64b01f80f77f080a7d9c118770473363ffa1cdb42ff246b46aa125addb8dc40783cb133a7549df96de88c1fff2d72813b16bede2a991013092a23d7eb94bca383907d1d0ab01a516f28cfb3dfaf05eff48eaf1915e0a706bd6889e17c28171af56c89f95711ce833c583f16f93d8dec74d374b0d05364c66bc17a39f8fef3b61cd60b875aeba91d7ca0f709f1726b40ad4f9276a7cfe2ec0caf98aa5efdabc26c95e40240057aae5b6ad6bb3ca2a4c856d8b7f6f59fd9fa7fcbb21f7b0e8898d76acd2456071002e56cdf10e606015b4560a79199f6e1504bd39b71a48c340207ca24b5bc367c81eec56c056fb7782c4361b17f6f34e9f30673e2f1139f726ec18da73dace00116cf235f9fe1c085021d6d3a52cbf679de18a5f5c4d6d6dc2a04da2f19e4fa17ae54ba02749103262ca4f3e9bf7e235c2e9508a7b299d4e4b131a8616fdea2b65feb94b1a9ee4ef3f7ab906169a31ccd92dd75f5518de5386350ff27d692edda4ccae7ad066aeff82e446f266b5193b9b688346dbcb1259ce92d7f74542fb5383bb8086bc5909dea2a18196edff99ce41579a45bbc37c3a15c1e65518ac443ede7f638e23fc5cbbbb07fbd05b737821478cccafface9b9e7da1f19b8e5d81986473e4d1618e6bcee089240ace48633ae11be829baaa235b9bbc284e1a3cc0cc72b5a849ba37558d7626987f7b099013dfb8fd0a2e6ea97f7b0a4573ab8978dc0a441d376242c32da7325a1c1a5e1ccfbf6fd271f173b340d2152ff65e539f95d199585ad859c59e4579911c4b39346a327f5fca59170e9abde0b5fdf99c4bbf8903efc0d194e43a68d3d765b803624857a2581667c2a6b6ed22e7a9c9bdcf3cfa853be359bf3cb46c4178d99d48e27aefeed63d4b32dad8ec93d90b568f64500f5b9b87b7777ca7cc63efcab2cd31ba88bcdbcdff753cd1f16f066093f33498647f4371ea1c805a1858112bf84cca31d66c94d972e15a0ec1e9a2a7975d818918a4a0c70e6d76a95ea73657bb60f1cb7dc142847b016efd4e267e6b4b2488009a228ed7f5ffbfcbab3660f2012c112940586c3daca78e3175c58493462d6e66a771ddcc8dc47e7a0503913b63c15fe1c14d037d6d9ef2409b1953be0f782924a3860c4241c2c03db0e63efd299bb12b6b5320a3db0bccd0ba372ab82117e135bb11156f180d058bc72fff3ccc94be0a887247ad120c3ae2307ddbd8d0d8646bcf7950e2d4673b0443a66e9f4d96b5c0807397829cbba0bdacfc09154d0b67ed017a728d9c115187742277e2381a4b9cfc92c26ec93727f957e13fb53834dbe1e3ac2436ba09cc7f621fe12c6ff190356d03a700dd328a11f256b5d8a7ad60d117b1e4f3c9ee66d77a1a9cc9432c1e2475819497a5a4b28fcc701c7cd94df8e0931511d8fc29f61996d4b859ef5b67e0484b3f1cc20aedf5faf7c2459fe2d24caf57e2cd5e53dbf3835767cd55eabe490e88005c7f7db57a8b09dbfd236c2dc86543c4dc171ab343dfade720dff0c80e2f6d012135181c603cf514e9f31f537dadfef60a7b66126e75250db0f00309f33a8e82f77aae0930ab474eafdb8e1c291da20eb859a8f5e518c13b8c2817b54a5980e4b4e001e47a89b597af8ca240787c46c7f06b8621f0fe149518fc172cdce96451483119ba3dc4fe67f14281d741efdc35b3600c4e3609534ace8c9ce1c39f7aa6730d854f8bbb8ebcbdc04533a28131e4795bbfbb2299975fcd9b2446fb4149d4bc3a97e02bfddcc7b33ab2fc1dcea1ca086f067a38758a14110b2b29d5f0025ee572ad70f975f7e5566456d96952b97c6a9a3b12baf6ca12d8379c0b1ad87fe4837de8b808e23e3fe5acdb89b9ffd3bb5f955dee3518eafffd28fd271a385cb43b6fcb840f0dbe85fd5f467cb8fc9381523212810fe428cb8c616c4bb71d2299c242934135acf9166675bb3bc717cc5af5b7ace1eb3630f294b3d6e4123034397dd65013c7c87c6692a62efeb4605762317af8c412a252431e3f78afc4bbd978122808fb36e21389837c5961e5f901979ca06ef0e704d5a3d114f82618473b4fce156f16812fb32eedca5b26f92a92868d262f4d1dd33e5e4cb5428bd1ee1524242ecc662123125e363ec335a09ba40b74584e7895e98f1315662f101c82f35ede0bdf27d8e4a07b8882818a1554163ef744bed1e86a8dd5a86a3f91f4dfe1b29e4f1020b4e08729ed7651497a4e3c2c19a69ccf8bb10cac13a24a474f834c8b3146e4938cbc1db74e2ecadcd2820a75b4a3fc0568b6f8b22a99c9e88d9cd0a16e1b90abfdc43473e5cbdd58b5e420e3d1f243186a2f64764cb2bb00bbde1e9e66b0eaa3e75549377dffbba946fcea9d246b56e22541122a28447b998681a56861fb9cc476ec4979e1badf0cd8b9ddb5100a2188bd8dfea3f39d0a860190898239829220e4c75463b0c01ea68bfb8a12bae5d6ed31a0b37e00691cdd8449d9bee5e423affaecac278171ed83010393c3461813b22f9d3c95ec167d151d125a2ad43283fa0fb5147b79441b14c584ff98a4df80b8505ad1d12b85e0be3ce1a6aa39f48eee5a5c354c20e8652dc6194a8d174a1613ebc8b7be59cd717f4771a14afaf765b993e9b4de77232bc8c1bd78dbd9da098f35a53fc4bd478044fe031a49d3839785f60f2248f45d8e0254187f9187ab64424378eda7b5452e0f99a62bbd5fd46f4daeb5e6dcfd0779332a7078e8505ba9703ff26cfea8fd0434b7f6209ccb55575bdf478fc479157dc1fdb70e9e5179f5a8f7ef097ba5dce454f99b9a719bc7da0dedbc34ccc3d416d6e3a9fad052e634d1f36379a10df722ea1e28c86d5c2ad3561c97b87ea38ec1192c7a4f874f7750180fd70be422fc106609f3367157d23217281da42d73306288b0b32cbe20f622b60595c3e5ec8c138be364a43e7fb029f29e88cb7db21a36d33d9c4e47bfd6bbe9889228d970fbac58d41da2d716b75692aed2b588e6dc9694d3928995f97753bd7f3c3f5dc6265abccbdec3b396733720435c2ed385cd066eb2656ca3a7bc452af4a15df26bcf124e5caadfb486a472babfd942c192cf03e27cc59354f734b369a19236cf45c4716078978fbe7aca34496b25f3676bc8d1b17953efa7dc8edbdd40638575363f3cb8b8e6973da3eb4bda2ce27d3583e862523a3da029055286dfd624c23d99b0151744017862876f414b0ef71e2a47d7bf6e1477aa21383384f709f59e06d7207786dbc5e1dd7097d702ec732d1701438e9f92247bf30e2b380c3439e377327137427aac2751b2749f4e3047c192f1d1008f5bb979ff72f2a41ccf297ef377d069c780981cd4488fe6933e6b34a60f3d554d39d3a188f824633b00ffe97e7b20c81f03db5b25b400debfe342b3825eb74a099b0036061ce82b6b665cc221165e1f4783a88bbae2c7cbdf4d9b59c1ee5b5448e0bf4b98981fb5c5ad66192f4d87addba7d67ce8a82105a12cd34d7ad8160970e6a7fd9e655215d29a0e9728034fabeef696f65d14194bad2f1fd2f993173aa7161c24081c4d7b53f1d6969cff3cffbf33ae8f50998cd51baad7aa6db6851ca0222881992de1f538b493cedbd535f1e454139f627099d3469bac48bd2b5decb73b21e3a95c94078bf0238d476090ca769d8cda7ce3bf9c593e74664feb27bd7bcbc92e18df3d3fc708256a7333d8a3b12bba6adcb4025538c55081f4ad8842af9fd93aeecbf6b30fedd0d69c084592fb0496cd046c03a1aeb939f2b40b997df9758758b082891980c07ac205d80fa5c5958e6e9f478fe522554f9d05ed4e7945be5918e6426a392f89557d455087d0d36e02195f130a2a43b3de246130d07912cd5320b387492ce82c381b3d889667cb30e092bbaf750a9a84fe42e13a88cfb1c8df65bb461988fa4315d9363374f4410205c50cd8539f2f4efb299bd30184930a9a414249e2b189b27b696688036aceedc30f7432a2b8b48513d7a1e2d146733c16ee89e1fc099455df81bc038fd1959ce891ab7a5837d6f08e463a019d70971a5300fd37c5d9b727c9893c7ddd13dd772f996b20d4afe0d9bedfcb3396afb9aa134aa24b679fe485ed4b6efca92ddab5ef0a9143c44426c50c557a40c44ceeb309be1488745da88b33e45d70d9fdce26bb677c788d48d9f03bab7fc4fd12f2a24a4dc086fbca2ef5d2bd83a40333855010cd0b5b9124557ca0774f24146050cdbfd70988195e8d7c5f5e489494b31c1028746b8daf9666218faf168ef5abf6a067ed5e085ae659134666241ff2d5e8bc9cffc1017dc38fcec4c5cc96201fab55cfa43c65fd149308b7a23f30281cd3ffdd2e57331b1cf0436daccd7b19589242ebee67be7e55dffd3f2d93fcd4243791afd0266a7cffa88135d7ce7ffca155f9011a34a1c323263a1c440e18905ceae2600881cc973d95b341de2d3dd674f619d8bc8342073b218fc13745d990ab669142b538a43d9488b5ea2fcd9b05adac8b3c17a611e52011d293ea123bff1035dc343c7c321f17f568900b0f8a115b677e9b31a96ba1705cbe56e37fb0bca7c93ed5f46d9d8b77935ebb2a15881189482ef0740057720d03133acb3efc08251a71abef86bbf063de1605cb545294a8a4fa83408b52dcede1d5977c497d6f53dce839556c7aacbd52a87c7414985895afcf1fc11c9908ce8037d11ff53263ddf320a5fb5cf25cce27b3ef2f59eedaff24a3e815d17ba4c20597afb6039c09e0aabee9f7968a3c0516986ae9e26d5196246aa18b087ead99c7d26cb7398bf600aea5f10ec89093ad8bd166b04d7e32ce2b32ae80694cdd9bca24b108c3db52cbba19ac61ba54300729d523120d490086d22a7fff17b9f7bdd07ceb9d0d57d255cd5fee18d44a14561bafeba96030b460b0e45a7c62336b2e474f81cec5630dd80c2513285cf2519f92f3bef7126997d96c98f616dbbb2443c5754960d80538334b89756598f1cd471d5b673dc8e1b99e0cae6a9f5619f361515bd061ed12f9446f73253fbcc26c0f90fd3be515e714cb6e44b98ed2a6bf2bc67063ad1adca721ad81f9ff450121adf9f8079cbce187bc26070109504a9d81efa3526d24eef6bf4ba7fc6ac33c71f28d00a547ee755ece1e343047c5d824218761f8b1b82b4d62790d98b6c9f54b3ed3f31259f3d84f9b9c3435866426c3342da277e7b1935cb9d36a0b7649814cf4ea8cfe94bd4803b7897844680a6710297188ec2cafd4dbb95ee951aa34c4f83b6fceceea5c32f366fbafe9f81df55b4f9c2863e77b82f34f321c15f065d4619d8d73d22bec784a36a40ce94f3cf2defc14e3f5542ab15e5256faeb68c9545dd7a6c50d2b125c50bdb71243543a40dfdea1be5c1c33b2fd5aa7bf111f680c52e2ddabf8385922bb4d1e536e1e0605fbb7c4dd86d394df72d45837b849bc5cd32c03bc3c2987ddee270dba4f61c59ce84804f3e2058dcf3c550746eb6b28b563ef51f9e30b2b151f9fc44b8c4f2e0ca4876df80012fdec986898f954c7da499606a6934226b2591bb89c80f69e24f9ad2db0cc4f00b6039a30fb436a9c2ba3a29da6bf0313f7047f6d9ad555512da585f1c3730cc19749f21b2d64502e94a147e1e2f3b759fd735c9521ac246eb8c0a38a7b826d192cd2f4123a6c53df953047ee646b6ee10cc628dae01a717219b7d084f7e5edbd73043caf82cb37c95d17b7da51052d306961942675686c027dac1dda6c1a05887378c3d8cd5e595dde62906e186636ce7e33bc798b3111f555ea5a14221724182d4e1f8e6571e13663f7ca9b24b1a1656b588882f2e4c3ebe117e39086fa8a22f7d875bdf6ab903c34948a8170f2fcb896c74a6b4c45776dd9572e4241cb858b87e936c3a621e5b472714add138bb767370b72fc6d57f22c5f301d23ea35222e9d7c5c4c53d8f80d92c51c69bfcf35364c5305a9cedadd459b74005a17239301c2d15cc86d75c536577dbb39abc48a6eea9116ca8b197056159cb1dc0a1d7ed98fb22a2e837446364a9da36578b14c022b698dade3bed82efe6d8b00a8802186070b215678e7d0b1f42ef11b7c9a59256887363846aa96b822f33028bc3b0893941ce459a0d63706a1efe62ca76304afcca7dfa0af8109fa95d175422920ce8f9b0551202d9aac43ab63819dfc5c2ef14874cf156388e8ad2671ec2562c16c370143f967573dc7a62407d7d1c51da70977ce5249af9bff7eed3833501250c5fd0c01e41ed794921fd864d7daa3a3bfab197b6e813119036e5a18f11df42ecb4dd8739885617b66bfd0ac1965ee9344083a22f70957a14b25a84fe6480e465652223ee9d75616e8e17dba74ddf94a19d74125ab427afc6570570925fd3d63c07d8e6e7f5f945656d7c8d2f637a4f2f9cd3379978363553f4fb1c469abc9712dffd5b5bf3c093f6ef8af9b4c01ae86b3e229139ffb1ee5d1469fea336eb239f0780400acef8d1ef3f221550c5b55ec0fcc28bc535471695202206cdd789be5352ea6a3029bf9bebf7d294b5d9bd4d98079ef36f2c3f50cbfb65db0b0e5554954d5bf94f9d2ba8759d21376b9d59a68eaed6a74dd1f08c09c831adfd7a96adb2a133a6c1f346d905e1b4101fcf27a2086a5b262c8faf62dc967d2c100846703159586725a6c4201c8200228ff20c1f9cf7c9179bff03578f86d40f92e4aee97504db310adb1aba26b2b158195ed314ac72abe8e905bb82d50fe14045a6eb2b389a599143795fb98185257c5931d42dcc5638b96a41f96aaed0d6172cc1df3dafca66bc4294939a28b3b9cf213d0c4398d0b42c5b21bd57e21fdbac9d34fb842628bc9a785341473f50aaf7ab2f85e52186ed5ec1ab093fd2b3740b93696d96b8479d9b417b51cf33e3dbab8b1e70633ceed0c76cc9125bfcaa8a2b4c793e5355b45d41d709ed1747388afdc4837fe189e6e894c752d622404da279e2380fe9f05c006e900a7dc4d20ab0a52678d617b8659f9a96ed6e930520d97d8bcd7c1ee388f67495d5de0d7d5f904361674a71d4e66bad582488f44bd70326ce2fdac84349640b0159ef6ebf17c11c3e457f4caa8d4dc43ed91f6026a8f15dfdce6f8b6c27e1dd43d1de50215bbcd493ee2e3b4da7d0f753bc478571176f454d8a041cd6783082213f6387ea5dfb29bdb1fbfc0064d8f5521f3ea0c527982bc5126fb208fbdd58289f095922ea383d5bc225fecf9458f7c97e0ae893e0ae83db563af1215731262c1f71260b39e7c9ae2b2bf998cfebc08bf9c361b6890328a922d5ad56a82edb077b8d3a1f82febfaf90f92d9d77d46e8197a93717779b5b2f88d7ca47570d69cd191a99f9120c465e49a9d27ce01321534cc21943c416b3358ed790c72bd4c533ec585d89dd5b4cfafcf42a2e9eebfa0c47c7176ca10258de94878542afa99b3047a50b8c3eb2d74bc952095ffb4d716036d0b254974accb8657eac4d15d07f7c76ee004638eb3a15d7bdbac8b589a331ac84fdead46fbccb424440f131dc0d205986bd73e9af9f15eeddb3107e80f8351f1e8339485d7473a84937b0df7c12d5c8af67c7ef8f055f70bf2305e838fe13e429c0b9bf6a1b46e0155824d27fe03930c77adabc7dae4f40b586fc0092329c51c2d91021f3fc481c410e84960b5be5bd79f7c42247317a479bc0afbb4d5a0d547bb6256b9e6deb655a5dc10200f619921107720f4c1620b7c057ff69209e8b6e0b88634642965993935ec5d22080dbe4f6ac137bb0515b62853668a8107d92a0e568768551956cb84594896af08c2511a518f0f7a44a0e8027d32cc8e8fa7f001a4b2ea1abfe414a51c58ce8135d6ef8e4e68106adc473d2128fa68bb578c474229092748f473d249fa7f49eb74b1ccbad2b716afe47cb724cf3fd3822605dc5d734fccc2e6673eb751806976b0dc18c183cf187332fc6fb737ade887ed5f4d6d0204bc5a41fb829c49009dfa4f0b62afd07f9f58e4be89ff54fd2136129d9886af7b8d7b4ade2a4c64bf4c4291b8794f34176d4da84c518b2e1f90f05660618886dc5e491e8823202f0a764c43289535ba897b388b09af8ce6d3e5fd1a25849e9f6e9204eeda304841bbd44a44fde0d23d8464e1731d083e6575e1b8a7868799c6a5921c067c6d9747036b42929d74a091b843717152fd3d71526b63bd531748e07cf6ab3073e463649224945c113f47c1b2c83e1fd9c8a04e7389a9b8235769596036c921bb070b6589ef13403db55d320f14014fc7ccd52cf327fbfc1f3e6e09f3f43dadb5fca2142ee7b0eaa4ae4b2460a7b477e273830342772ec45dfefb2a5be7dddacba583897adbc128020a777d3a224953501ef2f44ef8e1328eddb6f016009840e23a968c16f9c724a8dd976c69eacea0dcd88fe8a84aa6d82790e8200c723cf0dbcae89cad095b906906f494a2737405865e18430f4d0a394763d5488dbcbc73456b01220c6df5ebc5bd6a73fbdf1969119c213df96e60bb2c40f796066efb45834a0b59cd0b3715e3c8521ef9d145269cb19a7ee4bbb577cc5707f59bd61da5642d218ab2df0dbca982ef70622199a3922251cdd8b92bbb85df7de53498c672282ffce9e62ea7080e11010185d31e31f00a4062404faa1b25dd8eb9fa560a73508ca81ecf23e97f8e487584fb9c14db89d5bbd2fd5278619ee0088f22046c6f72184c6fa5a2d1e6569476b77d83ebc566cd1dc8639ec590689ed67a3211b2e2b9f6b4fee73c0b65bf9bc60f92021f85efcd112d42130b91e88786d8d45bfecb32dbb3c738c038dd88fd701ad0b8bd2fee8345e9026ce677b36f2eca7fe1f12dd14078ab02d61d511ab620f0bda57d70979331bc840a957beebc17de7f4b41850fb4fef38b843f9c4e3f96c368eec7b55d02df32a0d96e9cfd8f7b38aaaa57254e466f070e38c198c1459e752157a51e5362a96a55b01b73da1d676edd40a374b07e00d85f045abc674d4be4209972871bb13a21e631b95498e7488939de5db817c8ee998bfba08549e4b7d2c9b484011b1e98f484f604ada55e57e66f0f4e93a5547e880542bae86912211a5a914e3e0a50716e7451b45ba3ca6125044ae6efa79eb6c65fb5f591089e539932d4f9055c55beb0e2e882a72944e98b2eb6540ffc748dd0c9c4d1f077552144c41f05822570fcc53dd2721595a29942a8b8e6d8831e373d02effa1c72363dff2db6003a39b96c3f9c3d62eb03f007365f1e75a3dc9dc974aef23e17a067fb488f4171e48d15be46db8c52d47b35916ce8cb0f1ec57823149e125806daae31d30e117a881fa8ef54e9f2ed3a5f47368d7cf94d5a772644d61a0f9860da53d1dbddcbfca8fc20a2ecb23c737402c55cbfa0aa1505640c47723a293dd16b591d5601df4e4af6a159d90fdeed00c05b6873dcc664e1c9c315de9d147099ed7c2da1df87f19154a1085b7f89b6c6cb01e99a261085b110a3450fe632e884615d205746e28ddad0362cce54be127cfac3978b72f41e1e2dcefda8b7f330590060fe59109460f73eb37136f9434dcb6c73a15736ecf083d2a59781df8710caa296d9afaea6ca7aab95e749248aa53957514712345ee911798ef406f23d3693136442ee780984c7d754951f202276f03ef74ed867b4e8f19fb0b53c2ea6bc4788a3120509cd235063ecfb557a2911a5cf96588ce926d32b5e3b3c4f6fa3bcf99c978e7578045616afab591f975a18ac97c273c1c2916fab14d761324d25c5cbc5e52baea28147453ceee5d999a07a0633a6b829376fca227e80abb9a436fbe6fe4375229b9e712c6258571447d48f0f67612f3647a48cdde3c8dbb8eaa2d1ac0898bb37bdbafe5c2f78a2033fce192bc8bbc1c940568e978789205b2f21bb7215c54bdb884b9862fc0818c418d91d842a035310f0f222da81e29c8efa996cbb2b0c0cd46f4fac09c1ebf6dc95ecc27fe8e4eaa7f1ea42c4080db2cc68b4616b16a3c3d9ee32b601868b8afa882ed774529d88d9618e7542374c68f253757f8e85bc2517a47b23ec262c56370d9b62b66d7debcb96c6f80c2ca1aa22fbb1a597cfbad495cf90981ca3739dae629174b91ac7a382c9241dd08196ec3dc65e61d24303e9680c8e4b5761e51000f52a0c8b21ba8e9a51394eae594c343aafa244a7db537f9534bc4d93e1c7dcf0ae63454b5ee8f5b5798515452fe8e336af15b716e38733020c8cdcddeca9df2597b3ec8eaf6e53a931a6081c0928385dd90a11f3c92f9453845b1a31c195a1043fa4fa736f60fb1fad34fbf03af0e040c6a29ffef9cb4938acbb1eb72cfe521ed2154e7f992a4649afd882a79a9f4860442e8d37975bba6680cc084b97805cbf2ad0e6edab0c85775b7e79d61152991c37ca219b931ea16442edb1791b4165ad2535d0d8f8f103a9705626c794acde29ca9c71ee23d3bb3b2bd528aa8cab24a05536d8c7f10a4ead52a8ad6522622a7e13a0c154ff2dccf7948c16b45efdc24c6250a5402a50118fc25efc1a315c920e3fd56b36b5cdb88d8e3664686a5114626f08aa7af8086b4eda6d6ffb22ea92ccdc9dd272568868530e8b5a5b5d7aa2c8d04dd80fd697403ed267e5fc32e6fdba53c5703ebbcdcf7d13b8d55aa8c17d7b99fb42368d400b59d55931c98323262d92753d8c9cc812157b8394d4f6a1478cc961b9863053a23fb8fdafeb05227abfaeec891c4e1a5eac47db592692f2f384294a098bc03152856644fac75dcc56b91382ebd5438564c019f6800c097dc19974089c5f7e2bf8e6ffe7f41ad8ab2a8270c56145617f7bcbdc9599eb8e891f155776fba4042fb80feb3458420c7d57615849d29500f008513a33a7a639f749c47aa8cef14a24b5bcea4ff96ccb44b4897ec29ca67645c732732f02bdde1181d8a0e7b729800df89db9731bc5c584053ccd4577b6512d4a96171021797600cb768287867fd80bebfafe93eb064fd62f678726d97aad753734dac2710570fee37224063e591e89daf68906c1f765cf2e1b68eea5f095f943558454d707d4e1ed0d8a7b3b117e2ffe32d724b42002cf5d3d7682963ee6eccbfc379045737060a0d97bd6196ce3c8c1aae82a15689c3d3e730e1a74ad0d62fb8507f9b5ad456bafebfdc320fb0923542602056f5acf3cc7b72bd39c56b312614145da7cd544624636e1e705cafc256c2426049983fccfad93f95ff8e34baeb4e970b9f99c9516b5a425f0d490dd80dd5cf037fe630b97471ee6e5fb97fef86e058c29a85e1c24e5c2a45536313d6498a26c1f67429cee6ec055f5335b7d115795b4e0adeca2880deef9181b10ed342d15f84b1d542c80799730062a128d698e469d7aebcf996b116a4b5a80ce672c4780d30b930c2d5b1d1c0a752841fceb814012ac5e9fbd0a05bafe250301f4f4b84b24f6649a7669a4e5fbd23a23ebc4a09837b7d0a7fd1f9bea13ee69e666accd51b60d57d86b130075b3345361e30a29679f3e4b369cfff248d654a79b467e2e132e53f577d12e8452f6b699b1c0a17ca19d06d22da225b0fa95f9765fce04f5187223cfacd4a515a2d50044c758ee4abae85666cdf6badc05b7ad2512f3cec662b7e159069c2f304aeffa699a913b53627734789741600211e8354d3812fb1e21f99d3f2ef5da2c3436b13b2da01b5aa8a45b3774584d8343d621d8d8515ce07adbe27de1d2f87d504c9a2f6e52fd774d464eb46118bba6b71fac461d114efa9978b0833a94e32991da38c15df5b4a8eca2c38b5648e2eb76b1770826c86df18500077a45d6fb9fe7937f362c4107f816d1facdb03e786f60c1fc97b5cd953a726152a69b73aaa91b32f8c238e98130d083abd1b5d0cbf468c478ab3da42ac8927e26c5c87fa1c676bfd7f0b543d670a8fccc53116785c5c3a9124c3eb0ec02922c10c0be2ee930fc73b9d47a520ea60a12da6260ee55e581d6982debd1ac1fbb17dc3dcc6a58d3d09ed3554733cb0dbdc4e1db583e09367be9bb23b9dda026bd1d585e8f00c4314a0971b8970488423fd2968edf1e404024c37219f65e266657a9e816aa96806fb3f0ac4e510e3a98db9281e67de72280115abd6e89efecf71e321cce1d2fc8919ff36c96b24c0a5124d4d9f36e11a8dfb6db8f56ad3118dbe2bb3ea20e9575be3c9c46a68dcdbbf644aea15f88b4a497596c813060deef1f16caaca8c48a17c466dc0f044ac08129ce0a36f38d8b32845c0a3573ce465ed05dbab14bbbf6be2516631740197fd579d4f3d89b0340d004be81de23d14f016c72973424b1603fa9be1a42ae7a2437cbeaf1fb24a936ea2e99c7e87cf3ece50177c866d71a2acce09d60200b4bdb4e8851f977cf1525f7b6aa102d931210960df8908819213569a2f21761b8d163b49faddcd51160b2d03f6615d396574250b03b5354be1d263c5bec922eed2037e9bda6e4c9dc6ad4fb948dfae2cb3d946dc47e834738c1cbc845b498ccfad8401dd8f4eaa62a3c57ac0766dab8f9bbb7af2d8d56ab653423ffefd90fe5f800e0a1a00cdd35a5c6e654cf071442ddcd3c27a6b4bee0686dc7bc20f96ce8290ce2da2bff44d6a1cde60f532bcd96c8a27bf29067610ec28e4a2559d2c71d98a0f88cac50b6169bb124ed179a6825170b375ba8b0351d6c161c2d084ad9543773ebddbb2daa7fd50ab7219e55632deb77151fe5537267f38122f3dd26c30af7ed5fa70440be2c250dde13920f980c926f1fe4e26ee6c19064268c71a19be56f47ae8791699b75d3e51cacc82d1664085c381e7b7f8f440ba3a3c7d7accaaebbc62d2d05b4b698ebf4f019929fe64d6dcaa5484f9e4571698e4bacccfa13b08d06e9066bf66574cd6664b5228a83fbbf5fbdfee3e9bf7a76ff72cbd0a80b861e015cd0b3c22291631ee7683f972e2d6b987adc90cac371c8e2477f57beedfc0d0c368a8b4b202a5856dfbd472dd8f9cfdbb4aab0f8251f070d86cebf6485b33ff3c3d11c09c2530f0c74b467403174dbf193e31e894b281bae977ca8bc03009e2c34ddb5e8563c86e275d80dc9a77d5c80b39cc999ae8034f6065528c252e1db080047881710a874b8e5c2cfa2b1cba46c5bb1627b77cf71cce9406cb499f66c80efc26c9fb38d63a3eede520a9d9c91ca47f405bacc3bc7cbce7444915507630da23f66635621ccc9e926c9913bec207260dc0b4c2bea9fc2fa9d535623431df031c4db6bfcbac4699c62bd2684e39e2956b18e4d02f5d665878722f31b9b607b5c3cd0de7f2707512bc4f7bfb22e96bba016ba5954a9fe9706fcaec0fdc68750c0d2394a9d4d4680ed4dca8db6c3477ce6724fa14fee11aade716c5a10dbde0e6cd5a0cdcc32dcd3c4d352a365819ea0ec3b36273c84e2d0f68dd0296c38bc5eb4538bbe35e1597832b1a4cd5d70cb9338c055ccb7e9a181d6aa47fa2b0c042355bca96c72dac3d549623082bb3a08e7a7bb1c6b4703a6c6409b96f1ec7b6a62d8ab58ee28a8cb8b6b70ca2b8a9ea0077d8c2dd7223f8185cbdb30a51b03f3f541d9f6dcbee95810e4c6df5945a9773e5dfc1e0b792cd83f87ee7f3db725aaab3026d5388f1872da93d87b9a76265be2bde2014947b0c662f84fb6ec6b6bf6112202e6d6d525c886825bf4b0a6e80e81e0de3e04183ecfa76d067615bf48ef73c533838e1ae665049142b5d6d780e08d3bd5843c6c5d3dc7f688c25ce8f93bcaf02082db38d8708516c8151ec9641c3e3422eb7ec2b416d360399d008a3e871e632f5a8a81459b2f0ecaabca345e36d5521624db64b6fb6e0caee2c3ec82c1e5576a79de8e0f6d431212f5f89c5f19abddcd831c4da345679339b1700271e33ee50845d7184ee82f1adca2d081079bb0c662276f7c07324c63a252f58a9ee98ca4b878017646d01659c25a76d4a3275d67b7d3eb256630f15d6a8db5f177e6bf3fb0dc60880a4ed371c2f19cc49d4c1d3732ea967fae6a00eb75014d2d8dc2beab01e90f7cbed2b0188f588e09e61a61c137b5074f64f871a8b9a9aaeb9ec525ddbab7bbdce7b507f3d27ed510d5f5eddb7cc961780db168eb3da21951cd8ba73fd62bcd94f5f87981f765999c02bb38bfb1024c2030d3167cd932ea02c0b116cad8030c4a5dfe1b190bb4a1951f9246f92ff6b653ea3fde4ef25543cfeabd9e71c2c71496ac90b6896d29023ba78a7f708a53bbc0070f4b8abe99fbbc41920b8522129fb4e4cf117fa792fb78338cc8434201bc7706a6f8253fc1cef39e360f04be661f7e6b3a2550e15c879445856917b48f502faff8dc40914aea7d29a0fc817b7996fa97689e45baf5e86b3551dd4e005de5f16fc4006143a50cd7ecb25bb31c52f2376d1cda540eda157a80f815a477524127c0a38bb448cebc4ffda9c176f4187cec428079d57094b594168264865fca568714be6b8719cb352be7549bfd59b16305c55d5fa91214da6ce81902aa38125ac6aec8f3666ca9a7b66b8f4276626bb14091526770821f2a97ee993e1f71f9bb71015e853ad5b57e9832205b75a9389fb88f9254aae0c90fd2805ac92ffeb07226e7ec8279879b78b468db70a4cfb7abe4ddfaf9d97605bd302061801363ba91fa7553a0fe811bee521bd9349c939f85c00ec1f8da0e6f3b77a7bf498475be272060701cbd76b495957eef660db316f2b2637f8e95f55a2e4fde32252c719fdf16b2803db7ae1908a03b6d8b68b1508037398b1b4cc589b83cb48c1197e4ba094dcbb5a167e5dc911194766c268457047a34d9bc29ce8f9f8dde8549a71bec3dbc8919479ca198e35ca8ae87074ab1e4548a53a036d14f8ca0d11ea26bc898c732e128421c03e82a1dccc2e6ac2d0cfb5d3abe9f29b3d326105407a2062ef792d59f57352eb77b641f2845c75053e0a9fb97b2e4dc359bf169f3cc8194a9654bbc5c6496571d58683245b6d29515c20f52f04a7d97b5bfca7ba5f5f5394a354bc6d0fa0461f67377bd32d64431db4c1eefb73f337f80a2d91af2814a7bde37c22afb804e19a241191a9a689d19c0a98c461116dfecba49b1cab69ea105fd781c5092275d713137622f43b52fd3e8a865b1b4151afb82a8bb9bce6f0fada348c961c68c9518a95028bfbef868eaae276989505eb6af4e7cc85b98301b9843d79a71103ca9f3ff205f95116c7b87635fe571cb1e71a3ff6d76456e6a5dfb1b602d79263487b7e16949b16a989416ee828694ed829911bb0631c8b163bb8500bb745109aa3f085e913deff7624117171bd51156ee59f0334bef7f6c4b468b5d72096aa8ec36607e777b38a4bf716711cd346c7f220c7f20a9298b75eae6979d2f1dd8c394679fd442ba84b10e2ea9b27f87a1897659bbe924c97e8d89089890287de60b99bf4b9de76ff0686abf466e5497d22f11455655f35bbd5d691972a408c19bdb948e48ab99ffb21e0c938f580ba8bc8d4af484817ac5baa6c574dd645faf8520b305b58c9cd2c781c2f655621cf92c949c092d596c50995ef08d540ae700a3f2b43807c1ffd8d0a08a2e6de4f25d9b30fdb29c4243a9671071ebdbc5fb494ebb393a0de93362942220840bb5a24c9f71bd96abd97960c95eed349d5cf0bfcc53bb410d78db4bf6847ed5dc440e5fa342613167ddca0a8fe312021ca0b90c4f0724807d63486c5bb43d1913615f1f6f66eb65e2fd5daa09e722c9a40f52cf5b833fc1d16646856f4d3516d705e5dd1c7ed9d30103cb15e16a57207426b080f2eae6edfdda41f3f76acc855225cfd50929cbeae62283616ef8d6592d266ea095d1b0b02de103450fa11a4a46a87f08830a07712d3559fc8bb5ec829e8cecd4aceb261096370894c5a1eecc8757d9f5d0bd8f4d22c328904bfcccf717aff0b13578731a78f650c3ebd97d7f1636e3fa58cdfaccd2f07ba86a153ee9c8cb0f2a8df0d5424c0fbcfe5d36bcec53fa748d606bf5d52b825dd9287f35e8f8afd8abec31c3f9134d22b912ea1e400c626a13ed64a4f508257b40c8e91fc0a7b96393ea65980d7b551b7384913303be39ab226dc21cb4e8633a83e1435f82ae63ec62d0252f36ad514ed082a0891304ee04ff2047b163bccb7f230d4bcbe5032088133f3b0e8e5185cc5086dcd2534454fc2b04583b72400683a7f42faf0a47cc9626224fc0920246692fd5f718cd52a74aacfd75dae5a89f0931cf99715389a92b9d60efa9e9e62d38dd242c2bf48f6e437a609b506c03bfb9112af6e90217896b2e3ddeae1ecf265e093767e8fd4a94349530a5eaeda74811265f73405b869f80a7f0fc7c9c8c60562293b38827cb4b113b9c893c41c9de50df650a64f1cd30973e782fca56ca149cbf49eba8765a8ccd3649027b0d748c945a5ca145872cfcc0fdb0948619127b0909280ae433e6e36a8d89eeaf4358da6526847be43796864f91dadc747fbfe2c7ea6ac03a4c4a8fcb0af5ce2f640cbea2be1397f496e732221753f88b51710416dd275328442384c90d63f98d084ddd4edb089b18903acc3433c4d395a660f1315d9429bfb7aef80bbd4ec3c62907e38af6f610db5f084f4738b6a4dbde5835c3647622c6853f32d93fdde8865252e4c790aed20735536963737c9d803221a67e1b8075f8dba1d72e85c2a601cbb5020173e0e7ffd4f6fdf176e9495dd32990b78e729d1b74198d8b698d42f12b05dacff51ccf09a92ab2bd7743c7bace71cbfd45cd16ab0065f0d8a502e7074096b6e6e60f0a11fa60aa764751291ad801da51d65636877df7f969784664f34b8e6e9c78aa57364423cf586d49a752d7ce20300f7ca3f2c2a9dad8e6cf5624ec5614f8f9b59fe6c6e2069841e438ec8aea591089d4621d35eb1c3812ac62588d4874175b08020c740421573c87dcff92c0f971479de30ff45c7b015accf2ed6703e1ea9b57688f5df53b0311724df51229e576f26814499b063cff8a80293c92aad61dccdeb0855054f19d1d58c0d2b5b44d09f654ac7076645c296b11a1e8f7df32031ee5d13a8e311be3403ec948e333ce84e0bd55661a7cf763b7702298e223fa8cca81450c92d2e7bc749065f3cc6f13a0bf43f60d192fa6ac3e8d2a85d8876d8aa4d5d7cf3aa27d4fb5cc11b8cc5748fef029b39461761476caced8d7a912e077c64672000afe3f0992b51fd830a34707f43511564ba83bc76b27a5b1fddfeebfd93336fc8d14e8955d217e6c85619887fa909c7686f48682f8df5bbd6d26d767a3c2c57296301b0ad9bd4e7e88b9f4d701d8bc13607dee977b83feef8c24a17f385a77bbf14c6668cd41236cf276e645502bef83b411e0d062d0314689edd498283de69b90cb5bd7f6db3971741368e3c9e68ceb2fa641fcafb3a659a5f1ef2d8840661bb8838b36a0e31c5e980640ff34a6e28688d7671e1cd7d9adb113e2564d6eb3af8b70af7ce1485cf27adc0c4a4e7c08e45ba6e3e20fb1325095e86dcdbac27e181af56c0a788eb43137721aec43ab3818b9d8163bee41364b72ee57f3d1a10b28eb73740a61fa5f6e2844af8368e06c6fa6421b0dbd8d26d435cfbdfd0aa86f6f17853403a138ed6837a1f7a239abb73c00e85cb2043dd51531e9326c447e0df8d3bf1f185e4ae58c859a1f1b23beffca8d354e021281ce8814b0912a2d43b93b3b6b8f9e913646337b3acf2e214f2e1bc4304e364e2e4cd920dc21275e1ce70c0021b215b773635f216fcfdcbb892859fc09a5b83632023092e16f16276b62a28a17962353e384ce5d5eb6e073e3d79a88e675553c5098f1938dd9cfb9e41310482757f34f9e011ecdf1fd0f8b1b7d4cab67bb14cde1e5fbcaf7dd82f462d0cf1ad0cdd23b864600824c91ad118fbb10d6a56266512a663287f683b42606580f5979602dbe87ea3c67f8ff3f5f635dee7f2c793501d8fa3883ecc20335edd54cc342fa2c114a654457d78da36805a6c75a183514262853b24c858106b783967ddde8aca08bc8eef9c92979f57dbdfefd80e81adbff2948b236638946221595634be90a4342092317cf8f18c53022a371a302bc77b34d233b06cc84cafb9211c9bff21f54e6ead485daa7eacf7663943c9dff52dc7d176721c3290c7bbbfcf91386bc27085c07e10e19ca3322006ffb3cea1c4d80b423dd10e2efafb13dcfc0e647e66d13cee8fa78e9ba0aecff9c12904fdac1ac3cba9ac675d47abf09f4197ea649eb14acb6069477101e96848d0ad5f7e0505e4b877bd63a4cd80b6d0997a610f1c8e01bc9994b11bf0a975169a330c056dd9e29ab667200f5b344596bf1632fe273c3c0efd6b9200bac7789dd9b906328e171b9a29f765ad059693404fb2516cb972ff3c96d5087d9202db2c220b0b90bbb08056fe97f83e04651a23fd57cba231b0d2c2cf352e0dcf6614634ce58caec599dd797b1d203e450cad5ec46f3593f9f83d5fd16db8cb1e0f7e91395c328eeab150be85adbfb4971e6e61cf2e73395de7673e606539bfb155f559763fc16e87b3c74d4a3f0272ee5a9748a84b2817df35360d890e5a67a28a4807460411523f5b869598740392fc41a0976b4dca50b0ac2aa0c13fea4dff89564b490b4b839aaa71376cb16a7da9297554da5b92669ab94fdbe4744fd94aef13dfda243d25050f6d2ec12a5a17d3a45db9e81d66ebb5756f2a44cf24a757aa97d0419d4fe5d94860188e916aec37b6847980f3cacc3f6d00400e6c3ac9051f0f97b7e6e6a2e6791f639d200d2e18890d5cd43555248c3efe87041966d2aa9dcb3b29464860c3861aed4406335d30e1b294a6071701d5f53fea2c5fe07b6313044198a6373af79ea97b9cad34e4e35dddbf6c830d59a67291dc17baa5275cb86178f0bf097f1502b6f522e706185245eba0b16f98fd9adea796d1b2bbc75e550456118c3484c5c8577c606d056f392cef52e0c59eeb72a1904d4e6bf424dadcde382438a40a53e33329ec5934e6e10d8ca94c281277baf6a2213d91520cb50a75ad4efe9f6470a6c231dd9b0a46d341be346395bb8dc13a1a5ad552ec39807a1d25f56e8417b299612c3d909097b59e07ba01853002a57619a88d6c5c78d046bc519d40c36dfd9892693a95191d13b51f5a9261fcc8f75df297200e2c3b53dd442a56dff6ae0a49ac5948ad195382e7663318909f8dd4ce85f135fa37505d3922256d475cb7e666b7027a139bd6f77315a205b1bfe1e0c7cf54b70f5f57d2c5ebf12afbf423bf631e26f172707448d0464e008d713b02ced4212d3b2c00b837b661845843710f713d5fe82b7cd48e4ee332a9611bcb57dc1fc753b29cb85bf8ddda8fd7502ab2de26edef1de23241c5284eebfc09d3880b4a5528019c4bb3a3c6951001d16f92fc3e20e1ca304008c4808e32ea7c0a8335a88323332e3739e4b42e511171018af22b548e0547810ea3ada5f467032e32852ee32488c940056d699e06038ec386198d44ebf3270a98f0db74932dc6d6f7b0fffa402630f945ede392fb739da30669ff3bd432f15f22d26f35754343ee9f4850610c9f0b27ec9722b5d25c6081577916735dafed0e32d54f66b8778fc4d66287ab0f88ad3add1c0bce89cae4b55923ff81d7d8345f1c6441804f6823fb66c4a4ff88ee4ffe9dbeb3c09f38065e09386d11531f3732085870272ca41300b49a9888699c6d49b3690498288cf33cd9717efe6edb9efa562017a93f4a6b38d7cabf7cf949bc660b52c1a715c3f4c3707738871d6b83ce2ef6e636a4dfea6055083c425074342af380ef9e49eaef7634526d2a6e0b103d2ec9832893f0d647ffccd791a12e8992ef07dfc07cd31dd641947c165d97b31960d5b38c52884d116ca669910f32abf16fcd259b1fab039d6fee6b165dd93fae140ae109b9d35703b5838c68cac2e9c38364034c1ed8385086a50e668ff1fc23fa4078546c610a9e5e97e6ce80b62c2fb52a9e73fd7693f6c72753cf48d12a1d13f6f7c1166b9ed817ffab4abdb13a081e78bbce92fe69a70517f50d0d8639f782648241af5cdf6b2bf0e8bfca1de1ec3967985c3520d1f90949f865d0668afd70a73fa19313741f088d105fef0c01ebb2b599eb76496b0d12c9bd796e253d93a1c6168e3739da43555065b2bd50ef205de087bd099b0b530401734927c7fee07cce01ff8f7506f2d39c0aee4072327b7921b3c0b9a020862917fb7549049065ddc68fbf81361d880403c8ec0a6308c1d07e6dadcbcfc7cbc43b903679a1492c3867c39fa93fff8e9fbba28361d8436ddd55e3d8108e91ac8bfc341d5fb8d4601a426c7327dbd195a420da1b62617982e55e0b3149a040391a72c5debf1550f2ec5f22bbe6185609fe3cc4bbe4ad79fbcf528eda8eda2aad6347fa86938ca289834c8f57c45aa02c2e384b141da60eaea65fd4e0dca62102adecfff31a1dbe8802b515f334a757576662ddf160f986394d87e768ff48e225454ffb49d57830a91075913d982a2a92a7bbe12f7ba926b9478837f4c08150910aa321f82021311591933bdc4bccb15499d4895af796b522a777e7ba5142726350970e88af7af0f401e6030e71a6b1e141b06f689fef3f7b8017fb32c2d315f80234e1d0751576d8d94cd5ecfe24f2650e4e5df07b88bd3ad984930d636559062eaeff1e118b8a53e3cb23bb83bbb9e9fcc4729416da36bb5c82381f97392f71327b7e7da2abfcf962a75d7799791cf3b654223d997ac4dcec0d0b617c3d43e09fd023da11bcbc3adbc97e0e2ace1e9b5f490f6694ff76faa8ad89a7c6da50585c13385f698a89251df21a1039173d32910ca772e8d2930e4ea6440ba82c49db732663130fb62a00e19798e6b4a137e020d29a24daebf8d56bbcd78b50fd99d267c53540b96a128645e4a027f1c54717cde256ea78f69ca23513b644e3d12868846c4d07c5937f68b705e631fa448b572a580228cab7198106eefd816938557949ee3fd9692c06a5bd9836f38c1a10a0ccfb0ae04649916b1ad51595fe7568c1bd7c120f238fd3654f54f7802662f0913cb75aa1944b1dda3d067926a54625d85b12c90a68f0fc4f0e38860ec306067817c6811a570fec2eab101f9e4cdd9215bbab141a059d9b65060c6034b7d01d57787490e81aa7230af124b528bd3991a5f8d87cfa6f8af89ce94dd21dc2fafc47db8e0aaad2f32e4c4b0233be484b64b1a660793d1a86cf782a91f49b0f67f93999e29acdeb1a8dd37b6126752cf265d0fd29539c4c6dcf77748f2997495706da24bbb75203372ff4b7b9b71a3cdae2ec774337caebabc135e97d521339727871150bdb332992402a891133577b122f22d5d3e444a7f3640f02d5fc9322db0fafd1af67df3f0b98f4a40e431bba810018db12e6751a78b52d8c12d8d904d94e4bf1e92623281595127ba88191b0c12c802666078d8830846c35d76ebb8544a5909a23b50c98cdc6567f992c6cee2eb4c215a62a51d91dd613d9c079d7538b700eb593f0cd9b8d5eae50cc79bb2fdf00fd86766d500fb1234273218b0a254f29d9743f55b89c080a9aae20d2a61089ef2a8cafe7e9b2178c0c5a62f083f1ab8af92d21005fad69c2cd8e1481a1e49f2199e2ea079dcd1b32537153cfe206764af37354497dcd2a09824fa722bfdb8942b24ce16a02810162062b0cb6c58686990565eb1d7ae36a5ce45229c03744c883db412b2b3ce33d40ac23e56920a922094be35cc52b5b3ce3aa4c775aa9172965aca7e2c44628da1f9211c8c828c401762f555d7a7ea6bb65fc205fd5a0fb768bb3a9dd26c7318db4b9390876c1252f94d6c0ca4fdd112f00c03399f7a7e2f34b4e659a0ac2f130281197e7dbf58cd98f3b932728ad56882c0c00a9912c566e730b77c5eaa4e9b19fd95b3b3953dcdfc7200409b71e16701bd49ae1a4e978d6f28b58ab111efd87957c3fa47444a157e9593b90af258c58f69ee3e2234566e4e8f815074af7a74f2a1882c8e2e5d818db0dc4595c3d941fd86f56cb77b84923119c18bcd2b80a7d8a7d7e907597c6c5879074c63e6a7777c351fcead7bfd32eafc69f0949697ff3ab09b3ad19c4afc2c240d2443db97860a1e3d9ea70ea8a331dbf451db9f603d79fbda704b63179f08806ee986fc35ad4ce555d27264463ffd36e703737e2faccaad1e53b718ed29a9cf638fb6dc173358483ee9d8a39a2574772c2c584f4ddee507a52ea4c560f6e1e48c0391c2d6dee234b82691501ea31c579dec2173e972c6cdb78d860ae1c38433da885d910f81b8ec3343376c8a217c16f1e7bc787f0104cd2a8241a7308ff64c40f7a0449a4116a0d9788f333c847b981869831f163507726f132c60916067f692bc9b69d99efc14156aa8ee756a991e8858df16f2ecf5ca5def854e260584414374d89c2f165dfa2d8cab1919a452260879f5a7d106a4bcc5408f80143677b7ec32d2a99cde11ce8323c6ad50ccb5212b7848862373bbc15c434a6e20ff65a2c851309c6d4171147e3ec644b62ac19fe91c883b591e5f43aa93131b3eb4902353c01b50e0a78e62a27561413f15f47beba49649fd5358de7c7d95ebb6dad9a43a7c877ba9acfafa0ff138f68bcb654c09f3803cfe872b0ae8bc85929108b6403fcaf6b5e68e6070b1498e3abb40509815f59ced6a24bbc796096c0d3e6b4f584f9614ba2c33adee8bec90e8c5a3fce31e5275f54b2dcc8c6e692ab65a01e08bf1c270c5ef042295f4e8d953e47f9260264d4b515cba42b38ca72ccc726372c94eb626e6e734bc7ec20ba215bcfc470dcaec5f210df380f1a13838621f9251c35af9046e1500f7226ba4e173c62a8036e9ef9e6b5f391801e3304148058ad77677e9f0abed5eddb373e211385ad6e6118e36278d8affe2bdc4cfd75d6d1ae55e248b4fbbb27a585a12ada2648f9ba93af96261f3a6fe8b5b67cb95813415d43c544ed03db0c32d7fefb8be1a41afed3cd35e0c3356eefe3c42cb58009db7127e3cadfd21f39328b38da2a0fb6c33f6c0c6c04a625145929286c67271492343d01d38319a36122b18de961a500e0fc2b68ee5b56146235cc7e02e331b63d46dd6745c38118b0b8218a58992e8f9a5575079efb4aad0f00a82fff0edd06cd16277c5619b8aa7b2ec02839377e696d8088379100e560a68a1ea24c1dfa84488fd1bec6a039b60072a35b30a12ae5b0e5c8d6fffb7714c86140c00ed1d88e505fc5545a052a1f58e76209c61e85687bd4fe80dddc18db4e5d8a0c6fb8242f34b9d63e062c537792704ec01771ac6599637d9184e8f49886baad394dd30e712b705e1ae2793e46017eadd7040642da78c40bdde565fbdff5368f4df849b8776224b1d4d3f2a8ab64cd1ce7429ecd33ca534e261a9c9f7f4aa8f9af63511c08a1873e5c52edbb119e9faa86a53a780dd18fcf2f5dcf2df0481e079a11ef75ada995ecd246b3d573e915de59c4fd182e89c1212af1f6efc1315cb072866e70309fd1f1134ae16e797726efa698c91e09b10701edbe4de8bd0f68dcb109e5bcae05e452461c0d36f22fc6366f71729b8e2ac90a7e59dd3140f258e584cda243f48fd8634b498c5967f28174f1a7716bf2624dabb26c81c1b195484eab8e92725f2a9062455f9f73e1cf1a22880ab8fa4a216dcf0305a7ff9f7b828f8232975962b86b846a600943eee669bb898f56587069008916126762d8e42bf215a90cd7787c89aef6342bc6bf68488c154b076b32f1facad9e4a595828553cb6282b2f9298dc72ca0404ba4f2c10f93af7f3880e9a14465c6762f0e56fa092f0cdfc579cd7762394e17ed6be06956ecb5da738d8e244051a72e8e6f6dc275eba30807e229baa00dd085587a67ca5b4f30a4901f6b09e037e490aed420e4e319b0de2b94dd3084715c31516410d0add41298e479b9fa27af99c48d8196e6c50ceba376b8ef76c87061bd7b4164d3987e797d65184694e82ccba7c383086a9f83822d45999856bd7e171bd3a461884a44104d8bb7305a097296111e469151d2debb33a46cab2e6f4b38b6932abee7ca3a5316a5cc3574f421f4248ab3c51f39c8d58bb381cbf0f32f112fd52f5d2f6528d1461823236bab9467c8ae4e0707a69b624133fc17361c0f1738d1f953653e95a83683366a6f2a2cee8c202e6481d786e72a80d2f6454b0dad675fcbc5775325875993695c1332e08bde706cb6ecbf2978a311e83b28517e05eedc12f023047546f5f1e35657351ee0267f9315126e2ba1a2b9213f8b80d89d9f28bde991c55f02f706f1d5baa1a9fb3225b229bdbd750332847d918f827139d8fd476a0a1d891cdd8b8f5068829f6a00db045db8a9ba1f625668569338f6946e53baf816f8fe5184fe3ff47ea986a7bfd2544e76b7df0452b530eee56673552c9835e98a04b942e72eb48a4ce59588c6b3fc38d7571aff71f84d04e858753332672459da69fe5855328823ae65585624e1a72126c4205b5f31b9c73f474b4aceadc54d6cd63e04c64c93c7f416507afdeecec646c4e58c39af1a6aa3ba87147d4ef3e6d1cf45dd2fabcd170085612df3506516ba5a6178da753af012dd3da7d1b7adfd1815b5fd9d624af2dc19ae30337537336e064014341fc4a95c0f4d72d29ed3256f12b9a25f6b7835c26fff822a190fb42a863ea11545b50cad273e2022933b4472b26623e3614d1848d94b1354ed3cd2efe86e252e434acb8632287e066bbc551ac40c92d7f9439d7c5ee2b5504f2934870e53278c2bb860b03e96cdeffde0a0692d82cd4904acc98d86c393f7fe2986002e7af6564349f13bb4055697bd06d3e8a43fb74230d7eb82718502eab96579992c3b55cea3ed5810bd3d51a063cc1f181ed7c50a2fd88a4e60125de8a629c3d1996a34c085f3ea77273bc487830b9dc2f484f31db38642446fe5f4408230563bfc8e0667af09ec1a7dcb7751bb6f081f62c290bdd8badf57df611bb82c9e81aa098a2f1813295268003c34a7224756d8de67b067c6d79c2ad9ad16012434f7d9164504fd7da9c3e34f06b49812f345c213b5ebf7daaf6dbf98c98d659a445f1b79f6f61eaf0587a9591b037712839f4b815bfe981e0fc4e6af195eb79509d693560c65838773df96e3a67a01702a11e08c1ecb5f5cbeb750dd91ee2991a1fd94a6593d1ab4f312f2ff81e40c5a96dd873a6424a6bc4fe3c66427db2b697d831954de5f5eb003d8d8a63a8d0624089f00c8176716c7c0bacc8a7ace924fef92fe275b567ab61a80c6deb54eef437ccfaed803dfe7fca65cc83f77e7ce02dc882bb1f50993e01267599517eed495372c6179acd5a8e1091eb1eadda4b374fd021e250f3fa6ebd38146c5fb6b035ef5eac031f722ec7515e95542ddf3a022c2f1cb157aa400276167c4cd60698ba3206cf12279308a2c14423f08c57b158352b46d2835db113008b3b20f2e56b794ee69e3b7d98bb081cb882479bff463bc5957cbac9562c291a8abdd7a152f2e5d89bc723693071923dae7b4f7769f637fb2c5df2e41243ccacec2a0beaf7501bee11d50f62ae3fd41622de8fb01d4284a0009a31d56847703831e1990b9fa8af958f13863daca9e9bb8f8319a0a394c5c7d6b0fab1650a31d118240f830474d99806f0f495c22beda75f2bb8277fe68cea03cb8bf67c940911a33578178b52bd314fbe84848827e043b9c1d57113c829a8b863ee3c9525f4dc7f8faeb506ce1f0a8ee236c89dbace98f00c96c03d8c7c819c8328d96ca781d5e386b9b6480acf88f14e658c90612320b6fc51e35420dda1b572e2a0644189a9a7d2809a32658efc6f30e5008d74e3370e2ad221111aeb6a597025f154c545fa190bfb094f23c83c1c7e071c64444b9beef3e5aa1528ed87912837d574cc0f1b7cc1a52c6b94f13c74fc3fe737a55b08cf83c2b9745934417e0e016e9dc6224d098a10236dcd805258793e3f67dfe6f232102470deebfcd40a57d74560aafc20430e4261ef4bec0805d32c5dcbb042f803c200b6a850ab54990d072ed866d1e45b58d8c9869d9dfb9c31a60513390938ce147f5eb99606632e3e042c076de89c79410b9c37c327750b5b986e686e76c214950e312eea8d458687635a2e629c1ba920ba913ce28f8971d411e1bab709d59eb095a418b441861a8d81c690e78721d6cc4112a9c2a427f9a58c0cbdf21152c34896b796fe5d0f078615bffa903bcdf9fd4c58496e1d7551335ef42133b230000d91c86be4d0f53afde0e66836780404f38137022b1c68267490ee6f729abf9d879c4d8d9c4022d9d24da65efc6c08820bd0727c92535b9cf8141db983fd70dd2a761cb3f1eba338df17860db64a22a73a8939bbecc7c58d61576d24eab6482b58d7c9324ccdcb69188f015fdf06b022aa4e125bc2068dc329839074ab22ef2c1ffc32a04af980fa0253b6c4725cc30616ba3c0d034ba1f1c308ab5e0ec18097f08dfff127b0044228aebdff664ad935cdb2de2344ada067b1167985fc8ac74b547a9e98c748c43df1c783d8f63bae6ab9bac1a7c4ab3a614a174e95aa122f459ba9814e5a9834f70ef9c8ac7e1f9992272b9a0a1978af86042c42c8ac0cf62e417d12f5682fabceeddcc64bf9935beeaa6f28ec5c74cfb902b104afeb02dbb2469d8a9e39f04e8e0b48312f670e10c334db75a2c435901d4a7b1eb8a4e83eb416f77c777e35be0f65aac015e84c0bcbedf15990c7604fe106beefd43b9e3b891c19c64f853f7cf54cca11de089bad2abbe3038c825c7df9859e778bc8328e9b2dd00f5ee94a55e12e689905ae91d39a1119171d784f0fb36d0f0fa8cc04a164549cdd9004075fe914d78e972d7751703f9085707868939bf41c45c05869d11b101c828061334f3b0dddb3cb3984ba637389eae376095858d601fcf582930a89dbee8feb272b6d9cc40b77ac3c37f4c2552d336d0b35c4692ea295d99cd20b35cf14a3360ca4156614a63411c50f1c76c39a70af8aab108b7589aec2174abddedd60245a9624732401ee6f67a62ce9551a51625b9acc4759fa5c30a25a9117c50d3829564c0813a158057a1215f0c7955cd7764de623893348fe61919d3d91e0763b149fdf587c3a182efa8ad99cec08c61673886cf7d794a5d920210a77a00062d873104ca6cf4eb39f5539fededaf8efb65471f1e967f7633a7995a99770970f4d2dc8097b15c0c80c14e8866b626d4818c3f5ea78bfb9c6dc073b3c801b72a9bb9a9b36c781c3487e9484379c8988296375112609fe527856b7124be86219af49fbb6ef01b25f2497fd1c41aaa1bf443d3b4f2e266e9584764b64979726aba033ffd2b85206b228fc6a91d1d1adb0fbb299a32050d3fe575b7b05f5e3c067cc452344d6402a914d862307cd9e9ee35284c98d4b2822766efa34cf18430de346e06ccc443737a755ebd0df4844b88ce076442468190dad6fc93dec5c07b39887fc0080723482716ffcabec17f10ff8d16ef2e40e56c120595376aef9ba41fbf9da69a0a547de5e4776319f4388c72c379f139e087e59886ff06803bbec1c544228244b49114e7340f69337cb557e4cff98217eba71cc05d25343c93ba09ff55f402d8f71f38e2a83077ae7e5a09402b425fdfee49d4d4a0e8e8919e55153663f4e99a7b8e0771c8c63b43d4576f57deb3850e3a0092dfb31a7925bb795c35f6d4aae0bb929e9730361ac169f070ccb717249e5def13bdc800520c920d219d9b2e833edd1bac9fdfc3c75b74f81ed369160197c91b045e320c7a74a4a7d2c4ce08e5acaaa4ee46d38df2e0f4edef84ec083a93aa9d8aaa80bb1534cac520fcf197c535059a69556fc0cf8be898faf3f5bad95b07fd9cc838e5b36410a465908d919f62b3fe769e6af830441eb7d71b231fc9d2e2d778a0ae66de1c28e92f919fcd6b8c6cfb657b49f63f2dcfa01af6e813de56858bc479d74e6abcebd2091d667241b4d132a052189fd4fbe40759b18c84da0fe6259df711b08e3bed8d5977c041f761ac96fdcc7f2aa10210c057fcb8eb84200483052cef5ee44b670682d773b697594c00888226eb29b1cca9c2300190eaccbe60ddde6cc19e763af5dbdf385b41de39c178c1be5645681d1e36bf2a3b70b71994c5e732eed01b1568e20e2e0eccc8651982cd71e678f9b4e17b718e02277507bd161fa68daf63f3696bca3a845e93722fb618a57c0f9a99e1c483d5f8edf755fc11daba8d69c1c13824907a243df67bc74af83b15451c75f060ea5fa8580351d5f2e862ce704274748e72bbfbd8a5656f36defbccc542ae293c198fa96e53c28e62679a954a37fd4c3494c7faa16c23da063510d0119f7e217bcb1aed22ae9973cb1e66d7cfd5f366cdc1eea742a894c856be1083270fddba16a0cfbf271205eb4161239ae26bc747c4d2bf88d11acba39cb9ce55c53919626362f397b622b1f7c2f1705c96ffce7d7bc78d032716e342bd62def47eb2d22df99c819c30bc1c52a008ba67b95a8656f6923901e2bbeaa44ba296809794f5a0f06cb13cf8434dbd719caeb873addae86da1ef6ce748bd77df6072b331d53348f0e590dab986000d8bc20c2270e0edf5ff6540c12788e9c9c30fddf224e4b517b950d3974fb5fc5cb944e960621d77a29c7a2998c78b20027a4d17128e09ee8fa77699cd4d904045d594374438f1634fd1455cb39e0a835a2c1201213beaa1d97874afa913e916c6872b8b640eeeb00028baf0c5dd0835e0d38c9fcf293df03519f79cf26ad82ea151911c044f3579c5f75c1d6d1d00c595555f8b0028c8d0ebbf5f4531206f3e76cc0de455901554f9ac3d8864bcc0fb62e80fd57c937b598d3f6a420d0ea8224410b679af2c66b7b3b250a2165d68eedbb9eaaa1c3890b57f0464175cd7cb4ccb9380ec503a6120b8d18b053314af78b2901bc22d450574618d0f904470ed71a5b39427ee71f71964e5b71db5f506768e6f35a3bfbf654dd49caa4b8c5313b3e8a28f5570273b65b2c542429880293a21d8945bd2b8863edac5a437cd175b7269a4e728deafe1e4266c66d90f7058407a28d361570776020b9a33a0ae988374699146c43a5017c4d52b32ee02f31196d949f688c195d06f207e77755487c1344b01cdaba43f23ddef046a85f06e7fcb7ff4f7d1c0f35b8afd4226f6547af47926df447d69ab1229a9ab359daaef9854d959674631018e5484c4dd2a794ed492cb313cb8434622f3bd494d393d786af17003f3644dcf9cfd95940dc036e5cb41e013ab278753685b750ebe7a80cb67fa3a201ab00f35768f872b8ddd061a5567037a05b7063835cd0940f44395d6310cecc49be2f0cd77defc52c50e4ca2b266ff48dffd5006aa37b179e8dcee7bc5d29f87f5dba46399ca831392c50d0cba9510be44b3bc53ddbe5f8c24153879a06b47609e622d2cdcc75cb38d5640b9c60fcf3e3164da7eeba5cf0e88c9d715672ef3e734d22180a750a4b820d16263a9e92d57cc4194a151b97a86f2adc9a8a311da026f83292025c414ef63655be67fe0eda956e9406a93cb4149763768f7a97eb3cd855b0d1c9bc9d6249cfe15e4d906a47476d4caa14addf9a6f5c5e01c629c69f8a37eee454680e99e27b2585f0c6a2d0c172beaf3dbf59ea28c6b6d765cedfedbe060ae694fad2722eeee0555582714161649e84c58e280514114c63136a538048394975696bcd6116b5c68fef9bb3153e7c66bea40e24a2279f10690109beca329f83bd1f7da5cd753f8f497d8ae7cd8c1089f2357ef21472c332cc72913cef7283ff6d2cb68a502a3cd7dd910b6d6874eea477718f443afd2c3f1ce7114cce4afbc399dbc0673487b994f3e4ac256ff7a7ad9ba9dc661dfa9e1df757d3183dffcd3d322e8bcd319cd6f1357ab8441239b6c463308ea731c14cf3cf8d4b490df4d2a1e6d53167678786c4d99f5bed84f318a13c795badf0bb2ad5a6cf7c19a7b73f2dcd85f4fafa02a4faaa8898d6cf17d88dfc2f905b9937f65496d933cd567dedc252920b457ba4f649ff740880a424f2ed2d4663963d5093bcd7017c36e42088aae18cebc3be3b58c5b8e29511b53863faee0c63d3d34dd63baff738312aec141a981caa051f56133e928e7636f849bc642040e33941c0c928440f1258148082224078809ac3af666f32092e044d198ac2a2693d7dd5a7ce2d008b62abd8f42adf7fe59c0321b05f577fff22cc691c177894ab8ca13c7096d16f62d938e866ab7b1f7095408be9c05d184c261f4373accc4800232c92d4cf4cae7a8b0e6a62abb336160633139b286d8ca63d57d52c4f2d9d1d59e4d967805b799137b2d7e69ff988f56e45fbc63472a945b2925ee3c2f4070af73321ba082def40a3ed70230c78fbf4b13d5026005cba80daacb81d4acd0a76e878bace1bc0700c3b26b7379a2b736db82b9fd0d5f35b8b4fc00c113187141e31e3a8025a5d1e35d368e1185886d09ecef6fb1e9687c3fab6579e400be0e607000583f04260596031d7669f832c0d54fd5469b15dd77a2c2c72c705c3ed548196dddc7ea015405301be264bd27a20e677470902144e27ffc6d21deb096d94a5eccc2121cfbe88a59294bede4c2c4ef5411e1b3f79f18325d973f9c41937642ec50d05074aa6bafef7455fe8ef97e41855fbc1f85ec7ac6840ba6e13d409f8eb3385e26113e058ca8d8219d178563bbd24b39042838495f8e085c0d5e630fe4ac259cb56256ecd9dea1fc234cccab0ce47eda863e9736056cecb34b2e35b73bf582be6875f0831b5cdd1d526c0536fab2706cf830371a1fc835990e0bb9e6ce738af9e9ac123a85d6f31787564620727b4cb2bd86dfee3ddf4afead30db91ac26699d23f705b0e85a00e14a6ccb9dcbf3324c70d716b08b848bc91174b5d2453a3060a952e971d2044d3e31df9ec9657d9475f32ad44ddd4b6d4ebba2d3f24a11e6e54a03740e090367f0b1c6a9a5f9cea6c668b8368c63f040df9b3d1cb68d07f4df7ac616b121d370c04df820cb10787133fa3167ebfa748e0dc81aa77701f340099edbad4e61b38858eff307f0dad51c36b8115f7cc66f08621d5bdf744aeab7f6b22c16a1ffa01ced71dc8b065f41c8d6562f9857d76b26bdb4b5e5b1902a1d451f3f30466b7ebe7da8604f41a1d69660fe1e926bbc69fdc6d731804e28abdc98cf97f58b14e71af284d362134ae1295261a812b5c49bd1022d517e06b1600b711920d6df5a268e64723ae7e1bc937db8171a402f49eeb50068ae9e970881467f7d1b3af13d46717bf7b9d581792f27967f52c77ceb52ff74969d4cf5e27b4ded6a8da8960fce08863af6108bba084590a1e7718a8579c8f74fdfc6ccaed74b347400fd119785f599819e2e0e422df9c924adf40c8a8762b7d1d8f4c14280310298c870b950a87e4874dcf5c10ecf290a0299e37114038b89f84474216c317f31b018ce6fd61e23767e46e3fc26f3085a8d146594afd80ab8971693cfc609e7092e807fe3d2118339392f93177170b87e91b0f001753234f4f3c9c903d00b5a97e38c05e03b15df3f1a8ff725fcadbe39ce54e354112c159b6cbfccbe5fe9afc8c8c25c13c3f38a0702a6682d885e7a0a0f4ccfbf2bb50fb5f8f72c9baa7a8caeab6377c17312ebfa283ba920a171e9d6cfd99c1c95dd7e4253bcb29e6f996ef6611b509e4ff9088bd36c8e6a0ce3f1472cb597ed64157f583acd25a28e7ee56131c9633d16173dd5167bee03ca60de610da151e493aaf4a51975849a0a25798e00208c0b73893b749ddc324bb5d29107a0046ea3915676cab82c951185a22398a99d8195c3f7a12ee5197b18ee834e796d1a92877e3bb8d02c6992be03764311ef4fba07dbc129504988ba9ceabcd1eab492730d6e75579a18a69256add1022c6f43d392bd5b48d1d98d290c4cddc0ff23f93162a3e4c99ff8e78ff5220a7560cdba441a87bf820497b6110d19cf63611f11556ff7f6e0106a6aa6ede471a762df088fc76a7040e91afaa5145aadd84859816c39bafededf3b2d25eec0425c8b5db9291f83eb0fe17f53f8dd7579f007c4c7a57c90df6e136a0dce1e0f23ecd8696a54d90d747bdb0ac969b0c4aa083dd5fee087461eab0823b80ed90c0e52db1aab9495489d286f0eeb57fe2ec702e888788eb112bfe14b17b166e0ba038e5aa131d955d09904ac6559185111714e94f40836fc6dc1723b5099dddcc58361e749a27224b2f4a03e3c16ef657a9394a5d015971fba461f9fbe2db5c43167126346eb407e66c9833f63ac9bd55bfc150e212ebe61f2045067a54128bd01bc0e73a8b8cf4792e619307cf6d7e7ad117d51eed12d8ee8fe0fb3aa8eb98fc0f4e42c50ba4f0f4fde4df0e05ad08acaff6749acca11d565f829c6f403d8ae248290ccd00691b5cf700703a49fa46ba5348a83548a37db76317d269960dcd05494440cfbd88de58116ccf86912537759c4e70ab05dd03151d8074166dcb2e707400fee71146630756d263c63fbee39b0c7fdf69c4572604e8fd30cae0e0e235e9c61fa85ded799c0ac103abdac196a956e9c255f18b1a82d307a0398e89140e2fb84cf39fe6cd355007836d5dc6619afa5eb403808de88b8978fd9ce8fa9eee5ce0a53c814d135763a9d7c871833d63d01ff337efb8629407d396f69007fe0eaca0f90be624575989323a1a0b554819bee65f1a8e884e01acd7638493631fe869fd4f723467298a497bd1fa36e5f0a07484ad784f77ce8271aae3c4c21a2af6afb16859c5d88624db9e220760deed00680866aa2c3a0d49bca7889c0e0f2568ca046b8c05856ab621704d96b060b08aca6f464a310e745dc46aa453e5a2776b9d9ce6184a7f1c99fff33a65a5019d48000f0fea2a818c9952d4ba890772c20fb92952b4ba68fcc42d0c6337199de9619b63feebcf759e8f2a05bdc4d624f7fac80810bbc7c6e0e57e49458333eaebacbf80eb52a5b1bb687ec7bfbbceef0080238fa70a48874b78e0a3b994600db9481e710b99e02e11fa2e6a19af2cf027b91569c4c8cfe7aae328ae8c66bd13a35de23b17ae3448a4acbdec8b3ed5fecb8513873d3fa41dadf8bf2b9a54cbdc428565c0e7866d92dca78769966c077fc6fc187e26f86dfd326d5db9251d9e169b5cbaee82a7b6c52a2206de17fcaaf79460c65040453a96d52dada7a0d1b2a4da0475530cb33ea8dd9c6db3be6447012e7a98effca49379c4a492c7e85b7eb3206f78a892d69da17033c4ffaeb385d8782bef42fa3fff436aeb1bb3999a32d6a8cb0a98d4c53590c87145891af98f20205ce0bdd77b06155ec7030aaea54e096b48c566ef48069dfbdbb8b63e2695ebf131394fec067612e818879b555a4cb7264ca0b907b84619a35e5b9ab0bcac720add3a7fbe8e2856a1960c6dc000207f4c2376ad88af7ce1f08b0699832e534b78214bb150a22ff170ca00ec7274a4201b61c367f642f600d517cc67725f7b046982d80e7cbbf7a9958e88d2392757a404668c4a201efeda94e7432f74cf35d81839b5465e9b461a55fa8dc152869cabaa07b45913a33d4faba90c7b366436e5a784b21fae9a3e77cb10bdb74226c8c53598949e468cb80c28e7d0056357012aa3ba394a092255e7f0e2cd79cd86c99ff80e2321c822e8d1bd75745e68ee5a83361bcee44da78407f281e80bf5b374d58cb0a274d1e4bd466b3af18f595b8a5af995fa07896e8c6fbdcf1550e8ece218e69c9313b8b1d6fbd0dc7af1675895e075bbf65f7bc751b30a538182cb9c1401a0432a14bad71cb185e81aec1d8c2d310b6b5158c49f7d563c6e8058793a06b2482db311735eb32e9c7777a72bcca616f1f8be698f373936cab488c7536d77a20d1c8a653d2768f150b12ce68d4871a78fa8ae84f35ee55702e5d69174b765ed895e2947d8834b0358570976c5b824f54b08ee9b65c98fcc22900853d165584b44ce50d5a9caf44928570f4fa3493edb81c60fe2e5975092a872fc28e668a5eca87aa63d832197f137894225a85645452da02f8ea3af0e14bf32ad3e40d527f251e22d963c2f481ad2f2709e6a8d49e8ded1194e3c23e9b9e94e594e1fd1107c674e6e1672ce702db523ffd6376a3140b5e5fce224b22d85420c372554557082c53041843450b7c86be6c6da9e9fefcc98d3bf1a13a7c008ce9988ac03367b92636f053a74279e1826cb677379978c567c8b9575ef7adc2b661d62a15267bfba93a651d40742e8a093c621cef4da087799a18ec8e59a1cb5aa7b76d2157a265b5547885ee42cc0fdcf14b439cf9736b3c86648542f68617dd2bc182f662b5fdb5680f4555b980b729cff8bc487d0518e0cf3b4c2891240798bc529e473f7724ca7896ed7dbdcfed68132014832da3efd1e529f4bc5ee18234571292c72ed24c738e109255a3d495e08c012d0d05906967657538c67216205fd4fb0e8c210d903fa9a7df4681a9f0eda1398b5e7751e59215c2be4f1f45d8cb83801ac362f8a2e824ad02436abc6c1b8980f320bb959a614b001c7eeae8c58965fdc958d612c15c116c2a4c661313aa93aca8c8710d3653f1951ce91b7e828cae8c4bb303679551ce70ca8a0835aa2c97c7eb934c723d33413a59c51aa504b30c5e2b24f326184e54afdd8b2a34892007bf11e76ca97b96a73c58e6508ec7cec5a95ee5c864593f1b046d57c931f1b69a7a04192c9d2f6e230980e2a000e694342d9246081432f31c61542d26fa889ddc73d78f95cda365ce13704ace5815c5e44be9e26844d6e4dbff0a81edf397796734c633230e8ffb1dedde8a9bffaaf31c04124903bacb1565fe47b53bc46999a395f7fc51e727f88e60fb8eb4ddb95fd8d3343a4e3d29bbda02e719e88783c904780dd76d237e08a8e84b5e0acedd6409a8e763866ef2b5ea7590a5cf5a38c56baaaee73b56c4147e01d529561829c39042629e546adbbe45cc5d91e9418176690965f8ed35ef0910f2d9723158aa04c286e9e2750548d496d2ee40dfd68a76a538593e2afc49b1809efcb06349c6f80928b60b86e555aa1c1a2f3380023e6c42523582365b08a66481694857b0ae93bffe169a798620928b78ad8495344c4244b334798be8a6fe917b3c9bbd7078e58864260d8ad285074e403e15f868f7f2e0c776169b2d16351303d2704f0a5de7d6fff911da90bb87f71190ff14dc071c0f5d23a0a23c4cdf4d7aa56a45bb2fcb91316b692c7c52d4581e28497dc2e86f1c635f7c4df2f4c04cc3ba755500c7219705ddf6d4016e72cab85af339beaf06e892d8a744691936d2e882a71de269b294369fff59f1cc9049926cda653627da0c01d4bffa384cae5b1fdefc390be9b1dd42861ce68ea3b39d787084ddca3582ba9e70adf8a6d361af22f974ecb18d20e4a6e61c36798593af3915898fe853311ff8e1647dc3b367c4f0412746993b6c6d98886435508caaa7091128921af3c3b340375d48384b878e922091ae851304977c90521ac87b71276246f6fe6ac9ca73155967216f7284c41e68e237605ca5678ba78b942face154210f817f4b4e4b7b0840283d5b0f33f889fb3ea39022fe8e342ce7504ac1b9b2d670b04c93ab2aebbd1eb56340086e87c550db407879abc65468b4ba36b1f5774241603fb366f2f4b8f60835dc658b0901bbe74f9766f38aa233c56beb3b505c3fb0d457eca367dcd59468689993ba9fc066ffbee3144f6ca96066c0482d7220c56c120ab89ee556e20b2c20a77f56a1686c0ae333d20ad86891cdbc24c4cae6130365eb70a7b1f417c543b6deb3927e9a77baf59561c10f451082b406b06c5e0f59999e0d675e259e23f02d3e0650ae3bf68b0e7a5f5d6abd8c8ec960a8e22f704b4ede04a0a42b256b0acf81fa08d0c307cfe9b1c76bd82add8c825f8f8baaba64bf068dfac8b8c9a1499039693361674ca6879cc81eea8ac1a2473c74f78af49c0021f9a3ed62c63c3744112c52b96f3b59934e5f2eb4fa12d146dcff6b9ea7f16edadd55a704bc4708cd9ca5057e17b0564fa57f61f65185bf9d9e111a77c43b89fad43d10dc19d3bc49e8b9d6eecedf2749ec23f86f55ab0eb499dd06494d1525c6e59f652a7681507611821315faa12ffadcfa6e9148d6d6200f0debcf35bf6f30780059a56c12aaa18459535348dd593e24b3c430719360aeeae9eb44e093f5e07489162f6aee6ce111b4f2b3519e9e4a3c9194a270260338cfcb0f5ea3b81037c1947584e30e097c9efbb61d6f4e08f3ca35670eceab4530e7ab607155921eb2ac17bfe94736c6c33c1c5ae45aaac5954ab6e77d08faef6ea2783e017330df30700ba8d03fedecae96ef3f076d4743a010b77a514972991867e3583f62f62e9c1bc0edcfa05c04b5be95076ac863b5f299255712be1199a540e4293a69e320654b6b34cfe30f56a680ea69e1b10d9be4ac8fec86761b071f94f25c5ee50584787024eae30f91e00d950e347f4e0cd14238bea22c16aa62c1c697f57aba1c69ef394ff836afbba36e863225ce4dca5ab2fbbb2047fc20e6cb5e50ac407275be960dbc80bff4c4be045f2194fdbb25635860363f3b096a61501abf33af9cb25cc6842e89a55924094a8ac90302c693cbf5e07fabbc36ec22a7a62df5446a05a9e698c7c4d0d1fc9486f67ca074eafe1bea0bca9dcf88e164b86c156a4e25016babb661e4d463e2cbf16bfe4c231bcb9db738a94550c65917de07532176d2846721b71d072b8ba49a3c7c700dc5b0b29db9d6a1a6ff945dbdf23b0154c8d7ac9d5d3d0efb4ba998a629980ffce9088c11e21e8ce4fa8d70200828692bcc4d4e0e135b7bafeef90cd0852c0a36b10c3319ccea58a7fac69f322d946273563c52354593b8175902eb516fe9be1651f306ce5d4c8bebd7d311da7637c90624c0c6b86a940cfae7ddd503235d739d00eaded356eb0bd33cbd12a44195b398dc03337a12be7b43d66da7fc5ff7c95997102dd4daecade43cfd66ff652ee1f75783d9d5be08965b250754f65119560b1b9535299237286ec0267023cd4834ed548584580ad9a521caa4f8e9665deb1f29a7970392295b83502246a39364f1951860e453fde723e6a1f5241b40735b547a484bcae803fdb705848d59e3edd7484700c42f0253f84ad903a2f012430dc437cf83447e46cefc8b9fce50f876094227ea98a73bf5f3642ba7c963cfb019b48a7af66430ef15eadf2d50df122132b3b9c91a7a5e928863cabe74149a2df063a4139ce759e238eabeeb9d77aa7d014be7cf076b313fe0c5e66cfe1372ac95929e370fbd6ab5dfae2a440a8cce6c2f3fd0e7242df8f300888970b4fa6bc895b7fd7d55b3b86183aa79d971d46b24be8e917f53cf43bf431bf2ea6ddef9c1d0581473f3c56b4ea5a1301b5dafb517f1d77a211215ceaacf8055a5f60de7a789f32b05e1ce9b59ef253f41c3cca5367c509884936e9102f68919b15e845631676c75943121004bcba4ce986e69640565ba838eeedd9beaaa5ad251e05060eb21c70849baec74b307c13491a4d733f7b21d4251917d58829c1a67b36bfc93a924d44c33f0b5d65e2bec89194a02a405970d0ecca02776349f374a1fd5b148c4670098f08a47b6e7b94dfcd64ae3b3d335ea4e1e9bf2a02acab8f6e8cd37340cc3c308b17eebe817cb38ae6ca4607579586fb62e8f4366ced49026998a97fd258026deaed14413c2751155120c0922e7299517911a1d0433c9fb1e119426eda412190c65788f87416ff76b92504b5be0f8432b56f8ed81bae3fbf67a898909719853741f94e35dfacf5bbdbbdbf570a9909d5d5a0ef15087eff161e8f3d2c358de8198411457eeb3fe2612ea3bb9cff24fc469d806b52ddc1721bcf80abab8fed8943466ca5ef3728a50cb276e862bb702ca2702290d5e32ca1ce17d9f8f944a025b3c619c0219b0013257560fdd1358d6c70dc34b36535b339361b01a2b596bf9b290de69bff1e275136538f9ae6c5bc998491e69880c2e8eff48e90cf21cc09c1ecefc4617f96abf7fcb10910298ad1cd6fba0200fad6f89647ab507c6b0bfeaa6e7a998f61bfdcb915c10fc3f3aceaf850f1503fff33c67aa4218476191bd6b43d52849c069372a4150a5c6c4a54b9fe0e19d6823a658e28d7fadddb1295c4b97f48bbc14d783b4b4aef8501664b3dec68759410bfa69c0ff41469aca2f56d99b4c7abaaf17a5e9461ffccf40f83e4fdb2330fe633ef589c2b7ff965f242505601d90c04dd2c30a5bc3e99a74cd346a2fbec7949156434823d8caa66e8ca0686f856e34f9c35d4cb29c4e9fd3512ce6460ea7d34126b189eaaae16a5365ddb705d0105ad8bee1d4581c4b20b10fae39d023cd7d3b5df56f5bf665834cc9f162f52a761822b1865a2d26e119364f86b071ee968d15669b5c4a1f56c4d554d67f9c708bad5568022205cdd040cadbadc1bcb997773febdeb680ed7f332b90ceb9269c5fe39fafccd554b1addae323dc9a95c3ff52c5c6174d48f965b4721e282f9f6860ec123c1b56f11c26c45ac3ffdddbe39220cb4a3c4f0f05fdceea32a5f1751fb24f6d40df426f3908f365a8c25dd18eebfc0c170f9f36024619aff5cf67b74dd149ba21d2c39e7fae958f6457396da16460791d798793004377898c127b54c5f109c9b4880ffc8d415b7177b3aa1cb7d932869e738ee9ce69ca459019cbc39df3ab783006252fd6514b7c344a0e5513be033ad2ada515d84c9b11ed80f23c208b8a90f754ec324421da59a8cfd9043e4246410f1a2ab94052c77e76d7350c2b093dc6ca3af658244244308fa34d6540933bbdab599ae35196a396a41c33f86e833508aed72cb099ad6a772885b44c776ac15af14842d2a9864cdefa9d55c1d351480ce53aa9c4e6860cbd8d0b7ebe1184200b62a7a92e7c3e8054f16861a0730dbbe8c853749eb558d5d21860337e177372ab50a6cb4aaebb406ef3f7c2f9177d9446681cbc0e3a6f8f59beacfb2488e3c820445f2cf711ad9da09218fde2602413e0d17ff0813e964dd193212416b6f0a6b7f73126eb4f59e3b2eccc49bcb55686e50b56a60304004332c0eab73754f10dace128cffdb233754167f257deee7c3f0e9d4a2cc738e2c5a02bd689f4ce6d0927849398ddc01ed08765811abf681e8835708960019d8f475222f7d9d5f33afbdb2702e9c16c510e7aa9d57e0816e351f6bb8f3259915fa2d6b585a8fa3bb160790c6a5c6ab96e4efef1224047d341f8d82ad605b848cc2e28614773ab7ea5b99bdb1f75292dfef180ddb161d6f4df72117adae574c8d8b7c0014150e12eeb03ffc9b63e54742f9f520e0e6c3915e12107c54053a66e7538b0836aa5948d3c45464b2a672c5a4f931f0b10ba076cb6da2ef4b24e8cde0aad1e2535fd632a901df38dfa8a045571a3ad1cbd939e83cdcc0c60df55feb28b1dbf91fc03e52651cc7ef9c4cf6c7455ddfbf88fba093c536488e8bbdb6cb81d17f61a489762cd27ef35d766b681b64157296a5fe64767c1288173b03d1855b50acdc0d0b8491af66ccee31ea6b65bf85b99804cd8458c9d1c783e49ac9592780f924c60b4963ec36957ad7f9b1868327245f43ad5ec401c1802a71999517376a67ef520fd19f4a1b3f7995245499b775d1736e36b278ed53d5b50dc135e888c05f9edf3f842452e192b28ae223ad104b3f1cc9c5ebffd656bbe607d4f90e0fc90d1cafe04b7dfe2ba0056c1e273af740eb4dd064957b34b9a57e02505e9c55f5e33d686433458599fa65ca30af0d69ac499b8bbb032377d289f431fb18f3ad85cf87cafa5a00a20bbab5167dbf27d69353d95c824d5c66fa90924f8de1df8d810ae97d5194c6b7d54a1721a22178250babbe74a57aac6be6deef34ee268f6de277c1642fc0f3e61aba0a19d8c59c77f04129a9628e38b8fbc371c8770f3edae8eced229061832ae754e6ca0d8aca7bfb189431a2a4c24643cd568d0fbd24e4a9e679f2cbccc6667a75048e29569f1a797c962d0e6d45a4aac7fb2297719feb37477ad0c6c1040dd182f7c7b9ae7b1c8d5f9a1b32d75e8d117d6ae0b19aa83c6fd21453352221f5966e9e12214baeffdf2e2246cfc2800c12b7a3fe14c703de90dd451cb1da9c34d71436edc4ce1f0d44069256a06abbd8397ffdde075cc51f08e7c50b26aa14cccafdd8c0cdd82971343bc5d54a8c5e47d31859b06706c54e9faca7b0e96496cc34f7eb382b7798faacaa9d2afb93ae6b24e9d54623492b02682fe58a14a015193468e6c60d621851065a3aed9cc6d36bcbb9a5fffd4d6dfe01581b5e03ba2601a919535bebfa71d81d5a453107b8f807eb4eee1b168f44ae0c0c28d7f774dfa84676764e2e77931e04004b1afa7b967aecc749b05cb2c3ccd25602660417a953ef9be71062df28d625d882c29685832ee39d959da4e722e64f0b34763a344d7bcbdc7b3cab2b0da86c6f814355a24a156139c99b6ba93f0121a0c22750019e1e7c12fc5faad27a290d748ce4ab0c84a63a5a8c641e52d77a33a046ce1015f59a3518633ec5c37ad0fc38b2879cdc4d35e3dbb836dd5636e3d34461f8b0e6410f8b45fc50985700d191256f1d8cab5700fa1f48d748a6baa594a67fdda98a75f2763f04725e816fa509fc99a9f447d6e7e9b6dd80b419f3201894769398ef875ae043ca7e33f131e790128abba8065a26063822c490c537ab68f6fe68dacd6a59d5673a30b8510420443d594d65735e9bdf3b9840fe5f730f820ad32155f387ad19074ac425ccf501da879d273a3339187153e25d95d5c50bb98bb9314dd48129af03d4bedf9d346a7a6e35d186cc70a35f74afcc6ff9c1290580c7d307b45077b0aa5f60a117d9ab21ca53ac8037073d90beffd961211b93342edbae377aa1b384507e9e04d78b926d210fc36bb25b7bcd403f29ab14a5ffc94aa813a5ecdbbe22bfa8536fd9926e54730200f539849ce78530c67128e7aec8fcfa3a1d152d4c0a1a7e50f9636e9015a79e43b625ba74ea9c8effb1d15f22ee2f17841c7d9f91d5833e1d6b12b7ff378f10219a08cec1fafa37105ac9705d12f93fef34e16ac21c230f4dbc4a8fa71217f06a376aa6e3724308a0681ffcb703b45f28aa0e3a51ee5d8e67706c6cda118bd74f725c5a36ad8f2a49d563ee60fc4d2b7a70ee08803cad8f5a439ca83de3b01a88fcc01b48cf0cdde07c788fc0ceab1a411d7382777fbbb800639e8bdbcda4bea14f975d150580195322ebc122002e18863cd98c62c4a416cac8c93fdfb590b04e54e0be382803cfa6f43a9458abd20b4e848975f6f469a8074fadfaec478d35337b9758689a306bce90001204515a7eac17ce9cdd74d78ee5a136181e40851ab504aac1cec099aabbded6de545197f9c96a9b454d87798495265b7a8159ba0f10600f362e4ff14d95fab14b397574a0ea7551c73108c24005c33185b5658a8e3e73136111845e5df6626b7558cef96476fecd37c123dd6dda070acc8400469978845f01da5a35ef8b99303ef190d779d188d2f61f7395dd1133e8d35d63db4d5ae20f0acc6404e355430efe02d11a871f80fd959147982ef23b1b390f89b953c1854d2b0086ad08b2c3b19821f73f1d99fc12a3bbc15c9664c5b0b7b5f8ee150328593c95504345ae7e4caaa66f34fd469f6e8cc3741225c2889c9ae4b7bb7a1aa78f62a35d00d580c57b8c5f0eb90491ec425cf69133a50d95aa069a82977b504b1bb10d8db4b1bec6c5746edfd335c6260ef4ebc3862ba3139b10a10d1fdb51feadaa5def11a1cdd6cf84bcda8aeda7746dfc677ab92d798c6c3b03ce69949e992c62bc61c7990813676b2c0e1af323a7d23f5e79c2af9382d06e2f7e3fa282ae1c195d62fe0d2819660d99ba2eb049d2074ad642de87185901206682048704c95b99269dde9b446e9eafeecb4a92e1aed0715ae12ee1d03c39467f747a8677b73d5421b4de1c1476662603dd6ca2a3d79bc4ad7608cb28797ec1fecde9f85b306fbba76ee89034e9a1e32ef3d18adc265ae1cda8eccbc16030b6a9c1ac785c984fc0877646d61330dabc75326a108f3dd9a3c1943591717c579af4d87a0b2ae3a0e4d6f57b10dd7b5c472ca7dde414910546277e8a0f63f8287df83b075ce303cc22a6a102ee7e4d152c7ca4036f0a3c084269fc1f06cdc97f3d92c760b6295c438a8eb7ebe1e5b927882da1f75fd603d6ad6e3eb8cbc9a567e6abadc342c259ebb096f467a5c1dcc0118b5b093df2f526aa57d3dd430b47f716f35bfb4c67ad651c4aa99bf44907a29459195298023ea9421644bfda38c1a19267726ceda903d12eea8f21c69f83e8233126379851dd74c1241746057058624c4bded72cd946bbf5d873aabc66ae56dc0947241f4fc962863244dafc5f09383c1deb030418f8039b681d9371fd56d47e2c962bcae9b020645e58df03a90ebfb880025995a536487faad73213facca8afb703995fcc02b26434213e0a630e0c29e965ea1ebf27aa9480019be8a8e1262063df4962e450850cf4f91a7e0355434f5b4813c51f34d66404a5202055cf1cab8f22928b557b6acc45d6d07e1b22412c3aca4a4da345e1b8f8d21a8198b057c5ce754753f2ce41bf829c87e351969af1791b026f165c4b187642e5a8bfaaa23a6a17e3d98bcc0001d2e43762e0a184db8ea8266e3c7182f01421dde8b036efb10ee880baffec549a4679db826921190d3dcc0a7040adb5771d4d08a47db15aa8396f2de5a9a5eb8c85a9f4540696cfec2e170c33fd3a350884556fe557b3aff2e5a13efdca52f3a2d58766acabd25d21ecd8a8d123c6a046ef21fae355102b478c2165ce88d54dd9656c2c8e631632fcc3b54dbd55386456a4c0620af0dbddb56e02e6a6dac4e9ae6efb7d1a0bcd8d5948dd750525b7b488f5fda2cfcc08a91d60df766685f1afb383bba5a8d6b75c41b0e72b3f6dfec32297072132a0686a2637c01669d31d078b21cc530e6ee024125d9d74a43b7f63f072765c7d4a9bc56bef758d4c57d650351ad9d27012d2bf0f8b9cb9375152e8e83fcb01c7ed895e9e8fa0b1e5b7b20690b99d418acbfe75bc1cf7b6708111351dfcd53e4d4c6e679a3fbf08bcd1ffb3c0f5d228ead7c3abc1f206a8b250494ae567557861e0c61ffbba1a96364ebb698dc3cd6ca8e624d0cbd43d59b5bb840f540e0d1a53669c2905b8f28b943862c2fa88de92b62a7477aae9f278cd76cda2a0d92d15c38cd6df2780b7817ead87d4f4900e9ff6de6a4c8021d8367ce9731dd89b74bdd97c68f4c39c2297998820dcb1effe31144410163d534cffdf8b444aa141953539e13fe979950d994c8c846565224ca1ad6442207b6bcac77abed0f0a5680a929c86d001535ce63ddbab08929151580564c8b56510688a82caee806be4a12d07a6f2a0ead48a6a7418f60a2413855c38eaec7202f1724f6621dd49a6179b9232c19dadfba5798e70fa7b281a5554eec352e2575bc3e2fab602745a6912013971b0ea5015b80e6fa22576a09ac03aa09a123f76e7606d03efc099629d4faf7d35c53da920bf5610124e25b5019bdf41fa51f1eb7f21ad15b3c143419241a6501f1ec74138586b4616c1147843ac4a8d8f2ccbbb63d1dba9be72c278c2ea4e676a70b4b0fa9ef6308049a0824cea3916cccd76ae6eae4f04775b345fbd4d93474b13c8a322bdd7b203cffd8315afd8aa4974d179784d2a74fd567d7af9256148685166f888c04e8787e415d1819b6d31ffd48588065eb7e8b01d471432b2a81b9ef5f48a6091cace398d7c629efd58db322755c6bb22d756e8a90897a8004de78ba6b6254afc1f37b874889910a292bcefa578da3891f9940cb9a8ce4b263c42e5f95e295a8b776d9eb889315c315f6c15ce3ca7885164b412a1de26eea4e3227c52b738adba71b138a94027e632a854e1b43fcdd63b39a6aee51b41afda522e86096bd2eed657353a27bbdbd6bd179074a70a285f39c9992a12be6df80cb9287333fd19998523638564e0ed0e8d54e119c6e835d6290eb957868e3650e6c9fe5325672df10bc38328a6e0d0813c420080e90925643b935cc103667bff93d4d6668d553cde58ca7530ca8fbacb9e992defe4dfb9c2cf548cc49e13e78b106bc8b89bdd1e1980f3b67a84b1227b2d57492e515cba6db58525ae34d7a59b5680754cc4c39b530cfe1bfdbba8ca1adf840ed326979ffcc896722d9148679b282d5231e42e7daace6dc843acc5c6c1c03db82eaa4e259e2e8c1c03fbb8d0bb71a8bc12763a84424725e120b5935679edaedd87173e9e8b69c1fa04f77887282db01c81bd2d6e1f34a5c4e956231a5d99f4370223a36a74703860408069bb487f384a35dff304e5c1b8b06d481850a4cff2406d1184ac4b3cb9aad7c7c15ff6d506bbe78a31f13f85bd29c958c6d0617d45c5bf4a7e5673131f8774b7644d395ae62df72ee78e7a76989e6854445e686cc9764cea3673a7ed43fd6d00e50df9c553913b930fd05dcabfa59263f5dbc6db0b07820f33b476d421f1fd1bed6f388d8fddb351200c8bd8ee0c8faa0b21a1225c713e10eacb9960ebff285802565d66ce91ac3c99cff8b08cd455b4f280cdce5e3b720bb43b9c65a6144747dcefe47c1ba81ac29eef3f407af4f6529bab9f4e1808bdba2e7112f2ac22455f2c695a9d3a76904b26f75dd577a3eb575fcb9ce48b25f0e9533d7f14da441180b9589b4c053f411a1c36478f20578ea3dc93c9979ccd635b831e70899f1229b242552b420031a57bc1473f8ac3b949edf5223160f26911f20f2f731f2d4228b54ab6c8b23a05df9778981c9fa4322aba913cd1d244515cfa3dbcf27bdf713557fbedf0d2ce16efd328a2d061449bdc516218eb30f067fdcfd8edac03cef3b2324f5c890c058e51a9f44fb8277902a2b432d47710088dbe620e745fb00c01267842385dd9ddbabc8c1d868fb7ea0097881c5968ba81d2d4ee74b33ac5aa5e84b91f2dc106a65bfe02c69d0077ce9d25a04c4fcb61297a9ee2a536080a674e9b3eb1d719e1e1534e0c8213d05f1fa216a8165acae68fc943b9b71a165dcb4254042e47f88a1ef2ef82d4255f415817b14217c570db934cdeffd3999a8f5c96279e585f0383ec519a53580027d44a96aecf82732637193605798118ce17a339edd2c61fd3ae63180d9dc9e2b9edc74914072974ea1aab956488f034dfdf58f832444a3ac4c406a6552a0409fe013d89072ff5cc22970f266f1a2edb7e556d8ce9350dca87d1917620d516b2cf4a61f09c01682885cefb1ed0ac834579a6beab3a1591f3cd6232268d2dc5be623687c71c307b456dc10fceeac7ca6137b3aaa93b0731f0c493d9441f33eeb0eb6bcf7433cadb03a91dc53d69526db5c33f61092f41eb5efe755ab45f82977eefbb97aea4aa45507f5cbefaa3c7f8febef396f35a14ed862dc41b49099d3cfbfee2a7870957d20e7fa641e2f828a998988141fb3f2c11ebe148f9bd9608e78277c072036f0337945a8958f2b2f2724a65ff23a88c5b508750abbc19da0b6891ebc69f2af3a5c7503eb580b6756b7cfd9ef3c0a253f69e908b215f6f6f823a30342ea9431b3fe3db145271c759d0b0fc3e4b679f418c03de13f7e840aa20f12f7cd3d580196c805a4b74822fac7e655b8acaa8922ecb25ae779e9426b6f7838d8dfd4df9d45b22b5db55c34525194e62cf0123b73bf4456470c6928e41e10f53f0750fa49c47a75fb929c98f8e71c3df271310427ed4082de95dc6792fac35b68fc5e858cdc39d201a42503b8c65ad301ad2f5078bcf39cd5b5f97ad818aa7d6851f33c58f1619d26889644d67b4f71b77805a324e21f592508eb42890fab676dcde8dc1345366b99f33dea0823ba183a87c3b62eb110d1d3c457c023bd5edf94b551795ef120ab67bc438614da87165cc1eccd9f979095fa50c4f796103063a6705639c4cabc6d79478077e168f6e860298f7f15bd5cc7d20551322bef32b99700ea13060287775a479fa83a5542cd72f2bc0a3f23d5bfbd38b409293414abba9208880c9b8a8079be09688464af92c829a74106124dd92ffeb4600d48e8d63e0bdc10db500bf022c1012320f883b2de23e3f23bd0b0cb7aecaa708252af5006e30b48bb555e90cf7afb7a0503383b8d440215405cdfc3cedee85c8dbc93540298fd335363567e60c59a5e8d6695dc7cec15a39285aa881164ff670e09702ea9ba0159a413166bd46a8ec3010e8902150226959d735ccd2a734681ea793b0f5e6308cd891c35de3cc2e6762df2a251c72828e5f4a47c216179e333fc8b66c860b1e2ba8bdbcca0f99a0be861260d613b13a0ce508e30235be3837b1169d42d9db7e98b327f46bd727fa9f2cd422da00786cab1a10bd4334c248d737ce13ae85e4d083d75fb1e78257218ef0bc0e06aaf307e85af917b0ac216484934ff357bc7154377f3d229924a519db57ed79188f1d4db031e8cd860971e3fe8e584de877b4aed73843fdb1ca49d3bb8c6d3536d10d90213105608be2595270984a564adf1a6cea7e8256b8004ac27f8b5138486a94ced7ccf30d0686133f1a49cc5c9bcbdb443e3da5b7ae23d77e0647347fa40834aab685508d50c98f1155ac4dd71ae445d51a10e58f8050ab47dc3c7ce035f52f955a66e936532ef782bd54a3a8093f8fb0d51ea58ab304229c6af42ddb83bccce897a7c01fc55838795ad3fa6e9d90191d9448869e04b228f921b0f315c9ff63bd101483cf2368e9ac206a2c52b60d3876e045a5192455d7db5206078c46282c0179cba721917649eac39369e78f6dafab611f3cfb844006bb537449310a6cc0dc8b8024c80d8de613f5303a5223ba4e562f7f00c656fe1286c6c3a30cd4d933bc607a0afdae33439e05e7d12b8cf95a4923121b3df0e9e48e1e649e0fd0720bf07eddd68b52e7e52fb0757fb047a8c0bd2967019d0da2c037afe57e963a717a0e404874e6e25764cf43e93a1e4fb17371fad61db1f7a363e6305955bfaf47e9aec096712e42c599a97b9403d370cdec3fd24bddf82ecaf59e09fc21ce8812fa470c13159e9e325c9d53c5e8df7134367ae3027c79a7c8ef23199838ebd4a7b5dce4ad181285021ebb8950780ebb86687feacd57e237839c55ef07ed287d92ecc92662384fc15d704df03b38e6c32b475f3cd9affb2a5ca0e5b287ef93e60eec91b23f099bd8a1ddfbe7cc5f7882d0ca02bfedb4f5ecdbbf67cf0239c2a2686ef451e7e390d3e00aa2839dbb7ec01352764d3ed0495526441992a031ef89915f32ae2a38c0c862033e45e83d0cee245168a431f7a7e9449902dd69caf7ae8d50c264cc64608fb5eae721f6f47af25f61a3ea886fb2712a8d47a7e6cbd75f5faf61bb5f7e7c9091f39d239412d0e2f17c8f04ebcbacfe524ad8854853c0e8b219867ae2df3210539e8ef228f05b30540a7db9bf483cb33be11ffb0a60224c9855e021a3c713938cc268e45315d0c25ec2b6e6d539669778a7760000cbd26d175d58b3e3a745a5f1eea2cea68b0302789899fece84eb750b40b4e90f89942aa29f9efc500b702a5221208394ca478f85c51c776df0752d919bc68f607f1e308d7baca8701f31810408ea4b5cafbbab7cd5d9a3e6ba820e7b7cdf688e745282dbdb6cbd11f5f5a9037d2958a97330d7125fc2ef0e04ea7516e585e8d91444a0a41731d24382088d87948175dc54fa2945f218d86eb538bde1418804e582ee68f8f248f38179b88c68cda1965516ba16865a7aab3bac2e225bba7214c4f06409ac08400383ebe938e4ecd9242a96f7aeb39925daa384e3ce2a2571fc86197ae8096a4ab9b7c868df34099fe291d3acd19f2e64538160fcb411094cf607370347ff35b3de8c2a90ccf6fcedfa4432d3c143b5c0a970c6a420165a2c0c446e91c8f37b3f09892c5190d14b0d97dc18db83c6c89f68af1fd96bdd0f9d504424c50a09033669da5ebc3607663d949315e0a80ae34491d435a616491b315e3e725ad18b3144fdb7921808697963aca04ec38fe29c64e57a3e34c1f0cb52ea107519d385e3fcc8bd6f286212e8d9eb4271c0a8998466c6b4e3596f9a48d2136e4513502af0fe4c4810618c8d2057faeb4129b1f6ef4c2d77bbd12978dc8e6766ab205a5e209e9260fd7c0c8abb9c7fed585a2ae4013c48c5ca806b89574adabfbd43173af975091841ebf40993de8902c5fe1f01c6c38fa6303f2faddca4db5976fb58fecd8c6187a7929894e5d9daa8a4967d82677feb5621b73175070986bdb592a54165f03b98056db4fd6148d873abbbfa980cc4d54bc83b68ab7488c66ba9202f7b52230e390d54ab9bbea0335ad463c324e875289270d8cfefec3d520a88bfa1f4f83bb3942f88c1978b07d60ec2754db0e6f5567aaab98ef0fa292392d6e9b794830d264d2a6e29628cbc080a9adee14fea3ac2c017897ff03b9ab0f070f5fd28dbe208d18fc31fb5c80a741699606792f0ab930cb4dffdc619989858e18d7adf4a10ac3324037666d98c95d855b68c0c51523aef813ef53068fc94da251574be30d7b39970270b8c7f625053749342e98a64e180552786af7e72f50d9b6a83873515c6c87948248e73d9ed06081730350df0c0e8badeb1c197d503e935dea075a96eb4cc2e7a772ff3e7f9aa34388e8f5a4981bee82436ebcc633bb19c4e2516a531b64a666cc35d4110a5c01495f941cd95cf0a92bbd656ce2826247607cadaa596ec083ee37246f907c259df7156e68bb8da45963f913aa964469e1c85521f07538b73d257e576697d1ed5b65548966730f84dfd5e32c3359be07b561af2791008ec6a55256d9183c8befb703e813d582d9ea68473f95f081235580cf5538c4fcdbae0d682760828623a7ab7ee15fbb7f990b0f53d1a68df7107bd08e623162a1bf540e706e3950d7b2abdedc00f18b5518f4b6083ee8ae40a131b611daf77fffeedc181387fff17f3bfcc1282bbdbe722beaf9420e1fcf044b0956e36c2722839a9075924f14ca98cb2f84518bca24661fb793db79277926662a62980f0fa7451ba00e3c7a40fee6d4277b71853d09bfbe64be7789c2c1d6b120d84103da1a0f5ce8462e5af18f13a6a9137e72b03d75776b3bc9420241cec650d8ad7064c854001e0527c48e366e5d2404d761cb10464826b3c5941d7c73e92ac5d11fbc1020034e9012b732e2c5d63910e39c11c925d96c6ccd3f627636a84a0020242334e2c49ddb1f4ea464ef4eb5847aa2fe6a3569e827e13e9cdb700eae73606c5a6fce82026da349d81417a58fc86db2ef4d24cbcec1bfaf1e55378f22374ecc2bb639345842973c8a16883712e830144429f3bf2c3fc3253b2e3ddba82f94c565ee4cea347824c3f7e451c816408955dcb356b789cd4e0ed9f69635fe6093e95ad9622610b2de75dba35949ade5b718ba75fc208f9156f47b0774047590bdd45101afb2a270088bc5d6f424ec5d6a47dc8e443e66338cc9025ed25b7a8ed2463d79f067285bdaa8b1f685ebc6ae110ebf9bfce908d2244b91be6438caf5329ccf4b1a840f22d003333ffeb26f19a71235d2ddee79dae3432e6a6d33127412ead1a9cc7e45f55e88abdbafa111acaa78f2b152394838832e3ed5d48e3d3604234dfe50a395a775ece599737a8b54e5d1ac38cfc9757a89aeb1e7d3dcb6f2cb4551b8ad72eddce2ed9d48076672b130f3b57427bb4e518cad34312552b64b2de4f8385ed64ecf8c515e52e52f6c1c57c8b0343de38bfd77a1d66a637f43c10d058a9c0afdcab414004cb0088b2b25c7e5e2775327f0f0b49ec19bf5c4a88011b6086038bf5d4d260792f5212c0cb4701f63bb18bed2b555981532f63c3a234589b342140a3004124505cd238a7f3b0af7faa92db2c5367de3b43f22e2d1d6079d6d6fdfe4c4fec86e7be6da41f3d45901a86c0353ea47f40184556e9ed31485adf037faafc47453f961e0b21014e7fe49163a489d9502af29f90611efebfde080dcacb3e1046d940549fcfacedba9e41ea05430e64039204c574e26e8b2581dd83c040a5132019ea0266aa6c779006d168e3c7366bb83183533b8b68d73380657f0d11a5d8086ae09621a958a94118860d46db76bc9d86f6ea64f1818c79fe44a1deb9720fa0c1ec1c88cc6a5718aa252a69a4510022c64e0a8644b41ba985637844724919395b9d3644bca215d720671f2f5c3d920b4f804f5c098b5fcd174ed949cb4dc4c45fe4b87d930282e7b961cc685ba68b1c069ea47062f53951eab2f37f628e44c04165fcd6603bfb99eeddd46ba22d0db023cdf286cef1b896170dfedd302f7418beaaee7f306e121f6cfd7a99798e25a70bad7744aed85b9c3255486da7cfe7a80a001f7c389cffa208de37de1e000a47aab54b17007ba15613e6e30622135527e1739d4de29c919679925b4e487aad22df21f647345c3300ab4744c385eb1cc1b5cf031d95e4e31daf19a2c11f9152dc1c2395fb6c48fed1e8e980d36657afa01143d520aae0edc001feb1db7a8292c6678dcabe480bba65b66870caf8754cc913c7e128e20c7e030664b18434ca309c964918717dea1b8c962472b3559427181ac5765c1e20ac15308bbbe772affeda728e6698b72dd5ad56e4d38d8e1e46ca48bf8d3bd0d59e5a97b7099a10c7425a20c007bdfb0098f60e4e093b5856f730198b3d0817e5c5cf648bcfcf9f0f4abaa3a0b90b8c7c3abdaf0102991bbcba511d2128a6cbfe0bfe3c0bb0921528daccd311da36489aef0e72ac3b8f7c88d2353c3b97fac589127f7395d5f87d7ae0190764e21e719e5c53d899a5bcaa280ff76c95f4ec54a7160380a7c4eedbd1035abb3ca39eb2bb61604a10fd5c67fd1854de77f2564524c07397667f2dedebc54aee02668896a8be0bc5d3f6498032228065709952d18c65a889a7084c95a292654d12fce6dd9ad48be7b32a036be87b48f6c2c5029ab8463205199cfd656cd27cff6f0a99530243729b71eb90cd2fd38e260555eb06cb1c83186c245a493263e07f3236e28ee47d9938d7987f92501727b1c9c52b9fd0dc2dbdc374e115832f90798d42cb5131cd7d27e7f250fb812eed52c73f6b87e326e3747209fa1889e3c857373a2fe78fee1425530f8ca3cd8d659d88b45304010c08e4779b614f6d9e7c26912835b46f11443e67dfb643a5f88ff301bbd031991fbe1ef549f605a49f30e37758d3814fea10003affdc568f5887cd915d2004bf45d3fb946ecf9e172118c7c7eb31e6093a91f876eef2f079610712c959b389647c482671a0bc3849f8b0d7ffbfaabaaa630a6f35a0753a37cbc5c47c7fb6b73092ac7208542e427afce17529da97193c30f14855e5cea018845f13edfee05da5b2bce0c7ee51946f8f7248d8ae1247b6705ffc027944abec76cff30c565f2c19462c130ccf318790a909a7982f8f43fab6502189fb735ff5f6ab86ce9831734b0044075ead72cbd8dfb6c51114fc7ef7ce5879cee0e4de33e29fc7a3e564072328dfac52de920044c96dd738584bfad9eb286f2d836d36c9b05915b5ba9901810af883395a21677f58f22db239919be0dcbd26af3b9556ac1096e4224b822fc467131e6d4a92fbf82f395c9d61330a667ec6bb9043d064052960291ec9daa81472dca99451e12cdbb098a01d53ac8c9e489867a5e00c9233d39ea183e732f96f30a7c2828e5895b36cb5ef12693a027bc48490bd1895a03a35d52f26a2403eadabf213bf305486cb69454fde2fa623ac14dac26ccb2cba5e0e703d77c7f8cf78a020666e1e1685a1910d0e08dbc9014e154109593b3a51f594800052e597a8dd7f7ce4ee26d7166d0fbb2f5c8fac448a49f79e21e4e2f078c24b4b17b8fcce61a27907363fba340cf9d5626233c4bf750b9aaef9ef0e946bcf84964760ed35e949697782603bd96483de70d05fe3ce5cee56b49affb1a07b51444e8c84f8b92826ebb6989daf47d4acbbafaa497a45f0c065336adad9efaf8896fb53b157e86ef53bd81a11094f87932743b788ef225d68c9b991a3712b4e093a15ad3c54fb3cb02454b09ed7eee7a926104ed31a80dc78193904d53bd6f7f56ae5759016af2fe32e14dfe2cfbe617e342ea1df9a3e60bb332674f5bd97c482d43d39c021ea183b15c2ad94f3b24160915f971ffc0e3c4e6b5d5f3862477d5768c50d451185d1237c40d193a92bc37360134c082b092df09d62bfe14da594404c92ba145a5b5827f58bac3e5b5679263baecb8374c7f1c85e677613deaaf5cf33ab96fb91d7c136402d91df1008691261dd06f95d97540f6c8b6f2378a95df5bdbda6031cd9f9a8a0c84d7a8cd210e5c9d6890eeedf2bb71231553e25243e91bff73ccb2bd493fb40897873ba24094bb3a3bf80a3cef2246bdf46f30e4a7f46060d317f483c81b5d67abfc8aef6816246a7dd2e83442d5e5abd99e242e081fecdb668c5c38a00687ec8a5958bb1c0426d18fc3fb943b1510739b093d8799641c957c745486f9938a57f8318d15ef87e01e6bf4bf3553d667842d9cc19a4c864581a6c50a9a0bf1679d9604bdaea3794288886900796ec1f75ff8784eac6830614b40aecc9cfd7e33eec3509aed2d65c40f5c67f61d1c20588b979946b5de7586f081c4d4db1cefcd85b313edc22dc7445c40a6a84438bbbaea0f800d04d0a40b456c98eafaf3c8a6c088c971cfff80bed5dc3cbbe1f6f366dfc2344d68700e4c6b8bd121a86c12d5dd2e7ae6519b8e8e3710183fe0223efd19490fb448a1cca47da3849c0afdca6993f6d64d98d793c096ad9e26f5854bd79d9d7d6aa9ba7e199d3667ec78e16c7b18a5288d81e4cff137d167a829abbfcaf80983178d39a667818976d7d34822d1edb8e569ae4b4f34fe804c1efe3c02a6e3129e144a7c837f2bec0aa4a098ba43b515d9e8a157f0346ef9e10a9460bb33053df7908d24863c31a9f73ab71e41d1a2ea498a0a8858d3c271319047cf32f5b27eb60afeebfe03b1aa65a2b30a945f75131a6e5d4af0956c1c6bc572011e05227dad28474169fc9117d17c53bd0dc581ba403be0206232eebe842967b7b296c0e09c61f43c483a7fdb043c81d5fda393010ed2d6439687b1deef4d0442e990a579ef38dd8560d4c54a668d52d6db4cfa039edddf1763dcd7fa17887b1bd3f2fc99325a6e3db436f8ba8db5cfc27b74833661c5dd8f29e0c1d6d8b12d267753cd3c1f60e303170e0f9983319027d5e4d3f237239d1f5ecd5ba5aaba92e7485c778ed1d2f59e11cd066f92273b3e7735c54fa76de597d7d2d3b4bea5563cce34272e3a68078b605f6248417754b5bc3e9cf5186b365014e0a15eb85de0c5c8e824df15352b7152170e70b5ff8245e23e0909df929225021292d8bb82d5d73b19129310c25d1061d220cbc3da8fcb95c3be9a632f541bbe094db9a5b29e36b1d3ef36e8d9d7042141ceebe423eb84096f2726768a6fb67045f48da26bdd820f7584238770160efc558d13c2b06865a42a80425fcc7438a137b93b9c7c4b39e5f058ad398d42e925ba6ce0d04cb6af4d81af6dce5b1398a9728854cccbc12dce8f0c050084b695116e14cb02f096a29d7b29c5b77cfe6326a7b2398eac8980432b98d9e91446613f916cee44f3340e3d5afad340368ff97f9990b48f4e93319e38c77b94f41522e5e4b639ed0306c8ae3673fb5cbe4807643eaa2e299566eb41d25e2800b9ab89730422d824a21c9f8973bb98917960710f6bf5ae7329546a93085aaab36b6df6c02d0e67292d591b1f7e9a72bcd47eddb80c036a5e568393204dfc78a3d0d3aada58f89f2622c0401f01adb0edfae2dea9a84d71f38ad23ba92699d1a14e5be2a5a33527548f6a01aea371cd519584477f6597cd7e4b33388e6946057d26d7406a28fb99aacc56deef6a0c12f3dfb0621bbc80659ae9b96366f7be1f1f33db0c6059463ac13b6e54b1cc8fe3491539a68ae69557ccfc4de4f5a1486f1089b608bd4f2c67d912bc086a5bfee0e1a5a4a70789974c072cb57b035f73cf8eba813f4cc6a1904aed8a660ac003f446802f670d7cfe00ce09195c0fc14efc106b7ad6fd5025b2b978a22d66de237497c63e0409c08a3b929f072f3a54210ee4fb79d649583955e8983957ebdaf4b72b41aef395e0a910156705f068d1ad85d71a506c8587c6515115f72e55ac565c9e31bf5905a706a68bd80c303b4c86e40e4ea6b1fd0a1f1b7a34d34f8e1a0a024448861b768560985d8156f8c254161758a62de36df02351acee5a3172a33ca33a0caeac975d8ebd588cfe164407f625e36ec46731620a19a280b0c5c774fe0078e63e5a41f2a0feea8d66dd3b18cec36c784953531a2a909bcea461746a6dcff626dc24641dc07d79706920ccdd120087b0ffad13dbc2f48529415ff538a1b8d3637b308db0cd1dfb61eac6db235938ca1ce53fd4e72a91bd792603dbf68f6db8a0de4fe2345165eed37b78458fec39b5011a94c46365b4ef6fcbab4c03baad592a376d330302ce9970505f9a20daa33d364f495067ac9f6482e3cdab6e5c0b36caac454bb26c096c4302ebc7a403e42534105d8e0cf2da33993994291c9329188fb483a8fa44f72bbca706cce5a701bd386fbfd9af577b159c1f60bca4504c2b2b7b3f052de7da53b3fa5ae07adb58eb392f4ead7516a567ac7c6c3a04bdef515bfe26cd8e27fd862ce41776013c28a08561685d58b7e5fd2ce26ce2b01f40ae4daecc5d33980fa9634a37750c0672c13b4f12a12175b4e3cd586a3d503a3d0dd7d0e8a93cc0e88ba7876936626441b29b3a47b494b6d75aee5f0a69c30f0cf6748670d00bba5b5b7ebbeb7c18c759637c482f608c1252d7799734240a032a25f21b5a5519b3c532a8a5b384629c9a99514f594bdbdc547b0f323c21e21202fb48957bc8d9a1182c3883a26b35c99b3e99c714d07350ead7e77874d1530182993562321b484f453bded56f6f6ca68e4dce100242e40a920365a713af39c5221ad548947956e40b7b7a922655536c02d4471d60a7972461bf4b82440eaf03deef70d65b39bcda25305161a341d64e78cf0dba4afb5dfdc668c4f8000fef29bc2d6e7965bd8ead4eda80f0c9e8c63989c6dc2ef9dc211b23fbb892ecbc2a2ccca367b556c142bb7c5e56092f30bd51db1de7d1d591301d0a729d2876d620f0272c4972aceface82d4949cb8519c6d2ff020674e8f4f9e8633a45d49fa3db0dfa16e15c3fbd76716df10fe11227c61a65ec7510e6aae4f70ac3afa12375eaa8dd8e631e158901c855529368a2587c029443deec609dff5ab4d55bccbf874d4c7c86f1a702b35f3df1fc8f7a5f11d7bab6705f4f8c8768ac790c0db61094757e02593682c2451a9e3b2224160b17e50766d2dc47aa7af9147e0d8a6557b4e8ccfd8160dcacd68910e70a960e719ae3b9880360a2278ebe8997038a24b3394b5cfe4edaba05dff9f3a2d4951bcbdfc8731a31624d391fa8535401b00a223680d74590da2d04164f7bfdaceb05dded4f5afa3d3f9cef7372eaa3444a0891e1dc08534c91d85fde4e34bb173d737f802e26ee37dde2d028e10f7c9c1f7ab3eb4bcac6313f7e5e2014843d99720332d096525dd032943902db40211bf5438dd01bc8f31ba17d8c411e73b904fb04c4a99e7d21375c0a7dcdbc0e967a6fcef50d21f78994ec554f14c84573078b6188caf7d0ce76ccb3081e66246f765cd7af3dae9416189b620c8cdd13ad9fb4f1642cf085b7adde4741767ed5b0e1bc419174249e3000e0205a38257814c16621a77a2ab266a391bd58d2780648430c3550bb3ed4d430cccb8358763153226ba3d7bca712605363a4dcb0b3aae418d4f473a88412234018ae85c684c9fac930ed23f429eeedec626b54d429c68576ae9e43374c8be7635a53dc6abc4f678f3db3c0b19322d4c0fb8d793542b99f4cf4012bb9f8a61d000d867e04e8fd52c0fa1a2b28f9e334523b69157bfdbf26a4808ca54de6b0ac9e7ed4ff158975a1e5029197ed4a67795f43b9404d2021984061a5702e05c81c8f261870f8de44c393dbf24fa0f94c08eb416be5f5c7613aedf9fc5c1d244f2ce3172881b56b7a1ab5eac8101e548279d365eb5f463166351dc85f661d6f5cddf3f27293f8f0f5620771d5c9a9ffdb72a726ca1d11ab4cd15091dd31b5ff4f81c53a34396eb43194ca8ce58ad806687c1659829f85df9149a5e87c038bdf3e839e463ba67c1d1a46af6e6307cef4698e6c693abe3dd782c2e7b3d1cb9ca8d9c6f730e0ca87922019cf80368283fb180b496de8e8f2ad7f243d13a6de1f6f7881e09daa3fc379aaa0a88e8f2387e7be1c8487e7417f6ff79b55e0e7a561beb6d57a7bef7232a578563871d8d9f84ae2623a8694d5e65f2b7ddee5dd76626cc830c6c9e3a71b2fc3056f94cc2d92f4b49af6e19df4771481e29c56e88ab803caa4f7cf1b2083931de9df4bde92400fa3798c1ddfcc7583886bc3b3ab34d47bfeb01288ba8910a2064735331e73579c4fc801a9c78668a0abf97cdda68a26548c732cf3c56649573c5189595996b3ecafb109250cea715cbf7ad6dd6b2135d49159b15d3f465afc04b10ace68a2bfdc066d344efcaaca1405cce4eabe5566b20c984dac35c6732a0016cda15fa90665c4c960b2b763769cefa56aca292a5c94a138e319233b1dc08bc2e3031ecebff3a5a8708c4b0064fe041f872a255e5a71d0297a80a1ea12e30f233259a1d017c20672cfc12b7eccfac01707f01d773aed94278c531fab4c24bc965d63e254ff232cb39a8980e6332d008306a4d238fd11f330086e381fe061c7bcb51136de910c1de30438a115d3f5824deec10692146a138acc0d937b81fca431d748719aa3c6d91ae0381dc40c253a3c309f06efbdb452b49c98ff994f008bc8c84e801e1bb4823eba17408c0ac5a110e029aed48031e8033beb8546f73ba7aefee686c1e937bb49a499da03ae8577246da5d5b0bb222fddf059c4e41507a2072d249692b8c9bceab25661876f1b17190a88163f51f54d2d8d9e3f832cd39b1618bcbcd6f9f166e57a84cdfcc763c8959970c1c1e9e45076630f146c351aeb0a9356888bc263bb54dcc4bdf5a8eb23d9ebffd99f968ebceeab53c2e5a6af82692b113ee74520820e2bacd40d10961d1cdbac79c249e37c5bd67c4c09611d06ecbd963a0b96d272daa62806f256707540d4bccc15832fccc26dce248d661a53ed433d65fa6eea13e95fd036d349da610b144386a864aeec7c621ce8e14413fea7fa56106b2950e1bbbad4712bf24c46cc3a1caabbe457b50dda2da14bfd8e67ef6706bd4cab95047e123619ccf8735e94f0cdd1d2a9ede579502684f146afde15718a65086657a48113e5fc97a083d7e68eea7c90cdf5564c9ece58f61cdf323d94c849c1f6916e58ff58b6b5fae759a4ed8da980e844e796a07d2ff9a744d838b36a802d343486248f5df30a9e3831a0cb089dbaed875745e45b39a779517c9c84ec044192504fc04e968f4cd56316ca2ccd787b7dc82fc5f119e5fedee8647d292565f87f130426c33d46b2100269e9f1b15611187d590ea7c9cbf54dd14eb6c169b874acfbde654ae23272f3b9eeff5c582b286bc7b95ab2a72293c26b6040a3ab6f4ccdcb472d8f96488840e3c06fdf236b4b6bed9625bcd34e8754a25be2fbf192e41eff4ef30544fe8a33356583b89055f6a2672e269c1d299332c3b8497f85e2e8c39d1fbb902488690e2c36b9bcd8be93ba25a1c83187e060a47d6b2d12d552032a17c721ba8511283c69d6bb39a1cd159123749bc9cc837f1c06cccd05829759379d659f28f7e89e0afdb7371a21c8a2ad9cba22522f24c2cc15473ea3dc68b84a03f752fa96ea316700d44e2338f5164cbfad6696737a60a3322314eceda3721cf8f96e16fe2889ffb75829e348273d3fe3814bf501e8ef4ee1e66d6f383b549b17c5038a670c279009263299542db7e35b5417dcaeffa0431e7445fbe6bb9d4a9d72fcf178a8c36d060f492535628adf9a41b2042c0c8ee5636fbf84b8fd03853061f50f580dab721e9253d2308992845457d482d3c8335fce0d400e6898c92572151754bfad89edff56d39c779394727186238cf48edb446df6eab20a689fcd7d9f78a64f938c5b5f3547d9c999ec6b940e6cb54514f25870d333edd963628e0854a02ac61761c91f5e8a49a8b6731eec978bd08e7f1a22d3252997c79a7067cbc257963e7e70995084cbf92639254dacd2ae0ca368d9cf20f55aa43d3cf16127bf72af077cc7c960d526bf0c5c85d137661724d6fdb81cbddcc3a5ad28e5e54b92c0dd82eb4c2acb93a32e58aa84eaa4d7e749004762c289c27da0b06e15018dbf99cf6110136b31a51b842645bda091a2d276e787d6a45ac6ea2bbecf1b7bc2a4b3ab96ee4ec920fdd3a2a1f47287d3a73d902359b7a1059e48c2ec8f9b967ffedb1d268a37dc63ed3d0a6a8602afddf329f92476b56913fe02a505fc5082349e16d2dc5e25fa5fa21c37e5254350f3e24dd6c9d2ab11cb96304cb6f375f0878772f3a2feea348cdd0b4f833e9c2d0bd316620c0fdd1f8efbc477eae71a5b6e77f21674c6994044c1127e8c0f111cecfaeab862eb4253dbe9f4dbce15713a0bb6487993cb9f9b29069b8b769c1c61877082ca307aeed21d179654b9c98b1afbfb932a7c61936df14263c5682f17b22b461adabafbf42b662204a2295c296f335aba0f08e3dcb0727641bddc6da65c2935dc158cc5f4dd7e25795cb7dd35b75232d9b6f25b66adfd5547363ed96f7f841b6ce818b953274929d62e6394a42784ce537e74f99c643210505dcfda79f2b38785c91c5722aa0710bbeea4d691481c955cdb430820d90ca158b3f54c5dee0123eca855bd7c502349275ad14d0abb49d6a87431054ceb699ffb813fdd58be57f5cc53dc67ad90fdd93864f829c74b6620716742dc6692e8b81251c54d05e6399affdf4d268c317da064162a9485ec7d26203eb23326d51414b5ab6fc3af86793f1f52ac4ee5a04a05b1fc6da671710bf92f187da9fafe1026a0fe3e1d5f742c0c202f1847566727a60f66dd55fa62ad4ac11f51d9f482f3ba982bb497ef653c451b68a64214811d8598f854eebc871364a142354cc58a2b6e69d71288c120d787e70be7595bd42fd587cee7f464aaeb281bc4a4eb39525e7ec479a40d4c89bd5c16b1cf89b20fc09b4db1393e8728bfdee021d60d19b955a134e5a2c4f72bee872303318242cf944fd927227a5c0b3fe69a3de73806c6dbbb2b69682889d987cd0798c933fcb1935711dfacbfd9d13b7555b70fb3b22cce88f8d3b22c84045e260d3d3be4272ec1ebb7d6600c92ff5dc72c82324ea6bcbb9284934758caa06d7f3d21302bcb26b0d5a0e8ec4cbea1747c76a6ae76fe83bbd6bd7c14ad690f37f9cb5f6b9eca7bf5fa83fbf1fcbf272ed47555e48346fef9c73f8e55ef59904bf0174a206ded923fdd11527eff11d66ed73f8feeedced80354df7c0711db35ebf253727fc346d2ebd663e76fe0b10b7f5a7cbc3545467e5845e924aa9b57b5c35ae2d21c505e353beac89096ec268e91979967996362aaf9973575b0141a811f9011013088ab80268d7be49473a46b89d1b9409b922275c88b63f1d9af2214da24b321d9fb102eb70c49239c90e909d980dd84f955c6b0e50bdfee2478bd7536be904ea128d1c420a0665b0107115243a3d3aa267131c2ea5a46e9b79f244a5808a2d415474659af1e0b0cb2e4c7a4cfddf7a54e1a447df67c8fed32cc614599e0df7f87e65cd663f4381eec7e666c1974e5c64bd5bfdebab33c8b1c32f915cf2935cb88170e312796880c730e8264fe6fe8f89b5dad937b1e065a7375eed55550d5e5081b06c4eead82ef9347f28cb1cec08e54586a018143df45382f0044fefc18c6aac7bbcf4178778f10132c01f15943aa3b3508e7f8e71c151316a4549bf08c510fa320e3647cb559169d18ea1e6521002269d794d0d4eb5931dc6ef484fb7b4cfa647933464f1ece822047804038a4e73d3fa83f223c717065fe758d18e64fbf430fac3796e4f46111519b972f5b1e8ae9e4ac462eea3b4eddd7196e8da0258280c0a73cb230a6276d3fae5c8e3f57caf73cecf70c9a469e89af3c51175923f9a01f231d2a9512977ac029edb36d796b7d1c2494a3960e76fb2f9aaea6987fcdec77d8e49cbcb36e77b9436759a4aa7596b3aee1d4b839c69b35b1bc38959167cbaebb779598a22bfc589a6b3f4ef8ccdf22f5a11fb6bbc4398ed0deb58aa511bde3f4f3ec1fbbc065903486fa6c4d2c0321fddeebcd1504bfe46b753f1c7a31899bb8f5ae3c73efa9f55bd73d5d207c8999703a4111e79fbf819e622536fa3ef0430b32ceb9a4f3a08d44a74a634e19f918ce22e00d5debe638dc6d6daa1a6493f53eea05985b8242bcb08a48eec1176158454a892f7d4ec31408e1a21c9acdf62329d6dc5220b2a29c8fd6d73c87fb387f396005d43f72d13c1081a56760f6e98ac824dcf31f843b08f04b4585914dffab7468a3f9a3393ee3c8e1625dc67e38b246fe0a0a4059f5ba877dc6fea686acd9eaab97feaee8a6361b1aa11b3d955db4e98ab1d0a3ce7f43d4463a5a29d1c79353e8c8a1dc3f5fb6de712d9e5791fa58fe5e395ea75e66a2bb996d556a99b3f7695b15ccb1637dd2826c65c64e01b5231f5a098c78ca273dc646e949fa3d41f7acf5d697ed779f2353c0e7fd780e7d41469cb258180acb8c03824f333a1fa1c3b2fcd77dbc1d243b2d09f8a360a32757bc9db6b9b34e7d6362af0f0c4f882fa851914b34e55d8537dfd54b56e9fd284aef5cf64e14e966b24b3e7c8604c939919a29856effe55082e158d679957777a33e2c3b8c36e3785a04b6b25efd136bb436373a8688d0e8bf1bec88473562becd4b407afb717bf6eafc92d6fdcd20de85a96c33d6094ea5fce96845a279696a7d56ff9d13ed4e73754de427d35680280de64939af7fd6a417a6dc2bf171f4a09cdb5e5d732229530ce30ac744e646217e19514b758df3c72a159f34f3ccb685a4404f0bddcf7f59fcd57b16cfa5597647f276b6f84cad0e1b399d5df73ce63886cfd18d9d2e12cf237120423ddbd8177950854c997e45b70a752d3da44d86b0043dbc43ae0945a0b8398e750db0872e01fbd57baf5324475990ceeea5d339ab652fffc80bb094ded2ac8e9589e8cb26aa1374facaf67f875f7acb9298369e5bde3c3f97a2b07feca1fe7f8774963e7a69cd61ed44251aebc58af00dff9bcca9f54e30feb08acb6532481527b144ccedf3b81dc4940ab18a3a34f2d99b388c3d537ce6a076bc8b31edbcb7485480bfc5088fcd3eb56985deb6a829e5e1c5cfddc674cb7bc4f0df2bd38e6220b0d9b4a6facaf6ce4f456e19e1ccc7afa9262686949fe77e505b5259ac0a7746cb8cb5c7a0b99a00b5fe2f02f3e76b4af30e5b03212723e18f88e537e4834ce904fd3ba16439ed6bd9c1fd92ffafcc75659f27169475c12b48940eb41e767197a9126187123ff3143e8d6de7914155f9a5e8536265e6432785e6f7a56f84fd8788be772f6d36e7ad4925cfb8b5a130f734f3c9b84fcb53551f285161347600517e6aa1f96321064a006a3ff16026e875d9998bfe60c605777e53eb6f52f804c255dc0be0219e3ee7f0151b29d201bd3945843fdd1c5c12593bef7bb6e9136b5383632eebcfb733bd922c71454b7a30eedf84886fa932fac38014251d51c80196e4a2c46fa6384c1ebc25576c0e84d89fadce93988467072505c60925beed2f0f00a1ba1dbc371ef30f75712975182e0daf6b93b8ff0c333faee21bf47cd427c7821c8ef77be89b549682b9f41e63a2d207f28f3c2067d4222cb2edf27bd09826ba01e7271a0eed171350f677008bc4fc866e7b80e6861d556bec1a101ccb803d1054cf92959332bd7fd7489030cfbccc48e6f8d3c0de6a2a808b66e7aca534463c61e9fa50a78424e296e4148971a44492960e3f170dbc5dda48dd808dce3e872e8768610a22f92a96d97bd60b93f3f72e3513ee19331e621bea1aa901b9f318855e95bedb12da38b394dfdc9f5e5feb2a31a2313e83ea1a59b7c7e268e3844685840353653644cffdf1c4741cabb17c72e8b0fc75e37d48f79eff925de936e79a029777eeb7d3c761554073d0ea7fb6e0356f8d0ed3b5054682f9793afb73247efda8161c1c53c3b1de27221b76566de192568ba8e875068d5ab95b8b3e35812106b4788fe7620f17b91aa5d128d90aa23af8ce68237ede36453ba567913d4d45f348dcf79fe038acf6a2de7e5146b543cdce0b61e97aac3097bccd6ec61dca1c02b51c56341d3c05191e34e3f095975698be115fc3a2b7771069f7daa7d15191d4cf4ccb65da53b40f867661a5a7483e369502cad7674dd77bc7f7155e8e8ad085a8484faf6566f282781b9da6f97fa44a6d2fbdd68a406d611640f8a4964539f7f46964121731aec78d5b761c748272ce669e898567391d52c82e944db86be7f376735772e18c407f919c28cd0872285b86d6e07cd13e303b07d2c6fadee441c8d45e6672c78051646c78c5f81617b69d87a2168ab02bbedb1cb69f4869e118e5c1fad6d22de5dbc5d7bf0d24dff8021f714b942eaf3cb3ea80597fcef05aed4867b91f1b048ffddb7b1ad8ff5a24740993d8673ded42e81d207e4dbee0dc0e45951ab2367c62a2ec5118f0be671a476140867ba78ac86d82cca89cdfba46c7a876e9c8573994459a4aaef7414e6f67c4604b9f86030126272fc6cd214c55bf15173df6d00e55c4548a7c3dc9cb55c775998eb3251f45b449ebafd7b54215e1ded7a515d53a03b69593bc072e05aac3d7b5719f6b47fb7fa84c0dfc78a31e32f2110999534759937151dac65401190490464d9a509680518cf150e207dbf4ba529e1570f15f018bb0da15051f6f4d8464c4b7c7bff0822015caf69f97d26a0506b0a4f7bb1043eace511f1799af520a41e361470d687eb19af847083bc6e10c19cefea0d7aa91a03ab9bed05ed3f8ad967f33b1f6c7c1a6fecc36403b0f7ac4e5076f17f2fceda51e4415c35843c3c824228ce1df2b92a71f6e6d1ee846240bbb2f806838d97539700650b6066e9503d07c476a2c0dfdc74d8a65370607f8ca176fc8b4641f787d6db576190493484fdde08f0a8f4c01421a5777f3eb4d1a47b45547bc827c1eca23473c3a4b0bfc9fa48301dce0ec5f9d4afffeec354f7337e0ccd46fb72a99776c5733c126d45ab148f073892d0bb0e28aec4ce988a945e915f0d35438411828bf621973100a23cf3875bf20e420df749befae2b9eeaf590c70db35ce5af1cfdc5c118e9907957cf03f89387dead567b6bcdffa7e625ec331e2cc5fb0025a92880e9f1fe557704a6d4fe08469a79c36018524623c61b6e71b7de783b4cb7851c6542004983b591a5e1091a9e51772b13cc7ba94d76c095afadc22e51758d60342bad61037f82bad90ed094a795caa1e70aaddc8f9593ffee54579dc75d34d21b4de3218a93a7fcd916013ddceccd511e074dced3f7881ea0237133a1ca201c8106dbd053d2889ab02c3c377f5308642d9b518d6138c44830fa32d9a16645916f4a937d435efd88475eb95d53b539c09745f44a39fb5605c21f9037a45d755bcd491dbe328879325c5cbcd15e8962286b6f5dc10a20cc93ea5d9c50fbf7172bafe91e31b331101076fc616ef410b2f0034f107a41e678c11135d419b2b666fc1c54cf9084be381bab11434cf2dbdeeedbf5b9e7727f4420099cce65b1d833e6ff5b6a93b830805a883967be7483108575cd166c9b1fbc1d12dffe8d20fe7eb41337edb91ce9b423f772470c3c5f498ed0c3f284dc5e08a790339820f587b3c0399f86a5eadc8cec4939961ff3b4e1577a086192d76623c9c6265b5f16a6abd370cceb38d0ba1607560520ca4d14bf88bdf402a3bb55a7e1049526c839e279970a92b2cae2b9bc61a0ba99688cf4daef7e2cb3dafe68725cebf86185073526c2f0507185c3e6c0e7177b7f27a43d5bb265db0cc36ce0e2d1ff4b30029d3f240a6dc7b37478825e21909659bface4d4d7f75163849cd55711c038c193e8ed2e4d55d87acc90b6a77e0f15c5c8b741a25a7e6e4002d1c8e49c7db73d3ba2270901f74fdb062300bc0a8ac23c653b3c99958c05480dd2332b94310c01885ce63d8cd1e2cc30a20e907220198f0f1851fc3afe3ab5e86ca2770e5482fb20c1dd5c8547276496436ba90b2aa6b49a6f881330458fd0bd3c50afd9dad39b9fe678878fdc431a25ce99115690ef7c744ec0255890031be71a9ab10e64910e1824cb2d923461127c64277a9fdd68304c4edfb1a994c0e5ccc533be773514622bf856b4feae920cf73e6ac5b9f7dad3b3de160e9360a6117582d02edc858c251b75a5d275939a38516ff3ff487fdeeadbb629ceeb79d25586224b151b3174fee50fb69dce71c46cc72cac3d532ea9410f05840062fa3b57e49afcda31d29daf438151e87944ca4655a692d8349b9b13fd136483d1f19a50082c1d4bd983433d901cc4efecbd539203388abc0399465071a5bb02971b0133f5f68d818223bb970d57a7ad322f540c626ae15d97aa3f13ad5c59293336db4e9373e954090125524cb6c5a988a23f7b546be76a3b6abb01451ea757d93162cf66697a1d061fe53f31166cb05817eedb3edea9ddd14647c390d7d0e476de0810de4572115261ccc1b4462ee01322fde050f4fdd7fdabf5c9d513a76e9d3d3dcc4210e54eea1d3761d298b5b1700f03721679a78535130d7686d77537d4bb9a1e5e9d683a2deeaded358844f72e10a37c689c3e0bec5640cf046d258a3e27baf34a6f0ac44883ee0ea1adfef1e4d93e37de17a8c2feb906491f17499044c534db000658dab1fe01e7f211d16d97c60d55ccaa7b9f3112a0c7e1dd8c42b8f40077d5f3b5e0142828d17d92141a55924235f9a38048d87d6b71c922774f50e2eafff113758169e9f406f9d0e38cfa7a51682da88337a23f0a89040cfa50fc56db0bee0116cd0b9878bfd170891c747fee4b8d3e550e855adfb5e10e84dc5eb15a0fffde9120cf5a1b64653c27bb2d2a91fbc1aa5a6d7ff60f196669094779bfd99e0b78c05002324d85677459fa84d7558cab5e8445163c6d7d2d7ab4cd1d37d7ffd8c699881ffba5a4299c7e565edda8b3470f41fe2b01a1e04b51772a27331dcc3b3dea47baab2ef0d82157ab3cf21cbb3fabb18b0b07f45ab1d8a7b86042606987e9416bdff621f624ff0364c828d139361ec750a8bf05139c5fad8017481f208aae5bde3ac63e38bb974aa235465a45452e537ed1e7e1431f9e46b832624e7f282f7fab8cfacc3f76b2286c281e85330d321500aa4b56b1cb149654291352c995485b4ca345cda28f4093863ab74070d4c3a1a1700a1f6b72aaa8afd36b00b32a50fdde7e09230ff6f988153c90af09ff73b2ca07a576af32a28857b9f66c3ab81456e368aa0db1b753b85f38283f55935a51b9edaea60583bb25371388437fb6f85bad66549a1033fa7259af05a7ba539b282468c153e804a37d6910bdc3564662ea3fec09a7fee78ff40cefd8acba2fd6cdaa7309cf675b3fb46713eb65bd2b0a14836759f2f7fdf75483e9c7efba1a84857d591b97ec5740dd09156fb022ef1a5f3d9c5d6cb72d6ae9159aecc0e6c8d35c9d835f83b096a97c07bc30fd23311c27b7d1ff94bcaa548ca4b263b57b69ccfb2fb00a658d54f8521ef90e8a799879d345686ed7e746b803a1cfb23cb7f1a29f87c5e34822c15f5b1a4fd5a3aa691c735ea0ff18ca122de421104a425e9ed0cd5d261b8f2fa8851f94a090cf067d8fa3af8a608579da2bba84094a8ccf54c91ea2423a6b682fe6627547a579ca6ba5e6d4266e9b0fe4a40d195c77284645689c0f10321e50a0e676406730c8d40d3e8d6d3b4207625d43fd3a85fe6eb9f3aa6ed59e7254fbf63635d2d450a3ca4e2f8ce1ccfd1ccf015f5ba3b4dfad03bd3f5e23273b10f7d2b23196121e8eac8a212beec0f680279ff8ca4a9b1bc16e7dfd8798691fdf69f79f8144709e0202b5fe00805fe78a7e4b1da20c518dda3946863f251f153a8663f398ef4aebfc3ad70ddc0e7678935115af80a71cbab8f9c52ea3b1a058bd393d97cd8c39bb270454e86b1932cecde38ca99d0d55f86c251435ea015d283966ebbab14788d5ff89f0b48d862ecdc17a8b7d02dbc47149a8ed06fad7de5e3ee5a41e5c3e896752d2f497ff39b691911c3671135781cee91a2d9cd5344abbde950ef96428fd3dc132f6e75e43d0777146cdfe8a58aef2fc6b54d348474ebc9b1afc0e7246cc65ac51973d92b7666da6bfcac306f1998f6796ed3a995dc177a3268ba51a8f491552254031c292fba771feff75a5f3a03eab0e85f24b2b901126ee7a9374f051318bdc3aee6c998bbc9d3a87e7fe2bec0d0e041602c031d9bd4caaf18b32e79190fa27aec93af713215030e6fe787eea96dafb7d106eacc565afbb90a62e367864eabc5c3dc698d3ee18d5b6e0b4cf0ba0029d7cf5389955cbeb612970c24fb819e97e05d16ec0b4ecdd4c95ee3e881f1e9a961be691b9af3cc8e41cca8c5c23845db73c7defb89529f824597564c8c25721c4ee8b3b138e0229c4e5643044ee6a983111fddbeb6274a0fd7c4d85169beb049df6ac450c6874a1769d183918005ddf942da7a2f0c0e356e02aa1b77d229fa53c5ffe730f6a2be41d23cfeacc930d0b8836f5ae0adf3742232d2a86e4c349164e4e01fa5e307dae054ecaecb3fd2fad0bb853b706c0eb062f107d16bef873e60b9733d32ff85ef46c5c2843af102f1ee266ba9ac17f06ad232d09435cdd822512332b1ac99ff6be588ff7cc671aab51448653b5ac2b68f575ca185770abe06997e5ef09376d90948aca7c504ceeccd47a063d30ca26db154c0f38545fab8924b11fb21670d382eaa8e9047e282adfa870d6ff7bddc898e2f31f64e9d7515faba2cbfa0c3febf86b07c7fa039ad212d9c8dd68e8ba29dc15360aa055d1d5408a714560634083736faad9e357c7368acfc059531c39f37693fb4646268d0bea56fe1889b22674a6cb4c9576aafa9aac6fddadbc5c76a511fbfa1b31e7717a69e3a6b9197480f002111c36422fae70483b58fcdb8bd57d25470fb690caeead987fcbb109ace04f99f85ef16fe392b07014f9d9981378c31b359ff423f3670fd26e0ab2256a09925739b28cf791d419aa2996efc218d80a68c7d2160a7846cafe4552e863502226c5dad1c8d9450862325878b265c8318afa2c3c71289cf131c44679c2e3273a37ea74bd8afbb4e887de00e5ad2e98dada52ce2e11f403ccdcb4c8cdf3fd8b2f0826c5572dafe57e757cfc1f8047a91595192a75d765db8111cb5415a1ae51499f3df1a26b30f6d95d69260b6d13ca26f3ea0802d1cd78b1da90db2efb61668f1ca7078bbcf56a1f71f6a64f03cf23d61a56821d5300ea0beeff53818d0dee6bded07615e4d49816ae3f78af48d2c165cd0f39e2d8e74ed62ca5e7a598119312624208175fff683d6bbd5497c5d1d5b904b2bcbd5255c592960b376e4f7c8ad348a7e41bb92f63cf2bfff7f766d2aa5e5f31f1675cc937c3f3f699b015073e689f3657de0c9589def910a87920044ac27de66ebcf16a5d5b928055c2e06ad787bdbb7bce7fb693f0c7011f285dfff84b5498260b5968c08d4a7ce1129397d661a51b428296fe5f8a282cf83a0bfb64a27e881235ff1ae955d7638808ce249c69e3d7796b2f7bd849b4c226844059faa7d91d77d9feca8d66f282cb4eeceed5c68bc907618c7ad8a2d61c47b9fa7ecfc895f8c9868484bc8f57bdcc1eb55e89184ae99c6502272a71fc8d21c1b7aedc35b145bd2e83c2038a24ca5adb4a740e8e246fea444753fb8d495ea12562c50c77da7f5412b62abe18f81bd227a5c6eab1604b885087e2ac8084fe9c5e3007bba52f60ebe37eda0596cb9cef4daa4c18cf9cf38d5f0986ffa04786e4d438a46d6c6d488aa3808b7a7be9dda351972ac2db045f58fbeaa0aa3d6fbd758784e4926d4f49f8e5ed654bd2c7c472a9bce676f6ccc0de830b0d7ee82c944be716625f8b0382485b5e491f291631df20f4b5441fd3302d3c73ec2124eab8d62ef37fdab1ffe628606dd2af1884a1bb78b603b1c5347b543b93c28449acf7a1303b19642ec05fe209fc6da1d7f80f616afa5fb7b017e0e01f9d3d9e9b28630c3a8454d9fea07e3f569aff93e5d520d626c372d8d2f0b83f9fc804cee662441805a1bc9c56591683401896b4933f4a14eb1f0ba233bb9f33d7ca04a3af91e27a0e12f1482619f521ce69f23533168c8c52bb198b1c342da425e81df1587e6d583e5bcb7824606fbfaa5935302f8ca1b850bcddaeff52f92d06cafbe8553578927f38d192a4aa0c53540d4b02781e4dbfe602a1f6576ba1efc5142b818505f2fcf2d25db86582c1e4c975e2980e236053d9008e2753e5092fd7736172ee57d312e8f22f9e7453f5d8a975b722efe9d6954b28493b14eceafec30c41b8ab7ba4fa0160c71c54f09c4bd5d3058ee17e3562d7d90eebdb0f9d39c9df1ff59b0b1bdc7915ea5742f83a7b93daed1e2772f177e94771a7b8eba913ff0a779afef8fb68361b5959f2e152f3e3980b501730a352fac073cf183ed48f6cfe37a4f357aa5d99e0d43f98e62984e5971a0e50c9d5c68c60887868cd97f514af97564232cbabe5b5d6fd55124cf31bf8705d247705df3605c943d4a7a3d2e0991c7d252150e9d9306d331465aadbe3ea4ac0daa859b86ade25038432039a385ae34a25d338d9365cb2d5664f12910e81badab5fa635c2882c885f37bd43d35fc1af8a34f96bdb1abebe10daa2293ed95352f47c7086aeeb983f2bb357dbc08bee49df046ca649b27f030baf70cce04b77d058b0e87b3c0f0f5235d13c2ead63a63218be7085636ab462851107acdae5be1113d38fe35a6e3081e2c95f91ce20ab8346812ff06ce2f08e60e65cdb139770f6822f8360d8cb74e8d02e2850663670fb587420472f4f245e1ff0ab48ec68b2732ca4f859519ed47d643bc9df2edbb6478f231a546ba61c3fd452cfa59dec0358a4bfa11e4611bfdc4d2e5056d46058bc7bb9d83a288e1fd0dfada56530794ab2371f14897a9f5611cee5487d8d5b5f6957ea7b067347df05576c5356f3bbe60b4a0613c54aa1990b194c1441bdaa8c41625a215f1cf5ff808631231f779e29c46946984bc347cb47aad23a79d2a2333c2305ad315692f275f99f15c6a5fa6d3b02f02fc52c2cd5cb481e32d18b30701d949f3879d10fed027b1c48391be02162dee286140611907515adc42c6eacecc44b9fecf665440108b03c5b1bc6b3cc5fc2fe85d6d19ae02fa8d72a43ac7a96be76f7da030d78f3c443c0c127c556522b85e285a8a14d15904fc327781182c33943a5d5a8526f210d9d6a4599b82882c8022aad0170a1c5100200ac4d6ffd378a0cabd7596fd7c2307a1915199d337553f54560789717a78a17b4d84e614baea95b9b3fba9f21f2b6ad421946f4c3932d2a13cbe1b2be4f3f9db0e66cc269e01b6b845050241a6a3c830ebe008c767cded43428b1e3e35968cdfdb3960ecd1abf0632c691875a74ffcda07a6996485d9a8ab58991b6cc6baeccbb52d8a4d15fa53de1a0e12913be883565d46166a0c38aad52362d4b10a405906dbdee92b171aa4536d41ea78346496614db5c58983513fb0810c504076405746948db89012b3ccaff92e7be9a4a8f5d91eaa19e0d2faa290c5f03ea019753e30e9e199ff7097fe0d84899425dd36686aa764bf8e27185e3fb8dd607deb683a522dff48b6ad47839df1c0d16d250d747ada7fe283a3797f5e3d90d896efed1c79eacf1ea83eeb5fcd343b529af341a20cdd172b9ad08eea53c44aa2a5dd4aebe883e3c2817028d3f81bd597b8bd8f8aaf95d1d1e8b830b658538fe0db485bfe236b8b927de33b010a2b11d45ac34b13666058342a6c9d7783edbc73c72c70f97441401413dce3522d9a38bdf467fd569dcf3ac5b38ef7949266fee5d0137ddfc5531c49b35d830b1e8e0b7c9fd7f230bef85ac771e0565ec09a37c6fc4d68a303d453e69699193778b277f111c9e4901a431bfff148f7e891c2902283389cc154816c185806623c45718073dd6a08c9f831a0953230f28d8ea2271160493f84157ab1153ac09ba7d7c307d48eedea98ce5a414b25da3fb7bfda7946f7191b6702ce526a444c149a70268780d12bd51b039f44c963119caef14a9d432e38855eccfc71392e032f30ad74b0ad3853911fa74921bfeb9372c06d12bc582bcbe32ca78a31b9c049d04edc2526acda67d2a260a8066300ca74b9cae1713e4a4ec0ef7adf67386e214438dc55ad08b543c205f9cc9e941e1a16ec5a10b0625d878e93c27bd03d98f22a8b446c5e575a0ce4c25c4591e9cf89ee463bf3ac0f031265b2bee28538981826009e4b205bfa447b72cd68f291eb555f16ba38e8af436a2d09cdf2632c1f43248641a7272a62137ebe18762f2fe626a5e3bbb0580dec4a4b1ecf95c45e7a313e317f3dcb4b6ed113a8facdc8302f7a56001c2f7101b6d7ef8b8bd4bd71fdb6880b29f2a55cee8e77e6f1a2b0ea6ecc2a62caea79d0aa6fb1883bd288006bfc9b245d37782164457e0b3a295dc59230925e8031b876b49cadf97d000830a11a85427da57c4181c88830ae54c6f18b8d2f3d285c7af35ebea7f65a122696f7010b481916a355a6e5b3924da2c7590ac9d607428d8d57089806b22eb8dd5df94f75c625be017d735db94db49a65f72f33aa79ea219a0fda997b22b37f7e66309b9e85a275ef73d768f467829216eb9e5864e301225a92266a08779f8687ce77d177cdb640a9a1277cd6cd4c460e1ee9c6152aefd9613385251a5ce22c047ee5f0f6744d3e0e8fb17e051f44455a928c9789425cd4aaf4b45d0d4a0b87abfa8840c8d4f15187a76d606a4ff60defeda1c58e042fe7311a5543bb85e12c2e558d33b43e96089eaa3c480df24514a5454d6268063d88fcd751fe1b195ffc737f2e8dfe326d16d49f5a4c774cece92fcab4afd1e9ff5e86d00c8d5435b02a8988b305e4ec5f1fa8e6a9806185959fd437e6daaa288ae17a541e48db1c0a158de67cc9ba39faf1fba41b3479214ab1b50fbe7403e68d60ff7788617131d8009b797ab39e6561d37e5669b14a29c9190f16226ead42bedf0ce37ad30bee10950a65d98f20c17d9ce1de71d9467c101b9b5f988fd67118c65ff907d09ba3f8cf33e0b6fcd38bd3726a3a2283dbe3339c93cbc066428eafaae133b5dae49dd7acdf52cd32bda112ea8ad35bac58750558b9f7e5236fc3e39802c97b56dbe5a998880e00708c43089c2bcedefbf1bde164e45ba52890ebcfd43396438139bbd7bcff1c6fc4ec2e39124b4920fd0db8f9f7afeeba234817812783648e51a4413133a418779feb036f05f35e275d9c26aa8f5c383f21bb43f9bde04ed946f06fc4142529024c3ff14818ff4d9bf8ad0f7fe851056f8cd954cd6db400a9aa9b7556c2083cd544c38c5a0252a6c45be850d143539414fabc0d85adcfbe65d94cc8ff4d617adc2e99c48000bf3a8da433b174159845074c584a8f6f98556592b6a42459da8a9d0218739f594439bfd129b383b2994e6b9ab80ec125da1615f352b567ac58031e561acfbefaac0151e8fa27474b49b47452dbda744f38f7092378de249b77877074df73dd4accb36b7a120ffe3e154018dbb4241ad0854cb98c6db78988f17d9e4e1e746b3ace3c41fe9ebdc22cbe7c414b0b1153194f5eddf07daae277ee54978a859a370ab0c96a99e5d90a893e190f5d1c19ccb72a488ecbe321a25aa09bb17e803f1b9da9907bc5c48184f1007b4faa5b3491b37df5db15a3b8d81d82035fce862c27c6cb312dbfd20950f6d9c1f844f70dc563c29c2706d48279b43abcc9f7eef51ee0947f8d211d4b156960679c4ea259ac3a6ad5aa3b68d5620c1fc6ddff4c3dfffb413bb88cb32e87753ab7fea8040322f6dcbcf48b52c6b86cf2145257a5678408e06c8a464f80000bfb414e8a1bfd6af80303b5f75738e94443ba2aeaaad2bae555b0ec4d080dee68773c34a951026e895c0a823151f1da15c61b9bc6eb3c4c692623889350675f420986ab23bac0e30f225aada8ed2c05e93965bb755bf2988d1dcb8ffffd7483c0246fb8ef8b82a48fa2cb2059a5d40e807d69c91ad6a8eded2f337386dca71ddf356d387ace47789f6df32c2e8d70d2be4aa2a25af5726472bfceb98989aa9a9a0d6fe6eeb9166093777724e3b5e4c5952ca50c8a9e8dab3a7636977c5e95d7f6da6ca1fa0cf82648f752d7a727dec739a2266ffbadec408166edfd78ce30e8d23cade4d30fdd80e15c6bb57853db995b5d2c660b245de0c67684b2c2a64959e1b8f7f6447c9ef91fa0847a1bdb21e413c00771592156204336f8dcfdc9cb9176979e08240a009986b3e4628120ce506ca7989631be7849bb29fc5b847c035168ea0f958bf974d3678063e1744b96253b8429224e545d27bdeffe0fb18c362ac0912849acd4f4c05751ffc1f05682645937fffec378e23f4a90c222fa544b2cec15199b0d080f1365d829023627ddbf96f3ec1e0493091a29e34752bfa7c8cd5f8c6ac23935f0efbcfd141ad5dd437a15dd3ef648682c752a8855c0d2909da56033c61c11f7f5c7ce722cf1b1efb9ca7daf615f904220e6265808071465bab74e5524bd9af3c09f5ee07348dae7da19249e1e2eb63ec51ff024474ca96c72c5abb08f474b503f1c85cae90b5378c14ac93b4f583e11d6cba88263aa1d44b90419d0978ef7caf0dca51593a355d2e418108bbbd8cdd4d1d475a142be26b4a0fc43b22f2fd7b45efc14141162a1bcdb25976f5be2fae448c3edbe6efa35a854f8f5d837d7ed028d370427f3abf1667069ef0e074ee05c9565cb76079da84e1ed3736a9a8d8158bbf7343437a0106394968d0ba1551ae96922cd617e1fdc202ec4193da8472e91d0fad95be2f2aed568559b418a8271bc0973dac0c4b5a03073617abd3f1505f0a01bf86b5eb5658ff637173f820799305b13b87cea1b47fd6f4715eb4feac0e167ef2cf063ca6d77a574ecd167b5f483d0467dced88f9d8e5106bba38216332af7c9a9a3f21f895c7fd27a95643b5fbf75ce42fd70aac9a5c1ee05a5f5fd0e7da7ec8437f888741ab429671b4fea1eb40c7650ad5b4a10592bcc5f813d2a799ba03d0277aab0e77663e454b832ee6a7a319896962fa8e3e5197bc8af125ec321d3f570ee09ed844fa3de19fb26babbd136f1c1377de26ab78578231109d3b627a41503b7d1b9544c8eb9a36c7a1776de5ce76f9a5150385880e4d19221049cdb5db72235de1aa1560b4cfe7aa76cfa17e0a851f69794facfa77d8c44c71e43bf931d9b86f3ab4cb932bf78b87f15c56259bf05ace550c0cae6d7e5574d0ef8aed11232505ddbe925d34480d580d101f6ace400466ef0e637436b25d3097d1a27b32ee0fc3d97dd878e160b95131eb9930084823667fcd16090a73c70ed38601a726188f4dd05d8e4f0572809b3c387f440130203c2ead6a08b4d47ed0172b202b97240d0db887e93b2ffeb1a18a881d1be72e038abb27a57f4ed5932128024eacc16f49348ff49c863c776757ef9ec27f70c9cb475c90562d4610882bfac3348c7da5ded58ce0a93a8dc3852e0d1c9e38c94702771cfb08cdbc2935848acfa890352a09afd5fb06bdce2574047822800f94d6697858e4369adb791e65651cad9700990e035962e234d75a2021348c115324b1115902880b7e35b103c7410c80d3bebb32e120d607c285042b944936c2519d3c6eef8a4e8d2e2896836ccaacfbb5be4d3dff0577a81e839f9b2de1f2aaf7859b9bd9a5eb1fe874beeab1d0bcee81c333817d51fbe6d38b3f88cb2799889bee660a4fc752b010cca21b2cab9fb7b689328abcec3c342b10822f1e66350665b3b572f60639804e9efa873054effd988145a4adc6e01bb2da10767ec1f36ae3120579e02e1100d1826ebcbb99d784ca2f84317ee80aab123f85c4e77dc199cdbd34dcc87192dfbd1741fec10c78f29406624ada20ab47f3d99f10d2cd68e9cfa96cd8dc992993f3022f8aee10f5202d529607943d8cf3eb71218ac3ef742871c6d3033136839d4027f640f62dc3fc806dd7f108a28f18cad85218455c37a9c19192e4f93f8c84552ab5c8e51d592e20c8659044dd263434319457eb194ae266675e7f7a7ec17bc9c2723914f8fdd402f9352c7d04fd25e3bf707e6dfba42b0d81fb73977e8fcc5730cb85eb9952ec6ce418e3d546354564ae1f139016762596f38ec077bfef3cc4e115312e72769dcf0063cdaa21a19e55ecfc520f6ec3c880cdc54efe53e71f3813aba7166818013a77a9f92220a71a93c428a47be1e6ed72925d953ef8e56c15f716f4e91737e54a8c7e0839eb1631d366aa48210d92eadfeafc5fbc8639e84d9364dba561d681d2ad189be03c0ab0636b51ef7000a2f0421ea46b39fa4d50f7a80f1de61d450635e51dd2aa164e351663dac725164e2330f11cf6691e01b35a84c913ffa9d39d2cd7c8422c07331617d55e98ae461735e1c48229f2547bd212dbb023a051eaa665bb7ebcf76f42995952bc25d65332cf2832a7ebfdd76efb877fe913c6c518cc8a81eb132177e5921b33bd2aa1ab989718b601f5eac6a00b8243b08e84a4f40e695e88424b41ae6677e0827b5b38a74959c11e79f23708807ce1c8cf303436d9862eb79390d54076f57e2f47a14a6805651deb6e0ac4e94c1ebf69dac53331f61d0cb110ef3e47b1998678e831d90c8559839e76ffcaf50ea1fc15980952e4c9a085096cd835044c092e90d0b859c957481de02812e94d3689b985ca3baf3efd9bb92dcdcff8e14af3afed26e69ac8ba0684a4de84e14a3ec6629ce8385b514adb8e6c2c504d8bd2beb9429597e4908cb0d192dac2eed333f2fbabf51ed267aefbddc9ca2f79536724f10d274aa65f5ba8444a59f8f183d7a389aef5a87eff7a51e5ed41978022fde33f2df5bd396b238aafba4f0d3b9d0324e34cb5d40b11381e2e9ba9b6422d5013f7d120588e646b5079ffef832226f15c3d83e5581ad83e825f557ddb7e01049920510f636335ea213a79b0f4ab78d4caacffa18895d49e0fb089b237979c2fa6993694644e20489e1b4d24278f00bc13ca1650429a8bb0c92dfce81057ba65416456c67120e58b866d8726afdbe456a7b2b3e45a9cb2eb7d864d3fb524c68591a31c38ddc7f4f9e7f0636ab42f2c5037b002ab77480ba07e5b6577a36a7c7afdcef075f2ca1d361117a428ba7597ea7a1237baa0f559d262fb3d05c7ae446017cb98b55dac72acf18c5f78ab9eba3f4ba30ebbd12a9d3418c3a4c319548621f6a6cd22941a732ab305bbc544150332091000f6a186f50577d93f51f242e1406fe14b6d3e720b5b8bc1ea6da17efb7fb08f24eb2990f4dd66421d4d4379927edfd13d599963cea62e630c9364c3181e4dd2ddb71ad6eb3f4c2043b4e06708fa89d916182546dffa28409ffaf658823c3cf2036738ea0a7580b3b8cc6ef11cf32c0ec8ae2d6dce324c0b96c425328281681c6fa37aa6c7d1b588e9c2b6b926590d1ae5f76f76c8a9adbd937b697ab6923de8522b28ff0ce489fbfc042adbea977fba966ee40c97ba34f01cae326a000fc4e5ba4fd57e910d996f2717f739057d730db45ab72e90cad63a6fa9a287a3151c168a59cc954d6595725e8848a79d91c1a926a763399dae459303b15149d54ad0a5df9770358c5d62b7b43040475c3e9a2840e35cf748c58b365cd4bc6d7c2917966893d0c297c753a5601207515e3717f0b4c60972f87f91f172062fff4f2a102e6e8769d7ffbc075b368b385522493b2a411e603b154af98cf6eaf60741860fa37fe8977689ca2512aac564a9ccd0ff878bb94a7e2a6b65ab8eaba9aa0da70146e2ffebade929b4aa5a3a2e859b187a8e2834c78bf54e8410d71a77834179dc9a2b5b98dcab147b9e27f9e3ad249371f2681169ddf5c569c5209d9514fe172618a278ac294aa6a7b2715cf88e64920d6f054fbfbbec8ee0d7d9d353f6c95f10140a189765c9e1bfc7d2fb0034df59fac86818502aacf86c806e6188c1f9932f76ab5d63e786cfd04947875bb7ba2364372bdbf365b5f5d803857f916f3864abeb54bb092bf941e6bda24eca7b55a5df693cdbd29d0d942700d07c64b00a970b5fa5a524873a4c0cb570fb23bb3b409cf119660849b885d3f0739514497105e97cbed9519eefcd98512f87ac886941dac26bbf364ef03be9fb801edfd67f54ba7f06e9389ce78852ffe4919fb9f3b74988897071fcc7102596c8fed35b73bbaf18cc431be3947015205ea27f20c6a015233db0dbe6999d12ae500ce9874fc76ce048ae4cd4bbe1e397353c76e86188d2f0e48c55e4de945c0a837d26f47c1c9212480b8580ef2b3c922b0a3f875613b65354605eb8ec576647940896adf6ecdc23897bbf998860fdaed5f5cf0dbb26df8de334c06d638af5619c736810048ad2862f085923ed84baee4be489e72a396d0b13dc1c864c156d44dc6685005487dcb2e244ff6f36e9202ece6e4295cfabac8021fe2df60513acf3f31a6313a03eb0a08948f7c297a31379c0fe62dc00658db9bb287a884c3aff63b9696014b401475010e1bb5acf96b02249b706d8e68fd85f70681da65ab66bac70fc3e3bb947e836f34714dc08ee314ad2ca45cc2e0208ff4c8c14fe5b8275b6e810dedab4375f394e83a4d59ace25608e176f91501a79e20e909667cffcb37f09b3264c4327ed026f35f4da68376a3dd742f549d11b4e50247d6e498db322038c474382dffe6fad999bcd48be798e2b7960f8c28c3c928b47b2d487e5b15f2d6224ec5475bdab84a77eaa0e0ce1756f78f8221547e7d1ea9ce4de46c339bc15a9e21ea0966acfaeb7543e1abd15c0404a3b79153dac554d0884063bb7b84c28823b2d30cfc7453a79fe705a9551bb58cf6927857c7c03b9a29dee3b86fdd3366252a3836c8a0085fcb753a9ea9dddcf149612eaa1158e1dba754c23ed5bb63ae2bffa9e8872f7ab9dea31bfe3234c66e72d86ea5e569772e53f8c899e9c9c1ea7baca273799824766b7d9b94012cca9b095caa2558e51b52499b0c62ce723cbbc25dca5b92fffb1e40b854e702415c2657061f267778387cc8f3bebffe0b79548b9acd77e8a09520b198b05c5b7eca8802e7ad19760c008e3c8ff9829e13a498e3534fab0df1c530e518f0506fad7ff144bdfb84342e2cf6664900864805ef6606e038609e3763ceb772925a0c45ab72a5594f7113cd325f80642acfb1288eb06ff3cfc8fb49b831da18552ab9cdb85e8321f26b59fdf503e7711c495ebf3557e42db62e6e0337581ff877271b867ad7a3bf136d36f3d21724878bf2f3ab51303f68ec80f44e92c70ebadc83f698b3bf1b2ac038f7a6d0cc8f784e9aa73a16d6ded97c39ea9754cddca8607755a91caa3a3eff69f03730784b6278dc8b416ab13b59fbfca36827e644301f60ac16a216f4407e8e143d68515b2ad6a3978085f1a59dade241093f3777f591888aa19f339a71ab3366b0c765e1546835b706e03bfaa2d83f24f40503921237e1bb3427659f24f41aeb9ccbc91cc5653cd92cb8e92dbdf1fc21d5e94386393cb34278a2626b62d5b28ae6e78bb41ba82539248360f5f14b4c95b61b3add034d22d73c023071567dfee0d9c6811bfeb785addc325b94002cc3d545fe2f12c1a1eeb1e3b4b3d8b820c0a5a14d8ed77f9d009d5940bb0531165bdced094cbae1862ba5613b67f03068ccefbb97e0ae633db7da3b6586132ad0e876d7e9a6d681c30ce636bea6ec053683eaa9023c9db8e8550ef8ee881fa6a2abc041fe35c650e549dd0347c5fdc5a053e64cabb87078588fb87b121798e2f032ff9f405f85ecdc63b57d51e219c9d0de85f6c0e54baa06d9876f6001f8fb43f6fce7461624e82368903335b1b8023675304023783b2692eda14df2c04e38fdf6f7b23627adc4807ed345d72e00ef10412c0369cb940f657ee220a420cedf5df1ede28737ca8e0c9158ac407dd04a844e776e4f2fb370d9fc57bc3873025874664786ecbeedeadc00fc555179fd989771456f2ec23cdbe3c2a90d15f24a7388f2ca67107ffb39ef3a4dbe2f656de2c084c2268c59f49809870c4dcf9bea753558b2971ef36bb6b0cb369601b6d48a7038a424ee7f2ac7cf6a93cacd5f1ba493e3d61ce09107bf584cb6ef1a77942e4890c8b1da12a6c4a29c74882b13a0f1822aca691355d086e4b160a9f80242cc8efaa5005656079bdd994336941fef53c4a0c8bae3a5efd5529a93ffacecd523acfbc9cfc5bb193cfdf14d3ef8aa563fd8046465369a2e5b72af9548de00d1ccd7fbbecefba77e8d65e74dce806e2eed66d0276734d86cc99dc70bec9850be95f797f7fa1064adec122630d04c68fa746b8e1be6deaa4af74e8dd8fe562516886ee5a805f85023ed5bbf095b922cea0f0082d09c8b55ea9aa0bf4da39190578752175afd68758bfd5678fcc11e530a898abb9ffb4d81ece0d85777923c134cffb54ac0fd6d337f9f4a7a194b041b996d1338a17ccb0282d10708667ef9f217086ac43002c762958ea42c5ae0cdf19e06dff1f189a63e391a33d6abcd11f58a7eba917d72089076c05a91d84aaa62bd41c20197fed1d22776c2dd006f3e97b766eed34d105626bcabd578b7b62606bd6c3b7ddb142a7f172ff0cb9436d76fda37df55f31073bf2af033c6d3b4cc32cea9bd060ea6131a9d626a044093d20f943d2e073751d87cb7b7cf6ed61ec45e3629a999c672750fe7b6fbb994e4da9766229fe6b2af3405fca7c728d04eb3d36bbc5c64da8176b5ce5e0428578596c907e38bb592e813d9c30d99c5ad37fa429ea561e105f11ea41a209c7fbc5dee5b94f7bf8b852f6bc81ce7fb539f3f3d6d81e7866bc0390bb1756082ece56d2360b9f9baf2a265ed191485723c3e4232ac9785da385eafb91ac752e0e553a664faf1542c0ada73b17a729896b1a99de3394028f48f609aed1116f3a4d526a4e197f6524f27152d3e7e6ff7c2f18647611dcf6348170387484ee31903614b1afd59e128997e7508c0d1a21bfd0053b0a107b8745587c770d1c219e08674134b44a9de237e589c820da7389777c7bf3fe66fa2fdd08f9c15794f068cc87aa034593481173ceeff7595b6b602f473f0ea3a9eb5670c8f812e3be274bd85462f85f728cb6ab2041f9d0539ac26cef67dcd04fa81289ac9ff09cc6553b590e7f2af9600cb9a64c760ee4a5f8b623845a122433b2dab34f69019fb58c82df39a2cdf0a26197cb6042050b928889d6b3c669efc950c8a80fafde209d5cd3d2b69a64898bb59cd1478f38ba75eb0d09e0c01ee0a3ab73d9dea6b6dee8120a9b9c199f7c4836719b490888344bf52048b8af4e105d18d3c4cddad0274bf18081b2cd317846fe0b9f1271c87b2d0be6c744c301409b93aa61d128e111459b8780f6922e5123f69dd8dac9209039d8a606406bd6f0ec1df5e72007ba5e63aca88304a12db752f07312707d719d686f388e8cc97f124d661161dca6074b214c068902aeb1d0eb8a80b687a875cecca43a974be49e4293d7bd99af7d9402d8f760ce679c2c0c88482004933063bddc10c28ce9fae4456d6488f5b9886c5e73ca1048ef92c9d8efcda8939c74872d39bcc6755012bf3ae97e666108d18b9562cb8b0e246ae4811cbba88fa615c91fdf494bb1750575928af4bfe4203a0bf9d550287856b443cc3226d236f6db04079d3e86eee6f488b4ae5a4f0ce962b284be2bf96dd06d9acc97fb557669e46649ee19ff71a0596bf5a162d952dd5abc6b630664a74632ee8e2ce46065f04c54b0e728d2430ccbd80c5b0b56e147a70f26bf1c2d62f287b3f0244e3cb59d1db8f271aae40381f6d0e488bc52cdbf743ceaf10babd726aa3cd6b479ee0d15e5a293061413439c609e35d3164e5ace6cf64e9572d8c9e8ca38e54953a6d2047e1b2b4eaa79bc998c371d4d3af09c582aba338d86bc02a4ed616cc9c7001c4fc811bdee78fdeceabf942ca970a206bce9d9dd4640fe43e1a1f8ab19dd84a29b8a940a990ca04d954f8f7f4bc37ffe7f77afb36b2b9e25f552c1e483ddc967596f5a5b89379a727470b4c5e125b7e4e5a3d788c12fd88ede3e8e905314d7320e62b085cae9915e3d615d667fcbb2354c61c23440858ea24831cbc6d9a04078557c47537f6a1bfb34cc515f962e72764881abba4d6108cdb163026e550bbc715b366327daa4185bf445807cead1285df4ec8ede3669cb6ffd579ad23d6bd25a361ff0258f5594276444967b4f96ba9d2b0c9d6718772a9fe3d9311224306071a1ab1607242a474dac91050135e6b0b82cf981e7fd3c0da7746b9fcead3cabf799b0f683668bd9baec545259e6d5b0b8a1f04df53854e3dcc8a864f1e10a72faa7e15ea3a01b78596934f28d454d21b824c196c021282d7fa69d0fd218051b6ddcdc62afd0238d81f2d9a8d3695d139f85ca1a05916ec7693fe0af63d89dba195551f36e3e59854a933b93090dd510e9547c5b7f2efa1cd9e42c2eb69d3eabed04bb19c252c32f13734c73fd50b63a33b6d77167e85e15b0b0bbe7522965f0cb664bc9bb03d59bdfbaabd6ca28337c2c1d03fa0f007465447ccf2fc7e8eb136f29f0a23da51e89f0ffa0e506fa254e7023c1b9119cdb004ea79b70450b1f8a8f74fbaaf9566f42ca29e372483d119795c3b55516cf0d38a0475d4ba8b6e257a933ef947a9d902afe48a5b1cda1ed7f9ac6214d8e912e988e674abf8f87e49d5d73497301b42fe77872fee3035498118f5bfa4b43ed5235dd610a6ecad94612be27738358d32cdd2f917c89acd078e6ae71dccba05ab873ba597d911edfe48e105643755a6d7c6390a0f4c92af18dc00ed440475306a3171e98698298d96cf252349cb3eb2d85a120daae5a243f818af0b0ddfd1fd9f2c39c709c937554ec2fb456d73c15f1da738ea149f3a107ac55e4d6b4404bcd5283cfbd0fe53a3804e954479eb085a0779631cd94c2fd55b94b85ac448f2f494aa8272ffad831269c753ecb857e1c08d664bb7b879fc4f80f8252fec9745a069e614e209c4231ceb46e09a6bc33d2bcc6c5fcc315ab9ccbc110d2dbb7c83cfed5337366061367f54d2d09d603fe32b92578c3fb0e5068d987b2c2895eb2c734cc4576b8fc30789dc62f6fda8821ffca743bd7707e9622feb1b7de92a76b0d27bed72142d47693774eacfd4e3d9b0c55dcb248b0a7708789277975522dd551b1a5ff329d32f567a68de5669b8af060851d74d0fec4516f47fa6f10180dd4e1447940bf0b95d9531b80c43ce0a4e72c7d673bf8e826add63e25d66ea824d964ef301c6fbab72655c4bb0b8867d1d26aa8f7d50f823f2d600617e82ebbec783e313c6aba0674975ba4b425ffc60e35d79ac51b81f018958cc218c4f83c14bee8015fe91be3a22ccae6950dbf021adde5842334dd284570051525eb26d2ebd17c47c175918902c006828b4e88f547a04fd486390a1147ef0fbf1355ee35fa27ce1bc9763edce735873dba56556000c3ef5317e4fff5c7e395af75e0ab52f29854c36992938045a642247b7ee8252e18d0f5adca289f283f4789f57d6958c3b6e758083cc3c93fe8abcd5173ccab5602e89042aa83beba183b36d63ebbc3cf9f58c7d1e7c3a736e03e50854b525639b46d3b078167bc441cd613b4378097389fcb8d11affa07300773ecad85a19891ef9406e15fab1aef1295169affad0276339e34018e1dca4d45894d7c479a5fc5779408bdf22060eb9b5dc10345fb116b423c6284def8aab9c47301bf45a9ef79975aae4706e2b6cb631904a12f8e2d784156963286aa2436657707dbb0c0058c00427e5a7e800a456f11b5dc99578c583828225768d684b5973a423e40c6c07d2499fc283d1ff2d8347e53f6c944a67e7fad2ce46698f2baba74efb72f4f1e8be67cf1d6850f964a43e564cc85208a4e88eccdb7b1b0aa6fd22fa6d1c3711a234f6b1e9c4bc67ead1635ee233756a3ffa5944d9cb73639d413a66d466067343f919c4a5f50da191143ebd4cb99441281451e90de1c4f1b7e6477d7fdddeacab2b870a406f664f9155ac035fadd8278623e49b92e2492e2920aac141385b5b5173f0245c16649bdaf5a5d81bdddfe6179660e5065b92969ab240f554ce4f2bca345fff897d53b7f9291432c4a0d1a232cafe560afd0181cf0b60e74c53c1fa74b6edd74c4857a6eb4214de0af500248c37916e807775746c2fef38397dce8c29a48625b22ebbab07894d88fcf708d3e65d5f017dc16d20abd36e9d82d66c61d84d3d5ae8a809d54b3a71bf90638609dd746d8bfe6155feea4b22f4e28534c4e7d29a5d7925269cd6e29be3ec7f99cbf1fb072105dfe48e248d82d002669fd0b3538e30cc8bddae430fa9133357a1424ef657cc4be5689d90d65cf178d4d4d3e802e37b93363ba17eb2c815c68f52a5bcccc22158bc5a7291f8a86489b9d9ba4780a7109d1422279d0abe90b2e5fe78db061dc59dd98a8db63c9e63a0a0dab23de4ebe591db692f449f5c766463d2f1be81e474822c74b11944b2bc9e7439324b8d8b165b45296e7541490db261281960a4b3c90937744a76957bd262a491da22021aecd79e40d958e5f35a5d61607f99a242b0c6fa8c703b240e42429e421d84dad54d72a9224d798e9e369379244f2b1443d9287670a45641cc3658c337c41f508707f7bc8874b1ca7d77bed910a7d6fd05fba259ab5fc3da095c98361d968afc4979b0ff3f4940c00bcde40c9fe9f55f9cad1dd6dbb7e403df514d54d8a9ace444531eca1b9fda9825429c5f13a3d4578083b255b6126ee2e529c9233746e6b777548cee86c2f6a96a3995edd83140f76f197cd21931b95cf2b4513bfe1b3db4a544c06bf97387516242b846a4f666b3f13c096583c27edb73639b3a8d982386d1e5bba72543442c7c1e80ce38cc81a9ba0fb7b760e151796415901984947bcf35144a78a0153bfaa7542cc94ff1a962b0f51d1eba10060663814a0e53fbe4b087785445e50b2a1e14a01170e93c919e681f753f29de65917a24f8ef780d08fefeefc3aeedd1bcd29aba8b8dea16a855bbad24544fb36139e86675f8c4116b1ff698f1ca3f4b64e693500a4452ac2b08c3a0cd17d8b31c8933eef7b5188e841745c6411a1f8edb7a07b4b0b2a71c67b7c920113a676e1504d0aecec14ad7a38eb2a955696c1b4c9a213bc7cde5c84473268056fe93a758848501bb17df0967dcbbdc794c7691fa9294fae882922ddc1c57f381bdc844df2ea48b701da693ded92df4208596cd396aab1e86ba67ce82fae8ebfdd09fc8b95a285585581deeb8d04bd7a3b34033f4d28ba79ffc758dd6e3df8562a6450c8937441d47b02d5b143e387ece139a08bb55f618d920415e3922e34da0b80bad0ddf1aca49c69c0d3e814f9ab96201554b19c569dc75f55d52955d2d046082b88ff00232c2ae5a7639677686e8f2ef1e55cedea5ce106cb22641996ffa84ba459697b96085c3e58df1ab8f7029d4237cd70e8041abadadd4510e9dbe58cd6dd65937774cc50fcd5173d0a399e8c245ceb9276044c989de43cac9961b023b55ad0606ea74c6908fb244212da29eaa5cd53f0a21a78bbcd59fe2d334e52cf510fc3a8ed861b9899a650dcc10f946be16e1feffd3d266432bce7bd02ad3846efb794bcf12e01b6be82c2dc9ebf33de5013d5f8b0cbbe769b6fe93f9ec2ab39b2f99eb8457de857cc4ac179e151ff101ba303b0e63f1d8c49cc1153549faf6f0ec9f3fe03216b849bd3a622c43ff37cb20adfb669776b999572bde2e13aab26863b099c5e37b3cfaaba1ae9706a72ce9631c86ec7e07b5e95ff41e6c5bbd0ac4837d8dc16c4cd3e51aadf3ceef7843bb9e9673365a16055c59c3cc00eb98340ce1d0bb45e4dbde09586cafcbf686040e138b6bd9451b5038ac917c28158e3652097f28da1ff255943f2e9d6067f0112a78cb08062d15c5f5d1692ce483e9351400f3dcaad0a7439d5e0bbff6da8485d8789c7f9079b6ad39b54153468fac99f9776453e12426b6b1659bfe59916008047734789df63539861d12e3ec2705b870aac4ff4a461ca8e0311b93a5c9fd407c5557441df15956f29dcbd8288e22dcd6b8f097a3de5a10580d9fa282fba8227898c2bd323495efa30cd6ac94e9746d308ef7c9ab1cadb688813aff39bba2357b9db56c207d8aab76a8feccc9b122b53510e56cd79ac99e63696e349bb0d5eb7ce27eb07c9ce426452a472878ee262a3d1f91ad1ce3ee73139c65289e0870bc18aa19ebfcf852379814bf3c9381439938e22cfd5897cc938a7a1d4247e9aa3a5926f615acc889bdeab11b43a8ec7f77a1dbf25f232d1b702f5cccdedbed607e54b4ce11a701b883ceed9650d976cf0c9a1a97a1ed0b73a38c0c51e8d203d363f9058ef90db27e4d365bd9e79ba2f977cd1117115c4194c6e4cbe701261a108285f99423fc7a7a0a5e91ff3093423c3671a4370093adc104f0d8ab0c86e53ea9373f640b0bba44e60eb90570d8c53176691e51ca57f2981c560ef5ea8563005fd1362632854589378b7ddb12d3a0eb90e61d446c50bf14de15c089a45589deebb2f2b45e140263b939cd688970da120f16a4424ca523dcfe5307aa67847e76999d1b28e819038b237e0479ef02ed9e36d21b1ad67daa8d93c6daa57cc4ef57a45ac72e173d2f5b422db863a30636d543576a79dae39e5a1ef9df8026b5c549f27ec92683b0f2c815764b08c86290e156c3a40cd0f4b3267ea3c6efc91d4a58a52cb83d0ea1ec7d9ef29bd1e20e1c8d30e771b8c08e26b76cbfdddfb34bdd17604f7e32644997a6111feca22f84678729e148513e3e6950ba1e50dc1fbb1f1219a1442d173e1c4b5e9d9650d4c4043e472ab0a246fcaf0aa96ce8b1ef1e5ca4cc9005993eda56c302e84d35f0b8934532ac2720a480fa80e59b1e8564e58a65d99603e9958632c143c672a7defde47c431665535fef4865e238009cfe227e7eff7f298e316486888e0cb483428784ce4119a525e4dde29b4b543497d09b5a0993ba9a1bafe70814ee414887d66ba946afce2930266bc6af67f69757dd22684d1301e6e061b79d32056f83097966a376e34080bfa31c294c9cbe964406591510e29a2f298a56a0f035cc533edc2320f35c637b46fcaa705735114b08ce552c56a5da7f006edd6cfb775ed08c8dc4da415c9e2a32a55de5824ea0d62e6a3cc78e9e6a181db6fb79ecf49923e9a29a6cf73b8b9cf6edecfd55154b9cdb9610e050f4aba0303e0167115353014a435a436eb0954c913813d29ea3c63838a7826de43197490cb6fc3295a47619e54ffb7eb46f9ea56146aa3ace17e0e22b134536f0f22fc63a5c022f4f3eee26b1a4843b475438122e3e5d9c6adb749e681736f16081a7ea5ce56206ffa6eaa9a5581ae1d8d93ebb72880d340d06dc85bc1d7f02befb9b36b3ce34ddcf18eafa49af67b243e69b2c70293cd5dd534d990e1189eaae21be81371bd1791727bab2f53b0e00a0ad4bb3db603f41ffd1177b1e46c78ab66c3fcdbec9d0bb982ebf054394c40fcf8f2dd4233e7d18597d5d6660e562b79978484a3e7f34adf23d4d7ceef0e30df89cce24cf24d6ebf433d364a26c2ba020cb7b39d2717bb95cd9740d1fdfb310b18c7b1611eee9d65fb3c3460adf4c2cf78a94764a0356fa83d90ba3ab5c31d140dacc46107b81f82d1ed52e306119f8b1fce485dba40b17b744790dba9e617c2e772e3739058465593ab2a5c69990357e9e30d4ad9691f755885aefbe6a995fa36db5cd941d1eb29cbdc8b362a2866d189c264e1e34ffd50fbd08690d9451be10e9cd8e9c0ec9b83d06f24a398b7f83443721b56b79f5a3f2e646f650fa96819e75165f7de8e769e2fd00cf7d76c7d704d2f2e8a12a01611d4c84695646d8b7636acf4d3f277ac0f77c5fc78f93202aca4ec0999f13809575c56abe550f86086d3ca994103076fa2c5df123934414f9fce343f37c9d4c56c05e6089207d7b945fb2919f6b059ac2f065a9907014c3d87b38c97698cc2ceb072093f5307ebf5a98768034882cd074d7e5759a5b7a26bbd3b7a271e0e22539967f2d3604f2884c2d80351c1d9b54fb800827c25146a577a41b08a275128a0d13552aca53b818348c155f1a1082ba33ed7928cb75006d278507677e2fc9e87556f4b611b39f93cfa4ef2e3a076acbf07fab03adcae9d2d8bf26f8a510c55b7f87dc089f0cd4c7cf762bf95c9ddc063ea78adf5b5e6f1d7948bfd641d4a1da327078e9c8e993eb2414e05a0e324e1f625a7c341de4c985f3d7e0045f8e2b46e751213e44d000c616c781b5d03e6feb8d6d08caf533e9b8ffbd99dd6fd859cfc5746dc5b8c71ae97884807a37a53d421d7473a8cd5903a0eace9cadb9710db0b60111e9f7ae0b21d381b6296e2a0ce9ece08687d3c8bec6ffa7e85a8e341dee9c13c753f3cc455e4c36ef94bf52fe5d28669ecfecc6e68515ff69a8076c447fa959dfde179facd7d8f85bd816743e3c56607a3cb15c433270a8fb49e29f33f5bed139fa7dcb56e8209b20b3fb8a343abaa91ac6add35ce30553dec67e0d8fc0e548619fea074b47d9b5847de89558ed31b3ce51de8c766c6121b0a4c093de3c5f8f5417b5c874e544bc963ad83edac8c8f960142bc2ed41181b221801a0686a6c3c3556c6a89c1750b9ce999ebd958640e89db711e7db238579e6290d3b2ea49163edacce7c9a807f672db47c54216b4800445802a0e6a164d147aad3511e3d510db89209d8fca14e5c434a2cb12cb5af20fa2da4fc78549d93f2fcd5d30572cd1133b16fca397fa505412f25b84db2e2355f3e34556b9b4da20e7e2f6a1797aa4ed6227106508063a421beff626df7150d2a6fab6d1bdc9b8aaa23c05596b83f1a51b9b7d530d64e72a11ff8040dd427c8c6a6ca4af567be32c4e7be9a20dde8b5d39af4c66569e7b1c3487f767e5106286e863620779575e588c5fad73924856116aa9e9c9f71da773716605157a11db992342131b4bee137a04b040c08a06ffe778c59eb7ca792063954a49e06c05fb0a8a499805f946e319c1d3339a5e2639d66290ab050aca07a37d7bdc6d6c808a683a2873e2c3f4951ce18e7c3ab65eeec5fed114f01858c9bc571fd7352dad337dfe4e71982a84701b9ec7a7ebd30437e6438be52a71c960d551cb07746d0a4fefda5e57722379d8701550787de3a38611683d3b8e550eb07f10c2df667fd58205736f3c10f3779bb13395278e134e711a8fb1259dd680f2c265e0a2d90f8b668cd82299f733f62257884ddca4cb999732c99a0924ad2a6df199124302b57df1f6aa29f4b1005c5fcfab2f221c57fb5317c1148d9961e7feb1e34ca1ee1335499e9aa8833ed275ed3b0b3d3bdbcf178a48d7deb60ab4be911c0f3f76818be841cae8d659ca0274fc32f34e8e541fe192538ea63d7ceede265e81fdb647aa93b292dbc664a8dbcf71072d3a93d49f6bc7cca96f27ac12e91801d7eac9ba257b5dc573e6ea29e47029dda239eff25d8364da4e41542aa5cf15c7431667804c2384fcdde1b17195ed76ed4d445d2fe8902f873563e033505f346bff90c58949086a36e69bacd05f940693cc85f713431321d62f5aa86c38b185c1548efb83d496e64d1fe3b6fa50bed574d1596c383e20a065c8ca789d834277ba712410d42ad56587f9a43bb927d4a99658625db4472846d184b2a32442c84a401df1744221386f5a8620f81af9fd317317becfe4c5dfa702ce0e72cc8d8cc795954f4c650040ecd42debbeaa0528aacb069e4e12eea5bbc1d2eddc73e60257db355c634b6f5cc52591b75b22d14575b2a9511a98b745cf9e392873a6c08f8bcbf4dcb801bdb7b19a48d8c676478930e719306e92c85f4b35eb945573407ef5e2e4924f895096ced9dca0d515150438e09c6f4c2da671686b13d95cda8426b3421e8a53eb00972a80918ab93b7721230bc869f522bf114b0361457683989a506eeabcffdc65b429a0564b4115e7ce99b0cc7bf0ec1e51c4c24248dde7fdada4c48cb2e07e1d6ab14ee3feb97310dee0c70d808880e7422c56d916d225cda40d379b285164c09ee1185e456105ba4ea78a2314bad63b4235d40c4981e9345622da7dd5ad51c4f69c3d63467b8e41f297b7b0cd62eb94d2421ff49e7663603f88ae03ca7653ed8c5fb26867b502281d7554aed1af64d150e69b052fbd9212838630dd3a78a4a9d519cd577e10da4e90066c14bebc69a6efc4adf65531875bb75a26c3a0f4e0eb38a26e0837a18ea04cb1b9558c35bde7df78c641a4f5867a37e8fa5efa617c18760d9b15ddcd73913d5d1684a77060f894587383bcd8a6a702aaf3b608b947acbdbb6c230f76dde9d2ad779bf3988b4350c0b6d27ca4a8ece76e0b6bb54f73570d7c23dadf85b70568dabb6b6be0c5ba0707fca617004bb92cd1941d40fa8a9299a538ba3808bc5f01993a9a687baed5b73b2c1fa3c68ffba46118d0e7d9b6fc1153d32619b6a77b719b278ac749df1654edf77746044262d888d938da8355c1d017335aa2f41d330c817fb7932b8d8a6fba66cbfbaea8ea648904fa3148196db2f8c1b3469d9ce88554ede9c75d3aeac29cf29e04b5aadd3c3bca3ba334f9a6db54747aa8c01ecaab5a4c52eaa7123ae155ced731d3b28d22c98a1c0cf39db0a021f3f9588b3ffbe0cac740a9984a508bba2b0dc99406fc7cf204cd6cf936eefd8b0ec6ec065f9746dcb18a1ad7a9632a3834d8f3ea0855f035075e5078fb54685bf16214ceeb7c1bacd2ccec146c65677d5eda33daebf933b83a04aff2f956e0891ebca2050c70f9b76a4dc515efa53584c38f6ad96f6c895e911db1ef02c79c452094f17534113e5227349036a7151afa315552b279f4fdfb98bb61417b46ebeb0e210eb9f7fc620afce5dc01b0e05bca1832bde60565fd7178cc473c55e0e27189f2feafe55e3f042d8ce03c6a78aa7ec769fa1634e2c2ca966ba86f8a825f1547485d3948ab49f4b6bc5253c27738761d2fc033e31a3da23b6fb7ac6b76ac810769eb41d873e3e3af527517b4c52a7a00bfbb091183738fd6a3376803cdc31b106b2c49e8a767a1c52ef1f0119efdc0f087184228e25e43b6c9a9a09f6891a9562f11edfb15799fb819b2f94c0acf3cb9144caf7cd4e2fdb5040a60384d5eb2add3153b3945ea36eeb9d4bab44a4031a03223714e687c346db558f7cc3ddbdbc923665f145d7499e7778439cee6c17124d093527b3ee6975c0c1f48495abf85cbc3b331c5217acc61f88769fb3a33acab4be6b80a4662604fe868771902d4a38e21e311176ad0d50a836c954bb1d70ab6fbfd87e42f9cffa355ca03f2f4f723d2c068bca312162b381fa5f64ee3c0f9312ac6b09e66c613ff95e251da15a00519df734f9fe84f454bcf8d3f3cdd1909c9e77a3c1a72e3b21be41f2ba1ef2a158ee67761ddcba823a8dd45f936b11c7a5e468353328bb49803a0904370219c6255d1e2b8507abb32d9a6af960f603e48e0f1957819352b3a9e68a3337eccd3f29cde54af1d95692be445979390e60a88bee5e7671e496a3ab774bf98d5b367bc2efe814bad754577901dfebab296c896bcd134a81aae9460e7a52376c6540c49f88dbba5f102b8018a49b087fbe1c49f1cae4c59bfffae10d7c6eb62c4be3bebe047a8e7fa057b2f06bad47c3d168e565b4cff2f378e13ad8af25c4690effa0e2ca1b7d488b68929aaa05af39584a65d5788f01ef2d24c0a7fb2d31e69e5729e0263b42b1bff60101ae5c198b053c928bdbd22bf81859bdd2981c6c5b035f52f89ff0e4509384153dbf5fd6f6c0cd3ae3bf7d6622425b26774537070ce5564f72b18642686d1702475d2c1c16c72bfc375f473386bec5af0c88dea49ba4df52ff695272530f90b40fd86a53496f9a023333152380c013db2ad4307853d84187b5e66b1b155fb87ca550030192130841d001695acf955636bd5d98bbb9f78292f3554260df2260f0c74b8f2a000b854d83ad1455e4485457c9b2551faca2432feae7c4fdf2b4b1c018a783c0882a42f97f1f0e10bb1b09dd8ffbae45f590d3edda270288c5d14d8e32bf3981a953fda7c8e48503a509ec5a842b15fa9bdc1fe4e4629df27dd61e819e6c4c4c6672a2cbc05b0105519789ead88b713cfb03b4158eeed8d0628af8783f40181832dfe525419b63d02b50e2c2d4b451b4bb3bb9a10a393b9fe424a552832ff73ad26235a5230334211de5b339793c1144035a2f482b16b2fb6f06109558bdd7b87430237ef3efe1ca121a56a46d38ca8405b3efe68e570106ac30b5886b37200ed896015835618aefbb621d177c4259b183210ab7c8d60d304e987c8111c91b5529a8beb1c8879a9f53b4d63a23b31c7e2693b13011d19fc9caa7d0e71fbe09c272bf92577c2128419245e22060c4151051e272b53fa31628d27bc20d6993cba144716bf19c5f954157e9ec010a79693735ee1b10335febe105b73b26c36409d5967ccd3a3c8332b1c02f78cbcdc065db4c65aa5a97cfc5e18d7a2e8126917344489359cd335acb28a510fd11e103fb93016d18150128c54e8c59ed4181c5cf04aef60ff2c93be208b8ab6ed361b082fe3bd21e416d4f519f59b4ea0518636ff43520a9aa418fa9902e06ca2238c2ff2728c70ab2056a654592591f52f15590e15ac7e4e1e9f7ffe18a37813a1ee703e3557ef2c7712497644c2860b714759af61150e2f2a3e4f6d2a7011ab702e486995062550b9ff616b775a5424191864a3f75040c027ea6accdfdc27f63445e758c5dca13a9ab2307b5f3127499b0c25e32f1ce2635d768662930ecc45d93444af4d458ba38ccec355cfe850ce2e005f409b527d2e7dacffdfc19b06448a83675290d9023f84c64587d913160410b089006437e37e68a62d062745ff47ac1582cc78ec3ea5d1d2eae825c9a11bcf21c4a6796a48dd9b8fdb65a1ba1e14c66fc539b92c511a17b45fed5c43422db1e097762286f7550d395fa2540d516ff0f20f1b7e4e1b272023907ee2e75c2af52093115d64e02b6064c2cd33469d1ee4961405257fdb5eef2515996e1258968128bc316a16cad4116f30e0e2da2242f1c7af15fceee2c4d5e86c359a1123b7f3a4752be3216fdc45d1a9a555adcaf1b39ef072a579dd809d4713bb04c96465f1a0893370adec6c2fb6ce64b65d4a2c1a67de2a7431ebb8cc96c7e3568465ce4baa928c31795f7f9f0c1344b6e666068f947cd47d5fd0dc31119bea0797fae06e70219349a775a668bd2e0911f54cfc5ee37a821c80a62f7ef2018a7832f60e48492e2a008ebd5882186eb8cd8ab3de1648837070c226abe7725b973d7aee89a702d0dd15bd4f7c3e2e22db4904738264703c8ece0f38fcc202c889775a5347e2c9acd3582d82351983a50d5f9af75fa65026429bde990b362f19d6d035ddc8c93605f27eda398e65681f4a2d2a71380938c68faea66ea42504e8e1850ac9e0de8e0a6de6cebcbc5fa798abdbab7ef6c5fff7634136c89e1f922ea432dd3fd707e2d946218e471edf7ed1a986dae06b1954f5a51cb27f48179fc187d9434a2fb0f85ecec2a82275f19a33c9aad42e24ee0dd1458700e7b6854958e186f5dc929973c366861ba56acb757d6d51447dd7c51d871a1b46330bae3c9b033fd6c243105510a3c53266400d7fa511d83bdb2f2348568ebd957553d1c013fd3abd555aa9f7dedd06ccb05d4f1d252b338f76304f539b04f6cdfff824444dcbd0cbe1603cdef86cd34f1b93a1c13eb1c3b4f06e12fd307dba553e09f2545615074edfebe17b09e74b366e43377565024a9e3bfabf8f92d5773a21f0cc86e97b40e67b7640a2ed1ae9b5424441db7ce26391da74b40b4797558ec8bbc43a37777766ebf0ebe3fa91674f295a38f852fc4a3d9237a03c17f73897e4c8ba1835dd2627da2b1a041befb8e88498f65e69e938ea84a554f688a8fefbbeef7d13ab008c84b25f545dc27cf89e7b78e77023d34897386d42febbdc0cb68994b4078639d48ad0f7cad59dd2fcffa8efd6b6be64bc065b331bd384ef61967e754ab078e6173d859c5a098d48bf39b0a2b4a9e4b406ec64010b5f4ad3bdaab7271f244dfee76f6dbc314b48d483e080a14611d15348aaf18e74ced5a202c85befceeeffc21a3980e1375f5ad1bb977d0866f727c5d56b216467c00a854e4d89d883d20d8e07a37fb0a1ae1f47a27f0b8e66181181facc4e2a9dff0df234a00e21c318b2107f4ec8dcde94d6ec5c278e94a6dfad74246a8ccb6dd6322be58382cd3da51b41411fd65b1a6958a7d033ddfe16292603c457fbbf16f74839a78e49db5b712dbd16e9c292c47011fb2bc2e811761e40e14bc7b63fea5f83a041ab2e4a5454be4efdf292777113c02c52a6534f504109a42c3a1f76a5fc4472b2dad18a47f2b75a9aeed863b386539843eee92707c914d25fc519aa1ecb714293ab8291b2a5e664a853425dfe4975a9132f87151a5b65c8fcf6633a7e0c78771043d41e649102f9a289db9b4d7f892b61d7c1c5aa3fe5bec934646b3f63b77c9c7af80dd4aad75b9aca5851417653c8162ba649c45753ea90327d1cae6bea9ad13fec7994a18b728fe880fc9a60b2a5925f088dbc65e85b2b0027078e913771149a2d091d31acda03389007584c865ff6e0782c0257bdaaa3df3131b48de3e5079fdb6fec22649ce58de3d703e2e4d854126a4ae272bc68a06f38b04f683b4afd4d959bec5f6ea7f8c2bdce4086a794229520b002a8847c8db0d82acd72bfafaf9529b53975517f7ae37a2e00321c6bea113df7196d614f49129e72c1642c948fdd5a94ba397a47ddab174dfe01bea6e78d235698f2d5234389d74e492073be9a2fc084277a2242da27fd042e90cfd7ce0c1ddc3350a229d8820cb958e19095c341df12f72a1114c6aa47b478bed02b248a32c463b9a10d45ff71850270af38fb9f13255d86c340edc4352053ad7f1b5b8ca115a35c9ab99540124c6395958ed8dfa1422d6f5e0ee80f38e26318a265736b16b3adc519052c1cfd114068e79734cb19cfce85ef8fb30df308db583aba6279d1047a6b8720d2024bf21a8d6d7d4fecaa8085ecc5c4a5d48a471c0fd6013c5851878f0ce6f5db4f10e58f0eaaccdfd9ea065fef2f8b8bf9c3800cf4e5da89059afdd984907f045428093c2e0690ceb3b888c3fb78f4df816ece6a271106ab1718c95cf68d64571499b34b188134597448bb61c9f4627d5710236ab9f4d331909abd018690a4389a5d0f7f690d544ed7fef2b2e3e8dd8f78133b30e41b231f043704626544cc77836c5451c0ed140c65eac0588b883e38f1f219f62db3ae725e06f279b99dbb4d8855d96fdaa1a728318b93446ea98d642e3c8f9fd0281737a1a4116093a5cc35c1603e01d13d92899ff90a338f272329e6a807047bf819f0895717378ddfb7c86e6a03b348618b054a0d40fc5e372063f7f7449d2c5ef29d14250914ddd872e7180e3e483ccb44fe704a9e1fa77837f7f3b41bdcc5a6e7a940fd02d3856432a9cdf1c890634c9b80f5d98577528740cb2ee57b1a6c671864eb81d45716cae0d1732a9d7be8b638b1fb66c3c0bf7950705a7dd2a00ae713bdff45301a640e3bac4a828f91817aa7f6702b3dc7ce2d6583c0f871d3e2fae6824e86da76bf0ab1d57989f47395e5c874e2fc633be159200ca963c91fb31d4883468a2bee2f59e92a3ac8b1a6f296237e02551d9102eb68fac12d94a04e4c763cfa6ed1efd0ad704ee65aa5ebce877c0bbe1e816b9b752948aa18dd24db37383ba1ecf7d29c39fd97ccae08c3471640407f372780a9cc1c68e3549c638aaf59637c9b28768fe558ee6288530f518c704f7572bc110db82c1b1ac255278b5eee3fc3c17f7ba383de0fc956635247394b0659fa5d752ea5a6e5ba127508d159aff9c7921d8ff05f8ed1be9aba927258328cd5d87a8ba4a418263270c1b5fd7fcb55953b29d0456b05aab32fbdeef150661198d8c102e117f46bcad2d2b853f9d5dae1a245db106e8081416de85b0f8df36d9bc643738f78a8efe1e942dcec9c73fcf0e2a3080a28de347e4325c4cb190bb4ea7f91fb951b4fc1a4e19d898691ef917ffdc3339f65d55630979fc44ebefc39d62657aed3cc42da8a858b7cfb56707f74c1f9d4481072a1a1919de4b041bf05299f3c332548572aae1c5fa16d4c7f134b37baaf4622eb94ed8cdbad6745db08239f08e076e1fddb65a9648243653e1c2f66699cef2b1d929c989c64237df326c1ee339fa49a54b50dc95854b454e5a77ae4e916d9de118de3c241590617657a6863013233caed80071b057542d09fe01680cf01f44e5765f9711c3343df32c609c06111fe00160d5936129ab188ab3c7b6b7f5b37c7eaa9900329f3abc676644c6eeb12fef1ba2660104c1c0e2423f17c1ac1c85fe77b734de78385ef3d5ec9821ff6dba1e0e0a87e095f4b7190062b4a2637fd663ab9102f2853b206ae5540d9160dd53f0bc75005304288e86ab353ba8c4c1d5ce915ee6b259249e33f94728f5cb2f1d88856055835b81274968f3ccc84c9e71e43fee721cf2240c0715d097b9cecf0b3b8f30718ae876814430a779294f0cab2124b82ac6a31aed65b9a0ace21a5828212a5687c78df20afde05a10902815140a20fa12ff77f7440e290bd9ab218869f3bd092d33023d782230c486c30a9bde4f4212bccc7aa6d4849ac7b62c7887a514877379cdf197f411466e51487687f583cfaac8a3364dcd8012e108c388edfb6a6f1450dd2b0f633a7edb02266f392291c5317afd90e821e0f95dc820eccc2f5c7d67a8dac60b5df4d11bd5e8e0e9bdc512437cb989459c90c1874efd7d219c8490b469a8a0b3ba746f991edbb55d47909e29e6d45da2df99d2c8c7abe8aad8000dea4e18f4e5c370e4c3825ca4321503422e03a6912b64bc46a1151404e545b7cd1eaca9fa3a3abd68992cd5c6f6e6b2e4b1ef92863805a36aa5ba0d9c77426322ef2f6ce534345060a89d22c2dbf22e542a36ab85ccca0afdfbbecfc5c87cb4f39ee81b1ed7fd442432a46439c7e5fa70e621a796ab997736d0ae384d319d74fdb7806c4040c670f6ce97f6527fc755c3369ddb4c8b066d3e7c41148b46265bd00ba079bfcedde3354ca6729b2a24291d4eb94a9eb0ea8ed94e2b0fb07c057ad96ca88ba9265386d7ad25b31b6558b0d838aa9f946e81042427c770a9830a144f482a990d0f02c516268902a26244273e7af56e7b1732c5ce1c43949da53d252d0b6e813629fada4c463d68407c46ede637184fe4788a32dc3b11a36a81df76fe03baefa2b3450b4a93ac3f9c752577d906107630a352f174b53225b26249d9c6f111b6ee397f5e91d3de7ea989a44877eeef6ae612143f7770a4b9c6f74f6901478a2a77bcf612a4204267782108e447917db6351f0839ba54638089708d2f986e91df8b390d2ccc57c4049048a6aa346b1c2da36692c9134c5868b7bf5efeee154b193ffb938c05e40b8e911d1a75e9906c822710ea2247c7a986a3bb29ba3fae11d6eb464dd997a0c7f5644e8f97c85f3c07f9b307289b3832d9e46a4344f82988b469cf3780c05ba875e54a7667b3643a4f1cfed6c06365d5c547a006cbefc487e3a63bb7146eae763a713224185a52053cf966e340eaae67e13771fd1be4a15ccfd1e1279c4438c6bcbe01eb22ee59c65f22f5e47d286371ae4bb62ecdcd27ca4ad02b9dbaa49fb630f4c94af86acb7c0c144e7e7f42d4fc7732559047bcb0bc0fff54815a6c2352b6fe9dd7332708dd5dc632bf2cf9f0db2eaf79c1394ff648537a2bb14edf45e555f8e680f97586fdc93309f8b9ce453f394c34f0eef7d664a045aafa3ccfd8403df1a4c91b9b0e243f470b0ce842c8ab1b458ba7a38ea7ade982212bd9f3cf5096db08ffeae9caecd72b4a0e77bdf9d510a7cfe598401cb5ad5e2a8ad7bebfde2e2c6e492f29d78014c1dddcdaef8d3e551803e32a3d47540b7bb5335daf8beca131e47647594b267fedf7d7a34b6468c259d86db1f988e9e0268ad393d99057f513f28996249debc0aea2b45b08ea95ed354487e34c8f1aa78f96600cefedadf7bdacb66c05044946946ce473c924f8e41c58aaa237b789b0a2c34766a51cfb97ea07382fb59226f0cefaa3b2449e51e90b1bca54cd7eb4025fd40caabe8e897c54ee136c47498ec16adb73368f0d70acb0d14ff15b12fa6e44a5bd5c755da980f025dd8c8fc76f09038c7d34d7bc9c0fa799392fdf5ba56c43ba1c4ea3747defdacb3e8efde48395e45c94ae8adf9f4ff469adbd4133e94691446465e1759c0acee643dd2253b4250da8c2b0e8d76a4de7bc6a651d09751696f1295545f12b91d2684242ff92b0bb13a72f053b416d22c45b839c89e00cafef5ce974aabefb1a11419fa83a40a577accfccfc543b94d85fd5538beef8bd4c53cc4f45db3c202cbcc2bef3198d5023854f6aad8628139b551f50d886a793bfa3d2caa346544411b88113c4563b2692fe5714897d949bebec36107cd72c79c5da2a5dddce3c8b0a6084a0de6ed723d8964757111d5fb0537dcf7bb62835a74739a92c8d148f19b75ffdf747fab58fc65e2ba3cc0bb12f93b80f48d207073b425438848511dce24ff2a4c4674ae2c4842f9155d6d6f225d887296ce8d5cb8cc2016eb1a7ff89127aeab2511fd2aa70a52300b124890e369fc9d64e043e897411bc7b221589e41cbd223d0d7f53efd8d2915174ca47ca5175fb2bd402c2e630ed98b173105e2b189826b02284c01326a74d4faf9c9cfb6d952ac5db212aa5657752269d78aacc2429d06a1b01b0184ef516cf217b78c2bb3bb3a022e3d9374483400ce3dc9b2b13b3e2fde1ec5e2ca370e2305ee1ea2e67d637bab84427dda4ea99494c771c2c6c1bd7fd8271f8160cbd13c7445994f06906cdf4611f9a25e98188ccc913896679ab7bd231a51f2c7231dc48159bb68a8376aa13fb6c24367605a41644ead56b2a9da0c7bb4a811ee690d1223265bbd95f4370d9f465d8e8e4a7e3689a7b88f6a68a5c19982a4c7e188a239b7bea703c0c7e5465e3485f2dd5204075c24b68111b0b0e871e4004cd3e043f9b84d95c0c9fd4d06cd194d0cc3d0a05799d50b1fc75896f3c4dc02f166e9458e9a0f493bc92b2373fd95b36fb204853718307e08ca5e521eeff3f4a6e5a13fd12c5d5d0f70672920386e4b309bdf85808e467292dc9246c0558de0e6dfd535fa9dfc04ccda8b3ca4db978f0db578a072037794acd01c7ad33392b55a4651bb9c2cf024d7677e3367f46f8d70df6fb8118193ca61a5650caa205c45b050e4ee2d1068423bfb12489d1b944501d9efc602b19d7f6c8346df52f7f4c24c04144819d4d9dd2474b91875e57bd90b3c3e6dcb9e45ef7a272d038218202dd68618e1deffcb117b0d73d5cbf6c9c086eb5c1cd21bc65321d3b328a3956f794275eb2d3519554c192168bb2315d6a9b9e1e86436b2b3c9fe54c41f64d18d415b0fadef88508d39e0852dd381c31fb96969272fc32bf01cfec43363095fbcd63986949bf323ce2697441cdfafc185e1b2f046c3a92c813d68a5ab314baf534939f945885b076d080ac9f71e50376afbd8b4cdd74afa691266eb434d1b6dd1ad208a81825421e62acab276fe00158237864632db9f8ba709d9cc56706f763c758c7b701b89e843eab4805f740b8c66abc6fd555e4c23baf207d4620ab6f3611c663c20af46cd6a603b60aa865b1effd393da0a67c436538080c48cf7142a8e26dd3e8d1658f6453ea6931bc3001f082988c0c4ea007e0ae0d49390945ad84635da59fe48d4834b8d1d55b9e73c4d5d0ccc9158bf35ba8ab2aaa0ed2bbd9f179f0b653f90b387af544 您好, 这里需要密码.

2024/10/17
articleCard.readMore

CSP2024 游记

Day -INF 初赛。过了。 Day 0 下午到日照,在酒店把之前 Blog 上记的东西口胡了一遍。 晚上去考场试机,怎么还要模拟考试流程不让带包还要查身份证准考证。 屏幕太刺眼换了个显示器,试的时候发现没有 Linux 虚拟机测不了编译,不过倒是有 Excel 方便打草稿。 机子还可以一秒 6×1086\times 10^86×108。 Day 1 上午继续复健。 下午到考场,发了压缩包密码先看样例,似乎没发现字符串和大模拟,看文件名也没看出来什么算法。 开题,先扫了一遍,t1 很可做,t2 好像可以数据结构?t3 一眼 DP,t4 题面过长神秘题。 t1 看小样例直接写了个判定当前数能否被下一个数干掉的东西,发现大样例过不去。手模一下发现还可以被更多的后面的数干掉,瞪了几分钟瞪出来了大概是求众数出现次数。感觉证明比较显然没仔细证,大样例过了。 t2 显然对于每一个车可以处理出区间,就变成了区间和点的问题。想的时候不知道为什么按照一开始的想法直接按数据结构想的,发现第一问可以线段树维护,第二问好像数据结构搞不了。直接上手搞区间和第一问,因为担心精度问题直接手写的整型取整,写完后发现测样例的区间不对,才注意到是开区间并且有不能整除的情况要分加速减速特判,写完后已经过了近 1hr。想到第二问似乎可以贪心的去搞,但是害怕后面打不完先开 t3。 t3 直接大力 DP 用 fi,0/1f_{i,0/1}fi,0/1​ 表示前 iii 个数最后一个是 0/10/10/1 的最大得分,实现了一下样例答案对了但过程和样例解释不一样,对着样例解释调了至少 10min,才注意到样例解释里 111 和 222 全写反了。测大样例发现过不去,推了一会以为式子写假了,赶紧写个 dfs 跑路回去看 t2。 t2 贪心实现了第二问,还是过不去大样例,瞪了一会发现多测没清空。改之后只能过匀速的特殊性质。此时剩的时间已经不是很充裕了,开始慌。后来改了一些东西,仍然过不去还剩半小时左右。 尝试打 t4 暴力,仔细读题并不是很好实现,特殊性质 A 是可做的。大概写了十几行看到剩的时间不多了,又听到监考一直在说要每个人检查文件,感觉写不完了。把文件整了一遍,听到说最后五分钟在关闭所有窗口并且手离开键盘鼠标的情况下打开 D 盘。文件没问题就照做了。 出考场越发感觉 t2 很典的东西没有写出来比较抽象,放掉 t3 的暴力 DP 也并不是一个很好的选择。时间主要就浪费在 t2 和 t3 互相调不出来的左右横跳上,这次比赛甚至是正式比赛中唯一一次没有去厕所缓一下的。越到后面心态越炸反而越写不出来。晚上连夜回济南,在车上看 u 群发现想的基本都是正解,就是实现太差。并且貌似人均 300。期望只有 100+[10,20]+20+0=[130,140]100+[10,20]+20+0=[130,140]100+[10,20]+20+0=[130,140] 了。 Day 2 重写了一遍 t2 非常快的过掉了,并且发现死因是计算区间的时候开区间的向下取整,当正好可以整除时没有 −1-1−1。 另外好像 t2 考场代码时间复杂度比较炸。

2024/10/28
articleCard.readMore

数论 学习笔记

欧几里得算法 就是求最大公约数的辗转相除法。 数学公式 gcd⁡(a,b)={gcd⁡(b,a mod b),b≠0a,b=0\gcd(a, b)=\begin{cases}\gcd(b,a\bmod b) &,b\neq 0\\a &,b=0\end{cases}gcd(a,b)={gcd(b,amodb)a​,b=0,b=0​ 模板 1 2 3 4 5 int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } 拓展欧几里得(exgcd) 适用问题 给定正整数 a,ba,ba,b,求出 ax+by=gcd⁡(a,b)ax+by=\gcd(a,b)ax+by=gcd(a,b) 的一组正整数解。 算法思路 由欧几里得算法得出 ax+by=gcd⁡(a,b)=gcd⁡(b,a mod b)ax+by=\gcd(a,b)=\gcd(b,a\bmod b)ax+by=gcd(a,b)=gcd(b,amodb),代回原式,即为: bx′+a mod b×y′=gcd⁡(b,a mod b)bx^{\prime}+a\bmod b\times y^{\prime}=\gcd(b,a\bmod b)bx′+amodb×y′=gcd(b,amodb) 假设我们已知上式的一组解 x′,y′x^{\prime},y^{\prime}x′,y′,可以得到: ax+by=gcd⁡(a,b)=bx′+a mod b×y′=bx′+(a−⌊ab⌋×b)y′=ay′+b(x′−⌊ab⌋×y′)\begin{aligned}ax+by=\gcd(a, b) &=b x^{\prime}+a \bmod b\times y^{\prime} \\&=b x^{\prime}+(a-\lfloor \frac{a}{b} \rfloor \times b) y^{\prime}\\&=a y^{\prime}+b(x^{\prime}-\lfloor \frac{a}{b}\rfloor \times y^{\prime})\end{aligned}ax+by=gcd(a,b)​=bx′+amodb×y′=bx′+(a−⌊ba​⌋×b)y′=ay′+b(x′−⌊ba​⌋×y′)​ 所以 ax+by=ay′+b(x′−⌊ab⌋×y′)x=y′y=x′−ab×y′\begin{aligned}ax+by&=ay^{\prime}+b(x^{\prime}-\lfloor \frac{a}{b}\rfloor \times y^{\prime})\\x&=y^{\prime}\\y&=x^{\prime}-\frac{a}{b}\times y^{\prime}\end{aligned}ax+byxy​=ay′+b(x′−⌊ba​⌋×y′)=y′=x′−ba​×y′​ 我们发现,当 b=0b=0b=0 时,a×1+b×0=aa\times 1+b\times 0=aa×1+b×0=a,有一组解 {x=1y=0\begin{cases}x=1\\y=0\end{cases}{x=1y=0​ 模板 直接递归求解即可 1 2 3 4 5 6 7 8 9 10 11 12 int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1; y=0; return a; } int g=exgcd(b,a%b,y,x); y=y-a/b*x; return g; } 这时,我们已经得到了一组解,下一步是求解 ax+by=cax+by=cax+by=c。 求解 ax+by=cax+by=cax+by=c 接下来我们需要分类讨论。 设 g=gcd⁡(a,b)g=\gcd(a,b)g=gcd(a,b)。 当 c mod b≠0c\bmod b\neq0cmodb=0 时,无解。 否则,令 k=cgk=\frac{c}{g}k=gc​, 则 ax′k+by′k=g×k=cax^{\prime}k+by^{\prime}k=g\times k=cax′k+by′k=g×k=c 得 {x=x′ky=y′k\begin{cases}x=x^{\prime}k\\y=y^{\prime}k\end{cases}{x=x′ky=y′k​ 设 xxx 的周期 T=bgT=\frac{b}{g}T=gb​,则最小正整数解为 (x mod T+T) mod T(x\bmod T+T)\bmod T(xmodT+T)modT。 乘法逆元 定义 已知 a,pa,pa,p,求 ax≡1(modp)ax\equiv 1\pmod{p}ax≡1(modp) 中的 xxx,称 xxx 为 aaa 关于 ppp 的逆元。 求解 直接求解 ax+py=1ax+py=1ax+py=1 即可。 最终答案为 (x mod p+p) mod p(x\bmod p+p)\bmod p(xmodp+p)modp。 费马小定理 当 ppp 为素数时,aaa 关于 ppp 的逆元是 ap−2a^{p-2}ap−2。 数论分块 balabala a mod b=a−b×⌊ab⌋a\bmod b=a-b\times\lfloor\frac{a}{b}\rflooramodb=a−b×⌊ba​⌋ 一些题 P1516 青蛙的约会 Problem Link 这是一道比较裸的拓欧题。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #define int ll int x,y,m,n,l; int p,q; int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1; y=0; return a; } int g=exgcd(b,a%b,y,x); y=y-a/b*x; return g; } signed main() { x=read();y=read();m=read();n=read();l=read(); int a=n-m,b=x-y; if(a<0) { a=-a; b=-b; } int ans=exgcd(a,l); if(b%ans!=0) { cout<<"Impossible"<<endl; } else { cout<<((p*(b/ans))%(l/ans)+l/ans)%(l/ans)<<endl; } return 0; } CF1114C Trailing Loves 首先从 101010 进制开始分析。求 ppp 末尾 000 的数量即为求 ppp 的因数中含有 222 和 555 的数量的最小值。 例如设 x1=23×52x_1=2^3\times 5^2x1​=23×52,则 x1x_1x1​ 的末尾 000 的数量即为 min⁡(3,2)=2\min(3,2)=2min(3,2)=2。 接下来考虑 (n!)b(n!)_b(n!)b​ 的末尾 000 的数量。我们先枚举 bbb 的因数 b=p1a1×p2a2×…×pkakb=p_1^{a_1}\times p_2^{a_2}\times \ldots \times p_k^{a_k}b=p1a1​​×p2a2​​×…×pkak​​,若 pimp_i^{m}pim​ 是 n!n!n! 的一个因数,则其对答案的贡献为 ⌊mai⌋\lfloor \dfrac{m}{a_i}\rfloor⌊ai​m​⌋。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 const int N=2e6+10; int n,b; int pri[N],cnt=0; int t[N]; int ans=INF; signed main() { n=read();b=read(); for(int i=2;i*i<=b;i++) { if(b%i==0) { pri[++cnt]=i; while(b%i==0) b/=i,t[cnt]++; } } if(b>1) pri[++cnt]=b,t[cnt]++; for(int i=1;i<=cnt;i++) { int nt=n; int sum=0; while(nt) { sum+=nt/pri[i]; nt/=pri[i]; } ans=min(sum/t[i],ans); } printf("%lld\n",ans); return 0; } CF1493D GCD of an Array 由于一个集合的最大公因数的一个质因数的指数是这个集合中该质数指数的最小值,可以想到每次动态维护集合 gcd 时,考虑将 yyy 分解质因数 y=p1e1×p2e2×…×pkeky=p_1^{e_1}\times p_2^{e_2}\times \ldots \times p_k^{e_k}y=p1e1​​×p2e2​​×…×pkek​​,如果集合中除 axa_xax​ 以外的其他元素均有可以对答案产生贡献的因数 pip_ipi​,那么答案就可以加入 pip_ipi​ 产生的贡献。 形式化的,如果我们定义 vp(ai)v_p(a_i)vp​(ai​) 为 aia_iai​ 中质因数 ppp 的指数,那么若满足 min⁡(vp(a1),…,vp(ax−1),vp(y),vp(ax+1),…,vp(an))>min⁡(vp(a1),vp(a2),…,vp(an))\min(v_p(a_1), \ldots, v_p(a_{x-1}), v_p(y), v_p(a_{x+1}), \ldots, v_p(a_n)) > \min(v_p(a_1), v_p(a_2), \ldots, v_p(a_n))min(vp​(a1​),…,vp​(ax−1​),vp​(y),vp​(ax+1​),…,vp​(an​))>min(vp​(a1​),vp​(a2​),…,vp​(an​)) 设 AAA 为上述两式的差值,则对答案的贡献为 pAp^ApA。 接下来考虑如何求。可以用线性筛预处理质数,每次操作用预处理的最小质因子分解。 我们用 multiset 记录质数 ppp 出现在的元素下标,ttt 数组记录 ppp 在多少个不同的元素中出现。当执行一次操作时,判断是否能够给答案产生贡献。如果能,那么插入当前的下标,随后暴力将 multiset 中的 1∼n1\sim n1∼n 下标删除一次。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 const int N=2e5+10; int n,m; int a[N]; multiset<int> st[N]; int b[N]; int prime[N]; int cnt=0; int t[N]; int ans=1; void pri(int n) { for(int i=2;i<=n;i++) { if(!b[i]) b[i]=i,prime[++cnt]=i; for(int j=1;j<=cnt;j++) { if(prime[j]>b[i] || prime[j]>n/i) break; b[i*prime[j]]=prime[j]; } } } void modify(int p,int x) { while(x!=1) { int minn=b[x]; if(st[minn].find(p)==st[minn].end()) t[minn]++; st[minn].insert(p); if(t[minn]==n) { for(int i=1;i<=n;i++) { st[minn].erase(st[minn].find(i)); if(st[minn].find(i)==st[minn].end()) t[minn]--; } ans=(ans*minn)%mod; } x/=minn; } } signed main() { pri(N-1); n=read();m=read(); for(int i=1;i<=n;i++) { a[i]=read(); } for(int i=1;i<=n;i++) { modify(i,a[i]); } while(m--) { int p=read(),x=read(); modify(p,x); printf("%lld\n",ans); } return 0; }

2024/6/27
articleCard.readMore

数学期望 学习笔记

前言 期望的广义定义:一次随机抽样中所期望的某随机变量的取值。 一个例子: 一次考试满分 100pts100pts100pts,有 0.50.50.5 的概率考 90pts90pts90pts,0.30.30.3 的概率考 80pts80pts80pts,0.20.20.2 的概率考 50pts50pts50pts,则这次考试成绩的期望即为 0.5×90+0.3×80+0.2×50=79pts0.5\times 90+0.3\times 80+0.2\times 50=79pts0.5×90+0.3×80+0.2×50=79pts。 与 加权平均值 类似。 P8774 爬树的甲壳虫 Problem Link Statement 有一只甲壳虫想要爬上一颗高度为 nnn 的树,它一开始位于树根,高度为 000,当它尝试从高度 i−1i-1i−1 爬到高度为 iii 的位置时有 PiP_{i}Pi​ 的概率会掉回树根,求它从树根爬到树顶时,每次尝试花费 111 个单位时间,求经过的时间的期望值是多少。 Solution 正推方法。 设 fif_ifi​ 表示从根爬到 iii 花费时间的期望。 考虑转移,如果尝试成功,可以直接花费 111 单位时间从 i−1i - 1i−1 跳到 iii,期望为 (1−pi)×1(1 - p_{i})\times 1(1−pi​)×1;如果尝试失败,需要花费 111 单位时间回到根,然后再花 fif_ifi​ 的时间回到 iii,期望为 pi×(fi+1)p_i\times (f_i + 1)pi​×(fi​+1)。 容易得到 fi=fi−1+(1−pi)+(fi+1)×pif_i = f_{i - 1} + (1 - p_i) + (f_i + 1)\times p_ifi​=fi−1​+(1−pi​)+(fi​+1)×pi​。化简后,可以得到下面的方程: fi=fi−1+11−pi=(fi−1+1)×yiyi−xif_i = \frac{f_{i-1} + 1}{1 - p_i} = (f_{i - 1} + 1)\times\frac{y_i}{y_i - x_i}fi​=1−pi​fi−1​+1​=(fi−1​+1)×yi​−xi​yi​​ 比倒推简单许多。 ▶倒推(需消元) 设 fif_ifi​ 表示从 iii 到树顶 nnn 所花费时间的期望值。 接下来考虑转移,如果这次尝试成功,其期望为 (1−pi+1)fi+1(1-p_{i+1})f_{i+1}(1−pi+1​)fi+1​。如果这次尝试失败,回到树根,则其期望为 pi+1f0p_{i+1}f_0pi+1​f0​。 转移方程为: fi=1+(i−pi+1fi+1)+pi+1f0f_i=1+(i-p_{i+1}f_{i+1})+p_{i+1}f_0fi​=1+(i−pi+1​fi+1​)+pi+1​f0​ 观察转移方程,发现其中 f0f_0f0​ 和 fi+1f_{i+1}fi+1​ 项是未知的。考虑倒推,可以求出 fi+1f_{i+1}fi+1​,但无论如何都无法求 f0f_0f0​,故多写几项寻找规律: f0=1+(i−p1f1)+p1f0f1=1+(i−p2f2)+p2f0f2=1+(i−p3f3)+p3f0f_0=1+(i-p_1f_1)+p_1f_0\\f_1=1+(i-p_2f_2)+p_2f_0\\f_2=1+(i-p_3f_3)+p_3f_0f0​=1+(i−p1​f1​)+p1​f0​f1​=1+(i−p2​f2​)+p2​f0​f2​=1+(i−p3​f3​)+p3​f0​ 此时即可直接解方程,进行带入,展开后为: f0=1+(1−p1)+(1−p1)(1−p2)f2+[p1+(1−p1)p2]f0f_0=1+(1-p_1)+(1-p_1)(1-p_2)f_2+[p_1+(1-p_1)p_2]f_0f0​=1+(1−p1​)+(1−p1​)(1−p2​)f2​+[p1​+(1−p1​)p2​]f0​ 因为题意中 fn=0f_n=0fn​=0,所以原式化简为: f0=1+(1−p1)+[p1+(1−p1)p2]f0f_0=1+(1-p_1)+[p_1+(1-p_1)p_2]f_0f0​=1+(1−p1​)+[p1​+(1−p1​)p2​]f0​ 将其表示为 f0=A+Bf_0=A+Bf0​=A+B 形式,则可以进行对应: A=1+(1−p1)+(1−p1)(1−p2)+⋯+(1−p1)(1−p2)⋯(1−pn−1)B=p1+p2(1−p1)+p3(1−p1)(1−p2)+⋯+pn(1−pn)⋯(1−pn−1)A=1+(1-p_1)+(1-p_1)(1-p_2)+\cdots+(1-p_1)(1-p_2)\cdots(1-p_{n-1})\\B=p_1+p_2(1-p_1)+p_3(1-p_1)(1-p_2)+\cdots+p_n(1-p_n)\cdots(1-p_{n-1})A=1+(1−p1​)+(1−p1​)(1−p2​)+⋯+(1−p1​)(1−p2​)⋯(1−pn−1​)B=p1​+p2​(1−p1​)+p3​(1−p1​)(1−p2​)+⋯+pn​(1−pn​)⋯(1−pn−1​) A,BA, BA,B 都可以直接计算,则本题解决。 另外注意到数据要求输出 ab mod P\frac{a}{b}\bmod Pba​modP 的结果,需要用到乘法逆元,由于 PPP 为质数,可以直接通过费马小定理求出。 Core Code 这是倒推的代码。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ll ksm(ll x,ll y) {//快速幂 ll res=1; while(y) { if(y&1) res=res*x%mod; x=x*x%mod; y>>=1; } return res; } int main() { n=read(); for(int i=1;i<=n;i++) { int a=read(),b=read(); p1[i]=a*ksm(b,mod-2)%mod;//失败概率 p2[i]=(b-a)*ksm(b,mod-2)%mod;//成功概率 } A=1; ll t=1; for(int i=1;i<=n;i++) { if(i!=n) A=(A+p2[i]*t%mod)%mod; B=(B+p1[i]*t%mod)%mod; t=(p2[i]*t)%mod; } write(A*ksm((1-B+mod)%mod,mod-2)%mod); return 0; } ABC360E Random Swaps of Balls Luogu Link | AtCoder Link Statement 有 nnn 个球,其中 n−1n-1n−1 球为白球,剩下一个球为黑球。初始时黑球为第 111 个球。 你可以进行 kkk 次操作,每次操作等概率随机选择两个整数 i,j∈[1,n]i, j\in [1,n]i,j∈[1,n],然后交换第 iii 个和第 jjj 个球。 求最终黑球位置期望,对 P=998,244,353P=998,244,353P=998,244,353 取模。 Solution 设 fif_ifi​ 为第 iii 次操作后的期望值,显然 f0=1f_0=1f0​=1。 则有: fi={1,i=0(n−1)2+1n2×fi−1+2n2×(n(n+1)2−fi−1),otherwise.f_i=\begin{cases}1 &,i=0\\\dfrac{(n-1)^2+1}{n^2}\times f_{i-1}+\dfrac{2}{n^2}\times (\dfrac{n(n+1)}{2}-f_{i-1}) &,\text{otherwise.}\end{cases}fi​=⎩ ⎨ ⎧​1n2(n−1)2+1​×fi−1​+n22​×(2n(n+1)​−fi−1​)​,i=0,otherwise.​ 可以将式子分为两部分: 第一部分加号前,表示在第 iii 次操作时球 xxx 的位置没有被移动。此时选择的两数 a,ba,ba,b 各有 n−1n-1n−1 种选择,注意还有一种 a=b=xa=b=xa=b=x 的情况,所以该情况概率为 (n−1)2+1n2\dfrac{(n-1)^2+1}{n^2}n2(n−1)2+1​,再乘上该情况下 xxx 的位置,即 fi−1f_{i-1}fi−1​; 第二部分为加号后,表示在第 iii 次操作时移动了 xxx 的位置。球落到每个位置上的概率显然是相等的 2n2\dfrac{2}{n^2}n22​,期望显然为 ∑i=1n(2n2×i)\sum_{i=1}^n(\dfrac{2}{n^2}\times i)∑i=1n​(n22​×i)。但需要减去 xxx 仍在操作前位置上的情况,注意由于不确定当前 xxx 的位置,不能只使 i∈[2,n]i\in[2,n]i∈[2,n] 而是需要减掉 fi−1f_{i-1}fi−1​。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 int ksm(int x,int p) { int res=1; while(p>0) { if(p&1) res=res*x%mod; x=x*x%mod; p>>=1; } return res; } signed main() { n=read();k=read(); f[0]=1; int n2=ksm((n*n)%mod,mod-2); int a=((n-1)*(n-1))%mod; int sum=((1+n)*n/2)%mod; for(int i=1;i<=k;i++) { f[i]=((a+1)*f[i-1]%mod*n2%mod+((2*n2%mod)*(sum-f[i-1])%mod)%mod+mod)%mod; } printf("%lld\n",f[k]); return 0; } P1654 OSU! Problem Link Statement 给定 nnn 次操作,每次操作有成功率 pip_ipi​,成功记为 111,失败记为 000,形成一个长度为 nnn 的 01 串。极长的连续 xxx 个 111 贡献贡献 x3x^3x3 分数,求期望得分。 Solution 设 fif_ifi​ 为第 iii 次操作后的期望得分,f0=0f_0=0f0​=0。 每次操作成功对答案的贡献为 (k+1)3−k3=3k2+3k+1(k+1)^3-k^3=3k^2+3k+1(k+1)3−k3=3k2+3k+1。 则通过递推求 k2k^2k2 和 kkk 的期望即可,这里设为 len2len2len2 和 lenlenlen,要注意 E(k2)≠E(k)2E(k^2)\not =E(k)^2E(k2)=E(k)2,所以 len2len2len2 和 lenlenlen 需要分别求。 则最终转移方程为: leni=(leni−1+1)×pilen2i=(len2i+2×len2i−1+1)×pifi=fi−1+(3×len2i−1+3×leni−1+1)×pi\begin{aligned}len_i&=(len_{i-1}+1)\times p_i\\len2_i&=(len2_i+2\times len2_{i-1}+1)\times p_i\\f_i&=f_{i-1}+(3\times len2_{i-1}+3\times len_{i-1}+1)\times p_i\end{aligned}leni​len2i​fi​​=(leni−1​+1)×pi​=(len2i​+2×len2i−1​+1)×pi​=fi−1​+(3×len2i−1​+3×leni−1​+1)×pi​​ 这里还注意到最后一个式子与前两个不同。原因是前两个式子的含义是第 iii 位的期望,但最终要求的答案是前 nnn 位的期望。 Core Code 1 2 3 4 5 6 7 8 9 10 11 int main() { n=read(); for(int i=1;i<=n;i++) cin>>p[i]; for(int i=1;i<=n;i++) { len[i]=(len[i-1]+1.0)*p[i]; len2[i]=(len2[i-1]+2.0*len[i-1]+1.0)*p[i]; f[i]=f[i-1]+(3.0*len2[i-1]+3.0*len[i-1]+1.0)*1.0*p[i]; } printf("%.1lf\n",f[n]); return 0; } P1297 [国家集训队] 单选错位 Problem Link Statement nnn 道题,第 iii 道有 aia_iai​ 个选项,选择每个选项的概率第相等的。但是每个选择都会填到后一道题。求对的期望题数。 Solution 对于每一个题目 iii,其是否正确仅与 iii 和 i−1i-1i−1 道题目选项个数有关。 要使 iii 和 i−1i-1i−1 个题目选择的答案一样,仅有 min⁡(ai,ai−1)\min(a_i,a_{i-1})min(ai​,ai−1​) 种情况,而总共有 ai×ai−1a_i\times a_{i-1}ai​×ai−1​ 种情况。易证。 所以 fi=fi−1+min⁡(ai,ai−1)ai×ai−1f_i=f_{i-1}+\dfrac{\min(a_i,a_{i-1})}{a_i\times a_{i-1}}fi​=fi−1​+ai​×ai−1​min(ai​,ai−1​)​。 题目对内存要求严格,不能用数组保存答案。 Core Code 1 2 3 4 5 ans=1.0*min(a[1],a[n])/(a[1]*a[n]*1.0); for(int i=2;i<=n;i++) { ans=ans+1.0*min(a[i-1],a[i])/(a[i-1]*a[i]*1.0); } printf("%.3Lf\n",ans); P4550 收集邮票 Problem Link Statement 有 nnn 种不同的邮票,皮皮想收集所有种类的邮票。每次只能买一张,买到的邮票是等概率的。所以皮皮购买第 kkk 次邮票需要支付 kkk 元钱。 求得到所有种类的邮票需要花费的钱数目的期望。 Solution 设买了 kkk 张邮票才能集齐,那么最终答案为 ∑i=1ki=k+k22\sum_{i=1}^ki=\dfrac{k+k^2}{2}∑i=1k​i=2k+k2​。 所以我们设 fif_ifi​ 表示已经集齐了 iii 张邮票,还需要买的邮票数的期望。 因为有 in\dfrac{i}{n}ni​ 的概率买到已有的,那么此时次数应 +1+1+1;有 n−in\dfrac{n-i}{n}nn−i​ 的概率买到没有的,次数应在 fi+1f_{i+1}fi+1​ 的基础上 +1+1+1。 所以可得: fi=in×(fi+1)+n−in×(fi+1+1)fi=infi+n−infi+1+1n−infi=n−infi+1+1fi=fi+1+nn−i\begin{aligned}f_i&=\dfrac{i}{n}\times(f_i+1)+\dfrac{n-i}{n}\times(f_{i+1}+1)\\f_i&=\dfrac{i}{n}f_i+\dfrac{n-i}{n}f_{i+1}+1\\\dfrac{n-i}{n}f_i&=\dfrac{n-i}{n}f_{i+1}+1\\f_i&=f_{i+1}+\dfrac{n}{n-i}\end{aligned}fi​fi​nn−i​fi​fi​​=ni​×(fi​+1)+nn−i​×(fi+1​+1)=ni​fi​+nn−i​fi+1​+1=nn−i​fi+1​+1=fi+1​+n−in​​ 由于上文提到 E(k2)≠E(k)2E(k^2)\not =E(k)^2E(k2)=E(k)2,所以需要根据 fif_ifi​ 完全平方展开预处理一个 gig_igi​: gi=in×(fi+1)2+n−in×(fi+1+1)2⇒=gi+1+2in−ifi+2fi+1+nn−i\begin{aligned}g_i&=\dfrac{i}{n}\times(f_i+1)^2+\dfrac{n-i}{n}\times(f_{i+1}+1)^2\\\Rightarrow&=g_{i+1}+\dfrac{2i}{n-i}f_i+2f_{i+1}+\dfrac{n}{n-i}\end{aligned}gi​⇒​=ni​×(fi​+1)2+nn−i​×(fi+1​+1)2=gi+1​+n−i2i​fi​+2fi+1​+n−in​​ 由于 fif_ifi​ 依赖于 fi+1f_{i+1}fi+1​ 且已知 fn=0f_{n}=0fn​=0,故使用倒推。最终答案 f0+g02\dfrac{f_0+g_{0}}{2}2f0​+g0​​。 Core Code 1 2 3 4 5 6 n=read(); for(int i=n-1;i>=0;i--) { f[i]=f[i+1]+n*1.0/(n-i)*1.0; g[i]=g[i+1]+i*2.0/(n-i)*1.0*f[i]+2.0*f[i+1]+n*1.0/(n-i)*1.0; } printf("%.2lf\n",(f[0]+g[0])/2.0); 注:本文最初发表于 2023-05-27。

2024/7/2
articleCard.readMore

CSP2023 游寄

省流:读错两道题。 Day -1 晚上写了点数据结构的板子。 Day 0 早上去日照的路上跟在学校开运动会的同学聊了几句。 车上愣了 4hrs 的神。 下午打了几个板子,口胡了几个 tg 原题。 晚上去考场试机,各种原因不让进考场拖了 15min,进去以后还有 pj 的跟我抢座位。 发现机子分辨率不对,调了半天调不了,想着明天早上还有 pj 也没管,出考场见到教练说了几句。 机子配置很好啊,12 代 i5+32G 内存。 Day 1 上午刚写了个最短路,看到 HL 群传出来了 pj 题,口胡了一遍 T1-T3,跟同学讨论 T2 可能是个原。 下午进考场看到分辨率还没调而且似乎看起来更难受了,趁着装英文输入法的空看了眼显示设置竟然能调了,调完之后 Dev-C++ 依旧很糊,rp--。 开考前打了个线段树。 发下来压缩包密码看到打样例盲猜一个图论,但没发现总司令,感觉今年样例强度格外小。 PDF 密码晚发了 10min,rp--。 (考试中) 开题。 扫了眼 T1 觉得是数学题,T2 暴力很好打,T3 大模拟,T4 神秘题。 然后就在推 T1 结论,推了半天发现情况貌似挺多,写了一种情况跑路看 T2。 打了个 25pts 的纯暴力,开 T3。 看了眼样例就觉得 2 操作只能是定义结构体元素,这样前 13 个点似乎都很好写?性质 A 全输出 ERR?(伏笔) 为什么样例解释错的这么明显都没人问。 定了 1hr 写 T3,写完操作 2 突然发现写不完了似乎,打了个总司令跑路看 T1,rp--。 直接扫似乎很快就能扫完,写了一会过了样例,手糊了几个 hack 过了。 还剩下半个小时。看到 右边 和 右边的右边的右边 正在玩小恐龙,右边的右边 在玩纸牌,监考说要检查 D 盘。 又看了眼 T4 貌似第一遍读错题了,但暴力还是可写的。写到 6:15 感觉写不完果断放弃,开始检查文件。 T2 竟然没删 freopen 的注释,幸好看了一眼。 期望得分 100+25+15+0100+25+15+0100+25+15+0。 到 6:25 监考说把所有程序都关了停止答题,怎么还一场考试凭空缩减 15min。 (考试后) 一出考场就听人说 T1 空间 0.5M,突然想起来开了一堆过程数组没删,感觉很慌。 见到几个同学问了问都没看到 T1 空间到底多少,在想要是 CCF 这么出题今年不得被骂死。 在去吃饭的路上看到了原 PDF,听说 T2 是个 CF 原题。 吃完饭回酒店有了沙东程序,在云斗上测了一遍 T3 保龄,又读了一遍题发现读错了。 期望得分 100+25+0+0100+25+0+0100+25+0+0。 每逢比赛模拟题都拿不到分,怎么回事呢。感觉要该练一练码力了。

2023/10/22
articleCard.readMore

CF1000F One Occurrence 题解

Problem Link | CodeForces Link 一发线段树的做法。 Solution 最初的想法是维护每个元素上次出现的下标 lastlastlast 数组,以样例 1 1 2 3 2 4 为例,维护出来的结果即为 0 1 0 0 3 0,答案就是查找区间 [l,r][l,r][l,r] 内是否有 lasti<llast_i<llasti​<l 的元素。 但这样会出现一个问题:当区间内有元素出现了多次,统计结果会变得不正确。以样例第二组询问为例,a1=a2=1a_1=a_2=1a1​=a2​=1,而 last1=0<1last_1=0<1last1​=0<1,看上去可行但实际则出现了两个 111。 一个可行的解决措施是只保留每个数最后一次出现的 lastlastlast 值,而将前面的值作废。经过这样的操作,样例处理结果即为(下标从 111 开始): a={1,1,2,3,2,4}last={INF,1,INF,0,3,0}\begin{aligned}a=&\{1,&1,&2,&3,&2,&4\}\\last=&\{\text{INF},&1,&\text{INF},&0,&3,&0\}\end{aligned}a=last=​{1,{INF,​1,1,​2,INF,​3,0,​2,3,​4}0}​ 由于在维护靠后的 lastlastlast 时会对前面已经维护的 lastlastlast 造成影响,故我们需要将询问离线,并按区间右端点排序。保证处理当前询问 [l,r][l,r][l,r] 区间时 lastrlast_rlastr​ 没有被作废。 则程序为单点修改 lastlastlast 区间查询 lastlastlast 的最值。值得注意的是维护线段时应保存区间 lastlastlast 的最小值和该值的下标。区间最小值是为了判断最小的 lastlastlast 是否在区间内,不是则证明区间内有最小值。最小值下标是为了输出结果。 相比其他做法码量稍大,但维护 lastlastlast 的 trick 还是有些用处的。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 const int N=5e5+10; int n,m; int a[N]; int last[N]; int t[N]; int ans[N]; struct qs { int l,r,id; }q[N]; int cmp(qs x,qs y) { return x.r<y.r; } struct tree { int val,pos; }; struct node { int val[N*4],pos[N*4],siz[N*4]; void pushup(int p) { if(val[p*2]<val[p*2+1]) val[p]=val[p*2],pos[p]=pos[p*2]; else val[p]=val[p*2+1],pos[p]=pos[p*2+1]; } void build(int p,int l,int r) { if(l==r) { val[p]=INF; pos[p]=l; return ; } int mid=(l+r)>>1; build(p*2,l,mid); build(p*2+1,mid+1,r); pushup(p); } void modify(int p,int l,int r,int x,int w) { if(l==r) { val[p]=w; return ; } int mid=(l+r)>>1; if(x<=mid) modify(p*2,l,mid,x,w); else modify(p*2+1,mid+1,r,x,w); pushup(p); } tree query(int p,int l,int r,int x,int y) { if(x<=l && r<=y) { return {val[p],pos[p]}; } int mid=(l+r)>>1; tree res={INF,0}; if(x<=mid) { tree tmp=query(p*2,l,mid,x,y); if(tmp.val<res.val) { res.val=tmp.val; res.pos=tmp.pos; } } if(y>=mid+1) { tree tmp=query(p*2+1,mid+1,r,x,y); if(tmp.val<res.val) { res.val=tmp.val; res.pos=tmp.pos; } } return res; } }g; int main() { n=read(); for(int i=1;i<=n;i++) { a[i]=read(); last[i]=t[a[i]]; t[a[i]]=i; } m=read(); for(int i=1;i<=m;i++) { q[i].l=read();q[i].r=read();q[i].id=i; } sort(q+1,q+m+1,cmp); g.build(1,1,n); int j=1; for(int i=1;i<=n;i++) { g.modify(1,1,n,i,last[i]); if(last[i]!=0) g.modify(1,1,n,last[i],INF); while(q[j].r==i && j<=m) { tree res=g.query(1,1,n,q[j].l,q[j].r); if(res.val<q[j].l) ans[q[j].id]=a[res.pos]; else ans[q[j].id]=0; j++; } } for(int i=1;i<=m;i++) { cout<<ans[i]<<endl; } return 0; }

2023/12/16
articleCard.readMore

P6878 [JOI 2020 Final] JJOOII 2 题解

Problem Link Explanation 给定一个只包含 J\tt JJ、O\tt OO、I\tt II 三种字符、长度为 NNN 的字符串 SSS 和一个正整数 KKK。定义 KKK 阶 JOI\tt JOIJOI 串为由恰好 KKK 个 J\tt JJ 、KKK 个 O\tt OO 、KKK 个 I\tt II 依次拼接而成的字串。如 222 阶 JOI\tt JOIJOI 串为 JJOOII\tt JJOOIIJJOOII。你可以对 SSS 进行任意次以下操作以将 SSS 变为 KKK 阶 JOI\tt JOIJOI 串: 删除 SSS 的第一个字符 删除 SSS 的最后一个字符 删除 SSS 的任意一个字符 要求最小化并输出第三种操作的次数。如果不能将 SSS 变为 KKK 阶 JOI\tt JOIJOI 串,输出 -1。 Solution 可以发现只要定位到了最前端的 J\tt JJ 的位置,那么就可以确定一个最短的 JOI\tt JOIJOI 串。 即我们可以暴力从前向后扫 J\tt JJ 的位置,然后依次找到 KKK 个 O\tt OO 和 I\tt II 即可。 可以对上面的算法进行优化,我们记录每个 J\tt JJ、O\tt OO、I\tt II 的位置为 cj、co、ci,那么一段 J\tt JJ 的开始位置即为 cjjcj_jcjj​,结束位置为 cjj+k−1cj_{j+k-1}cjj+k−1​,O\tt OO,I\tt II 同理。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 int n,k; char s[N]; int cj[N],co[N],ci[N]; int totj,toto,toti; int ans=INF; int main() { n=read();k=read(); scanf("%s",s+1); for(int i=1;i<=n;i++) { if(s[i]=='J') cj[++totj]=i; if(s[i]=='O') co[++toto]=i; if(s[i]=='I') ci[++toti]=i; } for(int i=1;i<=totj;i++) { if(i+k-1>totj) break;//后面不足 k 个 j,下面 o,i 同理 int ed=cj[i+k-1];//一段 j 的结束,下面 o,i 同理 int pos=1; while(co[pos]<=ed && pos<=toto) pos++;//o 的起始位置,下面 i 同理 if(pos+k-1>toto) break; ed=co[pos+k-1]; pos=1; while(ci[pos]<=ed && pos<=toti) pos++; if(pos+k-1>toti) break; ed=ci[pos+k-1]; ans=min(ans,ed-cj[i]+1-3*k);//答案为枚举的区间长度与 3*k 的差 } printf("%d\n",(ans==INF)?-1:ans); return 0; }

2023/10/28
articleCard.readMore

主定理

主定理适用于递归复杂度计算。 标准版: a,ba,ba,b 是常数,f(n)f(n)f(n) 为额外附加值函数 T(n)T(n)T(n) 为递归式 T(n)=aT(nb)+f(n) (a>0,b>1)T(n)=aT(\frac{n}{b})+f(n)\ (a>0,b>1)T(n)=aT(bn​)+f(n) (a>0,b>1),就有: 当 f(n)=O(n(log⁡ba)−ϵ)f(n)=\mathcal{O}(n^{(\log_ba)-\epsilon})f(n)=O(n(logb​a)−ϵ) 其中 ϵ>0\epsilon>0ϵ>0 是一个常数(相当于 log⁡ba>f(n)\log_ba>f(n)logb​a>f(n)),则有 T(n)=Θ(nlog⁡ba)T(n)=\Theta(n^{\log_ba})T(n)=Θ(nlogb​a); 当 f(n)=Θ(nlog⁡ba)f(n)=\Theta(n^{\log_ba})f(n)=Θ(nlogb​a),则有 T(n)=Θ(nlog⁡balog⁡n)T(n)=\Theta(n^{\log_ba}\log n)T(n)=Θ(nlogb​alogn); 当 f(n)=Ω(n(log⁡ba)+ϵ)f(n)=\Omega(n^{(\log_ba)+\epsilon})f(n)=Ω(n(logb​a)+ϵ) 其中 ϵ>0\epsilon>0ϵ>0 是一个常数(相当于 log⁡ba<f(n)\log_ba<f(n)logb​a<f(n)),且对于一个常数 c<1c<1c<1 和所有足够大的 nnn 有 af(nb)≤cf(n)af(\frac{n}{b})\leq cf(n)af(bn​)≤cf(n)(这一条件在这里可以暂时忽略不看,但在证明时起到至关重要的作用),则有 T(n)=Θ(f(n))T(n)=\Theta(f(n))T(n)=Θ(f(n)). 当 f(n)=Θ(nlog⁡balog⁡kn)f(n)=\Theta(n^{\log_ba}\log^kn)f(n)=Θ(nlogb​alogkn) 其中 k≥1k\geq1k≥1 是一个常数,则有 T(n)=Θ(nlog⁡balog⁡k+1n)T(n)=\Theta(n^{\log_ba}\log^{k+1}n)T(n)=Θ(nlogb​alogk+1n); 举例: 例一:T(n)=4T(n2)+nT(n)=4T(\frac{n}{2})+nT(n)=4T(2n​)+n,此时 a=4,b=2,ϵ=1a=4,b=2,\epsilon=1a=4,b=2,ϵ=1,那么 log⁡ba=log⁡24=2,f(n)=O(nlog⁡ba−ϵ)=O(n2−1)\log_ba=\log_24=2,f(n)=\mathcal{O}(n^{\log_ba-\epsilon})=\mathcal{O}(n^{2-1})logb​a=log2​4=2,f(n)=O(nlogb​a−ϵ)=O(n2−1),f(n)f(n)f(n) 成立,所以 T(n)=Θ(nlog⁡ba)=Θ(n2)T(n)=\Theta(n^{\log_ba})=\Theta(n^2)T(n)=Θ(nlogb​a)=Θ(n2)。 例二:T(n)=2T(n2)+nT(n)=2T(\frac{n}{2})+nT(n)=2T(2n​)+n,此时 a=2,b=2a=2,b=2a=2,b=2,那么 log⁡ba=log⁡22=1,f(n)=Θ(nlog⁡ba)=Θ(n)\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba})=\Theta(n)logb​a=log2​2=1,f(n)=Θ(nlogb​a)=Θ(n),f(n)f(n)f(n) 成立,所以 T(n)=Θ(nlog⁡balog⁡n)=Θ(nlog⁡n)T(n)=\Theta(n^{\log_ba}\log n)=\Theta(n\log n)T(n)=Θ(nlogb​alogn)=Θ(nlogn)。 例三:T(n)=4T(n2)+n3T(n)=4T(\frac{n}{2})+n^3T(n)=4T(2n​)+n3,此时 a=4,b=2,ϵ=1a=4,b=2,\epsilon=1a=4,b=2,ϵ=1,那么 log⁡ba=log⁡24=2,f(n)=Ω(nlog⁡ba+ϵ)=Ω(n2+1)\log_ba=\log_24=2,f(n)=\Omega(n^{\log_ba+\epsilon})=\Omega(n^{2+1})logb​a=log2​4=2,f(n)=Ω(nlogb​a+ϵ)=Ω(n2+1),对于 c=23c=\frac{2}{3}c=32​ 和够大的 nnn,(af(nb)=4(n2)3=4(n38)=n32)≤(cf(n)=2n33)\left(af(\frac{n}{b})=4(\frac{n}{2})^3=4(\frac{n^3}{8})=\frac{n^3}{2}\right)\leq \left(cf(n)=\frac{2n^3}{3}\right)(af(bn​)=4(2n​)3=4(8n3​)=2n3​)≤(cf(n)=32n3​),f(n)f(n)f(n) 成立,所以 T(n)=Θ(f(n))=Θ(n3)T(n)=\Theta(f(n))=\Theta(n^3)T(n)=Θ(f(n))=Θ(n3)。 例四:T(n)=2T(n2)+nlog⁡nT(n)=2T(\frac{n}{2})+n\log nT(n)=2T(2n​)+nlogn,此时 a=2,b=2,k=1a=2,b=2,k=1a=2,b=2,k=1,那么 log⁡ba=log⁡22=1,f(n)=Θ(nlog⁡balog⁡kn)=Θ(nlog⁡n)\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba}\log^kn)=\Theta(n\log n)logb​a=log2​2=1,f(n)=Θ(nlogb​alogkn)=Θ(nlogn),f(n)f(n)f(n) 成立,所以 T(n)=Θ(nlog⁡balog⁡k+1n)=Θ(nlog⁡2n)T(n)=\Theta(n^{\log_ba}\log^{k+1}n)=\Theta(n\log^2 n)T(n)=Θ(nlogb​alogk+1n)=Θ(nlog2n)。 简化版 将一个规模为 nnn 的问题,通过分治得到 aaa 个规模为 nb\dfrac{n}{b}bn​ 的子问题,每次递归进行的计算为 O(nd)O(n^d)O(nd),满足如下形式: T(n)=a⋅T(nb)+O(nd)T(n)=a\cdot T(\dfrac{n}{b})+O(n^d)T(n)=a⋅T(bn​)+O(nd) 则 T(n)T(n)T(n) 满足: T(n)={O(nd)d>log⁡baO(ndlog⁡n)d=log⁡baO(nlog⁡ba)d<log⁡baT(n)=\begin{cases}O(n^d) & d> \log_b a\\O(n^d\log n) & d= \log_b a\\O(n^{\log_b a}) & d<\log_b a\\\end{cases}T(n)=⎩ ⎨ ⎧​O(nd)O(ndlogn)O(nlogb​a)​d>logb​ad=logb​ad<logb​a​ 例如: 有递归式: T(n)={O(1)n=12T(n2)+notherwise.T(n)=\begin{cases}O(1) & n=1\\2T(\dfrac{n}{2})+n & \text{otherwise.}\end{cases}T(n)={O(1)2T(2n​)+n​n=1otherwise.​ 则有 a=2,b=2,d=1a=2,b=2,d=1a=2,b=2,d=1。 ∵1=log⁡22∴T(n)=O(n1log⁡n)=O(nlog⁡n)\begin{array}{ll}\because 1=\log_22\\\therefore T(n)=O(n^1\log n)=O(n\log n)\end{array}∵1=log2​2∴T(n)=O(n1logn)=O(nlogn)​ 另一例子: T(n)={O(1)n=12T(n2)+1otherwise.T(n)=\begin{cases}O(1) & n=1\\2T(\dfrac{n}{2})+1 & \text{otherwise.}\end{cases}T(n)={O(1)2T(2n​)+1​n=1otherwise.​ 则有 a=2,b=2,d=0a=2,b=2,d=0a=2,b=2,d=0。 ∵0<log⁡22∴T(n)=O(nlog⁡22)=O(n)\begin{array}{ll}\because 0<\log_22\\\therefore T(n)=O(n^{\log_2 2})=O(n)\end{array}∵0<log2​2∴T(n)=O(nlog2​2)=O(n)​ 例三: T(n)={O(1)n=12T(n2)+nlog⁡notherwise.T(n)=\begin{cases}O(1) & n=1\\2T(\dfrac{n}{2})+n\log n & \text{otherwise.}\end{cases}T(n)={O(1)2T(2n​)+nlogn​n=1otherwise.​ 则有 a=2,b=2,d=1a=2,b=2,d=1a=2,b=2,d=1。 ∵1=log⁡22∴T(n)=O(n1log⁡n⋅log⁡n)=O(nlog⁡2n)\begin{array}{ll}\because 1=\log_22\\\therefore T(n)=O(n^1\log n\cdot \log n)=O(n\log^2 n)\end{array}∵1=log2​2∴T(n)=O(n1logn⋅logn)=O(nlog2n)​

2023/9/10
articleCard.readMore

CF1695C Zero Path 题解

Problem Link Explanation 给定一个 n×mn \times mn×m 的格点图,每个格子的值为 −1-1−1 或 111。问题要求判断是否存在一条从起点 (1,1)(1, 1)(1,1) 到终点 (n,m)(n, m)(n,m) 的路径,使得路径上经过的格点值的和为 000。路径只能向右或向下移动。 Solution 先上结论。设权值和最大的路径权值为 fmaxf_{max}fmax​,最小权值为 fminf_{min}fmin​,则如果满足 n+m−1n+m-1n+m−1 是偶数且 fmin≤0≤fmaxf_{min}\leq 0 \leq f_{max}fmin​≤0≤fmax​,那么问题有解。 简单观察样例会发现路径的长度只能是 n+m−1n+m-1n+m−1,又因为权值只能是 111 或 −1-1−1,则如果最终有解,111 和 −1-1−1 的数量应当相等。所以如果路径长度是奇数,必然要输出 NO。 接下来要思考的是路径是怎么从 fminf_{min}fmin​ 变化到 fmaxf_{max}fmax​ 的。我们会发现可以通过改变路径转向处的访问位置来变化权值和,一次变化将可能会使权值和改变 +2,−2,0+2,-2,0+2,−2,0。 以样例为例,第一次转向时选择 (1,1)→(2,1)(1,1)\to (2,1)(1,1)→(2,1) 与 (1,1)→(1,2)(1,1)\to (1,2)(1,1)→(1,2) 不会对结果造成影响。而第二次转向时,选择 (1,2)→(2,2)(1,2)\to (2,2)(1,2)→(2,2) 会比 (1,2)→(1,3)(1,2)\to (1,3)(1,2)→(1,3) 的权值和多 222。 又因为路径的长度限制了为偶数,也就是说 111 和 −1-1−1 的数量要么都是偶数,要么都是奇数。这两种情况都会使得权值和为偶数,也就是 fminf_{min}fmin​ 和 fmaxf_{max}fmax​ 都是偶数。 那么就可以看看权值和是怎么从最小值变化为最大值的了。因为我们限定了奇偶性和变化规律,所以其变化序列必将是: fmin,fmin+2,…,0,…,fmax−2,fmaxf_{min}, f_{min}+2, \dots,0 , \dots, f_{max}-2, f_{max}fmin​,fmin​+2,…,0,…,fmax​−2,fmax​ 一定会在变化过程中经过权值和为 000 的情况,所以结论得证。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 T=read(); while(T--) { n=read();m=read(); for(int i=0;i<=n;i++) minn[i][0]=INF,maxn[i][0]=-INF; for(int i=0;i<=m;i++) minn[0][i]=INF,maxn[0][i]=-INF; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { a[i][j]=read(); } } if((n+m-1)%2==1) { printf("NO\n"); continue; } minn[1][1]=maxn[1][1]=a[1][1]; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(i!=1 || j!=1) { maxn[i][j]=max(maxn[i-1][j],maxn[i][j-1])+a[i][j]; minn[i][j]=min(minn[i-1][j],minn[i][j-1])+a[i][j]; } } } if(maxn[n][m]>=0 && minn[n][m]<=0) printf("YES\n"); else printf("NO\n"); }

2023/8/15
articleCard.readMore

AT_ABC306D 题解

Problem Link 很简单的一道 D 题。 Explanation 高桥君要在餐厅里吃一份由 nnn 道菜组成的奇怪的全套菜单,每道菜都有一个美味程度 yiy_iyi​,但是有的菜含有毒素,有的菜含有解毒剂。高桥君可以选择吃或者不吃每道菜,但是如果他吃了毒素,他会拉肚子,如果他拉肚子时再吃毒素,他会死亡。高桥君必须活着离开餐厅,求他能够得到的最大的美味程度之和。 Solution 很显然这是一道 DP 题。 设 fi,1/0f_{i,1/0}fi,1/0​ 表示吃到第 iii 道菜时,当前是否中毒的最大美味值。 接下来分类讨论: 如果当前这一步为无毒,即 xi=0x_i=0xi​=0 时: 考虑 fi,1f_{i,1}fi,1​:要想保持中毒状态,当前这一步一定不能吃,即 fi,1=fi−1,1f_{i,1}=f_{i-1,1}fi,1​=fi−1,1​; 否则,考虑 fi,0f_{i,0}fi,0​:要想在这一步吃完不是中毒状态,有两种可能: 前一步本来就不是中毒状态,那直接取当前吃与不吃的最大值即可,即 fi,0=max⁡(fi−1,0,fi−1,0+yi)f_{i,0}=\max(f_{i-1,0},f_{i-1,0}+y_i)fi,0​=max(fi−1,0​,fi−1,0​+yi​); 前一步是中毒状态,那这一步必须吃,才能使吃完后状态为无毒,即 fi,0=fi−1,1+yif_{i,0}=f_{i-1,1}+y_ifi,0​=fi−1,1​+yi​。 所以,综合一下上式,fi,0=max⁡(fi−1,0,fi−1,0+yi,fi−1,1+yi)f_{i,0}=\max(f_{i-1,0},f_{i-1,0}+y_i,f_{i-1,1}+y_i)fi,0​=max(fi−1,0​,fi−1,0​+yi​,fi−1,1​+yi​)。 否则,如果当前这一步有毒,即 xi=1x_i=1xi​=1 时: 仍然像之前一样,先考虑 fi,1f_{i,1}fi,1​ 情况:也就是这一步吃完时中毒状态,出现两种可能: 之前本来就中毒,这一步没有吃,注意,没有之前中毒,这一步还吃的状态,因为这样会使高桥死亡,fi,1=fi−1,1f_{i,1}=f_{i-1,1}fi,1​=fi−1,1​; 当然,也有可能之前没有中毒,吃了以后中毒了,也就是 fi,1=fi−1,0+yif_{i,1}=f_{i-1,0}+y_ifi,1​=fi−1,0​+yi​。 综合一下,就是 fi,1=max⁡(fi−1,1,fi−1,0+yi)f_{i,1}=\max(f_{i-1,1},f_{i-1,0}+y_i)fi,1​=max(fi−1,1​,fi−1,0​+yi​)。 接着考虑 f1,0f_{1,0}f1,0​:要想当前不中毒,只能不吃当前这一步。即 fi,0=fi−1,0f_{i,0}=f_{i-1,0}fi,0​=fi−1,0​。 结论如下; 当 xi=0x_i=0xi​=0 时: {fi,0=max⁡(fi−1,0,fi−1,0+yi,fi−1,1+yi)fi,1=fi−1,1\begin{cases}f_{i,0}=\max(f_{i-1,0},f_{i-1,0}+y_i,f_{i-1,1}+y_i)\\f_{i,1}=f_{i-1,1}\end{cases}{fi,0​=max(fi−1,0​,fi−1,0​+yi​,fi−1,1​+yi​)fi,1​=fi−1,1​​ 当 xi=1x_i=1xi​=1 时: {fi,0=fi−1,0fi,1=max⁡(fi−1,1,fi−1,0+yi)\begin{cases}f_{i,0}=f_{i-1,0}\\f_{i,1}=\max(f_{i-1,1},f_{i-1,0}+y_i)\end{cases}{fi,0​=fi−1,0​fi,1​=max(fi−1,1​,fi−1,0​+yi​)​ 最后输出 max⁡(fn,0,fn,1)\max(f_{n,0},f_{n,1})max(fn,0​,fn,1​) 即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 f[0][0]=f[0][1]=0; for(int i=1;i<=n;i++) { if(x[i]==1) { f[i][1]=max(f[i-1][1],f[i-1][0]+y[i]); f[i][0]=f[i-1][0]; } else { f[i][1]=f[i-1][1]; f[i][0]=max(f[i-1][1]+y[i],max(f[i-1][0]+y[i],f[i-1][0])); } } write(max(f[n][0],f[n][1]));

2023/6/21
articleCard.readMore

2023.06.03 模拟赛

e73e564409e580286645b6ab4422f1f758d1a44ceb762534c17e042d61fcdf197cff6a33dbdefffd0b43089f0f75a2c2be1fbca4c7d8b68f9fabafaeb816321896c683784f03e67fcb693a89720987be70b4e8022db8e97ccb03b8aef7bcba5af819cbf22ad7a4d0cd3f8d83cdb9acc5a00ca74ebe5f62c744cc78132ca46900f3296de1c561fc94378796865a66867d9cb5e78692755aaad5aa32ae1758144e2c2ab8af92d450e648942bb5bc397d8384dfc2f20d9f5c2ec6d8255f6f44f5459505ecfb9b688dfdb583fe85ddaff7d6d34b3da514620528fb3de994a0a6e2ac9799d5a56b2d979e3dfd580f73ba61a4e86e3da391d2ed153b3dcefc1d5c082a300182e77ff48ca57203d81be6b4b863a721b9154145d615c4684349e0ac33759893f59b812937aa254f6c8ead1bb88914c66088ae9654fdc41ddc68ad12e4283eb87bf621c3151d9dd8daeb94f4da583089cc664121956d60cadba3be1d962f60432cf4e5a47166f96c604ddb7a28be9afcd19fe69e7188f805f85dcd17eeb8fc85751c7405df6048c1f57282788ba9f9993c80218fc5754db074040c089b64dd4b5a34efe31627afb0495bdd67232302238127fa3e817fa997d7591c8f74df4490700edb12230a07ca2f3fc15ec99838e41e2ec7449974c8e60b2402c613a5fdd445181986228f8cf6898c6f272c3df006cb5c5979837f33c496f20f026c95ee85b01ea35496033699863b571a43a948ccd84af4f08800178fd29be69fa7aa54f4f2c5717b946c18415b51095e92e261c8cad4be80757f2760735ab94e0a1cfb83d53f0432ff0a5b712bf73379f8afb2ebb442233b8b127090e0813297785881d2ec734377f489117eb6f5fcd9edb0276ef69f33d210a3b456f21774a131e2ede0c02d28ea49b61a6c12b489052b10e2b621d517ee05c33dc549d90e92da016e82764b0326fde23264787caca5861680a9630088433e35ff59a45485917c6efe0ff27a656448747c206e01fc0752fede51f0bc6fe41d664d3ae8c1d0100ed6ec3c62ad79abfcf0fd9f6b5f60608d19a4893dc6e2455af937a341b6cb6a0a04634a101d4283dee66406e1729f05f63433ac9b67d58ac237cc734a9c082e5de2d4b17a807e4d8c15a6c868c89d85481c567c4f165dd000d192a291dc3a3147a48ef3105db4688a2850f1c0da56844726fb2e173a56ba23f8060db5cb521e6fd0657d9b075da7955b0928f3a9a9273a447824d85d8980ba814fc5854c7d3480c78c4f5dc9c44850d0f87ccb2b1c9db32a0780a4d3ec52286fae0c5a4626c9289a90713ff604533d9376ee039f9752a0e32c901d15ebb6a8fd5836c746e8fea372015ab2319cc8993e336ee56eebec088121ae65c4758ac447f648d7e5cccd42d30d43256b167d262d3f4ed6bb6a2718ab787317b702263ec8fdefe5947c1c9466d5c34bb01531141cd257a2445d38004fc3d2b666d8b6958e21c725a0264c1e0f502775d32e785e36fd9f6d023912b11c41b519a6f65a14e13e19c5275be2229edab98b592db60a0045ef9e8263c64c4fd2b5ced8c426aec8ce66ccf1378cc7e18f5435feb94377d2981e8e2784bc2131d65409bfb26f09c55edca098c00b9b00d384ee39b55a64a6d87001031e1232d2b684c613fe293f4a3e54a76d2cc82a5192428816507bae6a6085ba5eaf7eb9c513323b8b875f998bcd93ee9965e88af073d7037dbfecbd62f1288206fdf637e2f8b92a92eb01b1140ad98e9f17e49c34be69b1d62df17ea3cb93e688cc95a6ec8a625dbd9df7c68896b8c6b7a665ca3090fac12f122521e54c795386c6b48a160cd16dd1b02559b1c2bc5bdd9e862c0ccc6dfd672197d35fa420f713763ba1a805a49f241e2fa1cc7114e148b56dfe22f5946cc472713b1cbc94079e9540c48d94e6d5a841f74e7db49d8854566f2417aa93bb01668913abeaddf6512428b6064ebb338e07eca0a5abb3f29bab92ba8c681e49ceba93ef400526d002c2a8a8a4a636c6319666ffd6437b71bc8cbf2b03505893268ffd56f4e32e26af2f0370170778ab95209d43050287ee5746b1ba047b1cc46f90a7b8d4d34684dd0725f56645dd612b4ed7b99b935506d25c6fe850dbd3d4d9599d76c44836f1e50302c3b1abd89df1a389ec312d49adcd011d8af25cae0269cf4ac6f1e41e7f5be9ac506329b5c642cd6012e26a3ab1530f2efdd6ac4f0da29f637433b3e5e91cd45ae76f29136f13baaae1551d061929917d1cb29a45d783f35c8fcec0f7296f66a0620d14b6f98148b573f95b56d9bcc52df977c442e48123d9e3af3cd3a6be9619ada43d2acafd600de3c2c99e254f9569e130a305f1e6968e976efb38bb84bd8cfd39a48ce3a4f7ed0cf983d4a78303f9761fbc4ddaea1e20ee6f5fe420e124a41ae6558839d44144f2fa11d791cb52e4d4fa573c3c767e15a5f681fde5a4eeae89a086fd155e64ef9998ab1ce71e00bce32c84be9b27fae138d93215c71fae870085918da616d2c92b28e5539609db90d87e281828b2468dd323f4143f8c61d4d7374347cbdb13f186fb36c6a748fb98409db99803a6f2a50820850aaaeb78da41f2805af69fb98643b983170f3f474af574cfe92355606139e5dd159043696a990b54b6ac3093df55e23e09ae35a2d0fb4e7c1f15817366bfa8c9392cc6e127988a787585d57a8d83dfcb1f1f2bfa88e57cbe99548cd9fc4a3d0a8a2959196c44cf5f3342b7669e6bf213f4be2bf4e667a125ecf121e7ff625b9e67024062db2418de5cd74a7d5f9a195ef68f62ceae3e0dfbccc35a2f6dded5b96139baade35f738172fed5cef4dd180e6d6151dd82ea45adb2658f122ddd31b3b8a58e94a380c9aedc1be8765b679bd0dbcbec8662b33c428457becd52288cd5cb8eb7336951d27d387a6ec0b25fc8ba3008f0755d804b4c9f0ecbef5ec97d1c5c5d253c37445e63cbad0bf2d91d0c3ddeb081a51b38eb9905efc15c350e7039b6bb2999c2d84bbfe5f693705cc82f07e06fd4b224ef7007359a61618fe34f5ef392e3ea95bbadffea58f1af976e017a9f0ea03129f2057c529d8e58350d4d339cfd5f48b29e5f7d1c43c83808bc5285559917b3d8675a5bd4251d40ddae820f7680593eed0689556ab447eec25a546e24fa510e2dc8fdd1dfb7a219fe65d5ffb85bd16c7a4d1e169a1395373489bf5bc20d09cc25177baed16d978ab75f12d1d991c137b8f124ce4abcb15ef29a5aa56ddccb5707ab45df85afaa52838297af1ff4033c6b52bfff908356f21c9dffc2b15aeba724980dd73ba95a45d7e032739b08b70ffb5ea2fa94a0b4806cd827460b96ac9835d3151a744e7d9bf901feec5460ca589bc48ae1eeb6dd725d114b38ca945c3cb57e3f4164b6ccba636ab48677b95b2f0dff94cc0d77805a1c9ae0bea1200a80ce386bcafcb2fc5aeb5fae1d1fb409d478e6aab82c0d4257b27eaf31dd433ba2475116659485462fd7e4ac2f052dffc0fe8f2448382940e38d78952a9a6fbd0fb58c30ae6f8efe6f411a2bd3d59bfd3e4c4908656896f92f82a5e08803822624d37288c46c9495d1d8b8fa54570f1a51f3a0036a54a3b7ff4ff4ad20aaae2dbd36760295bb210ef7f24e5ccc2e5da9de7d77db8fdea29bb74be50eda4d7acfec2f5375548ea88f9c27b90317420ea42ce83b287786ef39b3075d4cbf5706986640895202079de002d32f0937a066f3f3581bc56493f57a4b26d42bd29cbce13f2ac312e102ce134ff2b5e979ddcadbaa855470bfb5353b50d9783f049f1f30845e5ebae058651ba6ab4f4d18f1a5605d3e92943dedb5c70288900369d926c29883aee810c73a8ca464874ce971b56ca547173fdf5adf520b66e737998483471263ea9af25023655eeb471fd7e9662e74f4db7d1a683e0b33690b98736cd71a747a406d253d701338b31b5d8877d109a5046a0653ecd9c4130d371797b584aa8b0f096f2ca167413fe25da9ad3dd8c1cb8381168ee126ca5ae3602a7f80d3410a0cfd7636ee4c2dfb3124c2c4d5368bedcd9df7bdf65c23ea096bad681c1ee2b6d7c6c45616962f90c6251d9c5da032b0b6ec71dd324f41f489fe873b361047ea99041c489b3f03fa25f13b7e5f9ca0fd049e3a86b2bfac82e011434f05a4a70401921d81b0e56ebba82d7c9a31aff86814d24c9fd98a6df7af46eb1ed4396837f9e1be0a5e164a5c1a937258cfb949c773d69d0fef625c9f943d77ffc6eddec29c76fd9a30328af1e7ca6ac6dba84d38ced94c8d9215b37f6552f751983aa6b858f89e89084f37a497f5c855ccb90a48c7635b275f48d6bbc5b967db4952a2aef615d077e1f7d704b4cc071e41677ab65289741644f40298128c6697f78f16eda2f790d3e1f40ed59fedce6cd32e90c14a25820e20a9cbac60bddb8d9263965217ee6543393fb8e44acf90e6398e08b1d678aa1d1f4c79b06920c17170053be7eebcc38e8eb04a1404a5e9104aad3e1e7078549f1384561407647e1676c1b7586c5ea9d31c341054aef4fa0df1677b80b864924e451ff5e1fdc156321172740ae75f0287e0bdcd3a58a001662221654f3a9714aed783514b915fc84ef6815c8a94e5b8220df8f466fd4b8f0dc5c67d607634054eed728ad24e7fbb2cec848be6f279ee97417c9f8276f842f58d7cb55fe23d3f569a0e5cbb385f5be59d1384218811f78cb32cfdb7c3187c6f03063882e1301e38ca0a373ac9d85b73d6c2384e9d4616ba9e62a705e6935a4731b26665664821c051a1b7f7a483479f5e909c9f671c42bacf83a054bb9782f8b8a814dfef5a14b3250b9252ef0e37044998b48ba0bb1fe30b7a1606837a721a10629144ff810ea8c453b9bdb9b2711b9a0b84f845925fa68c0d2757d56b6ba9fa1f1eb42e57548efc7f5e41af6ffdc99c0c4ff5e9cd3d80b2d1762eabc23f3fff820e4918fd90bd324a63b52e3fea341fdeda6d2c8d0b7ffcf300559cf9170860a9b7335cebc40b761a42733800480c08eff653ec7fb7c18b41d1e138fc4937df24188a730bd25dacb8a4270faa3f01e077828b9a558b3043a338c35bcc4dd6483a1e297a8324ad889b897eeaae7927e89079c3b5a2d20fdd13f6668387ef5c15fc56c3315599e247cc2bbf13ccfa280632531920427a885254b7e57275556f6fb4c4c7e5bed0a6fef40cd05d0d8c1ebe2ab0ae610dfbae29fcda256cc93826bb0b734a1cdc53340efaa9a6ae7e4e5b64481d6004ba2a4ecee834ef27e35cb787895de188af1340a3529ed36bafd26c8d07ab8b31ada3b31631ffcb615682464962cf9e56a5e65bd95ce00cc7899e7fdff1e69ede6bcfd36a3ee90c13478fd009b93ba9c4ca1f8a9308da8166af8f48578835df6ce14fa9d96d2889db2f3e869dfc2b60e6edb906e2e4f9debd70b78b48e5322c2f514170a553652c1dace2e1c0257262c6ab49e3a5dace4cf9a9950a8c8220d9d061a7630e91aa31f23744f96a5ed14a5f9f8a2872d2ed55659903107ddea90373a32ceaf7079ed29745c609fe3b3baa7a29a2a2413b44a8e762584a461b155205b7ed12f3cc13d7fb6c667e514c4025298bdc8f30cf0148bd2f0a9beb3758a064b6c26b8111d64ade55ffc94fb8e05d9944da581733719b2892aa49a2d33326cb3879999222081c055cdad4a7330665d7e7c4bdba7235180b47edd682ea510d7569e6e73f5e6f99951a9bcf3345cb3eef59a6b28e0cbe53d16adcdb19272a9c9664bdbedfc084c60631fe1cbb814d5105d4a1e388155362e4ef0c1239d4a33b23e5aae0be408dc97f60b016568dbfd540797bbcb79e6a89a58f705cbb343e4e9b028fe6ccbc8f48c98c6bae2029361166d31a8a2cc8b332cb79616a1c88a45cc1dc24f09b314017b77ba30aaad6f8e410428ed760b623f631281df8d59e62f928fecd9fcca11b69d18647db04e50e28101cdedc042972db9d54a5a1aec9c72c68bc3a7276621495f8a6d5039c637bf3e4d46c93cf86224032eba850d9e4d10b5e7817aedfd359ff21361206332a4ff386c31dd32723e405dc7dd8b8a078ba40823f5cd5e6f262a9cd7303af252fde40440031edeb7dc096b3bd36cfe66a10173415f7503e7567f3acc13d4a8265655f958c3e057a467ae3766dd05238f95a528cf935591d8f640f4e08ebad765d6ea0b32a54a15985335e6f563609ee6321be7d224a092159511915564dbfa231b3af39442d9175f32a972455898429c313ef9cfe956159e4e02235a8d89f23ffe6b8abc812fb794fc255dd5dc83bb049ea04938f3dd9c89cd34e5ca308fa17f73bec9d06dca5f1147ab091bf44edb59ecc757976b52d8f5f7e226c699b300a64d53e3be5899353b6c44cf8141a6c10852c6f6bc8db5bc576128f9105a52b03377a56409c1d7edbbc20b843d6ac7d7da28afcb90b877b4d13d23193c6813fa977e469b2c9f1b3e70e877cc4bd50a688a28a647357c061fa11e4e0806e3f89f9250e73ec2077691fbe5bab8831fea3121d651783b79137e85aa2a405ce86d67d7c00b7ae7aafa7577bd85ae163de490bf133204b7299f83fb4309ccb8966febef8948c0a79bcd1aa5d9b5bfc25d138e1f479684e3af966ccf06a5f732ea5d825fbd90b9f0d0a357e47797bcb4b5054fb8c046f88bc4ad33a3a9dfeff9135c654d33289d4d3c12c756116fc508d474766d65ec720ee7cc5e5dca42cf28a8ac10c07fb4140ca2bd7119e3b2584465ee4f4945977ec835e91963b1044b4ae384c42b55606bc50a0820c41de2d766a2d69c203f0b4d7da912f1b45b7e719d4387aa04b887f16c93acabc76fd885279086611dea8e48b84e84e4851dce5390193ae2a3d74a587ee5c239e0272965a802e9b07e039c1c719739558ac6a0988768fd1df6f184d7c11ad035e6053c5c30ddf45120e0d4490d5812500e6a6d31b8005615ab89015b78225bbe4f938128e309ee06bffecb155fa527f8c2c37618fa79b37955aaab58614ca62c0815fa71626cf78e263728af82e4c9f4a458081a55ebf1de53d27c0bcfc2c35660fc0ba132a20a9d529b307cbf1eb373b4404ab1fbb8fef892ee061249fe08f2809d2e1a3d47178d63ad6bd830774dce1efacf8e6420d8ac53b9ac7191001bd52fa59230a22852ae88df6060fb24d99a037b85e6fd34cc5262db70912eb991e17631ff0945d0ebae40c5df9a96511c202a3421540ce5ab20cead82d6fe845be0e03c7506905238329707c792bce1b5bced29e5f448ce565c3f6b810c2567032960ee2770365d31e51d4fbb645ca268c64c006e615017e4078a28e6c6110341bd3052d6816783f50621c17652a36facdaab37231703ba5776c63a296fb516a552f577f330a2753435f2d671997f9d3e34d345e67b9dafc6d99d1462169ae232bb4447b77f8e407d2b5e8ffeb809277fe38a59b865f8279eced54ef25edc8036e9b5782c0a7187ea7fda426655f641139574cdbf745451128a8c58fbb03c17ee96bb8081c6beaed44f7abd9f17fa135f852c872a0bd9f0b8f5d7cdf2e162deed9df9ab58eeaf01f2fd58ee77b49781bf2ebc04fbd25bfe36fe18945b329d81d593039c21b1903acb30fa878b387c60384cbc4f364a331b42832045e00271ba15849208346dbad3e04a52bc32840b695ea267a2390129267ecdb74c24103330f0131ed379355d89aa58436df29a1ac54cf7676426f89ec85d403218ce8ea7f1fcd5c99bf4c06dd47bcb4af16d2168ef1fce590e27a040aeb2918633731d5b0ac57faaa24ba0f437dcb1054412bff203fd0194f77100290771b6cbf0b7aac4781760061e5b921fc1c7c8c3684004505d54a547baf8f8a2f60ac9e0d560bb03de5fb066e1020522bdcd67501b933ae495bf8d687ef71851edaf8d9ccef6a1f0682ad404f12e30dffdc55fddce04720fd56a3146357f1ee7b7421288a561466ee14d4c6c21b7b3731813a8bd0d7b1471c02d8c492e58a0b51c8bd7b66de5d08ac6604f5ef072bdec3097c94fb6007cd6630d2b3a0e68b0ab1439ebb955bc490bcd5b65b0836b29d45108afb59434832025941e707878fa6da0262e36bf8eae1325e61204e70621ace8f05bb6d720c2ac3879b9c0c7d81180c0fe526847a3202a5ec05a97e30d4501a4faa49975d489d0c26d5e6cf5e0f9199aa18369bd400d39ccc7788908cfd04bf8eff8155d941c1541be256e185329ac6d90af347a800d4f5f09cad065be8afaee1eb006df316231d4b1b8b69e719539240819c00ad2e812cfe12dc8928830dc32024d8ee36e3d106391222bb91d8ed23c2b6a6f49925b16c361e89c63feee5ee6104d8b884ab22ca9febf263602c20780f9ff20b3f63353585706ad7ebe72839b52fd9816fa97258fbcefcb19caf6f5748a47949e364d8cdda1f9f2228b89b9ac34f8992358a3db120be976ef2141db2e989822061068037a54e5adb199070bc1315dda5e9647b9079751ffbdd0a056e6f55edbe72bd0f54b26830ef580ba857ba2ebcd7c15baae8662c2db490444d86e312bb4e2d5b6af66e628e479b589f62ab777d2d9fff1b940f4e02d4e9406a587af5ee38e43cd33380df50ea67f076a6cdb8334b99c2d1a2d4a5b62d446a828619395d1d15513e53619c15cb97304f884a58574c278e3d70d4d558b2f193d776611f44047336516a93088eb3ed95911709a94db3ddf37589eb82070573ed938d22ea42d1e7d66ef7516e28550ddb92b35f7f3ed7f0f42a86d2afe039c9e617145bed5bf2d8b37cbfbd56580bb1f22a3e408e3ef2578c87568609085e6479f22c5205cdf6daf6f6a8dfe911303eb481e7c46963a7b4666900d2e9b1cc805a466534d07d2a949836c8a26fa83e4c3b97e2ae46bb0db4f43f400e2f0c8fe404e99444265192adbd48c5eaee03940006fc27abd1e48d366e80a03897403512c993734737979b0aac6f69451058bf01b09b1f05904c6db41c929bb2991484ddf98e54c20f7d8b3bb1e96926150db839e4c236e7f29f9cc32664baad81a2869fdeca5cf96089c065a83b06e5e812534daf3db1502592b411d0391786882507bba86d0aeb6108032dbbed0e92dae6842d0bf26b364d812572ec00e9a6247ccfef781497ce3de3d111f95988f317592b490a9bf474d1d8e843464bc9d0a3b54194615ade42912d2eb2026ac872f87cedf5079036730ef911a4671c0ab502dcb6c8e8cb1c5058299cb84560ae0da675885cf73c5361e2917ea069970025082de5b661e4577369e94937a51cdab321042496ff0890ef392afd5232649e33d79fb987387e81bb8b4f80cccd02fc6e2ab6bbe4f5213a67d267c2df2514cd8223874d42e01ef2dda33faef14bd803675994bb1c0b08a5c0c2abbbe60d7cefaad0cbe8b57ebe0ffa52712b26d5b3e79df21fb86c1671fc34d46811e6e9089472acd8b45e12084ed7294f21513756f76355eb3f26737ec44eec78228412668c9acacbb52387ff215a4fff36aefbdabc2660afd9289286283c26eddaff4a50917a705c14eb610db0f4abfd51069b5f06ab0f4bae9781600949c9189a625709c36418ab3324f237110293295b79b67eae109db45e74649927d0c57f559da8778304e61218493fb60a51ab68956eb475fdaddd703a311c519701eb49543221f738366e853b13f5799c28a58992293ce3544de343f799e6304d53e70d4a03fcad1b6713863687cee4a7fcf3672dcf3130db98b81f9892b72ee4789c01609572d83b1a8b2529b4aaf5dd802413fbef718444165db6076ac28dc7eb79254ec6506e85904756ef6394653c5f2358b0a5206e9f1894649ed8e422b5c2d088d0f6db773d01ba56991422872e6f7ad51f8a20e6d6dc49d026a5e9568828e40e32a547363f7a130d828b5bfdbb96e911334c0a3ffa11133dc02f7c3c89e879e1f8501b890c51a409bc06f09e190568340bcc6f37e998e403cabb6a8d37721ce208b29d660c9269d1a93d3aa763ab7ebd061e9f05d5f1151014d0cdf3e17d2408a206c1b0283c10e58722f901b98f0be2824aeb86ddcf09a42ba346b06390046cd1b674b748a26796dcd148b342f3396ad8710fcef5e25dcdb37f9ae7e27a2736069eaef1f5f41438fcc9f7dc1dbc51a234e202e5c362b158e56644192c99d5af5c0c8b73faf9ab40ba4c19febd3dfb641b408b157df11b59d3f7a055574fed9bbd32f097588532091d49a305bf028810514c371c67008722cc682c54b15246d5680a6418e3529f90a691d61cfd2f9f1b64f1878d708ec0094b75b88d3ff9f83a7762e48e375cd410e9baa43b66befa6c7434f4d5ec10a753ea738b2e85b5c60630dce9527436315ea2cf2e015ef036cf0661fe7b889438fad30d15cb3e4e583cf9dfe6353ec14a779376102079c47f342b4177a32e7c1e6b38265d8fc57f3c6975ff3efd444e32d8d2092add616a52c75d7711a8e9d4ddf272195ff51ae7cfa7a24bfd73dbb9bb56a5be28bd27e28e6c3a1f9a1fedd03ad55552a0cfc000b4ef50d5be1291cb8eaa5787e7a51528e0e3c2f5e1831828396e2dd6abc15d9e3a6d040d2b4f0f5c051f43315aee2c59284e64968462e19f11be687a1b8a452964889a4dd8dcb10394b2a0ab04bb04d58fee84abde95647ade411e2324ab570fe4599fe363786d9ab15667faf4e6a32f7f7f2192882b9c132210b6fc64d8b08ca8cb558be022eb2a30b44711c7327e35a2c55cf3d8bfb87ec9f5260038669b3f75bef8bb31c82b11958ea552948af782445599a0cb2fbdc8700aafcff2bfcf318bd316dea884dac999880daafcdaa36d09c40eb904e9264641908d32b398cca6f44b0f73fd597276f8bda9c72f3795441c6d71ebfa0b7f07b1f2074de9426cc151e230d6e4a3263d14b047843d8fe4730edf81f29d652f33a66e9e7075fd0d4330a09310116fbe925fa6d65311d2d695ff3e9ec6f3558c780fdbdc855fba9f11ba445a8f3796b262db91ea4cd30f96616c1fa6f5830c0353a8b370de03d36a13e0ab111ae453cb9131762592e3390f59b9ca0003dcbcb02f95b1a3d9034411f50e53294c7315a63cde38be49f67f9032615cc7d8b3612cae10174a0a56975f48689826d5086bb2962d58e768f153a84940aeb45445071a1b7f85d6613565973368b5d4c1bf1d0b6d4d2c808b393b7dee6fa1f7cd725c138dc96b35589abce8cf382d55a9066d8008a0d4e939fdb95868e389301097679a338d48373a06262f69c55de67d1c1be4ef66022ae27228f0e414ad482a5566b61de15b11e071f1cf7435be85ef361755d692acd158828f567498a7f1a12ec6a8464a5814a73534f95abff96e664e197edfb76dec08a82867cfdd273db64c49c67f10fac47fcfde6cec1bfbe4e804237000bac729cb4078884cc4ef5934e1d7820bec85a5b54490d066cfa08132c826ad7360b6d8885e5e63ef44dce2ef6ecfb60f9f564cc8f4dff0297a44ccff103761acf721d835fa7fb489ff543dd55e8678c2bc936003900409c39fc64481409bb18f7f0cb42a20ca7c135e84564ff1b2add087bd231473f87756a9ad99dbc7689a6e9125d2fad60b4ea7413441db39a14265140ed62e99dcbe8f4d73069dfdbee83ce8b957b9e6c70cc09a6069c007253330373501f40ab2672b4e2a9aa79937a72a55c5fe8d040b15afe4600ed37340a4b969b6c33f9bc50de25469fe820def09bf425d33efb709f7b5aa2e0ce946edccc0c63ccc12d42ef4227939cf9d4f1a1f0f1c18d890a7a0382964f954680d3633bdb33db2e3b0b08e5d51eb08ec2ff3fb7d679d86480b95495acaacf7edba05c0094623164a864ebde39774e443d967a2567939d49362f89687c96e2ee5e1bc517697797682fca8dc56a498f2e54d5a9644307eda0b1ad311b3dfdf9e596e882d9ebbbfb75cc802eb8603dc33d3faf382e50836261d37a62da45d36640b7389611ac9439a17e52d97eb69f84d20949b406d4de005e651b205dbb51dca1f4312802ccbb15c56b9036b4af18a15af6e849730c49ce1eb042b3207000a995309043751f180cb80bfe8bb2bc9ee8820cac99c3d5552ea19240510257bbda8ef014b5a136a5eb5e6d0eebaf2e89c9230d665cda851fd2bdab8f5e38a9deb6f9f5a61e8f053995d330d3614208cbc50da1acc6994505b2d356e1794ef25e4f2ae252c3a7640e73cb7422fb8eeea237d9a3e617f27268f226f7b570017d98e432e9d3a3c16365163d6d44d3f69a018633287fe4ca21ce56a56afa7c256bd9aa88e08caa97cdecd2a8ddb5f844b59056d86cdb7c1a1d37e8b33a56dfa86f8963c079c81164fe2d768f80ea4fd1c6cef89b6eaa33d9ca80ac04892f9dd2e26de28fb331850f6755df3f40cf43e2224e04f96b0f2e6251da82f58054ff9f803cf440fd28b5f6a5b0a9678a31bf9cad105e795d45b2fa8a1b4941a196f1968f297b722dbbf4ff95856d8db160b3b416e4de3234cc54544894527a68dccc9ba50838dd314af77c6fc0114690fd57355155e11fd1f584b408615a37972b7564a82217ac92ffa6c1e57eb417a0ab8c3bb43494d46ad901a3ca4ef0a72a0c3411f77608486586eabf48a0e526b2e061fab75cf7bdaa8abf0e7d04a371d668ec31c7abc1fd41353e2cc975fd0b7e5c47e514a1160d5a064c65397c6f227e06d29cdb9096493c563363db33e6ee97f8e98c1fb7ec33a05d6e0fdaa6ca65fe00d8c61daf68d883c5f3f75f44defe404f78b818c69513db3a16fb0f670810dcec6aa47459ad9933c7901469e4077dd382cc881b20852d91d3443cda993b85fd6301109c504983d4f0924cdcf873de1d6f26559388c48af7ba5aa350d9a8bdb18e4d9cf2dd05e14963f5768e16dd13bfe9e35f92be624e73dc99040e7445b255dac32d62c707f5d3afab6c310960fc972445492a415fdbe1d9804c1c16a1e4462fa5669e1e167c81b04305fe23e263cfcd570180b55317daf2ba3f01855cab3a7f78f6f8eb936573975f6f61cb8ca7266ccae5d38a5a6e96a07ae61e557d87061c00744f40e84a152dee7147b11c533635d06b2cf4a0a2b02b7fa28674acdd3e0ac770c20552317a920aa34c8d6b2b3c993babc7cebb641f1ceb19192cf6cd49d2c0858eb23378a7d77a9d659d959aab55f2288423c12a422baaed83aeb6e5bc753c216fe564d7f61974a7d0232d1bdf88a8fc16b426c39686f14deb73aa9124a8ebbdc4cf87719779ea3cd93f4e14ff40e263b9e2b5512c9f18b372305c04a2bf408b03ec9366b1d29200f406747666984f03497aac49c91ab856634b33cdcd915409e3449b5b25e25eaa9ca35dd162831bf2d9c13cc88adf76676301ccb2a4f7d188be5b173afb5cbd799489be1195fe9fac6a48a4169bc78fb8bb25843fbfca04063907069dd7fc666b30bcec98f08cebdc1e2a24e7d7d2758fab4af3652eb107a301e29e368a36b21a753b30faeda08b2645b95ba1a83b65132f13297af5d3816616ccab8ddb043c2f7843ae21748a32734ee08a97c16ea560ff51f85ae4a6f1857d09b739a0cacb6601240256681e010342a34b626fca3327c8d740f8ecc2b9509d636ef6386a24b236a6ecb927bd7807919ccb69a5c0a202a0c795a611858fe549711da228c6859b3aaad96a3cd35f4161752e44b1cf77ba86cb2df95ed948c215584688a9503aae99a6aca3c15790c5d4e4f1383119daddb0ac108119a97237cdf748dc6f9a9e9d4e9f61ac652ba798fe6ad42f8c79a6192092436372099c2aeb146f6597050ab733d6e67fb7e52a4a20c8e3443ed583e0b3a2c0bed6a50e4086eecf2180e57a2da3ff4158c48022dff6b0f215f955081309dcd8340a8173809928a489881e52f89dd5e666e3721c7384c22ffec208d43b318bcab2524393a46cd15559d0551f1b54a6895b16fdf12a0923f749c5ba738b74c50e71f345e3e7f1fb124c5e39f256959d3e5a46c256255f126ed0570af44fe01e35821ea21c984f1996b70e76d99e65f9afe60a8a6a0460d34fcf98dcb351e831c8ed54621b40a1a52279bfcb933f10c9e5b0db2ec592a3b2abcc05c8713b3ad4cc7a125d8afd71f54c5ea72d87121ef8ba425ae3efc379529c126b03dec0a3387c24fee9c1b5ccb72fcbce302d1e05dd0d5c59ba3810b230f5bf843d17c61406fb9a6772e57ea32e1b57fc2b9812f123140806613fa65d685cbd7f57cdedfafbae3f201b4aac79ded163aa0f730b0b9f713702a3b42b3f46eebe22736f8fdccefd26f3e6a7748e5b8376010219b93ce1ce281ae55a46eeabec37b4e70927b6675de49be21e6c572218ce5b587e65b5c0547793acc5ff239c80ae7af2330ac23d9b28bf27f67153c684fd1031b0e2aa2a975281d46608a46155d76610bbeeedf012053d337b7543475a82cce03cd6e8d55eb35385b086ed9c0cf6b0060406bf2ffd9b3c0ed37edd21f383003c377366c171e110236821cbc53d9a5ae37e631c1f7e94a41301adfbc5e68bbc85b29c3684bfcbca5e5cdac4a03380708ae21623d4f13b04a60b59622fa124ad3da825034903f10cd5093a5d3a5e6b8e2893230d5842eebd318047abd35c4397607b77e356e98daafd9303457f56c9f9464b631c3018dc9e76d1a245a86b5ebadb8b2bc1f47070954308acac739ee51e1d0ae456c1d40f9f255e434d1b5ec0f42c7dc84539a0f56a8002459a83b7bed6bdd7d9d438ff4cba78a362ba7b32cfe8e235595c43b169e40d911927f48836529fbce3272144034450b4035a5d97040e5b2ef2df90ea018ee3f70eeae4527299678eb9b532174e18be7a00932213b4b7222961291b899d9c3904e213426fcd982b498d59ef283a759371d6dff691390e89d679b833a6791c59e0197e24c9c9c2a73f43c96cb3803d817bc925e7947d36bb6f45c9f752ad0550e61bd32371297a0e53c31e60081273b9c54a48b4ca816a479a901b5b11cbe08850864e476ca5030bfe32f31064291394b08ddb5d0b1c30f40211fc4ba81c86e8e74c47811b6724be5327d043a260718acfd31261d758175541431b20d065180e183a98b7cf9196dcfba88e196d1842d7c0a1bee7479d279931d6a0f480ccdbb956f2bca5cae6b9842659494da08727191c1ca02c56192cd218848c18ecf7539c4d3e5da7317841d6b51812cd08b86d57068ef4577bf2d691cd558dc1476253f4c9ce8c7ac3d32a53c0f3d7e31f92d2d519d4f20d9764825d0dfba6b3e82bb8d257df47dcf73109a2955005fbea2c15b551489ae71f3032453828ad74745831ad331bd748e2e4adeb5790e77e5d74fc6a88900776d6151994f7c3e48bbaac93b10a82792db2c989e2c536bc0b7beda12de0c01fab872ca2cfa34c5d447211dcc468728614e1af368917392a30b23a1394a5dfbe5347746f151bdc98833ea67e74cb44cae8cd286e5833fe08df29a46ed4fee7772e25adcc24e5344da53c5ed77ed0a63c55fb5ff99530e4e73489af23441f3bf01346f33429ccaa6ef379a6c392da100388d22215bdf6cc39aa960b26d4c523c9eade07eddb3d7598024be8fd68216caa4df13eac57c0867479c14ab7c1fee3718759b8b3696071a8c9a895ca5da789f1f2f9fd2aa3a4964d5c559c885892ab60b32aac02443c2216a87684007b09aa1c09a5271b4f13104f9a2b5618b2fde5e37320fc9638ed31d7e601f51b59620b3038c4cfda22cc80a3baa6ba722faab9d5954502c7beab413229fa51546ec8ce2e848b1a06ea409333162fe3520e0ca9239b70da7e7108401f5002e88c98da38a17358894fa21ef67a808b08a2e701dd6029929a3bc85c4bbdd8c467a06c1461529cd0917e24e1ad73e40a41b12eaff87c34993db6005720795df25cb08ef0604d42ead7a87e2361aad58ca8522f6ed9c67b93be72d0f8a395fad4d027652f5052402f59d3cff6692313046e20793f039b28140f0f24492e090baf6071d2570a223cccab923ef536e04b9b09a99fa78d4f9a61d17fcf45c528518769f132f1f3f647c0883ca78ccd34eb792aefdfb8ebd48e05fe756b1556a5948ff7c290843f0c7f1a03ad7cfd37e9b1803ff6ea169a5028bdd91240e4ab24c417239b803b56ca5923ff4eaacd80c4a6d93efd8941145f44b2ae0e79baf610a7957ac88436fb573581ab25a0ad9f1946c4a0c25aed7cfcfedefcc4000f8a0c4a2fb1cdc4bd7fc46ac106ec5abf4eeebc958531e0dac1157bee53089858af8114fdb435341a11a5892e5955909db6c0317d31e273a97e08d57b19a342510baa5aea266da692554913b4f06c51f6851b406936b4f01c6491972e9a5809f136a2b44472ed4274e17fb4f2a2329ad9be138a7c9321179273203eff935a158b820f710006bd3b51884dc403c107aa242b524387904e59b3e6273593b8a58f50f4591a4fdc9be495c48e66d867fef4921bc4860883a66d656283f3305750a7add1321aceb6bd9988a0e6cc31d1b17b3556b2fa6611085ca3798e14c0e4c8cfe04794eab2c6b1c64eba71efe3815066d956dce3be8fc28c8d09389e90732592b6cc1050c496268f573887e14a582e8efeaefe2f5c468dab579633f2b8fc0cdfa44ada61fe5c91fc82d4c13bf7424c9b6edbf254adc696e06286eb2e038d43c93a91e0474f0c8dec4a8dcf029e8f8690b85f13e59c3541bd438ed7966f591c109be17ce57d01ac8340ce6f27c9f4ab614f5b00ecf3336cfff575391d3df87a82d753b2b3d8e61e46d3d37d67cde1ea7783bbcdabfcd536439701919f279bd2306c80896f495a0e3118ead4db862ec542b4ec55e356b472584fe308903180b792e9e7a8f6a129bf0ce3379952025b931a6ea336047b96571effc6bcae8ab5d388d90f2c61eebb7134aada27d5ec846fb568e4fb6629dc1ed9e142923fe332e94bcff9a5aa19f31b1aa117f59883714d3e3e80bc628aef37cf1981371a942bb6481ab0344657050029e78cb149b35b0c5c6d6600f2fda6205395bdcd49cda2bb07996693bcef17b66a98058426cb9b5c5d5cb40ab05c70eeb9959087a0ba02a6a04a6a9e7f6e4b35bc061ce1a8f4cb9ce96640671846ce131576c4365c79b34268bb7083a7dbbe0226a52956f99e91851baff00ab7ba9ed01d471d477eccf3e89d66f599c598e3038113e0f57da14d3bc7fb3fa7bdbdacb58b1523d6ccbc29cdc9f8b244d9c825cbee96b1e94aed1a816a37caee66a4c3bd1119724b246fb0cad48e290146ce7870420d1cef0ab973369616ac384d8170808a0bb7688eab139ccccae5b38b194f00b36caed24817f408e6f4a0cde23e443fd78e9dea5a73ccf2ffd1f7447dd8c83cbbc98790dca56cdc406c1abc90d34777a5e45558d927eb5f2f3d031f049dbaa2650b7d4535dca09646634c6e73d754c4d0507fa6334f2190bac4248300e85438167104eb86acbad662ec88e84822c999494033927e06261344ed3be1974d3a1c5b96739e0be9884ef8923add1b4030764b4c18cc519b79bc40db1861c1351509d34c568c228b4e5ec480f5b300771d431532f3cb8fdcfa4aa2c4fb64995243a78af9f6e27c0c55e433df95b9c84ef663348322ab24b52c42862efea27c36ec69fa58eb0c09242ec98d47fae003fbc92d8ff4920e47e3521e9a786623ecbb720f0cf06a0731ad29779af22a1872b991348e356c698a6228561271fd7e536e37d1e3937ad4fca62c2215b72aea71c0139289636717d6309406b7a61d1e12d199b0123a18dd9d4f24e197a754bcee9345045a74cd608e8da8a1ec4e0a367436ea51b5525961db2bd57acffd298c048fd1e907737ddc6424f12ca64cf707b218f807f2d6b5299162428a67df132d834af8d7e821c0e67a478aafb20fccad58f1bb7f92ac1b84ede2f69d4d4fbae265eb9b3c68883d42d7b3e455f90613ebc8ec72c503abad75c29c805a94276306c67e3401bc1893436a74a7f5f0c97397f085ecda9e4faf25500cbfd6a26549e3514c9a67a2fbb0287c41b0e8d8ffc73e656f7f96c393d97edfff2e3f6df11413dba564318ea69d58d5c34ba3a3a8662771ef99a55ca71f6d1eab354b4bb680b7452990248eb4704b00758f3e31d964de2497d8ed2879d97ffe0a14e71936b7c09f2b8fb6378f5d5e761105f4de6763210b41a4ff203b903c14cbd5df2079c3f2e3a3affa21e22c4a777c08e5aba0f97f07f5f190ca36658c72094da963b17d928db9629b24afea59b43f52822d7aaa0d2c8b621c8a6b0d8ad41cad5fb1b7033e517484f6a058aeadf42d26f2bc20b969067a589593c5c0cdd82ef15d48476222c0df86e8e152969155f239d815608ad6836ab455c6009a817bf38f22ffe1d7db3fb95d3947417ecaa53a6ba3d0c12933cedc1c6a33200b2c674a5d0636de72d6a133b3df5870f25c2e91dec2b152944e5c56fcf10b468450e53d15708af4dd0ce1c40683dacd6a6eb09a7264a106f3757392ce3c60f493a7e55eac5b97c11a71a4e3f7639db010ceb280df3fd266a6fc90014793da1147b82ce508cf69fbd675d5937bc4d02b39ed31e5512a38caf4bc360a8b082731f6474c8ed194245a1d0dd10f4eddab0b68fe32b185499eddcc86621a39692dc19387c658e559e85502909b0304258f1551ed44a35289cfae2638e999227456527cdb8b0045a38da18e816954d7acf6b906eb8bf47667b7953ea5652ecf92028429768963daba96f07f5fe822a49ec8d499453ada039e870b22f155294f649ad6c5fee3184d522242b502c03946a337e4ae3a7e5129e110e16335ce564cfe322e1f17acc7760017f0a8e2f697958daeebc12362be0643ebd36b35fadf0e296c598943b8a7a0635d657e772ddd4b628c59b9714307edd35f2de448d740610f4b0837a3aaa17a8121cde22bd4f7d850ee6850b4c512ad0252309380ec45cdae7a1e64255bc0b21a89d6e58c22dbdaec2589c4b9634a6c0df85eda86b14839de776dab7961080b51c32f5ed1f37e2452d54033bced913801e9358a46ee6ffa69b63c87f6c89548bd24daebf58fbf7417229c0714cfa7fe2d42059aceed6b28e9fc6a7343d1137361432b5d356bcdcab84cb5cd37c0ab0d184cc1d8fb35a27d300c7e177a1037c966ad46ac4f4f75b283cde707b12fc5ab6b3182ad10b2bc5acfa438bdafd2ec8d645251ff337a464aca79d142e993e983db9be7e7c834285a83c870bb063329895de0299b473927e0d46e19dfa3505a6b3cbaf4ac42e9c478303ea46cc89d188866b28c70714e1dd2b4f31e44b7bed3636e4071c6a8f203f7eb8872aea6dbec1ccf659e67ae9b521f8ddbc4587c56972db0da6526b86429c0a565b649dd4a80aae8cb144dde2442b974a1d669f54e8e9c68dbb22ab2c5250d430d9ec04cdae82ce3946fd5a50ff9aa34b6b347da22a9899ce611962ba5ee90307cbea9bce563ad78e2ac5a56de4adaf141a56bcd874b6121fb93748775df1c5ec5e9e2f9ba42f8b5983f2d4ffc5fb5cedb8e07874807a236b3a05afd168c807a9306d0d545fafcfb6ac03e131f60d61e516f2e8a75faf829096795178c045f5ce68c63322b3135b05c73ef1ef256f5d570fa3ed4a58aae45d62011ef6e61a7580e57c0900cb4dc329ab5ba30820eb90197d2f756bb6f3d05b5b93790f80b3fa3bb689ad3d9558e5308cfca0256020087f5ef0534b0c6ad330d4dfa58b21800007fa5953a2f08743552f7175fe28f2f0cf8ba7eb183d92e162791bf7cf139fab831f09916d7360cfe1e77823eec1b9b247ec5aac0d3b539922aa7871f079270a0f1739539719beb96779ce043291a790896993b35cf8e0584fb8a2e7bcf74b4d2a03a67cba75e58592d52bd7febdab2878d1da50439c00653de43b40a05898fc6ad10667da3fc400f87d235386c1c0b060780e12c2a32432c685e64a6e960eb8dc04ea39acd2024dedf897b33fa43ac90ef4076b0ccedd3c5616bed6901b6328dd6815b50e7f816838d5de5f7842a005283409ab2d2a938443db364e330b5aea2e82b294f4d5b89acc5fed6fcfb19cde785c91dfed077598f888798a09c0057f0e88beab3e400e3f26e5874df1199974d786aedcaa895f52787e776d9e5ed1d79dde8e35ccb4dcf86d72a673dad649e569c8f4a7e408f4fd7531f19c79cd6113e550a43468250a1a65c5304776644a2069f2f3dfc04cc57999545ab6c1c767988728e4f47eb6ae3d04e9b120e6284806e37bda5837f75703c593fa72c092b62f2517b733efac25331e5c011f00343d62ee62078210a776bc2e1c28c4220f704ba01b0b67524129ab8481f10b8315d716b9456718235a9dd03bcbc98c4cf8296769d39d5c26fad49f00be5b59bef9f6c40761db9041dbce653bb52a5fca054729b7302bb8cafd0dd1cc0481d4995afd3331372a63e9884b37a2b0333cc2741e10206954a438a919eb9de095def8e1f1d8af7727765b39421d82b35fb8c1410fb252f9c24117f1d50bc3be04f72a81d7aa14ba0ca9e5d9a485f54a1337518f7f7fce92e66ced66060771c98f108aff49be8d8b8fe48481ccab2474ee38049951a71818a8e699f032f14e12a5fd869f190aa0ec4a542644b102aba6d3859731fff8977d2b06f2703e85898363c4795b19464f09ae711e0ca8ab6e83d008ecea94d897e05c0b3e96b60438e824c892179c431d2d67ec678cec513bb6d8ffac38a58dd11b930257dc13ad4ddde81157aad71dd96772b8e0e4e25235ae64823b9ee292ece628eff383348cc25344925640108978e2b9115b81f6aebe61ea34b4147859e610070196e1da797f79b975c36f5bbf905b85b4561242b9d53d81bcd43e31e59e2d071cf711c51560c678ba6641b4ae778b040297c93e42dd8298616c6181d40072b961c95a01c10e949cca5a59f401fbfbe781ca6819fd06249cd74f8b2dfb20733218a2d5abfb0e7e8dc49a638d28d44b7a5d57289d7d55b20ac161c237a3fa8d0a0c0dd55832e7e35e980a4fa3c1e2ba20513ded6bd22ffce7026b868cd23e9c08e874cc4452d0dc1891fb865260261be20fc61c1d4cf3df91a3297cfcc9427249d5479007cc5a817f9d659546adfc897c8e8176c114ac4b200e104c343cfa887ecd3a7050c8a57aa45ef148957150f82db09d1d1db80ea9f2866ec982e393976976adb9726e5612e7adf0083f7ff07f8443422484c8d9adceba5cfed85c39ee442565e6294a3665ca0fd85f902407e19fcd204e4ca6c5e815e662ebd5063cf7e7a0135e5f6051e4ab9d182d0af121b092aff8c13972399ee3aaaaa6e63e28dac97e4fe77244396cd49eba4289db1b96ffb4880e32e5a4981c4cfd8cceb2112bd0a6f489e191d82b04af32bfc45cb5eaee5960962402da3dee2acf9df1db49334dcaca634700dcd4fd5cd93cf4872f9d78001c0a261452240aa791d4b8fac96e6563111b5690d07779d7fe437fb97a817a8948c9fdb801284d69519a7b9467944f5d29f59fe7f31a06840f5571f8ac50095b04cffbde9500dc9cfc99a4d877826df34837002934e8047dd27b9577c3e09df6939320ca4d0a436cca5a285cb5abe73efc39179ca97fffe53226d974f89960be47448c045b29f7f2baa974d81d8e54b7d822e9a44f82e6c34dc09e142e8a173c87340f6704ad64366d3211385447fe27e026c5d4b5046e2f653d436f42b143310017e19f38176d73546d381b59ba32b689e8bed77bf1a01c250fac6e5ed9fbed77613954db8ecd8eefdf9a657bf07fa0437b33ab95f2d5d8cdf575acbeaf0039d820a5f5f0508314aa12207aba327791dd7494db4b75b9a134f10e2f75d03649518c52a486e3a1798df59f6e600853730903f7e518fc91a5a92dca185de0f26e4f050a0e050cd1349023f006909857dc2c70f55a52e72ea36f35f1fc26dfff06d3d926a09a9c4cb39c526040b4eb0b86b161a7cf607e3fcbe805d66faa06a46af3330cb7ba5c6fabb1ccd3e182f77d604ea999a059eb088f513f51691293d75f1eebcdce9aa5da40c515a1562676b5d16e56d8196f48a3f890795465e1defd7db9b9e9e64a822e2066e44da8873d857b39a8d04ed76a9659c0777bed0fcc7e237dab9d718cb5dac4d3fdb660bc5d5f1040a44bc8b612a7f6591c30c4ab9a3b758f47a47a7e2d9654552d9322f58165050bceca1d5dd8764291b7b92a6c7e39447d56665ede7e6d2dad4daa1693a61a5bbf24f5a125073d8335cd97aa758e298718667d6d0dc7ffcd780b49cc43c083f01bd94c00702bd97d1c366fd746ae8354797e9e7198648fa860af6f73557a4b6fdc81020c1e22e21b4af532e6fcd6b4bedfb5d7ef2fb0485559fa986b6ccf4baef52f2e6720d0fe7b671bf3d418ae3a139744c5695f7be8c6b1a8e03f9d02380a3f9e66eee0e9d444d0a45f0d45b9d0d81f19777cde8ae965ea233d71ec23dedda2c2c3ecc7b11737fdb2fcb3e6da94d443b432f0f242078bfb5cbab79dfb9e4371a2641c1986d8b2f5b8b603493ec4d56dd3cbc5514c72b505b6a9778e911591b0417b20fcabcaf85b410b825089fd56ab60fb9c4146524f14195089f38b1c77f3c1e74b435ba7d9fe48aca1b62319fdaf489b0dd467c9c20874b751a2326f351268834b8660fc630c9662fb9b6416d510fb5ef9442ee4075308519d3d1b6d22f011df7760a1616f062c28034840e2458e8abc4e5e53fe952fd5f51b75e2d0fd831e93130f5fb70f1506f66de137c7b79e8b2b31d313dc695fff5cf3e07c830ed67fd08253c069e4b65df505e9ed3c0e3b19073148c592634014e431a9caa845c280bf45098cb35299c3e0d960fa5d861a73882ed1585eac765a86b5f266c007d8c4a9a7c46c80e3a8b338678e2dd202808e1d1294fce4888efb10179dfadcc703514bfc88f7e23ce7dde67296aaa084fe5d2d013455eafd09585e093c5fe3715f6987a0750552b50b63ca3b8d79566f76cb8bb07c178e04be43228be0c45680186db457c981a3d3b737de89eb042fb965a6f9af6bc85d9c3e57bab9a07c09cb366b4ab5584c14922dbe9683d12798bf28ca6148b854d6ef0728da863479580c3d23477b2745f3e09a296a31ba374a4fe7e396592a87825f0e99591e8bc49f67a3aeb10868700331365df4d62ea546377f242766a86bd6dd2b8bd2cb1547c132741e6a105c8443e240b0aba6f370e5dc0f7f0ed1c50352f37996eb1283300c2a4cee59815bb0cad1734d1da159eecc6f25807e7c564e4886f2e3d0b7a6a247815ca29088d8452fb45f97028ce3a563541d045793b234d2538d4cab56bb8f12514f9fc588606924efc8e21663b74df906d52cbb31690a98fdbb708be6dd3d8002a3891c44c99e8e4c5cb835e247b01ff6ad1ef79274445c1b2c24f17aafb5819f149f9bff8953480d8e5271c52f042e9788b8a3ccfaf0b95d61aa1258b9afb88138e588231021c0ccd6651cfb708a7df5f6543fedec0bee3ba0f69b0d162b8e4e8c3bcb4254c296297c1c4a33e87e50eeb13858a8cc6dbde07ddbbb8513bb7829d0f170fb9f4a1762db1d0d7b9052bdeb90dde162bfcc01c7886abde3c2a70644391755140faf53c8c89b77dddc1b6d1df2be906d4d59a49a6d34d3146b6155b71fc38e5f51733629edb4d101e077d94bace0218959a4686b1bacae8b9e8e461ad41005220c82d34ce12b01dad7e55697ed22e40a4d18b7c23e8f1b06885c426aa0cf0b8815fd8c58d08084f2635bebdf0fe2f39696966da1ccc8f4685f9b43863579a5b6eeebee9addd0884196e87ab0986d9d9cb5945d8205a5aca705d4d4334ba8d2685d814062b2c9b1ba3294b980beb555ab82c3266304554059da64238edb791aa24718f3de8b1b641aec612101ca737f3ae3370238162ba4429efac9f1965b5dc057d7ab6decf86ed6b1b02b1c43262f8f3a17bb13b088ca8919c4acc7eead995ac12377521f6b1a15045378dc9e4552208e683023d2b026adfdbb6d86abc72a4e0fd3108abca5448b59cd2eb92f6d58f75620d89da357a84592c771b36f31b44159b4d77caa870cadc0760035507c577405bc5181783afdaa47ab2c3e44a621f4f864900f5693a4de397538b60019196feb03c6b815f302c5c2aaf9b7e8191a9e2664f79687d7b71c19bb5c55fc13ec3b2bb006ca561d479227d3d25d6953a4ae9a359e8f99acec8eeaaa77f40eacd21af9cfa232018545df43e0a81710b80213146ac82af22be34f9059e835284ff37c09fec16759df0803c471578e91cdec56f31e628b220797f00bf0dcaeb477a7d0ef48be705417d9917b4d80d44c8ef4c88777072a4d961b895cb67ac508d88aaf7f68fd92c54910f20b721c86c44ab8fe4681e75f357a22c9fefdcb793a64384d2b4675a811283e0326482362c3fe4fd3d76e7f0e81144770fa1fb6a599950f5309dda3cd2ab70f0f297004fd3bf98078f6d657d7b669a10176ec393aa63b93952873f21964040ce0fc7ba570ed2a60e188aaa7dabb260d3fd6ab8f0e47fac061a3d4b267a3492ea6aaeb9a8deaec774a68c4b9b0ac38664c971b5bbada5376752af171eec2010d17104f2766a4633b026d29f8a98c1077eaa17e4acc79b5a5253517213e02e989b5a933a62c2de695fd4cba7ed292a119f3eb23e7c626fd5ed63742bea6720ce6c6fb9be4450b16fb21f0c4073d8be68baebe63a329a83beff8df78cb03a5f2b156a96bce445ba72878b96c80bb37943cb63c3d138878fddb765f772105a5e4fc80b4fd494ae919e9ef64731a2be59a43fd06ead059919eea17e58bff3489083a26f2d74266951395f9d5ee6d5e8e3daae4114d73bcfe9a02f90e4ef699832aed6cfd050505ddb8d1f7a52d5b3f4cdd138f6d5606185322db7ee120d473fa7af502f62ca61772ae4b3b4687bed0520011d55071819744801ccc4f7a9f3065fbc747dd306cc5e74ac51636724ee428efcb8d1d34d7716a8c00eff3ae5a7a65c87a067a0adec26f03e4fb395a3bff443474ac5ef38f0ef2bddf20b03eecd342291ab5fdbd9741ea7bb6434e613661e5c786224957c46e8611ed95207772d4d81809650e2b284ae9af388dcd9380cfa709039cb34f0cd4d02a96ef571bf26e679d96b323e12b3f7d6e8cdd3cba6fc8756ff551b4ff8d87674c8b1837728042c37c0e7bbaac8c5f909cff562087a60584372489d7a161f38a712464d18879b52b49d5d1230b7b0a020efeb67cf0b6a7a70fe601a26009fb108863132a956ca5304e977e2c18b6e8b38297158638fec1f9dab4fbb51d4eb9461c070de239dba48a5ed17fca69bde237f3b8a27d3fc4da5711306330075ed1638f752693d47e0c3ef9d4d49f9839d3eb436a271dd8555a9579eb87d4a747432f543c5958ca3acce57379a33c96e9fbfea45d4c43a9a1ae3794838be25a3c8fdc5fd4bdb84c56f5b1e62cfed635c9d6d9cdb98fa23197e295c8bf723daafc2d8cd2b8f132d3b02d132c8577bb7b6c9041abb699704562319851060d3a82589f01df7e558eca61a9db7cf005c2f38f07bbec1ce916a6d7a70d5bfa9a9b5fc5fa9ea0f43513ed0f446e1521203daeb82ad704e4d4ed5b82e77c9f3254ad8fac9058bb03291a86513b4fa1fc4652fdf4e71f23aaf825563431b30886d0507d4a913abc9d5053f493a72311949c20928f62126d9576efe6773bd7ddbfac8b0241f52af7d8b14ce27f0a00af4787a5365bacddbfa7afff9f52e9e490b51c7c3040c44038f8a12fcae33550a0d2da01c99f5be51416c5749a9606565ec42fe4aec6c92bf401a0a1283aa413c965ab56ac560b472662e8bcf237ebee0fcb398390ae8bef6de3c377a49809faab25f0f2cf06db4993daa2e83c2dcfb8a3678c8d3f1ad1d7c347b614c6a8663e2d63f67a17dba54e55830d5c0bcfa3f17a9bc7da8e6a97e1dbf3c2529ca30b295ab64a68f5c65cbb344a3129460f9d749fdc2cde93b39e478a230cda0927721bc1bc40467dcbb48604d3065ad2d59bb516efc25807acdac07aa5493fde16efbb748c922cb75da81f85868057bf2c2b623d1ae8ccd54c3ab1739e1515b83b680e8963d56fa1c3d0e04efc2c94ce25d7e5bd006d873797e2e5fe3984e9301113fdf73d328590493d0082d02d1bebfaa9434b2416bbf779da91f2a326bd7df3e2af6223d2d3c02744ab6812edf2804837d050d0e073ba707a52ce63aec2866c3eb2f07301017fe4254fe8e9dee123d7a522e4f1d3e531ce389fcd063cfe59a5416bff1d69795ff57ff3702a4255de88b7b65ead1d0542d7e21ff2d1bd2570e3c1b6c5b4fff06c08dd9acbf0c4d2cd42ff965e516023132b335cc4171d23854e1a8fbc77cf3914de5c0b0aeb1638b0bb0e73e16de8dcf85f4db7a8a68b65d7eef13ad3add66706152af83162ff223f55179ee064b0f4dd4b5cd30815fe1e0c6d7d699161db28736e308ea243b3820705d5a96fbd4b7ace0e6b52ecf8c94df4d9e960d9b781d906a3c51978b021fcf7b6edc7980d8abcfec2dc11469d708ff4b2b9a60d78d447bb0bce246f1c3c9b75a998d36f9877eb0d562a00cb38ac008a045939cafa44fe8f366e97b73ffecbde47c696f29d1e2e906691d9a4d58ef5032325ce066a96c291de1a003ff6542f9e9884c23a794d9a67a6610091a64e879eafce3666243458a2792dc6e0d5d8d56f581176d0ed2270c057baaac4f9c777ed8de00f09f7692d73f50ed685ac6be90737c7bde11321aaf6ce6b8e4fc115bc4c8179235994609d997062a2bbe97efe169f765837af4f47120342a7924c3c194b8c74dbc9fbc0207b208a78c08a5ee4997588992540ef97b153178df4a7ece0ed07d133f443667661aca937f957b1c919abcb9b2b09a4b5d38cd9eb30e343483fc7951a05c5d719bb8406f455b336746b47139e48701b4706bf6d371644fe94ddd0f64cc9e0ccd09d33bab6eec538da3919ed4e8a4915000cab3978e161284fcd79d73a2acc2e11039bfea4bdc0fbc647bdefdb4e1346976df26985aae9b99305b86b2da5f52b4907b2e0c803efcf96dd3a150e9da4a4cf6010545003ff3dead307e7f93d5ae68e0f8cc045057838163c9f1d99c5ae758508fc2e64c110d448f4c1e25ad0e7c3d9d32d22682cdb499f02360e696e849d37a431b1171aaf8336b89b32f949e4599c0e154a6c63dcf02328def9e6089b5c58e13dc435731d8e56962d27a7fb342e6d10734f47356c996e98f7cceda6f42fe917ddef6ee2fca53e3cbd106b2bf56228ecd940aae1a2dcfc0b9a76b5d7fac13f8249edc5ac9bab90e3330f82a9c06b09f7bfb6ac6796cb116aa7ca0b24ba9b34b707fcb3b574bfdcbddcc57e48a5f7a4cf17935b6de91039f2b0d9668c23e43246d1578015cc46e4ab65663946486bd0025b271e4c8c7e057e9e9f90c6d1fcf083a4c941bc6cf99d61afa930ad0f88e61578101ac724ad123f6975d409fcc470a44a4fceeba1e1b97658578d9d2c91d22de11bbcc9e192bf7fc729f425b2737b49caa565a2c7b11de4e99f3837f7d33c6400917ef3505d5fc887f8fbf8b44719f945c1c448665fe75104efb08da683ee3c6cacdd67458a68a0c68859356ec9233e6974b94c79046efbf6860796c56e85d1185c2325cce0d2f124a8a3cfb6411f1e1f100a3237fb2f1150038dcb729044cc15e3abfccc73726a907269f1cde774a7652bb896352b7a2377f1aafe1dace12631ad15bbc15d48e132f360dcb7cb76ffac84b843e25549df2be95ffbbf93a5d9d827871a960025e0e15595f821e283750b0bd508907eb47d7ab84aa9ca00d26a89fa1b0c4930ce39bf8d4ae2602aa7e2574234d95a0db526e16b777717ea65a3373a2338e1072d22561afa88a086d3b91a39c2b13e8d186de1ad9274bdbfcf964762d32384212f10aaaff224944f41be4819810f362292aa9a5b5c05db45621d142ebe13eb84f26e4887beb73e37ccc3065c87a56b7d0b443649ee45fb7fd5d781beffa3f1e2dc99c34c8bce8985a1346db3c633f63ad83e8bb27ecfd8dbcd9a2976c67e78aebe1f3122495e1695149a95c9c98d501042bb03f964e3b983e4fe7662521703794d63731b197174327f1bd0bf245cf27bf5f6ad3d9777ed69e8e1d5f2ca395ea215f36dc99a1cb34e61e5df1c1538c9f63e9451ed09b729e4411b969ab9014b023a67932a574fe309223b07fbc49241ac04d6efd514d2ce2bc1e351f6caefba3a54697610b8e4cfad3e33f5ffe047e937b1df3bee0c02f8b6b82c409c7a1151273822ec91d4766159fcbe24a0cadc2641de25e6ebae0af25b8d6e4cc1e45c1480e3008b60a510e55afa1392b0a898b3869846f6f5acc05dcf2623ab485768524a243e239b873e7ce130c30be90e6b2f10eda73b50b29334dc09df3a8011ee532b18b24795eb5d41c3907c897a3de7bf7b86265797b0547e1b5d21bc74ed4bab71228964c58cce192f46b00127f8ef0818c26f061fc5ac8cc13f1a15dcb30f75d291c773fe21c08ba607a34c382ccc6a7bda7eb946393206c2fdf7051c06949e7f4f239649f8e32df0fedd407920dfa1e4a7a95697f3aaa43230d3501f75f21b52e391c2d49bdd325163cacdafc7a2b4c5cd4677d26e4a0ad9de38c52c84a2a7e52785e969b30d8185d5c861e29bba25f91e3fe7e6465d942dcd32f99e5ab0481b47abdcbb9cf795d92bf41fe152efc6776d2bcf141387d263527aacfcd6e6af6d0794528afa586683fac86828af9bf9c3af16e4b3ca889274255f1822afc95c39c9f03cee6f6a640ab3f8f04cb9afff74e71786343c4bf08d2b8528396ecd77b43136c7cd6b15c50710e5ea5e0963cbb45e168aa001639614848abf99e37ce8681f65b01206254d8314f8798f1c0afff57c1f8ebae4715092bac571c4f446a64969f3bb66dfff2e91093f22d1d947c2abcd6068e2590b2893da4b5a4d1ba3f39ae825e077d64c3b84737f96b283649e52a636ba42b5a2edc2e354f92cac00f71fd0f3d3f1ae6ccd2004a797fe4b524d5a71a32903eee62ae7ccdd61afd4c38d34b23a0b26ed8c78e50a64ec1ef64514fa64ba55bd4cfc9a6721c2711a08b536d0bf13b98fcb06899c48334f01fcc5ed38621818056d63ad9b22b984a665916fbc13716d2568ff352b2717f9bb1273e246813cc45c2818bbeed78e61da2f2823e9bc9bdda5deb9d76b8b32c3b43e7acffae774bfdc6c48baeed94266ccae7983b66c054baa1406ed9bd26dd3f8d7755f7659bfb1efd77b326313c7868455edf7e7cdfbf3fe8c128ee1f512ddd75fb0985ee812ebf49c8621b225b17a27e921cd3d053bfef4efd62271b97c54f7b3316284c74af40384278fd12d2519b492c4f35f505248a460ac370bb1a9b265d7f072b9632d1e9bc9290eb9f231374f0e1fe80816e06e34c8e5a5837848e6ca5401cf01a6cd450e86403b05f5ffc8d8c5766f4f8a40dd62023e6a8d227304bc0d8506394d5b014dd08c9daad328f6b7a612b3e86e01ece30c916b343ee1954f47bf0d281a34f554e43b25ed539266906744d8e71d55e6524c928668c0d403bf1a4bd5b9c1e8a9fc2270b231c2747549af00e9fd2ea0f11a5b98497a0b69158c8abb164508eff69f0ad1877f4e488ed1740216a225d3572b94b217d0023e93b6b88c07ac8c6d89750dc87c838926a598735581f9771f6d78b66c6718457f0f2e49b1f8de4040010ab20777d3554be8fd8e71ea760f1aaf4acec0ac188ef1638d6ce70fcdb83ad5c9a2691b1b882b713d686eebe43746159c5f094b01d9a2494f11ffeb41b8f46792a0b19a5ce24af5f22144b560c8d7dcdbfd0b0b35fec06f9873373db08acaa8a407d105513bb9211bae3abf6225726476e3c08f7ee2e6a5edc62dd8cd5f6fe93911e54ef5926dbb9db83bcc5920eec5f8b5a2911e3805e22d01cdb3a8773a24b9c4611f98ff4d865db4fd646d40c536beb1594318a8791ba41f626a667b3ea68438d8ddf0e8231125aca6518094b5a63d35b4dd2b48dda6093d46018ee38b17d2461f7b8ebc26cf138cff188bc3bd94afacadfbfdfea96bef7a220cf804dffe13bae300bf377aa8f0c2114d386fc6fce22d24a1f50e02a65909500461f8b9026f19a9a9b2b7e011ae97e26d3aaaa207d0c676fc8d2caf0effd6bf5d46c435bf2f1bc1d0e59cb1fc6bc2bf02c173549304a539db191f05f892a15db99714a347cd38cca7d8634bb56482b1ed36f7f8dd789ca41f585a14e6781932324a9959d0b8c57cfa0cced97c9286a0983d6b0f8885136f9b6f073585fe8c7f9c7b0dba6db952ac6930a77cd757abf0d5e899f9f6c1c28219438e2639d800058c06dfe830ccd4fa14f289a6f62e32c008094b774f89761e8c23d2a4d8df0d50a8b578496e8f778fb04cf375470f10b8b0f3798bae84ffdbb805a7f2b55f6128e6a107d442711a8c923159b818c20381de5b9ba42669dbf208f0d2520e1e720c843bd84c38b84c69a939b568af98fd374989da301ff6520da5b352a3581ad8c7d5875a8f1b03a47c1635f698b6e4788a92e6e7f6a1197509bb7cd8ad59ad6a0b0f978f6e37074e23c9041907bfec81b4e1e87f6f34a36be5604353defbba0e99e02adc43216b9f4b201fa7cdce875d9f27f53c806fdaeee7597a02b6c562549d0712063621b96aea6f9c4db5582a10dc6b3488e6c41080b1f7c3f13c4f29a4f6ca558243ed5f388bfb2d4622f72fd02a8c4b09b0cc24afd4942d93ad9e6946c641f3e3f7aaa1ac1ff931b6416fa393083b4872199ce52d6d2a5ecf302fefec85d594c0c79799ff26110a393867c344103f9185ca4e51d2e2f877844befdf7f7498504cc1376ee674c693e69a4f253bbcc2ed0f39e44935b3598e2308e1c0599de94d7e38d85da1af1cd96801375a45e795dd8c8bc194522d5364742ed593e9f7d4a6f23ece7ed24e6074798df63390317c08d9e062ddad4c658ff994d1a8d5e2315ded90f449e1f1492f7f212c604b0c2e7c8a4aa28e87da5251b8a3aab2f2ae8acbf958fdbda031ad59f755071377014b6cd9857f7648e4b8f615040f93de1fcceab0b083af2e91f9d5c048c50bd32dfa8ffa62035a3f9ab5c835afedae8e5ffbb27fc4885bc3c638b6ca8358ef6b574c64b365f3c8161986be5a0a08dd4ee94d99f7923a0df9c6239629b0b90812df6b05cf4280f771c633783576f7634b8ff14ed6ad71a5cb77af7d90f0a9f6d25377633ff53a0eb915babe896e30459627774993cfb5b15c68dfff332301c3e1e1a40d70efd3f27a8010749ff1cecdaf32d54eb30ace10ce8c4da22d907bed0977a2c4b6d23c723061ce2e0e67418f874236f2623e1fb4b0060802505bac408fd4b1d1660025b30dd73af96e277fed677e85aaa5a72bd160f76f9dcda6334c6bc7c09bf07735ca790d6d03310f4557bc69b81930a622d086686231d50992d6b90e9e178af0a0e391dcd989e86caf67501ab0bf03efedb244ac2f8fca9818a90a3db1e0ff004d2846b956d67b74b3ce60c8957283fb0d10376cf388c6c5eee8e3f380c76a50289ae47abae522d3b8d0518cd32f69d815fb84e357d1de066e66d124f4ebd2687b1e14de5f40e0bc2af6796252839a11f64a4e687c44c9264c4661b333ac14e51874e4b0e110c7d90b421d5968891c86bd7655572ad98dd46fd03b3d3deab5f3331a18ab4281feff75b8a3d76efdafd15238fec4bd8ead8d1527b1554741c792b649cad5018b662b03b419de42f8bd73a3f1428d248613b134599c3ae90aa55d65106f7f12fbb5e0cc5971cc56fb2037b318ae3c572f819046f8b1c52a809b57094bcd43580f6a8e9e697b4adab0eed44912ed2ddc5b8ba227f9cc6ec38ff193e308ca382330fa954193628e9e6b8d830ef07ede91a52f6d151ec24bc52dc0de77ab561007a605d873ac5ea941d8e89382587327d258d6393bfbd7b1781d20de8783caf35a8d2818c00ec8cf813b33fd881e4b680792b29428b0b3288324f6805e1598e797487bfd783dceeab3052d155f11bc7b0d7e7c1ac66ce766cab5d5860b95c821aba37134a3ae90fcb15e329e0d93bebacff22b49e405e9ebbc7cd87d5fd4895b61c2a6f8835e12111b5a40cb4b54ff5971814e3beeaa500d7b1e43edaff8bd4ce2c5f1ffe05c57d16eeeaa17c91b0e4f57189e268bf591128d72d5c31ef8daea5ec04e59f83e6bfeb9726fb3bf4335272cc70d41b95198f37b9c7da4713a8cba2690de9ef4316a867af6c7d007e25adeb26c19b1c0e59fc02fb7f62458e11b74d8cb591062ecae26eb56ca4ff0c8eb6d3aed730df7ef986f64f88142eae539f12a128f5d84d00f4797199e56d61bc359abeb201989fadb6a869300f901a33ab65f1c807866a2617412908be05de2cd4e818c3065397d714fd2ea5e15cd17ebdda0d3fd83f979b88f62e4fb752ee06c5f8b5e0e143d78d90855ea621c797f8a9bed6d96b0635fcb39e7c07df0e309ce21e16f86df8c6bbe9176779215c3ceddff45eaa635b31816c76722084cc38069ddbe2a10ababf60801ace2c42d86f71aeefd0c87d9cf6b4dfa2007a7e13f40eb980f72b17554ca71d4125268e7584c79a02177df07664172d4517be04f66b1935a077d1b201a5789afa5e9d8c1da1f87b10268b5a03385a0df58ba52f921fac38702663e798695eb19f3333f2e07292ba8874e49dba0f9c3d4720963ba61a29eca15d1698cad70d0fe8a1a0446bf798258eb51cc247d0df8b67634fc5857d046468c6eab13128c925e189b200d6841d8df27dbea8f03c3ea4b30ac19378712f9f900bada9412a42717b786b4a9ece5fb419658bb7d8c3bc6c64810ca68a3079de0516aff5acd4e484413dc42354f31572772a9f0dfb7b2984a9b91c64e8f49027c056eb0336daf24de49d650e2aa64f939986010223d53fe2edc942ce014ebc53518eb12326c2bb87bb99f5089413891b531f43afe7ddae6d52bcaf9b8bb859b53b98fe75453f7180f6461cadf324ca3a80bde33df7e2adbc85b09b7a72f2bf11debc3fb6d5334b6b65b5a6aa4c92f160a97a773f76485645b0f2beadb0e15d59e37ea0915a227d47895c6ff2b61211ffb4fa04dbb6ece1879400cd56f53002a2e6b974cd7b7a3ffafd6463986d4df1d61146abda2418668bdd01665ed022eab3d52b00f337e42e53587229f893daff3b957419f00b31b42f0f0afe7889795a53f013abe2140f494456d7655f31b8f9bc64bde36ac4877450f76135aed0b53e746dff587bd7498721fe7ee6f07360d2a9f8acfb1347abb46a4875401083a35a43dd8957d3c2c24274f4c30cd3f3d655e4e92b2d45d0b5969ef4b072bbcd569533ce4036650f79413fd95a385f98484139617e08da47b8c614a27639da76a670af29b5f4a672fc5c94d14f6f079385dfdb8a4b759829ca86d9f31570ff9ddee03bcc620ebc10554887efdac5a78bb09c6f2a0f17798d53f021470b4bcfc4319c0b4e6da5d3c02d05e67ba1504fcdd7b49f813ed7d59c40a786ee6be72cffddf475bf3aae28b6da5e483e90d7e1e19beeabafec03e89f00a8f3e0b9bcfe47bdbd55ceb6038ac7c7fe8b594855f0991e8cba4aa14535d9ab1d2ba57d83017df1f53efe796adab1650e6ebcf85c5d750e8cb4e3ba2df15cd6b52c42f6440ed217e36c5beaa896857f35bb09482dfd2eab70717b43e111b6bc89e391aa2d7a2c5d62f161e1db84ec0cc3065211eb9e03d1bb0d84c90115b7704c5c5fdb4bcb4f0f4a11d6a1362f2d2d56171d00b700f14395f185146704fbcc73c04ce84ee377bdfa6aa1ca7d4d2a1b06d0f50c1cc2b28684fe25dc1fce24f9c475030db86c45253ee01de047077205a810d8afd8ec12e53dda8e25e402e45bca0244e083204ef9000c794d4d5f20d80b3c5692228e51c7fb12e266f0d2b3dc36ff6ef1bbd142f20c841bc8ed53d393e6ab281eaafc379d8b0399b511974075c34948b69047bdefb7aaae7950bf6438592dc3d1afeb84c9b528c01705e430bfa3148bc050deab206f8378670a45feff2b907b00dd04ce56f75e7298dc196eb2f4a373c72e03372d2dd70ca958918540e5d4b1b8a3e036419e850e406fcce49890f21ef8b2a756dec57d3b1d2ea3462aa76dfcd54eee08874449f65c34f96734284ed19e618cba36ee74a0fb7744ff46c283451a387538c171cdb241d1a03377e8f3d1c2abbf92584e45f0939ba1a2415d1081d8a415cb5e58ca2279529451f789a4acbd35a87e1ab085d3baa9168298b4ff827175f45449ef800a9682f2c730c1d3527072a3054ea9f57ec49f54be57a47190e5a03605e4b891e2a4507c7a988da04b058122a00b84b4c1ebe4fd0388ab9a713ca49153df24bd4b258feef30fba99281765bbd850128665e626e7901a5fb0a46b75b78751c7b6720702696c9cc634e4ff6766bd2e317330044b2160508e054a4e2a0d2bf817c0028e305c980a1936741f03a06b516f244f99c00ed91a00e1893daa24f2d1f14d97b98af121475730c039661d7c0ad52f4e05a29896e79d9cf4ddef3fae891577a35f280fdc669fcf7e80e0e9a89968343e73ed7eb1032c46288243008539d9828266eb5d0719e445301b8f54dd782b1fe799e8c5479ca8a3d117f6e8385fbc4523f8a01f0856ee6e0451b8baa330f9486ade1320c4372d858940d9102351ad027ba7da8af8ec486b26bbb7bffc8d3f5384901b8f94901f2153630a5f47420d33ff5a22f59d47295de07bcc06799e9a7dd88fd50bc2d46d842858f5ca32ca618a9a571dff3f47ed11dadc375be3c442285e153336b734cd25ce7e67f47a530c5e883cf829e60095a01cd892554a2d812e46f59e28ab6a6670353233252e2cf72eb776b98590cda66f35029b0e9b53c2d2b8306380618a386a26ae9871c5e7668da1b5a34ab953b1b2ad08ce24f5ab137d4d39aaf6d575d1518699660f8de721d9990b763c873d2a0375d88f38776e7f072764b5c1ccacfbc13b338909fe14574c72f0e13f3db5de4e192dec1fb72fc2d7cfabd7f45b7bfce0f6560f54781e50999c9a8b8a631ddf91d16339968b5c104a2c174175befb05a729562c73bd5e375c8476e84431b413f591e9b289b1f658129a202141fa4c3dc916bbbaa46b31c383508be291e836319e6f15411846b38f582048407074390d1a48a55f869a272ec1092d55acebd4cd228eba4897ca9d17954288b2ef33c9a7c76e84b7656571cbfc4c86acee8de7c0ac8ca9491c9b4a6f0828c429f3f0528d2901037397e10182df083554e6670fd769383f6587c62a1624b50f4a8b1cd803c6b6fd676e19991cb073c68b9a830b3ff1109c4b0b6054d87bb9869232cabf9621434b27477407c4fb838772db8e2212360596ee5639be3a40e1454f698909acdddccfa2e62e61c95ef37bb83108388883c5cc5d19f1b975196486b3d6bc1789f9a5f637830cd41dfe25ea91cca4982fdf6e642da41f5a47c743639583acdae4b991d343243db5e1d43b4cd1176dfdf29dac6ce9654aac781f45bf24317d42ebfb52d8fc648da8e0766e7ad392f171e8b1facf4d92d819c7f7c82d0ef4ef3811f7b908a74e2e3e3cbd440f59da27dd25975a6c4d7b39356e2cb242f013d7ed30b0726d4cdb5dd3312a1af6698672b3f5dde5b2797f0ecf6879333c5adf6e63ea7eb131fee7e25504a6ab3b8d36b7aba18aca0150997e515e54973127fd64e94eb62544848c8cb044270a63da32fb0779007b0be82f161a4c134c07c9439cb33291216df682dd814a5bdf1fca38d0000e332ad49bbc2979bee5f3507183604672e0ae00515bc00dc461d423de0f666e2bbefdc9450fcf17e95da274e73bcb274d578049d91aeff1626aecc32a4c9911aa285bf0a32a3a75884c3ba31195be15e6f1b01abc03a61e9db1122faf47b2baf28c37b51c1a9b121694801a0701c6e4948142d4ac036119cf0996d85e69dddd6b3e8addd24717e805a26c3350516f525bec94d52f6d1a7fd8affabdb14ab39ae5f6560c279b77c39acd15fea81f468548cb8874975450b185465e8992693f888b2b79e19d00054be745d65eb717f82968eabbdbd2be7602288ef364f0e1cb4f165cf0fee65c2dae5c989c5d39a66977f042d1948f6e5e968a83661fd1d9648724f2e46a893f0c34ba9fee3f1c12660b9c4fc1ac6acae70b9b9ec5e8c60a6273900327355fe072f49d06b190f89c720ab5cd76d641ab2db6b0cd9ba2a2e69e85d474a6d5918a08a8cf133b93cd40faaebfaec0f7a46fadf76e15f978badb6e8629ec57af1e2c8b0cab394bf834310c00b8c4fb57ec6bd5e8ae7b606ab6356aa5a0736b1eb861402137328fb4b0cb962551c619c15a868228320592c90e61e157710defb86d5046145c21c0c5e5e1d4e73044d0be65e8e4cbb2d3a6ff62c3f5ca0a5f3c541dd300f8ac3db8b382da3dcfec7257fac3583b56951437ba551d864381ce7ff620cd53f74fab27e2107a447191b12cf0f60729641fffc1d50295fad73e097ab795ba7be5089a240e565b373c7083267c330f0083efd1d663f42f80078897d265558c89320312b0f4f0f67418433f844f1da11eec6b95e7b210a670a6e4167824bd16488a7d581e3a9635d07cdf01481d8785a728b479e28beff576974d9ba055c14ae596bfdd2f7327e790972b3d5d66b71c2c42263349712a41331d7a5d03b58da73731aae7957afc104107e412aaef34f252a2cb02a997de4e9ee5713745b8d018d98fa2f0e1f440c7cb0e43a120e68a8b69aa1670dc23ecf3204e8b0253f4702c56d1c2dd88c270a4c0c734d50fe0621a797cad0f243a1162f11a36bfec9c01d682cbc7ab047ea50679a414a1c94798b9b2c4c7ce4b2b72c9ef4a97568395ce7484be9bcf8fa0ab7f12afedc426cd7b509a351951b8a9402884805d70c00bc058c63d47151b9f44b33580bb7eb46b5afc8864f00bdf83a33046917162acafc2c9188779e8f672ee13fc1261abec164ce00261c11f03f94b22f2eaf8ed566ffac42b3ec3e317b45afafa3a4c2a220619aa6c2352ab866b607ca96d1eafc3e023ce5b3f36936b4c4afcf44269ed1ece2dc65da47b07f5b996e3c62c57c966a08c3c15bfacc61c42dd648ef2aa705a4cf6849352d6b7ae9d76d7f9efec1e3a8b78952d674de91b3322b659b88a9ecaed4e351e0a5f42172c997df88636ec0e62b8b92af58db76e126031fcdf3768c5213c428fd1fc29ca6129021b9fa8eec56038b1578317f5020e8fa9650d930e152b6ada5985d4414f5fd70bb43da8a757bf65cce1d032d5f1c54dde641f3f7bdf0ad7c1e14fbe3a9ab7c385e382f1da9bceaa57c82f5bd06d75536eeed6a4db9bdc53b0724c80d95fc1c950408b46e6a8c40a21ff60d38a5e5ef4a34caae33f6f40cd01eee954a27408ed4e0e04fbd5ce8cf095a4ad1586126af0a027d171ecb4a1e9aa2ab7e4a4341e2f111cb416b8aac1acf51e25d78e147d6b8bd411e73f305652ac2779397804211d4ac5e42baef7fed63d08ff5e59de62b2be9ceec889be75a8964c551a5c2145e6cc4f2e0680e32501ab74f088de3e4794e2a9c47a65b943c73baffff76fa2c7330374a7af2b2b00099b942198485f58f1d0de7427c99452c15a0eff880784948233c560a9437f55f4f7b88f4984f89a9c4ab2071c2a9b3ef67d3ee7dabe2a59ef4c57a84e44a137863a1150ca120fb197628d89cc571041d651feb6fae6bc3c7e0fb977bfc7e0053150b70b5758293136428dcb5df2753390ef9547dcd4564a0220ff82b891ce1d15ceae9927e237cfd2e33230008d52bc6ae219bd3de713c20beaf8c1fa4a855ffb569c75864415bebdf5854079f9feb9c0ce8c630f01c2d8330d35d0f6ddfedebac8847f5b52285de3b059ebe2cf1383d45ad634e08e0d47c66fa26e9df8529d51b4eff5311cfb75f7c74c2bdb12159b917f030b764d1c0e273f38465f0fe06568feeb74c9b3f52634474e75ebb62903af4e94273cefbb871094db69b38efc098e5820ce05626aeaf42e4029ad0719034d34f1fc100b0263e5bee98cc2d311b867d0f1a5301d4f56cc01a1dec05ab988b9701d950d6fd281fc878ed04ff3016cb277ac9889723fceac281349671e472edbf83d31c02dab08ccdb4c7203dc62a42d3e0fa508f475e6e5069b79713b42db9dfa7e33e2cd347526f201d4ddcef97b24948f7720f0c7960501b1763ad69bc04e51ef5ca1308676c810bfdbd259c334f7ae7c490a5e34d5aa57c4ff94c7bf3dc9f9978ea9fe9bd51505294a52f8671949b14e0f64de1d8d1073d163d036061ec4e442ba9f4be17eaccbb084f7f34be38eeb005a8faaf47c386dd06438df22bd7a8023bd52cd29b23f9cbea4b8a00850fbcada6f06d2500ca499c543c3af745b7ba715ce7b0a4dd33f24ef614b2baeba75442cc87cf0abdf41648755fd77c62e22bbb4ac24984dba74fa156e4a6ff80aa43a2c2b33956d7baa3eaea3a018cc705fe11dd1e143dc7d95af64d06725623f4e92867a666e1a5c972c4ec14c5d18bb165ec9ec2e1f9a073f8b09daa758aab4410f5aa6e6b4fcb6be089718541be3be87331a5d8bb83d8ea6f429068ec8287e53a6d049011c3b1dc7cbeb03522426e34d574da01430e28df9f28bed59ba5622a28511aadf88336fe7ccc246e68a2da2844d271f0c47ade831be61aa3476b9a5684cde342bf158d57fc59ff1e33a57f0dbcfe54152b4d4dc9bc4f0f13705f8916e2bfc5e615a7b32f578df46704877c9c81af0faef041625f7df62504399a316bdcab905a7809239152ef1f455736214b81860a18015b4cb4130a5668d06b6efc5a08966d663d3562d3a1950cc4fbf0926be8ce17a871672e36d296cc3306346d1c997ca473a349920bac28f4733b3b4fbdc350fb17d8752fcb51b9c5573dd406f5672df72d55113f6b1b7f9fbb9a8c847696e42e5c1f611c4e3da83775c9536ab3483a58c82214efca8be92908a46cc40d796077bfd5f977852159dcf516bd563b30d1257a8a4bbc5ecf1097c916678a33804b40c001f251953cc778f0da90f88885bac7c8f1150e868846fa6cc2540cbfa344cc512b314297b88d22a829d45c180e8aff804163bf7ce5d57db0365b7343fa66574b2df531fa8e1c75279801f00037cd74163cc3eac59d4ee7ca91458cae85c4882148eca565f065d2951fb4fc30478c75b39edb8c0ae472217dd6540f6da43700bc44999a35a3a3e7bc0519f2276f9991515c1d5497a4b50280450de8d0c9221ca852fef7afe2ea6ecc0013646d4280a5f6f303a99bf1e39c54b6b09eaf9f0e6cb5c15bc3e90586562d0e56ab3ab608012313a76b3f3dc3336867694f3eb70b2c277b243b7be697e2254e1e9319a04dda974fa1a29caf0114239b8d9f99b1a7258893de1b34c2011105e9ed32370c36ee59c5d2a879e86d9c29ee9d98f848130852e935ff8104ca3805e3ea84f7d97be0959f1eb1e8527a59fce945579d5d2b384c0818d3689c78f2a8edff944b1796382b6964d7a5f3027910b73636cc7d35ca2fe8cba6c270c5c93e92f6887b9c1452ddf3ac05efbcc4a50d3d6356f916a18c754aa6cdf862d589b37c94f08edd7d60f1f7fb917543d93b3bb21e82a4b7b4d026f17c4081157a044b67d4e2898b87a0e15b728616462306ab1498ba859601c6f98792c7b2d6f5f9580ba2877afb5557b1f2d6c832e205c09b48ea0137d4b91af8f1facbc742bf8dfb853163fbed5932b878668d5fba4bb32e5439c42ce8dfb0e329b548baa1f9ca6301bdf456c488177619d9dcd883d1238a5f4e0ddb44dbe2aad78845878ec7a5ac8b8a89aeae0022d3624e738ee3d6d232917cb2484ea2a5353ac709f4805124a64fc2a156e2cebe8bb6fcfeec93a5baf86675ef3d0620b88d01a8ebf03404db0c6cb50142136565624d47ae0d2b66a3fc4c72ce263fcc903102b9c992694c30e0206fd83330b158c60611103906870201996441f2bf665869668b7cfc3e5afde667bb1697423d86cb395758a54c5e9162beff811b3be97cd21fd9122f35a97009e1dc21f9b5c7a217c8e7f3f9dd3f070718acd3ff07e7e2d1305d808928e703b38cffd677ddddfa55766e80888da40cdd4f9ba3c076c7fb5022b98547b2d6694423b79fa76c459d0c439fd8fdc3d02d4cdda509e2d27d7ec47addc3cb47f574d158ac49df6c29f7f7b44d52503f980d03195ff60da9b9be9e00c4edb265b5309007165f378d762a21dcb256cd6946de5457fda129e8e22e4900181486aaac8590fd205c08939a0c052bc3c639e44cba9bcc52548cc8908e3ca400a3558b6ee096dc081b671a396171d832dfd486f68c85f36e5505b754c45527a9c0176c1768e72f4898f86e0777a5e8b79f2485de93f0f98f33af02f60508e0d9836c6d8a92db1760e68a0d729eee26421bd59f3e22446aae5038a0c09b85aaa67a19a90ec4eaebb825ab7c7fa2455ebbbfba74f484811f847897bb6d1885480efad1c635eaf325815318ca90a646f03265abf947ba16e68c4be5c4052e8a4723640eeb99159344857c74ff8c095ab6d909505a46ac7599fa432b634c307fb14fe6bd6385531ac705ad6c92dcca1aa34e4f145b3c94ea29bf02a6bc51a4be492fa127e33ab29224b7117eced5e7b5df48d6f35075591526ea2caab47b64e551a3068807ec3ad2af30380513ee1d088a8dbe605543cf001cc6b855ef16dedb5b367b2aa05061e7f2200c56f12bce975f58248794cf1964c439adc74aac107d59f83ed625e427da84bff0627277c0f3ebdb2f853ab3dad4c56118e60434e08b483be39c9a0ca8208884c4bdd0b8cf1744b676dc0ea51c63ea751952778a17063ab84dfd87d9831968ecc2843227db2666486986dd9e0e23da6227823c6035afdacad59d496aa70140993e51955ff3a4389af117faec21c1e29f38beb2ec3102c417a715306ef9e9e1adebd07376b3cc31207c0cb42e5e9252a3029cd4213090b87a1dc1a0383f57e02734d63526fafd774ca5e572a74ced525102063f6b83d2c076732811d857ae9f722611941b52295347dffaa99d9f03d7c8a35599f02e8651233db31ae7b892198f9a5991ad78e25c787a61696df972ce8c630eda4d91345081b4c044738ac3f5a5487b92f7b9f1eb3feef674a5eae8f86e329df1af0f5ca0a686e3ab8d398b8c83bd2f65d5ff3984fa00e28c223ce60b52e7978506cb91cf4876ab7ca6190b34778f44de7b0a1e9e36a09e3035f7d4e98af5eabf376592027975e821c3cae507ef638ca13a775d405cb9d32ab48b1b441588b7f381f96a32b6f308b05f975115a488579fd50ea1e154fc0ceffd7311e4662b4411182df08d5142773aeb101b40d460150a117ce68dc6efc95fb6bac77d1ddd64a05d95af429f1e17726a3c9d9fe6a716a1cc00b7b22fefc5ac745f24519e348aa16d6a371ee10687ca5a5157ff30cbc1f3bfe9b253a4d495c0d73b31b2b0d6c7ff87ded1275440744495a8e70deb9727fa1bcabf24d6912cdccc93c53b44423dfed4557d67d8d704defe168bf5ebfbbe530c1590680936abada38ffad85023c845c53a2f58719985f6d711ce55dd1f9604421d6595f33ad0fd78a9ac2ab544be1eaf6fc54ce73fbba8d363737d7788792be4bcd4e5ef4ef0a0eabf511231419f4c7617fcf2aedfa182722c9dcb1cf793c2683be9b397f0e9c7e25c8e8b25cb8912e2697927b4aaa323a6ceb0214a220da65a43f158dafcefaab68c278783f7c49de4328f26878c60378785aa532156ac7d4e0db9e26f482d2c17b7f81f77894b54683ed5021aa89b25fd409957a33ce5a54f39bc145e1b5f291aed370d20f53c6dec2af00b569489625b1f318391a98c342565e5a60cb6856551cbc20035ed5b6663883a1870a7a91d0646349e116a0082e55360c5b69378b09fa8eb4341d96a5bfb80605e1f2da7f7887ed8953abcac86a0e8898a9eec995a4e5273e3e31b70bdfcea1d74b6f35a790bd6940aef4b87351a422c426d51359d7606e857b5dc0e37cd92430ccc24f3fad7ae2921ba97fbd0cf0e96cc874edb49b3dedc791b2072524a4d135509253e8ce21133c1735cd55efd67f1088a722acd938bf65fe226e11fdaf096a8a0561e14428c1e107c6a82a9489a56a7d51b4a56e5d800d7b3913b7a3006885d4800845ba77781a686ef184ad032a05f7c6df9b8694541416ca3ac2e0fd8f4a22852b553323d085f5e958cb656c6bb249959769101fcbb6c7ccd55cf280c9dfa1cfa9f752c5c2f3df1b678c5cd4e7f34e5df1909f9c415976fd80c68b96ee4deeb581502320bed9bb3c0d4b7035b77bd5f55560fc7642605080597a8e2db4a740b5f15f9c5a59469ad687db04c22e65b0b1d38e86a49b75639de81e462ac04ea51f5ba634d20cf51ab10daf63acab9daaa5d0ca1791f93255932cda57d6618aeeaba201372f8f7b4847e9471346bfee8e3685608b5f57cef0da944bd8059b6794e26e916af0416696568f98e0dacb21386ca08db9f4657eddacff76aa3460e76348eda0a88d5bda49c52e703bbbf471856a7e17dc1c139908208ee16940a135d7d892ec49f23634983e1688a608db4db41b67de684beb355cdac97b1627964bc336e94236767b33df18cc5c1d491ba584c1b6bf8302ee2773f6a84f429f4ff9f8d3abf5fd3d43784a99f72e83b23224be9700d374cfa9bbb7593382af105a090659f12a984f4de91875708fc28c5297dfa22dc4b72707287b219c888c63074dbdc971fffdb5b263e6eb6afe0aeb35197b0a3c773052de04bdc2efdace9b5408ce8878f1af6ada022321fc7c90a2405ec6fb9ce16989a485f46f761bf0ceca34610f72be34f5b74a2d1743cd5975d8d0eab638547d95a6d268fd410b4a86dd98b760e37e754e7717cc064b177e1d04e04153fd08d9015db9cef283ad12002aa3ff4f2e15fa82a3cd79fcb98a436ca749066f52c5c3f8d49d35083c1661631301ee91ab3b5f7ed6ed917c75c81b490231f1a2cb109d1ed0ed081c7891ecece802cc1f9fc2282f4ae0bfc151212ba7cfc4a00e9db4f3c63654c8c383f200531f4f1153d76c8a313199b63b6e8af19a4c5a7e29ddefae74b63209b24b7aec2cfaed18d800dbe43d47ba1c3280bfbf9cd8b768f77cf65f81d6731a45035972660b8d3230b202c25e87ad4aff50ec211888373d787579bd8a12c6ba1489319c450fdd8f4a3c7fa64de819a82d7cc35ce26ea1b35ce494eb52e319ff704767dd187b62b53b983b378010c7cc29f32533a47324b7a9005ae0d41d823c192dd63e5f318d6cd8884a631517757ca6efceedcf00e8b4085233465667f3163a340e533bdbcb7a9ce300ddbcadb9e6c7dbbc28e9c645ad8aad9ed982d056d1c66549db42051c5d0dc1f91d2311610137907e57c95e0ed961ecc9bde4dfd97e7d0e18382d77a8bbae6aa2901cf23a508d82c627ecb7b4c9451d07af1d777206f6cb5c73bc64f497c3d82c5971bea5670323a15c1e08fd1fc19c26aa550dfef7dff227151168f54f16827a175a1fe733aac875335f38fa902f330ef7816d29b765042ee34c34ac3879b08a2ab948687b96bfbbe12564ac4b4a5579ca9a98ec20ddd3fc3ba11ab12d329f3f717096e06fbc0dfc1d942f141c3d3dd15fca20037ff2d6be3ed17e941ae85c8472a6667151452fd117e275fc558792e5c4d6a8bf56ca1276dc439e76352b4e20ff056141426f9e6bfee563c4de1f9b1a143a34e03be41aa74b3918f64aa4abb9dd6777a49b22d8bcee6d4b448df3117875b7387fc046be5134f3a7b8194b9244c9f9ed8d1a0ca19818f48e87148cc2cace98a8a5da02dd49a9dfd0f79b012332413bd6d1b09136868ae5caa02c9c3b4141d979e9944b9f48182b3c5150d6ecf6f08a24775ff79c2344844b8eb9ff0c65fc267eb520ae8f0268b38cf522317157853b0ec8706ae73f2787ee151e7ce39f43a952eb24b99c077e5ff29509449a747f2cfa3671516dd21422dab15ddae144ec3d837b09b034f130a3b409c35734d240961b7572306e704968eb04599de072b86f20e817b1c5fb78b9c214aa22595000fd203a69754278179b201bbd514947e471a5dca1450de6b533dd6a1d74e4cc6960c39a161e0f72054d30534ca76ffdab8eb470cbcaf93d49a6a1e616045a47000046b1b8687e20453e503b9a3b46905b2ff427fc9b36394bc2bfb4786374156f04c5d0c9b9af491a6409d6c89f6af09b603f0030db65ab249730e17d835b6c27ac04aafda0d36f936b0180ae5ee0d2a785c27c5028e4c14624d586f9e03454d79cf397fa0948a025a4e0dce42567811ca9b3c03d73c21eed7dc3780ef026eb38d40ac565ca7fc079973b7dd1e0c3d45d65cdaf162433fa6689c800261e3486894fe9dd4905cd659dd735788bf8fcd4495216704de67d59c67728c20fde421f11384a86d08a08bba102a7a1db99c282bfc0aab21d34435800af603f3abee4f4f0a4dbc439526ffd557c590452f54e1dd8cbd8f2ec10591a739bf260ba948f288bcb0e1ebaa27ef47b3c4082e7c4887e3f6c00fe6cce68d0cba5702d480c18d438931c6a04279988b997f4ebb4ebc14a3e6be1eee9551a0b593526e809f390db46492609352e50ecccde70e5e3a96799ca5eab40890bb6f97e8f2825c571143370776b29cde4b701f3f9a869a2d51d823e80c1a3aee1216cac7d594babe7f1d2251d89f4e4f76e3da1aa9df2a5d4a51fe528bc6efab5dc91255cd7b20a2fed7415e45dab80139a3e00d421db9eafffc99cd7a18f50275d6097516448ceaeae862557239652128a41873fef16c5d9921263d403e27c0341f60e208c62510487ec29d880ae4f195f237aaca961b907a86d572f617d5b13f669c4f5fc3cb05708a1fadb991b9536c089f64ed1daf4ee4f5f5f0be3e34f4815913004ba1c845f51b58856d61e1413bd2b4d32049e98cc136ca4470b113a60397659579f6e9a86421476d0d6ee051c5313b1b87bf78513ae0f1df2c89dc3dbfdf63d76f3dd8ca1320f64b451362439bda70f2449f69c6577abbd2a7d0251b83c27b36992f65c6448ef85ee7bfae81f9f089dcedff98a6de8a6a3c4d29d698714f16b01af8e59ef68335d669fe7b58013d45b007ff52f80ee28884763d8539c7aac8077de5233332ff7366b6113aa1af2b6ce1755871953c618e2e0c62e500be63d30ce74c7eba06aeedbe912e6c38d573c74fccc150e2120e0fe8b5deba47895acb49bfef99a3d0e037ef03b492bcb08af80794a71d898400c4d7d36a39aacfc7b724a9f013d560ceece0a1acff3399d372105ee1a95a4543c708df632b4d2cebaf6254b92badc3cb5831b6a89bde83507c2ea6062b7bfc6bbba30af379579aaeb81f202fdc221dcffd5b45561a196883a6b27766207179070912ae1d9e263d6a3397e978cfe27bfc815813585f2d77e0381a0f682368a351274e0f4f1f32fd4013a29f536e1703e39558713a11c161758330467538d4ddb4205ce55e36c056af90abd6cdf916ebab291a12a0b309d7eef43f1581ae232ef79c20ef577627fdcebaf48e2bb19df8b2bfe99dc5fbeec54c708bcbd4a229d2567cd954e1c94663c4f5f77615c124f6aea0a49116299c2cc37bf5d25aef106ef89cfe779b1556565312f06323e8ee0213d583ae10c9b1730c297cd212f243e549b95f72b480b3c6906f32cf100b09df79e0b32202b173cbe643e3bcc87f133f5ee71bec801373ac5d39e2fcab5ceaf03aee8757c8d7a4e459c50ec94739e6d988c128046d5025c479a6cf0cfcd85b68eed72bf7e0c47783fe0eaed7c679d50fc9daac6d1195b4504912ab8b2059287841bfd0531aa5b187b242f0fece6a1f4f9054c41e8e5326880710f733c4ef8cdbc550149440ee490fd671910ce0d96ece291013f44a39ec34837abae8d64730ca6014e70bb5dad880a6e0b97e98be0ca991b2a60a7fdbaecb3b10976a28e2b827900bb1c5a50491e3b3a9c3ad088b0b10364592d635515d85f5b2f708be50ca2d84b9803234e3ad49fd364c59ab1b61fbb7fa08a964e582a1fff7eca0db1b86803e9100f4a1a1d6967ffe6f5a73bb3d85be66aa9acaf18a1cd593db1169b7dc99f2c18b0bf93bb158cc80049ed4204da76ec9311a0cdb096cfcd3bad3e2928f2421c9fc732a3cea2488e33b83b2f60e88232cb7e56b81f9adb95678c7cbe71d848a397a70d806ac403f92c0b772dac12b915532ae2f0c6caeab5e93d49ea4d32795b317189321ce2185ded49ee3718d462c375afcec29c976c9201b0cb3c8452e51dd534013638976192e5307029ec125e07a984c68d922053f834176893c00c8c2d319dfde174ba8d305ad55ec3bb7ec1c805d2c747168a0f69d0702e0f5fa7db1e853acf8218fe1b684a765f57a7c7a1f2c3ca23d362010b2a672213000b7c51cd6cadff0d6a7d1501b45d1b0331186d0fb421e4f06143ff4b3f5e50a3d8410c739d1edf82520e992aa3e98b01f797208790c26e3c935c1e6cc59bc767e0e88a8b8952380e35b4d4c0c06e051429b3334fadce6fea8938b750a9a2f75f281996f3159db654026ebde5edd552028cdc5b58438ffddbc91b99b931cd242c70e4f75fa205cbc34c1b5a24e2aad036cc7c34c914ab371886520b8255ce7251d6d674ab86c7bad08e8768d5c8599443aa3014f34dc4f56b8d539aed29f2a81f14274b10d117d15c11f0a7ccf2f5552dba71cdf628d7f67594a52483d65066d704f97069191fc73421fb9cbc1e8b27ac7b7858e8cdd398b9989fa7383de3b4c73b98ec077fcf8b6010f231642c37bfdec51e7b06389d9a96a54ee66e759c95252b03126317e24129850905a383a6234491bc9a17030859de1192295a4caeba56315484f83328da88e9abc2f6f3293dacd0ac1151c524c44d1a79156c710e9d5d635ffb87b09a99fed916e00ee047c66017a44edf9b6d0eab655a07f6560b6bd8fbeae80af31d83d485c9799bc90362755982111552d2cea42b260e6c768f47d6c72a1d47f3730b53e7cd8ed28ed08190c605fdb22b563aa4c3e8249f0d6f7bd6a7ffd01948919d53770e2aab40a1fcef782f9c36e82a5ce9318b2bdee014f994914b61f15cf81641033eb94287f9e78180d18eace14d6189534afe0ca0439b61a6db0d2fe985011660b5827ce088c79144e741be140118da2186959f0b58d3fd4ff64ad13354180fd45fe7a9666e8c3a103f9f34e87502b69a068d827e86e0884ab6adadc7630a73967ad9a5ff89da7bc01df558b8e6551071882f9c39c8067310e3a2a8c7ac2ae944d9618f0fffe0d925e2ffe4b752af01e8dbaeb1ab78bb2223b73dca7a631e23583f44457e840047e5a3d8ac8b74fac091e538841331d71da7e0c6dc0c48ab4059481ca866ed34be2a404a304f4e11cc4a82fcd66108791f08a91c5a5ba70a3f6b3951ab4c707830d24a6f6580f48b4820ef4b3331a63abca589e379b85f08adffbb3216d74257fa87b5b27333a10a4836d4d19a7afbab794315fdc092ed5a5880ff57e601885875d56628fc85f185b49e2bb31e868d97ff7d84a63f09f0ad462bb536222b476fe8609b644e1d01b4b965e56226a83844592b5d38a3371ca97b5a8b13a9a7b9739c884ca888c96042ac0371784863b6409c939f3d85fe3460acc8234f23f24fc9040266b874ca08eb421140183df9538623ba14b749df34971b85df57d313700d8327bf3e98d2b40912110be8540758c3d2e30ec6ef0493d2e077c2779f26ab84c9a98edd692be9e4b174ad43020878effdddfda6798fbfa122cf8da6de32dc8ae1222fc23605e222e133133d48ef4ee9d6050f3ae2539ddac02d4d3f44f7bca1363b6fb96cc1c2902f1505ce426ec8653e4674165852ed1e9bff60b16f2d670e40e4601523e515722131c86d6192e3fb5fd8127fec996217ae8520d268c4a72d7f6c59475dd8ad54afdda641f1d6485a8a9cf80a0a30961f11b1aa4f3a64ba2a8a8339e8821a352263b61a3d73088ac7c135af866f7e1359825b6060c0696232895c126f8802fad63eefc3d54fc92a73a5efb4540750dfa4d6e3a85f461ef1c068955cffdfaebad0ff0d05007988f5996e5f89a48f9084fc8e556d6ef9f51edfd69572273b8a6e0b961428e074112c6287596cb059afe0f8c70751d56fa0ba100789b3e9c0f0e35df1f46952605bc85407596ecce9958ad658c40830f87b61da519bbd1490a2a33894e6f7ead652fa2b6ffe4f49323a30d88fcf088775284cffc2e30e69b0b1e9afc57f7ab5e0f1637ac1a8437c9f544035584c934f8ed02ad33dcb7e9dfc3aeb81d23e35fc9ec20f4ac9cc2558bfe82d0e476701f09a8ae17530e95b5293a69c71fc1981615bb262da0f87d1a151d2993c54a8fc37754e10e95d94165c4d74c5f56b183c35bd59904536d629491e29ed7529fd937bf093017b6aea677b730ca5df67be250285e0605a7df3ac082b52ac9ae8dee17bbb83b924eb454ae07d24d1557438097087a516cbe8091ba7cae33c5bc5ef551266f2e3f0901836b6d95239ac9cf55f12c6792184bcc70ef902ee122c0c8e0dda2df045e2ca733c9ab183939aa7a0f418fad26690b1e12fbbf2accabbf71c61acc74fa260f3458774704b3123c88cc5a20b895c99b52ee393e1e8d60e5f6a2eefa0199258f5ec2b8d611e542b6c60fbb66328432cfca8a07c30c407b84d959bf99ce44d9d5d9fdba8fe8db9c8089d13e6a863d8494d2148e6547904a19db36135e7d76e57214754abaec150d6ba4fc607daec2bbfaee78e56a4f1df1c5c7df35edd1befe1a9ea258c0181b27bcf562c0d9da099f87f4e43f7365531f08deebd54efffda4f3abd60afec77eaf90b98974618310e859682c723142a250d18a035da12ac4e33f5b208dcacefce4eaa2bb8ae655c299cf119f0f15367d812e4f208512f5a6bb138b14782ea6c90aaa9c3576d27507ddc9bced11f4925670945a95054b57e55e52033f7d5b03c83b14d0fa701d5e1cdaee33ed2c183da9b93b4dac9888c7aac8d59f427043f8d09e1f948e6826f5d3cbf152782442d2e626b72a8e3e1012fb4798b4a8812c6b0c9f6fdee7f9a22831bf848277b2513f63189b127cfd2d6d3e9670202ff454475f1644f09ed12f7e8ca613a7a88bb377ad7973f34d776ca017ba43e975438129803ccf70bcb44f09f1ad0afc37bcb9a0d3af2fa8c70eabae83f9cf1db51d561f121f111a16d9f68aeae25752f1f3dbdc627dd773d40a9a46ce6e9565a104249dd408b93cf274fd5f2e9b65b89298fb5b79f33654c8226e17b08e128e2a4148722a3c2eb1a24582b008276619d0c85b0017c76b47535e6de5836ad31e4a79b71e618c7674d32d2972af7716de8838135a38fcae0e3ba0068ef5f004e46f471002c5e97e292ff4920b5d5213dc9599674e25951c31d7a4953810c8c7c0e8b3eed3107eed54058f007933b366aa44632db4cbf3a6f40a5c9542873588d82f959cc34414a5de6540b520742ab496256022176978656899f24c1ec9ecbc3d292f1bc331818e779308eb4b04b21550cca500d10f95960c92a58eaeb1bf59001cceee5b7185b8e67aa86c757b090ee4309cb178859a5b6b7d1014626ba00b93bf815b31ba0bbaf14b35501f640a98417172432c694c6f2d6965f42c7fba97af4b8cf93ab61a00fa5ea0be8b6ac3af92e74fb2144f3fea33d37b3522e842296118300973a4efbc1a1715ed9e47ac8758c2877ef72fcfa1c7c84e05523ac81b38bd7c905588a93023a4174a16bcdd2a12c8d88cf222a067cd82b1a5041b04c29561deb94ba64c2d2c88aea33d241c367b77236585c1c5550e77b674062aa400228abfbdd92acaec6ce76f5d0a00fa24d5a40a02ac9271f1ceb489e1080e165ac4fedc10fa177b8a0cb137cb502c6b6e2328d903d668be5fa82e8cd414d3227cd07eb0ae1060993c4328b88708fff3d9c57af8336cdba91efee10bd37592dcb33d25dc58662af410c962ef9b9dfc63c7731d815b7ba20fc0ff4977bcb879b91c3af5b52362dd231e45b4e34837cb20115e12f643c90cf9b4ab425ece3da5380cb824f2a0ac8fcdd1cae486f9678054d9eae14a874f2922f44ae27cfff7f220c42218b96294b8485ed7b3bd7bd24902cc583fb1917d7bd162fe59fb3df00f5bf82c3d08fca8b9409df380bc1442a9a746b7c7423fff72e1225677ccc3095738eab6153f2b9c3ab32f0db4c59707ba487796816fdfe81aeae5f1dff4003ce2935f6f7ef813eb1dbc0acb40f8fd1e58b790d750eab52f968b6f83b90afc8cb6bb21e71041c717900e3defa79b0285daf60b7486a1a9d2c0804634b87869e689f75fd3e06e07afd2750c31ea1cd0ed68547f83b09798fa01e2f58c5f0acdc4abc5446bff6416822f68f001bb67aeb9cd4629905a91b65dbeb91ccc77dc2db4fb23603f07e1a0100c48b6a347fe892fbecfa267e587e5d982f521cc8702c3b963d91f6e354b9c786a91d6652d3b3b2c061de51cb9bdff853717359dce888f41978b4ba840cee820a2306e9abec38e8bf57e726a9454c424f65764cf85d151d56bb02f03f3fcbdfad0a24f62bcfd2436c24047ff0669fa50a6b3dcb363dd39f20dae5f2f3e2ad6ee76b8d044ebcfd71568add9debf1b22ef1fd5963f15a032a4db534790cddd26b7234979ea21768cf5ebc064e81749068fda587919fae2345022917a8b5bfe77951a0282bf09a01841272d41654ada8bf3cc5b90084aa2e8ba649982194aa20cfbad8326f7a0456c345718af5cfdc55ff4829e64c44e8a790c9f4afb79f703e62ace988ff82afc3fdc0b1cbc58e583013e8c4dfaf72841c1f351bcc39f505cf9c6a4b222e0eb9a782c02c0100e520370cc193250ea16fe279ccdf80317f268a251971d3a4acb7a36d39dcd7032e3da717465804c152f39af823d02d3d973f6f6e6c4239bbe7220b1dac9965a84900f1a66fa81b8c09756f2d93279d4178a785700b312509e2e21b65d1ecef11f55580715edbaa7fd2b7643bcb55cb08be0c2529fee5baaecc52964b151434afa97d5dedd01839837074207ecccada232c39d4271308f523d6e5ce122352cc9a66c3ef509dd8a1f0b61bfd15aab2d0d8539b57f31075a0ee68120c2735e449468ddc5e6fdcd3bc0d4975bc257b232df2969ea06c05fc4037d65efa31f0106e8bef64f96a9970c6b974158e1653fe8acff9b3b37e58181ac4ec10c53a14aeb2c9db4c8f91f9f89a5177b97d6509b49122204abfa0b959c3a0822af5d0df0dc031bea58df728778e8b4ab181b01ca639b6deff516b0fea38f588257dcbb9e468a94a937cfabc30679effaa95ea1c6b9bc5062cb9d35ac1ade68596df526ad1761f9221a959f5a612c24c156adc8db33b31d6e0862858292aa0859ec5ab9664d98cc8290c8d5498b4af42046017463fd626225e25c15eddbd09b5b03ee12ce0e310590d8642a6471cfabc4849329177564c75f20c139eb3fc9d76d5cb3a70806409370820f3603dcbbab7bfeffc1c9431338fced5b22ce2a24ab9bc76639dc2562e8c9533ed264d98e35f8666a223dc63885dbec2fbb73d3eb84c69f612b4f9019944c3b643cbf4bbdd4b729a8d24e72a33bae819fda6767a2f4e73d8e8441261865e05df411f5dd5534db06035a191fe49132f16faebe121b3381f081c7cd5792b632dea847e84c383b070f9bafc4054d85a461f5ffd1cae3447af15a5eee43ac6ff5c70e3ebdc6bdd0f368b9adf48edcf8470ebb8e3e15a01d4e0729b51b33013aef616686d6b7648733adfbd76102098977523188bee3bdccfe29b1953f8e872e1dd0c7310df507f251ce997af4bcbc64590cfb10b48d542688ace9d9e2b8b52051778bc08cd37271eeb7f25bd5aea7912046ab6ccab1ef4dd350ec32335b7a493d33619be69201fabc0be7f026f93959f7df4c7feb4c0eb4e15886aa1224a57c718ca8208baec65a3fcbe015f3c85ab4242edcded0d939ebe229b2a711444fc801248bdcc2d3603c80de27571d8c87ed450952cf49a2255ba1a36dcadbcb87a14caa0c3dd45cf804a5d438b5a046a3b91656bdd0465cbb9cb173f8892d14a99b7a900b04912cb6fb9d104bbc8d08827e313658ed9818ca05de17afe8bc335e284674b6e7458e86ad46d617eb3b62afa51335907f4b325ca1c5114758b3d1f7320462c32be92530d3bc9b33a4ebef280e66c782a93591d9f6dad88e1e14bf8b9f0f1c095382d6413c538afaaae16085bdc151365d465d967c82b65c0dfebb6cac749dfbb14c5ffdea8a65e60d7d7e8884401a387e9925f67606e85ddce462436f32707742829aa1466aea094f7edb1be71027f7c690e830274cc55b92c1ccfd4390326a799b433bd9aec7bc5bfabf6d05f2d826af7109f3c037973cc2600219db2e5af70b984f6ebb9b69954baee934e01a1f5f0773b6b9752bae9be7c63fad3dd2ad02562c16feb9a28d62cca152230322b1609a6104674196166b5d8a0e0f14615b5d927b51cf9ffe49e40a49f8443463d0d87205bcecdae0ba7dd9643bb1523723d9d8ffd8a6a837f55de720065ab45ba87ec2a6fc3e567deec607a52884ec7610f27e719b40d31faf7e27136cb930a9e97531bf40564e02dd71dbd91724343813db0506ac956f37e6ca516acfebced78814b33835dd3c47ee3860d6dd947077c06cfd5cafb795d7ba20ca7dde81539ded75fb556d070926afc2905ab3ec366d88cedb5fbecf33f84a118eab5cc3bcd0887462c3b72edeb4927ebe83f74972398590e21b4e083cbaff1cde92c5926d0b770ea3f6fb54044d21ec3a6be2df7718e01be4dbc04ee09d456bd4dd29163472cf7b23699cbafffa44acd95a4b34b7379213f2f5e42f1867e0beb73b4bdad3ff147b1f744413f7c6c5091efc3c1241a88ea064cb4291769922166c52d8afa59ca0e87183c3ecf33b8d7b7e7a629848769a320c9d433cbf4b06385e9e63bbe71a62ede480594309526b04d8c43b96ced399d73c29b02c16020f9edc0931e682eb7a000ac00d705a59cf61c87d2c3c0d4218c8a5d2ec667978c2103cc5a806a4a1af417619272cf2c6e0cf31866dbae73a34e81616411645b29471e63556d48a7062ba72ea7371078756382280c159f3509c2deabd1061056a96ea6b4abea359e5e390d710766bb92faad981b3fb2de98e86da938aa3e4f50c67c30f4689c0cab5caf6a52650cffa42b41ee9297a5a2f840e1115b0605aeb05a13d01c7729ab2bcc26546048a98c4b0ffcddfb54b9427d55fde979bce5ff35f1d7973f404f74ece3814d93575cedd1eac8f8a707c3b31126f68162b2c654d63f328545a9c93a2fd2d62b656907a75cd3b15e904e452cec6d97444d250326476c6c517120e2852457642425ae9eb7c661f17914cc5395d1134d8fad14f3b2488ce4b5f919820da5378e82b84a86d22176e810820b6a7391f522f1b34ae28776b49dbc27ab082f97adbc25329707af3e1635f405ba603904a7f7f6a16281e9d53e34f9a3cc5032403d18bd9bb465356590df996fd26dbc28a5f2a6b7c3805459a95cae585cfb5ebdcb4d86cdab091d2e214b602bfb592cf4d5b5002eb4cec171e18f30779d843abbc76e0961801dfa9d34a4bb8bd634477586a8e53055891b71f2e5ab7c32896a5b22b618a35fd0c07cbedba29b9e020eca64e58c28dfa971534fddc1cbb287e934977ee1e7c8a2dd7616c0376978d1ce21b920707441d2cb30b395f401175ac47c0cf793c03075eb4145551331b29ad37a47c2027c290a93acb2538849ba20a41ca6da67dc9060a54864f58cb4f485508f1a64ff09ac9fe1ef606cebd53c77b0d060361b80a859b2a316ab2e5dd07d05e57f5d32b26af54f43f83eb6c215b686ad2931127cd21ad3e2e6c584e9176c48018796de2695141fb81b7b25fd60cf8cc55b62740947daf518306ede5f39d232f97ad3d4a106ffb771ba181e0618596e4211435398ef1068fadd6268109dc7244c45af1237456b96433e1cc69c5df198b2294ca3b2e8d3eb5895eaafca33c21768cac617a060ae693fc8683e6469c7e81ea7d43dfdb4232bcfeb1955962dc4c82c81ddeef9928f92bb5c291e3cbcc55089940c37f8db6fd4a8b8b6f132470b075c3cb6f830ee49f524620282a3e49867f1bfc9177409878435db08687c2868175fcbad6dc2f2a71add1402f4174dea6b0d8101d0191f89aca42f7086d327075fd28fb3e32a5429e64674675a2a453e5e55c01b61bb334a1f2f60b08a1f402079b1a798df1b00e47c5fb3eabcd59209b096c94b91584fde8879ed990e62f20969476c6e64281284be0d595c0ba6157023fa93d5a1f5e334d3c493f3ad19fe97ab35aeddd81c70399fb7131883e7e1800150be6ebdaa5c7b85378b67d22ce02a28066000605d01e005092a81c685db021ba00e0653334388083fee6491a00ded9fcd53693e17eec7a9370c12d27da8f822c2958a31b7e54db05d6b9ba6b591b82f122401078bff62859d0930a5dae53d39b413b1e43f0aecd0e866e0179f43c8843bfd5ca8884b2e190f40077c5386e617186c898285fa6e1f369ea35839e6da035922b6c839b80c60f91808dac586b1c38baa754f4299b9ccab2efd196d2f369163885de29534d605455f5fb80fc4dcde481405665f93bbc4185e0ef5a595ed6a2423b1d95a66072dfd0a89179bf6368251a03aba6d3173bfa6d82787ac6c110f3ac7c8115f926d9cbfeacc136a9f3962f23b8e08a48789d8640faae2c18f3556a5d3d49607c3ef87c0d819663d8fb21ab509adc4602db4ffa6c48fafc957edc6cca6f51f8652580076bba1a555aaa4624ce833edce2c85830ee8e8da111e0447acce33455a2b71170b69674f6221c72208175c40dbd57404d3c5f4d1dcf49855c71a7cbc1b2c00acf82464b896fc1d4df582688db9a9ab39c39e1a1642838688e8204da507020fec52ec64586ddb539a45a23d9cc4b7da47a3c7ea7e7381249a111b4c105a0cf58283f3d2de8a362fc2e9ebe5cbd1f0fc9e9d210b9c7e723d69bbfdf1f9c9c777a42e0be82c6f8bc809c3f6c9fa51c384af80ca26b120db7dcc4d3968ae959999115aa28557b20111ecbc9da07305bfc6a0b11b37278f68407ff529a7c61aca4a0e4d94f7f30f46abe077c4bb7197dcbcf0ec7a7097eea7dbb7d27fe9a7f49776a4035d18437a04228c9f7a740ed592c221e9ee015b65946904d9b2ae8b7603d011116851a1c23a77b43b2cb0cb312fd956feb01edf5d8a46eee31166c605e5a9a8d5b8405e883250c6396156ed47d216a655618ae71e4cea789f446c73ac83ca50a9ad8816be7aa86cf60fc59990bcf123f3f108f85ad8455d33946ea5cfb7c9a21d999e1e418b79c3b725c3d550c76139380751b050a7854cea8063df4bd5179bcf1ce78d002b868c6f143d798f63069a9cd946ca1690b0ddf5b41513a21b5b8f9a8ad0329aa26556cb94b45134e1b9b2e9f1a4cf44474ede8e208850ac274953bc7f524980259c22d3dd8326fbf8e2f16209eaafe992b5c35d75655c08c1db55c7729ec16c071f5b08014b745de29a276b1dc9e637c9aac07b9375cb667b8d6121e730dd8b56f46259ae5be794ceba565aec616b69afddd755519dcd2fc3e096c7d4e5f103fbcffa19f910866c678dd09f36e6c4568ebbeec55c999b94ff677fe2cff66d21ea688cd4f710e84c8111801623a71615c2372ff711cf7e0c07cf80b0862595836d2980bb7dc75a7b1fdbf4025266822f5e159551dd81585cbb694060a487c7f2559d15ff4cee8bc4ab1d16acf6a31b1b18aed8a9ead9b084ef4a682a7c5a2d962588c580a533f175cbd6191cb4e98a8685347c94a05c540bbc75b13940d2499330153c2bc40a6bc290355a3a21b06e54f3fcbaddb9e2c6309f6539b1ee64edaee6b3d089056f7096bf7105b0f7063c5aa04e2a17d0df98eac01f84ba48db0eb7907f70b90ae11250143a0c2cf771a7fc582511e20ec377c8a6e1c19813feffc339ece3d3a0dd6b1838bb70aedcde508ba338c1cdd3df1e4929effaab9e4db850009f0905980c68f30fc38125104a696fbb3064409109df695767e513279649200e9d98dbc3124b6297e49387680b6a3ea748850aa4d0ebc429315b4e5bd18b0d809959aaaac393fc536cf3d18d986aa05f6f8e2f076f863814a9bf68e2aa11b84045b337ba6de323b7eecfcc4909640c20132e1b01626a2628bbe2ee7fce041feedceab86c8ee7fe353715a74b41b003b7909583e48aeac3880c726bbf1ce4b83beb880d7dfd9984a792f642dbb25d6745134360b8d41a7e3a1ce86a91975439ec2cf80516ff3ef7fb748933eae7139b632b360ef698aead665153551f5f468c909ff4fbe4d8bacebc3bf8837fa0fd35151ddc7a0a4e104245276ad4ccc92a807ea9fbea23eb23ca8ad48a99d5f4640328ab7459a125af7c25818b76454dda1ac8ca6b47c65f7e06571f509fe4c3158bdb807f7191e0a285cd6db32bf6cb9812878d8ec364452511be9826eff1d39c0cc8e4edd099b075b59dc1fe38281d1a7907c204f7019266b6269978d08ce2191f7f8b97552d5b009f99d6728d2f5bf44366d384809dc9daf237299f95b5479c05b9bd9693dd62e116e1eb84165f9407291fa116dfeec86b1ddc80bb17e07a9b0a8d5faeef9e1a83c812b911383feb945966d1533518b8d5010236a8ef1ae993765e2fae74db26163313b3ac588cf2ddf9cc36827f10020dcd9e0d2b4113b04117f537c5cc4809850a769f9a180d7f44302821307df480ed3f934387910adf92ab3ea1592fc42c603837cdb89d923e779d68df59a62234fb364a04da5cac9e9c488301a5628f5cd386a1299fe657c25f30c69dc096577e8ed71aa56223f2137fa9b3e66c1ff1e7b365dade6b5ee441dbfd9d168d78b3e75309fff37ee4174dcee813424435b7e5cb0f6762b4477317834e035d89855b8fad3637e6cb2c72f21214a95b55a04e9d0335bc28c4f5f1b24d33e553404b5be3a351071016793605e61189be424ba02428f9a8061d11cadd4125faea1627311a4bdb59698295efcebba47c027f7a7495661fa31c0aa08363cce3ef0057e52741f63d48c4109f669260c5d2765930f01b90369934ea12b6142743a6c52103294065b0c5555a1cbc95e1ce88d9507f699129f29fcfb7777781c32f50d36dee698e2b3ed0b4d8bbe23d42389ef0f57b2e671bc790ca76a05096ad5e65c22da06f8a5d5091eb6c19760c377385d7ae5f1f69538fa7948eb83f8eeaeeae25284b637d5423131220212c0dea5a6a1114842a2cb757c8013f916304cabc870ffc43765196e4788140d7a10d8e056beec0f67c7b1bea52515fc8f65914cf28ef2daef077f096db5fecf65534547eaca54ff1c72e45d6fbfd3c819638da442b622438f904c75fe0484e87e77740d09c0774523a0041f3f023af7c18345ddf897c0cb3e3e68bc4f90c086f8a52e9deda282865c613d7830a59e7e9764a729dbee6bf3e5262ef1e4d93512d41e6d05b635b466e3ab3a96c3a3156c67f844af1337e55d9bc78fcd9bb9ef5c14dd1510c95dca37d544c349d7ad549c5b3fba20cc47216f68689427b83d7653a794241824b7b713c5cda8e6144ea3db2bcd8c9e3802ec8d585c197deccd244786accdc5f80e9e0d7ae4458f2e78194bc7dfb1ca956aab0f3827bbc31f150b0bdbb55a50106800bb3b27435c6dd24719f8e1578a8ab2060c6815c23a0362226c026ac9296dfe552d50c2e3f48f5f4bce4a5dc6de59267142732caf77022fdccad73309cce5750b8366295cb881ea788cbf89644307550ac1590a79673ac20cd2582bf471a8f3a8ef312e369ec673ef9f3e3c39104e589ec74c64906039ebad118969ad1b056e9fef153488c3cf9a49278faddd1c2a90b37fc95e5c34bb9832dc85d43ae2652e7c8f2cd2430a67547ac6aacfe4a8fada9d9c0a801bb83735dbe5204c2d8e8b08466c10aaf0cb6d23b9d70d7fc28154563b7396d55399aced4020492bcd72c4ac8569b0ae32f28cf74832b40de244eeac3bc6ec5189ff65ec3d9ae2eebc0112661b0f27fe356acce3db0197755a85e8b22829ceeba6c4a6eea105246bc43119b0ecc7133df00f112897d337040ad83370828c534d9ed9539d1b8a182276bbf39be073be4090b61ec80ee1d85ddc1d10c5049d11ae9b0e3098b64749b4335b0b891fa8fab45c9b400017b007fb05fb34f6928c2d84e7fad2c7a0ccc32fa4c6a6a8f2a3da4cfd75ad98be4b56362c1c15dda8f9b3a270f3536d5ed46ee8d938dd5f839566597ecbbb8278cab859a6c3bdb415b650de43cc76d6364e0f66f06958f9854edfc06bf3f59b70242106342abbbe825ea50c9ac1058a3678981e77562e389a30e16c154c743ecc666d12e71d26cdcc549d83e9fd35026a5fea7f0a1e96872625b7a4a7a4cfeeb2e2898683498656d45302104fc39123a78c92570722740f101a98c1d3da655ea6e1a2ef2fed2e33b593a1aa87b8a28f95e93f158995d912eea7bf57eb35ce6ff53c8644bc676b064a38c9ffe3f7f74698479adb15ec52c11654155be7f37b7be24f0d667ab7d04b6cb4271ee25c161f9ef4ca5b14fe0b75cb9595a69866697c6bb5409085bdfa275c5dba24ee1c916cd529236645a3a6a78eba89923590102292596387f7994a75baf29e382e7044a80e8ecdaa6e3a3e846f832be4c568ef9689283f349f473b4734f48b0c7b250e794442f7f1181a8249005927e0d48b69e4dc1516fb28ef34bea6e272540c50baed06ddad1a98d286670ea2623e2d474c4f03baae15a002190bb50f0a971d0f1b362d4ae61721a9ff84b407412dffa432203cf0157ce020ec4c29bbc3ec9f4dc23b27c380741c90fbcc75ffc0c071015608863ff2af3495b49f86d54526783338d292113f6c02b4b44e2d38a0a501150a4a777e7ddc8addaa84507dd24a790ea342fcc3f3d4eb689ee4a03970483e3dea1db6796e20d9b2cb8b8def5f76827b6f8f2ae3cc87178f911bb72eb817949743a1e812e7ade48a3bc0a0c8fad3b159dbfc9c32541bcd1ec6964ed3aae153ecf9ef09a027ab9e4ca2153d56de1c1e750cd80a6e2e0a2a32ae7c2c6402bbfca54a3b929037cba25ebb50270a3065f213cc257ee3e5e10bdf4f012210caa29eaccae850c68ea5ea874486bfae7a7e1a652e6826d01760d25a475add2d46acf0ed019bd547950387f3dc19459607ff9117f282bd609dd910f54223581c103fa7cfbf9859cf8760206c3c7247ac4d3fa66c63aa2ec0e3b4fe89f66d6567eccba9e15c0e3e5332dfb94835fa3f42b83252bfe83e75457c46054714cc792436c0cd95c48254b75eec21899d3829ed58878acfb1b33387cd20bb1bcab6f938574eb35e7c596b709c64d933d30c89e50947b25fe6db6c0941ebd0dc85751e5aa7a9f5d61c5286f70bbffee2e4f25133b8eb9e38b25e4d1aa30e4de21ad6a9fb6f1c076ea78f5ec88ff771aab12d603f7aa870dd775727080da6d5110ec4c060dae1e0d391d2764f9ac3a56136371b86eb36d05f8257f39c4c2a5bd4b974deb366e33b8e4f5891823ad72e61b1ba733290d2bf8e2b5942f22ef9615defffc6d0247cf5b4e7c30aa4231bf59ddc4e4bf946320443c99365a58f642a0312644bbbedf12f6a8176835b08398ad0fbc23e2527f6788aa99156256107f6441dcb90a6abb0710894a4335555f56d11f8447b5dd53c3a5d57ab7407bd349e26265bae433912edb015537a8b79819f210708322e15216e719bf9d699b1c70ae4001fd351eba62a2a0561816abe9dfdebf82af351c03613304c2545f81c0a4fdc5c4c05f333252772b85225cd9b7b116db3376bff20b3fcd6c922942a2325d0ceaf359c284e0eabdf2642f20cfd0cb4b996f3409d0bd18436e56abaf83eb3d635ee5e556a922ce4c18624961c4399a0652aade687602a34291456c1cd95f2537614b2bcd2d33f88765764e5ad68767cc69b9a2401b38f50128a3aa7b3963b2c9657487decdfdd5336da988e962c2c4c56d5377109b598e19f674db66c4d907c3efe70cad1699417a1297405f90b4810f08737a0a07d7bf15ef7ffa3de562065709f3043c5be78911b991974088956f8326d33120ffc11f6290b4754350901041eafc77643bba7836d0822f71cc6218e02bffbd0dfca3e4c313ee8b5a63dee7234d54e0c177635cb9c7b76576194a9c3bed274288829a24e206312a78e47a74a8de2e3d5784c33a59582a693413c77ec94712bb640acd7195bec88980ea9fb1599d5f9015e8f5792368126ddf169fd23eedf7d31384329a3036013fc948918d58aa4c5597a78d5271015e34adec31b0496a4090815825ff6b108590c40d6806d6b92600e2dbf6617afb56a9206cd619ba819e4fce3c3cae419d705c4aea17a30d6cb6bd97834817257403d65faa662e4c4effd9117efa15d60466250a1c509f5e391ca25eddc7e0e84ac05c8ee1e0367dbdaddf7dbb7da8805505051ec24bc15b1a3494571f756b4b4161b835ab65e762d9b7e739552ee4002d69e69092540c0564a71e290678c7880610d3c3c2a618e58d393a3467c06942c40d18503a5736a6c1b8834dedda43214211d47a315f7e1f7d4914f0f3dab2851c844d9f347230dbb129c072d26c3f3a2961765680a7e400651b64fb0451afaa72beefed2e7242453060d0bcdf87355dbb45d80fe0ae92f3a14070936bb2c8232d2b66db8c0cf618a3dd23dbf84c6e6957b0586485eb35f74ccd569c314c491f49614431cb458dfffd9e8e2710304349fedaf9b4ab7e36fc90362492a4cc2956991640a54bb28a533799cc6841fe6e3c27674a5863950101253edcf4b7a63f1cfea11b9c77f75205b9b8f2f5c2e197fb34544832f22ac6049c47ab6f7135bcae0b72e81922635417656794e178dc80497df303fe25574ebf715bbe30505aa61c0254d2f899219b38f4a091394b5e505355e6ec7a4322eae33dfbb6c43a8d5d49ae9b560424cb8f1118784d676f07f31bd87c903a1e49e3302e54a09925d4b3414b1294c40864ebdb6e111277f075589040d4ceb43873d0b9c7230ec469f1e27dbc62c674f7116c0365dc1da05a90b388c9a230876ba673dac8583208febdf314d9a10e2c0a516416f43def6d0e7c14ef96a9f1011a841680be3ee385fbba629cce8bcde1d389ce290ac3ac06f9ba2d5a089978a500bf6b8f0a56644b9ac73b34de53037e0ae91717d5ade04b2346d8b51e049aeead60b5d9b370ad2ac5163aca7e4dd83763d8b11050593ecfaebf34a038af0b384d8dec6a3d825816bed5fcdb625b32c3a35eebc6b3b290a2cf4f2c4ec3b4cfff55259180244434cb160d62a1efb0781d0c7528da1fa2ab7e955beca97515f0982c9f98f2d0f9856aa83e66a0d93c6d61d97dd03a74786c3c6c98a986d8f7c1790f387806c6562ca62cf63f2eba0db6eda6ff10c21badcbc1015bc3b405f3cbd6bce8d6f860dc2d9e697da978a7290f1f195357224b85eb03f70ed69b0d14f87f3783819b14f7a147eda1cb06bff31ed44259632ef94114e0aaeff80d307bea058aa6ba8bc96c04854c6c182d0a8265dece6f71fbd6123d530c63d74d1a1243351d13edda801fdf9df4f42c0da4830a801b42cb8f4ee24fe6f06b6f44c0110e592d7129e1a914f738396b002e8216107aa81d70dc97a9f942456a685a05c6b2d73d1c111aca7ffa72f16e187af20c983635fcfbd9e250c0562b11a5430b4694398b914bdef8a6f4f9afc32019b20a85317fbba6edbb05803a4011cbd8247827cee00d97ae0b248a458d4c66dbc302d799412e2e26b844bc05892d7605707295c918d093c5430bc7c6a16cbf3d6bbce258f62844bf84a79e8f9af325f593d7a78d8662c7824fd0456f4263dcf37b2757bcf43ee63182bc39f2893a017d27f11bf74d02ab044442915e160d988f2a3f967f65af2a4b8d69dcaeaedd9c37b04e196cf7f2da289aeae93b59964f62749f2e42e21ac1eb153f682e21d1651a5160aab993847b078b65976428fc0a199adb6901c36d3fa5363cadecef25bae48c28d07448ab261ecbdbc861359a3fbc098fa321f4465241b64328c055df8ca5ebdd003f2d627a55e8deb4429e36173a76c46651f4597127dc3291423f60111cede2b1ebd981e83d7d43e374664d8799de493edc26748c15e991292943097a1f61613dc0f57ebd202717eaa43dffe4e7eff2b7704b91f469730cd806d70a31da34010525c79b4595ab5ab5279a88d085a54d0404606dba5fee60b0e1bfd0bba2676a61fa11260f6a012507efb8661e305e7917411718af5c33574af7ca11be60a6ece17f66a86a4ce207dd15b2b9a92fd25c3cc4087c02f0a19c4cbdf30a3c3fed4a6892ff05253779dcd16a1581ead33829d431222b916b8d71ecb4ebfe35c85347a979bdb7d869453374d65856b5ef523cf833ece0047012ce66d8547c9ac298d6ed719ef60e0115d1b63433b19de9c0cb8fcab9f680ba573bb90dde5d9ea00fca4adb123604cf154ce31cfc03eea3cdf0649bad2b94c00aa2f30c1325e9fa4cd717afac31d2066dbe79d0f787aa1f64936d63072595711cd32c1c9b856202c9b301fbd54d1467d840153b797513da5f611f0635d43866230682c810a6e148cab7b07c8b45852e14df94afa3897efd640eccd02352061fb473e852f8013d90852e82b9d1719b5498f0fc2aa2cf2f971a56d578907c40846dad2b2b4729a44362631ba2de4c69d18affcf64c3e1a20f901e83ce2e325616f04fd85b24654ebebbcf9f6b15e975f39adbad591710db1a6db4761342761558b1067e4be4d8ab572f55b3fead399b5f893c790cef23e2235503cf8c5c1be85ea748653a08c35837456a1097784273b28f5d3a3c552e0f2506c8b18f49379d792e45d3bb5cafe6265b55e847f167bbd3c786f04b18517c27e8beabf0c47ab7cd9f94e6583c8b911d0790bb2b07769c3abd56cb3ee8d666ac1185c928eb825d7aae232e30fc62ebb5ec0f40740a0ef20e0777d4e46eb256d1040bf2728f09e8f5970373ea6e3b4783a60cb06bb5b5b7a0ce1bcfd015e15d065e01f25a7595991cd80b84bce7842a01bb2a7a3112d66c885a27130d601f01bfbabc31cdf7ea285a2d0623a88f4d370b619255b6720355ae8b55d8e2768fc9e4f8374ce2c4bfddbde815a3675988f431102792d5b22dc01a933812717c1f3810369c25ed3edbde830b24d5b94516d2637c73c97512536ec09b6ef82c8119fd388e6331e1066973fbbf5be43e65d879659d58b70cd8069fbcabd2b3873a70c6c1d593450dda03348ddac03c8c018602744bcc73b264b3e7b47ff608ba614710e9176e39b0ceaaa5a68fa6b427b1419b29043ea083a546209886f6c4808f12fdb16e259168e3b434ee4d956e980814f6a7301a71b84b70f9a3d48589466af2730569e7e350c78f78e9ba5c4690a6970fd4d95dd5e002da2d62e605fbb795dfd17cdebb0ef43b1b1c5048ebb8f833d67f281e6b8149162f506a3e40f65596eb1b1888bc4bf8b8a8a4330c20f8d15daa5cb5cdb3badca68b2993af0efad72ef10557c61d62634c916b757fce0a42b096c50722bc5dc86c0aa213044439f0ed6ba8a448e2fe2b32a4ef33727d356b20a959abf63eb9f269dcfe090fddf1d1a85d8e5d027cbc0bb7a895ea40fab30a62430c9f25a13baaaba51cc161fb06efd238912228580219985f8beaa9d9abe47e1603b7d12b6308ff97aeee7b4f3b1eabf4b5a151e5989bf5845f9ddd3c6af31c9cbedf0a9a72c2cfad0c3344b30264d351558c13236e11495be9d4104537a373d1728107ea2593c7543bc2b290664ed73d38847e688abd5a72d5af7cf0a949ae707a362682a7c9adb231066c09c162dfd7cb5c143369648d00a467bd10dbc7ccfa08f5a7f610bf507526a3f0dd7836ac907bcc72fb909fe88192d5ae3c493cffbcfa2bcd3a0412c96319958a92d32e30834be5f3a3e5f4ade56d25aed06d297d7de1a27e76621f33e31c556665137f15ec22f538a60b04b17e9793d8eecf2f2f044a42c2dd5a4094683399e59cad0c97aee9f45ff544736d6bc7acc24080a986e9ad565aac2aef69df3f0e47e2068ea0fef311e00273b4452a0fbb1d18423da82d469acf2257becad3b20f2bbae2a6d74666b1d39dab159b44020af7440b37739de7dc3760b8b0220ed02022c45d224eb48ce801c6a29aa07780f15a10431975c9a603c6176507c0606757d6924d889be8bb30e14cc08613e8879f7d7291522afc6c0328b9a1c0687bbbd15cf49a637ed23656b79da488b581eed9f48258cb648e16867f7b77e61ae8f91761c0741d0918327151f25c8e58f795153a04e6f89e6d4801b72b4557f3521a324b5f9377351474c6b3da2f6afbb52c0cfbe9bf727d669c6a5e8f47be550c32d622c9ae3064b6fd1eb9008782707c7de39de3d2e9821ea74ad9cb011e02d32864991bb89e81e592ec65bb9a2a9b91604e1e8bd73c3111c47ba24d79bab0322d92778f6e498af6fd201815387cc4272fd7b93824cb22ed7537478469f2180f125a1a8e37edd25570e4f86b37d4eac08474f64963e4352ed00a5b9561d30a64f10e5972603a04fa347e704655fe8564eb66079114f813f018e2fba5d8e98ee72f3f4e67c961973c6e3c25d1407c11ed8345a2d92cf034312f5858b8638308a15f76861d8b677fb37fae816e9e8d72fda0b5c772e753373acf1d6af45d7842ad83b7cae6ccfd1bbde5a8ff9c8c531e16781c8c6e740bf4c19f8f339b57b07fb4c8a1228fcab027820325272386e85db87ba621f613a4e9b8a38e1d48e2196bcb79971d6a319d08fc384b48eca3b8934314df07884badb4167e22d4473bb2d46bb1fd682022af40e77d99106576c8267c4e9c8cb7d7b6862f583da0ca44d3033ad98645c21b4a4f7aeca606466b5b1e8a68c5bcbdcd38871ceaf037b3a4c1ac9becb5e25697fdca1712eee600b88dc8827a857eb7b6bec9056e81034940056c41900c7b06dc002d765140392bfdc9470a32fb1208274ca021fad64b666f17b28b5e54f9c1c606d62a39b30a6538025fc478ae56a8ca97e856bd1df8564177fa3c6f633d886ecf59da47c39f1fc0a2ae1d7652abdb1c706d6a5347958bf629c163ad6c7f9b33f22d5abcfd9a46aab6136cfd2fdeed40220a44e91ed3b6fec6a281ac906c129586d82d0c87bf0a2e86fb4c5cf2c912c4e0a604893979d5c0a891b7039a80b62e095ee071d37173d02d9dbe4f1e407c2f4387ac36ad34edc07ea18549bc399d55f04431f9904dad87b5f5704e98a9ab3c43969a7e0a1c2c17cdd3b4ce417b351922398a32aef99ccc8e5d506eeab8deb4025db19b62ec093abf8d55586f07b5d3dcf5e8ed84665ab31a86b1d06460d5328eec8552f233446f7b431b805574590e6560650a3a6a29157a8a2f694c419692488bf158068b3d802c88a1326e22e0d0f632fd6dcfdf351207a213949cc8cd44a4e73f337f098285a1f62c3faa22e4ca341bd82fcf1a5752dcc2e6b2fae6084663348e513f49532d908dcd0d7780e03e9863d52afe13a2376bb160728fc2ddb655495bc77d96398fad6301b9e6b3e881efc596404a485cb811adce0c7ba4ca1c4c95d5ae30e38d51a0202aea93c7477a007e47c52f7066bf201b660acdaef75283bc21798277121f9a3570f7e8876aaaa99c6ad969750c7d88c515e67ff3f4e734af7286c2bcd205235ac90308799133ab6c708f250ca187b275d0048cee82f40dde0491b7984611cbb73997866546ad2188b1728a232380677f12fbdd76deab05fb87ddcaff08b8c78f24593ddde2deeef4270d8ee4bf2fef6518c900d69b04ae9c62bcebc9aa60445c38252bde0db89f1e1fbc566749c687e32664573a32c90a62ab1faf5ee40adc5348256646e8a18629d3d4dbef971039bb9c8b2c7eda57a98da5f6d6260ec6e6021815fce6f22ef9256cf369e2bf7a5e27e112dacb25d78c9bdea7631b9e53b723004f73f2019059cbf78c54144a1a1225d4df6b7829ee45beb683bb3538d52fcc83ebdad5fcae7ab90cb35192884c897d74633c046842386118e6d7aac1cf0d28e792254fb3a278cfaaa284270a2f03c86e388f91a8c16426f3d16f2ebe4207df963d8416cd6faec174fba5f5a07d906fecd5ec4c96e43ef9c53d118f615a73dc337fe1d0238eb945e5916cc4460c3e2e7aed0b013e340ba2005d8df42f1ad0d98ef82998feb4d0907f99983f6136eaf9bf984b8e95823e06a6fb06978de5db1dafa6c90734498e4431cf852e74f4e4387a878ae6a4ae96330c00d862c03b87a52aa4809cfef67c9b246f212b0c8c24fe13f2c8c21489824e51406c16a4af34e41b64b9d97a1b9e4a63d0ad5d07cc78c63de0dc16156313d0cadd355ef3883bd00eb2536372ffc4e366f1ed142f9b7ce38aa54b7dd78a4b5531634da9da1d872980df525115986fcd5eb02dcf3bd0b0e887da0b7d66613784cf59cd008dd0191ad47549b1c0af9a6dc73cbd8c7fa1d206ae68072fab60b24511feedae1c335a9ce6fdc13cb62f7b223a77d21a534f96cca72821ab3a048bdfbb157bfb1270319542fbaf4afefc39645d77b1f71a8437fa8a85170582ed0dbf1304b8b9185cd2e737e3477b7941abc4a02249fc9f17cae2d7cf771b0a0cff726a0cce49c9de7662a865ecfe5f62400edf481429937a3c8dff056f7f17e505b3954a5e157956add62d2ad92b18992b66379eb1e19d236d98676088f2efc0a5d30b663cf6028771955129e10feb2157e05d27555a76da87e7ec5ff47682b070c033172535ff4137a7cc4be091eff57faa630420ace91bbac6b6194383ccc7800d18568fcd77a25f9f960dc2800eec0fcb44d33f3d0bf217c165d2bab171c5e045e1289d30f7bbcfbd26d6118965893ca29cd42316a63a00dbc24fe8ca9aedbf494db87cffb7c13e48336df201d3d9fb821f397f8beff56f05911179857db397c9f79330bdafddbd26f5c0aa0d05dbec3f6e18718a12bda65434bf936a95c9474a4ab2c6464d855d33b21322235eeffce71b7a275cdf22ce51b49adeae356e74c58ec1a3c38777fe51bb1d76e1695076f22c933a97cec24b5d8834c03e7d7864fd924b59d6c9418cd525703d175b553f614b85a0b3f4915142df7872728e594ac9b9d7e0dfe7706501fc875c50ddfb17dea10209c1f605cc72d136aa20f4889e726eeeb4536b8dfdd9e68e8012690a50797a7dd4e66b6d76a947cd6f89df39c0c98947579256906d4a940eafa745fa4d1e06972929cfcae0c845afe676501e2ea0e517bb85f2e1509b0f26119a4317f6d5cbe4304594ea47cef3d63c2e2e570d7a36cfa834a6e2be4e85566ad624f4fa10975a4ad747a6596edef4fe81db53f05377e8b435ed6a2bfdcd5c30ff34c08d5f515f36a4f413f2b4fea4c95d65b4515ed4819173c885ff5af52dd8f8f39aeda7cd71ff221eb320ad1db3b21087b7067d6814868ca7732fbe9747c797285c237fd83cefd0927abbcdd2b2c839ea70eb200e9d37c4494cd7651a36aee4abde5a9ac1ad84c552b4dbc1089d08afcd9ea2e56c8a77fdaafd0aa0cb914c34250013873a4609acc54eecd871d735317b559ed5afb593092bceffddc411abee6897ef5a2746888798fb4b9f38f16c6b41a593d047791a27f288daa4afe5be4c81cc5f4daf5b691db7927a3647bb043ec363e0e37350cb4eb547bcf221001ef93e8e042925b347709965a93b11398747e6d8175e3e3138c06efb67c26a560b97aa9a9af83b2b3e305ff289738b021f6590c9112fd77d89d1438795931ab0ac541eef555039e7271cfffb32e640582b077aa4dd4ced84a3900a3a3de8d744d350f7ba18cd6f9cd7d388616fb43f977aeec14a1991a128b4ac219900148e082fdd86837dfe993b898a07503f1dd43764653d095d03fe1b876e650d7b4ca07288196e56532f9e04633a5499d723e14d2ee313a9413d7a824563b89cf96f7e4234eb9617fc674d80fa63bd4345996fd684109eaea90f497b71827ff9ef56aa57fa5ed3b104875a1fe20e090c2f7b9cb0019aefe400172199f01ce00f2ef7176d07a927da507a24d01442310cb9e3032a2b423ff7fa01c78706375b8b5b900290ca57ca0dbc9ccad9756377d4fb9917799d868e25b55f4dd83e20b3152c85d24558308b4e84a31cfc6c1ce00d4725e87f4670fe39ec538975525503b6eebf71e2534be23ca5071261075dfb954d43d5dffe9aa4cfe00e171736a794f82910519bd0ea43c2af270afc658a638f7a036b57708f14da6cc14648701b08fac44d35f15c2b0e4d579069bdb655eb640ab5291e0627e75343e03f0e4d024cfb7d6d8ed62b2bae14fd41ba57a328d2cce1f6f9fb2115b6bc19cc6bd928f69bc4e4cbf991fada3859a341d36e38cc8c5f97a512fd82722860baa0ccc094f0fba4591795374ea23c34483b6032a632eecbd709ce31041dcb981f0fdbc1ee9e49a0e16bb35c84182eacd580cb2a6f9353e27852bb5cbd8c8b5a77b1c030ab7380420a662150711ba4f5a9895f18d8b77024fcfb2a9c9ef67cb79813be12b66c95458ea3f5bdceb7401a02a16dcbc0d6c82ee492abb1e7f98c574929283df8d260f8bd666ef1c17daf6dd2b0849165ca885d76e4a1d1fef7cb6ae31fd243e354a6101d6712cbc7dea8bafa7238c5fdb5e4d7610ec66163e946480083c2966a4a6258b742309d07e4cbb22262074b41a73c14825b59cac4f0f5527c33b65d919a001a4c991043449ed88b56ef23024d5e96cf0c37986b37293b06295b4c647b20df16a2c754d5f5213ac982e08846e2db6cf72742f810ce7a9b8eb7cd66c496b47a4487907766181988ab8eb7dbdc28a456553b4b36f68e1fe71eaaf8b87e5632f0af2a8387bfe038e3fdcfb42aebbea3b8fff9792eb2129adbf44a0fe221a88d018ac1403a078086d665b787e4dbbc28e15a4f25552f87e1e81805d6b69dc5bc7823903ae4c2b86134abb5488fa1bfa65fe9c22e339270c145d7b09fa6bd3fddcca5d036870021758ce4854f5b0f6ca11040cd012f1d18284110b860b15c3cda5ff8c531a9f043f933b5a53575d8692bbc92ae40b8de2e2d0a21301e1a7fb5aae52fff2cae7cd5031a1073ef92c271e68f7d5380ea9ce0f0a81a385e370c59b4bee744ce0be78a445da60c94fec818e26b516e4111e7c2b59874d0dbb77754dc18b83287989aafbd2b212cc225a35df1f9a820ce1f2bb42d8950f9f8681fdcc392413dd763b95b1fa6a9ba9b3ca285b244e8cad6339b1ac56b1b7e3076ebafdb3951800c2e2bdf2b184ce9611fbba7ca98a3deeef96c8827ed8aa7d65e5d3daebd63a2bb03f2e3d4c04e500264da6a63e7fb47c024607133df8f44ec32406b1f2da19f6e3deed6580bcc1b6d5d174be463b094d9a18bf514ae8ffefe397eca3da222f86cc518a1a5dcfb2a54e3e616f95613405d2a84a227e129df7eca527c79161099a93b07de4d4250b333e4cad51b754faa8e64da1e269e24fe8dd1f7673def4d2861e6284e4f9e3edc0c15eb0637b11c7d49dcb82f7f8f362fc1c9808435d9ee340c06c746383991026ad61555e8759ebc12af5b7879a5dcbd2778e13ae441fd3132b909d0e563787341c4a97b0fa0ead999e49b50be9f50ad2b8edb7c7862f0031bb6a2e62fa093d77627b2dd77de0baee79bb24d39db268f6fd39ebe663c62d809852bb648e76335a57613618e1eb7a6d0e8d98f79eddbe36c2260c4e315f3c3c64a72f680cc84ec7c7f5ed0ad9638490ad2ec0ebb430adcf5de125d91959e16adfe0ddd08917293cf1272b0c6ec2590878766b3ae99a36228d4818c926cb5c55d1c7883fbc1d568412fdafd1c3edb6885aa2602a0d6391792e3da5955cc1a47414c8b0dbb42cb9f3fb75189a92b5c0aad5d1e0224eb892aa79a54f85bbbf7e572eb453f4ddcdd11c16f6af0eeb8e48bba419963eeda2b751159aa0e41222a8b239b475d8d055ad49773dff86df8366a1b39ebf6f0fb78acddd98dd909e0c5310b4fc2ed290b421bcf301cc8af2fbe0111da4e197fbfcb4ecb87907e4efac00146a8082c642841302feecfbdf03bc93f058d2e0d5f0caeffdbc5089132d7aef42a94a8c7c2076d01db0f5fee02999c97ebb8fec39d3e93cf038536271e659c028ddedb830855985612ea6edf8808384d381e4abf52a665842809c59a37d9f12c2092f9ac2420d95d76b4f5e0ae0dfb98530bed013c95fea9195781f4e4a7d31881b6f61463b82a8ee8ed220df25694ea5710998a67c73086f64cb4c4ea506cee135911db0d652ab505e464ada00ee1610c992141e834c1823faba83d3f179413428d7f7b034ba0e653448de8d4abb035ca1c441f4ef4aba2ccea6a3129bb62237fb6f4ff46e54b43989564f11fac2885121e574509668b23c614f84ff743c45d09b7b1481cb971e949c8271ae3d7b9203ce7d7a381a072e60e0a9fb02b96ad25445ee7b6436dce25ead9a93490fde736b2719d889681f1e890f31d5dbcf7e7419a610c79f7a8e5dcda8402d9fbb6c82819d1b2ca67291649a2eac83bd09694f4168e93c6de61da221dfb17db4312d37068454829f41ca32a783b790f68f901e953f88932b2f12211e3a6b1d18f93bbceeadca962d40847ed3c35b6f6b6085b8781f53d81680fc2b9a86c54b725013bff9760f3dbf4c46c8ae8c800c42d475de87f8780880f9ad81b4d10a5adf9e5ac9f15f0da0f081ce52edd44b1beb982e9d67d3625e14c8d313c001bd41960d51afb92c74cea640000ef8442483c12e5d36d269a0884f0395e082e247cf87622bc6289b3d8dbfb7d7b196b6b77f8fc11e16230aa942d6c781a2f5d865bb9baf586f9f69717939d4e0947793877612808f6dcc95ea54bcaa60b977c9e685ad7e2bc9c5d6c2f1ea95abf2ec1d50f07c7c4895c9c3043efa8c4b45bb7ffb2fa312f0638fc663699e6e873d36e89d3cedb145b29fe7494400519bdd3d5dbf703f9e617a9ed7e5a753057c021a2b79501967b008cf6b29acec81289627da6cda61c565af369f4b618b379a7c55f0532bc66942306cc615702b099ea118afd45b577ade671737237dc7a4c6bcfe230ffcb754b223553acda25195930044eac68562dde61743c882a3fd8cf390ee2525a5d5b33c9c605acff2deba892ef3aced5179058b8419301977c6b89f31f8408e3c4efe2e1daa8b3a310a738c994fb427e47ebde3c7934620584796f5515d41cc27d1052f292185ceca74bf3ef2c220aac87c2235e093a678b16435936666d701ffdb34547ff848893e3e51341824491a8dea52c017881b57ff47c0feaaf95c5b1d2ce3e6317a626f73fd48d2d42a1b85207eff3936cb2b838cb164a668de6a612f62470b86a75076b5d6abee5ca3ad070770afa458e60ca06d03e89f44c23940bc6ef4f2f40129fdacd4ddfda329f3fc4a62e42e46932b83dd54f1dafdec0a26175963c202ee77ab1d46ef1176920603eb397183208db807e7c932553b50de3b83d31c36f8258d620277c8218b687557a17589686ce0ad0c1a9f27f06448411fd564e9ab415aafe46f5cea89f024173d2806e145543addbe3253d33453c8ef0b02db5ea8d120e03ac9369814c5333bc64d120183c5f44607e57586f4252876d3ba81924768b1c9c543deb9468ae1688771383556788dafc7dfac5400c05d71906eb5534608f95f54b098edb5ee93d860cc82b9825fdf117f89ff33c96cf4f726b1992665d7d01cbf9bc5a9eba2f7e6ce486d2ced97588668382c3d69514ff7f325658aa8ea2eb8cca8606c7ae5092f8c2940e82d7b8d84875c4202f8862a98acfac48c1887b454a9f524d89161e0eadec2484c16463413367781030efa2799ae96a3ad71c0c4394197cbec0a0533b00af1af4149deb0860b90ef36fd4858c4473063302ee1dd3a68b6464d689b6708436e793278c844eb1c39456ca1f4d72068dc30c94d3e1519eaa404e582995f64937d6df605af84efca15e5cf4b0be57e59c5347aef6fdca3e13297727e57a12903eb73c109058be8c1b4c63adcae4555d2317b49968c8c36d862ae4a8722ac27c87d8923b7c538b3ee1289adf396b862dd4ed17d09a6b0d74756d107c4026eac0abecf5eeec239ff4008e1a5619f71b5c0b1ddf09cc0550f802520f5370a45bc0b6069a86a1d63e88360c9c73ddb3355145edb86659f7e2dcea5f6bdd95d3bff1103943354e2310b275bcfd0f212bb1708aad7be0fbe96bc0afad8fd5238272fb8081fb66f19daa0232a68f0c0655b8a213f90d08b0f80ef7d6e80badcdfe987b66ace996291e25c9d57790ae6b849a7279879327642f8bff3d2d1c4d8f6aca10dd812bf56fc6c33d17a815d7f47ba5f5a9b6ddfb4841228ca27c99f59d90b760ab3d64259fc387407b76fc2f8761e4b39b4bab19171b28a7c32faab312e57bd5f2fb1c32175721c3963b71b5a823058a344c65cd79264fd132eada93e64325de0cdb413ad342ff7e7af7e2062326ee9235b2c61fc35e0af93e4051721396961336a56c1bf855b432865cb1cc3161e640d54675cd51ff9fdb79d29a8abef4d693a8215d16d0c22dddc2566b62f9e24f616ed4655436181919ec82951129be000eaab557e61ecbf772928971506cb230517522cf790ee293d55e7c3a23a0038923657bbb272dce161ee3a43d88c9f9a3cb4d67ed96c39d426aea3ed729d42285ecc3b951e9260a74093c9c1460e9f73d85f69a5df2814d6dd7e2412d13e00d26257659776b10db4e7f48b8e6d2e830231a39b6f3cc3217e76acc9f636c470bf79bf53890a3164e20290f75bacc22ea78ea2e87b89842146a1b1f92939418f1d90c8c67d1ed63d0217891be45be254b75120d85f7b2a0534bf0c4b850f54d61183153a7277b20773c13e44b045ffde224f741434cfa0114214058225598bf643273b4f03c5ac3a3d12d7e0286ad666cdc99d87a862bed45684f4859b24178810a5c169386fd88a9cce432ed59fb9e00f017090de4fa435b9ebcf105944c90accb5590092600f54193c8c81091158fae12b1a5b219a90daa7e0b67184bcd225d07ef0de79e83c52732710522b0b397fb32fe55317f326f5b65c9126c029966f8c0c7a5e08b1fc03720bddf7758eeafec4d34660416f03b622abc0cbe38a63f4cfffdb05d4d5bca6b08c7d9b0a48641c157339ea1899084a9f64ea9a0ce41de068a79edc235dfdc51918648cdb2d5e7151d755cae452f1e0cbbfec0f4f90ce12d74faab57a43578da9924e01a5fee5935da8f47a22c22e56918641bf03345ca606b6141a6a81c9698e4448e3e8bee36f5846573f3a86b155da9f85a32c6ab80056a71df0bfc4c8283ed2accc40dd5689a0a1468f2d5ba06923d17b6413bd38fd8f4d73daf1812b7126a813df1e1347bcb9e67c80fe7fc8aead497f6a5c0dfbb124cb72b69ec78590174f1faa003732125987712dd9dafc3207552fa7885a2e8798954ae50e7fc76b33f9a0e443e02e8e9f6625fa2f2ebbf48b15995d9eb7c7a51a199ea68465cb5e7e75dfa4a4ac0ef79f501ac13a19a153a66d45a39ba877305b87b38b5e402f14ddfeab6af898708c4d15b5652ba69784a9b4523311774c31bd314d6010d86fbcf6993fc6fe8f01c4700faf43bf9f2cccaff364725a39c0d461ee13ded02979683184a15eb9cc0513c4cd1444c678be3e0a67bf93c59e37ef911b8a856cb4672fd4fd88646a5a2dc20b7734536dfd551d1abb0339f077d7e9db3d7660974ff3e9df06a2717d7bc99b91d9bb98779a9a0879f4e013241decde62f408efbf4eec25446069f78d1597d0757ad3bbc4d476a20f2ec5f069b7c4687e23574d8e03bdb8d3f811147fba06e04919cd9b61fed534854d00037dc6a54ff2d89e31bc942abb58724da95ab63e114e36a3fd4aecc72cf65370eae05d08d53327eff29c5994249a1ac597aa00c5cedfb7a5396bcd22bd6867a703a228c8e8e5d9c17c610216449bc2ba6d96de799451aba4a7b16098bd67b64a5528f91ed18da710873974c241cd0c35d96b9f3217ffcfd7baf645912424f4535588c993a966f281abee70d87308d32958a620a31f9cada52e75c35cf1857d49796271e8bb08aaae6647a2cf70fc77a6dd2af5f646ac4811edf3bb537a836cf9f5564518435389e12456cb59e662876b934da3a4888a897924ca3209831c0705b0c855c92d8cc28b50cf0be7a2ff86abd4d4c0746c15c0bae75a05b8fbf687128980339f24055152ad8a5192f57593740abcaf3fb85415f9dfa73c76e4039c01189685a9ce6d57f56204bee0554c6ae1599cb0e8f93c1a12f02504e0e6d17db9e9c5998fed13f006afc0e857fe02a9a758333c3dcb45c04b2c65bf7870107fc42d4725d1aaddcee1b4ce1917bbbfa5e0b9fe3d138d158204c20e673325d2ebbfbbecf93f85d942dffd6dfeaacad992807ac40835b89a4053f15c7222469e318aed626704fbcff870c337a82157e1f433d8e1291ceb96a2304f2bea425a57c9b901009815e617b4ab3f674b2ccb75c0d955d1b25850881ecccc34a53c7e56350e99a69f40026e9cfdd626d32bab6ddb0f35446a05fa9b8ed85a423f63732b36a45d63d183af3a379225d9ab01374e988e325a3175d5d4307f95d17dbbcba6a6b702666aaf9e3df57214d282433377542e115d61bb1343a58f7962df99dd7ae9fb843d4972a09a8846565678a906fbf09becbca3e15057a0c788ba615608dd4ee7f31ec2754e69bac4ce495b5176194f1b4a49dd9c23e2b30187ed8cfa20404d868496a3fc79ed0e037ce56c981f1cb0395c875e78e8d20cc91eeace5d8d41e6eee96afefe69acf95ef68a6e30ac92835faca1fe222634c5bcee100649c9961430b760c9879b659a5ba4a73ee3b7442e6eb6b82f246dc4fcbc37aec1fc7ee48891f5d9064f0efa862204ad1b1541a1d4e700415012346202cb84a2b0a584b697cacb724bf432219aedb0cd7b118f72aaf1941b3f81463ddd1f80c9dafbe7fef79bf8eef3530987ae1b1c03fe1193b5618f9fc24f4424cd39fbd035101a4f562b8c010e6fc5e239de526914e7ac5a9dcdcc6e0672276d572885e0d398d8ee7f69f7e3755b0bfddc9d773401e03aea3604c04add61cc70fd090b75ee3e27eb6399d6be9401e85a002936a2ae04c933327393e528dfcd912ac136df2b19c2d2ba4ee296216b1433d250f430964ff14e12d4190a8ac0d9e956077620cf814da4f1bc4c335f8dd303556aa7957fc1ed8ecefa1d81b199e247f747ab24dba1fd4793fc380b838ab6404df4be09bf45e94a174ba392d812c7c9621a6223b5d3dfccf92897004ce84f18af813bd72014021f9bd166a8b25a9cc1eb6704a7b34c6828c178d0a3c52f8c27428c161776c9365acdc6536c2d2529946c8fca6da8a174027f7a7cfc8c9e2f8109d1348e97670b327ab0b5e76031ab1bfe2881077ba887ed260d5d76cbbf7b0b907800841e9fad28c6895be612fa56747074d6ad987cc918dc2a3536972570b38e79fd8d0b63563adcfbaa05ed329979d46853aa638b797e1649308da29b156b8b7a7da168a29b3b63b8591d6f478ff346a2ace7924369e4776583aa2cee298e0e2a82d5e2d136647516ffaadc6856702c770416e41d9c5b970d31fb18d661bbb458143dd42670b7d8625a70ed1e722f4eebf4b4157cb883d632ee04e120c73a4235e928ec115bac76672b031a1d18f4f32aff42cdec1990de58c54f6b89524897407fbbf8dc3f6813e5dbf9c6a55ef48a2c3041ca6e4ba84cd22b73e25bc20672a118d61931a2847fd6b99d69dbf03e19252bbc29bc0228e890f2bc6fbf2fbbb65d711f34e38116cf1c1de658839bd5b5a8bde5d91d583b08384c14edf6e74ba69f1a921910d48ae46296d45fd8e7256710cc783c53a7772a208547910a2bd49a30490c119b4f0573267e7ffe7961e9a528ac114d7c362634f0d339ee56fd22a89aa92ce95b1a43713a5114adaf68b9ebbb782edc0e9691291669d434e4442a38c5912026456d29931aeb6c1f6cf0c003a22e86f8abd3ca77b8baed0900ef863d9b228a0caecb8d695ca6f7d0013de20f85d216b7405df2f309e2e5e35049822721456c782695ed378260c92ce6595cd8fde0a01c6c3e6c93c6df047e7a35c7480fa0043db2e4549d33545f8eaf21aedb58b0dd7aaf39dde743d6b32394a896e6732427ae0dfcc614f4d9345abbb0f718fb895c82dff763a84fbe04b3d88ff2f842021d57355f3aef55525d8a34b1d4769e095e060c648a640d01b7021121b69d6163ae59c884e7dd551d588c2392551d42659609c007c9e47094f4c207c3facff65b18454341145d7790a0e3d74c6a622ca2162431d0d7afb455250b8de308fba3ffe66bd0fac54faeee16ad563d88a61273375808c604913f6027c9ce04499890e5a89e5f8054dfdeac249aa6a7dbd4b79aedd74a9dd4ba4bdf25db0bc3d3c34db68f3f4004eab9cf74fb47829e73cbf991754a56cad50ef89bc00ca9311c9b2a3be213cdde10f145d8f9ff50d8444ce16dd5a9b0db5fcf9e53e62b89b46e87af22e7947d07b3ec76c433ed925ff9f26adb01cac51ad60e675ad48c92a2e600fdd9fe348afc3e2f7b80a8ef57f584e0e918cfe73367a5627c2a61d623c1debca5da568c004cc9a10f38ff7e58be7ccfe42b7a67e850836bc5ed74afeefd08832e94d61aaaaf89633ca757795466720c4424714fbda01f59e3c4d183edfedf23dd4b1ff1e8f9b065b086c66b0068507b7caf7323a580a12f950913292e22c0e3ff4e7d34e4aafb6c898968a140c011626b914021c796ec6150eab8cafa516354cb6150459cfafa94c0f6620c76d7c60bf616b6f5a662f0178696391976bc339bee1c6a65f06b7d50fc664604333459299a597095ca7a09fdfb25fc6181c6ceb87ef45c8343b0359dacc6b49b1bc536d9ed1b2f288b7a086c0b4f8933512855c1fe334e23152fcce8cb4e96cfe6b55d24c1fa15731dd8d48f9612d19a06ed2c84eeacd30639c579fdd09d9df3f5848fecd20c50959d4336419bcd31f242cb9537a871d4cd2ba740b07c4ef7b70f5354c43d64e0ece5d71ad58f22aac4f24c6cbbc79d463f86f732423afe27397a1b1efbd8babfae2d559d4e625d9c7a06741cb53b12e5e520e259ffb3afccc1ebc95739e1916bece289de1b77a79197427401510e99dadb9d9e586d4eb225d7486ad24ac33110f995f4e15a543daf1c3a7309aeeb06d2617bcbd4059926adfec4fb957131126b58b6b8441a1037bbd789159b39682a9f46590b8aaf45d71f231bc0391ab3be87ddf5cf1393b55b08dfb0772e5726c49c71f958a00d7b7dfd456fca9aa24fdde02b70852a2d5e1c6536629c26e8313b8f4e8ca5dd741cbbaf20931aeed2f928f45e867f4b1992825d9df418d5d9e5bc42ca0042cfcbbb5bf8806a2093645e5dffc7ab0028fee2ad81e7a2860033311fb7bcebd2ef61ecb806bd07b54c43918ca20c751bf31fcd091bbadb5c8bc6573cdab4cd062de4104749059d779ebf43e7a086ffd6e9c0f32143e977b4422108181fc7439590c9f19108bb6cb23da49453d5639e6c3290bbca13db73a9697734a41b51905376e6c90ee6951c63b1c3c1a46767fa0cf0e4027dcc5c6958a2a0e1f81839cc9ea519fb983f78bf7a2dab51880dbe4ba0b144a4d9a7afde58646c1a1c4102a7978dcab22d48687d49c6a2d162049a3f95649a18b7672efa527c638c4f2b27ee8c110bcc7d9dfedc6b60bb2e565ccaeb3ca60fb018ea4268cd939a4b200fd89fea4a255faddd37ee09a029adc469b3ee2cd99134cbb54eadc67821338d86aa72fb31717068caaa79c91d3adeda5329118352b92871bd37d1cbad00dfe137bc85fc6a46fbb1592f01e2c5e60bedac594d907f6f2a47c3f8cd56287c1c3fce4d3214e4bbd90b453f575051430ddf35b70632378eae8be0a64737c335e725fc4468332c8c5fb27928ae4ec56948626c2e92345a620c34e5c1e9ecb3249fa83347a915ce8791cb67dedc3e9f1fa688d06e42a19db2727bb26c470497179d6a0e87f28aa2bedf7de40ad231b56711ec481186ede7bbc0178f928fe56571e2a4f890e8743696c3ded06d3d82a0812198b2451f8c298a1e8d41273e8bedaf0681fd5b4e81bae8e1c99dad9a8d982627ea457e3179807c93c0b16414b441d7b1990148899814dafeb63d668367e54d402b2cde9aad38d77c1a2acac4f9f90ddcc051a0f6e7baeb21fd05a5be86d71ea57f6cae538f1acc043bee3bb06ba0fa4efe6df2e28fd48d5c1e14ae0d7d27c6dbb0d322f9b3b2baf733f379b56f99b13ed52f043c3d19361e781ff095109d01700add46aa370f29bfc02c4551d5d150e77614b80cff4e1ee5ae530a4b39bf24e9e0ef0bc145f9492e43e98116f3a869f03fdc32564406778a4345a4d1eb40352651206824832d21a0b043c643397206cff792a3cf763d7ae69b9f894443365c1d2f4c53707f3f0d1d6558f896e2d808f2d2a048dd63957cc392b9b33fed06e65e96fb7ec02dc76a43fb55a412680a1d4cdc559797f58ee19c56e2d8a72af51ee0af88eea69a974da98b6a577e2a3f040185b6642dabb946b45635e88fce0ad8127565b73b2060ed565e2b36d6949389a8b964017983cdad37b2cc95f5297e91f4e0ab0a487183af56064c4ed35f18b73b6b1ce005214d70e54977021bd51d0fae7a0bf602ea206746d2f6814e43037605a0b6b7b2a6025abf40ad2deb5e25cf786e9509a50ad8aeadebbc4107d1abcc8babeeb09aeb0b19349a68d775e96a72f5697138d9e625c292fa88dffcfcc6f33545c44d6052e461ff056b8b16f229fd16d80d0cd99e1a940b8d6d2b9144e02edd62a0b27ef67ed04ca167a939bea884b27f0544ee5c00fa1227e3f198712d9e3be5d6d0ec285915de0b50c9f0c880ec218288f385ceab586890d6b629ab347cda009838c8e2f4f5c5375035288ecbf01790d6734ffff322f138d4498901178f58c5b348d3ebfc9603982102747a7b8db7f0f870e0583077d865f20282adcd93958ddce3dc6f354e9e55a416495ca488c0b9773bc7239bc558d39ed715d2c0a128fd236507810e5f75b62ad6a4a1d8529bfac28b5d14aa1c294d952e60014726b322386fc286b7a2e7af3009f1f038f052c58074a6bf595c70b71fbfcb1fa57c89322d544311dfe960700e358235dc9783ab2fdf23a42d3defbbe562530d8dd5aea681bec3620d8a3db45966ae44a5cc3d9b484f4ca75fc69c66d7c526526c56ed6caab1559c0aa6f6c9ae5b762e46673bf18ad1df1f891db790123ef960b4c04cde37de90551455babb746daf1db4feca5c2c503555294284ad61383a68c62bf06c3f13a3f1b9bfb793f821de6a64cee2c5ffffce7cd4aa23f0b5e02c2484c0b556c1b0c8fee7bdef3f3290fbed9ec67db23fc29a9fac95d91430e588411cb237d86c37ab8ba957c3e56a7e5a65f25ae24d928852617933b27b6eca9952c9f0442c183c2787b30793e9eec4d691127767b6fef339517046373ac78beeef8b1dc918e802d226f727e97bf0d34f0ca1434ece6207f683bb9c8769fbe68d22374d34deadaab3c978a7fd5f11eabfa6beb155fa87683030ae59080ff5adf86b784b37fe2640c8476c0b32a7064dba000022f9ca003fa9b390c245778889ce2349b8fd3ad7307a7ed7f1b6c794f7176269094356f6ca9b9c1382b710188bbc157c413714aa9995daa03f2cf13723f27276a5227d707c69aad5700dbe1d08fe273cf573ee5bbe0b8da6ed3aa97d035c7969f247572862f74c8091babbf9ce389fe908479f9ec872150f978a83ae29599d526fce9d7c226d5a21393265bee2692376c888e303dba98cd585b8b997a442e68b55f82ae71f23afed475847db655bd82dc2ce130d849cf65f8f5ea1642d0d04d63e6c3d947dbaf7306bbca372b412b2a92483c26a001d861afba2364e082987f924ca3be5145e87ab9a1750fdb7d9828734ff6037fa5efaf12c785fcac3ce166a94e9028599495ac53310c2f4b6cd727e943c4777652b1b7a869abd45241b15d4656662e484dffbee4c6c043d9236d4dcbe1e7b4b3927645a400c9ad1630b1180d46808cf7854915f7b59cd578f8e968095b19dbb9aa087ff74e48b3d44036f1619f170a44c34e5f2541af6c7bbcd6168871452fdbf07a786968909ebe836d30bae3dc5fc43eb89263334a4c7804ced5f96b02f9553e9ff7ad2b5ec47bfbecc76cf1ba91bd476ff5eba794116e83e63b40006a302de6ffab9951f7980f4f53cd8af7d581534c5799985299a306652aac91eb248ab9dd536f5890cae1392fd7ab9b9520e5dc2a2b1fb33aa6820c4623a048cca04f1251e450c3a6f8d5a6313c071357f8501ef6832def06f541f641c9f97b5f6da852a163d1b538a79a6331bce5e7296bcf50f63240eb4dbd1c26c480a9fe2849e577c14f4a90d7ad8fccebe84c4f9afb0e93f3cf05674a53cff76f807040942655653ff695bfd004f8f9cdcb3d671d519603b4d97be3c48a1fbf5e9f7cc45f109056f3efd811e3b47a4c6c68d331920b808517a4509a1745a29e25ca85e8d18c2ab9338e620deac524a98bf091c56394320f6b4cc252a0f68d897fa28a9db067fbff5d93389b6bf48d8cbf664b2c3aa37eed9cd671137f2cdc00aa9e332ead461d646dcda96d1f4db2d0173ce41ba51c89fb15eb4ca16c31ee082bbe1aaebfd2d7ee406ebf63f403c4b003976c953ba9f4243b1fa90de7aa22ce99ccb17d71c72cb22e14fd0b24aedfe8ef0331c6fc633b20c29d554fce2f656f6ccec307bb48328d3138def0558649df8e98c74c576b98c9fc74a7fd745dd4c96ef557c992af7345277c9d5bccbaa2f7ad59b2f395ca493c3e21ff86e8e03f50a0d3862c6481e47bce0bae3d4612f06f816106835aa4cabb57f584fba56dd302e3f8af220b62d312b08083d33ca991b881352173bb81e1bfc91334bf6fd743a70bc58ebf481ca5a86ac917fe64a741be05abf9007728477cd355f074babc25b7e3ec4a8ca7909673f830ddde98731a32b997690f3a5901d0fe85bd2d8423a7967316291f3588d7c3b387c5d19be170716a92f5ac375767e08bba9e88060ed4adb4cb36f99ecfde456e4c34e07153a4ac55700a47032d9d881becff5753cbe9d1440557487e501ec34479f7fbb2b15adac5a5746f8be05ad089f702d87cfb3351037dae86c6fd40297b1cab9dfd3503d4f501703be383611a49c52b3af04b4d1eafcf4a3a8b3581692c7a79c098f8df060b083b909061269d2a93f59d83763cc4935d222dec40fc774a04120b70fb7d2671003964f8b72888391bd7e61640f91c65a1afb296ef071fb85d19e62ec3fdb9c9fe8e8f6ba701a7be37cd64c01c023c88c175f479498cb879ce04137ccba141ae5671201dd342742ea9447d98a4560a582e05e253fa5a93d5efa63de7c7909a254ba273fe6589699cdbaed82916c2d6b4d10b426099bd5fc107307e14303acdab6f0ddfae9b97e8cde0a7dd4344ea70c44fcd18e59661db8d65f487c8eea5902a1e1c67e783fde04bc1041715fef92a5cf38edf4cfcc782ea744549cf6a4cf1264764149928e7dc9ba450e806c2c0897f98b4ddf263e2e558e1edb0cee133c03214b70f6a90578cdedf08ad5bbf5e0b2c208d4c1c24e7f3c496e28a082fe81f251fc76ab1d3fbb0a358b43739c2b6cc1418cc49255d3aaedfe1ede17fa9f726bfd4de36c1ad0a8fb8fbfb50c4bd2ed121cd917570dc3a5fed2332e8d28ce175011b8f42698fe85d5cd3ee604f8476f7f9102d90533ba702934723108db1d0fa76ba0633ef01f21fc34f5eed4c6f0fb4e4071ae0167c4794b5cd7da2c4877e60cf9b69538dad60e29a1ee483951d6525607ffd7bbc70c5231456e3499541162beba45ca6bb4f719fffe0796b33e60ff6b2d138466aac9f770b652ade5e1568939442047e69533e9423c51f80686f5c9a9d6a0896d8a123609df31b2be8cf19f687c8fe0a16e40cd552d65d48be087f6958cbd1985d23bbc68299e6560850d68843d2135d03a18dbf6889c423db103f6b14dfcbc8bd882bddf356c4ed12eb92c7d706ae4a209def169a545b403e5f6182e94ad267ccfd75f24083718cae525e0efeec79aeda6aff53f10a7dcd1c1f44c0c18c19ad3fc8031c28410cd070103b0e4fac8d860e624eb3d27b85e20f9784a869501610354a356a073d2877dcb4e17f2bbe46fed6cb947ab098a50f7196bf11f973700d5614d2f1439b8f664e999e63f60ffa77d46d3db9c82c2fc645fbf14e14ac472e0824ee2511bd5643a40a5ca3eb5834b7fac532c416f8e6e60dd21a2c233e47ed37859a316aac58aa0ddfb3a1d3ee4863e48f73f423c5490ec2e62d29883e5aec30aa13b2636413306bf58af4edde7f6f949ebabbaca38d3e911d68449aed8d374d37dda857f98bb4a1bccc7a02b5548a36a43e1f8ce3c0778925efdbf5b96ff140507ac6f8053d5bcb007ff9776077ffa30a995258ef86c32d29e04ce27b2ae70f8ea53a74250ae88eb715aa11c01bc5d437c82ad4765f2847775e661ac5a32ceff9e58cc443b370daef6ef89ffc779c7d9f7477be2c42c520a32bb788a236cf9a76578c1c83bc2effa79331bd6c2e6a57c1a077309ceb1936665579285a2fa22d69a1e1357d3030d56c2d822a6d7ec65de17295a36758d02c9b45cd56b16555eaa313a77ba44d426b19b3d99390a39e86532a832a193feabe363c3457b91ae2bdeb4fc82db7c9c0556f9a24c7ce4d2133b76eac96f17b009357c1cffe528bb82d66dbbbf192f2277f9a7aa83614dcc002113e57c1fd560f410ff0bddbf0ad871dcd0fd3fd861e6578936f3f7578cc6fa608910300caad302eee8cfb85c594e18f050eeacbf64775a49531a4e04f4d212b967e65132302f93a8b8f3f927577fdf0c10d8fe7919ae28a1264e1ede6dc742b4c087e30e1d01885f41e720da06d64a68fa69527f697926ada45e3a84800c2cad6001ea8daca153840c0cc4fce67c9467944cc547ab191ddcfe2ebf7648af2f72c6d85dcfabb89c3021715a989df781f6fc6ef410084154565a03fecaf25af1403df50ebf2ae43291237e43b90ad2f6a31b5604a7e6a7e499fb5e1c04661d04f0ea4324417b3bd4bb4de355cf0b38b5242b2345b2a48dd7b5b5e26a56d74f9de533daf01eddf7a532299689c4b5260c249aa5935213e353d97b2f394fc19f97b28dba7b121e20bd05d7e0ae0067852a400b82da22dbb8ce52299879e455e7c6b482dbe0d39bab2bfd3a3b7a4a13f985dbf5b911c31840bb16d6f68143ec4efc14a19854fdb984a300f3e4886c5f1245cc823179850ee3fba223de9a7f836d53a885343b694513f51827fe639cc71244feb85997bced8867011eab1287797dd52a13b4f205373557960f8453ca1b82aadc3293f1293969da1bce09a7b54584a25f31d40bb3df2bc57bb5e14f850e5f2a61f30bfef16624bba3fe6aa1a832c9ca40da8f01d62c070ea3a7ebf02cf54cad6d1dedd9aa4e195cb34316b5a5ea78cb1a4aab1bec2bce6f4cc9ed2ea8d9bfad0d8047e1f19ee53bdf072404ca03934a3f7d61e88243d529ad6e54a729cfd0d4f747c32fb4606edf75c9b215877ba34cb3034cef65c90c5569cbffdb9d9cd36c207e3a92f88202a2e73a5f3660a0480d0ccdc4faea31493d8ad9112de3cfd9b7690d973c762cfb4e216f7e4d4058da499623c098ded16f8f625d849f36a65944cc30f9771f339be4511d8126163e4c8672af13e72a8f9ef183b1345361762f28912c4de60637221a21af89c63a070b89fb69c3ec045dcfa50300bdcc1e2d84e44011acca1c9159ba39d2e54a5fbc69fe5990bcb86c5e2b0b1ae86c77460b81efdaed309c42f31e01cc3f25a25458d702e677c30a0654654330bb87b92d617a28bc7de38514c7ec1ae8466336228390cf2de948827a658b5114dd35523ffa19fa045964d7c3fb9ec42da8cb57caad41df58a3044de0ff8b6f2916255739b7a13ec7716ca7b9c1eff40614ab0dee55dfc7a753321ef63859e7900a9164d2b6032ee73eeb5bc32803f3bed5df6880afa333f049dc44105f974d8db5fe8a5b0b71fce60a71e3ca704e91628045c3fdbfa3b46bdd0d08241dd2851f8f478b571101c07b9c808fba9ab0ea86622c63ab61b135b3de721ae2f09b9e1001ea3c80ca9025277f69c4569c580509c56e22a9c35fbea41e0e015d269557e32ee65b701a686c2d705320b9d47d0c905a3cf79fa4fdaf37d373c00916bcbcc52bc81d378b450c6f8dbfe70b5585896a99101624e887db3655eea5d26e630c9bf697dff6158f941bf4aa7ff90ea78d95b2a0c4060430c3fd87b724e03ad73ff4052b2a7336038d68ec3c79bfd05372cf0535ac18e49e35e9df5ad2206ea74aec1c64837223575d9579601b291da065c3b53a4bc25dfcd904a21d584b4bb9800de5a10052880d06ea9a98eaf07ea0a6a14266068b36bb67b80de0ee445d4b8e74437af45ad92ce5f395de9aa101ba7d6535b3d71f79c2402b3ca9f48b8c00999ff29ab36c41ab613e1503dae133a09b0a83226042a4341ce53e55b8086eb0f387d228ee88d48c5e71d9519e4daffec6b334b45f90d550cf418db11a111d91d9ecc7bc90961effb2090f89df1a953c75a4ef619e117049679386074b7a75782c3811f67dacf10c8a052b73a00c7c64edd1a4da4e12e82d060fd5f2cd26bfb7d1cba95579902849463c2044f7a3164b3373518226f1f7c19b9028ced14433fc1edcecd081cf945ab9e084233820a4fb3892b69fc33c3659b935e8dafb6eb501ef059cbe81df804427abf593cb62a9fe1d3e95fcba31b5ebb0de5c432b5e3eeb8690627cae95f2a136c45ed828c016a3300d9a2779e8d071f6ccbd7a45b4a34ffb0c58feee0be57645ae34d5031ddcfa7a4cbe985edf0b84e7dbe7dd9f09c52886aeb231334b1673fd7a71abfe7b6fba9761fe66f66397394a63a2a056e77c756130dc77420609e31c1d858fa1f550ff489ee2f4510f78ee2b2cc57839c8dd656e3e75e6e1ce3bf75f8222972443c913a8db1793e24d4ddd4bb50a101d5b8c23dadfa7e12c05207842fa8c85ac9bd045e38747b95a037d99aef0e676c9af046370b41f8cf5007aafdeb83b0592a644c7c42f52df4f067690e0031501dae1a02e6f89ede65da9ad5c7de5f8fa5ef816314473b18f794bc0e1bccb05ddd41cf322b20f84191c80a0c2c1d062523bea384a139786eaf32b16bcc61edc084c7b8416b3026fc1d41a8dde52f61eab34a1906a3f1475814b2dbaa4ea05b6e7f490d751e07eb2271e0c653703a7bc7a3bdb7246e8f1140b4d7ce814ee839a2c4d53a04bfdbf99078fcc5810a8123066cd7b0917bea524b736408c0e5bdaebcbc9b51a9ded23a517e83475973d25067034879a57aaae5194e00245938bfaade93440cee2bcec18dd0305fc25e3bd3d54b9dbf068d1f38a5e22c26945170362c031a6ed698ea471bbe643925e3104f1f1e272ac6c0a41ff58911863f38ff8c24ab2cbf724d4a85b37e82eb785167d01e7bf2c315b2092272ce33ae125160af15a69c2d1df9cc657a05ae5c0f403cf4c327e19d9027ee592e3a5b4eab15d2c8c8ba7afc95b4633dd573d572db01832403ad38cf80320dcd02e7e8dbb307ffed25b05779a1eee5a25168f6dfdbcf39632d018cff068083b63630a376f6a2e1e5bcfb09833a9cbd6e4b462ca14762f32592300132826ef604f46d727f38a7ee2da1d8dd0266070527bda258ba07da8ac51432cc3d6f3b4c859438bf2146087c03cf6930391ea7ca29d6f07a3b695d04ad790e8fc5007022dc399b450a20aa6808fada962b200a0725a929d3d613a202a6221daa5081c77ff319866cdb5077cb06f838ab972b356800c4fc33463f5b8d622bdc384d63fab05aed0c2c1c08b67b02a043126dd386637abd7564ec1d6235980afbad2054d1c383d70a5eae209b6ab9bda3f95e51494288d5abf64c87557f9b2e5784a3bc6e155666dce4c714eeea2b833d42519aafc519a54ba3230d4b47e6831fe4b59563a6480557fe41c6376c07b58ed1e3bb6bda0a8b6e50fd1f3ceb07e34f12417844f9677639918678da08081f35d53a90e92da3346e9a6eb8a448eecf380e3c40d175e00ae83ca128abdf19f762b24364e68070288eb497195d2c7fab9342aa7be89e7c7ddd91b703e66a8cc8670a235f01dee18764d8e7ca2bd616fc58c402a1f1b3b446e6d54a44222aefad30dbb2c7101bdec0cf9a2a85ee213189366bc63c850a5ac03c25ba93f2127c64388ddfc4499fedc1027d95162b40ec7f5f4b0702b73aa2db362a8f1df9593fec226ad5a0439963076f73e3f17fe4dd72034748ce014ed40d440fa731d6366bf3450010040c4a813ce4f920b1d4a770d2df1d8d8beaea12d568934eb85ae3f8b0048ad2d865ecc9dffd76a489d1114b900e59de9e5ae4ccbae559a20745fe8b5cc37702b389eb86ae64ccccf6300c40bb7559dce483bb7441c66e10fb7168c65ab6f02194a5fdc552e756eb4111fdf6071ac39db82a408956e984d1d5200d1c3d463036b3e5f8bafebcb320157aa15f6e04d332d48bad44f03a4252c67bc347303b72d0cc8260ebc2596dcbfd139a7a376345eff234b935b84842ebd464d5e604291e8bbd3b239e970127997bf4563b62204a527cfb1771057565d90b908994c8359aef601c7fc10380a6f548aca2d0e5f6d89ef7144bf8b36fc35725d3b155cf5847ad835aaa83218adc73596df5ef1341799f67e31ddc3eabfa45a694bc9a8ac7642acb3de6936224c7d737fb9b77c2d78d4f1884ec02df56a4836c562a2cd997a36f22e89d6f457033f010ba15aef71f84bbef120094c9d63a7527b6e541d651fe2990b91faa1296cc304071013eb89398134d5395c050938084881f778d9ec1f35ec515f9bbdfb07f35efa7e9d8ca0dc7e28afd6ba2dc3cde39469d32dd477fa37859cfd99de6bd3b154954b482a5ece53fdaf7738dc699c05570dc68334d40015e176f59e18e6705ff0d7a4a3b439a596b744d3dac996edac359226788e386b87d3f6ed44c66e3becd3d64440e4243eb76583b3bed0134a1522d87ab4f659985e1181521da47d95d7ec2c9892c5b2df9a278765daabbdcbfbddd5746af1bc43959c07b2571adf87f79538911ed1d9569be5cbc8016a96f62056bc1baf472a7826bcc9e23fa054b712827a6bc06862f10ff1e3ba380abfbe12dac2bb0e7752c504015b32155cfa7be7983972188345259ed61c7664a158f4ba7cc381623333cdb9b1c360533ca7e1e383922045d46accab374c6da5b2429c981b19d8e70739b76dacaa52829a8a69b6558a1f5b65e8cfba8f518f0c68a77bc76bccf0d78c21098f680d1ee098638e0004606d454f47f38bc7103e520a948efaab6f5e9a4b8499698653c9d48462ec9db7a92a91e0e1c800f3e95637fabac79ea6cdda7f977ff336d72dc42fc56a1762b2aa0771c975155048276936db969e725676c209ddf93733cc2fb268109f988add3147b348fe97d24f3c36941f4403d305c58503080140f92bd69c252a9129dc4bb158eda6a3a716d7155286567a68ce64c3db61040f2580aeabc657e0382deffd7a869f4c45b57346c1e5cd44e57597bb01f2ad0dcebecf64eec1bdf156351ea1c77f10f0bd4c7c7b1f0f46096582392c3f6909656eeab543cb2ea7975e6b184606e27f39a365f8a2bdbc25ec3c606e412ad8af54f430363bbe1d7b0221d48d3c5c294e0bec0a2210d76768bbd2ffe0acbb532ed29e2ea72715c6cee9d38014c1e2254b779aaeb32c7f9fefae7032b370ebab81c7bb40c892e596939913a5c8bf7b9c83380f9379899734314ab0a9e2f2117bb7d0b82a2921987374f563fc777438ea7c432565c8fa543e2cfb0def1d07eab565fb330df6b78b98b5d6c13901d06eca03bcda4a4070d47ed78e3cd6ea81704ddf0484e5a6084fe82a6ef1083ec23f4fa8f0f3763d73c51592682f16af4274fdd9427e42fbad3c68f1967e961d5a5ff86ae1d18fd4c14b1e8d4a474b0a10451b281fefd1f794c505e03260bed7616fc9c62d135d5a7c300421c5da54d938d87925ea3d33cd5ae3b63b854017d42ca8d917c818d1f352356c94763e9e9c1d3207952aea1a566723990b8653c52e4b0d579c916f079f9cafcbb9f9ad72cfba7ed32522abee71051457107e8e88bc5e257addce103201c9176966fa022693c45a86bbfced76965f62641f5309b5b0c92e1ba9d4ba31bcad3194f62d08bc7645e17c3d2efb18598d1b298846ba8600c27b8b2823823e58206621e9f06cdbb2b0ee2873c728988548d7ae734e92969794b8fcee7b3ba52dea1f7efb6c19dd72dafe2ea82b4742f9669d9024b5f191e85bd50c3c2921370e6ec8c0876ab240f0e4aa36251965ce338c13f4306b327cc2e6fb16162b15e69170e016e488856546e7609c9eaf4bd30f427210e8f12aee3d5fb529818f34efb3d386bb7490d886241ea3bf3967ccb0674445eb604a3e04c89b57b167b895274bf33830b54f2d04845ae5b1db53e2987fae089765e6c35991b51ee4fb9c5af7a9a1a552e6943fa2c22e2068d10ef4fcf252830e12289d7c201e99222a18a846588fc5f55b27344bfffdf0d3c7a24168bfbf79d342b4612ac16a966d6f36fd70b19a6882123a95e50835e955bf342eda8c53ca77045321c3f076dee7a8f9a1c00c7601f37a62f763eed8dc1fda45905c826c622ead6e495a1207a2248ce7659914c24e70ed3c02721f6fdb35a2d68cdcbe255c4cda0425018fb587218cec5cd8703a40e51eeeb47aa53fbbec12d76d446c7309fac63ef4ca5e2aa92c2d5fc39073f4e63c2df07af9f7734a82e4b527361023d0e4d654fd2183b0926c52a75e509ad4061d90eba62e09d6e0b3a915d7dd164455eaff58fdb882f5df2a37af135c74a6eb31e0ef13a9d3e1b19317abed1b4c098f68115f82c4bd19ea3e2723dba349b4389a7c983107aba4513060cb46a7698b2a6eca1bac873ddef0c8e8271c673f7387f9cd1765516c30e531d59a7d4dbafd1216c2982656795080b5c349c1c24c62dcbacc34a3a41814f359516081368e26de40dde1049ceb56dd60a6148efd3cd7c44348240e99b979976a739c22a813bb5c60e7f322a2a24f9955cb6a9a88bb094d4cd00c511b5b0d23bd48662bf5d428f36accd8b6501404eaf6072e530f9842aafeefc0f92ad64842822ded8deb2330fa1157e4476b28e0425ace3d58c9e75e04190e03b94fb125ff6b67e183304fde19aa1584bf6741878f3717c38b4d6e69f5df0f87604edb8ade7049343f0b3d6023d48d1068d682dfa1e6aed3b24c3ffd8e1ea3b7ca85054f70f5062b79efc6eb9f60cc187890c116c2ddab95989225e8aadc873e971e3a65e5f41b45215f81ced01df8b6e6ba3c753b79d472944126e7f17570533d73bdfbd320f80f5b0022c3b84ffe0ab86dba380864e1e666cf567ba23c37d3458406267aa310e986240a0ce229c55e3b0cc4461994e0e1072b7cc7bc341b5159f20559c98fa3f7ade5f2a081bef72583cb2db47733e220a8cbc92296254fbd968c3ea33bc4300a63664530359c0c8e2ce83586f8fb154cf8b3f8732c38cb3474e5801a00296ca2941e48ae7f2552d537d920235c27fb56162671276cd24c04a75285969648fc1e89fdc70711690eb88889e2aa2a2d2125fccb8c33e0656ac6764aebd48760e1c0ba229faaefc98553f7f2d97d21667b2489ef5e6406720361562a82fa07f22540ea4bba1687da9096f4387392d06dc178121a9cfc73d2ff8ea6150f19ab89f3e65a68aed69646d210012d844365d11291df9cff45938cb7720f22b12558d021745ad9010813f242c42212c5d52167de247bde11610fc339ffaf7c7ea159cf26ef24d8926d4d4529b618b55472cfa430a72229fb896ad8381e4a5e5584bb7433c49e19ef27411ba4c7e5c23b672c636735ec39743101fba4686fe0690f30dc199ca5cf7ba79ff2da409c6c3ec91f8c7cb16b2bd5c5a5f3b60f1311e935fbb0cf2a91764975f17da7d76a39d7ca4032459bb3be81aa039de389c65b197d4f0e3d7c9f64a3aec1160dcf1b030e929f21b93a36468b53c064590ec3f165b2129c9e9b9703407c189e5128446c3312c0ac5eb4a689aa5ebd9386c772bc758320567dabab0e050feff15f01edba7525db1a29e0240df7c39fefc19e62453b89512f68f0174dc51021dd429c75c0e15aa3cd4c05d6b54f214890f753c70f444ff741027a9a94ef0db10357058c23d2fb59f9266dc5aede7fdc923665c21f553e01ccbd8793161cedeb29f93391f613f6835f94f7e8b42a0fd0f7cabfc0a60de540edd1d4842e8723a22e203d4445b3a1a4586e6993fa90e11550f256c893770677a8a7f53db32a2ce89b18f56e1448574c4a31595cc824c63256724d35e68c787a53234f83d12ae247034d4da0a56ea073a00c75fda6f611e4718456e3e7dafc98d9be2c6e8a83a01e1cf9ea26ebad22a34d658fd9ff783bf4dca656cbe07be7d98c3f4168fed07824222b89cdf1a9fdb18a54769bdd76b439af3fde5320e1db3f7f7897051d026b6498d40442158406072c3216c8cf85966de9f74f36692fb48066456d4a63da4ecfd156fdd4c66b7aba167113431e612431fa3c111cb19dbc0073a58c4d3358c6602396910cf711eaddb86457e9f41d8d08b1675608ef4582ef175370d6c5c7aa875eca672c67a48b17d94bb79fb1e7ea9a81ae17caf684e58d3002f00f0cf2168c23968e7254f01242eebc897f94676534385d53cf394ed606da7c3fd25fc1f0dc4b1c65bfcc39561238f0e338af86c4280044fe474a17a517f47a17f9852b30543afb1205779c1e8342743a7ce475ff5db7303986af9d0e210f143d15329b025a3c10f5c5282c839d259a64e16ea23e30d69476305f275746be16101cd574a5a57416e815e904be2bb839aa5602dc8ab42996c28ec3bad22cab795e62062354437ca7bf105c0e20df4358086ee31fbceb5e896da0e46d44c6b874c867d48c4288efd42941151bc0b5cedba763ce9d639a7c2d79ced87821bd7f08f6f5c0cf24eea9ac28bef09f0638d4e2ad63a5690a505578c29d5b9c465b5232ccb892724b276f7664f3c5b441209d3e279cf7b2606b4a642da7059bb9d4daffb0492cc7dafe7204d9da914ffadedce0d40d628192a1ea031940d1a408ac74f1f7d827474b9758422761200c2c2e8d93af85f8788511fa6c19657fe5c3fefee3b95b6da52bd75b52a400f42b8d5f1cf45bb10dfb64250921975d69c61bc104f883f3d77884c4a5dad9eb9786423826d58db6913236a427a505e1f63b1dffbb69ae08d7306f7597281ba366eed6b6b33ce3c695a8c4385307062a8e682e493176b68fe65d05aa92baf02810cdb803310244e3e342d87e20c8756ccf8bac1de5a07009e2f53362372b72aa5234a1a489e36cfe5588790862e09ac4e4d2933470d7305f8624e38ff68522922d8c66af5e39517ab0f3cdfe051450fcfebd6cda8cac0ebde19a6bca9ee895bae10b36f446c8e693249d4fed40e82dfad240b32b569f6ff9b8d830868103517f111bdbb16f56ce45f7793d2f7688fa2046c0f6fdd66126a56e87863c6d3eb797591eaf03e9f710f0af498e6f501489c5eee8e2cb56c38838b2ab1b27849f766b3c3ebdec7a0fe84dca37f4ffa6817700f6a873f1f49ef5e881b9fe0f387e8e911d9dafdd4dacff986f15ae31d6fcb8ae8e3e560196c603e6fbcffe0d4bb1358a54acd1c54a10dae71633b4ed85540d25903e5316423dc5dfb829eadacaaab29c3fc1b5098814f6994a5abf062b2f729e38de5b44f9685657e8000ae1c70d4fdba59f5202830804dcbee3bced6b640cb8ea84aa5f81601ee59f589bf3ed030ceca6da8bbfad2fca01e0083846801e8c881c663a9f35a4f62b084e34b29bd34a19c0cec773b5520627d7868c58a4329bc2dbc3f679863bd2a48bc3a3bd805318927288bba87fedfcfd693d0c20c45dae477adb0269f084999b3d04d31de70765d1ecd74b2c32a251ae6cb9dc9d8cc413e54f48bf3c4aedafe627d2975d12561252ba71da8ee5ca676a5d51502a1921da0c0edb1c3982649beb3b9e604351d828756ef507f52fd92544d87abeb472c05581a3f3cdcacb136037b2fd5167f47822afb1480ab4c17ffbe65822c956b7d8f2529577ce80ec22184d7dfe18eca334f2e0270450efc081dbc2b7a0e1b20fd6b16ade0844d830b5d0c92ca469ec564076b37ba58ad3a1f41a595334a10f10ceed1096b4a583a408f588fde0f7313c2d00a1385f212da820102007b5de8acfc54bd4f621dc2db18e4edaed9a4e83aa09b5a26af5f5d195f1dd7cb44a4678312041a581b4f65a2de713ec5a68d35553a687f7a8aa394b478ebe842895042ef7eab874f9a99f471d58aef71db8040f4775badcf5b622336b2201dcfd0f7f83a85a9c86a708197f0f0dcb921c5fd7ff497230ddadf9d952f3317ec71d5a9f984d6dc1b3357ac02a518d7ef4451527f5559e3963b0fbcbc2566de61ded6ff209629c2dd99d3ae1ff5d7aeda663ce07464c3455ead669d4a7f67ded0701cd017eea69c4bb8a8b65fe557d0bc992782204335445c5d4c599ba32b9622d70f98b8e624fd238f87097a139a08e71c3843e8b157e035e6ddd122ed09df6dc54c258b39bd0b3c541833aa4c2fa38d3f63112066f4c564c7954867ac63684180d7b0b75eb3a1a678e2baec6989f3f3c8a8d8e836249856529f3f8a2030e959e1d4d17f2d4df554a279bb6135b8448e4713cb8d842bc48f9cc7b69d25d0b465d6e946ed6222fb751f74a0fbc356a33555135a5e448706d29a653072c39c081857509e10a250a24e4d98cee4a08da22840329e74e0b96ac476e54ccee0bb5a4e647cb49c7ce78202cfa2ee72ef43c5bd2f6f2b26f0354f391f45e82de7cf5d5c48a3d4d188b2aa9f24e2d7d7f278bf8f955403f30f86141b5efbc12ab0b0ae8cf583097e3b06fd54c7b1a55000355dc1fbf38ad183c14560d6907c36cc390dd391411f5400d8524dd1d4ce2fe39285cde5380f326cf55e4f075dfe42aee935aad0f99ef65c5fd66344de328991e7a784f09c0fd3b8a893f2e984d6c5d4b8333a09749d989bfdc2077d29b6d7ab36af99d2cb38f7558f3a2918ae505116d78fa7b7c266aa0950ca731773c50e2ca909dce3036092207666ba871fd806d5922649c8cf1695619b4b9cdc1c58b229e865f4d6e084766df979349c83931db5a0fe4640b30f1ef0c79efa96c672fb1ade8b14fd3eefc13d6d4363b6b7c36b0aa381d17cc9f9ca5cb73a7c5d079c3ee5ca3495e54025472d242d741596838b4505dada4e98c111db0c2a9889074fa340ad26f709d29207524d4c3dc7c534acd9ff1799968d496613c2c50accd1853572e6923634720579b24365b2679ba9d205101c146b046db797c094bfecf34634638d68fdfcf3c9f5025435d409100b5197bb02e7de9801a46421e726b73f59c39923e23f91597283801b4e491931f702a5365fdddb289af148f2a996ce39424fc7ea936a5f7b4f9afd638d4f9e3a7d73bc41f13399ec551755f6269588dffd4400cb343beb8ebfea9a8f17125577f7d781cf6a59575f571bf768633669059d332f3d8ec8f62047374fffb71e004603ae0861382557bd507473bc2cf500114d8dfa8e80f3c4eb6d17cac49ca84a6605d57a916f9e9c6c610891cde46a07a4262663f9dce41ebedb1a108a53dfbd80b4ab381a4f9fc6d2eb287537c73dafc9c5003283aee0990751d6a3d04ea24091e0a3998b3d5da1d5332a9539664f60fc3c480f5517f5ec2036062accecd8d58573d3f86840c5f0912ea7b062383c836f2a732cb1cc27760a78676ee7fc77b1247f85e71639d2b9f224e2db2f6eb4637edc5a9f4b9bef1bec76b9077284e1d341fd86cd829e23d969e22efbab13a78a7dfdde8bfff7ea8629102c2de4d0455c9d28d72c1d1d3ef779cc1b35732cdb1ed5ce37a61804e261da0e329c702dab929b8477674563463fb218371f59640f606c3d64e03dfe5420bd284ce1789a6d70ac8ab007beb990b325831ed833f7c9cf1bb7132b6d957cf172665de5da53d2a01606da73d239c9bade94eb29bd4823357f2a6c35c35ec19262e2623fae26180df7e3cfc2990291b8d3b28d7a0fc25dc344b8c1ae1a528f563c71bbce31d54b3683c004eae2b87a4ab55d17d690a8d95359aa6350373e8e57ed626f7382b4b1e7ee9e16f60741e97f52fab2e7ab2034e20d20d8b1cf2589ce6422e6ffd15e4a408d455933dce94d847505ff7f821c99ea4371eaa4f90a1718de9b5d31ff044f7997e639ec0d3ebafea6c6ac2957aeaf442d4ec1371f3696682e51b14e45fbf697d824e116edb72fae58f4c3b8c2d6eace5c3fa2de131aa1c3a76398da359d4603321e964c9ed3fc2d3b5eba6003735a19d435709d77d67abeb79eeeac3ad98f2080d2eb28264a6a69707ea19e2666f22b821af6abf29e4d7204049054e223342cc0619ea57ebe3cf23fc39176d7febed03428d8f7956895555b029ff056a5cef211da0b195c19e1f8a163d147284d037a4651dcfb795cb8881d6558a5e887220b90f77b887f76bdc5e75e43259573bf40bed3e728ffb9f5a04681e9196fded010d6f397ca37b22cdde760fc0dabb649913cf3d1ee604e086b80a53072c4d33df83b602ce711a008958ea496df41514110309fb7450439f09cd4ad0b1299783b87b9719e2b47a62ff38c7b52dd1cd83dbecd7ff9846a6f00f8feb680214f7e647626690355c0211c75eb754e0f9ec3dab1f151203a339819782747024603f43757a425d6cc21919146ebbde5431106f0ba99ebc103e1f8378063a6c2f0ab4f5a4fbcdb5ef7f07d6b2339f3ca558cb02133d8a776e43b0ae8e281f4e6c0735f45e0d7abac15bde07a86e73af07415c40d0f506ba3ba38de3e59fef4ba4ce7eec867f861fdf564eea5d9a322b23eb3c5effb7f25d9554e1a345e3894a8d6341ab4c963f05ad74d23daac356310cde67587da2c69ac85b31c087b5f0fca3273d8d962bbed83e46618b07de278aae49f8bf673ff5950ba54256c7381a7909e6cf5826be53e3fd14262e9ce3e43a3121d427d9086d2c103d22fa28461ffb30d466fbb78f8a7df90840456683cc186fcc457ffb1918081574a5059ed72e3e43373a4c3b6509c95de738527e074eca31fd0ad40dfe268011613b84eac9f49c6d8593000eb2697d049e9f274fc747c4661bab64c310c61d57170508986847e861a6b12478dc9a66b6e5ebb98f841536b534a3479559eac4db59513b7f3e0b70ef26a7d634d5a6b5f78be2922c1a4a6f3a91cc1b1f87de9a8858e20f70c3c0d1a62016cbbcff292956c86593cf5e7457c5601d4cd9493cf1d71e80705af7925bf656e495e7fa42837821fb66a345628ef8b27b49c8ebcb42aaa8f1aa4b92e3e302b9e07a15c045ebe056ac12fdcbad5caa63f7babb37e2f93fedc5827931dccea9d8f1a1ed7a8e05bc7054b83ba9b80237ceaabd4b10f9456353fff441cb792da90b0499ad39a0d3aa6e26e0b581abe0e8dd45817b9f6371ed25c732ab905214a338de54875007577406cdbaf7f79d9aa8e81dcf0c92be76c87c6be2fb82746830b3e6834cd26c5efbab4d8a88c46399e58205e5f8c10118a828cac27bac553ef3eaf7724d5403722e898967e6c161771111b13bf4a5a657bfa5043ad7c64c5b2831846dc1819b6d0ae1cac9467dc78faa77b2868dbce68a3b4ba347f048e98bb46e6bd6421164253c13a1a714ab06586db25a6903e45fccfa77ab3c777146e48454495f1d8455e1c5e1c1b4ae6b19a33c9a401d094cea01b4520ae936b444937babdb27e867204c6c575aa975a3c55bd428fa8cee2589863e582dd6baa3d7548d8dd22d8c65c75a42b307233f5bbb624d7100e3846e3aa3706a5d99b6899a74331d1c0001491c05c9e9750cf91fb4bb6d06b8a5428e675c9f7bbcf33fbd03acb47ac7dad0a7b0f0f7606f85047a1e47eeb63ac7fcf5201d6cc285e2addb956e44cd1c337306b4cca4a0b7dfc20346103db627a069f77191dea405a9c24569be779b5d9b8e2bf8ff352c98e67f9a19e8901ed2a72c8c6014efcf5500697ffacf11e523a6bd7cabcca57cbeea80954cc1c7ba03ca01d5e47ab33ff1ddd198d0351c0f1e131dfbfd1831e85af74fa2e1bc2f9023e75133591097d2c0f8dccfa9133944fb82caf41407f6d1d7688b43a736a384d5fab1ae8cd201811ee48dd4dbf2ab2f97944a1d46fd431bf1f5c2552bfe0055cb7f56336bbb4398fc3024d559fadc35f0d19a6219f351f4f0b1ada70809b927f3c7aa38d77c672d49a7b0f8e862cffb97064d841aa8d58ac6c3864b66dbc4ecc560259ac03adbe21d5c14981d96d2005dcd4dbe539a3c737d5b74307b1e6dd9de7226bffe43a9228902bcc427c173a9eb5d37a024874cee79d539d90cd1bddb61927176a88526671cbd94a56861bbd1d2ba82eda3e89d2f61b94031a664ca0e6e81bdb6b4023f82b2c6cb4bb98a196bec3270e4c8140f64f5267ea2b457c2637bcf415629f8ad343223fc820549b6fa4f589457f93ad34d0500490d85038ba5bb3e662196ec6c214d1cdc537d5bac1294460e46651afcbf8b52de58becb3951b33911375d6eefa4492931edce1606f400ca942f1abcd19f087842170102d1a1df752bc1ea87b6fa33e925f56534ba3a128231759c1ca6e7ea343d7c02ff60df7b00cf0709c30a9151fcd6f6d4f9d5947691099f8eadb9492beecd3e77119a369f02ac5e36acf21e256ac906255e2907f14cb35f833af121c54c89e997ea8e5468551bc756c0af205c3defe2bce99fe2a42f4f110dcf5ccb05c2d1f9e8e70cd3ad381fc16c601dd8498a784547e6acb2912a0c5054875a4ec933689700dd678af8c1cfa7ff10e059d9c9137701cd7a15456014df8922bde1e01dc15d4fae7b75ff3ed2b74a09c82c65c96d6b3f22103052e22bdb18dd1213a4112fa2e8a43e691c417f17c88a2ba011e972a654554010795f48cf117ad4d174bbf5fe65aa1e847f760cbff26cfb272b163f8a0d27a5b0a0b9b3239ed565caba234c5869e9cc0878db71333640764a829ffdcdbbcdfdc131c69433530404ef00f97f46fcce037eceda85bef4793942072a9f2d4ac30bfad10e3832577d777fba16c25217630173829e615b82bbe7aae45526dfaadeb14e22f7d57b1204d88716c852de61d4399344d7b5e3de37774051bc8ac595f72e716850ac87d97466a612eea15becd99a13777ca7dd46bfba701ee6872b29ccf6865a56dc245075ef7992bac655e389b2d85fffef9009b9a926558422c6beef0f13c291f80667e1d2b48c3a6f050ca5aac03664c76587b86acf92f1f1bddcf557804af307cf26ce8b8962043de6b61da80aaa9ed28b2f40e789deacf8f90375c2a84fa7040e8e5e36e4d2637d277241f45a72a19d606fbd6ce085047c0607e8163edb06b880a418d8abf6964af81d3baba70d189b38e7636a751a4f2f5bb2f47810dc508229725821a935ae9db36b68b8fa528428be15b4a515fb37d7ad4ce5fee6a9360d6033906a6708bf974303405c60f9d7cb4ba59829731dcb0f2a6ebb912bcf1a46e2a45edeff714378ae4af8bbcced13680a78db827aaf5dfa16c446892ca3bdcf0af34de468ebd8ea9bda4e11961956545c5ef73a51963d6a2eb9a4abfe9c6c0ac972d6860386fe1b5df2a3248f93a6775d0179f0ddfab512e71ca7ba638768ed77e4057a255dfe1f0f46dd290adf1ca6e27290055e983896ace3fe65073a3da11ed5dd520791a9498b221d28ef574f2a09552b8f070fa96dfdf871702a9972fdc99bcc4f5cba5e49ed602db8b6483a3c6a820aa045e62a504b24bf86c109bd2f0320dc19c90033fadb231bee321e4d345ccb1a8307a5b6c124403c79076bf3d9f9242948ee22105a80598702cdce55fecdc4a8df24c57c732a1222ea152d170ea7279516b14a9e8baee61c4d570e4838414951f3f9262149a99dc78770c045d3fdb3f8fba83f2bfaa6bb293926988df9aef9672a38cb852a16b6c9d230f0436a3c0a2ed2efe5bf1775303e39f8bd94045e29add1d882afaf104d31f62b8dbe9caeaafdba5b90d958377ff555ad32bda220b396c451ee9a729ebabaaf2278e00556df5733215fc264ff76eb5ae73ca6f1ebba1f44f877abc0f62c5b6a927c7920ad6e94e613f8acf16745214dff7659be16626a40075d5a9954692ac44c08a66af79e476e020daedd36aa9e341fd1dced06c0d4c95608427bcdcfb94d1fa1819a993fc4636261b147557856a1f17aa379a183cc2c61116532aebf9591444b8669469175550c7d1f6438d89d1e78d274ad7dd3bd2e1fd0d7356954b5226d1000831ac545e60e1cc3827a63d1864aa9f17cc955648228a49b7e71c19c93447c7fd89d48cffc3099fdd6b47e20ca290b07795af49303326c36af916897f85d1a6a97bec8d880c096648d237c5a8d3591f5d6cdf002d9b7188a6e62b8bcd9cdf0e3eee17a9ae2c65893c14dd786a37046ec31adb27b4f299d61dcfe88247a7cc5fadb0b17226d0fc009466926d6e135387de1de6cf19e8e19492d44963fe3559e8bbe139eac27f05e16a759cad11116feb813b91c5a3e0119ce854d3da64f9236f75511b41dc5b25dd4f1a6692632a718b45b6d0cb5628e1a87e3571f3c7cf2f2dc5017eb2c89c61ec42c6daa4d425327407b9a5bde2fd0dd1e482262c6772570e10e69806109dc1a03e1a6fefec15ee8dfbc01a1178802c154c82056c4cd6ea92d92119cbdcb6979e7b0aaed7afc7f67d4a4e9522f94365c5a0e7bfbb81004530b819fc2137aa4a4deb814f85f346ca8a7967f2fce74aa1a246a357cde4b8dfe84e5f629ce74fc4c7f4d80daecada06a05518d62cc065226182b87def035ed2cdb371eee783304b17c1c080e8cbf02c192495599e1f353afd0469917cc2e2179a09f6aa298fa7da083785120c8a9a8100259b86f737e719bb7787b5ea1d9d4f9968c4fd10df767d1e6cbc3be63b0bb37aa160682f769e2c4b212cefe194652e04032d0a1794618ed9e6bd776cdd82e23e2dc23166741f5ccfa1f651b5a65f794e4598a08b5025ff6ba14c7067b748b675a5903c8134dd9bb5fb639526095280c5b88ec8b6f73ada051adc36a58348f24740a83c1a41c2a4221fc29f9b1eeb100da3fbbef81aad86fde3527563e976ba08e5bc9e3286f606821329e37239f9f4b7e331c8a32586a28207477c0719bfedb6763ccb640048a5dd96a0e908cee94653961e3785964a92ce88983a5b2e0594e0f8bab4a2898554143e9d6f9e6f90043ef29603f6ac42ad49e31d37634774465229bbace3a3b43963bc5c7bfe8bad06310223c71e49eb7c856419f28314e2622d0929248c2d103640af6afe394eae51fe83591fb5d7d9aa52015f8ad3bc88439e1ad12b92419438114dccdbd5a26141090f9e3e8c9af2bc10726d3fde408770035819425807b140888cddea165cc7543c49c306fe6ecf1829c1095bcc2e07e6d664c522252a084e47fed785c0886cd2dd65b9a994913769ce3479971587378ab22c5964961dff62ea4c32b2d0dfb95a7b5be400a92e5229b0eb04521e4b303db11e5f83f5fde336cb317a0e0616dce32d9a3f19cf82dc1b918983b91b086dfb4bc553be55de4e33dd39f5c7ce155da86aa7ea8096878deb076dda7f9e11b6fb1e8d67cafc76afd93f93aa5e5f394d088955b5c57fc66ba129bbcca01d14fbce812ab3ee5f44c323f690ac21885350e156041e74449b1378dd0b821d444efcee80f981356ea7738961415026fe345da5cadecc80c83f986e481e1e46115218ee7e4129bbb59644e67afe21af8f9f288e546535f22e39818e7780e2ae43cc495af55c9942c67756f83576bb11c8766c8e6190fc35c339e1d57d7ccf90972e9ec1350b3895174d42f8bb9f0d78c68031ffbd4649587a1070d7a1074141870ac3b5af37d2eb1dea75f142de4f7d344c368c1b1c61a8779e77e171568a2e535c381a3cb4f95cef3402644b43e04734918859cde7d62f0606ddb0b32ba64db5fd7185d4a705cc940b0239d9de94ee3655cc4429bb2ac99288e2015f7ba23d5bf02ce7777696e86b9aa82f88ccaddec370c7490a05cdf17bcbb6991ecb3760a4a9baf6e928029aa3d8e17bfc8afdf26e86dcf9bec13a5a5ba24ffb343c97a89f3f8581b3e197c5b92a93c14eb2848b49b6b1c7279bb2436f46b94f58b39376fbbeecc44024f180e4c789c9e551b65f2802738ddcad5feed5f2d4ddf625097123267ecec2b3899855bfd167b0597cfb08341c490c816ee5dd12712955d736f6a99f52ad5c859acebdbd04fac567244aee72216300a7c62af306c8228f81beb280c08579e6af187d16eefbb641698686973e05d515a5c3956ef9650a3f2fd0f1fb724fc6a8501390355d370ac8fd406c6e08c974aab4b2643f385788142bd284e955ef65542d7937098376cd0c2f54c119623d57780ae9c9d402615a08b47c58bb60b0b677e2add69b15e4462780f56cb5bca6e11e000296250c46c055eb15243c9d1a319344d1963c31d10ed7a449a540c0c29ae82a72183a3afc600266ac2b1cebe73d7786cf2638caedcc0fc172c08ccc323e2b593cc142816a643216545015c8f7f3c17f0c5e6c1c9e07839e86470cf231d3d5d9892c6d3269710dd549166d722fd40924d5b6e8c714716c42794494337af16b3755da3993753bc4404d9d32b7bc448cf0f3173bbb8772dddf5e3f1bc4d6dbc87226af2136116e59a32468cf930d68d2b911ce9850faa6a74a676ae7660f2062d3ad5cf7ceb8a990ff043c1bc7afdfa6561163b4cc5a47226ac548dfd593a398396f3baae0c05fdb9032bdcb16af55abfd2bbe77d8d028a34d451a5b767c03f2ecfa912bb0b2191b31594358a0fd58916108b4b0cc6b49239d2119ac0f289e54a479ebce9c7bc2a5ddbd16a98b45c4c066948bca40b4a08add5371f4087d4ac28ff605f4e7016918c02e0216523046b26e5f5fa9f2382b2fa371942c4dd337943612cab95f1f6fe3aea044b5f622aab84af35f98f5fc3913cee0fdff7faef926549d7a33f011101e1a9946130b02804a2c9fd6c4ad598c1caae89dd3d911c139f5a02dfb9ac6180375a631c0c66947f115d55c5e94e57a75c4a5473aca91b0ef65584a8d4cde26029edb74b1971a10415cb2f0c17955e1ba35f000f032c63eacdef4fd65c0861aca68023877e3fe8d62b5a60e65508332a5e7bb3fa8c8a5dd1025ad0bf70a5d111bc9a7e2767ba3cc6d0ff4245f474bcacb409e1d8e5d11e6ba8f9e28d4c4db1c5d2373e174879d13edf0a71b3ef3aac4d15b2bb8dfe82a7735218ffe7c8f7c4f1872e9266ab1cdba9dcbeb17c0afb7989c2eab4714ae39be2b73c875cdd3ba8377a5dc04b51da82bd84a382fac29f814bbbe1551f985528d4f9c2003e1620ee8cfc8c7be61f4f78aba2ea5c6b3c777079749d3b92552825c39f938400529621b42a6f63723cd0d38b5e2f81de8f4b0cea5a17af01fe0654fb025caf505f5753a3734a8fc9ec1a26d82a5e78e43bf0491395922e307cee8e4d650c720b6ad72cd8fa36209ccda14334cd08daef1f64d9b45f382daf87d1123ef976529e6c360fceafd3ed713408fb01e08bf9d1755408724acf98bbc0e65323eeb83dfa61221aa46fe7964b20fa6d0c2b9c589f0cc25a4f7f25fe52a0ef33ab1e34b1cf6a082f47e2a13ea9d9a1c4ab9f22ebec0c048a8f3f1820093b45808d309698d625a4544e84337c75a1de7666657ad28e142bee9989ded3ed8b3b54f5c2784590661d4263cf09bdaad7ccbef771290e3678ac06a2c6fd0554dd64f20ee6ca903fe6b7100ef2fb86af6afdc18972f23adb23aa9c668a631eef34cc37290cf41367832b3fbf88ebf56143b57d31b8737f192864d2e886fadb14c6244c16cce844535c8c6e33910066189d7615867c001a3f53102d174d8d5fb0f41d757c2bab78f67eb727e5cb1a748fce8ede146f27027a396624f7eab081aed88216ca36c5ef2c4fab14585b3afe796950a397ce05e0418931af63753eb83234e126a5f9a7e4a8d08e5b0cb54847a86887134d8c6eedabbd3ff763e586959db576a8ce88afeed38db8f1aed78df50fd1f4498b7cfdd60b22f2f11101b2813f012b139dc113b00edf1b54c64462549e4964d0d0aa59298f2c24e097eac9a42ce2f81ec3a23823f1c6d2045b74518f9c541fad7c8dd454e4443f33cdfea063ae4dbcd327694a932b85d85943ed77e6572604a8503620ba8c04b385890bf2182af58345b3cc8fa6413bd622f4e71847d883e634cc4e4a11ad52743bc257616fd56d1519fe3fad290e1792f141a742661b2112653cb4aaee5e4e970b8feb7a197581058c8e9b669adf35b1577e6054ba7f0a6063b76f728138c8b36c56428c3e32d0f7d5c9980d301c4ce02987ca3951420d4732aa88c5227563b57f1dc713ed2bb0c3798e25e149fc80a41b319861418ca7065e32c4f36dfcb96bcdec44d604454311eafb83c020646e3b75d7712b66b54ae2c1a9f19ae4a2b2d8fe53b9a26441c362bedf9fceb42218b10cc9c52b884788378dbb3dc390cbb31f48b6cfabc1e52c39fcdaa285c150e1cac43ae677a41755475a2b158a88bd8c597db94c6ba6e097084f01b10d370d83ce0514d11f64191471336399bacedc482deccc11af523ac94a14cad4213b3b3c30791b6edfa9be61078a04d4e96468d246d68272530adce47e96352ae487d1e05adcf630c2b002b0ef69a1337860543065e581e3572982c6791cf9d52441a8af7e64b32a183590056b505efd060278d1126ca73d2870dca083123c3d7b0200770d676c07ff1bef15beb3fcc61843cc991ae345dacf036907f53dff6a97cf12ccbf55d9cac1fb745a2ff486128f0092c45861b31031f0566d33f1c736755edba83cdbe8d07961b46b814474a94e84d0cdf7bc92e6e5adb81e838beb79d44d9ac2a850cccc20615afd07e17c820882141af65556f418b95a1452115389d73c04f5aa84ffad4c254262fc095fe1b8dab8d64e83cc26f5ae26a66c5e8a3f678050ac11965bc44e453cd7fa8f2b49c0e8ded180e1fa02f8555df653f762aed3aa9a6bd4a6b28173ca28dba6ececfe47305fd9fb10af41d26b5369736e497a2af2ff08306e37ef5877e6e9c9d8819d0a5f41630e9ecdd4063965d14607f22cf286b405c754aa575a5e15ceeb5200c5b82fc829146e4e6ad1225de09b227f8659b87a471ad4fbee7e517a1ebac811fa8078e3d4cdd54223c07a4f2a109823ff3beab46c52c1ade5e241392f0a2cdb11cf41695febe9a510d9d88e0632a407b9d573f069d55e0b5d3072ae9000e07541500866da88bce9a1acea798e506d4550896959cd946940f39a0e6100890bfc132afd957f1b4164cfffe4f16a971a01104d1c47b06ca67a59aa55897f2e840ab414b4fa6cb353a50a1ad87822f521ebfe6a3ea837061a81ed07e336b29c39d7405632207b5942a944b0796302b86e2c693fde7ad551522a4c0bbaad75e20fd538b0a88e7e6d478201967197824c5bfdab5d7430079a37f92844b3d7c36080884bfb9e457ed4fec32f4e7f502ef296b9b6a12b532c3b7b4c0a16d803300e5180250b495871e351f9bcd95d29d9b0291f904671a65690568c2ef55c0c175acfb664a7efe2c6d5153b12cb3ce7266a3facee891badebc097bd61fc6ce6ea2c9776f1c0daf82b7cc52e9a4bc68da616123c1f20eb5630ae223c5b6b97f06c983a211259fd9ab189d18dc80997fe25d24abd4cf2eb17b983422224d0e4cf85f43fd2f745382c489d40b3856d03799f8b58c8ce9f1c94b0dae4f0b14b4fbb1d9b586beb6f17b82248f68169935c25bab78078c5e7432c2be3928b57772838acf0fd9c0a55141d9f301547f885e49bae043d792b19d73f919987d14cb321e74344edad2e4ce69f560a0ea95626725e832b48aefa871ca13517d46095778af6a7903b439b1c12172f5e728d399e2ee7b0d12b73e32e6fa068cc1308c4aaa84f34b7977e64d3c10c6577691c2a13b152f22e77c03d7f3ef01f3712691f2f2a3c18d4840aa4a7d7bbc4350fae585359c7bd57078f87e0d047bc6b1fc5bd3654b13b74fb918e1299aae6d9debf1f1e6cedf53b96e3ed0191d91e804249d38e1fc534c16407ce9880e75ac2a33c65ed82fc73ee51233b324f99c2b42f5a6d73043c22268b5257091370430d1314b334f9a714ba6eeab13f6323c94f190e4ec73d38ab76e421c5fd08e0ceb0f92abd86178055a0b2fcfa1a1b05953dccf673877cd1dead540b9b481dfca4f443c61ad9606da9b92a1307b8f223a8b4eb68246722a504c71e1f7272edff5746fc3def83a4158f3b588db2714ff2409a2ff0b9eaf283efb5a6d970ed872c9d005e40d1a1ed9e18ee7450ee5a5d9e6d1ba0f9ef011b67492c2773ebe87df6ee674ad48f11045436d3e1a3dbab02cf3bab29489047fb25dbf1e46b015aaaa419fea0e6ebc81a4916ba48b6fd3166ee24a534bf55f8c17e871b1d49496545b3a6b1395ce3a95c3e96c2c9d92bea3e5661b119dda84324b103220b0f83b58268baeb742cc2c8e5b2c7b1e1ee9207cfdb99c80381b35b6dec016b2af2c80bea808444456c094db00b6b409a14a4b505b53b9fff087064645b4d34fb73bd7c1737fb43212078926deebcda28c18041d212fffddebb5e4aaa127a63a854e01c7d8c26fb4e7d5c4f2784f9dfbd5ad28ff9f25cfcae205de83fa74832bfa2f665cec0f2a30d8a8d3201a935f341cb844787c9856ca201c4016fa863ed054cdb0f876747cf9cd518bd53f96eaca706a168402af901cb34a583c86c4ccddea804faaa617b618b5ff0452e2ac7f0a2d2b6486173643788e63cb69b19af34f26e3234ff15a52bff13542d20e11b973bcf7fa1029f0ab47f38ef62a876eae93a3457bd4e04eb632506fdc51c176bb3e5b86da3f3d6a1808d107299e6b7e2351037154f63911933efbbc9411692908f8cdde7a60eb3c58df54070fe1ebd92c3cfe449e9190fe3930bae6bbff4e7829e2b102dd2f160a3a7aa882fa5e9ae1cfdce7043562e0433dcbb72654759776e052800119d08ac6ca9e2cdd7568708784fda5ec251241ecb193dc1174c5703e42d039ab331b55df28d112a9c4ef270dde9f34d2646d7e3c087a69af5cd5ffb68dfd50a6e6e0f0eb5e17a139311a0d00058e7bec8c97e8f32e82c77ffcc23affefd3a064c1c4afb508ea5d6c67a911276901cf43164793c621f92686f6d1cd7e05a82443f80373255a9b1ea754c98d4a7baa136ca1ec5be473cc5f10e67c702f5357825527c85ae796046a224ec5bbeff9a4d1726c150f828ab2414291221600a41eabe40035d22b0ec3ede251f7631fac132c12705228dda849d6fa986a31a2f7cda6c544e2ddbc695ad05ad6b0a5c126b51efa1e45b439c071090592a6d0ca0f6b412c6e38f9f24d2e1be78cd7af063d10472854db06544e3286fdb5c4d84b8f068355bb856cb35fdb530db92a0827030674151b3452a51a6b72fc1b5b71fde092372c97dd79f30db186f90d84736e21bd66dd8f4f62423dfdbac437df896a05b61b6eb62dd19acf3664b02f956ae1d920936fe25f98172c2217436dcbb14bf6d22bc5d4634d3a027309942a9b9fa95f58acd7acaa5f52ff71dca8f684d860f9a5479a6dcea0e128a2b7bccce9b37c5e35e77eb526710d36ac8ae343d08d5fb9797eb4b1da2bd8c2ab725827a0fa1487c59ee8777cae833184a776d40d4cbd3595bde44fdddcb170aa2de8edc3a65c399b52aa5640e26a78bc0f8d5b63630d28adb806a6414a69dedc8c70a76cc723dc2caf0e6e4cf9564ac5919c61f69fd6fba939f79cd9e95e63d06888803d292622a0778d15d4636073ef5a1e7c8b9f6aa9310cd95bb866b76cb1b82b8e3eb99a722a691697d9dc49cfcdc78ba6ae967b99a1744ba7ed2ad80890aaea0d73d243c47ca0266bc33de35b768e1e888ed8e26a64e82535af93c643c92e1a5b3edf16c6cb13abeb236db8ffc42f155ff64ce3052c909c8cce963d07be71e80fd187c7d1d925d436ecb3f35646ba1f83eabd2812a3e9183dbf213eeaa35ce5af3ce74280c7aa07402751350dfcf30fb6f92d64cacff2e8f78d24dde4ae1f0fe712cb3733269ff035cfc01fe3edd0dcbbad5405582854706eb203c23384c5e02219c2d9f38c985ac40f89911503874a4f87a120797fb5ab401765de8a0aec3f6cb5407cd9921ddf937dca346c2fc19a20c98cc142dcedb9bb735c55935070f198d0e2ec9c0fe18ae5bef2055728065fcdc2569ad2048928cab945684b3674c6bbd0fccf823c8500b03706f4faecd4e59b0f5535f6ca2bcbb7292d849f60b0308109bdbf3fd4f91a35a32bb990d5f7b40502c3e18030b1bb47345cd97c850cdfe1e55224370004525feb55ee6a2e7173130a4f54c3e7b69f3a0ddf0e7e8dd1f8ba0bf1e6576f31ea2c554bbce7203d6b12b931fbfa6b7a1fec52a2b7c0d2f96ac8ad58ee2ec18a566e3c4078644c0a8b0d0719f7aee4504f20a77967e09792ab70e739373e1112b97bca4ee003986af4befba87013d4465d6483f29d47d1ce1c67c825b89913c2fb4ca3486d5478642d62f4e00a55b9440db2cd10d90ec60a4b5dc3c7e66f5c792e510f941a38dfb03d90a79090405921c3d53bbb6f8c162dc2685ad06e69382671975e04ff823b6b9a21d1ba3e500d424c81d4bac37ecf14306367b4769f29998067ab73bb40653ce2e439cffe9758810c6aeba42021f0dae71ebdbafab5fd8c991d79de4365e79f0b745a06883738dd71152bc234e3bfab283cb08f583f595f617a262a6e472eb4ab00772ef30f31ba54f21aef24110dae1abb7b2113f2c2331a28bd4cf6e5a2ef4c9981d9a29bb55c69f4ebe0108f63f00b7262fd2f810782d0172e28508334d2db696fea554ba690a95f82754ac8d7068dbc5212042209c241b139aaba10eb9b29a44e8911afeb7471500e1bbc7cf93463035b2ef7701102bbf1eb153b7d3004fde4db947b8b8a22c303edf3edfa54e81a059dc2610c93eb756c847812f6b969f3dd5eba23a52b77401e74e2857f46789678c7734198443fcb07b735911e06ceab7a07ae480c55a1621aeac92b56b6a53ba197b3463f5b1672d4e250c6afc26ed5041609ed0b0ea3f1d137fa5afed7f9e57644e9a81d5cc0a7c050bc57abfe79fbd86a7c6edbf9105c28223e4c7efb96fc99d9d0eac7fdcb2741b7a80ab84d9d826a4604bdca3e890e5322e62d37498d95e31ca9c966afc581fe2bcfabc8de9f1528cf8fe5e10270b719e69de515effb09d31cda1f1c237369a2c72956a9ca85ac9918a99b0ea8dbff470a7480b125b85b2476675c6da976b31b59b378898c5df6ab73edae9124517ef0756dc0e84ebe11ed77a62f253b1ce776678c6833aaf0aa5ab2fc0276641733f3baf9b2b2f9ddc4bf22b2446e4998e7ae344df506ec31e20cbead1ed08303fdc0c4d1c4d93627906fb64f268049f53bd5f41cd20cb21749106bf544ba070bf3cca28cfa9e2a336c7438aca7df93fb3cf1a38586b9bd3ef4ecaef3e53a8c17752569568ae750dfc1b6eaded662e64841dc7c4bfb6bf5412eef57ffb2c0e656bbc4af8b37af68950af5a1d51e9041cec2e5dec0257e005c23925b262cf2ed95d4ba5bcdb01e0dbc1c8980baafdafb85aaa79bf12a86bf84c9ea18e173e4ebdb41a07139dcf3d970ae2d3e3380a93e981c9e676b82ab3531eb3856b4b1a203a5e519b78970742df848727e18c73bc51df7df3f7836b324a4038d50523a6e6d429b48e44de3f3035a39b9a1c8b3bb1406fe7ddb2ca89ee53f42484a2b6f86c9563ebca3a5d29f7a74ccd82eb7990e1378b6a85f6d7e337a6166bb512decd52cca4056be550e57d5f8fa8919d37258c655346571314a0d45c402f450679a92263423a7b552abc341f934c233e992b27d68a3e3796f5a0eec50a08e4a3bc22032d5619ef492c85450df2a3a3a0403fb05a05162b20a3bfa0673b321fd2d584f9eebab8f7a6c93107d65c7884a9f760d8a4f67213ac0187cb5d5c9329f61d820a14e012452bc2d4ec62b9fd0259fd41148f46ea9e92c1b9eca0f700ff171c021829cd39cbfdf3035747fb9b63105a2043ea72ba17efeca87fd450d27916c3b195dd235dd079893bb491eca81ae9864eb50f37f97f7c0d80bac092dc1532db31305a24a4a9fb537c4d059f864ee7d47a5a7479b9cc8ca9a185fc3b94a7255055b9cc17a07715c124a475bf72b148147aae5ae5781a6f94787509f78b3d2e2bca0e4d3fd6fc36d530857d380fdbd46fae07b3f3b7b797bb9d880960f1b786347db9021c7245edcee3d71a4f5022a95d518ae8bfea08dd9e9dcdb8c22da04b00d300b45e9af7334b3254c32c125a8b9b8d623ca178319528d71682a3095bae0e928ba84ad02c8894edde7bda0347479a48af912672102bb51de7b0b3ded7265648b7b518fb6e95ad461e719c1158a43e57a40579fae708e319f75e65a1f385c9f90ce92c7df7936eb9cf726256d65da474feca10134284e5cf7794c4ed6f689fad7782b8ca873c2e16d3d5273d9ed76754c676798f8359aba44c3b195f1604a03266d4a61ce97526c6b3ca47979f099a9ddc1d0fa8960f2287d91ba03e0886ed07aeb4c4730f9743023a6389b7d3f9cbbc3d978073ad2275637762d40cfb64d4f6b5704f276a831757716500ddae64552b15a2e3cd9cf48b14087746f1e78d4851871e66278d8ea06e6e4e5a77ab6ad651c7cf33df18736cd8a3e132f5ab77d11d54e6b24bde112a98f7dab4c8031a1407468e01aa0b721197b080bed704ba8ef1966069c2b651ce3aec37d620784d672a8b248cc5a0b8c90f4da76d6ae2935cc1e4d8bf691221628ffdcdbb90eaa8a2a5e4517cdf9813493fea7790e9b156c9b081b5d9a9a57040d555d54baf1ec9bfbca643eb43a444fcd991a81e8936879c2a18f3717301d639233caab7b31f79d0f54344542340fae66b2453b6478e863fa9138c5df6ecdb834af7acefc98f9d4f9da77012bf2d5c31a93331c6ae5d2475efb585d74b0130886d2f15fe75f103c0b159153e21a0008c9b6730e0c61a18b5034ac745ea8d799e27218220104626942135af27fb2abc876b0231eb0cf92866a70157d610fba6a6f7c48cd38641f363a8b0f6776b7c597543f1b062755247625899026efe94df59f4b6cd2edd64acb74a63ee226d59a45ada514429ab7428709cbd00f4b86d55710283b78e6b006df0e78a38a63284ae636ed0bb3d53bfa0f1a1074d602250a21c899eab1bd8d0dc456370c3fac6dcff7e7c5d94e1bec18365488658669e3e4b17b1b31442abeacdc65afc33939a276073206eba7564bc07926fc80bf4e26cdaefed03034648749d0a95f21ea09a8500d374715bc507bf0270379b5853e64b22af486bed4460a5c24f7395c8fd132af43a6f35e1c86a318128e3ee4e04e0836aec635d22e770a40abb21fe40328ac2c55d923a76113dabb285086e098fd845d58f68092c53bd719f07c91d2578a23b61b17ff87e37a5d0ef22456a5d039bedaf99ffbd74bf2b7515e9e2cfbe831c828dc74f1d1380f0260cadc59cd6007b6d1af9d57d1cdfbfb05f42174d46ef020b6edf5861ea353b85e8e59ebc0076b6b14ef5041bcf086ba606150edd0b9f4bab75ba2c154b6f6e932980e736080e3448568c7c1f33942e401aa207fed9e5ae4db23b89eafd5a042f6033f55e4053597532c3cd8ba4351cecc908e4d80092b45abda91dae90bfedc55ccd60a479c6c635cbe2f08ba7f0dd14c3e69ed86a3590415bc5edf7a3832ff60b4c60817b345c41eeca43bdfba9fb9fc021e617b69f346d0391eb0eed50915fd4fcafec48b04bc42549133f164601d906f060573e3b3ac48631734339dd3de71f6c9bce2cb4d25d8604d4809f2d219c182db1f3e1307bfd27c99337279bfdfafc88ad480d4828365ee1a32e389104e72c903ba8ea5d2bc00e07b8b2c074a42311fbb584e45c493226f6c262e85b85192d6b68ef3efdfc9c603f7402f50bc72c0d7ed1e8b794117a1d413ecd7b2808694e6c6242ca69496b6ebbd65e6d2c6986fb82bc06f99cc2ab299ce8d25e23261ed282c82500316d9ab2a8c73cd45c9f3e05acaee0d3c3551790927dc32a1609b6d6c863183bb48307b489a3b58ff827aa65c8d52345b40d28faca41f6a4ffab9f32893b7ecdb124dfef02845268b102961d2820959de8ae297f6c6da19843844c8fc5ccf6f38ce06bae477935b473abf9cd48414f80b13066ab2d842e66d474af3e2170acdc770fdcbe410875b88a6680f2c9a995fe7c0decfb6af93c0d7e3cbc7802489480b548537769ce1122af5c357e3e88163f569b6f8da4b4e0cf379f60902f797a59ef77726d312a4ab2bfb8a9ac0384e2f5e0dc4c3c40750b9ae9453de8b33086972ac33067c102c62945c455daff8083d76e6afbdd29162aa1cf02e4ea817ea76a40da77db6a16afdcb6a6c147cf46951749b8fc27c11a97a0338f431e051373e35f62c4f38e767d4082a367886b9e638089a6287beaa5890bbb2897bee600ace7971fce004393355d0638117c9af1308350aa997669c115baad10a04cd841513455c410d5da4872c7268d91cd94ef7ca8ec2fbcd0a0a3372cdfd6a9d51df25413cf3416530b348b2e0880f137a07185d15fba7cd4d1795b76091b8b0ef622dbb9902897afd0ed69c42d5669a7e5ffe6a5138f85e829abf3c45cc605d38861c6d71b3d68c36330a5393c986a312d6bcbf37ed44b7c7b3a2dfb703a792195ff8075d5a180abfc75ead5cb501654f98c15121dcf33611adcba50bbe1be024f84abbde27d97f9e535b8dd5aa6fda79bbc4947cf4364ae0f5d1b08edf3d66b7ced6623f102249e233e1256a9700d00adc9f0151f8176f402b3eec280f5c7b732b0c5ebcbe91b57f8717b69642b80e8fb82ec1807031813b31cd12ca1f32fe98bbd9f81a0896046e2de36e878f4d50bdf5cb6dc52ebef5817579cb91eb2eaa5147b34c829ce761f39788546b2991def2a3d81a9720c50e49766422b759dc0cf2c561f2e09cb7ec158ab46f201294415a597fb288c5458d3525f0ddb71f6db3cc529324e0cbf4297d8e67031fc9d746714cfef6501ae467fa7a3e79d8aae19a02533a5ef2779f712d4fce8214763d6f93da517ee1757fc14bcba3eb803d20b4d148e78de172021aec61a6eb778674f9284ddab40c27c66c5ab19268d74df2e49029314ddd756f8ec248245a8e8ab09378c76c3e62c1dc35854edb3468ed4364b6d1a21d5cde6f4d726674fe74fdd45d93a6ed4432d34bd6a0c3d3e171057649293813b7c7bb165674218084a71bfe1aec7b8810e51bd52d1b3473ce60993321d3861b0c48edfe9923b63aea7e3f352e29a2dcd28ace1a2ebe522d4b08a0414a2e469114cd5be67587b7c09d1c1eb49d4f34ef97e26047d3ffa32622fe0846ad0cac5f94bed8e495a03425c525a4384f577b424a84fb0231d5604190fa5116ae3011b1bcf59438d6c3f167bc053ec4d6cfb36b334f4ed800a31eef12c3b6659a827fae520b5fe946398087782bfb7bbeb98f14ad35e718f8367d7c160bb2a8a744370b8888a69dc30fb9f99ad7abe31b1c908ea24942d4b3d5e2632af1da25f83b2cb205acff525afe17e373f7029cacfba0816854c56e16c4af4396439f7026ab593d12bed3c45c0d09cac6ec42f62267e470b01b9665fc96cdbdadb71000227dfe1796c2f1c1141a71a7f055803b4c4c16d8581761296f361a532461ae2d72f16ab1581af72306a5e7b07b261c743f213bf1e6086cac8f492b6ea59ab217234b4e1e8581d87b80f9b3b80741c755bb79de840e0b4e8f16e6b1ad6262a42639a6f765ac904f769c2627396fc16e88bf1c6ea9d4081f059fb29525ada5842408b125c6e719d08d9e69af33908f64dba487610d1e12279c8c04f17ef08705bbd84b5d03d1c9188b5930abed9f06f78874582d488916a6f4640baba0b2edbe0a3e1153c62871e9e1d449ab3afef5053bd17f381364478aff4b98a19bae88b3c2da88a5dcd4db791fb8fab00a0b729ea16499a2db6fc26c2a87f03b2ee73ddf68ce7f99ece67f7e3b80c541bfc4a87ffb62f44b0cdc8d857d5343e7895b7f636f554ca520ee5ee812c33c83adc43f07f21bd16e363bc5e69dda50c1bd361d1026ea64e38354fbae60f7f1119aee3bfdf5829df50f6487172ff8b41b910db8f2dc4835e66dab14fd830d322dda5092f3b57f85081ffd2587fbb8c2268f06d1637375bab6b5bcff01327ac3668cade0045d77d961d44f5792f7bc9fc248d6cbe7d296fdc23c4c830fd7115d471c5abde115bd16c08ab414ef7e75643ef381c6512cacc1502a5f1eeeeaa6daeec804243326446111a48ae883679844d7ed860f01e45e4f6babb2b25c7629f69e96b7e829830bd714c805c63b56aecf147cd852f327357b8eb0f3a7db991036363a94d21d8fe35644c099b8ea186e47ecf20cf4c11584d2ee68c6f00a1662a6e0d91dee99940e4f5aec679458a6a24e28f8c40ecf0fa6ea9f2856e665bba3f6c56af712e68a8784fb8228edbc1deab99bfc4865982ee8973032e1ef7bc44cd86519072fbc6b1faf0a6d25a9467394cf1d5857183dc11b00977b0e9a3d5278c2857f792ee1d8710eb3810ab3568ded861d247ab94144034de591cd29e6c1db88ea8da766079b564944fe09fcef592b9584f80047c71f60acf3a7ee215977aaae549d6304a7c8b83e9f37b2bc6ad3decf320c177d8b3ee5818d0af8ec7aedd7494c486296d7cdcacf83495558d4c633499c5b29fb18d999f7a940977e5e469bb1fa91ed5d894fdc233db22f2a64dd17a68c0309a2d98708595959d4de5a67db9ee430a626125e17fb8ad48f89c053dcc32a5e64e51dbd94ce544744adc57d8e0fae00f4c44be27adb45081ac687d95a343daa87db2efa5cd4a166e496640766f56af3d1f6836c806caad7202f5342ead223058c2c3f1289da133f61d45265eee26a3107d00a9f9d8c25e30aeb8c472d20841c9fba3561abf22857f1941ec76470186b377a811c485d97c8118376fef564198ca5559c3203490071b922bbfc4afd8521031eed13765da3b64bea0728ff2da143d5a3f72cb1fc2e9367a1a1b804d03634f63161b6cd998fc14f1a8d3940c6e73cc603020211d2e10964b1e4af946d391d510cecd5f3d4bcc7b479c70ea960337ef3fb426eaff9b845512270d36cb677660aa19753bc94c231285708f6749a3722c7cd5acad9d6b80adb6afc25ba6332edfe1510e89fb2b0f7e3a4c7e92e3a588fd184535fabc304e400f4d8e6b228e461aaca0b53889a35b8a396d4c7a1b43c610fb02dc9fbceda6fb5b8672e85cf08a33b54cc266a26ee1e3d9a73f2d9887f2692a6b842cbaf91db8add640519a51371a38598ea0d3744357464b054068c50da463fd46258bd8313dcd544257a9425334f2138b6f26be31de8a72b38c289072f8380a8074974d51b7037edde73edf9df2ed1b605a847fa79f37045b9005924411d1a9cf63d298d5e6b0fd2598e7856d407460bab1ac0dc5819171c59e7b59bdbfcc2b20f342cef36241792cdeb412111b0a6ee545a03f3dfd83cdb952c0886bef159538b5cf4a4b411c0ff629ea419a5cfe29a36ade4f0ae3a3d67ce2c6e9b92c284d97a82bc4b45a91e40a1a049bf3f862d11d546014145db91be419a327ee3af775bcdf9d4d19058b9e0149ae4c16430df2943f35a9aca991e274af5a412054d2a18e04894a4fb22c994c7dc1d8cda8c6f54f2bd49c3ae009bbd268ddcdf63c080493a338c245a185b193e0c0c0bfd4a1930a12343a867cb2b458149414eb3afb49ad223aa5ca690423f3b728098a22dc3564315ebfcc19e62fe2ba9d3425c71ec2366194565d87faab1e08bf15bda9108ca05a2272206a833651b4f708e97b5af0ffd26e65dc59154b978ed3e62383eb3251e430920ea5e892d2f901ecbb83b34af1dc2a2dfda68379ec1c1dad061c82023cc5992c3874f1eb2094d28e97cdb9145219a856d643625408183fe8597e46ef783f50067cbf7558dff71570869b0395dd7062f1b5ef7654739fc959b2fd87c912a03d866f8701b5b54fd6db30539aed0276376fc8b265bf9fd916c09eeb64c79e39772204d5c372340f312e2ca2bf19d5d1f1be9a47c85ac33dc0d9cac6a1e382c075ec3fd264d4dbbf03b4e43b5224443653607ffb94c0c3c9a4adfa6fdadea21d5a5958081b8f624e529b615c20ae339cb5d5dcb3ce430ace9327786a60ad73c9ede17744845275801a63939ff29f849606b29911262539f60bd54b708c7dc9b0c354fd2f26b0ef4dad3b8762a8efe717fa03a4678f00ef5b52b6d4d3af48be4bb29c9b4e30a9d7a87a6a321b8ad1be3755a3bacbe3fd0ecafc4745fea8586df85932a62100415ad83ffdda44408b8d690d3c705b80e480a6ed2744422b5eb49f4fa36d3a0b63f3693cb2850c1ce81c7812c8807d12572b6d042680162247f588841b2544baeed6f2ce93fa89454e8a417723641a4679677da8d0dedee58ca0b08a6286fd655bbca2195a0baa0e3a04a10ab18b36ab3a4588c3455fb9b17867c43da9b23a6889022a6636ca2dd3599f3b49848ec9db33ebec9dc0638a245895aafe059b8f5d251d497f8e0a78758c7dfc6303b722e4fb3d33a1b796e550a2bfbbf7cce2934579a7b33c3499237133c2d8ef37cc828f01046b48c0b8b064a8cfd521e79a15bdab79bcb332272a7d5699728516673d591bbe9d6a54f00a89e1b2f452acd9a91941a1e2900ac04161ba5b66ce74ccb56fb3ffaeb26e0d9b72c777792a6e1a6a2b4b4c342f178377ce6519b6e28797dc8d236045c8e6d7d7e5a118fc1b98f08ff584b5b6a2b1734d90d33292f558306e1d920c3b5b2cd2700a037f7e7986c3e2ed538834a9d6b764db44a7c5cf5307ef1e6d1d66052524e4d6a87f64cbe483f7c8c8ec73dd506e511ee5cc1e202b03051a7bc1e5d0250097591e6c07374bbcbebc748fd536ed2e44f4e320f33a3c4bea894e45240637f89e66949d254d6d2e86a7ab3a02008c17c5ecf4c6c4a6117dccba5e2187bee895ada2eccc08523d56fe41e12f4b870a9dd38c9ddd74815ceececa5e0df3eaabafded0be917da3ec4b05bc35309f0e351fe05bdadf9357dd8b7dea1a8ede3525ff3a95f75e7ff8b37e0c871f2bebb1a49f6753d3b9d8cfc6d2a82d63f0abc2d5a1c163ac55839711a8945e439bb7a73351312cd542a7be5e0cdc9446316ca29dcacbe5286d151b5ba5601f52394cb43d41af27a50ffe344b0708b2856e6f1389472b522869d342362419ce8bfccb2fefd14d09952f6da1dfd98647d8641acb429419948769046f1d0d99d2d4a69b4d796b6c4fef6744e6d709ecf06d39f490e66ba7216e45e3ba5f03caa3697997e2a5900e48c65e14b74c6157d11948de977ce5073f539c9f44a91b247bd54321a5c1bbb640aab3c2e9e342b42db6d196c0dff50409a8f94b4895e51b64ac9c41e5836060c0336e1320986cc3e74621114cf2877b2093fa685173575a36d0a363819589052dae85b9b4be18fa8b089cb161d70e3d4215dfe7d06bf14625adf5a6cb45f88a7fcc46ef9f6a1e6372d21f179d48826866ef4448263fc21773b20f657e66c0a821c4109b720d60e4b8f45dfc407a14c8b71ea01b49c0bb7aa20c03a9f6f33d48e100d694fbb8500f445e681ad8da706dc70e84f106e8b6e711178f5d76f07933c2329973a647f4584741da90cea31534cdedf6a934503a1f7d0721f24e2a3e36eaf02ea17fd6abecab3ffdf0e296cb4d426c33d0ec9d1729127029c9e55d2eb50da73049964ee88da294233032ccabc6dd4ccfae2eae9709f97319f92a9167480e537c3b2df8350bd2265b86918a60478674115dc8ae048f90c15d5f110513ee7c992fbeeee81754f7e3e294fbf9afd589c0e900c78931e483ab105abbb853f09ccc263f447b5d9073cf8ae40715c6c7d6a5f930f834531df0fc4c13ad4a3ad766c4ec2ca9c6b4b9ce9b89535ec567429db5a2bd4755c671a36b3c775d59eb7534cc23929764a2a4daa0694f19db5728e0b237e2c095f551959adc90756f2305451cf167f972b79d0fcd563c52de85fc1c1dc2670e09a51daa00f6a21c3bd26cbc779f2eb7225af882a254f1293ac8c306e28df80980b6fbf2765a59e446a9bb62f60235add08d9c2c94f6bf87a29a753efab7e6dbc673f4f4baab58a876ebafd7411bcf236907a1f06e11fec119c7b4913536026cbe50a881d04cac2be096c849589676c97e31298e596081454e54db2f097de11fdb4d2dadc0ea96a5c9e958cf7700f286d771e0aefcea37fa8468bc460e4b54288c3efbf4af66a0aa284065eb501002907a8971183e0258da414782b9c5fe9399db0b0c881c28c0671aa99c1f21d3a1e06a5cf929ed89b11dd34c4fccda88c6c61de563e65983c48f96030fd18f1e7e7a2223501109ab7944e1bf855786e08ee8c41ac21f6b15287355820df9d5cf9bd1ac62bd38827bb289a8fe7140a047a16bec06be1df54926686224ea1879cdc31eb97d5b814e299d1fad25b98450da67e427cceea5194294be43ddf8948adcdab39ab7cd00fbf37e6a13732b48916165bf6d8523beffa191c3835e6c329c03f04a13c76d7a87d338d599195651f01583fb14323f98de0f9331c02cea52c7e4a12adc5b3f3b49d4a5fd5bf7b6f6492bf634c3857e730d1fbc78cc382ca418df863d5c94de33c872d7130f5cbdc961b6c61a8dcb60d217f0095a97455b97cdc8aefa1705b44b89c992d1ca3d5368fd80f620e8822174de1c9dbbea1d043ab9e3488cad2eb5b6abf4a9cf0105e3a9d52a1d20f238666f1173e284f7783e512ea063703370a30305a83e31331cc5717f2283900550e3f665cdc6e20b4a51d5eb386af47d156baebd0c08d2c9380d49149c2076845d50a0adc8dc5654c2b1227f800c59f833644fc0f258540a6b6f3e07b317367a8e4aee36e7fe6d12cf082ccec5acb0dcf40e3b73008fba0ced630174647de494ad782d679c60551b84346637320b78c02323380f962177f1560997accf91c8aac6fc64c3e7b2317ecd287036467de9dadce8c3cb1ebf9fdb7dd6e88afe78887785ca9cd4e5d6edda247789669e6b74ba339d312b25f68e01d47bba159e59007888f66a06cd5d6bde6fb511c6e246a5146b94c78ff43e98dd813d11fe4bd68dda30e1f65e29d2b9e9b6cc38e7505bf98da03e63846fe9360e893c79941d7b9ec4291b34103e50689cb0a3322f6fc22fe69d23a8978025da2221888dc1d4ba90c69cad2c3e4e455791f3568c1647cfc2d65014eb584c218ec1dcc59b66d209e06efd23326d7cfdb66c713bffebca964a422898f0b59797defe5649c5c7acc44c9ad4f3f7d66c7ccd4de32341b63aeff06ba1a5b3d2debe7e5de7403cf26c4117cea5a1b4e8a73fb7f72172488b47c183abcc3588c72baec32c8e481c02476a1744d782086a094c7a51aba51da4573b9a11b9bd0cbbc0cd3f59572c8b50ecdf11f09503a5a8621c1679c7a1569a91eafe27e50105d0416c607d013538c223418f6aac1ba5af0bbdaa8204c57f7b24acaed9cb1766d74eeccdade4296c159217eee43e8bc3b1d21b588eaa42749275517a0058b35572fa9fc07af798a37a7b3fae0418a2f82721822475bcd2f29e35b190535ed0761c94f52885c8651785d3a65c27bee333d1c1de7ac36e4e9f06967474cf80f4b8ac1e2e225fffc0c9a7e00cd3ddc79e8a440aadd4e1585114edf0fd02fc52ff4a6f98b0ea9aa5ce3fde96723362b9a78d070684465d7fe268d7a8bae54622c814a7fe81817b871ed22c273a7b064e9ec9fc3383e18e39620a0d2732f18c905d5ec62249fcee4604f7d56eab8d9a3e7ea6ffe073f3e1ed2bfa522c18ba1534bebeac195c9a3b044e42fa89c8dd4fa0c44ed4396ceba3c75dd64cff40b20424716a416faf7907568abcc20a71ffcf4950301ffdb39e6eb5163261a4bac96720ca6fd5ff26e429e18f36432c0ad173b4751c9858c7e5c4c5bfa3f6527c68c72a1a7ea571aef2049c049473c5cca7f2f02b29530cd68220f30cd797c669bea14094cb68a2f79f877d8aff9b5e4234eecc805f0abc0c546a07503c83234df3a5f5b52bb2fe1635af15669cadf9cdb057e49ccf0958145adfbbd175e5d4b41196d7784256199cd0d301dcd787769e8d0c74982b10dae2e503f1b2df05cd2e453e2d79b4156759c94ad484d27b0e7c62cd8c8d2c23d4c56c1cf8dc318aa37d3189d0d40a998da1b8b8f7730ac38e5682d0af89b29154deaba23e3cb1e3e10205635598f5eb96ecf89752075c08571eb806fb5a7505b8e5c904a4b7758db5a7e5b3076522936c3dc224825935c9dab5fb7fd71a5088bcab75528b538bc4a0e5d90d807e57b5fd704124e960d0ee53d3be43e69c954f99636822b878812ce7f9580bb911fba7785b840ffa699f5eeb51958cf2d01dcb08a9bfa5488dad4584829f52f29a46c32fe518803ea3af8538a0b1d7433ffad2424427caf1ddfa74eebc6859a8aa592565f5f9a6155ff331dc28b4cca9d91b84e660e8d77ae4da0312fc7b957ec7b285f2f5248da80c927b97433afdd6ebe43a1ca705b75dd1c7281a3f3a67bc4b3ad26b2a74ea8d01c9c9aae42861baeb038d6464a3ff122b71ec022aee308a52dccfa50ecbe51d1bd6805aaee9d022a1286bac1e60cdaac49faf0dc36053559b353ec622857c7e739b3b7e979911a591b19c3ed39f3615bab88379eb9751bdc41eb835f899f12449cf2fc632adc827f62b2c8dbe986b618f17352958717f69c686b78147f961360878e781933fc70f79c40ee2c7418253fbf56e0631c67ff0b940e9693fab2ac76f66a5ea5b0fc05805fffc310d5d4b854a3ff80dad18428999fd28595e505f8ac01f054ef834aa909791e887c4c4b882ea7084c252683b3a17c70c914929f5ee7f1dbcced59566dbe0bfe8e3fa0a72f94ba25f59f83b24d9760a763c87c71bb403b3c03da1da3bb701aab3a7d9466b36506768d9cf45862da0476a1ba67543271bf17c148bcb8669a1416658ab9f47836ee670c7edf0b52f3a8714a1eca21858a4d26ad8d3d9464cb31879b0a04c51c33707a09c5bf2d5469bb5bad9e6363f76052e924268e73efbf02dc1067035de5720338c2eeb02483243c0759a0829c22b1d2c70be3b47a3625b67f06e2a4f9c5ec77a20a63e7e6ab487fcaf0a293d3a37a48dbf60a6fad050adc0b223598091a521ce47a26a08045c705d38cf84fc8ad1a3b3e4f3048d13171754fb97ffbc7f30f4f6906b04034e84bb9f1d4ad79b278d73f2771d37a5b66a86b51c0716a5dec08cc40dbbc77881a060178cd8c96a747fa81d2fd63c03276e107f66f06c95927d6ff799c9989bac32f1f7f3d589ac9a50077a8b4f333f4077c70c6856b133a2ac6c1f3467c2bb7e9e8d12955c98652f8d853222fbb1fc8d01ec3d74fe8f7476e6878f41f43afcbc5b86d9d5bec08c10e494c541737e4e169a885113e1c807bc232fb2dfa503f4486e17e395358cce9cc31f8eeab183b3ba6025a8296ebd6dc9d96e8e8e7cc459b1f82bf9fa2eeb796d30344baf5a047ec6351137d0ffa6e90de9193afea1046cf684f401746097cd8211ce8ef7142abad48931da11f97fc1fbbd1eb3f7a4850062fb243909c2fb8809e73ce79aeac434e5e1c02fbc50f9c67ebd86b1bec01e0b088d48c5c49f1fcf2388d4004a630a06c1f692a0a2ae9d19fb8aef684ce8026da31e869d68f6b7c8233381b7f2bc1071b95d8113a2c64d197026f3d1dcc3ffdc01a257974f1c883edd90ec95d881135cb1e3abff8b4965c4deb9d448278867ffebb0457e593ed4fa3d9a1d0eae031576bf58830ecc3fa19e5409303af0a7953eefff858861ac18ed6d386aeae408f9cdd8c8896ec5a37160f733afeda36588335e886aafcc0b42ace021b77bac88da6fd4406d6d3adf7adaef0b1e00a83c9789ed5eefd9fb9d3f5b3d3c286213a8bcd7eb41300b66aa086b9c48b2e59397dae90889b70c11b1fbb1be0ac6a0c74dacc663893874b2788f4c09a459de0b348c55d651522a688747a77527be7ed4850c0bc58c4e1acd197ff461565c833839088dd19e44bff71b21f3a01666cce965b8df4d91691f2bd47bfb9b048ef9b3cec6164c4d704f4915a1a8373c580c1122ff26aecb2b56aee44e2f91e5054d6bc7028d701019326691813e5609b6778729743244b689d98cfefc160e15753abe9acc523e2bbfba4565dad002dcca11df4106e8829abc3b8ff04c325ceccb00c8cc1601945b5d7a32ff048b5c51d1a1bd0bb792cb2f65665e621408865d2d1811e83844f407706dc3c5bd0d5e9ebb35c090b0c23569f3ab6ab13dfe49f0ffe3ebd1374198efb129c1183e4a96076aa8488209045d5da2641d5f2c1374faf0609de2e05d487aba5c72c60de1516a4cd0832aa8e6f7bffbaf6450572be615cfc8a5bcdbf5e96c76ddd23dbaa9d6b5bc6b34148375efcecb72f046c62b8a7cc7a796d9815b6c066991dca3d2c2ca128b9cfb9c744ff23093e9d63504edb41a78e7dcffcf89bba8f41954695468f81bfd9e231af678eb0895286b10dcc3e1d2c0b2b0158c4be8588006cb96e4bdcd8c58c0808c39e4af8716b5931fe92ae1887ad398b293df59f5e8089809c591379d5f6d967ed91ed0ca025beed38d567666cf5b00dd58463648b3797d9ec82a818cc73f13962937bb066e44df5ac3caec6db03ba643a5439b60ec113ff1ead01ec7f04c78d42ca527cde1edfba89d69060471c27a11c5556e551c8669ef05a99cbbbfdff6bcab79ee9848114c5cf5329f2ce9d8a2b744e1fa9f9347a8d044b965cef70f78b419475d121ec96ad0db3ff85a21c9cd975852599e04dc0fd341e1ad93efacb6f3422add2fdfe95d89b7c3cbf160ca30067cd2b98bbf04ad329dea6bac761d720e319ce618d6c8aaedc3ca148e9181819ea626674a06b6ad5a1c8ba9eb1a57a1be16a5b67138efbc6b3a874557076a26930506e4f1263257f9dc0fca1d0fd87716ef6c27e00c55a9c6014fa8bf2fe3737ac001a8c1f4009096d8ceafe05321331b5bbd07232138ba854bbbee9ac2311e81ee846c5ea33d0c0a24c726756aed2cd4234f3f3912bd207ce7c1c2fe083788e173b7d81288bc08b3fd57370d4b5ab4d0c24237dca663ad07af4464dab3d284792fdfbae55382462cb9872378758c35a03ffda23952a7a2259b2a2e0b249996ee8d4f6b64919479c0babbe129dc86bfbcafa437b9922e11e4f391ed93bff129846fc4c351dc97947dd549def5fc5d4b0dc7aaa520d816a493e816fd7a8ee42a1bc6cdd4326ce8b48330841a65523b877e2b46e7312b93855c8ed5d5bb94dc1a07f4f1ebc4bba2a068b79504cced7a00b710194a81e18ec23ce3ee0c388c9175253c030e5522caf96cefacd82f2715a806ceb6b9f6c00785a82e3b9de80015c2fc7fcd71eab0d75ad2edd465a8b735c0d018d5d7cf948e74bb7086c187710cc0022aa9260fc33115a46e7854cbcdf0018fed3e160ab578b7140e13a8b6adc73df5ab9e40b4610d6d510ba400912ae114bcf6fde411f0803e8d5e9bbe9b0381376a2550eef63d054993a004f894557d7d9994e8bd5bb781c21e1afe5058a084d377ce00373ddef2df67dc13849ecba7e893bbdf13059e9bf113e722b9efebf3d4c914197cccedd685cf025983cc824e9f597b3b0d8aed581378c1282c7c84e5152c00e8896c7aabd29c8251fff92c206f277688adef1ff67c0d4037a43f01607495841386ed2faa15e388e4f7a840aa5d697dd4ca34e009890e57f754759b3d5dfb68f0feac17d0d6cfbfa0a0607d68fb3b425b7c5c2bf9f7c05a6d36ebb15629b77c7a2b0d84ac8ba51acd99ccf295f7e7ee8b4e3f9d522279168d4153fb969881f35be1b6877dbbb40aed755781533e8f0c40b67923be451a4a574774b5dde383ee771962015e92280fd4045b39b435fcc0406c0e45a90fa84278a23ad6ac1b23fc151fbc6fe94dc1f537f826de94935daa7f3f8458e7eeb40b054b9c1dcc716edc49113859ff39fc1bf96bdcd3317863f7c7d78933cddb55d5f012166d23dea602b46adb43532105145e3a60639c0500bf9471ceb6201ad8432035d1253dd6bfe60cbaad5b068005d9dd3f95a8466978279a789546dd56020e3f9f2592397d3ee6461bdd42c884ca61f600e44db0d295d6357991759ede4f61e263214027e32f80cd30ee1df4652b518fd9ae2815e7a4b0444ac6861ed16daca6ec900631b212372c465a6598211b6b72b43156e70b319ccb8a799641ae4c6e3a1fd7f5c84ce3e1c276de75b80c2fb5bb72d57c8d08a99d8cabc38378813b9cc50bfa045ba85c3dea9ec728892af9811bc355635352df06afcdb3c3c8622b596b245c5754c9609ec717f92139e127b6555c964e86d9c8ca23ed6de16a53e542e73bf9530ec2f0abfe082731e2af3b1bb306141e271fab1b1b4fc120081581eda82d91b03832eac57965a3fa9a66670548382ee49d67ad4fb1d463163f4109b601f56a6fb0886f58e2e653f1c9135dd3d256c8bc3ea88cdf4664b0e245c1f573382dbf5ca3e53d2a30e808e841b59b174c3bd65118c53aa3874a0d700395b7c76e496c04d2da4e646561aa31c9f92fae6630accf2f56221df7260f2f0eba292234b561db85ab3fd62071299182d2f688f3c28178eeee99364439679492332c362399c3d2f9d07f277e671dcd04a6e49a7672545cb5c07db014848ebff79187410eb2aa557567a3556d7c622d49ba640e8815de01e4a722401b2d53ce939cf5d40846ff2c18356416c439be9eeb7ad74a55234889936af135123bc454e06e1d23631ac67c5db44e6816baa9461884b830f7b02f706e13e839fc92e2ed9d177c0e0a9529083ce5c0c9b215ee256b996732a0beb2855d8f102073304d0361048abd97572721894f2bbe576dc66712b2fe68acf7f4057b0e589d715bd68c1e7b4667705d164237a602a61efe1f89c80957b8499e03d685050041b4606be7dc693f33885da68b3ab1b5920b7fc99cc1c3d5256eb6bbbae92b5f8e736318795a59fd21057838f02a8d27a957dd3119e2e06181ad06bf9169123372a46a1b3b754d7c0414a63294cc693d97d6eef7020cad06fd76e6119cf2a73bc8e0779a3e53349bae10b802eb4fc08fd0f1c1d2c602980d0b076b0ee78f96526c9cf8c7c2db60833590c4e7109c2b6cad8b348c4bd652f25524926578f9f4b6bd23a4c590791b1605c783aa508c5e09841c78425191f03f5ee4e59237e2eba162d39552a25968d8c97d1f56300919b306ca6b38047c3ecfab90742c1cc369b0b4d9254e9163afda66523ec13776a26357236a76acfcff9ddc0615cad8e3e0a66a443679dde1e571605639578f5ca0c15ea6a60eaa50c778999222c49072d9fe2465cb97afc7b4a8fef32e4ac9b7e78baa112600bcab6f66eb02d90a34ebb219a6c335f63d8e9abbdaffe1b1baaabcdef4c99293ad7df55fb4c2480fe77ebdcff89258c58c33aceedb50866f1aa09abb119950a2f7d5bdab001a68066deae72fbe76a489e9e25b293db2f76f9ad7467a5eee14164e0325915afe0ce51414a8c41ae67ff729da5046467191989873656bd408b0b164798d67bfac6aff8e515c8cbbfac5dacf842113eb450ff393b139d2e18037a53234a2ad8d35bad86a37763a860583232ce66e7147d656064d5967941b8c4e8b8da577494f4f0cd33f7cbf0aafc5dbb7fe1caa1341a4ddffecbc7ed854e124d613ebe415ed87fbf552654ab475d4d669dce3a5485dc1080ad43883389bce93779290ad04f55b845c0e7a76362a881ee59d7244768d3a14ce3fd547f5e6bce10dded5da72d352c81d84ac77ea7d32c9f9a6d27f9967d1b9c735f9c2333e91b6f66c2189e8fe75c57e07a3379d3774afac860adeb30b63853464f3e5011af063771849e7f5f9109b199c030fef9446ff6cc6b0b56fa91aca20affd58c0d0a7aef7074bb7bce046d6fb34f84de7b3a29a69298b0e70352457e457dae00090a3a181c9596a76da67a630a34aa9fa7e3a49f5c9f164fa3145358f4bae19ada6a07d962ebeb329337c6bfafe7234a9aa9c4eaa22a3ffac78a02e09f705416a4e3bb08151882094061305ddf3fcf32f810063c7fa07e4a9794a731545643d733c20b2a5eba44503a1115015fc474a73334016087cc6bd7d5d991e29671d732a1c3f5a8a2717ebee8db2afb0b3cee3af80960abf47d7c60ac0c05cf54e7d031cfeac8b9ac2bf7a668e0308b7cb6b2b31c2ca571b041ecce168d8e0e0c8af9156e049068a54407753a18a4e701c11a6d0233d7cd85f4222e9308aa4b8771f69501fea0e3a290dfa5e59648fca7c0344436d678e1130ccefb77da44ed387e7f33fd18d0d9f51e70c9b3e7d18dfe286be206207effa8e881fc8d73a624f32947b95e8a44cefb2b98bb3e322379eeb23087049b5091abbed6a579af075e1e1c71a237847f83de4224699791bb478a9cfcbb5ccc3e32d4d0dd08d6a3ce2637f613d2e0b65b8bf419dbe638a0b47b67ca9803f39f511ea9c36eec60232efaaa4097c25bc300adde52e4c42576686bd43eebfeca4643c0ee2750fde7ddaa1580852891d912f0800cad337ff6f436c901b721e7ef10e1a293779cf774256285249203b3264c68e3d90ed663f9184f2b083aafbdc5fdf262edd93b9ebf47f00a926d7b99fd99ff0f8d2b9c07e6d29be8a14309bf63f1945aff78b3e6d094f620d1f6f5ee8d791fa2a805c3b10758db77e6ba7bf5cd6937ffd87669290189ad79d269402d88678d40c9d79a9bd7e715c68cc1ae7fc445f687921ad7c203f97ac8fdbeb05db9ac48b6ca9963dcd232a2abe034c81254ba3af25c718105e7b8de9af98fdca4949cfb502e419e5c0bcd7b8a4acadd10bed22a6a3ea446096cf21e9fe4913e951f1c460ec796722db5d16cb957cb035a1732dc331210264fd169808ecb518cb129fcfaf8f78315b8eb80f0df7e1953be3aaa36f5a1df2dfcb49ee86a965a920ef099953bd53144ec49b2be1e49bcbeb3aa3838771aca159e291b502b8522f83d1c6d60a09c6e663bb3dd9ec9034f308620e7dd9d18985e5a3cfb6a73ff953fadaa748dc7d20d5070451f6d450cd94e6fc6a35d91f3274b232907e2c06f95e596329a88c1647f9fe6e1e1d5fb67ce5eafd7e6aea3f2aa3ae9b85db8fd6a3e64be0da71d8b0c22b09bf8491d17fde820d2aed96312ca18307df6bade0cbba87ab717660b64012a34bea436fd01aad95cdd671e3d022007d7ac058544100d3d1c61a93312a62b3127280792c0f3e1fe33f60b9efd6c4cbb3d332182bddaca3ef8d4765773374494d8d7ed3c20a16aec95189f532658d04a8074f7f3e736550955ebab5c57d26491ba3165b98fb6b1887bb683542123a29cdeb3f6d4e34d5ced292fe5d15202a44db22109f2c5ec4926a5908fcd2e5e31da260d46953598d8b736ee621148fd6401b3e8bd1708d92ed9b560149732aeb87860304bed9cfe12dbbee56381810a0e8fd5ec1cdee723438f05c32eeefd30e464d2665410b5cc04016ca3356ea9ab597b8809e41261a0d3a1a5dabce6ab298162963a7a7d89fba5d945cc0d8a8b716cdc8733c1129feb9ab09b1cc866bb8dd10f5d31a46f4d6887cf506be963519325ac96d7876fab4047aa18ea58d727319a4c7e05b67a6f2ef476c2874226a541f53a33dd5bd3fb08e45c4f3c280cae440521ef0203c68501cf90aca52b3ff324ea87122ec28eead96b939ee450667145e0ac8edbdd800adb3932b7fbc7e3c3b406843f115a7cd8f3ef176118a2d553a15d53e0a4ccdacf3ea988f65995f11f7aa74fcdc38f07f1f791a1c3bdd666e1d3165fb83d74ab8c248df244821efd5b0c99e3f6186dac904bb00beb247cc5fa4ec23af5bb3012d04b2882767535917f3dc1008daefd482be5d4aee5957894b0ca42065c29318b0b7d6ba6c62caa7e40f24cb07462064684c935bfab4e961be9c0c82cf1441f95cb15e478a5621cf85d7be9c31ef3934d8f2119d8a84122e6f7a6641d405462a7426e020b20c302b237e280ee6655cebda5b640eb95f1c2661040d6d73d974b48b26d135be10bdc01e712a8e9f686539a536888d60d9896d6f946a19caf74573b7707a8d28a95a3532a7358b9993efa40b14c043d88fd3c41856703e1596b2310f6c64b4db5b2285e7b9bb55a7091c3488d039461a32b2cf0383646860267a6514840e4cdcfcbae575dc53e1ddfc405aa5986f6d98afe40d0489bf5b98849af5bfbaf9287da40a6130c530f7c6195f73ef94ccb43ba1e42389cccd46ac830fb8cfccfa86340e9b8bf37bf9ae9ae79e4962367aa21378486dba1e6590f09cfc64300d0118d10706e46dcd8be4c49da76a4c0a3472792899921d9349975feb1fd4f22b5e5df78df8cc6a7ff3611a1f57cca5b614a70bcfdc6ac343da1ccecdbb5cef7135bd0cb7a424f4097b13693cfd49b234c2237d7135e42149a010216b3def70e649f2ef4eaaba4a48106dc2a1f71ca4d8935205669323c8001f13a0899ae96b1db63f2b2db3b6aeabbe239d3aaed9505b9057ab61afdffccb479766ef6887979bc12b9827b738b8511b74d801b1d042a90b023b3df129a97db1517afcb0253fcec52f13ca9ac027d0df1e04a8630cabff219cb24c0b539f3d3f5ec477bef0e533105c94ae9051e40cd1d2062b982684efe9694986168119465dc64f9852f649233f94c234d902d588a9838110716d70e0ced25d2633acba790f0265e09887a3ae995550d2e928f9af7efbfd56c90c948b7c90317e751e591c6fcab0eeb959a4e97f3e2511c4898721d880f5616005b8df10ed4381dcaaa192d6a0ba7fa4a2f71bb19bf5a7d27e8de4107e9b899d81f838be8a1cb31ccb751eee23a77ed2c68c01e0834986206b3e9b55eebe7ef9c35f70cdea52c0c97ec120b08c3230eaa82f91a6ef445e9c91d4954d1298f519c77f1c1498c8158193df890ab210a5a698d12b91dd38c49e5b3902e4ac46eaacc1895b4283301fc2249b21090c7850600b444567cb7234bf4e073af4cadae78de46ca81d1582e581ba2007a835055af5f3ecb6888c235b40948639ad16b35708d4e29150ac8fe81ce1b469ea91d83eb949c1a151bd59b3f551658d28eab23a1dfa426a103d31fd1e2e8f7cf1ab50566849c13fb3d4135d2f183ac8b51e3ac9bca3f71beda629e446620b5064131952e042dcf873a8c50ae5fa1c9acc6f90aeec3a36560a20f01f5f62fa86a7f476d245bbe8fd6b552897bf210985daa346aba7b0236f424cf6d25e91544b3bac6f8d1a420dd2b3ad3fbdfad80785677da05340972b16244ecd62b1617eb5c9057d7c8f16d4b5c66055c355db01b3f51d608b63a5c165309d5aa67452cc3ecc7dd1f071d47208269716ed0c11278444dadca8694dc21ef4d23f19a2f33e28f382660d6d439928353c450e0a862513fab5e51475e6f19dcb9638080e0e8458ec81cae9efb876f6046c97385c0c44ae1af6b9c8d38e28c9396f1ecf99a965a90f0e921218f802e07088d808742ec2355fc7ace98cb19f712264dfee645e9de201d60ada3abca07db021709ba7616625859070f0c20430c5c8f8fd8b0a9977e36b50f12369d3c66ac76d7de89c453f66d4abf8fda3c849e20fa608e68ac9002631b5eaff53e4f5f5f2710311b66ee0fa1e20bc17ffeac7faeb03e457bcf27aceefc7cbe15d8a14b4a9d5fb062f83d3da714d640e9c02dc7f3812f735e2ba2eb47d6105c12beb7bf3e14dc40fb241e583deaacab2d09723445ff964adeeac0fe56d9876736a354de11fce1e549488ac11bd76172a01eeeb74522f3f0bf1a3402e03aacceb61c09e75e832c66de6cd323ee24518d1e1049e2a67db2afba8a1eb5b416fb37206042eab8ffcaf99de258aa72821ebcf336ab43af41a0f5d617d82c8cd9cc9f0e094dbb8389fe478bcde91f229c0dcb079ac8362b707e244140d9b5babca90a9f934736427ce0784f932eceef6e9247c75cb9ec2b23cf5ee459610dba848bee00d0be39bf8e3f16b0e604dbe8321cb1d8420234f554f5742107727575c7d8879e0f17ca3e7f0b70d1249bdfb33bbfe0fd36cd9859086aa70b1a97a1dcb3b61ab41dfd5c94e4ac876fc09aaddaa65fd5a0261893a76934ddb335cdfd9e8c10078c7ddff848066c703c8c4105aadbc0de0afe7794a82e82c2899b0bb6e615241b890fc4179d1485930a1162e488da791e4d7f0c08890860e27f3a1185f2bc27977d773230037f75341f01a4edc8718e03bccce4fbab331db5215d302bc7a77e6a8e0f9609411d2d462347fdcafb1bf63d00ab5b92b1f0cbe641395efe99ec9784243a026f463ef48856c3089469844fc9265381781c5d5aa8ec5020d23463a989c6ca8d37c86cbc3e78e149766b38d48b9e8fc5d38a0907c752a3b55bc2038628b145ba9a854c32a397ad72d61918eab59d8d86e52d05ac7b2072ad1e379d26c678529cbd575457b1c62128217901e643bc2fbf2714e1426263c943b41c1bcdce4cffd335650877b43a5bbdf1b43cc85cafd1263061c34918942e01fd21c0902bc1d5a335a26b098612eedce422fc04d06b418b3a060f35537831747daac53d5dae697bd9084462e1ae01378b01dc4fb933620a672249554d8f78f7d565fdc5194de3373dde9239045fed8e53b9efaa35f7c320c79482230da382c5ed44b068f4b54ede499c41dffaed33be74dda7211164c3ac9138a7d48a49e8f5c11a908a9ed734f8ca6f02729f31fdf4a3bd93b3dd258bf95d28609e91a2d5331a9619e2f83e6cea5f6b6dcde63114a3a2b006442570ab5183eedcd32ed32a624fbe39056ed08ab3a8e45869ee1c3361f1ebf72417d84adb4bd73df91d64da8886d9de3c5b58b0df9abe2b77f7903750bae1bef0a1118bed68dc5e4e101357440e89cff22dab509764411ec57ef2549ebf31421185518b046da4fdc18a1b16f7d8ad74106cddc295682baa75b7d659e80e27ee749468595cb617c0d764fbab1a3bfeeb7ff0f3d4d408e0a0a757b28d82457bc9a8488e77c946a574f05f0cf4815bcca7463db961e83513835311157a290d29b87c43339384576d25f7f61946fa6a72c6c9bff691ca4f8bcf220f4a91a7ce7d68539111b28b55c3c2a17cf31710e6aa2fd26a10353a4275d11913008dae13e398820a0a76cad5a50d7b9e99a17d67899358bb1eff95ffa18d4d75ff9194348329d1048460bfd4d4e1c97fc31a01c84922b32f97106ff9a4bbaf23b095a064e9c52612d5121d2074058958f3339a923410eb205a3778e2568a327bd1fec70afcd209f4990d61e6c23f06e1559995987e50363d87f60e09d06b79cf6741e02bed3de464911719dfd50f27aa30b1b0e373a2cc385d1b19a8ce6063110987384048775d6d6b8e20038bffc498c28b999f4a70b937f9f84a387d8e156dab4ba2d1a03087cd2f7b22f2e3b7e9a7ffcc266cf1b6e5b73ec3ea58fe5b12a9a0548968dbb9b152b1e9cf3cf51de1cd1eb5d1caa96f9ca70a529a9f2218a064ede24badb5830071a0cebd63df79844a726a61ec0614db457b085273fc1aea46064ab1b477c9d38fba64cdd970fd6b94f732eabcf2316f916bcdc1bcf98adf4f714711fd8c0df30a3687cd841986084110d184f79bbc79d18edd864b40f7ce89174efca733bd5c6558a252e4e7f30c22e867215f7e23e9db39817e1186856210959a9bfefd036fc42f1b5df0cddeb8cfd14267283b5ea014be4e422aafa6249e6fc43844891bc5f0ecec93623295a3cf854b16c1bc7b21bdc30f877e8d2d93c7b811df13cf5c1113f08955166a1e6af9efd4240cb0dabfa579c8fec6fef39a143944c7fe3982072db0eae3a2703e40acb3768669090ac0677cac858a0d9bb42ec10b59f69521f0ad4d556cb6ee78e433b3ada95877a6bce91ecfcdde0eef818783911f96fc831a989ac99ca9ee471bfe66f7283e00faaeb0a3b5f2804a547d5394efbf9c21ff4d30920e0f8509ef80708e5417a869446fb636593371644ce19d90a43bdc32919533f3c56b5ec60ce84a345375d9e70f6354a175b63a3464aa36e4041baa97fcc021f80766c385519e6893cb9ac850866864deafe5c00d3308f1a2b6d2bb557c5600c93a8e2aa7470c8de2799754795ae9e55accc8353b8376199a4c38043466806729ee823c9b6a495f8da85077e20acc783fa36503ef21a969243642e658e78f8465ac2d0afb7d40c117b4438ab3c12cd00bb786b6e5f21819abee388927681394793937bfa194fba8125817bbd212beb150bbf7bc9de82efd936aa16b7de4a3c394e4d033b0fbb722bae518899df8f1ab269e109e6d0bf076ca975fdfabed6505e29cf9de9a1ed3899b50cf2b5211be7e4f5c77891477a8cb5c42dca203bcba9a885b2555786afe05d79cf5748cb4a6c3d5bc6c2e2e3614e780ccf4923a34b4ce7dc81eebe0afe303d1c3468d796072fd33d85c4134aa7350621c0c55b053a59f70919ccec86b5680c16ccf54d6836f861ee18f6a1e513cb472e988e105ef668dbab5786f3722f137cca46fd8d1efb5adca830a7869a2e33a49ef2eeb5fb7e99a4be6713dc44615077a67a841fa0fc689e307c786de9ab05b94367395e59ec8e58f472ab55cc5ba043a3ac369988721985d609638569ab826d1e2c45838c176baecfa89f7059a9e1f0ed9ed4e072ba7e44a81fc187286483a3b0480b4934e273bcf6c98b09c09e40a790177d71089c218840eff71097fd983159d21f1b9e2191b42295ccb5b0df7929bee1a74de5eb96690d1f61a12bdf9e2eadeaa05ebbf9db18c74f3c05f1f2f670b22b895a0f947197c87bc2b08747c9b99f1b59bc14035f6a9645b38f35d269a93af8abc5f3edcff9b9d02e931087c86993573fb6a82171c5756cb223a5e2c38b5bff15462f3102c15634098ed2426eebe00dd2469cbb661b953863d217960e207ae14b8b795810ced09ed821622c69e88a38e815d85a890e352bd5ec5f7fae818694a02ad9b34eed34719eb78b7a91f8d50a9c48646a55ce174c5c51026f5f825414d42fc8d084378fb3c8780d231ac8bac7b709c451c4401a01502ed552b0b6b479c3ffef531e0b0f94d764d5c052544797b8932e41a8724342f89be86ac1038f6a02ebaca849c62b19109937df4c89deb115e6bc59728901245c005d31e270f29ea7ae1f3b27511b9a3a131ff59a8fbdd61b7432131270d189c241f0dbb65f65928ae4a0a2ca3c151d3b8f9dc3b8e065df1f0c713def817a07bf07c302a98aa8fb29b8cff11d80b0b03a72e62b803c0c3a66ffedd75257f59f09ff727133f368e45c8395a12a25be5e5285592f5ee9d2848726c0360967b4ffbbeb70916958f50ea42cf8573e8727d2bdf811036395ecd60465596a7bacb375bdb2fb4dd95474574f509bdbea9baaa2959af5c380589e883f895eecc9e19f573af7c15d865ba4055446c01a1ee8c95f84f41e0ff4db2379efdc6684075e280ec1d09c5743fa38f7d6627fd339a9e9636b3c521e0c946523bc8471af5001505ecb42b6f6dbb03326e3e9522b7aaa450b0fe5fc474651a75b896cb8daac28f9c2c6b68b071f4c8cd9ca31fb6b0068293c268dbacddd4a993b49ae8a55243ab56f9be5d72f3173e306ccf0cbcc6ff775a3c6c17466fbe6289a04abeac64b4fe515f5195f0b4a6315ab9d2f19d84b7e6350fa2e9b5f81263c1beb9f9425842bdf790e8ba94f5b9e15a47cd22a7559f6413308d00d17b2020f02fb81ddb492f0ec27abf078fde972b34e6429669b08246149dfc8f4c031771a511d061b9afb052e563fd06829ac3e504013d51730dcedd8dbf4bd268238b385c93fd8d8e3a5c716b5f54a78be1841225b328e70262053fc9d789b09fd4e5b3f532d5d6920df27ce94d14e52edbb219fec913e4ad4fdefbda3669124547baf8ef36b566989d08f8913802e4212c54e5909be35f7da8224a5081d3632b6693412889c45b233a95b7dedb1940c5416b3ddec5b1f9a23f481567b4605087da22777589001fa05faa97a73111c6c8ad1dc88ff7331ec571ca817d400c9e816ed3a98c857a880d4c621c26d0f53a5164cfe4ab3a620c89e27e87841f0274821d9eefb6d75fb3e550c0973527ae8004680d8434b6b8ff28f8d35c449733849dfea20509a3da6087d17c101e6ced9a9b0971ed504d49f320ddaefb380574cf367193ba188b73def351025841c5b29b298ef3a0b93d6acd3b0d0b3b6920907d931047c84a22cfb475a828873bee7cefd25633eca77229d96bee2bf05acb64c0c0f287845f787be74f271eadc35ea1698a4601da097888d0a32a1df672f307b281988c88229b03e824f9d8b84db3c2f6483aa0a56216a8d7d556b209e1c4e07680c2d060232f84a07dab0a80e8f69f7bf73e0594d77af4976b77aea3371089040955b9316e7ae9df003fc21d475c1649a9bf98746f45d730c7b5d3f4fda990d75499a541755417adaf105b90c3ffc1c03e435a4aba4e66a3fa908e233871981e45c9f123d862045149c1da3b7bf1665ab0a1ef9703c9c753fb46591d4fe4869cecf543637173b5a17474e2740a5a97512163f7e047cdbbfa43431aa76af84242e6629f8068eb12bf4b5ec9dadc3db5c2bb18ccf3bbcb8a2e358e979d27dc03cd5ced6c692a94864c4e28ffd662e5d2797a06f9b01ec6ddbaf8bea33658b192161852ad4e9a174d8ae7ef75d9654eec433e4cd82946f770d40b10c0be06f5c4f477dc45ba334816120c0da3db0a306a8378b3e1b3ce390456feac3438e15f8417b0075a44cc3af0b1803d48593f1b425b165a7a5ea9dd87ea59d54a2e215614c4bb588aa62d0b068f1d29ba988477269f8817bcbfd649b5b23323140c1d0d93455ede75299f6397a3f65fdd9b5c491e448c97a6aeb64edba1b476c6739e70a1d665b7925e1261fe6f7e539971308a895a2bc7870a3d1ade430fba3d6c9b60aeb3fff6f3348e9ec1e650831b3563a0afbe476cce9951979f9044d45b054fecea80cbae14753143896fc72b03d701b62d870393c372163e2eccbd10f3d912f12bb0b8f510c28cf6c6646fe53f5d21f0505d68f3232d143a9a633e7bd933c280b0ad6ba6bb8781fff793d2688c3b87d136fdc35167c2baa127eabfd8e22b20e1f684e15a26f4f36391690fa58d96cddef9cc38658372a61534f7ab35220007ca96c50adf44db6abde37bf7ae16d5119f377f2acdb403e88be06a38d174abdc816d7d67f8229855ac2c555c82cad1b830094d1312eb29e7db25608831823d5c4af8dced7a2119aee5d077ddbac058bc5dc2cb90e645814f0c4c2fa3919b2ef6f34759b61dd147e6b87242c6e67a45318e4d08899c660ce775f5365d2befdb051d95a15793a56da5810d4805f592623ac4c52adb1a0203e9286592d24b25367f031748ebfa6629e060d323a051c77c6d46f9d2e803b7bb624a93d941bd9751b3d709e558cead18f1eff7b687e2bb7642a1e2ea40eda84848f5ce8944edc8d24ecb1abb1763a5f3c976a9a4ef1d179d97177475aacd3e1a9da3f984425a1159f0bc2afa2a261d5afe6a347ef948846ee2b143638c70e0b79b3930e2b7b365fc7d55fbed182ad9e7523f68a0e1b14d919efaaae0a13b375d48ac2f1ca5f214f6bc2e7418105c360521e13ce70e1a27d43e344a4720bb5977eca460a4081f405bcdbdaef4ead15f88cf12031edeec33c3f7e6f4a2247dd41cde671b0f099605697539ba4f7ad2f659859e9f35d51d3efad62d670fd4a95158e6217fc23c205f2f6e8aa016395c3e3c641f8351b58bf90a87169cd1bcee1d7ba26aa54cdf9c57120dd6aa9506d42af38322589490ad533b4246ad4e4060a73a277906b814535861adf4c7e47bb476e1e51170e6c03129604c061709ef1a9afc20bff82495250b189f2938255b787a26f90b3b2d20c1e82705135bc915d1dc528d14127cce0f9179b5c791756c3a3a3e819d26d791603eb738b8c08dc1123c17733a0c6e78a642f0b62361de0cf7741dbe45fe10561ec3b8ca9a96654373878fa1041d66830c21150472bdcd7ee7fb6826ee097f23429dc506db1c237d82ba628b0c132d55ffbf27d18ccd49adab78017cc8f03cbf25d2662813f424e51135b0549a399faf74ee83c180777cbd8a98ab1431cc6b4457b1ad91847e0583430b3c92eafd2a6b2f328ebe72d50164630af3714ae07a02ec688d50d8257fdaf4e74c9ef40551a357cac5c7b6c1e3d4d0fb4d22dcac05f5e7798aa5887eb3454f0e1c47e95aa2e6b8f519475adcbbe3092a37fd1f23ef937979deb795043b04fcd8fcdb6ed413b66c7f3ea0a50daf316d7885faa417a007a7ae4c3374ecfab2e02884e5cca651457b69998462a2ed526236ef5b97a15316922da5c8db050c69978a9d09abdb90cef613fca98226437202f1919524d8b1360284e1e56f0abc8bbf6b8b0d12f55e5f6a824314231564a7e7057f4f1b7fbf4124b1e473b60789885ef06cfda11db61cd0964416025804e6831edce5b2c330e46a864ba1b2b794c568110069613b3debc50dc7a82d41155af87bdda7a007c555f03f18400269a7a59600bec88f4cc882bfb21357ba8fedd5ed76407b8c24e01363f8a4209d80449c148c6e3456ef4247f1966d2e5161eda0be76f20a9818bcc5cf5fd916df3656b1a785bca4c8054682629fe17188de599ae0fd48d86e99baba9885b75760ddfb2719fd8b43be5a7b81cfd97f2b24ecc91eaddb29f707e4b4e259b6b37c73a466517a5ca1242f55e58c650d6c432fa38829a0e1872f2e615cee17ecd5e798af1053ce952d5256f0078f1fef873367b277dd78844b96f8f52d7afc21a32de34f15d9f03721dd4ddb98ad86bf2d68f6220b6ed84498e01ccc3877b4cb33dc6de4931b3688e7c81f84d22a8a619b90ba66395311713ead96416c6054bc17e78e71d5723f7bc61eb3065754c4852659a5506ce5126196826715d70fcc7439426fa5703fc1050ec3af1a3cb56dc9aecca9bb2e07ba40c6ac24bd424a898bcfb314d1fbd5183795ec8be35549827b6c3887b96799eedd1e71bf3c45e4c6679957681ee25ca3b4f447144b132f952d8ac90e5a2f36f96cdf1420cecb2790b5df18a42b1b66fa80532c17d6691b7ec98bd8a9bf1925d72ef67dd440fc89e67c4c9c305570174a06f52cedded0e024cfa996da138574a7581f639ec1f1b3fbb636067d1ac18aa23b478be746ff04e61cd1d31aaee00c3b9d24d38ed7d9c9569c870df3ddd5c1f4f1cf9419fec7274b5b608f891f5af8e52b2001e56bbfbbea2551943c9242cba59244ffbd3a0d7a3e5186e1264f492fef144a34609d189e62b96edb70a4e8a9564d5b720f44d2d11498ac5a3d2d9fe29c544104bdd95d8ab826f8674e343740476c7a91db35a8a37c5026207d8354fed1671d767b79cec07925089ed2ad89337fe6c1b12d62b14dfeaa992d15f32b495480d4fbffce9f16e42e2753aeeb44ec649f692184191198346b7b4a3be44e2f63d18150a4720b7661938f722dce24580cd82067c289fb9bee652dc7d52d1dfd7016d4b7431be8b727b0b0262b5ace1621ed17440546dfe31bf347bf50500b2e3896a47897e19f7d41b4651a5c34fae6c0888fc240e136506322686edd94811585ebc7b72344ff2b74278eaa75be542910f5cf919e1659efa057a35bb79040d6d4fb040cbfc176fe9d09fdbd35b247b3c02a1b604055ca9a7a83a10894bb48afba419b20e32d5f8aeedc54e43c4fd352db06dd7bdf8ce027b2983d1059f9fdd1bb10282263458f65f9c4a076289c97b44f85652840e5183d499dfd0442fc786c9c94701f6310301561aa914e1fc315d2520219a9c6aeb5b3c05f910f1ddb78b56d5c24e2780dfec941cf626b2479e19c8473b72bf52454eda9af56aa64aa8aaea1963549300a39d8fe44f7552abdb46457ccf53260edde98b4a29d091aaa857051db1a97ccd9adf2fe0a9846e7a2a5a616b65428b86521fbc50aada561fd3d9f3d2aaae8cca980c516bfd90d3cad868fbda4a6821c1211a80bc1dc4a18a712f6253d9722d1abd1d22264e202265cc863ca3078f9b80a0ba49352c54be703da7a3faa9cb723c42620c250d49995be51f72412a78dac4aa47e878812d7c42de697903474bf93ed7b060f5f449b6537ffc0a94a0432b8f2f2779f31c82544bc3050bff9ec517f8bef0f7aff4f55613b836fc17061b2b1899687f9dc463e54ea1b126a7a4e904ed6abc68fb99170d9e8e30a8dc89e4666d42a556e48ee48e9adcb8ce671083320a5f9bb40e2bfea419aae0d497322994357ba33cef07ef72c519fa4584917011e2b55f91e00314d823626c105358074e4b09d37a68f60cf6dfbca3c1d829d194dec71f80686f4685eabfb7d8b8476347c52505e6ce70fbebc57b933aed69319fabcf8a307e5c5aa8cc34748d06b0b98493ff41fecdb7b319760218f09c581c4f991a05b280c1ffa7565ce92e6c9dfb76f3ccd50a0e8e5f253a3a9ced6fd55618a33a3451d0a93e9130993daca5cda49bde61b233e9eb5d1ef429d622a9a12f64c315c079ae1296206cf33e59f487b812ccf2863e5178909648412d11108cdc1a24d754b30812181205a62a75fc1290a27662fb75a45b7e0c985fbc60ead0052a95822ae742553c09fd66e9ed240f2bf38403aa68e8873decbfb7b79a68dec9c02b67c381e6c030de2d9de570df5f222a321af4b3cd7cc3fdd0508d2af2fb220b07003e297b2325d6fa7c682087a0021ee85c9188454393a81ffa49b2f6f394da3aea4c16f387fa9b7a7e9d3be8dde385fe5e60763b3db1e8f2bd520f3a456d50f8ee7a74176c58c9ded6ac590adef7871e40c5393a1e9ae435c2b10d3b5ad30f984481525ebdd4b6f960c2a1aac79c39a0c392c19da9c44cf0b4006ce1597097b71fb5daad2cad839085a6dfef66b2b4a3d53db8dcd9aca1d560e9808990f07d161a2f765ca5149e7b97afe01a3edcf7e1e00660291c8ae0811dfba945d374738dae1b074a5dc47b4f84e233c31d160f642bacfa08f470ebbafaab402aeaab412f649fbcaa96e991f5d97183cf752cd847d8eed07df224400b884bbc991cd2251e770e689a28d937e4b1c8d9cf6b37b3540a921836b311fcde4c6432c9a9e3957604be57a3d128af50332df87c04361ba3cc2410ec0a02ed225b96291c6b18795a6cf3ef44e0369db0e5ddd846aa0a5f286f527966a4e52af0564f61e1dae8fdab85f353d826c3e549a5658c8b5654dea73eca4357c64ff00f510d32f069b73c5bfae10e91ac16dd89b856ee985a1fde71ce3d6720aa389f2041bc5dc17b2041fbc7d0bb7c3d4bf2d51c0c860796363fef2109f286800939ff9275fe83c1bdb7736dd95ad7eb0bd2fb445dd271fe685ae0cca8b33a411d8da3959a7a2a9c536dc4c37c47e6fbe2f48b0200de028923ecf7fba10f673fc4fc16fc16271df11a239a2a17f8f1121f346325a22a4fbf5ebfb2ea2667f021e69484c1c0484f83c8d405c0aa2fca77a39394bf6cdd75b9a649987927fad52c1d0ea0e4a6b8ce668701fb9b767c8d89524cdf67be9de0b04e18df6963b02c9e33fac7924f37a8f168b148dc07ae4ef99a01f0f4432d241538b60552a956009b8e5369ef99477379a4dede4b4833c55ad35bb0fefb4176335afd188fa59177770ca7d13f0a222742bc5244802d8d5d98584fa3f9459893234bbcac36ab5dc7737fdaa74a4a7a97e9fac717fc2109b2213513d0a5a182bfe04d0e75c2f8c4684435f92ff336ca3d0b12d6e1d3bed9479f44584f1ef0b16c8b5fd4c5bbf927c1b054ca8b29e991ebc09c18548848753dd1d62f5634835b548fcc76a2cc46c58a58da0aedf1581f4e82c9be2b8a90a08842ade6570954366a3d1794de986f546d941cb01766963f22c4c5b67160a46566d6a588dd046c8d9ab6e48a3889c309c3fbe3648441989916bbbf5eb3c2dc73b663029e37a1924a0d89d1bc83ec4ee1d1eecc271c28096c9b69acebd9140b8b48694a68fed6737229b5030af548d0b272617971f382f7f394f8329c57f64cde6bddf4bbbe03632484988f441af33ebc12974fe96a2fc0b6833139e9f6feb367b4620ce630709a93981f1059a3b849600ce9c52aaec6228c97a348edae425c25846fea14ced5779339b69286614048e3d1815c45e9a801aa0b0b61ab3917d142ec82ab516144eed0d9e5f23ad9adea9674a586311957763a1ed5f6985e3d3a497c389011be5a4c8711ec3aa2e803b82180e64415ee65a84696bd02c10a18dc64db77732644aa4676e4cf5572d7520179f84999ad152356ea6efea0d448c97c8859d139ed336338ca66144bbc71f8fd302780a46c9faf47a15309c501685a36603beb01fa401293a31049c5bf9529f02e6648e8a565bf0c823f8e019652c15dd5c6e2ce7850884d8d692d60ac7fd25e32b4f878253270f47da7af439378d03f49f34b7ea08cd0ac58792634274ee40582946ba613263192415012b7a0ac017960f350656195ca79d753e38d0c141fb85b44fc98aa7338eecb22e59d78072da1515e5892e537624f3b1a04bbc217753a6d839f479ebf29df1c30b2d3575084006c745188638ff3b9723a71ed3d1a82bd741ad09abb6b2dde7353f06bf60c3fbd0e4e45764300938221d451e69bc2001e5cad0adb5debdb859875d418ff11df0111310b86c39f1ff79085bd965afe9ca964683274cbe6bf86d0da04d602881e9ef8fef3d8bf1f47b84d73b056a345228fd2e93049e848e1eeabd3f4aac194977a27214c3d7fc956c7dcc4bf0064ad0b961ade520fc6fb8883ffeac819b6867a64888bf94479d66b6ad408d184ea25f31f003bfa5a84f681d925f975d8a73bd5eb4f4f16477db4ddac5cffcfaa503419b8a53a97085152362aa45af14c11bc7cac7fb0911ff816b80f78bbf62da6badd03ac931ed625569cacb0dcc5f5a8b54d419dfe2ef83eb854d6f8e1f4b89cd1c8485bc86af725dd0b5188f8e56aa428e58f11ed4ff6acf9ae625f8f6b287467cc1935eed8db174bd7b05aa9bba5aed165019b2f3ea22c79e8fa274cf2917e1bcb4d850bcdae0609ed7a70401e87498af46d95a342b98bdb40977803942681cfa93e4fe5c8a2c6523946503df1a23817bed3a94ccc591aa969396730064acb69b6cebdf8d53f3196934d1666ef560087c18daf3ef1474780c60fe0ca2d2e364f191eb938dcaa2abf60ff2d09293059f054ae14ca728602a8d22c67ce1647d0fb14a04a031c529cc9828789b61956d38843937837e29cd730a7d021f80a927c041cd4b76358a3f953d71bf3f14bd96a5e5b23ff5da9b29ad1add5c72a88bade7493d15349b71a26973c99bac6e226449bfa94799aca1bde2d3ad6272fc4b04260d0b0aa1d1358647674cee789c9157b7eccc67d4ffa1a0e5ae42512e8a5260c1f6efd6fe3221c8a66e5dcbd61b8aed17eb60d997945ee622d56f14d945eb146da0de4241ccd5f1861293d77a957b09a782652391b89ba652d51860faa0e3a9a6804b95633cc7af5a40e5b78cb2eaeb31e12ad5fd120f1658b2542dd33f50d7687d5ea7b4953ed1a69a3a6085ff15be50e59c8bba334dce41aa4ac6e4597b7b64af6ce81d41233a0e46212bc79964926d1dbe845cd3f93338adfe05dfcc5940a4f27b6e8e41337a4d1401614d0f615780588cd1f3aed1f381ac0d3109bc25e615d82843df7aaf6fc6ffb36765ee73778897e0061c30c1e876a3a004ab060d5e0299a46f7d82ea65589b3297c918d6e6e7d6839b0bcc556c6341e8c2c7ce29b156a750e7942d190dd727f1a73acf74ee70662666cbfb2bf955b0a9d66576ce8e2b661e2bb414174bd10246eae2d1c6730f245ab4de64918dac0db28b84851ac973ff08d6e1a880da666dece49fb6680cb982c68ea902fa6ac3c8ce918ff5add870b4d1b13c3ff68c3331b7b2242855620087fdf4a17c633723569e08a5832e831d2f72e067639bfeef966e5c5fb082827756fb404a7c06036942adbf6efcdf7b9ac8cf4fb115cc1c0ccc19a604c958a0b8c856bd81170c978778d7d55e6275b17df062dbbf12636813853bfca780240f946df9b8166f9f578ed4fbbdaab0dc6ef6e685ba5d9e3234a1e2582d1a35c38d21f97802f8968a8e9cfeed152d4f8fbdf646f8709b05b2de636f141fb9d8a939435d796ed4a8a98e0fda65175bdf93a25949f69bccccbbd382f8c91de4d9dc4a944939adb965c030318a9356f3e71dde0eb805c229917d811934fda8cb19611eab5db116e2bb0de48c3f0505a509bddec9696e403d4d63e58bff6a3dd50948ea3829a4c5298b32cd512acef964b0bbcadfbd1a3d434c58155d7ebebf0918bca9dbcca0fed17509b507d89ec193cc43f8cb80cd8288d90d9472ca91db1b3af43f6b0a649714e51f875330971ddbe24031c3ad2edd7ecfa67643be0eaf16d5214a3e8828083513789d1c51b2e77a320df488148992a9f258e3463f7a6514c49716ea7b28584bdf9f4d297a4cfe98e58e0c4e9394e17588a9910a770066cb4a4f7c3c1c0941eed4240111d8bca2981ba55273a36b5e389e2577117a2a38aadb05bb3676fe72a238f5e97625fcf66e8761534c6b8c00d9be20d6861951d5cca4dbfa95c04bd9aab9b9a6636cf531144689c0b768bbc2baa32a364a4ec69ccf12e2d469912c5d7b608967c92f1635d164363bb45f334147b0443877ebf09868432295800e01135b2f09ed77ac98099595c06daadbfd370ffc49d537b63ed01e6cc182a47b10c493c99ebd26c757b08adb0e26f12050bd00aba4b7ec4a54a082e1cfe298310ac1653810657def1acbb3833062941a0e1550cd7949204ec0cc1d4dc22fc3dc83b539d73249a63c8c1894189af57ade5f6ec2b091887c200818ad9775bddef4fcccd0eb68db5881d7a1a32d9767111fe84d746099fe405e68955e7907368fd4493b2fecf97df92d07133dee37626ef66df6da8d797b291c334213e66c129edd04b75da3a6cccdf22041babc653ce7c94cf2657b78d27a5cb88eba988b506971ffee403a7f76c54c2a5eeffa8a44d6557e1f5d3dbd4c3a7100865fdfcc1f1bd2b7483acbab1fad6656a0988cded5ef1d56699ae7ef0b4dec49325460f7aa5772d911e4ed1282e9bb19264aa92f4d5db586cc744c3e1083d72f3fdb74f10cb02f1442bb9579dfc68f05e19573544b8509e733e115be521cfd98f3dcb08506443c047bc8ad2bd0487ba70b502b81a04b16b638b41488fff9c2ed773f31283955375c67450e5bd1b0c6c99d089ebd6af4e1087b0e4ec561dba9ab2b797596a4312ea40a1aed977bd7ca14e56662f6550a0b1be5b551f78700b1b031078e6e26d73c5e0b37939a41126fb098b0b854e10d1c1756c723f838ed242210d7c9458b6df8efc258205e292b7d43c99dc328f534d2b93ab68662d277d7f85fd1d32b001594fac6c7b31002849b35da309120f5762365080c79b27e92aa8538877dbdc58287fbbe255d3786b8e790d92100d49aea4288635a1e4736664a69441a712b30d143373fe93a9153e6cd60678b83183b7f6bc1c5bf385e75a1028fd10fd1cae95b399af816126cd722547481b2b3a4f19cc244bca31e8558903ff95ba234f0c6fd0d973d4a2196b830bf70222e747d0ba5e7bedda2ab4b3279eb8e8993bf49a55642265e728f1d8d2c23f8d1209331e2db8c01510703f0b889ff5614da19cae1d8727a8c24ffecb7de1620eacc6e3a5aa503f15d3209bd3fec287dd0484ef21d757f097cabe6f495a507ae747a9c85b1bd43f8d89f3a58c91942b87432b96d8a9149c14ce2524ea4c2cc68cf6fe87610ffc058a23cb65efee723f701c78dd754152f618a8a6b5bd0c50807827bd47b25b20ed8798b102cd35964019b880008ccee6ea02cab09db394b47c6bbf433d9e442c1ce107bd2f3f319e1ceb0c66fbfd5eba095b4528f255a61fa68bf47d5d8cb9004355026e6190d8d0e0899936f48187057a38386139a9da163fd3deb4020b8d9007beaded28333e74d1be0ccaccb4b732e512f8903cf77f2e4f9f0af3372b393ee6f2537d359a690902525b0c2701cc487e004861fa9bd25993e928b3ebf4269ce169134955934a369cca22002ae718d6953f801926c6c0c1e822d0810761f177aec43ec579413e811ebd407ab03b5e07ffa65512ad6f15159c67b476742eeb31a2a7edd86a0ac99634b8f2ec682b1609b9c101ae789f5f561ef5b6e147ff1e7215d3d147e18f4e170d1b2686b6a7f3a6bd9e5a309268bc6321126e673ddbc9b3e9d3d7568b1e29665eeb8bbe06d7021036d83f1a63f78e2939b974ac7470512df8373a7283dd55df2e91a43a8e58028ca4f74de8e44182eddf50d84a28f52185203268df4a9e6db9c647d4c6d58733de5d10bb52ca65de2257691029fdf329e37f5e61d0f2a29bf024b9a1160ad98e359181f06b81f1ba7285b76e057e93b4feb98c16239ca9ab7c4002b5becedd9ed626aadfda6d29eceae190cc01d585f39486b019d9ea35ac3c66de125244f5ed159f0ad808fcd3bd52fa6d9150e103f38033383c7b12e6288ca7df1113b86784c0de9442ac1394dd31ef888c9cf101814eeae8799754896d73a9cc8e9fb90c06e236456fdb357d8f9fa075ac626ef3cab88ffde1a25b8e97354f20d6f853fa6e2cdea9dab99f06b17c1a29f796afe6ce177f2a3edcc5b4b9ee6a7c135774c46997aac129985f7d97aa718375b2ee3d8d56984b6205efa14faa1aa3c29a8eefcfb31df284f074ebb1045b5ee1077e8777ce1ae429a838bd659b6db66b6b9bf8ce6f7578ba1eac7b9f580bb4d0d782de27c207925b6cd3356bceed125202178ea2adabb9c02557b87fb59511b9bf3c2363cb3858d1584a2d1920f375261ec08fd0f7d8b31f2ca8b6b884946f0ced642bd1c4d9f53aaa5de597a24caf2d56d919aa6895baf02426b46ac47b8a57bd39068005d1f5942bc0ef4b295eeb9668d5b163c07fb7bd597022b69403ac696421f3d415228f53c968d79f595259844677097037dc436d381e10bce9f420682c3641cef7b5c7aff0ee6338dc650033ae01f6bae7825d52c9f58a199765da1241607f224a4d6a98d0404ed3d06a4a271e1bc63b49fe1c2a544fbddaaed528f6aa48b7d6e204e9ec8d1e8b209f4e4cd478c411361f652b550005322f7e3501e26ae0e4d6e78e1dd846d1a64ed5693e7e187009042c1b25025f82a6d19f3e8865c9c1169ef0ba7143def9dda264fb0584a728ee972ee026e22b7a90363d532ef6618162bdcaa8fcbba8948a540014136d8589b709baa034c0a6a439e0d18168f3f28f4e5f79a22382d57da88eb58668e2600ef7dfefa25979e96c887665deec6a9917381187f6fae89d114114b8539eab4a76bbe3469324330d98ae28d9d54e8b854e21cbbf60211d82797f1a87b5d8d030302b34723a36488b11797edff7bf76a263cbf97d03d80cf9bbab7a93168ce5afc018ed9109434d94bd764145fec09751318bfb8aa55d3a1267058c3285e6703b4be03f573da8ac6598182e9511b701d860bebbd871433703ff2da56bc3aedc7257909a82f417586f36dbe82574a5645145ece3b171a4c8fcba256edbb8d3684bc6fbcb1d4305122610a150ccd856ad3d4fd5b57f550cbe1e0bdc719647636c86d2ab358420ec39e8f6f8573b57f361a28333f5b21a50fa77179598f231aed6007397a3cd96fee932546e62627fd76775f3bd0922a045ec8971bdfa217f0199bb264557571eff6e19fdda22d0cd36ccf1dae8b04d97c91aef38e35fdbdbc9fbeb1563c097b5af88ba04134bba85337b3b9560096c0d753028150319301020156f0e036145f8649b4bf2b0df71374e70a6b9b2f8ce3f7c8b398f777d2ec623fb7366f9b1de2939a305baca25a38a9ee9fc085c815bbbc6a5950089cf6876fc2ce0b750a9febdc9831609358ef6a6247f1d12678011e764f3770bd4a9731806f299fc1bf6eb07c10cc292a3dee42333a5b3f8bf8ace650dcda1df8d76c81f6b91d60da4d9c91e3fb6135462b4a011b06dade54b65471576d6748c2291ea1c1df3774223d22d8fddd0dc0e29ec0c3d86779b1a1c8b0c4889009a293a1f45cc325e0d521f52482a811f6b5a64a9a08c6fde276e3ce2a50228639ccdff271c4f033eb104ef8750b22a1564ae48e3d0124697949e5dd2fb943b8a523869c0140f6c46db8bf5de3b8b05a84a48eb7e1bb96237df1b041437ce0c063b7da745a37137ce4d3936af6f27cb38cadaeec22fbf4689efb3282e9c162cbe7a1fb201212be61ab45823e50ba3b7af3e5cce77cd16bcf1949c40f28d87e39d0801eadf20313ef052e95034b2d1ecec04ba0eecace3f1f6fe568bdbd2372e1acbdf857283fc8791e2688187df41617dcd5b8b0ef2288a16a845b418663a8a4b6647b322b9e3075bc1dd7b160cf77c6c5a9ae18627d267e4656af44157c5e88207972c5cdf704d8419f0d6d619e604035ee1c13dc79f4830c05a5305101f39605c3e128aef299960176b043a0ed4acf746a883ee17368aaa9333965c88a55c0ec54bba557322b0f63c7f3c46aab2396d9dcc2fe4465d53510bd71d2410721d52d1d365f998331e0fc13a92a953bce67db65821a2ddc7130f53f2cd075f7650df8f2dd6bcc7504161169f7fdef2c52dc381ed57709c43b09e0bd798f4fca3009a0802acd665cd74e788d91b623f8c50534f225c376ccb1c5c4f00abbcbab59fac078c9e0c318382f23d81e2c24e737f2179eba1fcf794b2cb9ee5fdd597adab868fed89aa48e5844028a76b95f9d73cbc2d63655c3d9173c678883bee09f8b6a69e3fc6ac001e55ce894b018cc4e00889c9daf8a64a2ba900e44a32ab266663a528b8ce2a3d917c2d8fedec31f825976d1965f746370f883da87081a81a8455e2656ffff6f0ba1e25f34eabf67071f907b400262dba2ad06ec7b63edd782a1234daa820a1be27e145472d3e2468c0e2dfde236e5627bac96cc253a06b35d27d313483cfd6c9f9ccaf219642b1463b2d2195a0b222f1cf175916d5925adf80b9274bccf8d0b9bac96d60e129923ed02a88bb0c6602b7475d9388902269e36e07ff2377704914b5cecc7ca2c5e71b3f92a3c473b9f6862f04e9d1a01ddf1dba4a0675c33e039551fb961f01cfaf81db9e06b2a35d96e17c9d619aa55795dbb1b311f846884e00d6e87f6abeb06e02fcb5b1e65e30e2b07cec4994d3bfd5ab8c09aad04447afb507635fc56d65daa195abe27c39510fd2d8d171e1fcebc30bc237de21ddbe62331d1a75350125d1d3cee5b397f0ac95bc40ad4a795dd9609a917b6d330311f93da66fc62b54b65bbca34daaa616ca639ad3dc56a91268a36c70e327389022673cce7a34e1af7299fc896aeff59e16f46619f6efb95db24aea501e78f4b5c3cd49c4dd28dd962682f93a798a65cef8fb686a6360bd05affb87afdc837de1c0f5a02d62729bd09c13e72d9718df50cef304db5a7cc956acaf39a425a2c74e0c8360d54d7e4cfb42352f4a2392fa61e16791e47114f701ed9918036a0870f314a84ca033f8e3dbad0a1141d254e07ad4b868d14ff921c0550712dd5f0b6ae815190811377485129823c4b4107a7176abd871579846d0683368472b8396a4b80e625a7bfd38269b84b3ed4e61e277a3a896e525dea57c2989bd7d924144b9ce039435e49cf33068c875928b24d1d8b1eaf9e0091233d7cfd9a81c6720b26272d65322a25ae0c421d6c2019ed2ba7f3c2bd4f4e7043785ffe44f4d1371ee3e4e8b37912db2ceb2de7511b154103990708e64ed370bd640c1557278a2349d42dfd0ee08f8528e334c00f3c6c968dbe07fcafa7f2822962816a30d132f7e98ca442b257c3cfd697a5f1f322ff27d072c2777fc2cf0b1beb217776a64b3b844f5c5bffc03adf7ffbe80b2b72cbb1a41bff15b9388eb0379435680443056fd2410c4cdaa24b724e6e51009ff49cbc636f841222e67441df54125dcc6098548ffe460661307514c0762b2745593dde930105b7e7aab0f65b5f06ec9481032ed5e9bfe87d1d67620986177968257497a502962a0f30960da73a0ce31e093fcf8212160005d521970aec32d8bb3564a4901f66c3de01892229a0ea0092bc7683c1f51e21e581ca2ccf0e5ceb3651ee271afb70bb9fd594583f9a77b5132fa66562a99299154a12bcad89ed3675c9cac082ea7fec46e91f4a0757f2504a954a3c78632d8f5c053853d88e2c5a45ce8cb6b146d60a00ea2a838887ba093a0f4b8d3f60c775fdaf196b0285c04937d54d1a629924b8b4290b97f9d77b1678e3114bcb9615e02d438903824a5cf16632141b7491601f6582d4e0cfa0f99ea91570f4e8da1d6c76ed4c5446a2d1bf332bbe28cc34187368f57a1605aab024d6fa5df0d156546cccf9087ec96c48792c22386d737d942d1bd34ead2706ad27f3541ebb95f9ab0e26459a25758eb78f552f26e9496e3c42b9e44bf8c4eb9459b8f37067276451a0edf6baca4e7b1ffea2d2a3dd79aeeb12d6bf27a054aee6e4511786b85235e1dff5e821ade77173d71b780476742b9f57f5c7f94ed8f83e3bae901c7847e2b2e73f312f82d60b727f46b7722482aa768f99a96f7cc656d7c625915689530f4b79712edc829ec51f4f21d935ae01ab6a15e3d2110a8a5abec058bb68c110256e86853aa0f36c070bb777a79e61be989b5007001aefe0e8b46ffbf0720ff88cddb12af7033e97b4b5d2eb1b32b97bf1c98dc91e729890e97f826dc9419f29f7841a7cc8db3531b65fa94e9bc2f6a299831ac403117e516edf75295aaf95809ad013455a009f45adbd42f1b5b1be60b88816efb3ba7d30755a49e9214283abe653d100c2d15b4535ceeeefccf2096bb64b343699c7b3af62a8739a72745ad914cf78ad88826ce5fe4d13f0c57fa866d63cf0d3f3d86bf3fc325cabee3a357c37dd5dedcdb782d0f6f3a697e74cc40295b290250c40ead790830ca9f81578b2c4cbb768c26edef75e747fbf9f67e5d568138605312c8afe513d5761d8166ada111805a23fc914ce095c3cdc0534e55c7a3910f8440a70083a9943b50712d1225ea097f5fe67e065a5f2ef34ed2562136aab54adfa540674b9827b902377713851b3f84fdf7b9a066a37b425b25cd7d31c76d96f5fc20e9568320fe73d89b096a7a0ddc3522477ae65210e3f04ccbbbd45a3b734822a3bceb53076cc5ba295cf7f9dfdf8bdccdb588595ea3ef1d28ea868268811589843d8b4f299c84192eea8df1337438c5062fec00392aeec98d201c278d27a73e811781e93b3f24fa9bbc0c0ac1e678af7b503d9e13c1c08ebba845aed88b1fb99713411717773d7a6838ccb06d85187218958cb6f998079235883de67a4b02a0da6e7d1fb5f7a996964e4b5bac8db39b932ad8994bff156be6e5e79d3839931fcb437ee729446e33fe859d439af1d52a580d42233bddae02b459e70c2febed563bd3f21782867bfc59a81afb11c226a91ba0fdd5ce377e748c6736ea7d0be143960cd43a4c2f644212444a96eb5ecd1364c5528789b7bcf0494e23df1e3c964f1674fed4ed7f3bf213ff8446eaa7be32dd0ab683af37b49a4001628ba073f225dc6fbd82419e0dbdaeb1bf0b08f92a53c32d33a710519bac19684bfb45fb60260e2bc8a5b484366aaf16c15911a75165970b7c36e995cf19f2a76cd42d0e2c7db9be3a4595137b4fb4a2e6f5bcc1dcfd34356dca0c21da1eca6fb147a0910372d0d7301df4952024c1069c054cbf0e7251c91ab4adb1c3fac7fe9484bef6467e1d8f6633d821f5ad9171ba1b12c81e3224da58af4e7f97a319071f17d84f9ac978664ba07f17475dadc09c935a0fe4fde273ad7ee76dba24c9b87647fbc78dfc7c25cf927d731244d0d42d1e1ae022583d9b363afc351f7a1e9cf1d607aded150c783ee11e782ddf6ec775900c664ea880d823753c2d0b694e7aace1e02a2c33078d567584960b1f25da28379e3f8398351dcf5d57f8d5fc4c7e29f795766e488838cfcea9ec9a9f5c05ee3b511e031aaa45526c07fd041923b04fa3b26473fdfa8035184303fe2919aec76e9a7afef21871384cd61d9efb7f0a88901f7364a8d2f14d443302d91c58559543460f3df13dfcba3f89e0821889fcfb879e1bdcf3f9a408b54b2a51f786169520c495957559cfee93b0220d110f6c3b7937c7e87f58910265b119b6ac943aa0296fe44f8b2f54a796c0164dd73f499d2365c29c0eab645487441ab8aa30a581538d61d9840c71f7b640644a64e76c805b5bbb769117c312317da1477371262eb2ff4e7af29831d905a56d7d599b3bec1d3a25643e82cc7c3536d277fa0fb17afa4b375e5a15dd8d98031ed91ff19752ac05c2cd82689e6ec2a443462840fbddb5a4355e3eab5601b7ee72d97007afb5e6977a6cfe5943ebe8b694cdcca9f321bbe18ba302d123e85aa659ba8c04269b9f0207d0c3bd42534a34710111c01eecbb4bb55d87bd1ce20f116d73e4aa5de567222abf347a6b4c2ce0945ce47286a2cc9f687709ea3ab39cbebeeea84bc21835fdce14f5928a9fe89fee43c9689abe6bd001ccb3829c9731145bc7cf5f294887726c7a48132fca11e79338818037610393982404b17deda56bc2e15d511990aed2becc6fa10e45e785b0392d54d632be2499a74fe1203e086c11c92714f3bdd99f35eadb53156dfc9ce5306bcd04cc67cc5441ed7d4f0a81e89078ab2afe3d2ed69124eed59983229ce35b2f43d9f0f2346406de2c246f758c0bc783b8b171d4f695b758d8dffeb0309f9802f573c9fe2d4e9f4e034481739eff82e87cd1a783d0710b2014dbf2005e5a5b57eef432d6fa6f570feb7ed652400536c7a76c16e91c06164fa20ba5fc2af2422de22a7d69165a124ddf748d2856f400728c180f0c90ea85980bb75fe921a5f7a49a21874398bedf11e0291704877f46ed3bfdf9fecc06d7eb1b63d1e1316b38dfcca366ef5cc647962ea2e7d3c82eb3544f3f578b27def3f6e209dedf1b9c01550e24327bebcf5b166e6adf055266e759ecd8025f51fa8501ab1a5976074d0eae5276db409834112561f388daab2bc75a466225e30d0c5d3848c78eebbd7e7c732f1ebcf65c5f2da5a1325d57cbef7a8edbec674bdd104c1a6eb3d3f7e723b6a250eb1354e02fe3941385670ff45abc6fb3af25f0dfd50e41717bc0a9cd25fe5da1e0c4275ff33909c1ac365468f98de79e8bcc344d984834306e8e32a3f3dbc4376bc9dce53bc66759457a9cedd0b5102f31829fa7cdd34b0b0caa2c0d5941d772404e6e2c757c88dcbeea5aaa2a8409db59e3ba36c63ef2aab9b3d159c2765cc62b66c2826091d83fc75d2ac86be591b34f49f384c62099b1fbba283a5c723ba2a3aa01a0bf370ee4a23330853daa81614234c9319e0f5aa16e0d4d8e659d36d85b42ed0f47f1cfebd3d4ad044a57e722b8fb7dc10929e083a48c056077810b666f570b24f26eca15a0420aaec155d168217271e59bd88e62624ca0ad397dd4bbe141dcb9ac9c5b98d9dc9ba6c14c0bcec4a1add8682a587aeb9b099f6a62d38e65b9e9417f58d317272e4936c8b6047b2e8c9417b996bf8162418c1ef6183ef1fe346acdf5c0b1ce11f42139faaebf99dc36bc6696fff894e4103c2e90525a353d7cf2c77d0a2a365434019155903e23ddf919a597c0ffd51fe7aaae8a4e8da2db8e126cdebcbb1db10c290c1f87185b668daab6f2caeffe38cadcb1975c7e60e0354083d040f80a8a46e2cd80851cc504d6a579ecaf778a3dbf9858156471dcb6d512c7d25c892adc8c7e0bab8c23c768ff2aeac77772f03ea40c8b8b707415ea9b6ef6857c35450cc79b11cd9fa52a4f1ab0d26782176d57d79a8cfaf27c56d58ad061586a4ff1d5dfd9db2ed0a49dd7a21ad84b6ab618f1d0b331666eae433d4d73d7aafa359073c44161f55eea7280c72d421281f30eda7bdf2d43976512849ab83cd3f4ea99836f5cab06e15dae7353a3fa785c4a46e8b011129418dc665b7fe2ef66c8953d70545ef4bc445a6a7c9c08b2d8ef962fe497028fb6daedc3eca9d47edf1d7fbada46bb260487445b3deafd6e0f3728955f893661360088596ac162f60b03cc62063e75d49237f7311bc5d321a886982c3cfee3ff011a50ee92841c8d09e8db5565be99c6e1f3c0ebe33571b0d7c0ca0b257eccd2bb0ebc736d1733e857018bbc36f8ed845ba54968afa0d936224a268afe3daed3edbae9d51f052dd6464406ba815e0102246167d79032c8f0b0167a4842a70b66c901dbc5e8e2dfbf698b78b3627c7ed83e697bff29685ee560359ea57f9d3b247fed8e9d61a96a9e03db5a92de6b8320e96ba38ecffe9030817fdd9cf556381a8c2104e204f5d1409c88541139599c09f808ec51213e5a83da8572dd0b6f51e27598c99fbc5fdc7e8f898d4f24f8221b04567b19fe2240b40b1a5d863f41a1060a4b4150f722d3d7a169b767934e1fb7a49cf4749fb11276f682e007ecaabf5a6fe421cfce3b1eb88e4993c707bf449b3a1e52e69142b389489a966357c9116af070c8d47fef08f7daa73b855c61588aa70f028f6dd61e72e2c68d763f5f69e6eb5759eeb67a310d24783c5fe2314b0a3896a72702e6ca34ed2dd6dad07183d0c426f831c1afd5689b35e4d539c79a14c428e0d3c288c7dbbd9d3602dc5b9476c23a0ac1ee0f68ae5ce89a7d9a06c0f476815bc041446e18c49c8ae625ab5b71fbd0ea388bd3e1e948a51cddba21c4d57db67bcdb5823a46ba11f3296458e7e6338a8fb5dc8e2a180a6403b255f5bbedb1f3eee2541edf90d53304930802b1e34e5d3ba0cdc3fc73f4c1928c91246c598abdded7193348c5ec50a21fa605f1d19f2da3aec0f20b79bb2718dcef8de411cfdf8328d60ef4446344bcce610fcd744fafe7ded9cc81040aacc082155be8dc4bc4e8e81f123f46ffdcb4b21e8ef01bd217a5282e33db311f46949cef5d61104fcfd1665e4030c345d04d578d6b05738711232bb3bd8f5bc25c630462a9fd5489ba64f503d79636e467fcf83230d798d3943f49cdd037c443499dcc9c9c42cfcad4d0e3185e2aa0a148d102b8750421d24c85fc89041b20d8533efbfcd09065c7bb959000e96e89d216d196e4a7b38a1de12ce3672717273dc429ad2228dcde4391add49e5f1707399614b6c6e894372ef83459fca8028eabf60205746d42d5d0fa61e9cffe27a3963760e8ba857b0cffdfb71864e98b5ede68910ee8f84eaf16d32043db9d350814ce2bf91d897242e36914e4ccccddfe39a5f73e709609b007b02ed6a0349c27ac25af21d2cba8fb089cb8e04f4e92a4520e6575e7715e88cb4b0adf61965e144d0bdec76b88d2e07e845830daf74bcea154c55eb00befb003865807134f89c91e825ea5145532e71a689e5d9b7bb5c136862e62548450a9952200e8df7599d499386d3cc5245bc7c5b05c3d3d276bb40e237756486320065a7787403405e22abe604a24bb1a8a22747985b9d8df9bf52bfc10e81159a115b26e1dd8dd88532efd2e6b3e1d07549bf34ae3e24712bb259410a5ebdbab5df6b2ac256775dfe5a2f7f8ad6a84ebb7af829d06da92d48816eb3f28703bd817b1fb69e3773d5ae31f3038015ff1e3147b9b49a607d40d0a3ea4527a5d64b7edf9b725a57e68142e23d93bfb546e459f3b3059fdfce92dedee5dae548886c2919bafc6966f5f432ca8b16697c06835a180410760a6420ac1ac787d5a11211d260aa82e08177f7d528fca9269308743f493535c61c64f2dd74fc1cca70c7a6e199b9d194820d6fdac6f99d2b2be08bf4926a978e33ca296d27699967324d707f4b123cb4af6e3df085f69027a2c17f725df0cb9b4ce9cb97db246f72ddcd3f4e68591c887cab814a431cab90e67c4697bd128f56760b18675772779a2b4b5c6863b0ea844d551c42b781053149d513f3c787ae1e613b0fd2b5aa93326e156511c335608e7f21a4bb17175d48084d4351aff1b43dde65fe08c56a058dca805012684378c538154c7162fc01640f55582763826e788219fe40a35beda73ba60f949f7275c9d9a5b8d0874fd5c706c7ea8ac33e7536de66e572140b914b74c32040faa0549debfbb25b4d7c07390af449b8370dc5a65ed5180780489d76dc08440d0a3ddeb6aa49901a5db163e2ccb2de3bb83ed997837bb10aded4e63343b9251446b7464c2b09a1e01ebb9815e5913f76df7a02bb43191ad3815f3178ba7b2d67aa7fdfc0234ffa0b563ada932c63c9e3b71ec6571156259a594e210c9a6ef8f3e5ec89e7615ab880b289782ba8e034e506e7c6d9e50d74f3366f2bb108bc512b03ecb50c0a68d27c91ebe302152095111fa867a5fd82fc6df7813469b3dd97eec23c19e1e3ba25a84f9b46d9a9996193cce7bc899134f12a742b5c96f9ec90dd3e92c24c48281d77f82fb86006a4248849d88bc4157f998986e640494d7326de11ed197f06e5e30088b8752959dd7d49ee4d1ecd7b06188b01cece644668963f36e1e3c3d258ed133744b35aacb9d680baf59da8f7223df117ca92812c7afe4e375cfba511b31ebdfc4f6dddce60003325bdec876a11f611a957b93033fa7ff169799b57eaa24a0045e17c18329f585e7bb20f2fbfc705e62b1ec8af818af75ec122d037e700b58661ab0143b1ddb316f5d90950a54e969dc213deaf00da8c7ddfe99cf91351754d0fab7cd05af60c13bab0976aa6e82481719879953ad9c5c34f6f386fbe105b568a1ef192f8ec68f8db51840a5d630407e24f8b9e69858f4341a888dd9baeebe516fd618e833a37b8a3a7051506b6b9062a8f3f88618c6ed37032c1a410b4e405434f31f2b8abc498de6abab667ea41b81bd06d060ab750ceaca2304858f61810abdb442ee1afc944186e41175bf322ff07d5db45705edb7219af0913b1eac3faf4151ca84de5983e55adfbaf9b9d48092f4b0af3abb3b1125127a99c109d90d338524d0a0e09f6585857263abef3691cd6b31e4c69b0f196b8f97302b5dc33776dc8f3b019f2901445bcb2aa91f004feda7e1c7a3779a33186aea378863510f7b20cb5b26d6d264ad643d23f4e23e78aa26b98763ae43d70b6f3cacc5780ffd6a651baae483f3e5bd494528c2e5d697c1ca6a929cae2d083c40b11a4992c592386c5248720458e980f7f5d64c8277ee19032618c6f56d51d94d458cbec5c09448bde17e8d60417d7c408705e610e80656e256a1e7fc04e6c534787f1612933a215189895a1c9089da5953becfd4261c31246b41c000a4618756838c51a4aa3441eb6d8dea79bcbaceb9c6a55a7e5dd5fddeec63fd7112d3ce42a6fb0ebbd4a389a57a2bbf7271528f71fa207d216233d983f40be19b4ef99f668bafb3409d897a2e98ab80b62a899aca0a65169bc5f95bcccc18d54f80b861972b6472537c0814f78d0af5a9ccd52576b57d839395457572bc3805c8c1b2815696cec33876acdd09e8d5ffb46e37dbec12ac7706f0daf352bcd1eab29afdea73233bd6ddcb5837a60b5fb5a26fa3d40af5f1a7671f6d8e6b4fe8d27316ecb67c16d21f8e9fcc895d911e197732210d45762ea90bc46199224f9ba19feee2502bfa94c4715942ad7280bb4d8cbc7a2ce7d58b06ab7bda759e054b5b9d5bce334b9204474b1e3d204ed61cd61b42d956c654d5c9d39f62c9e55bc6f912ea6594e92afec9022868cac89f3d35f4139a7baa90b59bce0c076e01b8d3b6b1f1e026eee4af2c345a748f59b7451324c974333f12eb943fbc3375ccb93242ea7070ce937bd456d4433e3b84d59a81e484c265ce9e8655dbef142a8804af48f4a95e514baf78d76f8a6bb8ea5ac1a0d014b2c18cac9830351ddaac32b9134c6ad234cd7d806b2fed76a3fd81b1dcc4cd3346a52453a22e46a0fca4c42ef028db6b77bed6ff722a5241c04bc8839f99e772469ce4075af2f4faa10b12592efdfa53bf38dae6de34026be67aa3ec083555fc253f7e94fd0291c75afdb1cae1a382126e9bcad1bf04591f28eb4b4bb2f1a0c0971ceb93d0b56e5ba30dab3c7a6367f57aa45f454c883eebe65c4ef142c97ce274b50ed9f7af3cfe77a6a1a647fad3e71ee9b7c783b09210027ca319c70511dbd20b351a26658d295ad44fb8722f266a4f53267e7910c13d8cd75bd0d1d113bc95ed85f19c0b234022f7688eda1ab6580425eb3db43bba80cfb7a13947d0097d80cfb882eaca0878a6a6bb3647343e2aaa55c06ca3cd93317061c4827be6e8f6d4fca99fa9f4817ee57962499243c44784de357ebf335abc32176aef46325be1dd3952aefe1d06399230d7470185ea65d70c2a67fb0c5c81713e1f2dff584f8f2c5a166ef733010d6dd644475d73d8c7a919049a026b0e1db0c2d0022f2a17d9c541cde49986ac9c8ffa647aeb1337ffd9433425edb416ecfadbb25a90340fe2482bf0a02de1e3734449af8e45579104b1fd65ec7bb4ebaa6629636ac288dfeee3fc3f3df5c135d6a428b19d3909c107f5a562ba1722b4f522a028c4348985ff756d7050adeebb7475a456a6cc0b8af6e14237b9cb983a1de4a126a1781fca5593f0173403b37aa355bc4eb0caa2b7fb49ca9454549e3b95941fb6e0b601fb79d64a35d59893315094256ab04f2aa61a834ac89d652e9ce727aa8df1d78aa4f1f8b7c66058b398c57bf8e815a74410778935c9cb3f5c7e8435987402c24fe284fe6f0bdca9740594ab5b5bce9b9cd40ca587706d51ae1e437b77e5c59ea5b4c65e3065ccb3c8a74ae29ffd50944ae24965a69bee008517f7bfdf53449bf7a038b5f80065b713f99443d89912c925660f09c091652936409578861d8f8282ffb69644964e5653d7d081d650eaab17e132b937f2ad32b169bab8b2ea1037d3a7187c8aeb34de9ee65aaf243543e8dd3059bc7ee8ee0aeb4df64fcc6f649935b7a3f9cdf6e3eb71b628e8630102cc482f67e3119a58508bec79ab66a8f824589711560c6959d92c4ee8613f9fe948eb6aa36d608a8b2955bdb5df4cd601a4884127d09783be37b84643b2a5169766faf96a68fa3e0c4feca16965c9cdbf280eda065008a4edfe12fab08fb2c972592e94555a6c6be934b12f6240b82c574b9d5a847601b1c1f14e7ff6b7db7626c132046150bde9b8e6f6c3d127f72f8cc6ca1f18028a76dbffc7db603bc56a35b06152742c0fd29de1e44d457beab9f2de7ed113267f213048831a38d4480520ee0d48b85abd52df35a038fdfb88b526c3aadcad2475d5e91209c56fb42fd1980802099a0283dc9eead6c16846ee820523597780292f1bc898a6507c7eb6f83d8c2cc2ef8ba464b7cfd1ac266a092271509946be0ea9bf73276b106964e7c6bbddbccefdc5aa293f795de508ca518a253a733175ba7574d0b7b83aa013993ec756a9b35610396e209769d8b2c4b119707e49df21cd90046a99a89bf671d39aaf991fe3e9b18e53ba7a477c23321e670ec70ff67c60aebe2aeb6719bc0ee4edd070893944ece5b0be88a558c8daa4da60864e4585b4e00626a696f0a4720e0625ed1516017d5816d52f599c700e31c3db670591ee2b303eaf29a6112bece3af4caa79dc9cd789329591e1021554748e0bb45c72117ca968a3a67e59d8ea6b60fb841587ca40a18c920352e55d5497551691d6c2214784897555c7f614c99c89d0afc79a37287fdd855a4e74c7dd143bee6416f0a408214756060837c083d72a9c801d985100cf6013458170aa5a56d5aa9922e58cf8b33333a5d75420acdbb6d32ab8f371eb032dccfb1ab8f8e5a442857ed33ac05bd4c463d4bb3966530b269fdd4993341cfebed6b214f709ce5138a8961b57016187dfe74113e828821d934d1056e26e20ffd8a808f187236deddbd39638f85c760c7c877e69658df321831ee683585eae03f874963971e1f8faf151cdd98e1787fc386c79d01e46f10159326b383437b9d508ce484b08ed23c7b68332869527d275ec07973edf97e246e0628a69813b7bb0562471b161f60fc08a56c62dc518b8143715055590d13f17b08c900064a6b7f7dd2558bf342a13eeba3b6f6bd648c48ca02a22e2dcc907faecd42c44fccdb846ef723c023c03f56d6df473866bd7b33787e2f9b59eb43cec0e7f83c97f7d373bd9713e49c4bd3d31bdd0b614c46c8a39671b527654f7e563b14c10dff72edf1a8c9d878d23b53698fc74ab599e9cb59390a0a2a60f03f2d11fd179cd0fa4f769255438dc98ff99c3d49c978d93e0e8035d78f31b98d0566dbd6e828023f836bb976aff8752691d9b2128eea47548b38f22965e6c6286193d79f716d0f7ed3cf87a051f5173a5d7b7a3df19dad61393e15ed9c5dcf91d86ddb7de3b748d15873d268988d8f7fe1327fde34e9c6259c3b7a9fdda5ae083ec329db33868fb9d1431a68cfc3af951486e7ce0a8b6940783b27568a27c7486f18ce7fd09a7b2c2303258ab51845dd9beff2ded7228343ce0a760228e7c3342182b5c8d22c888fba17a57884e6158fc16ab47567dccd5a7aa462dfdfb84ced3500c4f573601acdefb3f59476f2c204a9c04b1e5ed636ff0d34d6fa18ef04f87d930181c0a46fd6095ed41e49bf5f4e89b76897caa207094e31c748260be368eafc925426653f512fe000c143555da0806bc094b94e9990b8385d76732a3e7d98cf0c08d3aba7dd0045338d8a06b60bd2dfac2b08ca6e07b822e51000fd2fd13924dfe7d74897e7ba5b8e7cb8b8404945237ddaa2fb7958b23ccefd1a621b57efa185a51cb7a967ce25b7ea1b3ac3d362b264134a9f65b628df759356892e1b4d39450d24231786d9cd3baafdfdb03c6911f94a60a3bb59ac6d3f5c6a6a3dc8c87e2c368c5d29c6b217aa2a07508f54672da825553bf49d029d49044159399c16492a0525bb37fd4056e72cd40dd5fbebd523922fefa1e35a5bf2ca69440aa421c9403a3bee4c7abfca6a515d13650eea084d3a9fd20f7cc178c2ae1c5c8e6d4dbdab0d57766c6d2dd4915759b6e7ef9819c02f58b5f71279d77fbacd27fc7e8109447f8c049d43934ea2e17c2c5106014e1ad33c8c28921e3ae1bc31f02ebc5e14b9ace676fa46490aa5a20167076e161cbccd0cafdf09bffb6ddd4756056d7ac53171dacf2e76f051fdfdd3157bfe258fe8bd54a9d59d24cd43a636495cc53f2b489f82406cf05c848dd8dedb9afe3c35e8e154d15f476698979faae4f2c9cc406cc88c19380af73315e1f91c706d8ab62280dfac2f17d6a5998947b9b24848b0a232a35953ca247aaf73be2c02d55e3a8c8403bfc884e98c90f6b64fcfbe7c2ae3655930ecc4ce8f48c1a19919d87ce921a718b626ee77474df7f47d341034e131c62815ab879b995c4dfdc67705a9e73cd618bf324c0e408c944cf54e98ba6eae88ee2b513788795c2a72d57be01483abb09628b828e7874efa8c900d373acdc7df2c36ee75cb57e756ae35ef85735c8889fa0a251b766d0a13ff357c47e1e9bdef515563dab206659fa152996c830fd95a9c5898418eff56867d97d7e8d026d571100141df7a746f7b19688a1a4ef3b65ff4888792a6cada4458571fbb2504401bdc2668bb281baf71c1c1847b77c9e7aeecb5bf93e0148e26d359032c45198c7c11b34cf016b17bcebdb5dcb5c50a25195bd09b3450c9983b59341a07307b0bef2c07ceb0ada41bb18237929fa504dc6b90cf1863593919cb4ae1c1e07f73adbb80eda31844b21ae6fbea382c4f2fb87aa120dcc25775c783e4196f36af1ff8ada982e246f8cf35bb56f79973aeb6bc1058cb6c06815cc908e5564164ce11bf358ced86ea6e6f1b244bdf3282b83854ec360ca26828b2b1a00b2ff8617c73a39ee68bfb385b01ca5779cf0035543d7aff9a00146465710de5ea50234d8f19d280de5de6113eeec5fdab4d676c6cdd1165f3b81e500d2ee0de7d91de190704019f2393b41b6023528bb7b1806c58d0a95af27bc9b2f654d49307ea368226fd23f2e9ef99c1958c8713533577714eaa57e100dd0cd132bb545e2c76e7d589ab84a49998a5ee0c728205e2fb60ac0aa182e4c2d74cf1c2a3fc57f0c2ad266f6d064c7947e609b63e18befc7c345f094590da5ff77b0a7e42bcaa62c8ab969779c6267cd5474bdbf41d58b8514071c7a9e73c07bd5f3b0814941b1b1f7a00d89d085b56a2277d3b59cd752c000cecc63def78bd4b3a0360bbdac20713c67ed412814b931afb52d6c8e3e43d7bbfe07b5327b879ec26fdab3b19762cfe55c426b671d383528f965e25b7c0b639bc726e5ff69f504e58c8a3b0bf2ab178a8f6a45f7236619baa151d4b29677e319e46be6bdb5e5e4c55fd9c35c428749adcc06840bdaec99b269a666647904ad2bed3db5668543a1a597ae8fbea046ce42849f13fa01a0c70b3c26234f389cdaf227cb5cf14e62629975e54aef96faa82fcd562e639a329203dd1e0338dcef941000dbf6fb289672a256b7706e40f89ac5d6d7c066ae16bbcdc03e58848123cc94d66352b99dcdfba1349d54fbcc338e255eef10eb1b6b1ce984fcc7c322086676cd632221147f2eb2f6ce92b17b823462fc7af4f84719a3f70aa89a7c4322b50de1f4df36fc426042b1cafab18f06681c85be2adfcf1cede9e8beeccf50a4f9ba16bea6b70e918ebc2e79e20dfbca911c8812344d4b46b0f63ea6843e7a0089db015a0aac910b2acf2318df450a9ab3d120bf933e4144f184d587a590236278e1b636af4a5e3c3150cf8eddd9fa39fddbab62356d6c3e7710b00ea56a329f01fae23b79497cefb102804bba771fed70fa9ebfce634829d9fc55d71383e92940fde794e66bfa067c17b1834e3cbd6b560aa6885436e5a886eedc490568a86200f1f4c15b7ed84ba8da09e30c561ba4332458cb78a6309ad5fcada15fe85c5691ab4f4936448e8a3504ea21fd2afb4f73809490c7f78b6b86cc5091ff662a3844abf59a90086022c1b9e7f64b5a41ae7f15303d083d498a9260c153ad448d2edc2ca6b56a019e44dc193265e3470de64e673b29410c777f616cdc241091b6cd66ea0d5d1cb457f6170a1d20d657207c37a5c311ad5c65936ebae839ab28a533b06b3fd2dd033f6c30927a04c3516732a88d88dcaaac70e9d973968ad1222ca84956c2326d973e525991fdbff8823f0ef2795f3ccb91946ecbac39c54dcd15a72f111023baf9e9418253c473629a0a7731ed71fea0804a6f243a71ffd341fcf6187b8bdd761bd1d28939f113c7d1cab3e81eb91f600dafbe41b35583df851a8e71f2b55123ac21099499b360fa645d5cf43d9eca695cb280aecaf584a4b7b2ca6952bdf571d64ca13543f59cd25e72ff28ac5874265051ade60bccda0179c3a7fba23cb3d6b564c5e3de8cac5acabff9bf99ef43635ee304d0c7f229df885657b8a171260260b78f5be36a9bb5965f43726aacfb7cb7769b9072fe2f3615eec64eb9b9c7f0cbaef9746d6c9597039fb29fe98c9cb7841c81a9b33dffeb5cbfc2d94ee2ff58698e898bf9fa9a3367b4bf2e27d141228f9b5e059c9a2671efcd2a02fe4ade550d2c4261ca24f8694326cc9dd0d2fbbf1ac4f963b62a9097bc8303a8c55c600499d6dfd4e675c6af3cf0795a3810a9cca23298d6f00a4f872274ee8cd8d18d7808306d1d4aeb26b8b800042d8fe3f587f5c175846d722bff3568c6a5a0c6e8010f64d6451bcda672f6cdd7b0b02c7ee0b7327b8388ebb616ebb62b5dcef158638ffdbb3a932ea0ab41959fe2a947d788a47a8c5ca66e08cdb20f4216ff917d60941d55c3be32d4560a84e862bc6790066ac91655ab948f3536df35822107a1d4d4c0c091972e9e6a82d1781001b27dbb56229003cbbb3ff22cda8d98d1dbd120401327523425ab1c02a5e01faa238253573576a0199e635253a260090b35b2f8543520f293fb61c00d221b393cdb464fef3310a4d071a274b28645425249d99b99a1cbfeac5709e7a2493c5338c625ca1f018803617d0274dc228f120f5e4c291e1f327f8e23c827a47da97855b2d433e1fe43e90dd8e12abe4d6e2eb23954736187021f481da4c44147f5ac5e853c692bc62aca4d12044ae435d8d1b4726fdd5dcf3fc4bbc201dd210b67e2c76648514c87f12ecbe10f02dde38fe46da7445a066d10554a88ce1231548e3f3494ff3381f76152bd4ba9c8f7c1ccdd0d97cc45dc877eccadf7d8caac99790d76b4bd40f9776304d8632022b8e9c2bca7d970e4447fda9bdceba5ea243fb707b29d0c601588c0dbb9e9e6681d4074bea852b76ad2f634b2571d02f1c12cf5f0e79dfee16ba0bf4371941835bca84b621904225d7964b8927bbf809a828c1839920c087dca48a9c8036c05c732d9e24467e7680fcda7ed25651a3265d5ef9ede8d8ffc8ce80144e79fcc27f75b07ffe36501d3a322cd846746b29de16af34c0980e4ea262849dfc586c4b932f1b782a984900ce01bc818c0581a4062a1031aba4728b0789d218b8f46b15d093e374b240ef0c165fd541da083410c29de1f33fea586bb1d787c171b040a988778e6f796a08518660fc896de7621391db1e0ba1f2cc8bacdb147a2f22f92a636f26f70cbabb8c59113edf6c2cb7bbfb48b6699f854ea1b9101df422aa18b6ced2b1db0ce1ab758391ede01d36e7978ba01353931268b0e0665ea82022a95aa60fbb6a992c7fab309d0ac194664a49e70bcd48edd983a9c3bdf7f2435eb4238a0a08afb465d3fc5442d12ed999e3f1f5e01688f7279ac6af288a7f2330c8df4ebee7cf00e6a61c14d9d454f40a2290f3ec128144c4933fe0cc2046aeaf861d8931c8c98259c56a56695646440d9c6bb63c81918132617a4ba15775802e80a5864884cc8e9b9892b71c115efc787b719fcde466904376546a4021ff146cb2f696a6c01c257025e9c04a2e5eeaca91812bbd7deaec9ad80a163355157d5294e20d5206964ec82bb0040f9e25a098b6164d10108050c19a77585c99b38db82960b7f58e6a3b1d43b49abfeeb54133a3c463b2d98da2cc137d78c49bdb6c9cb76fc4bd3bf666385394408afe9cb4ae84f65129c1e35fe51f6da321bdd937074dccc43513bd250af81e7dc502e71bef8d777fdf1160b49ebdf7c1ab7c34819936c5459f4fd2a1d7686ab69fdd995b369f4db93059da40e1b05ebf8a92a36891c6402bd1b55b7a73a9ccc93b1ddbdecb1a42a141c208932202f91200c09bd3931339f863752afbe2cf3913ad8e584ba02be3af8ae9f1d63040e10eb748ff94fb8a4a4e475002946a7ee403b912f739aaa2667810fb640685b2fb3bce94a602b8d2fa31ada70377800fd46b0b9795d05813f2ccbbf191b17dddc3a121c7969eff136f98b72a0db4a1c3429444df0f10f13a1ffe0398d4ac42fc0249c1cc32900dc455377b4fd959292d2b067939e1a0bcc275b852bc9d9dd0b38dc907b4a863a967bd9001629e2e1252089091f8f98c81d908891179ee3e31808b96e3fcaf718820594382f75921473bbe0ed921daeb50d83411a9fea35c83523ee3fff6e4eebf1368cd053045afeb019f473ebfa167b1f1166e09a3d43feaa9bfa141c71e397fa60acfce5058ac2528c202e8c77fad1ed8149f06cd7cb487a0426014490af304210bf68ae64c3f6f09a061f5bd00a5bad4afb8e5b7dba266d24e4ed1b4d97a4d1556eebddbed22ff339381481fa2b9cbfc902e1608ac7aa5bc93c514b426d7f4bc1e9b51373b484fb482a49dc7f007e91deb46ba2e0f141e669b18560c8c182ae303af282fd069c49c950193aee43e8880f3c854865ea12a25ff2588796cf2cced05add24e61fe92f666a9b115c9f250ea5d9e761f9110f6624ca26e25338aa8158f9874b8152b9e81d4113d1724985e8da1de8d26c31303797d41f1e7f100266adceb95431e3746fd7f951219e50d3415de15d813ed094a5f67ee361c681bf1a621040ce637ad145b46803b9e1ea9754404f76bc99b820c0bb6339a0b52e1bc62f3ebaded8f2704f20bd16ed9aa123e7aa03df73f30d5c9eb445d836d9cfaf3e2df0d2b7f5bc80333098bf3b09d88546ceca60e743286be64165823acf6bc819bbd5e793e3dfc210e78839ab5bb3016fddb9f0157d2a557fef8a8771a21b18677c98b84b625ea5066c6b61835862b2b8588c3bbbf4adfe3fd74cfcd092e17792b04ba09ba0cd345f8271396210d01f8a7d80eb46b4c970fb871621bb56ac709c33cb9f18d635609d1495a5d603ca9803d0d3c153291c9c85fa88ad8c6d2eda5a0de76a91000fe70f925b6a9c227e7d2d62f5c3410912f55032749b527efeb5ae40d0c905b8d84c531f5323b948cea048c8daf5016d7224e6bae613288acebe2a2b56da468145a6fc5d645cac4d642a58384c0e1e88d46071acee24bfaa0fce3b96ed7ddb973bef31fad2a6c577d31cd8c5ed6283e8a8815c6a264275daae8fce67fbd50b7f3456345751010b8d38d377b0ca12e33d5bed2a9d9d9050708edd80e78ddacf3a9a169b6b555d3efe84bd25db5ea880c07d6b753cb81bce3921c3c661257a06b47e9b27073bc5b6627e58791eddd36ac12d32b1d54b55b37e85ea3d6ada939572953937fb6968fd1c42129b201d262ae1ec571d13a512e33b6feb5f37a7eb03d62f4e119c3936caf878b8ddb45a501715f501046a99669f398b01c821560d6e26d6936312f2f9c1cb3c25cd1fdbb74cab663497d03dbc5753df3b05f30a8b7ddee82a4222001a8a56132bd6e8ccd8ebfcf4372b9c20ed681338ffa9d909a34fdde5340638c20fd5f5954e05bed6a825b9ec3948716e597a60fcc139d53b48e9599bb2fa6291a1b85ef7b164acc8abc8002d3d3680721fda4bea57a02f78aca661e6abe4a9981d183655a2e340449f0f8b961114d529a4a1d1d94c8ae2b21ebe608470bc427d4e2d6c1e1476b0c39ca1d636d7ae3de10c8e5759e6526e92d0cf82858b56e1626d9870a52aede031fd54dd970b0af6d0244b73189d6f08cd23bdb42c365f941e89c858a62183cdf6aebfa2f8c5d54f7d9831ce1d6282091c1678b6c585b8b39e7bf35a5a86ce6549b01dacdf850ac4795181c0d6615be10ab5d43c92d0d471b74bd27d35ce1aaa22c521ef9939712666175ddfc32a9a5635cebd41939373f4788530cc7c2db3e0d41306468a5adfdffe7e667b515468ddda683ad61e4e120d98daf6a11745aa67d6a429487e315a23a3dc36fef3f2011c2765cef603cdd94239064f3cc5d17eac98ef66330730a1eb24b20577e9fc2d7312a525f0d5281dc6af9db91f8d619823fcc7d368a4c74741c277f240003c161cd4bc7eb0ab21a67c4ba9ed10e11d5c0870c1e71c0275f686f0f54b948ff0d0afb53952c1b9d8138fdc8cffc67781ee886e90f8041890b1423106f4ac1d7ebbb1c213e64e5d3076dbca96d405baa72bf1930f079150a88535ac56389820ee340272d91664e0b2a848a3735dd4e70884526c900ebd25f55b61575cb0cbeaac550d96134e80569ccde816c0fe13aca3fa3ec0b4f1117fe0bef13b286c34f9d1d27195ae7f99b438f22bd67cf90390de1628a404c3b44555266a0549558bcf9535f70b9d3c7263c50cd75fde128667345be7c393f98df2adf7c1b24a6a120045777e7355b126e093c0f33cfa1c98ffd203c7a94cb60f093741991beee02a3fad5c3d3117e3be99e911aa542b7676062b550e49f62dfaf25635f2b2ff3104097000414959344174b2f7867290e41d64faee39e693f7709e119b7faad7251b2ecb4e06f82e080ea84d339274de8063e8e8051d275f3310228095b070e58d8c27915143631097b67ddd3184ef314e98675c6479c90dd40b8d54baf8fb351e07dbda1cbc72931050c287a50c54d71cc8e6ad4010526fbac82a6c7cd8681f8f6aa6ee70cf596b67ef76ee78bf2fe485c0743fd996ebaf30d572b50f87282d5e55a1626c1779c937f1754ea56ffcdd95457dbbc4cec093c6a46775588f8c4f2f2784bba4864b16425fb8abd0cea49231a197e380ad27f8f0a753e210cd3ac8d3cbe0b8f6b4a5fa3e373bf96fdd42bd003905f629183e8d39739160b6427818b9f251e4b7d11d7728156e469f26dd933147ea1757cc8210f3da29b8e96fb92324240372e5926ac33471dc43f54035589ddbbc0965b883689e4bd588ce71167b19a83c274eb7aa0e16b3df512fde38e8d5c29239b495425ee7168a8f2feafae1c73af78f7918eef5ebb31cfb538c20b659f1e1f609150c7be8e51cf34e99b7fa454e8582d3b65ecd9397b5a154d1a0251c4b66464a03beab9adf0289dd31d3a2f8de75e3a2c28be3bcf39f57c038fa798bf452f55f72ca9aeb7a9f6a7c41dfb61d977daf87430f8e7c705dc12fc38f2e9e98cb5ff0f547b78653e2a8a9ad471a5577809a4dda3b9deee80e43aa7dca8c045fd6fca3e3cdcb3e6687efa6fb047046582cd1148d53d63c00360e59ce44f33d35a0d8ddb34230a2ff03eaba8f3b5750b5aa67860519844a7d9d8489d21a268f3d0f2c299292d2a4cadad6c47ed1445d4b862ce2df350bce04bfa1fb4e618af4860bfcb118a6b7f598d6adbc3efd0761ec43705db12151753be6687fb6a6f1093742e125770e5921ded5938696f637bc550383a3e0e83e23200d195a6814bec6a14438457fdaf10eb8611838c4db4e440909056579ea647b79376673dfe19be872c96a305f3f9f51461eb520f5b58a705cb656d298918439d98df6612b049886d04bc3d0c98943dc05687dba51a3a01447e10c3f6bce6cf95caa4a3e59e679e7d1e20212e5bea363f43200307ab13b05e971bee044da900bdb0c24b6b7dbe1e9ac4060c95e1c674d7837b3645850b9b9015e8017ea8a79501d6533e972fa3f4cf247cbd3cf239f054e1f30250be1bad69f0cb0f1df8b1d901718b56f1a8d7b7a8b11462452dba362fe13a1be88771f627e280a56e7e1600d6b0de271632a8e6480df5ebb06ff73f1eca4397cd00b288911b57f7c984072af716f492c3e4912d8ed458c27ff432bb773c7e21614e4d02d7ad7bd10fbf72ae665f4683c4e0b99febdc47663937c848ced979a696529ef51944016e6d8a723b7d3dc9515a0fde3a1aafb441a7b40241f82f0836c789d3cb22788c383668345b201bf24d9cd8898257ab6fe7c2a0616aee0bbf437e54b761bc77a741ff941de13459a78642614b44f507a69a2f412ed85d87b6f78d5c9e71349b4ddc18adb85f105adac4f3cbd157b1a0811263a1c5dfd05f7d3209f270d192258aa76ff8cfc93219ac46893f5e48295a095724ab1fa95e9685ccbbf0651df49425c6f7dbd563b6d4326331ae871d06c65c2220c0dfeb8d0e89b95a5aef976e7c15e62f2f009d893ef1101a4b350d21b1e584a614ecb72e8c7ce1313ca7c31168e4195915e4c09960d3d7e53051ad853e21a78a1dc868ca09f57a1890254aea53119a34821f2dddf6b76e537704a07de9e94aa602cc10eee47270df6d6d2ddf2ccf0c6a0ba446a11665361dc5419e90b5d4c3ee72c0af2233f940fbbc9064814c6aca63c8137061dd269e084a4fc88ff2ac394b0b7a6474143abc70378f43480285d2d840280fb87de20f52641b94db30a1837c09707362f243d381927911e2521a749ae55f2b66264cf8e2c7de539fc03b8ba95428ad12bc53e41fb27d6a2426e7c894479fbfdb0485b26f88b29f332685d59b9ee17cfc3b2c7141e0f63effc798c81c1d999ff41c8a697796d71b0eae22331b3afb46d98225b8e2d55044d87ae53c7952797bbb94897079b832901be7526740ff801e6143347da0ad2fcf1fbb9946fe80b64c1058e8086f18a6dc6709b6e78104cf48644216c425e138899a78f8ff07ccf82146b0b2612941e9de4dff097d43140dffe350810fd7f78d76c9c5b8971fadd13fdf56bba1d97787e22e06f11d312e6174edb0c26fdaa1c0cb6ecb7fd33ce88648f08ca497547e1317c9bd6546d8dcdbb7d79ef099f43c8e53f0f8a77bd021324decd072c162af513e99c7283150a30ea86b01b23f46d307f6693df4b5f277d0c6f3c9ef9c3300672020d50e65aba57512ab8eb5476720a0db00417bce2c9931c673b36f271a61ddf0b7e8cd765082c7e436e15cf4927a8b695e940df6efafd63ab8b4b0938ebbda22ee9b3c9117606876489710e6a117d3c03db9ad617a704321eacba8e95c9650b5e7c5f04db955dca91f3921bb0058141b883bb3266081b9edea751360041665c5687985f577f88aea84640a8d0f6d9e25ace7a1e168e495a366d980db2239d088bfc9eb65de4b5e09a353c94d218a22080803f09d94a0ac38f0f4f1e69489837e07d6e6abf96b76c237bbd1e327192854edf4f7153b8a4934a18f959786d9a828d2b497ed991df3006428f65ff9268208df6500aaf30ec848616fd6dda97832ac374bf0e1dcec1023ad5647ff0c9206725381382e32d556ae0c91381d111fcc3cb41d20f10db719000155be043e38e3fbd35b357e4a9203149b07687d29215eb6a54d9e3047b0c70dfc6e597dabc260bb5f36a6e702f52f2404549f05ec2cb4dc9ca3e626069d0f31faf56adb0c2ea31442ca3a2484aff60993c6b6117d062db60cc99543632c2e8e7e608c6dd3c25086b4ca9de76fd18a54201d53136dc9ee11c0da335decbd4fe90a9a0738a57446130b5c27643bbc841321bc789ed6209a7c2f1f6e9921e6189d005a88fbca59366babff32f48aecb3ff3bad67058beffb6a0e5baa3a201e86ec9ffcd449f278db920e738bde2fd5f3199de5506c061fd5bf51cd73070931f9c804df7152a5c00b58042015fe3ae52d30fc2711d1a26a9d7f407517931b8396ea83b85b622ba805479fdeb8fd4f0c67a9d9cae593e7f9db1fe24f6fc36d5fd8eb213050bb1bf460ad65787576f7612cc717664a56398a8a5443e3ffba3bff838a975d66f32adaaedb64f49d7782865e9ff10ebf6f84b4a24274f2bb1fb92116a46a757385bbaa0bf34fac0cffd1b1332855fbd8018c11dba8298d8ebdae1bc880522a1686b9d47b5f80916f1936402ccd184372cd16e3a4302c361606dd256d4a044590aae07b02a2b7af4ad4f85f6cb73425e2a2529857a5867e6f5575d300923785aa9fc726011cd22ab82f9c3afed939ad13fc20f1bb044b096081bbd6a1be14bbe696f611ba706567f99fd260748c88352c5e8af28c2c4b18a1c9cbae0e6465ffaa62cb81c220f871785892f566cc7588998e0410646a4c11f29506a6f2c05570f5caa56131cb33bfb2dee7b45e215e80ded46813f168bbfb4ea79e2a5f60c61cd0ce8c61cc2fb6b75c45c1bb67a4e0808b5648f2f678f3f04fc9c53aa14a9b95b1826a986f8b73f14becda4ce7f9df7f217a9aa325a883e02790cc5f24927cb07bd1b13ef9a41e663281deca72a1c769ab3c80ce8702e0a3028e55dc2ae6e89809f1c89321a40418f2937ae4cb75733246336a98837c69cb7aa7efb58c9d3fff2015e3626b8241994935c528b9698baf230c9cdbd914d0e4f1e9eed2b20587edc2ee1ad91e7460898a33755d3ac5986baaef232a418c710edb935036eabab3249ee148634519d73060fe94553d9c42626a8333440275c798ae1df59e1c2e751a0e3c4d842ff76bed87c91a766d03106254a0abdfeb2517ec9655059922e4c4ee657b2c6838028c8c0e20cafa4c3603e478db7f136b0e4fe7ba8d7f8c2a10cb0b1e1565be45bc8cca2e0ff3adb5d34959b3cd39db5907f91feefa5ef5f407a938274a08ef2dc3fceba92880985d2db9a054d969ede589384eac1981f07467124389a7cea64a255ae23627c27a35a4b62c1727b96614c22bc03276af7920f6a6d93b33daa68d219db7fe5b02410734582f710ee342e36f01f0705eb120501e7f7ec0bc75657f248b327ecbe0a08d1bf9eccb0cac46a7b4614bfdbd8a120316cd4c5534bad6f106ef0b751d904ad6d93ac74f13dca039f17518b41315478527785ae4aaaf5dc12b9c9f9d9c43077063dab84e9d694593a4b2163deb2c9426ad88c18fe40fc765e84c0662ccf032231be52e213f8f8b5928ce056fffbd3d82444f6d423730e2e876ee39bbb6142e419a8c45b4a656936d75828e17104180f8055f51a5289f82c8d47ded1a0c072fe502c8bafc372a4055101f34eaaa6ed725a7da6faada704d1f26128e22f2e5bf4fb58a5c35620a417cdc8833a4d13bf2c8937406afcd4423f33cea9a0a8fd8b157eec7403104520a8f081c17705ff27f4cf8935491e004116d64e5bafe305f72efe5f295452754a53db42b501cd9b66a9fa08446629d21bfcb78bb4b7cbffc6e36297ceb1ba484f04de2799bc994c5709563195230e72fd2789d2a3b9d33760bb83be9021ce229b88206407ec97254bf24373a840a5db24bfef0ca5414f424af6d19de2761dc7ce016d529afc37a9bb89347b799960e377d003eebeb31291ed59612fb914b20778a2aa6f8743abf26743af64a203d043e4d31f0832287c8563176b02ba99197e4e34bdf158afe54067cb77b0bb633e3a7cee7dd602ce4ceb2e988468bdd4929bfa6e99afa51c9ce0d3fbeaade6b3d07f00163e50068031b7c02d40ed356caae1131f881adf0dd601ecfbde14249aeb0fd986a914c83b8b3496c4969c7360439925935628623f10d721ca0412b9f84369f32f5965498f850faffe1645bebf21960a04ace0138abaeb1c0ebfca502c777bf68793d1c25da8c118ea1367e077056caf805ede63a4e1af75032c8e5e5e3c2a254812ecd59c2bb973c5d5a2f551068dc0496613f54c874374ed73b05bfcb1411fc33cead03af18b46c65d08a197e824fde4c6d5f18705aaeb1ea2566bf807be4c4e918a56f8ed764092044630e4c90024f6b17c9458cd486a13392e9569225d8cd86b90e822c715a656c559bf960b550e1745feaf04878fdc45bfe5a2ac31aa9816678315689aa24c5587e9c960a68cdd215702aea7c6f42ef9268468004405ae7c9a8bc45dec91e0b67c58442a23b90759276a8eaed94b53cbb335b22e24eb48a2ac5ff1005398c08638c7a35c2c1e4be7a4324a27471b145a68506ea607b355c146261c1c94d45b68cc8ea615ca22b8253493993de0285cd117ad229b799b5f35fea0c5c5117551effb8a6ea3d51d77e739ccea83d50568a0992540a58824182a2ec01730bd2ae0053be088aeae04d4e184613f5d1a73fb9e1e61326e05a29532a69243a08437aebf0c66a2b8008edfa4f0fcf3584aad096463f6eaf0f17266daaa104dd4f7b5d53b225bbbaafc57a5ed238fe245bb81807c9425a18f43a0739d630befda86f220435310fbe34435fd1ce0d0533e8923b33a45c74092a41859841838b0a62e263cac5f0f45019b0e65630e95f33585ea1c5b8021d8d6cb842f5f57c9f765f360d1cf4a12c3803388deeacc1ad57c222365cba5a175334ea69d9079a5af352052653ea2ddad9a3ddb30745c679d97f245f03481a95746e89aab71e8da61d9bfa1635384513b030cd96467fbee2bd61a313d93a01cb157925c3086465f196b47e4f76e98f2a7e494c093d2665efcfd747cd2bc0873711bfd6648695456360735f1fd8190a3a9ce09b1ec9489239e1a4f29bcb67f4af7dc7a5c96c55ddfeb3275892efefc9c641fd1fd16badb1dac1c474cb661b65d2cc46ec45fee5c3ea2a02df459034d08cb8fd5d2441eff37bf51f57e90314e5c83587f4d2e43c61f77c25a5f9bb2021e42be2fd7887d3d9127cce455da2b9b1779f90b8ff5c43e5678b25bde3f29b039f7cff3b5f23ae72900b1e3dca03d21055af971605d00242e3090fae7991ce73fa5a6893fdedf0eef7015debccac29d68eb87b7f50d736d132acf901032ba565e27f93904a882639b1166f34f89c7cec8daebb6a9a3373bee3d58f14ce73ded62920616e58730221e081a1ec45e01f164c5b812d8049cdf6a9debc22b79d02c0d588928db163bd42a8d5832db08699217b44e8c4bc63f46a45d3ee4cdaf2089132a8439bf6ba783b145fa75b40c041f099786f6b18afef8438bade68bd2d85588fafd8fa01bd9f1ce4e337c08803663703d7f71574d30ce342c70dfa6d5c6b93f8fb56ceede3a0c5e901483c40621182884b5354a00fe138db00432f6817b9a2c0b1745fa20862b4fa59b59c4f2963b8a43a48ef68075b09bb8b1e8d64306a073cd0a9cbf3f66ffe3bdd6058014c4f2a25bc3a49d3842fddab31aeebe3ee2d2af08f227196411cc2cf12c7b257b6953cc6ed3bec0f1527a68ae078ee115acfbb0239a8e1631fd5b26bca876fa226aacf6648b76d88b08eadcdf9ee727f5e6c1c143ebfade6fde9066f62368ec97833fc60d36dc56309d40d53be13884c95a352620c95576a09be90220afac5711768c39ed40f00f7758e216329a6801f3d212b7c4b3e4a121462f2fc24208862c910134c1e6be7dc0852a891e6452f577d5b22b768bb518213fe5b5f50f2ca77751acaa601219b957c1a6703acd56f2a3ca1650c4828d0d6b47a9cba29db3f41af6d883ccdfd4f50945b7fedbd273f51ed786724f5113397a4e840f63b58258ab37e43ad5aaaef8ccdd1b68145ad620338a09d28c1a180aa3cae66f2f04e9ad7ca0f45f018421e0f5dd29bd23cb85adaf942f93dac818bdf6fe4cda1daca50a7b69d0547c9b6a7a476e8fd9014590feabba1d3969dcb42ede3ef82ba0011f247f0d9666b096685f2652c64a36124130a255f5a33c36862175526ede53dd3c97d7130b6731107adcc328129425d7eba81590575fc92f81ff1fd0b97d9b3bb7cb8cedb3654bbc03d067c7906ff76ab34a23148e691e2b5fd5de530ca02ff07314f8a39bd475d3684f142d0aba95a87ad6de0cf7e053da9bd09fe4dfc3ded37f2d780873fa881584f3ecfd4a09f6516a8718844419139bdd317d50f3bb004b38675150dfe22c3281f803d0f364597b598aa370dd6be4b81ac2ed9f4269b4d480b81b6b9be6e512298f213e4e75777984f1e69cff6d0212959211c92f2586506ce447a0601d23e9e13c0d5123dd13a62e909b6923223deee141913bdb3a2dbd2a4be96e053e565d1bb1babf3d5d04d6a7bfefd3df79512b98c69696e6c138080e8c20dea4f08411e61c6180b4ef516f0754d5cebf3d6a01622a511dafbaec5e8f470e50ad9f45c7b3c65db8898f270534eff244cacb97ebdca3dfd9fa1589619017458a6f9d4e931816f934176ddb1b79c0cf79eedbc79f8ea73349a0a61a8791277999d74131238aa1e1cbbffdeb0c4d1aba092141555bfdbb4f93c749f5c4c19ff64986905d3a526231e8ff6d4af67593235713c6307a16a15ba5a980c3efec7d795f250fe547349b1eae9a19340724dab0a9db6536e97fff7f5e44e735903d37290de2d5f30aac6161113717e52c2436c72fbddf963e313230a2614c4dc403e8ae112e7afc5eed1676438cf35d3df90249a4a75891ace1bfbbf93846b0a5f853647759ceed6825c3085a9c6cf64df61888ef1f7e7d1fefd9a2bda220418ba5eca8611284da0adc4e97bd3aca5a17b4cf29a1eb60c807c5bec2a78c62e298b267a79520725e2aa5c0cabc8643146e0ab85423eb55206539d4f9f1b9f819a272e97523d9a36dc8581fd9a92afb2043398605ec07f316f3437f49edcbf322daaf3415a067c78a0e74469fc2442f882aea346cdc9c8f4027e7fe32709558aeb339c8d317b95931b1cfb5ed0bd535289bf508773c705fb1ae937619f40e2cc3435acf605571344ec5769751816c16fbbbb421569523816200e304d6628ec2141f1aa8588f3a905ae76c237fab7ee5662ab087f7adb755ca5f02def06a492a42360046c7ffc4d12274bba79a996f759217635d39425656fac69e5c42ae1f17039543b7e0f872c5e40517114b8b3bef6d158be2d9da88f323391a6bfd19ba91d8ab4cc63892a54fd14d41aeeca13faef91abe2ded111518af5a31116ac88423d764800398c2fd58be187863398efd9d235f49c52bcad7c58c4b0310a614f358db7aaa3741ab314a72d1bdc739e07b7bc83aa7135e139403bc3761eaa2e8b09fa5a19abe1e998c8d7f6f325a25327f85a4e3dbfbe8ba7f8d3a9425b43c3dd3ef0111068ad0c1d47cc091121075ae569b176617841a4956f62721dbd75cdeed3c5d6edad379feccc9dfcc9bd96390b8f5e161d3656a401affbff9b4010427bc6954b5929c6272509ed6bda53811a83ce8a0042dc7dc7c29f42f129356b3db0cdce7135dd56ad0a143b8afef2ed355166da58cd555ee2b2c5b4ca1050f62eb4a1c0d88119729ed9659800ad125fc0a954325c12004a50c0d12c2bfe4c2572d1fb86abc58175fa39b2d87eea6204da75310b7b193e2fb88feb282838d86b9c8abbc6a5efe5360a4f18be81c30d828371303bc67860e80d2e296f38dd66a0c3a074f776b41c929367963d85643f63d06f6e2f43284c00b3dc7854bc8527e8ea8e5d0866ec70dd99e25c3fa29d3be3e7068a84aebb37daaf885b45332a18359f7e8c8c3b28d0c93f6a8f87014c3aa02ce92d05c1c58afdaa4d73b78b6761576a6ddb053628c8f7d10301270dad9634b5d38fdbb0aa84947168ce417f6ac2b3fcb9a62d65d06204cf8bdbeb4e7abf99656d78633e8cb339e691ffdf8d837b88b31c87b6fdb3753f7c1c5ef9c5cb005164256359b5266ba1a626e8903468cfb4c5ace84a65c3832b92d85bababc0bbf1e6a3d99bf60f3af405c8011a03d3f306930363e00fd30ad43a2d86ddf0095b38b28571e65982dd86d69a22b930f43b0bd3806778dad625b4da89b5d4fe9788c0833c0e658e1875689964332b62d0ff9b8b5518ea39406a544b984c801e8149539d7adddbabf87c24704f4f3f33e428247548d9ef7f1b32afd9fdadb221ba50d3ee34df9fec1570bb6082930695f658eb128a4b854a5bcdfe1d56af004609768416c034f5f52d367e95b2bdde5b4b1182e99c6768283b955eaf17ffdb91f1243af5d6a523283e512f61f3617c5e3fcc86d4b79e7d280cb998120ada0b125e7fa23e43596e4f543e7100b79ddbbe063a9e381b678b58c342be4b1e1e475dfe50912158383a972848d62b17ee297a80d63ed995232bfe90173381ed7d4dfddf4afe549cd611c90fbbcddecbeb0270812ada63298b8736a841c5b5271eb2e8d80a26e71ae82042087863a8e1d3d2b9d63aa6614cdd1fbb040f29ba3c7b4eb8ff0862bf6f1c4ae24aa67a7ffb2f05f7c716174cdee5d3db608cecf6509717c027185aa6743dce4f7d6cf1a158700eb2eef4613c20446c0a33e920c13720709a6896e62d02ad69c86b98001412ceddc0a8c9e2b15bf32857705495743bb3f1bfe55188f0b5f8f0e4bb7e6bc1707f7e9ee65ec5b10982210662e6f3e6a1b5e0666df7b1b8aea5af7093475f478977741d7be68ef158abe757c6229c0e2203deb453f6472661f246ce02107cfe081352c11013dcacff3b8992d837116815f2060c8ca86d1008a1dcbcaca576d71ffe42102f161913025ab00729d50b52c305aad4d6c64893cc7fc4ea08b7c1e3edd53e596bc2051821de4da7d757904723a8bc2840225e53b9634116e89cf58b39d8770c103c83d75bd22b11055878017ba2cc6be70a06425001444edfb8db21fae267fadeaf3841a1f3d95bf23ef1a9189bf40634456df35019d9fb22236c9df3a8688cc9f4980b77784d0a36e80fa624c783056b9f4b06d1d970bcffcbffbcb44e2e2a5e8b09253010a4cc831ad1f5086745e9b9b1650ba7b8d6c5df1959c2b11f2c119b556212d44fe0a0bba4d4638d22f3a6762786efc9bf1558e9b4b350db5176fcaa6fccc51649051796a0c337b6f36dceb64d6dd5908ec1ebcf11247a75a323fc69a0e118e814da833a7e897ed8349ff0960ce0c13602c286fcdb1831ca8e4d702449d776e2d65b401c3f7e0aa23731c3dc6f16aa5e684d8d1d761d8a560d609c09b2f4188db39bb8bd59d2ba51c0b3a0c42e57baee15db34e0e588f5499cec05da7858a5d7425383cf1334a27c68fb5dbfe8cc90915f618999719c73c67a8e67e49c247cf3785d043cf58b040cd4fda33a55ccf63edd9c6d76b09e9bfc6923a36975645be2246f2a4fd5047dab69454b314c40e074124da22af018829ad5e32b7a27128a4e48b39c9c50e67fcdfb83b5e223a35e4188123012aeb8bbefa6cc6933c944f1ebe0309de0d17542e026c49fe13548c5d08f24478bf073a4b0ba3a3f8d62359532f7fe976c579cbefe30ebe9e2bbb05fc004211ff8cdb1da1a9b1c5724f299ff50d4dcdd989fb33e1587120c83acc827efb0dc529490773f1821779b9c8db1e93f01c5622a5480accfcae486c43d2781585a0143756db26e1b9ac7317d70b5484519ffa4c2c3a36008888db80dbf964e1b7ed96dc1e5ba2a0367539aa00708ee63e77c313060588728e7ea74c48e5bddc906353bf2f9a0164612d9d940dad17ce6c6a54c2a039f28fac93dc0f705867fcf12875b580b671a502de65f5732466c32e19e029f5457d903699061180e341c0c5464f3d1e609e757238b39811e88f603e3349b54ba27e1fd4298d779520207abfe18e670cc07fc6d85e444a25bc29b5f86740d0e820858fdc82a714596276e3bb6173a8a37b9818df8bc9fecb6f5717d63a4e1315cec8247df5ab9a5b7c1e1adac9e029cd04b812f71427f6cdc2c1d553b3f7789d73aa86e6e1267b890b24ebfa6e3a85d4629a174e05a039c3576b4228b96510fca3fb6149e46f368ab4f0c01ab602b62296b51f159e452be882f0331f00ed5f590cb6488f1298751ad53231a79305926e2578b2a856533dac9d0f7df057fae611e7c39f62a341f44aa4fa96a21a35208b16ea57e6bc781767683665c8754851bd51050722c5bf8f216af98879d571ef84917bef3fe60dc8ceadee50debd5b720f10459b9947b9ee321ee93a0853d0ffc2cde6f203c7e65a90af9117095768c2497c8a84195799364bcc2cbf5efcc4ced37f3175f8f764ffcf038e723b01ad9eee73eed3316399235e2e3531dc6944b840a1461f03fcc09a7fa2ffc882e266cf13b83e0c43192f9c0b7ac9d53cfb69827a14f3baa3032411944b6174af8d250d73ba70f95b5cb49368aaaeac8ffa77e2d47cbbd4bcc89cc790d934463514cae695f821e86fad6de8819589cbc58af1853a7097e4da0bad263de32bddbba4a7f266296f4ebb2c3df50c4bc1fce4501a63242ab0992749f7d08ef02bc17beb5f2779924601db06e876d2ad99bbcf8e2450b8567ffcff167a8e73f084005ada703560ddd4832b87f6a90eff2a0cedd19c6ec41ff902343cffa157af2dacc8cb9ad7427095cb31de6f8bca278b9072ef442ca4fbc49798e0e6b8f7960badbe036b86d79b44962254c45573056c164053b402fce5c4f9975afbd0f0006da9e6f1abbcd3cb713f3ac878483605a7abd1e0a3fa1303d2fc431469a69f24580a6fc571b363402b5085799a78cf78dd5e4562b7ffe2158cb8ce944ebac06de97a04a647ca9f8724d0b24c91ee85f87a8be46c34c8d4194b046e90af75d03824dc36b36bf681662cd0fa8a77e94ff295e691a58c2779fd86a17dc25c890b363bdc92a13801830651ed52dc8a3e1995538d999d26d0621a98851d80cf3dd02cdd68d3befe86700fb311ac56891014e967341ea17d05415d2d8488efa1dd00dde49d2a4a46f5b1fc7667782b0ae6d6d5b9dadffd5b36d7ba4de06bfdfb6993db4a9020d85019e4bb562c110f92abb3ddd8642032d60674754a54f3e35b2ddb0a1797565482a3aadd24160b20de49c91c24e2ca65a6f22598744e85e1e9febf76c0d607e53e8001539895ff2967be951372cc65a77be18cd734cad3941b18875875fcf3d3b2a96f6acf84c711c6a57f8266c20412db08368042568b7b103adb1ed5f4efbcbb816680a5abbdac81eae6755238da72494227a174f3a3f0acd3be87d8e4e99f7435e8f0df46fd75fb5acd079017106e243c67942fbd6446d62e6a4edb1bb913a382342c42bc5f752c36df96520618056a7dc918be2fa52cdf8b6e414bf7cac7b1e8fc8854ef06f0d9886888e64610b77cea228cd5c9e50a8856c8e30ec7c748118cfc31b3c692aa75a1fb4f3da9f6a116caee5efc599c7a13bda79e4f80018881f5f426140704b58c7de4d5c54ea1d8ea5198b55ce0d251ffeaa3935937eb075be1ebd5a86ef9689bd4503b8a4ff6c16362d7bd20a769f25a2cb7dd91bf88be487c38bc04cd69c3a26354548ea20e44441a0320cec37ca0197fed2f7fecdb430ae52eef11a1e2dd8405afdb125bd5206e368aeeb15860df0700e69e5cac1f316727db70590d994f95b7868d55e388384a09d05d78f0beed2e7235b0b326a290a9303a80b1defedc9417772c22c4d6ebe2fad027d0df778ce7605a9f4e8d172e130f4715fc926b561194d6a819a462b25c4ffb6021be04715cbc0ad705047cf8feedefc0f62030926eed7b1b3a47e108802515fb9e0185d01dc049418052314e98022cbd5fbf40476c18cfcfaac7af7cea83fa07a88ea7a787d2faac72a0b717b92cfc30d6693050a1a265ed7f53d8112402b2437d5e77265f7e4ec917ce3e15361787500d0609b74ea9d08667c8c1f48de6b2c5020dc94ec89780125b1a1e6e16fb0453f17c2cb29a6b25d1cee385bf3fe4d87de48532b13bec49465bb4ca3dc0df7217c88ce12a849f567e09677051d1b1ea09e6908e87e6e73631e90fcd4415fe9cdf09aad163eeaf4418af719f8bf7d9dd58df66b42fadc34209c4e3347bc74646acccab3f6adc47258dde2779b237a50a66f2b0171eeb29608bfe9fb7fcc451ca7992ced4e3e4d30996568e0218cb38a86700525ae11ece5c638abbf81a6f01081339e857b5d73a6a8d13af4d81428352d97dbf4432060bfa38f2b1b069b8cde447ccad18fe16bd77aa7ec3da3fb7b7b27ef94a71be8c101e92e045f234a349477012b4e5a32a2af29140795f5dba7c32659ac8872b712658eab0c33e885bd703e95829cb8ded9348841d2b46d6900a1cbe71251aaa4821d9488a4c87c75f7fe0f124c93e4595ae0d312364941a7fc444dc680c556a7672604955a7545d245fb568788d9c6c3d1276f592694d0cb42386f6ad675a5c093163429ac69a152fb7abccb2745f9e0395feed4054c34f181bec5f904878c6809399bc2c347ce30507014b07a3560353e90840ffa69762f0aea3eb239f920e1ea74058fd0b13c9cd3bd331f2ed5e0adc2f2463590c968957cb9b7c56a8d587a04bedf327bdb3ca9bc39fada1b44b2835d38bc9daa8e371b121bba020fff3e6c79a578738a776c9bb8480c84548aeab1c4d4dceb76658e1f8b8582c0aa5bba198aea69e35d548c9a1bc2d693ea8e3c7bede941c0957a3f8e4bf33601221fcce1b4950ded55ffac4476d850eaa52676452fa820d1ad9e0fe6dab6ce16501c529495c50ef78cae073f6207315ae480911db288ebbc95401bab5869eeead994ebb4396dd044687d600678a47b41463e99a0cd776e5242188635a3f5bc369edbc7141cfcc482bcb82774420eeb3726cd3fbe73699080487414afcd8f2a306ce1f53f34d802ca3470914c9eed915461b7bab816011848156801c7046817d9a1fd259d25bc26006c99c953524ee36a07ced4fbf0da4c5460b05fa5d25017bb36407abd42c92e35d5e4677072678214365260fa6cebb38d9823d35d3d6b2d7e1839efffcdd3ecedd563aadc2e67d29504ff6b9987407dca9f4345c7895e82c790670e7bc5ee3a3d97bebe10b8e4439fad814b0303d90791012b88b806deda6a952fe6a4c5600ca696a647ec56a6305b4e1ab4bccc508b7ddabdf26cdc871b81f0d435af560d8e1397c4606f9e6d9865583e5e6117a5701d5d466ad5f7b4bb50f95c7d646efe7416e241f25f2fbb2afcce9a2cced4c390717ebce7fbc6538d8525939051495e9b3a9feda09f28e2b745e5713968025f0180c32a71f624a4dd3a54483acc7123dd18ef0ada3506edb76697c9a8c60d701d9cd935461a9cf0a16ce7b422be6a1e9a1cbcc88c05013a4d9d5a6e40654e219f96c31fe84400bbdaf8e3381fa51f46efecbf13fe17ea78a2ad15ca21c0edbc71946e0a93cca9fa1da3d6f5c533537d4cb4a534efeef2e78541b34548adf10f717cd7643a235aadabd6223bf898a6bb5a81eb41cf144d27378865965883f159818725dc78e32823d3bc11d534b3be5aac2c055b1499608d71468e43c6849c2bd62afdfd3aaf2aa4905dc2e88578de1a82b360501bfa99e72967397d9d7b2197f0112d5b14ad33677e255c5bc9dc2e7a4e713eed523e65a2f3b51141af1cb020839f6e079f9710f011799ce65123fda0c38506f369b9b04f1b889a7cb7062bdccd3ebf1cfeb38b1a119c08e2024f22ddbcff7fbb83098deac27b82be193b7df41e153f093183278fcad60062faa9eb7082f9eb5da807e027d42e745c855b6b078f92448ea73d53bb9c1c5fec03f1c0888ae3aba3aa72a4f730e7021f0bb461b8591b710a9a70287510e192b6aad0fc19e517f7d1f377b50c83dd2cd7b3bc75662a0199b9fc860c472423b09709016f8afef9425be78d5bea404083ea5e06f3998f54e74f686cada7d08bf3782c9c2104790a5bba4df835f80fecaccce72379d7c0f2333b8685d848ef5d9a198a6fd0812b5b606ecb600f03352cbe794ba9a9ec865b504f1d4751a72d8f4d7ae07d23d6c1d80689464a104f4b1027cb7ce9a0bc92b617c328a5df96c9d15dd7b6c1921b97caebbe43e6471499ec8277c80c13e2f0262e38d988e4786bde9068e9ad591f69e5cf91d4f67ab73fca87143e2084a6519c00e5201138b65de5f6b62c1407e982e8cd207c3ea76906de1d7cd02310b0a1a9e29d86cad7951fe23157fec8bf8bc75c942e5a8bd5034e5f4f45eed55ef99bbe076b9f14d5a29dfba7cac2576b3c948d1440bda1660f9bef5a8b08a4c06e04edb76bd26f03f6fa93f0b92d2787e46224558dd3ef7df0fd388d37adbd8b3526780cfa5519ba18b13929dbbb1ee99a8f6f283f53922d5cd37164f55a71ad462f1ed456c5a3f661ac8ff692ed0998e3fe005fba7768b16088022338eb5e07e11eec1ee4ab59ea56aabfad3cf3f2d62432460b9fd8f2f25ab0f4d8f6ec2387d59ebb6194d2fd32a91a2ecabee6981630c2b8b3fa97f5b550beb31fc94b19fc6560ca6c3916a5153b4b0eb1eb04bafcf42eae6d8b577af7466beb602cbf2486c1d26bb4a39b60f407722394d1a17bc1bb5be6aaa4e31ccccf07d056afb0f3e73b2fcbe92069a4a57d7e1c8c69c13ec60b24e2ea8c30acb6d54bb53e4d569a3a6dee9d55c3a9465783d4b00e540b69527318007bf1c89e158f6d5ac9e7ead44241fc187970547265d9e0880ce823ce7f1599d49bd7dcf90ce89cf160e4da6d55d45ed5ad03302609aca3a91ce953bf1b3fca517d7c0d9f2d9004a4883f88585ffd322d4f1de7bdb9603cfa403ba0f3c7bd6d1e2e0d2aae1f87e6c62e0dca6aad7b06bbac04a68275759c9a68bf4e509b65d0cfe1725a2143383537600818d34559d8827ae6ddd7fe2f8f05d11bb36a85aeb20bf21c9ad8e8001a6fe677d40ce1e2a7ab373ed6263ce7d7fc2e425fcb79079b0e53ecd9df8fe34c7b5e3c1c2cef25f6bf2d23b441ee74ae0d694a9d82386e987aa6c5fb794d4ebe2a1b9a073747f6f168aa9702f8e260fed35c2c183230340c32b007d16e72adfa173816f1fefe7c9c98fb3376360876d87707bc7f48c8c35732a014d64f4bc873d39a701b7bd9c6ab736656d13708b574295a5020669de4760b0950a28974bedcb20f19b85d1ba09eb40cb954e9cd53971e8bfc28079ed10ae09892d405d380086774c933e492d40dd5236d37e9b1e1b7630ad94105e60fc8ba64dd960011904d60761279c552decf45dbe6d2654ca4049e7514a4db19f4d3394ed976b4e12b504c1893ea841ae2758c2ba06d6413b7ece70f8d121635a0265e4293cebfeea86d043fb04c0acee03519d9b53d8098827f3c76c4140f98fbfb9cea97468b0e967a52713f6ab511e93f3347241666088038e8aa81841bdd3abe3f95c222181feefa6447469670a9e6ba2457565c913a94cb4b46883780380abaf8cae927d8077860769bdfd299fd814e714d7e41e021f60159536accd39265b598d941ef258dab441de10e64198d302fbca8723a8ea93ab9189ca2e3a1b4888c933e5de9fd0f80ded300812b24de3137f609750efa78fd406d589c1dadb4f25e83765c7bfb215efdb635cbaad971b31e5c9555b3e4acd24b674e46d95026dc1de71b13386276fba5f916d52692bf1ab56f288328befd868448de19817aa7a5cd54cbab862a84c2859caa9d6a03c40c337b7fdf46077ea05ad5e47cd7218e446e7ab47a8edc8e3b594b7f3fc49419fde0b5c24ff77f6d30733294b33e27f8d13f71fd067fa35c4e09a8518e820d50319f6d004bc0e09e1c50fd64f2f13e2d4dfa599c136d2e736656ebc10aace7377d90477e8caf6d62de9a119922626c59f01987ea7e77435d37722f614fcf4826101ee3157c549e4ee354418cdf2f40861335452a99137764aa4662c3f53225b9f9f68af9ef356a17a863efb56ee6808a6788802c938c5053801a88a029e202b3134c00b860f8201b0feda6d192167bfb0f6cc2caf08c2be97f74666e02a809c04ab28931002af1577d5b5b942efeb8c1d73a7b08df079d446c16502866479b575c3a634fd48e3d3c5eedaa8f885e49faebb97f3abab262295ff5ab62441cd36053fc725f54da66295d991126e821831350edb9237718d2a1d12a016eabcebb106a51827f8a72d06d7256e99d0f87a7ba87b6c55248248bd53277db899d86fe6d386e82e4ae42ba92ba84c223246aea69f6d6386656e6c2ff8c755bf1ed1d692488eef0b5e8566c5367cc9333d69073260a0b914c99d8570fd0c8a892a3f99af3a597eebeaacdf4b8121d6de44440796153ad4ec4f9e17723c76f65f938e7580c2642f47a3ff374acdab67332752607a05ca20812b46a6db311022832e890a824a99479909144fe1a9b0645aa9486adf05be266b308fee51340716de3b8007fea3a56b4786265b4400e1fab52d19101281703a48b6eaed4c62b9b307b18364f7f066606f0a04ea3a54a1b429581aca38537c72cf60ae707b10df6f9a900cb2240d0231702fe25ac2d76c3fa5958f306ebfe38482089c15a10a0c940273f6e6672ee78623df9154da318b2808d3604b380516c005de613043d982d81e8d7a72db9921162face7ce9414a47046d827850668810d91f0b61438e6df6ff7f0246fca8323000c814215bb82eec50bd652abb3f2d969eb134e9d90e61ce11b7c82da4f44820d0acf77f656830b005307742ea8741c5a76c430db12a5468255b806c8c5d2e043ba283ac64320a51b9b3753ec67f94fa5e9964ad6827a12c98d6997e511ed30672c52cb1ca372095b5b84de0bfe3ef476ccaf2e2607f3730a2d5f2927dcc471d126fb4c41186d95cf286777bf60b3d2f3fec6f57885b555a8c7850e807b110c4755d76cb6f1a3612ce1d0a62843e4452addc43b5ff94d1d43b0d167e0a56a7359bdbd4e2cbbcb8a6a284997db610a8ed5c80bb74d1c8f17d7c4576c45488e1e54f0840948427fd1cb4e3bae4f82d46a63a4a065f6850dd3295f66587f960195f7492129dea59b8258f421b1dc841fb54cfa9a85839fd2817c9c62ff7b7a3f7e7050ce470d43794b725ca9b3b387e83108a407909ce76d699d67e1ca01fc80ee6e16a23b2e980d1f0f27b66d7ce0ca8146736df38c3b7a2a1e04e7fdcb5d90f943b31bff3cc61b020daa8d3655427d60201a2e79bdaa89a1b159e38e9ab14a8fffd698c8a3e31ded2f820012679ee243e6b34ea34cd125be957975c1611f622527516a5ddd6841e2abf4f9e7742ceb204e1016091702a5fb66c7f07e04ddaa630b1677d9285a633a46f171213aeeced5779a9159265689bf7d6b6eea37fa657b29ca8766adbfa6d9c6d1867a7d6b83b51c3b4832a7372ac694b591ede88fa8116f5f6d9429b451b7bd0cd1fb0ae79988b1bc678ae47f453a81dd2f1d1069d3a0e22287d27182b2713cf4dd3de581c2bb8866ba856d90cf71b9d35df9ffb8b01dd7928743f5bcddddb73975bb5d8d3ac419ea69f5fca0d7aad09500c286e51af317d88a61344246a4de4b0f0e320c46fde6f60867cf44e5cb9549326363a9de7b3bef943c22ac9c8f4236f223a5fec1042d7ed813259e64270ad37cdd0090730551a7679398e1c0d2f561fe3e9176f20870b1d292367443a4cc47b7b925f6d4c0158289e83ff3239fcf364d1d2c97371c3cd7c493fc2b2b92bb02840e514967521da0c9181f0b7f0a3877a08ea596c2c431cc50e885c92cc7bb9906ebd245092e453858d4866974f6303a6baa64edadba93b111248d9a06f8fccbee21b8a2557719803838368fefdec50d39f7dc771cb5171f64ce261dba756328f54e34e4146104b1bde072f8b877db2cd35895f8445afc42f8cd864f47c36dedc0b3fcbf0be738a059e5901dc30dc414d4b0edc1aef0ef2eed545dfdbe93975eb1efaf5ee2ef46dab1d9f80577ad002b5e124e0082a83b4b04d69e07db8adf4aafb4681ff73ff02d21e834b73f6b9ce3493192f5be5e1f66dc6bf2f99d069f2c726c93533923ea4afbcac66447bf2d744a678017f36dfbdc1b28e951a5938cd22042a4658e8f4807430e592256b1879dc237ba00cc5d3681ddc1e1fb7f8c5231bd4250a2b9f2d13e8e0a851f14e81569006c972c0fdd3552be016e26322e1e2e3396b8d0ab124fce132c86cd6a92f72e17763dd4fc35744ac3f9ed83947c2291f30fcbd7ba8653f71be736199a94a498b0b961ed81b66ac85c4768d51c756472da3886a3283141f253412d3f76ce974739a3954f58b5b76bfa3e6e968f7f1cdffe69b1cd526e15262516bc7e74b03d19300a478edf415c53fba313b56d16754fe744ddb4119708fce23d343ac52a7a14b8ad244b4070171087b6fbf66fe00084c1c3ea2a2aa32d8380d6665c03b8a30b9fba569f3e8960ee564087743dac5c0a8d3426f7fe5c16597f19cc0099a9b680053d20fa89e6c5d3a2b3287e14b34896935c27404cfad32c13d809c3c36801d33df88434946126c3aa9b0b46226944f8e3ccd4e97fac22b3ec2d00960d25d271ac63ad5ed8cd56a43a421b6154bc6ac70fbb422cc3ec1728b49e46c32b26b6f7fc3dea97a38dbc2e363cc423a231aa3dc6d83b71f2ab6032d8f6cb41766b0e9f183e03b269f646fcc480d081e100a711aaae5b4492c538374c1edc64a775e23b0bdf5106b7cb30fc9c842995c4f6a0047b9e8d97626f190febce86ccb062af646db0810f18eee2aba9a2f58f8ea4b8767f106f0102345e143334f1722d612fac88a01543ba3c14ce8dd8e7854722b37a1b6eda5ed4bb6320abf93142c9d13ec87e591287fbcd6bc1b98ba1abcba1aa5ea614eff4d306db504300b69ece702d5151111e99a924b886fc25e7bb49afdbe7ccb031f235bc57908a56710c004e838364acde189daaeac4d6380826d3918cc20c0c4a8f78caa7a61300bb8c09e7e2b4aded46a9306f0142065850b319e8e3b7f6219a133c8521eda157136a489b0961332e7694e68a44711c15280e574d588417e11c41e51dec2fa3ea372d70d78c643e64403d790b6295709ee80c69eaa03d61f8a105612dc3809603651137546ce96f0279809dd249d1fb62979c00c449143d64fd0fc6a32f2c1490a134c7bd8d7311162aa51795d55d8be5e1606a862d21946886a1b8d0f0629e566b4e1f9e1f4d9c85ea7f29bb5d508c8db39cb2c7e77a0f300b8010a56ed0024623b4b3fae1161fcbd065d15325c67a576f94fb04e99e4eeca4c6856111576fa8cc66e0179dd859268d6b341f840e1d3bec58456c7fcc8ff69fbe6ed4eaa39896cfde19ae3cd45f2558b2d8a06f28910c6094318eed93daeff9e9ed5da1388929963c3e1f852711f577b3834794c11c50153ad95098c96bcefb8e004aaa5d04bb8502a351c849db9f51b707acdeffd7811c136ea8803df21bfe6fef446fa0a2aed24c173754a4c62646ab81c7d8a4008df3851c0e93eb4d8d6fe63ed26f9656316597667be248f79ea4a8d202e7061cbd2ef0d15fe15a11ff2039bd398dbd317aaf8346c51236ecfd4e2fb6ad69346c20fd6496bee0b11de9acebce46cf3a4063bd0c97e9ef71ea2bbeab31065c00a584e092d26c41225db40782f33805752de6d98c63ee89cedbc44d9e9c728194123e7dbec63d46191e934f7b2e35ea06d29e75949baf1bb4ea96568a874ba6f96ee43f8a2480aac1f3bfebe7fd2534adb242387134fb41dc4988c393f59fc17becf2b9c8bbd561a8d419a93a0a5763c107f2c62db57f2d90ae60c6fe838cde89933c0c3453f2d619de83725de17219816b8dc4acc023104d463969dc00e5aa945a61b90bbe574a6748ed41e989f7f25500b658fea218a92920275a55b2296d214ead10500705a58b17ee564f42a1fbb8dea286c368c5d16796abfff8be32152dbadec38ad61914ec5c5d93b91d41866491fa13502c98b56c1eb7ffd2b931a7dc06a9b37a47751b59c1b2a8c28f0d9ca6d51a1da65b371a80c856e017838eb6944316dcf3bcebceeaa6a551b654a55775acb4b982ea75f1aa22a670d7cc62b96ecd0268c53e4d31e350b3fc83929472242256e4c2d53858cb43bea332319d193eaaf50a11830be9b1d33e9f80fa447acaff11bd5915d4de0ed8c1591341a2fbf57ce46cde6b7c0e6697e1a3225c82917c1a00b083da205f54d426b63440e328a7c717bb7e96231322c90d4ec0fd370adee784b6a318a54f18c181f0b0a9cef7042495a5aed20772b3fa0556dbf875765d393f292732a2fa013369d25313e827b6bf89b4a68a76bd83d6dbc2ae6f84fea6c7ae682eedce16efe0bc2e18a8c7f44d35f3c1cf394e47345e3dd0296c02f15a12f239d7da14c77f0c9055e99ff741be4af32970efa8b74c0091ebaefb2bc29342c1e46e1e90914daf6b5ab4db354572010a361929f88551b51264bbcc0e9eb6f3d99a4fdb5849fb6de389d7e41926256c68a2f5e30ee5fd82b26e45901dd1d3be1c7eec72434865cfb902ccdf3d552109a18ff59723acb43e05a726329e22e175191df225881137f96e1106d4812cacd81f9640921a864143da5dff1d40718264357ab63b5638e91fac940adfcaac6d4e9628496c1012b391e8337eb5357434ba382b5b553a146272cbad7e463b69a11fedf50ec1e65de69d9eb72e43fa286288f0c75fbe7e642b67777a77b2e7f745cb647463f5356843df161fbfbacd078a079abb5a76a040660d2ee928340bc2d52f61b783eeb4f8ecae6e90828dfd7c22a784d6845e5bcc3eec9d060ee1b39e4e4342544d802b089463af42a2e4fbc01bc093577404bef456204695d7bc11d3f320d5a9c8a396195520443e9fa3acc9b16acf1d62ae784e4732a5a95d9f857a08ab797a3948082c275509221e65f077a782e6042816fcd1c0237808d539fae2a4f219e09d8d48bd4e715b6c02b0f747b956f3b84817995f8e869b98d136776a67b060e5bc4a700f6988e4316a4e64433ca6336db4524a16253440f230ddd5b771d7953fbbeb9c8b2a9381eb2c844cf9a99254999157c2ef5ae526c0b70bf8ae31a3d1704ec1f24eac4dffc9e1a7d2616bbd05f459844b1f9d12a6f1da0d0d59329fec394801781acd570b413765dbe13f25a5288ab147f957c328f48cda45dec3797ca171a07aa432d720ee16b02583dac5eda1161e8dc9408002365980b713271c5e712fb938297edab7deb7122257acce6b82f5e0f9e2b6d556c24589a1c31c59ea99df844448926331560f857e65d482d1bc10e5eaaacfd8b6c6553f420d4799be4a9d6bf2bdb1f2c11139059863fd4e69761a6c853e718b14ac0c0c328b90a4eed3d2b53b55f5a73e0bf245bceab54abbb37d78a9c86c9ce7c9d61896475f686a653b5f90ae6a88a75b31842ad616dc53446b26daec504dc78672687b1cfa022fbc8f4c5125df419502ea2b60ee4f01578617a31c1da7f2539181a3d50aee51b51cd84bcafc9a060fe5eb9d56708248dfd0a637161c384f7a971290eba3ca86f3e2a1bf8705df091ee418da7826d64dac8ea62f0149a2ad0e066f517648f1d1a7d57d059290162f551687a28714166dee2e01ee10eb4952b6d3969a7a98699b920807a5e65289cc12ea320945f2361c31029ae10d0312bcca0fcda9d631c781f935156df2ac45d032029bbc15dfe580a9db7e6b303af1255a3fad0b2b93973d1fe9f080814d8ee14e71fc5bb3658a334bbacb719ff31786c742160bd9ff89741487861ad4bf298636e256e8e03023cf7b139fb74d88d030869514cbd3262105303ca3b94d7bf3a58b550e131289f5f818f07756add411f9b94a00c35e9d1861adab43a8130f93fa6018b972b8fa781e2d522be60ee5f279d14aadb03c1395f2136c0631b5169d0652369271cf1a2394f7b41e341c9f4292b27e572f730466b293a15466d9b2bd71cdbf519032ed92d6780bb6019ddb7ef9d289585d4dc9d72cea5e64dc24589f30d1016d522dc8f72b709be08d9af2cb59b926340e793632755003ec05803db62c00f397a479f6866389ac66f6be478d4a6787d0bf81754d5c1bae733fe36957d68e6894c733313714224ac5ecb5e8183a5981233215b9fe746a0e0d3cdb61c6012d48a26919645e0b2fad175e37f452d08eb2ddf14ae340b6fd48135da90bb39382e8a36d0a3046f45a89d3fafcab064a27911504ec90306afbb64142df32d11c13cfbb10a3302cb545f535b035ea4e507e2039b8fe7d6bf25923b3795e9470ff0bb8ea7fa9c41fe4927ed47da979377f91b9cd1dd3b42ff9d2511c5c8fc7e3553a2c9e4347c1e93bf5c0dbc46b86a3571f81e2d13eabf7b240f3301e3ad4a21ccc1bf336a802caa82f0c5931b42b382080370b6761d8ada258c53471ed9898cc9e65d5ecc74d404dd57f56b7c23afac2401aedf54ae17c788a0f8f1ee868e0a94bcb5c180b396eadf6137e0923f0b02288472324e1eab10c278bf3582c4f17555a3a02933574ad1893b8ea5d0b76a9132ac474d3c13949d765bc9d18c12a7e75a1900d614870ff2d701659cf4d7f1aed 您好, 这里需要密码.

2023/6/3
articleCard.readMore

Azure for Students 使用指北

准备 一个有 Azure for Students 的微软账户。 Azure for Students 提供了免费一年的两台 B1s 实例,两块 P6 64G 硬盘,本文将介绍如何利用好这些资源并且不会因为 Azure 毒瘤计费机制产生额外花费。 B1s 包含 1vcpu 和 1GB RAM 虽然配置不高但也还能用 登录 Azure 使用浏览器打开 Azure 后台,点击订阅,如果有 Azure for Students 的订阅就说明白嫖到了两台机子。 开服务器 返回到主页,点击 Azure 服务->虚拟机->创建->Azure 虚拟机。 接下来来到比较复杂的一步,项目详细信息部分不用管,会自动填写。 示例详细信息部分: 虚拟机名称:你的虚拟机名 区域:推荐 East Asia 和 Japan East,分别是中国香港和日本。 映像:即选择你的系统,Linux 推荐 Ubuntu 20.04 LTS;Windows 只有 Windows Server 2012 运行比较丝滑,点击 查看所有映像,找到 [smalldisk]Windows Server 2012 Datacenter-x64 Gen2。 大小:查看所有大小,选择 Standard_B1s。 注意如果是 Windows 机器不要选择 Azure 混合权益 其他都不用管。 如果是 Linux 按下图配置,Windows 自行解决。 入站端口全部勾选,接下来配置磁盘。 完成后,直接点左下角 查看+创建,系统验证完成后点击 创建,等待一会即可。 至此,你的虚拟机创建完成,IP 地址可在概要中找到。 连接 如果你会用则可以跳过。 Linux Linux 连接需要借助 SSH,推荐 termius 软件。 以下以 termius 为例,其它 SSH 软件配置也大差不差。 点击侧栏中 Hosts 选项,Add New Host。 按照这样填写,其他部分不用管,填写完成后点击 Set a Key->New->Import from key file,选择你之前在 Azure 下载的密钥文件,点击右上角 Save 后选中这个新建的 Key,然后点击右上角连接符号即可连接。 Windows 这里以你的实体机操作系统为 Windows 系统为例。 搜索 远程桌面连接 软件,打开后现点左下角显示选项,输入 IP 地址和你设置的用户名,然后点击连接,输入你设置的密码即可连接。 其它 如果你的虚拟机为 Windows,你会发现你的硬盘并没有 64G,所以我们需要处理这块硬盘的分区。 按下 win+x 键,找到 磁盘管理器(Disk Management)打开它,然后按下图操作。 题外话 其实 1G 的内存说实话当服务器确实有点小,较大型的项目肯定跑不了,小型的还是可以的。Windows 的服务器可以运行一些软件用来挂机。

2023/2/2
articleCard.readMore

AT_ABC286C 题解

洛谷题目传送门 | AT 原题传送门 思路 观察题目可以发现 A 操作最多只能执行 nnn 次,超过以后字符串又会回到初始状态。 首先考虑 A 操作如何实现,一种办法是将 SSS 在原串后复制一遍,通过移动一个记录初始位置的指针(本文中为 iii)来实现截取 nnn 位字符。每次移动指针代价都为 AAA。 接下来考虑 B 操作的代价计算。我们可以判断之前截取的字符串是否为回文。回文字符串判断应该都会吧通过移动起始位置和结束位置指针,比较两指针对应的字符是否相同进行回文判断,每次遇到不同,总代价都加 BBB。 值得注意的是结束位置指针的取值。每次 A 操作执行完成,截取出的字符串末位下标为 n+i−1n+i-1n+i−1,在此基础上再减去起始位置即可。 回文判断部分代码: 1 2 3 4 5 6 7 8 9 10 /*i 为 A 操作中起始位置指针,t 为总代价*/ for(int j=0;j<n/2;j++)//回文判断循环变量只需到 n/2 { int x=i+j;//起始位置 int y=n+i-1-j;//结束位置 if(s[x]!=s[y]) { t+=b; } } 以 A 操作中起始位置指针作为外层循环变量,范围 0∼n−10\sim n-10∼n−1,内层循环为回文串判断。总时间复杂度 O(n2)O(n^2)O(n2)。 一些小细节 观察数据范围可知需使用 long long\text{long long}long long; 最大值可取值 2622^{62}262 即 1ll<<62。 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include<cstdio> #include<string> #include<iostream> #define INF 1ll<<62 #define ll long long #define int ll using namespace std; int n,a,b; int ans=INF; string s; signed main() { scanf("%lld%lld%lld",&n,&a,&b); cin>>s; s+=s; for(int i=0;i<n;i++) { int t=a*i; for(int j=0;j<n/2;j++) { int x=i+j; int y=n+i-1-j; if(s[x]!=s[y]) { t+=b; } } ans=min(ans,t); } printf("%lld\n",ans); return 0; }

2023/1/28
articleCard.readMore

洛谷 AT1898 题解

洛谷题目传送门 | AT 原题传送门 一道简单的打表题。 我们可以把题目给出的 121212 个音所对应的输入字符串先存好,然后直接字符串比对。 然后按照比对结果输出对应的音符即可解决本题。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include<string> #include<cstring> #include<iostream> using namespace std; string s,str; string s1[20]={"","WBWBWWBWBWBW","BWBWWBWBWBWW","WBWWBWBWBWWB","BWWBWBWBWWBW","WWBWBWBWWBWB","WBWBWBWWBWBW","BWBWBWWBWBWW","WBWBWWBWBWWB","BWBWWBWBWWBW","WBWWBWBWWBWB","BWWBWBWWBWBW","WWBWBWWBWBWB"};//输入给出的颜色打表 string s2[20]={"","Do","#Do","Re","#Re","Mi","Fa","#Fa","So","#So","La","#La","Si"};//对应的音符打表 int main() { cin>>s; for(int i=0;i<=11;i++) { str+=s[i];//截取输入前 12 位 } for(int i=1;i<=12;i++) { if(str==s1[i])//字符串比对 { cout<<s2[i]<<endl; return 0; } } return 0; }

2022/7/20
articleCard.readMore

洛谷 CF1036A 题解

洛谷题目传送门 | CF 原题传送门 本题难度严重低于橙题 思路 这道题思考时,不妨设第 iii 个三角形的高为 hih_ihi​,面积为 SiS_iSi​,同时,题目还有已知条件底为222。 根据三角形面积公式,我们可以得到: S=S1+S2+⋯+Sn=(h1+h2+⋯+hn)×22=h1+h2+⋯+hn=kS=S_1+S_2+\cdots +S_n=\dfrac{(h_1+h_2+\cdots +h_n)\times 2}{2}=h_1+h_2+\cdots +h_n=kS=S1​+S2​+⋯+Sn​=2(h1​+h2​+⋯+hn​)×2​=h1​+h2​+⋯+hn​=k 由于 ∑i=1nhi=k\sum_{i=1}^n h_i=k∑i=1n​hi​=k 不变,同时满足最大的 hih_ihi​ 最小,所以 hhh 的值需要平均。 分析到这答案就出来了,即为 ⌈kn⌉\lceil \frac{k}{n}\rceil⌈nk​⌉,也就是 ⌊k+n−1n⌋\lfloor \frac{k+n-1}{n}\rfloor⌊nk+n−1​⌋。 代码 1 2 3 4 5 6 7 8 9 #include<cstdio> #define ll long long ll n,k; int main() { scanf("%lld%lld",&n,&k); printf("%lld\n",(k+n-(ll)1)/n); return 0; }

2022/7/13
articleCard.readMore

洛谷 CF1040A 题解

洛谷题目传送门 | CF 原题传送门 基础回文数判断题。 感觉题目翻译并不是很好,需要注意回文串中不能出现 222,例如 102011 0 2 0 110201 不能作为最终答案。 思路 直接把数组从 111 到 $\lfloor \frac{n}{2}\rfloor $ 扫一遍即可。 有以下几种情况需要分类讨论: 如果原串首尾不同但不是 222,即形如 101001010010100 这样的,无法变为回文串,直接输出 −1-1−1; 如果原串首尾都为 222,只需要把两个 222 都换成 000 和 111 中代价最小的数; 如果原串首尾有且仅有一个是 222,把那一个 222 改为和另一端相同的数; 最后再特判 nnn 为奇数的情况,如果中间数为 222,ansansans 需要再加上 min⁡(a,b)\min(a,b)min(a,b) 以形成不含 222 的回文串。 然后这道题就很简单了。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include<cmath> #include<iostream> using namespace std; inline int read() { int s=0,w=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } int n,a,b,t[30],ans=0; int main() { n=read();a=read();b=read(); for(int i=1;i<=n;i++) t[i]=read(); for(int i=1;i<=n/2;i++) { if((t[i]==0 && t[n-i+1]==1) || (t[i]==1 && t[n-i+1]==0))//首尾不同且不是2 { cout<<-1<<endl; return 0; } else if(t[i]==2 && t[n-i+1]==2)//首尾都为2 { ans+=min(a,b)*2; if(a<b) t[i]=t[n-i+1]=0; else t[i]=t[n-i+1]=1; } else if(t[i]!=2 && t[n-i+1]==2)//结尾为2 { if(t[i]==0) ans+=a,t[n-i+1]=0; else ans+=b,t[n-i+1]=1; } else if(t[i]==2 && t[n-i+1]!=2)//开头为2 { if(t[n-i+1]==0) ans+=a,t[i]=0; else ans+=b,t[i]=1; } } if(n%2==1 && t[n/2+1]==2) ans+=min(a,b);//n为奇数需要特判 cout<<ans<<endl; return 0; }

2022/7/12
articleCard.readMore

洛谷 SP3591 题解

洛谷题目传送门 | SP 原题传送门 本题双倍经验,同主题库P2926 思路 又是一道桶的题。 首先暴力,对于 N=100000N=100000N=100000,复杂度 O(n2)O(n^2)O(n2),显然超时。 考虑优化。 看题面,不难想到用桶记录每个数字的出现次数,只需要遍历数组找到比 aia_iai​ 小的数即可。 但是这样仍然超时,继续优化。发现遍历数组时没必要全遍历一边,只需要遍历到 n\sqrt{n}n ​ 即可。 注意以下几点: 对于完全平方数,n\sqrt{n}n ​ 会计算两遍,此时答案数减一; 奶牛会拍到自己的头,答案数还需要减一。 然后就可以看见一篇绿色了。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include<cmath> #include<iostream> #include<algorithm> using namespace std; inline int read() { int s=0,w=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } const int N=1e5+10; int n,ans=0; int a[N],t[1000010]; int main() { n=read(); for(int i=1;i<=n;i++) { a[i]=read(); t[a[i]]++; } for(int i=1;i<=n;i++) { ans=0; for(int j=1;j<=sqrt(a[i]);j++) { if(a[i]%j==0) { ans+=t[j]+t[a[i]/j]; if(j*j==a[i]) { ans-=t[j]; } } } cout<<ans-1<<endl; } return 0; }

2022/7/9
articleCard.readMore

洛谷 AT278 题解

洛谷题目传送门 | AT 原题传送门 思路 这道题考察了桶的思想。 定义两个桶,分别存放给出招牌中的每个字母的数量和配件包中的每个字母的数量 有两个小问题需要注意: 当招牌需要这个字母,而配件包里没有,直接输出 −1-1−1 并结束程序; 需要特判当配件包里的每个字符数量如果是 000,就要跳过本次循环,避免除数为 000。 思路不难,看看代码和注释就能理解吧 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include<cmath> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int ta[30],tb[30]; int n,m; string a,b; int maxn=-1; int main() { cin>>n>>m; cin>>a>>b; for(int i=0;i<n;i++) { ta[a[i]-'A'+1]++; } for(int i=0;i<m;i++) { tb[b[i]-'A'+1]++; } //上面的两个循环是桶的初始化,记录字符出现的数量 for(int i=1;i<=26;i++) { if(ta[i]!=0 && tb[i]==0)//特判输出 -1 的条件 { cout<<-1<<endl; return 0; } if(ta[i]==0 && tb[i]==0)//特判除数为 0 时的情况 { continue; } maxn=max(maxn,(int)(ceil(1.0*ta[i]/tb[i])));//直接进行计算 } cout<<maxn<<endl; return 0; } 求管理大大通过

2022/2/19
articleCard.readMore

洛谷 CF141B 题解

洛谷题目传送门 | AT 原题传送门 思路 这道题考察了桶的思想。 定义两个桶,分别存放给出招牌中的每个字母的数量和配件包中的每个字母的数量 有两个小问题需要注意: 当招牌需要这个字母,而配件包里没有,直接输出 −1-1−1 并结束程序; 需要特判当配件包里的每个字符数量如果是 000,就要跳过本次循环,避免除数为 000。 思路不难,看看代码和注释就能理解吧 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include<cmath> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int ta[30],tb[30]; int n,m; string a,b; int maxn=-1; int main() { cin>>n>>m; cin>>a>>b; for(int i=0;i<n;i++) { ta[a[i]-'A'+1]++; } for(int i=0;i<m;i++) { tb[b[i]-'A'+1]++; } //上面的两个循环是桶的初始化,记录字符出现的数量 for(int i=1;i<=26;i++) { if(ta[i]!=0 && tb[i]==0)//特判输出 -1 的条件 { cout<<-1<<endl; return 0; } if(ta[i]==0 && tb[i]==0)//特判除数为 0 时的情况 { continue; } maxn=max(maxn,(int)(ceil(1.0*ta[i]/tb[i])));//直接进行计算 } cout<<maxn<<endl; return 0; } 求管理大大通过

2022/2/10
articleCard.readMore

洛谷 AT2561 题解

洛谷题目传送门 | AT 原题传送门 思路 桶的思想。 用数组 ttt 存储 aaa 出现的次数,然后循环,用 kkk 减每个数出现的次数,看在哪个数时满足 k≤0k \leq 0k≤0 的条件,直接输出这个数的下标即可。 注意不开 long long\texttt{long long}long long 见祖宗 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include<cstdio> #include<iostream> #define ll long long using namespace std; ll n,k,a,b; ll t[100010],ans=0; int main() { scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++) { scanf("%lld%lld",&a,&b); t[a]+=b;//t为桶,增加a的个数 } while(k>0)//当k<=0时跳出循环 { k-=t[++ans];//每次k自减t[++ans] } printf("%lld\n",ans); return 0; }

2022/2/7
articleCard.readMore

洛谷 AT3525 题解

洛谷题目传送门 | AT 原题传送门 思路 分析题目可以很简单地得到,如果满足 pi=ip_i=ipi​=i 的条件,那么交换 pip_ipi​ 和 pi+1p_{i+1}pi+1​ 后得到的结果一定是最优解。 我们要做的只是从前到后遍历一遍 ppp 数组,如果 pi=ip_i=ipi​=i 就交换 pip_ipi​ 和 pi+1p_{i+1}pi+1​,同时 ansansans 累加。 看到楼下有大佬说当 i=ni=ni=n 是需要特判,但其实完全不需要,只要数组开的够大,也不会在交换 pnp_npn​ 和 pn+1p_{n+1}pn+1​ 时发生越界情况。但为了严谨也可以特判。 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n,p[100010]; int ans=0; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&p[i]); } for(int i=1;i<=n;i++) { if(p[i]==i) { ans++;//答案数量增加 swap(p[i],p[i+1]);//交换p[i]和p[i+1] } } printf("%d\n",ans); return 0; }

2022/2/7
articleCard.readMore

洛谷 CF899B 题解

洛谷题目传送门 | CF原题传送门 这个题是让求输入的连续几个月份是否合法。 直接模拟就行了吧。 需要注意闰年的情况。 大体思路 先打表确定每个月的天数,因为有 242424 个月,所以需要注意包含平年和闰年的全部情况。 因为输入是带有空格的,所以预先打表的月份天数之间也要带有空格,我们可以按照 平年、平年、闰年、平年、平年 的顺序预打表。 大概是这个样子: 1 2 // |平年-------------------------------|平年-------------------------------|闰年-------------------------------|平年--------------------------------|平年------------------------------- string sample="31 28 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 31 29 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 "; 读入每个月份时,需要用字符串,注意有空格,所以要用 getline,但如使用 scanf 读入的 nnn,需要用 getchar(); 吞上一行的回车。 输入字符串时,无需进行任何操作。读完后,直接使用 sample.find(s) 查找。 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include<cstdio> #include<string> #include<cstring> #include<iostream> using namespace std; // |平年-------------------------------|平年-------------------------------|闰年-------------------------------|平年-------------------------------|平年------------------------------ string sample="31 28 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 31 29 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 "; int n; string s; int main() { scanf("%d",&n); getchar();//吞n后面的回车 getline(cin,s);//读入一整行(包括空格,但不包括回车) if(sample.find(s)!=string::npos)//判断是否合法 { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } return 0; }

2022/2/4
articleCard.readMore

洛谷 AT4787 题解

洛谷题目传送门 | AT原题传送门 思路 这其实是一道递推题。 打眼一看,这道题和P1255 数楼梯是差不多的,只不过是本题又新增了一个条件:有 mmm 个楼梯是坏的。 如果没有这个条件,我们可以定义,第 iii 阶楼梯的总方案数为 fif_ifi​,从题目中可以很容易得出:fi=fi−1+fi−2(i≥2)f_i=f_{i-1}+f_{i-2}(i \geq 2)fi​=fi−1​+fi−2​(i≥2),因为只能从第 i−1i-1i−1 和第 i−2i-2i−2 阶楼梯上到第 iii 阶楼梯。 加上那个条件后,我们可以定义一个 bool\texttt{bool}bool 数组 vis\texttt{vis}vis,如果第 iii 阶楼梯是坏的,那 visi=truevis_i=truevisi​=true,否则 visi=falsevis_i=falsevisi​=false。 有几点需要注意: 每次递推都需  mod 109+7\bmod 10^9+7mod109+7; 如果连续两阶楼梯都是坏的,也就是 visi=truevis_i=truevisi​=true 且 visi−1=truevis_{i-1}=truevisi−1​=true,直接输出 000 并退出程序(不判断也不会超时); 从第 000 阶台阶开始计算; 赋 f0f_0f0​ 和 f1f_1f1​ 的初始值时要特判第 000 和第 111 阶楼梯是否损坏。 直接上代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include<cstdio> #include<iostream> using namespace std; inline int read()//快读 { int s=0,w=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } const int mod=1e9+7; int n,m,a,f[100010]; bool vis[100010]={0}; int main() { n=read();m=read(); for(int i=1;i<=m;i++) { a=read(); vis[a]=1;//标记该台阶已损坏 if(vis[a] && vis[a-1])//判断是否有连续两个台阶是坏的 { cout<<0<<endl; return 0; } } if(!vis[0])//特判第0和第1阶楼梯是否损坏 { f[0]=1; } if(!vis[1]) { f[1]=1; } for(int i=2;i<=n;i++) { if(vis[i]) f[i]=0;//如果该楼梯损坏,则无法上到该楼梯 else { f[i]=(f[i-1]+f[i-2])%mod;//递推式(不要忘了取模) } } cout<<f[n]<<endl; return 0; } 记得结尾要换行哦

2022/1/27
articleCard.readMore

洛谷 AT4810 题解

思路 直接暴力枚举。 有两点要注意: 如果当前求得的最小值为0,直接输出并退出程序;我第一遍就是这么TLE的。 数据范围是 2×1092 \times {10^9}2×109,再一乘必然会爆 int\texttt{int}int,所以要开 long long\texttt{long long}long long。 上代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include<cstdio> #include<iostream> #include<algorithm> #define ll long long using namespace std; ll l,r; ll ans=2020;//ans的初始值只要小于 mod2019 也就是2018 就可以 int main() { scanf("%lld%lld",&l,&r); for(ll i=l;i<=r;i++) { for(ll j=i+1;j<=r;j++) { ans=min(ans,(i*j)%2019); if(ans==0)//如果为0直接输出并退出程序,否则会超时 { printf("0\n"); return 0; } } } printf("%lld\n",ans); return 0; } 岛国的题一定要行末换行

2022/1/26
articleCard.readMore

洛谷 SP5450 题解

题目传送门 蒟蒻的第一篇题解 题目大意 这道题翻译言简意赅,不用我说了吧 先吐槽一下输入输出样例,这里给出调好格式的: 输入样例 1 2 3 4 2 3 1 2 0 0 输出样例 1 2 3 6 2 思路 先画个毫无必要的图理解一下 这个题分这么几步解决: 求正方形边长 求横边和纵边上分别有几块地砖 求总共需要几块地砖 显而易见,正方形边长为 lcm(W,H)lcm(W,H)lcm(W,H) ( WWW 和 HHH 最小公倍数) 然后不难得到,ans=lcm(W,H)W×lcm(W,H)Hans=\frac{lcm(W,H)}{W}\times \frac{lcm(W,H)}{H}ans=Wlcm(W,H)​×Hlcm(W,H)​,也就是横边上地砖数量 ×\times× 纵边上地砖数量。 下一步就是求 lcm(W,H)lcm(W,H)lcm(W,H),通过极其复杂非常简单的思考,可以得到 lcm(W,H)=W×Hgcd(W,H)lcm(W,H)=\frac{W\times H}{gcd(W,H)}lcm(W,H)=gcd(W,H)W×H​ gcd(W,H)gcd(W,H)gcd(W,H) 直接辗转相除法求就可以了 上代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 //By makerlife #include<cstdio> #include<iostream> #define ll long long using namespace std; ll gcd(ll x,ll y)//辗转相除求最大公因 { if(y==0) return x; else return gcd(y,x%y); } ll lcm(ll x,ll y)//求最小公倍数 { return x*y/gcd(x,y); } ll w,h;//记得开long long int main() { while(cin>>w>>h) { if(w==0 && h==0) break; printf("%lld\n",(lcm(w,h)/w)*(lcm(w,h)/h)); } return 0;//完美结束 } 记得绑定个人账户提交SP的题啊 这里再推荐一道题 P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

2022/1/1
articleCard.readMore