Merge pull request 'feature/more_payment' (#315) from feature/more_payment into master

Reviewed-on: http://8.136.139.249:3000/wmtx/platform/pulls/315
master
廖金灵 4 years ago
commit 5887df2dd7

@ -0,0 +1,105 @@
<?php
namespace Admin\Controller;
use User\Api\UserApi as UserApi;
use Think\Model;
/**
* 支付/付款商户
*/
class TransferMerchantController extends ThinkController
{
public $TransferMerchant;
public function __construct()
{
$this->TransferMerchant = D("TransferMerchant");
parent::__construct();
}
public function lists()
{
$this->assign('statementPaymentInfo', $this->TransferMerchant->getStatementPaymentInfo());
$this->assign('underPaymentInfo', $this->TransferMerchant->getUnderPaymentInfo());
$this->display();
}
public function edit()
{
$ways = I('ways', 0);
if ($ways == 0) {
$this->error('参数错误');
}
$info = [];
if($ways == 1){
$info = $this->TransferMerchant->getStatementPaymentInfo();
}elseif($ways == 2){
$info = $this->TransferMerchant->getUnderPaymentInfo();
}else {
$this->error('参数错误');
}
$allaccount = $this->TransferMerchant->getField("id,account,name,main_name,is_free,config");
foreach ($allaccount as $key => &$val) {
$config = json_decode($val["config"],true);
foreach ($config as $k => $v) {
$val[$k] = $v;
}
unset($val["config"]);
$val['is_free_str'] = $this->TransferMerchant::IS_FREE_STR[$val['is_free']];
}
$way_str = $this->TransferMerchant::WAY_STR[$ways];
$this->meta_title = $way_str."设置";
$this->assign('allaccount', $allaccount);
$this->assign('ways',$ways);
$this->assign('info',$info);
$this->assign('way_str', $way_str);
$this->display('form');
}
public function save()
{
$id = I('id', 0);
$ways = I('ways',0);
if(empty($id) || empty($ways) || !in_array($ways,[1,2])){
$this->ajaxReturn([
'status' => 0,
'message' => '参数错误'
]);
}
if($ways == 1){
$info = $this->TransferMerchant->getStatementPaymentInfo();
}
if($ways == 2){
$info = $this->TransferMerchant->getUnderPaymentInfo();
}
if($info['id'] != $id){
$idinfo = $this->TransferMerchant->field("id,ways")->where("id = {$id}")->find();
$idsave = [
'id'=>$id,
'ways'=>$idinfo['ways']-0+$ways,
'update_time'=>time()
];
$this->TransferMerchant->save($idsave);
//修改之前的
$infosave = [
'id'=>$info['id'],
'ways'=>$info['ways']-$ways,
'update_time'=>time()
];
$this->TransferMerchant->save($infosave);
}
$this->ajaxReturn([
'status' => 1,
'message' => '保存成功'
]);
}
}

@ -0,0 +1,62 @@
<?php
namespace Admin\Model;
use Think\Model;
class TransferMerchantModel extends Model
{
protected $tablePrefix = 'tab_';
const WAY_STR =[
"0"=>"未启用",
"1"=>"线上对账打款",
"2"=>"线下打款",
"3"=>"通用一个账号"
];
const IS_FREE_STR = [
"1"=>"官方自营接口(提现免手续费)",
"2"=>"官方接口"
];
const StatementPaymentWhere ="ways = 1 or ways = 3";
const UnderPaymentWhere ="ways = 2 or ways = 3";
public function getStatementPaymentInfo()
{
$res = $this->where(self::StatementPaymentWhere)->find();
if($res){
return $this->setInfoStr($res);
}
return false;
}
public function getUnderPaymentInfo()
{
$res = $this->where(self::UnderPaymentWhere)->find();
if($res){
return $this->setInfoStr($res);
}
return false;
}
public function setInfoStr($item)
{
$item["is_free_str"] = self::IS_FREE_STR[$item["is_free"]];
return $item;
}
public function getStatementPaymentConfig()
{
$res = $this->where(self::StatementPaymentWhere)->field("config")->find();
if($res){
return json_decode($res['config'],true);
}
return false;
}
public function getUnderPaymentConfig()
{
$res = $this->where(self::UnderPaymentWhere)->field("config")->find();
if($res){
return json_decode($res['config'],true);
}
return false;
}
}

@ -0,0 +1,225 @@
<extend name="Public/base" />
<block name="body">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="__CSS__/admin_table.css" media="all">
<link href="__STATIC__/icons_alibaba/iconfont.css" rel="stylesheet">
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript" src="__STATIC__/provincecityarea/AreaData_min.js"></script>
<script src="__STATIC__/layer/layer.js"></script>
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<style>
.tabcon1711 input.time {
width: 150px;
}
#form .txt_area {
width: 300px;
height: 150px;
}
.tabcon1711 .form_unit {
margin-left: 2px;
}
.tabcon1711 .mustmark {
margin-left:-7px;
}
.list-ratio {
display: table;
}
.list-ratio .li-ratio {
display: flex;
margin-bottom: 20px;
align-items: center;
}
.list-ratio .li-ratio .turnover, .list-ratio .li-ratio .turnover-ratio {
position: relative;
}
.list-ratio .li-ratio .turnover span, .list-ratio .li-ratio .turnover-ratio .error-message {
color: red;
position: absolute;
left: 0;
top: 30px;
white-space: nowrap;
display: none;
}
.iconfont-btn {
cursor: pointer;
}
.iconfont-style {
font-size: 18px;
color: #fff;
border-radius: 4px;
border: 0;
padding: 5px;
margin-left: 10px;
}
.iconfont-selected {
background-color: #0A9AF2;
}
.iconfont-selected:hover {
background-color: #03a9f4;
}
.iconfont-unselected {
background-color: #999;
}
.iconfont-unselected:hover {
background-color: #ababab;
}
</style>
<div class="cf main-place top_nav_list navtab_list">
<h3 class="page_title">{$meta_title}</h3>
<!-- <p class="description_text">说明:此功是创建推广员时所需填写信息</p>-->
</div>
<!-- 标签页导航 -->
<div class="tab-wrap">
<div class="tab-content tabcon1711">
<!-- 基础文档模型 -->
<div id="tab1" class="tab-pane in tab1">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="l">功能模块:</td>
<td class="r table_radio">
<input type="text" class="txt" name="wayStr" readonly value="{$way_str}">
</td>
</tr>
<tr>
<td class="l"><i class="mustmark">*</i>账号:</td>
<td class="r">
<select name="id" id="id" class="select_gallery">
<?php foreach($allaccount as $key => $item):?>
<option value="<?=$key?>" <?php if($info && $info['id'] == $key):?>selected<?php endif;?>><?=$item['account']?></option>
<?php endforeach;?>
</select>
</td>
</tr>
<tr>
<td class="l">商户主体:</td>
<td class="r table_radio">
<input type="text" class="txt setdom" name="main_name" readonly value="">
</td>
</tr>
<tr>
<td class="l">支付账户名称:</td>
<td class="r table_radio">
<input type="text" class="txt setdom" name="name" readonly value="">
</td>
</tr>
<tr>
<td class="l">接口类型:</td>
<td class="r table_radio">
<input type="text" class="txt setdom" name="is_free_str" readonly value="">
</td>
</tr>
<tr>
<td class="l noticeinfo">APPID:</td>
<td class="r table_radio">
<input name="appId" type="text" value="" readonly class="setdom">
<span class="notice-text"></span>
</td>
</tr>
<tr>
<td class="l noticeinfo">alipayUserId:</td>
<td class="r table_radio">
<input name="alipayUserId" readonly type="text" value="" class="setdom">
<span class="notice-text"></span>
</td>
</tr>
<tr>
<td class="l noticeinfo">私钥:</td>
<td class="r table_radio">
<input name="rsaPrivateKey" type="text" class="setdom" readonly value="">
</td>
</tr>
</tbody>
</table>
<div id="merchant-detail" style="margin-top: 10px;">
</div>
</div>
<input type="hidden" name="ways" id="ways" value="{$ways}" />
<div class="form-item cf">
<button class="submit_btn mlspacing" id="submit" type="submit" target-form="form-horizontal">
确认
</button>
<a class="submit_btn " alt="返回上一页" title="返回上一页" href="javascript:window.history.back();" >
返回
</a>
</div>
</div>
</div>
</block>
<block name="script">
<script type="text/javascript">
//导航高亮
highlight_subnav("{:U('lists')}");
$(".select_gallery").select2();
var allaccount = {$allaccount|json_encode=512};
$(function(){
showTab();
$('#id').on({
change: function() {
var id = $(this).val();
setDomValue(id)
}
})
$('#id').change()
function setDomValue(id){
var data = {};
// if(id == "0"){
// data = {
// id:0,
// alipayUserId: "",
// appId: "",
// rsaPrivateKey: "",
// is_free_str:"",
// main_name:"",
// name:""
// }
// }else{
data = allaccount[id]
// }
$("#tab1 .setdom").each(function(index,dom){
let name = $(dom).attr("name");
$(dom).val(data[name])
})
}
$('#submit').click(function (e) {
var send = {
id:$("#id option:selected").val(),
ways:$("#ways").val()
}
var url = "{:U('save')}"
$.post(url,send).success(function(result){
if (result.status == 1) {
layer.msg(result.message)
setTimeout(function() {
window.location.href = '{:U("lists")}'
}, 200)
} else {
layer.msg(result.message)
}
});
});
});
</script>
</block>

