本章内容概览:
9.1: maximal margin classifier,最基本的分割方法,只适用于线性边界;
9.2: support vector classifier, 在 MMC 基础上进行了改进以提升适用范围;
9.3: support vector machine, 在 SVC 基础上拓展了非线性边界的分割能力;
9.4: 拓展 SVM 以满足多余两种分类的场景;
9.5: SVM 与其他分类方法(例如逻辑回归)的联系;
9.1 Maximal Margin Classifier
超平面的概念:式 (9.1), (9.2)。
被超平面分割的数学表示:式 (9.3), (9.4),图示:fig 9.1.
由 (9.6), (9.7) 推出 (9.8): 基于观测点的几何特征(一侧大于0,另一侧小于0)与响应变量的关系发现规律(都大于0), 这是与 Tree(在特征上分割)和线性方法(预测值与实际值的差距大小)都不同的地方。
优点:\(f(x^*)\) 绝对值的大小反映了预测的准确性。 图 9.2:同一个数据集上采用不同超平面分割示例。
如何在无数分割超平面中选择最优解? margin (超平面与最近观测点的距离)最大的平面。
隐藏假设:最大间隙超平面可以最合理地分割测试数据。 问题:这个假设是否始终成立?
图9.3:support vector machine 的 slab 图示。 问题:什么是 support vector?
MMC 特征:超平面仅由少数几个观测决定,不受其他观测影响。
MMC 的计算方法:式(9.9) ~ (9.11): 由于第 \(i\) 个观测点到超平面的垂直距离为 \[d_i = y_i(\beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \dots + \beta_p x_{ip})\]
所以 \(M = min(d_i), i \in [1..n]\),MMC 就是在所有超平面中找到 \(M\) 最大的那个超平面对应的 \(\beta_0 \dots \beta_p\).
图9.4,如何处理无法完全分割的情况:soft margin.
9.2 Support Vector Classifiers
图9.5:一个观测点可能对超平面产生显著影响,表明 MMC 具有一定的过拟合倾向。
SVC 对 MMC 的修正:
通过牺牲少数观测点上的分类正确性,换取最大多数观测点上更好的分类效果。
图9.6:SVC 对 MMC 修正的图示, 左图:观测点进入到 margin 内; 右图:观测点进入超平面错误的(不属于自己响应变量)一侧。
SVC 的计算方法:式(9.12) ~ (9.15),对应着 MMC 的(9.9) ~ (9.11)。 每个观测通过自己的 \(\epsilon_i\) 确定所处区域。
图9.7:对式 (9.15) 中 \(C\) 参数含义的说明: \(C\) 越大,间隙越宽松,容忍更多的观测点进入其内部甚至另一侧,所以间隙很宽; 随着 \(C\) 不断减小,间隙越来越严格,越来越窄。
问题:
SVC 的 support vector 与 MMC 的 support vector 有什么相同和不同点? (p347)
\(C\) 不断变大的过程中,variance 和 bias 如何变化? (p347, 348)
SVC 只依赖于部分观测点,远离超平面的观测点对超平面没有影响。 这一特点与哪种分类方法相同,与哪种方法不同? (p348)
9.3 Support Vector Machine
图9.8:非线性边界下使用 SVC 效果很差。
式 (9.16) 对 (9.12) ~ (9.15) 的改进: 增加了 \(p\) 个二次项,高维空间中的线性,映射到低位空间实现了非线性。
对式 (9.18) 的说明:对照 9.1.3 节第3段 \(f(x^*)\) 表达式, \(x\) 是一个长度为 \(p\) 的向量(注意内积符号与括号的区别): \[
f(x^*) = \beta_0 + \sum_{i=1}^n \alpha_i \langle x^*, x_i \rangle \\
= \beta_0 + \sum_{i=1}^n \alpha_i \sum_{j=1}^p x^*_j x_{ij} \\
= \beta_0 + (\alpha_1 x^*_1 x_{11} + \dots + \alpha_1 x^*_p x_{1p})
+ \dots + (\alpha_n x^*_1 x_{n1} + \dots + \alpha_n x^*_p x_{np}) \\
= \beta_0 + (\alpha_1 x_{11} + \dots + \alpha_n x_{n1})x^*_1
+ \dots + (\alpha_1 x_{1p} + \dots + \alpha_n x_{np})x^*_p \\
= \beta_0 + \beta_1 x^*_1 + \dots + \beta_p x^*_p \\
\therefore \beta_1 = \alpha_1 x_{11} + \dots + \alpha_n x_{n1}
= \sum_{i=1}^n \alpha_i x_{i1} \\ \dots \\
\beta_p = \alpha_1 x_{1p} + \dots + \alpha_n x_{np}
= \sum_{i=1}^n \alpha_i x_{ip} \\
\therefore \beta_k = \sum_{i=1}^n \alpha_i x_{ik}, \; i \in [1, p]
\]
inner products 个数的计算: \[
\begin{pmatrix} n \\ 2 \end{pmatrix} = C^2_n = \frac{n!}{2! (n-2)!} = \frac{n(n-1)}2
\]
问题:\(C^2_n\) 个内积是如何参与 \(f(x^*)\) 计算的?
SVM名称的由来:
When the support vector classifier is combined with a non-linear kernel such as (9.22), the resulting classifier is known as a support vector machine.
核 (kernel) 是一个函数,在 SVM 场景中是超曲面的一般化, 例如一次多项式核 (linear kernel) 是前几节里分析的超平面, 二次多项式核 (polynomial kernel of degree 2) 是二次超曲面等。 所谓 超 平/曲面,就是维度 (dimension) 大于2,无法在三维空间中图形展示的面。
使用一次多项式作为核的 SVM 就是 support vector classifier:
When \(d = 1\), then the SVM reduces to the support vector classifier seen earlier in this chapter.
式 (9.22): polynomial kernel of degree \(d\),式 (9.23):SVM 的一般表达式, 式 (9.24),极坐标核表达式。
图 (9.9): 左侧为多项式核分类效果,右侧为极坐标核分类效果。
极坐标核的分类结果主要由测试观测附近的观测决定,这就是 local 特征。
使用不同核函数与非线性边界,式 (9.16),相比的优点:
适当的核函数能节约计算资源:式 (9.16) 需要增加特征个数,变为 原始特征数 \(p\) 的 \(m\) 倍(例如对式 (9.16) \(m = 2\)), 训练集规模会变成 \(n \times p \times m\),计算量非常大。采用核函数,在观测数为 \(n\) 的训练集上, 则只需要计算 \(C^2_n\) 次,且仍然具备很高的灵活性,例如可以使用 \(d\) 次多项式核,径向核(radial kernel)等, 所以能处理特征数据极大的场景。
对比图 9.10 和 9.11:训练集上效果最好的 \(\gamma = 10^{-1}\) 模型在测试集上效果最差,显出出强烈的()倾向。
问题:下面这句话的依据是什么?(参考 4.4.3) > An optimal classifier will hug the top left corner of the ROC plot.
9.4 将 SVM 扩展到多分类场景
一对一分类:包含 \(K\) 个分类的场景中,共有 \(C^2_K\) 个一对一组合, 一个观测点的最终分类结果,取决于它在所有 \(C^2_K\) 个分类结果中的主成分;
一对多分类:K个分类中,选其中一个类作为传统二分类 SVM 的一边,标记为 \(+1\), 其他 \(K-1\) 组合起来作为另一边,标记为 \(-1\),类似于 K-fold CV 或者 LOOCV (leave-one-out-cross-validation), 分别计算这个 K 个 SVM,取绝对值最大的结果作为最终结果 (SVM 中,绝对值越大说明离分类边界越远,分类的可信度越高)。
9.5 SVM 与 Logistic Regression 的关系
得益于优异的性能和市场运作,以及创造性的思路,SVM 在1990年代中期获得了巨大的成功。 那是以专家系统为代表的第二次 AI 浪潮慢慢落幕的时代(维护成本、扩展能力、使用范围都达不到预期), 我们现在所处的,正是以机器学习在图像和语音识别、自动驾驶、围棋等领域的成功为代表的第三次 AI 浪潮中,显然这一次的实质性进展对上一次干货更多一些,但技术红利不可能永远存在, 当年 expert systems 的NB程度不输现在的 Alpha Go 特斯拉,但还有多少人记得它呢?
随着对经典统计算法与 SVM 关系的深入研究,人们发现 SVM 与回归算法本质上是一样的, 式 (9.12) ~ (9.15) 等价于 (9.25),所以 SVM 与 Ridge Regression, LASSO 一样统一于式 (9.26): \[
minimize_{\beta_0, \beta_1, \dots, \beta_p} \lbrace L(X, y, \beta) + \lambda P(\beta) \rbrace
\]
当 \(y_i\) 和 \(f(x_i)\) 同号,且乘积大于1时(此时基于 \(\beta_j\) 算出的 \(\hat y_i\) 与训练值 \(y_i\) 处于分隔面的同一侧, 且距离分隔面较远),\(1 - y_i f(x_i)\) 小于0,所以它的损失函数 \(L(X, y, \beta)\) 的值是0。
反之当计算结果与实际值不在同一侧(也就是基于现在的 \(\beta_j\) 算出了错误的结果)时损失函数是一个正数,离分隔面越远,损失函数越大。 所以能让损失函数取到最小值的那一组 \(\beta_j\),就是模型最优解。
为了避免过拟合,在损失函数上添加了惩罚项 \(\lambda P(\beta)\),对二者的和求最小值。
问题:
图 9.12 对比了 SVM 的 与 logistic regression 损失函数, 相似度非常高,区别在于 SVM 用 hinge loss “模拟”了 LR 的损失函数(p357第3段), 当训练集数据区分度较高时,SVM 效果好,当训练集数据重叠度较高时, logistic regression 效果好。
回归算法和 SVM 并无本质上的不同,还体现在:
二者可以解决的问题域是高度重叠的,只是由于历史原因,非线性核在 SVM 中用的比较多而已。
LS0tCnRpdGxlOiAiSVNMIOesrDnnq6DnrJTorrAiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCuacrOeroOWGheWuueamguiniO+8mgoKOS4xOiBtYXhpbWFsIG1hcmdpbiBjbGFzc2lmaWVy77yM5pyA5Z+65pys55qE5YiG5Ymy5pa55rOV77yM5Y+q6YCC55So5LqO57q/5oCn6L6555WM77ybCgo5LjI6IHN1cHBvcnQgdmVjdG9yIGNsYXNzaWZpZXIsIOWcqCBNTUMg5Z+656GA5LiK6L+b6KGM5LqG5pS56L+b5Lul5o+Q5Y2H6YCC55So6IyD5Zu077ybCgo5LjM6IHN1cHBvcnQgdmVjdG9yIG1hY2hpbmUsIOWcqCBTVkMg5Z+656GA5LiK5ouT5bGV5LqG6Z2e57q/5oCn6L6555WM55qE5YiG5Ymy6IO95Yqb77ybCgo5LjQ6IOaLk+WxlSBTVk0g5Lul5ruh6Laz5aSa5L2Z5Lik56eN5YiG57G755qE5Zy65pmv77ybCgo5LjU6IFNWTSDkuI7lhbbku5bliIbnsbvmlrnms5XvvIjkvovlpoLpgLvovpHlm57lvZLvvInnmoTogZTns7vvvJsKCiMgOS4xIE1heGltYWwgTWFyZ2luIENsYXNzaWZpZXIKCui2heW5s+mdoueahOamguW/te+8muW8jyAoOS4xKSwgKDkuMinjgIIKCuiiq+i2heW5s+mdouWIhuWJsueahOaVsOWtpuihqOekuu+8muW8jyAoOS4zKSwgKDkuNCnvvIzlm77npLrvvJpmaWcgOS4xLgoK55SxICg5LjYpLCAoOS43KSDmjqjlh7ogKDkuOCnvvJoK5Z+65LqO6KeC5rWL54K555qE5Yeg5L2V54m55b6B77yI5LiA5L6n5aSn5LqOMO+8jOWPpuS4gOS+p+Wwj+S6jjDvvInkuI7lk43lupTlj5jph4/nmoTlhbPns7vlj5HnjrDop4TlvovvvIjpg73lpKfkuo4w77yJ77yMCui/meaYr+S4jiBUcmVl77yI5Zyo54m55b6B5LiK5YiG5Ymy77yJ5ZKM57q/5oCn5pa55rOV77yI6aKE5rWL5YC85LiO5a6e6ZmF5YC855qE5beu6Led5aSn5bCP77yJ6YO95LiN5ZCM55qE5Zyw5pa544CCCgrkvJjngrnvvJokZih4XiopJCDnu53lr7nlgLznmoTlpKflsI/lj43mmKDkuobpooTmtYvnmoTlh4bnoa7mgKfjgIIK5Zu+IDkuMu+8muWQjOS4gOS4quaVsOaNrumbhuS4iumHh+eUqOS4jeWQjOi2heW5s+mdouWIhuWJsuekuuS+i+OAggoK5aaC5L2V5Zyo5peg5pWw5YiG5Ymy6LaF5bmz6Z2i5Lit6YCJ5oup5pyA5LyY6Kej77yfCiptYXJnaW4qIO+8iOi2heW5s+mdouS4juacgOi/keingua1i+eCueeahOi3neemu++8ieacgOWkp+eahOW5s+mdouOAggoK6ZqQ6JeP5YGH6K6+77ya5pyA5aSn6Ze06ZqZ6LaF5bmz6Z2i5Y+v5Lul5pyA5ZCI55CG5Zyw5YiG5Ymy5rWL6K+V5pWw5o2u44CCCumXrumimO+8mui/meS4quWBh+iuvuaYr+WQpuWni+e7iOaIkOeri++8nwoK5Zu+OS4z77yac3VwcG9ydCB2ZWN0b3IgbWFjaGluZSDnmoQgc2xhYiDlm77npLrjgIIK6Zeu6aKY77ya5LuA5LmI5pivIHN1cHBvcnQgdmVjdG9yPwoKTU1DIOeJueW+ge+8mui2heW5s+mdouS7heeUseWwkeaVsOWHoOS4quingua1i+WGs+Wumu+8jOS4jeWPl+WFtuS7luingua1i+W9seWTjeOAggoKTU1DIOeahOiuoeeul+aWueazle+8muW8jyg5LjkpIH4gKDkuMTEp77yaCueUseS6juesrCAkaSQg5Liq6KeC5rWL54K55Yiw6LaF5bmz6Z2i55qE5Z6C55u06Led56a75Li6CiQkZF9pID0geV9pKFxiZXRhXzAgKyBcYmV0YV8xIHhfe2kxfSArIFxiZXRhXzIgeF97aTJ9ICsgXGRvdHMgKyBcYmV0YV9wIHhfe2lwfSkkJAoK5omA5LulICRNID0gbWluKGRfaSksIGkgXGluIFsxLi5uXSTvvIxNTUMg5bCx5piv5Zyo5omA5pyJ6LaF5bmz6Z2i5Lit5om+5YiwICRNJCDmnIDlpKfnmoTpgqPkuKrotoXlubPpnaLlr7nlupTnmoQgJFxiZXRhXzAgXGRvdHMgXGJldGFfcCQuCgrlm745LjTvvIzlpoLkvZXlpITnkIbml6Dms5XlrozlhajliIblibLnmoTmg4XlhrXvvJoqc29mdCBtYXJnaW4qLgoKIyA5LjIgU3VwcG9ydCBWZWN0b3IgQ2xhc3NpZmllcnMKCuWbvjkuNe+8muS4gOS4quingua1i+eCueWPr+iDveWvuei2heW5s+mdouS6p+eUn+aYvuiRl+W9seWTje+8jOihqOaYjiBNTUMg5YW35pyJ5LiA5a6a55qE6L+H5ouf5ZCI5YC+5ZCR44CCCgpTVkMg5a+5IE1NQyDnmoTkv67mraPvvJoKCiog5bC96YeP5LiN5a+55Liq5Yir6KeC5rWL54K55pWP5oSf77ybCgoqIOaUvuW8g+WvueWFqOmDqOingua1i+ato+ehruWIhuexu++8jOWPquWvueWkp+WkmuaVsOingua1i+ato+ehruWIhuexu+WNs+WPr+OAggoK6YCa6L+H54m654my5bCR5pWw6KeC5rWL54K55LiK55qE5YiG57G75q2j56Gu5oCn77yM5o2i5Y+W5pyA5aSn5aSa5pWw6KeC5rWL54K55LiK5pu05aW955qE5YiG57G75pWI5p6c44CCCgrlm745LjbvvJpTVkMg5a+5IE1NQyDkv67mraPnmoTlm77npLrvvIwK5bem5Zu+77ya6KeC5rWL54K56L+b5YWl5YiwIG1hcmdpbiDlhoXvvJsK5Y+z5Zu+77ya6KeC5rWL54K56L+b5YWl6LaF5bmz6Z2i6ZSZ6K+v55qE77yI5LiN5bGe5LqO6Ieq5bex5ZON5bqU5Y+Y6YeP77yJ5LiA5L6n44CCCgpTVkMg55qE6K6h566X5pa55rOV77ya5byPKDkuMTIpIH4gKDkuMTUp77yM5a+55bqU552AIE1NQyDnmoQoOS45KSB+ICg5LjExKeOAggrmr4/kuKrop4LmtYvpgJrov4foh6rlt7HnmoQgJFxlcHNpbG9uX2kkIOehruWumuaJgOWkhOWMuuWfn+OAggoK5Zu+OS4377ya5a+55byPICg5LjE1KSDkuK0gJEMkIOWPguaVsOWQq+S5ieeahOivtOaYju+8mgokQyQg6LaK5aSn77yM6Ze06ZqZ6LaK5a695p2+77yM5a655b+N5pu05aSa55qE6KeC5rWL54K56L+b5YWl5YW25YaF6YOo55Sa6Iez5Y+m5LiA5L6n77yM5omA5Lul6Ze06ZqZ5b6I5a6977ybCumaj+edgCAkQyQg5LiN5pat5YeP5bCP77yM6Ze06ZqZ6LaK5p2l6LaK5Lil5qC877yM6LaK5p2l6LaK56qE44CCCgrpl67popjvvJoKCiogU1ZDIOeahCBzdXBwb3J0IHZlY3RvciDkuI4gTU1DIOeahCBzdXBwb3J0IHZlY3RvciDmnInku4DkuYjnm7jlkIzlkozkuI3lkIzngrnvvJ8gKHAzNDcpCgoqICRDJCDkuI3mlq3lj5jlpKfnmoTov4fnqIvkuK3vvIx2YXJpYW5jZSDlkowgYmlhcyDlpoLkvZXlj5jljJbvvJ8gKHAzNDcsIDM0OCkKCiogU1ZDIOWPquS+nei1luS6jumDqOWIhuingua1i+eCue+8jOi/nOemu+i2heW5s+mdoueahOingua1i+eCueWvuei2heW5s+mdouayoeacieW9seWTjeOAggrov5nkuIDnibnngrnkuI7lk6rnp43liIbnsbvmlrnms5Xnm7jlkIzvvIzkuI7lk6rnp43mlrnms5XkuI3lkIzvvJ8gKHAzNDgpCgojIDkuMyBTdXBwb3J0IFZlY3RvciBNYWNoaW5lCgrlm745LjjvvJrpnZ7nur/mgKfovrnnlYzkuIvkvb/nlKggU1ZDIOaViOaenOW+iOW3ruOAggoK5byPICg5LjE2KSDlr7kgKDkuMTIpIH4gKDkuMTUpIOeahOaUuei/m++8mgrlop7liqDkuoYgJHAkIOS4quS6jOasoemhue+8jOmrmOe7tOepuumXtOS4reeahOe6v+aAp++8jOaYoOWwhOWIsOS9juS9jeepuumXtOWunueOsOS6humdnue6v+aAp+OAggoK5a+55byPICg5LjE4KSDnmoTor7TmmI7vvJrlr7nnhacgOS4xLjMg6IqC56ysM+autSAkZih4XiopJCDooajovr7lvI/vvIwKJHgkIOaYr+S4gOS4qumVv+W6puS4uiAkcCQg55qE5ZCR6YeP77yI5rOo5oSP5YaF56ev56ym5Y+35LiO5ous5Y+355qE5Yy65Yir77yJ77yaCiQkCmYoeF4qKSA9IFxiZXRhXzAgKyBcc3VtX3tpPTF9Xm4gXGFscGhhX2kgXGxhbmdsZSB4XiosIHhfaSBccmFuZ2xlIFxcCj0gXGJldGFfMCArIFxzdW1fe2k9MX1ebiBcYWxwaGFfaSBcc3VtX3tqPTF9XnAgeF4qX2ogeF97aWp9IFxcCj0gXGJldGFfMCArIChcYWxwaGFfMSB4XipfMSB4X3sxMX0gKyBcZG90cyArIFxhbHBoYV8xIHheKl9wIHhfezFwfSkKICArIFxkb3RzICsgKFxhbHBoYV9uIHheKl8xIHhfe24xfSArIFxkb3RzICsgXGFscGhhX24geF4qX3AgeF97bnB9KSBcXAo9IFxiZXRhXzAgKyAoXGFscGhhXzEgeF97MTF9ICsgXGRvdHMgKyBcYWxwaGFfbiB4X3tuMX0peF4qXzEKICArIFxkb3RzICsgKFxhbHBoYV8xIHhfezFwfSArIFxkb3RzICsgXGFscGhhX24geF97bnB9KXheKl9wIFxcCj0gXGJldGFfMCArIFxiZXRhXzEgeF4qXzEgKyBcZG90cyArIFxiZXRhX3AgeF4qX3AgIFxcClx0aGVyZWZvcmUgXGJldGFfMSA9IFxhbHBoYV8xIHhfezExfSArIFxkb3RzICsgXGFscGhhX24geF97bjF9CiAgPSBcc3VtX3tpPTF9Xm4gXGFscGhhX2kgeF97aTF9IFxcIFxkb3RzIFxcClxiZXRhX3AgPSBcYWxwaGFfMSB4X3sxcH0gKyBcZG90cyArIFxhbHBoYV9uIHhfe25wfQogID0gXHN1bV97aT0xfV5uIFxhbHBoYV9pIHhfe2lwfSBcXApcdGhlcmVmb3JlIFxiZXRhX2sgPSBcc3VtX3tpPTF9Xm4gXGFscGhhX2kgeF97aWt9LCBcOyBpIFxpbiBbMSwgcF0KJCQKCmlubmVyIHByb2R1Y3RzIOS4quaVsOeahOiuoeeul++8mgokJApcYmVnaW57cG1hdHJpeH0gbiBcXCAyIFxlbmR7cG1hdHJpeH0gPSBDXjJfbiA9IFxmcmFje24hfXsyISAobi0yKSF9ID0gXGZyYWN7bihuLTEpfTIKJCQKCumXrumimO+8miRDXjJfbiQg5Liq5YaF56ev5piv5aaC5L2V5Y+C5LiOICRmKHheKikkIOiuoeeul+eahO+8nwoKU1ZN5ZCN56ew55qE55Sx5p2l77yaCgo+IFdoZW4gdGhlIHN1cHBvcnQgdmVjdG9yIGNsYXNzaWZpZXIgIGlzIGNvbWJpbmVkIHdpdGggYSBub24tbGluZWFyIGtlcm5lbCBzdWNoIGFzICg5LjIyKSwgdGhlIHJlc3VsdGluZyBjbGFzc2lmaWVyIGlzICBrbm93biBhcyBhIHN1cHBvcnQgdmVjdG9yIG1hY2hpbmUuCgrmoLggKGtlcm5lbCkg5piv5LiA5Liq5Ye95pWw77yM5ZyoIFNWTSDlnLrmma/kuK3mmK/otoXmm7LpnaLnmoTkuIDoiKzljJbvvIwK5L6L5aaC5LiA5qyh5aSa6aG55byP5qC4IChsaW5lYXIga2VybmVsKSDmmK/liY3lh6DoioLph4zliIbmnpDnmoTotoXlubPpnaLvvIwK5LqM5qyh5aSa6aG55byP5qC4IChwb2x5bm9taWFsIGtlcm5lbCBvZiBkZWdyZWUgMikg5piv5LqM5qyh6LaF5puy6Z2i562J44CCCuaJgOiwkyAqKui2hSoqIOW5sy/mm7LpnaLvvIzlsLHmmK/nu7TluqYgKGRpbWVuc2lvbikg5aSn5LqOMu+8jOaXoOazleWcqOS4iee7tOepuumXtOS4reWbvuW9ouWxleekuueahOmdouOAggoK5L2/55So5LiA5qyh5aSa6aG55byP5L2c5Li65qC455qEIFNWTSDlsLHmmK8gc3VwcG9ydCB2ZWN0b3IgY2xhc3NpZmllcu+8mgoKPiBXaGVuICRkID0gMSQsIHRoZW4gdGhlIFNWTSByZWR1Y2VzIHRvIHRoZSBzdXBwb3J0IHZlY3RvciBjbGFzc2lmaWVyIHNlZW4gZWFybGllciBpbiAgdGhpcyBjaGFwdGVyLgoK5byPICg5LjIyKe+8miBwb2x5bm9taWFsIGtlcm5lbCBvZiBkZWdyZWUgJGQk77yM5byPICg5LjIzKe+8mlNWTSDnmoTkuIDoiKzooajovr7lvI/vvIwK5byPICg5LjI0Ke+8jOaegeWdkOagh+aguOihqOi+vuW8j+OAggoK5Zu+ICg5LjkpOiDlt6bkvqfkuLrlpJrpobnlvI/moLjliIbnsbvmlYjmnpzvvIzlj7PkvqfkuLrmnoHlnZDmoIfmoLjliIbnsbvmlYjmnpzjgIIKCuaegeWdkOagh+aguOeahOWIhuexu+e7k+aenOS4u+imgeeUsea1i+ivleingua1i+mZhOi/keeahOingua1i+WGs+Wumu+8jOi/meWwseaYryAqbG9jYWwqIOeJueW+geOAggoK5L2/55So5LiN5ZCM5qC45Ye95pWw5LiO6Z2e57q/5oCn6L6555WM77yM5byPICg5LjE2Ke+8jOebuOavlOeahOS8mOeCue+8mgoK6YCC5b2T55qE5qC45Ye95pWw6IO96IqC57qm6K6h566X6LWE5rqQ77ya5byPICg5LjE2KSDpnIDopoHlop7liqDnibnlvoHkuKrmlbDvvIzlj5jkuLog5Y6f5aeL54m55b6B5pWwICRwJCDnmoQgJG0kIOWAje+8iOS+i+WmguWvueW8jyAoOS4xNikgJG0gPSAyJO+8ie+8jArorq3nu4Ppm4bop4TmqKHkvJrlj5jmiJAgJG4gXHRpbWVzIHAgXHRpbWVzIG0k77yM6K6h566X6YeP6Z2e5bi45aSn44CC6YeH55So5qC45Ye95pWw77yM5Zyo6KeC5rWL5pWw5Li6ICRuJCDnmoTorq3nu4Ppm4bkuIrvvIwK5YiZ5Y+q6ZyA6KaB6K6h566XICRDXjJfbiQg5qyh77yM5LiU5LuN54S25YW35aSH5b6I6auY55qE54G15rS75oCn77yM5L6L5aaC5Y+v5Lul5L2/55SoICRkJCDmrKHlpJrpobnlvI/moLjvvIzlvoTlkJHmoLjvvIhyYWRpYWwga2VybmVs77yJ562J77yMCuaJgOS7peiDveWkhOeQhueJueW+geaVsOaNruaegeWkp+eahOWcuuaZr+OAggoK5a+55q+U5Zu+IDkuMTAg5ZKMIDkuMTHvvJrorq3nu4Ppm4bkuIrmlYjmnpzmnIDlpb3nmoQgJFxnYW1tYSA9IDEwXnstMX0kIOaooeWei+WcqOa1i+ivlembhuS4iuaViOaenOacgOW3ru+8jOaYvuWHuuWHuuW8uueDiOeahO+8iO+8ieWAvuWQkeOAggoK6Zeu6aKY77ya5LiL6Z2i6L+Z5Y+l6K+d55qE5L6d5o2u5piv5LuA5LmI77yf77yI5Y+C6ICDIDQuNC4z77yJCj4gQW4gb3B0aW1hbCBjbGFzc2lmaWVyIHdpbGwgaHVnIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIFJPQyBwbG90LgoKIyA5LjQg5bCGIFNWTSDmianlsZXliLDlpJrliIbnsbvlnLrmma8KCiog5LiA5a+55LiA5YiG57G777ya5YyF5ZCrICRLJCDkuKrliIbnsbvnmoTlnLrmma/kuK3vvIzlhbHmnIkgJENeMl9LJCDkuKrkuIDlr7nkuIDnu4TlkIjvvIwKICDkuIDkuKrop4LmtYvngrnnmoTmnIDnu4jliIbnsbvnu5PmnpzvvIzlj5blhrPkuo7lroPlnKjmiYDmnIkgJENeMl9LJCDkuKrliIbnsbvnu5PmnpzkuK3nmoTkuLvmiJDliIbvvJsKICAKKiDkuIDlr7nlpJrliIbnsbvvvJpL5Liq5YiG57G75Lit77yM6YCJ5YW25Lit5LiA5Liq57G75L2c5Li65Lyg57uf5LqM5YiG57G7IFNWTSDnmoTkuIDovrnvvIzmoIforrDkuLogJCsxJO+8jAogIOWFtuS7liAkSy0xJCDnu4TlkIjotbfmnaXkvZzkuLrlj6bkuIDovrnvvIzmoIforrDkuLogJC0xJO+8jOexu+S8vOS6jiBLLWZvbGQgQ1Yg5oiW6ICFIExPT0NWIChsZWF2ZS1vbmUtb3V0LWNyb3NzLXZhbGlkYXRpb24p77yMCiAg5YiG5Yir6K6h566X6L+Z5LiqIEsg5LiqIFNWTe+8jOWPlue7neWvueWAvOacgOWkp+eahOe7k+aenOS9nOS4uuacgOe7iOe7k+aenAogIO+8iFNWTSDkuK3vvIznu53lr7nlgLzotorlpKfor7TmmI7nprvliIbnsbvovrnnlYzotorov5zvvIzliIbnsbvnmoTlj6/kv6Hluqbotorpq5jvvInjgIIKCiMgOS41IFNWTSDkuI4gTG9naXN0aWMgUmVncmVzc2lvbiDnmoTlhbPns7sKCuW+l+ebiuS6juS8mOW8gueahOaAp+iDveWSjOW4guWcuui/kOS9nO+8jOS7peWPiuWIm+mAoOaAp+eahOaAnei3r++8jFNWTSDlnKgxOTkw5bm05Luj5Lit5pyf6I635b6X5LqG5beo5aSn55qE5oiQ5Yqf44CCCumCo+aYr+S7peS4k+Wutuezu+e7n+S4uuS7o+ihqOeahOesrOS6jOasoSBBSSDmtarmva7mhaLmhaLokL3luZXnmoTml7bku6PvvIjnu7TmiqTmiJDmnKzjgIHmianlsZXog73lipvjgIHkvb/nlKjojIPlm7Tpg73ovr7kuI3liLDpooTmnJ/vvInvvIwK5oiR5Lus546w5Zyo5omA5aSE55qE77yM5q2j5piv5Lul5py65Zmo5a2m5Lmg5Zyo5Zu+5YOP5ZKM6K+t6Z+z6K+G5Yir44CB6Ieq5Yqo6am+6am244CB5Zu05qOL562J6aKG5Z+f55qE5oiQ5Yqf5Li65Luj6KGo55qE56ys5LiJ5qyhCkFJIOa1qua9ruS4re+8jOaYvueEtui/meS4gOasoeeahOWunui0qOaAp+i/m+WxleWvueS4iuS4gOasoeW5sui0p+abtOWkmuS4gOS6m++8jOS9huaKgOacr+e6ouWIqeS4jeWPr+iDveawuOi/nOWtmOWcqO+8jArlvZPlubQgKmV4cGVydCBzeXN0ZW1zKiDnmoROQueoi+W6puS4jei+k+eOsOWcqOeahCBBbHBoYSBHbyDnibnmlq/mi4nvvIzkvYbov5jmnInlpJrlsJHkurrorrDlvpflroPlkaLvvJ8KCumaj+edgOWvuee7j+WFuOe7n+iuoeeul+azleS4jiBTVk0g5YWz57O755qE5rex5YWl56CU56m277yM5Lq65Lus5Y+R546wIFNWTSDkuI7lm57lvZLnrpfms5XmnKzotKjkuIrmmK/kuIDmoLfnmoTvvIwK5byPICg5LjEyKSB+ICg5LjE1KSDnrYnku7fkuo4gKDkuMjUp77yM5omA5LulIFNWTSDkuI4gUmlkZ2UgUmVncmVzc2lvbiwgTEFTU08g5LiA5qC357uf5LiA5LqO5byPICg5LjI2Ke+8mgokJAptaW5pbWl6ZV97XGJldGFfMCwgXGJldGFfMSwgXGRvdHMsIFxiZXRhX3B9IFxsYnJhY2UgTChYLCB5LCBcYmV0YSkgKyBcbGFtYmRhIFAoXGJldGEpIFxyYnJhY2UKJCQKCuW9kyAkeV9pJCDlkowgJGYoeF9pKSQg5ZCM5Y+377yM5LiU5LmY56ev5aSn5LqOMeaXtu+8iOatpOaXtuWfuuS6jiAkXGJldGFfaiQg566X5Ye655qEICRcaGF0IHlfaSQg5LiO6K6t57uD5YC8ICR5X2kkIOWkhOS6juWIhumalOmdoueahOWQjOS4gOS+p++8jArkuJTot53nprvliIbpmpTpnaLovoPov5zvvInvvIwkMSAtIHlfaSBmKHhfaSkkIOWwj+S6jjDvvIzmiYDku6XlroPnmoTmjZ/lpLHlh73mlbAgJEwoWCwgeSwgXGJldGEpJCDnmoTlgLzmmK8w44CCCgrlj43kuYvlvZPorqHnrpfnu5PmnpzkuI7lrp7pmYXlgLzkuI3lnKjlkIzkuIDkvqfvvIjkuZ/lsLHmmK/ln7rkuo7njrDlnKjnmoQgJFxiZXRhX2okIOeul+WHuuS6humUmeivr+eahOe7k+aenO+8ieaXtuaNn+WkseWHveaVsOaYr+S4gOS4quato+aVsO+8jOemu+WIhumalOmdoui2iui/nO+8jOaNn+WkseWHveaVsOi2iuWkp+OAggrmiYDku6Xog73orqnmjZ/lpLHlh73mlbDlj5bliLDmnIDlsI/lgLznmoTpgqPkuIDnu4QgJFxiZXRhX2ok77yM5bCx5piv5qih5Z6L5pyA5LyY6Kej44CCCgrkuLrkuobpgb/lhY3ov4fmi5/lkIjvvIzlnKjmjZ/lpLHlh73mlbDkuIrmt7vliqDkuobmg6nnvZrpobkgJFxsYW1iZGEgUChcYmV0YSkk77yM5a+55LqM6ICF55qE5ZKM5rGC5pyA5bCP5YC844CCCgrpl67popjvvJoKCiogJFxsYW1iZGEkIOS4juW8jyAoOS4xNSkg5LitICRDJCDnmoTlhbPns7vmmK/ku4DkuYjvvJ8KCiogJFxsYW1iZGEkIOWmguS9leW9seWTjSBiaWFzLXZhcmlhbmNlIHRyYWRlLW9mZj8KCuWbviA5LjEyIOWvueavlOS6hiBTVk0g55qEIOS4jiBsb2dpc3RpYyByZWdyZXNzaW9uIOaNn+WkseWHveaVsO+8jArnm7jkvLzluqbpnZ7luLjpq5jvvIzljLrliKvlnKjkuo4gU1ZNIOeUqCAqaGluZ2UgbG9zcyog4oCc5qih5ouf4oCd5LqGIExSIOeahOaNn+WkseWHveaVsO+8iHAzNTfnrKwz5q6177yJ77yMCuW9k+iuree7g+mbhuaVsOaNruWMuuWIhuW6pui+g+mrmOaXtu+8jFNWTSDmlYjmnpzlpb3vvIzlvZPorq3nu4Ppm4bmlbDmja7ph43lj6DluqbovoPpq5jml7bvvIwKbG9naXN0aWMgcmVncmVzc2lvbiDmlYjmnpzlpb3jgIIKCuWbnuW9kueul+azleWSjCBTVk0g5bm25peg5pys6LSo5LiK55qE5LiN5ZCM77yM6L+Y5L2T546w5Zyo77yaCgoqIOWbnuW9kueul+azleS5n+WPr+S7pemHh+eUqOmdnue6v+aAp+aguO+8iOingeesrDfnq6DvvInvvJsKCiogU1ZNIOS4jeS7heiDveino+WGs+WIhuexu+mXrumimO+8jOS5n+WPr+S7peino+WGs+WbnuW9kumXrumimO+8jOS4juS8oOe7n+WbnuW9kueul+azleebuOavlO+8jAogIOWkmuS6hiBtYXJnaW4g55qE5qaC5b+177yI5Y+q5pyJ5aSn5LqO5p+Q5Liq6ZiI5YC855qE5q6L5beu5omN6KKr6K6h5YWl5o2f5aSx5Ye95pWw77yJ44CCCgrkuozogIXlj6/ku6Xop6PlhrPnmoTpl67popjln5/mmK/pq5jluqbph43lj6DnmoTvvIzlj6rmmK/nlLHkuo7ljoblj7Lljp/lm6DvvIzpnZ7nur/mgKfmoLjlnKggU1ZNIOS4reeUqOeahOavlOi+g+WkmuiAjOW3suOAgg==