@ -0,0 +1,161 @@
<extend name="Public/base"/>
<block name="css">
<link rel="stylesheet" href="__CSS__/select2.min.css" type="text/css" />
<link rel="stylesheet" href="__CSS__/promote.css" type="text/css"/>
<link rel="stylesheet" type="text/css" href="__STATIC__/webuploader/webuploader.css" media="all">
<style>
.select2-container--default .select2-selection--single {
color: #000;
resize: none;
border-width: 1px;
border-style: solid;
border-color: #a7b5bc #ced9df #ced9df #a7b5bc;
box-shadow: 0px 3px 3px #F7F8F9 inset;height:35px;
height:28px;border-radius:3px;font-size:12px;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
line-height:35px;
line-height:28px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow {
height:26px;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
height:26px;line-height:26px;font-size:12px;
}
.select2-results__option[aria-selected] {font-size:12px;}
.textarea-style {
width: 200px;
height: 80px;
border-radius: 5px;
padding: 5px;
}
.mustmark {
color: #FF0000;
font-style: normal;
margin: 0 3px;
}
.el-card {
border-radius: 4px;
border: 1px solid #ebeef5;
background-color: #fff;
overflow: hidden;
color: #303133;
transition: .3s;
}
.el-card .card-body {
padding: 20px;
}
.el-card .card-header {
padding: 18px 20px;
border-bottom: 1px solid #ebeef5;
box-sizing: border-box;
}
.clearfix:after {
content:"";
display: block;
clear:both;
}
.set-default-btn {
border: none;
background: #3C95C8;
font-size: 14px;
font-weight: normal;
color: #fff;
cursor: pointer;
border-radius: 3px;
display: inline-block;
text-align: center;
border-bottom: none;
width: 55px;
height: 28px;
line-height: 26px;
}
</style>
</block>
<block name="body">
<script type="text/javascript" src="__JS__/bootstrap.min.js"></script>
<script type="text/javascript" src="__JS__/select2.min.js"></script>
<script type="text/javascript" src="__JS__/jquery.form.js"></script>
<script type="text/javascript" src="__STATIC__/uploadify/jquery.uploadify.min.js"></script>
<script src="__STATIC__/md5.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="__STATIC__/webuploader/webuploader.js"></script>
<script src="__STATIC__/layer/layer.js" type="text/javascript"></script>
<script type="text/javascript" src="__STATIC__/layer/extend/layer.ext.js"></script>
<div class="cf clearfix main-place top_nav_list navtab_list">
<h3 class="page_title">支付宝打款设置</h3>
</div>
<!-- 数据列表 -->
<div class="data_list">
<div class="">
<table>
<!-- 表头 -->
<thead>
<tr>
<th>功能模块</th>
<th>账号</th>
<th>商户主体</th>
<th>支付账号名称</th>
<th>接口类型</th>
<th>操作</th>
</tr>
</thead>
<!-- 列表 -->
<tbody>
<tr >
<td>线上对账打款</td>
<empty name ="statementPaymentInfo">
<td>--</td>
<td>--</td>
<td>--</td>
<td>--</td>
<else />
<td>{$statementPaymentInfo.account}</td>
<td>{$statementPaymentInfo.main_name}</td>
<td>{$statementPaymentInfo.name}</td>
<td>{$statementPaymentInfo.is_free_str}</td>
</empty>
<td>
<a href="<?=U('edit', ['ways' => 1])?>">编辑</a>
</td>
</tr>
<tr >
<td>线下打款</td>
<empty name ="underPaymentInfo">
<td>--</td>
<td>--</td>
<td>--</td>
<td>--</td>
<else />
<td>{$underPaymentInfo.account}</td>
<td>{$underPaymentInfo.main_name}</td>
<td>{$underPaymentInfo.name}</td>
<td>{$underPaymentInfo.is_free_str}</td>
</empty>
<td>
<a href="<?=U('edit', ['ways' => 2])?>">编辑</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</block>
<block name="script">
<script>
<volist name=":I('get.')" id="vo">
Think.setValue('{$key}',"{$vo}");
</volist>
$(".select_gallery").select2();
</script>
<script type="text/javascript">
//导航高亮
highlight_subnav("{:U('lists')}");
</script>
</block>

@ -346,12 +346,13 @@ class ExcelPaymentController extends BaseController
}
$count = M("ExcelStatementInfo","tab_")->field("sum(statement_money) statement_money")->where("id in ({$ids})")->find();
$paymentInfo = D("Admin/TransferMerchant")->getUnderPaymentInfo();
$this->getAccountMoney();
// dd($CompanyInfo);
$this->assign("CompanyInfo",$CompanyInfo);
$this->assign("mobile",$this->admininfo['mobile']);
$this->assign("count",$count);
$this->assign("paymentInfo",$paymentInfo);
$this->display();
// $this->display();
@ -359,17 +360,21 @@ class ExcelPaymentController extends BaseController
}
public function getAccountMoney(){
Vendor("Alipay2020/Fund");
$isCanPayment = true;
if(empty(C("ALI_PAYMENT"))){
$isCanPayment = false;
$money = "测试站无法查看";
}else{
$fund = new \Fund(C("ALI_PAYMENT"));
$fund = new \Fund(D("Admin/TransferMerchant")->getUnderPaymentConfig());
$money = $fund->account();
if($money !== -1){
$money = $money['amount'];
}else{
$isCanPayment = false;
$money = "--";
}
}
$this->assign("isCanPayment",$isCanPayment);
$this->assign("money",$money);
}
//以下打款流程
@ -392,7 +397,7 @@ class ExcelPaymentController extends BaseController
}
Vendor("Alipay2020/Fund");
$fund = new \Fund(C("ALI_PAYMENT"));
$fund = new \Fund(D("Admin/TransferMerchant")->getUnderPaymentConfig());
$dbres = M("ExcelStatementInfo", "tab_")->where("id='{$id}'")->find();
$company_info = json_decode($dbres['company_info'], true);

@ -1261,31 +1261,37 @@ class PaymentController extends BaseController
}
$count = M("pay_statement_info","tab_")->field("sum(final_statement_money) statement_money")->where("id in ({$ids})")->find();
$paymentInfo = D("Admin/TransferMerchant")->getUnderPaymentInfo();
$this->getAccountMoney();
// dd($CompanyInfo);
$this->assign("CompanyInfo",$CompanyInfo);
$this->assign("mobile",$this->admininfo['mobile']);
$this->assign("count",$count);
$this->assign("paymentInfo",$paymentInfo);
$this->display();
// $this->display();
}
public function getAccountMoney(){
Vendor("Alipay2020/Fund");
$isCanPayment = true;
if(empty(C("ALI_PAYMENT"))){
$isCanPayment = false;
$money = "测试站无法查看";
}else{
$fund = new \Fund(C("ALI_PAYMENT"));
$fund = new \Fund(D("Admin/TransferMerchant")->getStatementPaymentConfig());
$money = $fund->account();
if($money !== -1){
$money = $money['amount'];
}else{
$isCanPayment = false;
$money = "--";
}
}
$this->assign("isCanPayment",$isCanPayment);
$this->assign("money",$money);
}
//以下打款流程
@ -1308,7 +1314,7 @@ class PaymentController extends BaseController
$this->ajaxReturn(["success"=>"配置错误,无法打款","data"=>["status"=>0]]);
}
Vendor("Alipay2020/Fund");
$fund = new \Fund(C("ALI_PAYMENT"));
$fund = new \Fund(D("Admin/TransferMerchant")->getStatementPaymentConfig());
$dbres = M("pay_statement_info", "tab_")->where("id='{$id}'")->find();
$company_statement = M("company_statement_info", "tab_")->field("pay_check")->where(['id'=>$dbres['statement_info_id']])->find();

@ -165,18 +165,30 @@
</table>
</div>
</div>
<div style="display: flex;padding:20px 10px;line-height: 40px;justify-content:center;">
<input name="verify" type="text" class="login_input verify" value="" placeholder="请填写验证码"/>
<div id="sendSasfeCode" class="g-btn" style="margin-left: 20px;">获取验证码</div>
<div style="margin-left: 20px;">接收验证码手机:{$mobile}</div>
</div>
<div class="search_list" style="display:flex;justify-content:flex-end;width:100%;">
<div class="input-list" style="margin-left: 30px;float: right;">
<a class="sch-btn" href="javascript:;" id="setPayment" style="width: 150px;">确认打款</a>
<div style="display: flex;justify-content:space-between;">
<div style="color: red;font-size: 18px;line-height: 82px;">
支付宝账号:{$paymentInfo['account']} &nbsp;&nbsp;&nbsp; 接口类型:{$paymentInfo['is_free_str']}
</div>
<if condition="$isCanPayment">
<div style="display: flex;padding:20px 10px;line-height: 40px;justify-content:center;">
<input name="verify" type="text" class="login_input verify" value="" placeholder="请填写验证码"/>
<div id="sendSasfeCode" class="g-btn" style="margin-left: 20px;">获取验证码</div>
<div style="margin-left: 20px;">接收验证码手机:{$mobile}</div>
</div>
<div class="search_list" style="display:flex;margin: 0;align-items:center;margin-right: 20px;">
<a class="sch-btn" href="javascript:;" id="setPayment" style="width: 150px;height: 40px;line-height: 40px;">确认打款</a>
</div>
<else />
<div style="font-size: 18px;line-height: 82px;">
打款接口错误,无法打款
</div>
</if>
</div>
<div style="width: 100vw;height: 100vh;padding: 0;position: absolute;top: 0;z-index: 9999;display: none;" id="creat_msg">
<div class="layui-layer layui-layer-dialog layui-layer-border layui-layer-msg layui-layer-hui"

@ -104,7 +104,7 @@
<div class="cf top_nav_list">
<div class="fl button_list">
<a class=" " href="{:U('add?model='.$model['id'])}"><span class="button_icon button_icon1"></span>新增</a>
<a style="background-image: none;border: none;margin-left: 30px;font-size: 16px;padding-right: 0;">当前账户余额:</a><a style="background-image: none;border: none;color: red">{$money}元</a>
<a style="background-image: none;border: none;margin-left: 30px;font-size: 16px;padding-right: 0;">当前结算打款账户余额:</a><a style="background-image: none;border: none;color: red">{$money}元</a>
</div>
</div>

@ -163,16 +163,26 @@
</div>
</div>
<div style="display: flex;padding:20px 10px;line-height: 40px;justify-content:center;">
<input name="verify" type="text" class="login_input verify" value="" placeholder="请填写验证码"/>
<div id="sendSasfeCode" class="g-btn" style="margin-left: 20px;">获取验证码</div>
<div style="margin-left: 20px;">接收验证码手机:{$mobile}</div>
</div>
<div class="search_list" style="display:flex;justify-content:flex-end;width:100%;">
<div class="input-list" style="margin-left: 30px;float: right;">
<a class="sch-btn" href="javascript:;" id="setPayment" style="width: 150px;">确认打款</a>
<div style="display: flex;justify-content:space-between;">
<div style="color: red;font-size: 18px;line-height: 82px;">
支付宝账号:{$paymentInfo['account']} &nbsp;&nbsp;&nbsp; 接口类型:{$paymentInfo['is_free_str']}
</div>
<if condition="$isCanPayment">
<div style="display: flex;padding:20px 10px;line-height: 40px;justify-content:center;">
<input name="verify" type="text" class="login_input verify" value="" placeholder="请填写验证码"/>
<div id="sendSasfeCode" class="g-btn" style="margin-left: 20px;">获取验证码</div>
<div style="margin-left: 20px;">接收验证码手机:{$mobile}</div>
</div>
<div class="search_list" style="display:flex;margin: 0;align-items:center;margin-right: 20px;">
<a class="sch-btn" href="javascript:;" id="setPayment" style="width: 150px;height: 40px;line-height: 40px;">确认打款</a>
</div>
<else />
<div style="font-size: 18px;line-height: 82px;">
打款接口错误,无法打款
</div>
</if>
</div>
<div style="width: 100vw;height: 100vh;padding: 0;position: absolute;top: 0;z-index: 9999;display: none;" id="creat_msg">

@ -6,19 +6,47 @@ require_once "aop/request/AlipayFundTransOrderQueryRequest.php";
require_once "aop/request/AlipayFundAccountQueryRequest.php";
class Fund {
public $appCertPath = __DIR__ . "/cert/appCertPublicKey_2021001150621489.crt";
public $alipayCertPath = __DIR__ . "/cert/alipayCertPublicKey_RSA2.crt";
public $rootCertPath = __DIR__ . "/cert/alipayRootCert.crt";
public $appCertPath = '';
public $alipayCertPath = '';
public $rootCertPath = '';
public $gatewayUrl = "https://openapi.alipay.com/gateway.do";
public $appId = "";
public $alipayUserId = ''; // pid
public $rsaPrivateKey = '';
public $is_init = false;
const DIR = [
// 默认金菠菜
'2021001150621489' => [
'appCertPath' => __DIR__ . "/cert/appCertPublicKey_2021001150621489.crt",
'alipayCertPath' => __DIR__ . "/cert/alipayCertPublicKey_RSA2.crt",
'rootCertPath' => __DIR__ . "/cert/alipayRootCert.crt"
],
// 核聚变
'2021002142651648' => [
'appCertPath' => __DIR__ . "/cert/hjb_cn/appCertPublicKey_2021002142651648.crt",
'alipayCertPath' => __DIR__ . "/cert/hjb_cn/alipayCertPublicKey_RSA2.crt",
'rootCertPath' => __DIR__ . "/cert/hjb_cn/alipayRootCert.crt"
],
// 核聚变2
'2021002144604182' => [
'appCertPath' => __DIR__ . "/cert/hjb2/appCertPublicKey_2021002144604182.crt",
'alipayCertPath' => __DIR__ . "/cert/hjb2/alipayCertPublicKey_RSA2.crt",
'rootCertPath' => __DIR__ . "/cert/hjb2/alipayRootCert.crt"
]
];
public function __construct($config)
{
if(empty($config)){
return false;
throw new Exception("请输入配置");
}
if (!self::DIR[''.$config['appId']]) {
throw new Exception("配置不存在".$config['appId']);
}
$this->appCertPath = self::DIR[''.$config['appId']]['appCertPath'];
$this->alipayCertPath = self::DIR[''.$config['appId']]['alipayCertPath'];
$this->rootCertPath = self::DIR[''.$config['appId']]['rootCertPath'];
$this->appId = $config['appId'];
$this->alipayUserId = $config['alipayUserId'];
$this->rsaPrivateKey = $config['rsaPrivateKey'];
@ -156,7 +184,6 @@ class Fund {
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
$ret['amount'] = $result->alipay_fund_account_query_response->available_amount;
return $ret;
} else {
return -1;

@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIQICEFEZ1Ryi1mdsoeKtWV1zANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDIgUjEwHhcNMjEwNTExMDU1MTAyWhcNMjMwNTExMDU1MTAyWjCBlTELMAkGA1UEBhMCQ04x
MDAuBgNVBAoMJ+emj+W7uuaguOiBmuWPmOe9kee7nOenkeaKgOaciemZkOWFrOWPuDEPMA0GA1UE
CwwGQWxpcGF5MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWF
rOWPuC0yMDg4MTQxMzg3MTI2MjAzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoZHJ
4YmIv3t7bWo4bNR5W+ChqL37pkoRiffFzSoK0xLaXfLzc7sKpWlht178NWgLcktLa99KjkEPivrw
9m9e0uIEUh0Kx8cUi2HGzNEoIK0kDmrzdSwSj58QvQwWbQHM4Q62CUqUr14xLsWjEOlVLIOmqiEu
GNGb+hyEtjX+4xEuZRLraR/k7spOVIdGqF2/Uns+gd4pLuox4AIxEnkB9JCuIUaCxmCAl4vBNhcF
YKg5rSdtU9CDy6YCM0ITA1E8cc5k4j9HKoNc4OwbWDG128R8dpYgu/v6zCahLFF1vTRrmT6V/51T
lCAgeSebN3hjbRWMgXksYEsvgFeS32+NvwIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZI
hvcNAQELBQADggEBAANo4iWXCe5q24gqztyuSdgD773p9K+IMvFioFusAyXHHyB0ly4CTWTtQjyl
8wJypJSATUcyD9zJrCit21FIvqGDPsz3JJ6DHWU3ttzNYUcCZPO/W8fGn7BGUGAXyy+13MBi/o8G
l3+ShNbuN6IPohbfsga0bGkHembFIBGBAIX5fHvpFD2kYw8uLJLBoGqEizzBKwWI5UkY2M9XuyWG
S50zJfxzjsK9FPaRkQnyaQOf5u5+u+baBfl41qm0QT+NF89nW0hyCcHFRwzoffQ2hNEFuSaLN9BD
Tx5DUzbBRmvCaLRhEnIbiWI+RC5FPrVKop5vE3sD/Jr/3VLy4pm2IrE=
-----END CERTIFICATE-----

@ -0,0 +1,88 @@
-----BEGIN CERTIFICATE-----
MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
pDoiVhsLwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
kT9qhqn+lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
Yf4Zr0fJsGuv
-----END CERTIFICATE-----

@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIEtDCCA5ygAwIBAgIQICEFEb0BLZoa0MMtoaWcoDANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDEgUjEwHhcNMjEwNTExMDU1MTAxWhcNMjMwNTExMDU1MTAxWjB8MQswCQYDVQQGEwJDTjEw
MC4GA1UECgwn56aP5bu65qC46IGa5Y+Y572R57uc56eR5oqA5pyJ6ZmQ5YWs5Y+4MQ8wDQYDVQQL
DAZBbGlwYXkxKjAoBgNVBAMMITIwODgxNDEzODcxMjYyMDMtMjAyMTAwMjE0NDYwNDE4MjCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ/8qMhOxn8ZaVU+NBU1FjCLLFmuMtKNXi748o3B
b8dokuuQZaQ2OR7qU/mIL41oWwQ0ceoLkArsFcVbppXrrUcz+Mk1hTMOqFvOFAMITOyAoy2d1338
8vr8pEqu1UQM7FNQSXtHI2fKPWLOa89JR8T7dCGzpdojhGx1a1gDKx8BooUbWQ4rS7lrEmgy1C6J
LuowCxYpAsKiNb3jkpNFligB2QJ6Vfjdo1OaOBgmP/4cofr8EShGtf+ZdI/QM+7te9FY4hnswzJr
m8DSy+1uK4Ggin4B1aKQDoKJZ2YJBClja3FUKZwtIu0GDhI2r6utDXrT1pKBevfWqt2iRtcscjsC
AwEAAaOCASkwggElMB8GA1UdIwQYMBaAFHEH4gRhFuTl8mXrMQ/J4PQ8mtWRMB0GA1UdDgQWBBQ8
pLRegqyv4gMuRHHl4q4JkK+jdTBABgNVHSAEOTA3MDUGB2CBHAFuAQEwKjAoBggrBgEFBQcCARYc
aHR0cDovL2NhLmFsaXBheS5jb20vY3BzLnBkZjAOBgNVHQ8BAf8EBAMCBsAwLwYDVR0fBCgwJjAk
oCKgIIYeaHR0cDovL2NhLmFsaXBheS5jb20vY3JsNTMuY3JsMGAGCCsGAQUFBwEBBFQwUjAoBggr
BgEFBQcwAoYcaHR0cDovL2NhLmFsaXBheS5jb20vY2E2LmNlcjAmBggrBgEFBQcwAYYaaHR0cDov
L2NhLmFsaXBheS5jb206ODM0MC8wDQYJKoZIhvcNAQELBQADggEBAH+LqYmPiYnCU5gdeEa0r5ul
AB6utev+9P1ABctieZlELfmwUc6+opvm0X6Zrn4nGFiuPuTLLgXsj5Q4Q98eXBWBg7ZU3CahrYd3
/93ehSeNqlY8DFcGuOctSe5a3ZgsZZxC6XVV+7DPDOXc2+lqd7qxhkGM+1Oi/KWBq84i+SGMCwS4
cLwwlQ/5WtCf8XobtMGd8FVUsAMOVHt8KGGwH3nrlw2D7g9SLMyfvB8dHfu5jSpWeQ9BT9LVTvFn
J8LnCR+SqjxDkRl+i4ZB+v8VPx9/ojfejsDmjm+i31TH+YuBqs7nWCEtdUbipoutzWXhOie8hhSn
0iN7A6fo6a2KKVU=
-----END CERTIFICATE-----

@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIQICEFB3/heWeo5UbADE+X7zANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDIgUjEwHhcNMjEwNTA3MDkyMzM2WhcNMjMwNTA3MDkyMzM2WjCBlTELMAkGA1UEBhMCQ04x
MDAuBgNVBAoMJ+emj+W7uuaguOiBmuWPmOe9kee7nOenkeaKgOaciemZkOWFrOWPuDEPMA0GA1UE
CwwGQWxpcGF5MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWF
rOWPuC0yMDg4MDQxMDU5MDAxNjU5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi8/d
mEqGWDmQl6+vRdV+L27V1yTZvTEiS1CICHSMHspIQE3D2lklzqxehtqv4ic+dsAEiCQyGsIYMNM8
Q6akCH6dI6c5QwqotqwzhdgLIQjD0ldItdqN2XLowKRdHUo4MJRDuxxQfmsBlFYVaCJmMe1M50jp
9v2dtpwftt4u8w6c0T25iPXLscrS0sprR3DUkKC/dKd9AcFlRNpx7q92ePz90yRXHpVNm1M4AJa2
WiepANfyhrsXWLDhZKH5HLOKCWJjR86L6F4xosKIWtwf65pcvU4fMGfKB2rRlgQVAmLhXlNB3HOy
CCPrey8ibRygdQPh0G8js0Gke/nYnZ66dwIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZI
hvcNAQELBQADggEBAAsMIIpIW57Yl1i6Tgky2VtLeNuwad/d9NySnTyJyTbi6U5in1aR4cJQ550O
dq/Ww6+tJw62GX9QAtl7GNZ9BNrw2QHTwSApwcJd8GLV2FvoVl1WZHMbMbNo44TdcAzLcN0ZF9wn
C8mcE4e/7GS9fcC22Wx4c1O1rxHM/+W3C0/KpmR4u7kLBB2ZM7lyL0i4SJf90Ig0AVEKzQKijLpm
oYIdZ0FW/lmh6UIhrt12JX3EavhQLK679LZiGAVhPvv9KeADt6QUxJXjqMXSe1rOf5e9iFNY1M1a
QY5AvdNNmcU/6G8YC6O/bXnfAZZap95kkauJVHqSSKkD7DOIDYg1vVQ=
-----END CERTIFICATE-----

@ -0,0 +1,88 @@
-----BEGIN CERTIFICATE-----
MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
pDoiVhsLwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
kT9qhqn+lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
Yf4Zr0fJsGuv
-----END CERTIFICATE-----

@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIEtDCCA5ygAwIBAgIQICEFB1cMG15YqAKM4Sf8JTANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDEgUjEwHhcNMjEwNTA3MDkyMzM2WhcNMjMwNTA3MDkyMzM2WjB8MQswCQYDVQQGEwJDTjEw
MC4GA1UECgwn56aP5bu65qC46IGa5Y+Y572R57uc56eR5oqA5pyJ6ZmQ5YWs5Y+4MQ8wDQYDVQQL
DAZBbGlwYXkxKjAoBgNVBAMMITIwODgwNDEwNTkwMDE2NTktMjAyMTAwMjE0MjY1MTY0ODCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIhy0lW1xljvx6jgJQaHKm58Q79jVX32CP11ovwf
4FVrLAiDXDFfYd6RxsCT79DzgkE3/HGZdA4jEJMfpyEpKONut/S//a4aYw08jgt0skhz7+UJ9gH1
0NaE2TjzN2aSkxXQtqvzY0hg2kzaUyvIlQyzE7aLF1vhxFblnbsO2zu1FTGo8qa2uBVswhF0ETHC
mS0br6Bl5RwXCDuwwPcN+DZEovW3PvB+aw67Rk6Hzx59ZI+/vfhuQxaBqmVNvK2lV2/nh+BvV/f1
i487RiKfNrwlYBcwkgYIR8FZ3STRQ3fQHovM2fVxwvK3SrcTzPXwKb+VAsEj5wM/Hgn+mUw846UC
AwEAAaOCASkwggElMB8GA1UdIwQYMBaAFHEH4gRhFuTl8mXrMQ/J4PQ8mtWRMB0GA1UdDgQWBBS8
nD/L8wGWqcQvEPDs81G8uoG6mTBABgNVHSAEOTA3MDUGB2CBHAFuAQEwKjAoBggrBgEFBQcCARYc
aHR0cDovL2NhLmFsaXBheS5jb20vY3BzLnBkZjAOBgNVHQ8BAf8EBAMCBsAwLwYDVR0fBCgwJjAk
oCKgIIYeaHR0cDovL2NhLmFsaXBheS5jb20vY3JsNTMuY3JsMGAGCCsGAQUFBwEBBFQwUjAoBggr
BgEFBQcwAoYcaHR0cDovL2NhLmFsaXBheS5jb20vY2E2LmNlcjAmBggrBgEFBQcwAYYaaHR0cDov
L2NhLmFsaXBheS5jb206ODM0MC8wDQYJKoZIhvcNAQELBQADggEBAD7RPlbrZ6YCE9rVnomEgsl+
wM3Bl5F3zFjhCDjYGdRQ9DUU02Fls5ZqF/yD14xSxLoai8SY/88sloJxUd+7Pa6He68LcbxqNZ2h
cQDQT3tRfY6gisQalrk43ZOHyXdw5edhL4i9c8ioaz7t6elpOxhma9ayqywOxp0/PU7OXLYeJpXi
OTzELYz0zbGKSnMBb3yAhzmiZiv/xzFxbYxkbP+LbQVOJKommEhgKjcrksMz4zP342nwjBbjd77P
aCW85LJgmGirdFjuOO07vaSloqNj+omS49D07wySqBvW++LIYW6XNtBcxis5Cdd/QPQCC7hAZ8zl
o9/4Auh/PZDMiTI=
-----END CERTIFICATE-----
Loading…
Cancel
Save