SAML での SSO の設定
Security Assertion Markup Language(SAML)は、当事者間で認証および承認の情報データを交換するための XML ベースのオープン標準のデータ形式です。
SAML には、次の 3 つの主要要素があります。
- ユーザ :サービス プロバイダ(Cisco Prime Service Catalog)へのログインを試行しているクライアント。
- アイデンティティ プロバイダ(IDP) :通常、ユーザがログインしているポータルであり、ユーザの ID に対する権限を保有します。ユーザのユーザ名、パスワード、および任意のグループ/属性の情報を保有しています。
(注) Prime Service Catalog 12.0 リリースのサポートでは、ユーザのログイン時に認証される IDP 接続は 1 つのみです。
- サービス プロバイダ(SP) :ユーザが使用を希望するアプリケーション。この場合、Cisco Prime Service Catalog です。
SAML は、Prime Service Catalog で実装されているため、Prime Service Catalog と統合するその他のアプリケーションは、認証の提供および IDP からのユーザ プロファイル情報のインポートを行う手段としてこれを使用できます。
注意
Prime Service Catalog では、LDAP と SSO ログイン用に設定された SAML の両方を設定することはできません。SAML SSO を使用する場合は、LDAP ログイン イベントを手動で無効にする必要があります。そうしないと、不正確なログイン動作につながります。
LADP ログインを無効にするには、[管理(Administration)] > [ディレクトリ(Directories)] > [イベント(Events)] に進み、ログイン イベントについて [編集(Edit)] をクリックします。イベントのステータスを [無効(Disabled)] に変更し、[更新(Update)] をクリックします。
ログイン動作
SAML シングル サインオンを実装するということは、サインイン プロセスとユーザ認証が完全に Prime Service Catalog の外部で処理されることを意味します。Prime Service Catalog は、SAML を IDP に対する認証を安全に行うための手段として使用します。承認は、Prime Service Catalog によって提供されます。システムに SAML が設定されている場合、ユーザはまず、IDP に対する認証を行う必要があります。正常に認証されると、ユーザは Prime Service Catalog にインポートされます。ユーザが存在せず、PSC にリダイレクトされた場合、そのユーザは、有効な権限があり、IDP が正しく設定されている場合のみ、アクセス権を付与されます。ユーザ セッションは、同一のブラウザ上で維持されます。
ログアウト動作
ログアウト動作は、newscale.properties ファイルで行う saml.enable.globalLogout プロパティの設定によって異なります。SAML 設定のためのプロパティを参照してください。
デフォルトでは、グローバル ログアウトは有効になっています。この場合、ユーザが Prime Service Catalog の 1 つのインスタンスからログアウトすると、そのユーザは、同じブラウザ上の他のインスタンスからもログアウトされます。
グローバル ログアウトが無効化されている場合、ユーザが Prime Service Catalog または Prime Service Catalog と統合されている他のアプリケーションからログアウトすると、SAML は、その特定のアプリケーションからのみユーザをログアウトします。これは、ローカル ログアウトと呼ばれます。
次のテーブルは、同じブラウザ上の 2 つの SP にグローバル ログアウトが設定されている場合のさまざまなログアウト動作を説明します。ここで、SP1 と SP2 は、2 つの Prime Service Catalog インスタンスです。
|
|
|
|
1 |
[はい(True)] |
[はい(True)] |
いずれかの SP がログアウトされると、SP1 と SP2 の両方がログアウトされる。 |
2 |
[はい(True)] |
いいえ(False) |
- SP1 がログアウトされると、SP2 もログアウトされる。
- SP2 がログアウトされても、SP1 はログアウトされない。
|
3 |
いいえ(False) |
[はい(True)] |
- SP1 がログアウトされても、SP2 はログアウトされない。
- SP2 がログアウトされると、SP1 もログアウトされる。
|
4 |
いいえ(False) |
いいえ(False) |
SP1 と SP2 のいずれかがログアウトされると、他方の SP もログアウトされる。 |
SAML でのユーザ管理
SAML を有効にすると、すべてのユーザ管理および認証は、Prime Service Catalog の外部で処理されます。ただし、Prime Service Catalog の外部で行われた変更は、Prime Service Catalog に即時に同期されます。ユーザ情報は IDP に対する認証を初めて試行したときにインポートされます。それ以降は、ユーザ情報がその後の試行によって更新されることはなく、ユーザの更新もありません。ユーザに対する変更は、Person Lookup OOB、Authorization Delegate、Person Lookup Service Form のために LDAP が有効化され、Import Person イベントが設定されると同期されます。システムからユーザを削除すると、そのユーザは Prime Service Catalog にサインインできなくなります(ただし、そのアカウントは Prime Service Catalog 内に存続します)。
SAML 設定のためのプロパティ
次の表では、お使いのシステムに SAML を設定するための newscale.properties での設定を説明します。
|
|
saml.lb.protocol |
LB の場合、「http」または「https」に 設定 します。 |
saml.lb.hostname |
公開される RC エンドポイントに設定します。 ループ バック アドレス(127.0.0.1 または localhost)ではないことを確認してください。LB またはリバース プロキシを使用する場合、公開されているエンドポイントの IP アドレスまたはドメイン名になります。 |
saml.lb.port |
適切なポート番号に設定します。 |
saml.lb.config.includeServerPortInRequestURL |
true または false に設定します。 true に設定すると、ポートは、SP と IDP の間での SAML での交信の際に要求/応答を検証するために使用されます。 |
saml.matadata.refreshInterval |
メタデータを更新する時間の間隔を設定します。 |
saml.provider.trustCheck |
すべてのプロバイダについて、署名の信頼性の検証を設定します。 |
saml.force.auth |
セッションが有効な場合でもユーザが認証を行う必要があるかどうかを設定します。 |
saml.enable.global.logout |
グローバル ログアウトを有効にするか無効にするかを設定します。デフォルトでは、true に設定されます。 |
saml.certificate.validation.config |
証明書検証の設定を指定します。詳細については、SAML 証明書の検証の設定を参照してください。 |
SAML 証明書の検証の設定
この項では、SAML 証明書の検証を設定する際に Prime Service Catalog で可能な SAML 証明書の検証の設定について説明します。
SAML 仕様では、メッセージを受信する際にはメッセージがデジタル署名されている必要があります。SAML では、署名は常に必要です。SAML 証明書を検証するには、次のプロパティを設定します。
プロパティ |
説明 |
checkFQDNValidity |
true に設定すると、証明書内の完全修飾ドメイン名または共通名がチェックされます。 |
allowSelfSignedCertificates |
true に設定すると、自己署名証明書が許可されます。 |
allowOnlyRootCertificates |
true に設定すると、ルート証明書のみが許可されます。デフォルトは false です。
(注) allowOnlyRootCertificates を true に設定すると、allowSelfSignedCerticates を false に設定していても、すべての自己署名証明書が許可されます。すべてのルート証明書は自己署名されているためです。
|
checkValidity |
true に設定すると、証明書の有効期間がチェックされます。 |
checkMaxExpiryDays |
true に設定すると、証明書の最大有効期間がチェックされます。 |
checkCertificateRevocation |
true に設定すると、証明書内の動的証明書失効リストがチェックされます。 |
checkTrust |
true に設定すると、信頼チェーンからの証明書が検証されます。 |
SAML REST API
SAML nsAPI にアクセスできるのは、サイト管理者および SAML 設定が可能なユーザのみです。SAML の設定および IDP マッピング に対する nsAPI 認証には、SAML が有効な場合でも、RC DB を使用します。したがって、ユーザは、RC DB のクレデンシャルを使用する必要があります。
正常に送信されたオーダーの応答メッセージは 200 です。
エラー応答メッセージについては、「REST/Web サービスのエラー メッセージ」の表および「エラー メッセージ」を参照してください。
表 9-1 SAML REST API テーブル
|
|
DELETE |
IDP 設定の削除 DELETE URL: http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs/<idp configuration name> IDP 設定を削除するには、IDP の固有名を入力します。 |
GET |
IDP 設定の取得 GET URL: http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs/<idp configuration name> IDP 設定を取得するには、IDP の固有名を入力します。 |
PUT |
ノードのメタデータの更新 PUT URL http://<ServerURL>/RequestCenter/nsapi/v1/idp/refreshThis |
POST |
IDP 設定の保存 POST URL: http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs 入力例:
"name": "ssocirclef631a5967b044cec94893ac700851de3",
"metadata": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<md:EntityDescriptor \r\n\txmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" \r\n\tentityID=\"https://auth.miniorange.com/moas\">\r\n\r\n\t<md:IDPSSODescriptor \r\n\t\tWantAuthnRequestsSigned=\"true\" \r\n\t\tprotocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\">\r\n\r\n\t\t<md:KeyDescriptor \r\n\t\t\tuse=\"signing\">\r\n\t\t\t<ds:KeyInfo \r\n\t\t\t\txmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\r\n\t\t\t\t<ds:X509Data>\r\n\t\t\t\t\t<ds:X509Certificate>MIICnjCCAgegAwIBAgIJAK3CyOFtrUj MA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYTAklOMQswCQYDVQQIDAJNSDENMAsGA1UEBwwEUFVORTETMBEGA1UECgwKbWluaU9yYW5nZTETMBEGA1UECwwKbWluaU9yYW5nZTETMBEGA1UEAwwKbWluaU9yYW5nZTAeFw0xNTAyMTEwNDQ1NDdaFw0xODAyMTAwNDQ1NDdaMGgxCzAJBgNVBAYTAklOMQswCQYDVQQIDAJNSDENMAsGA1UEBwwEUFVORTETMBEGA1UECgwKbWluaU9yYW5nZTETMBEGA1UECwwKbWluaU9yYW5nZTETMBEGA1UEAwwKbWluaU9yYW5nZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAx WMW0HNXVL4VB14PklXDo6rJlK3W4XHsxD7rBsG8e2LgbfjEjC0b k2/5ODuP9OvVQyHaZhMPWbS2z5S6cxCIxPfAJC5pCn9EVVoSDbz4C1Biyg9NJAUYp7oF 8JfKByLeWCOPRb9/G8/Bq5xQRAf CH/hSSsrNEQm5h NnhcCAwEAAaNQME4wHQYDVR0OBBYEFFq3KKnNFb1777slDNKfn30gXcvjMB8GA1UdIwQYMBaAFFq3KKnNFb1777slDNKfn30gXcvjMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEACP2t4JNkGh2ElJltQ3FSdWWHsvhGpGnpAdltdC8vW/Sf3a97IDeixr5GcQVfUfyYE nMQU0g2NJLYG1 hb13J58eQ9NhU8PgkSsJWaskST1KTNRu 30K3Dm8TOhZShWEvYBUzSDjcSJFUguXeoK/gx4wBuA8WEaKb9PC6xvac/4=</ds:X509Certificate>\r\n\t\t\t\t</ds:X509Data>\r\n\t\t\t</ds:KeyInfo>\r\n\t\t</md:KeyDescriptor>\r\n\r\n\t\t<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>\r\n\t\t<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>\r\n\t\t<md:SingleSignOnService \r\n\t\t\tBinding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" \r\n\t\t\tLocation=\"https://auth.miniorange.com/moas/idp/samlsso\"/>\r\n\t\t<md:SingleSignOnService \r\n\t\t\tBinding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" \r\n\t\t\tLocation=\"https://auth.miniorange.com/moas/idp/samlsso\"/>\r\n\t</md:IDPSSODescriptor>\r\n</md:EntityDescriptor>",
"costCenter": "costCenter",
"organizationUnit": "Department",
(注) 組織、ロケール、部門、およびコスト センターは任意です。これらのフィールドをマッピングしたくない場合は、空白の値を送信します。 |
PUT |
IDP 設定の更新 PUT URL: http://<ServerURL>/RequestCenter/nsapi/v1/idp/configs 入力例:
"metadata": "<?xml version=\"1.0\"?>\n<EntityDescriptor xmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"https://app.onelogin.com/saml/metadata/581650\">\n <IDPSSODescriptor xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\">\n <KeyDescriptor use=\"signing\">\n <ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:X509Data>\n <ds:X509Certificate>MIIEDjCCAvagAwIBAgIUBtd7yzkKX1N8+cmROGrTbzCn8OowDQYJKoZIhvcNAQEF\nBQAwVTELMAkGA1UEBhMCVVMxDjAMBgNVBAoMBVBTQ1FBMRUwEwYDVQQLDAxPbmVM\nb2dpbiBJZFAxHzAdBgNVBAMMFk9uZUxvZ2luIEFjY291bnQgOTA5MzYwHhcNMTYw\nODMxMDYzMjI4WhcNMjEwOTAxMDYzMjI4WjBVMQswCQYDVQQGEwJVUzEOMAwGA1UE\nCgwFUFNDUUExFTATBgNVBAsMDE9uZUxvZ2luIElkUDEfMB0GA1UEAwwWT25lTG9n\naW4gQWNjb3VudCA5MDkzNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\nALjcSyIa/RW7w3fh+KpdhmXsw2WSuYFJkfmZEqwHTSHGd0n1Kv6RvYtarWEvGsVN\njVTSgfMDZ14uW2qvTpCVjf5vWNvnGnOQFFjGWgMgsnrbKFGh62kvkNxKppqpdC1v\nwOZucoLvlaCJR/Od3SQNfQLwDAcpmbMiHb1bZm03bKMAPO+cw6mkKl8Ov3zuKt4I\nEdvwCIzZraRW9RUPPKXX7Y5sli3ywaxEy/69mxwaeuhMtFCk2BwYT8AJ+LMoeLXx\nIURPSobdTpqBQPEOmFcJ/8SaMHsr+1EP1HGxKM4bXocE0soFYH5MxPCTmedxnQ7L\nhBiSdVEGTJMGAzpejf2f85cCAwEAAaOB1TCB0jAMBgNVHRMBAf8EAjAAMB0GA1Ud\nDgQWBBRJ1vyA3mh0H7eH+OFrrq7oyTMAYTCBkgYDVR0jBIGKMIGHgBRJ1vyA3mh0\nH7eH+OFrrq7oyTMAYaFZpFcwVTELMAkGA1UEBhMCVVMxDjAMBgNVBAoMBVBTQ1FB\nMRUwEwYDVQQLDAxPbmVMb2dpbiBJZFAxHzAdBgNVBAMMFk9uZUxvZ2luIEFjY291\nbnQgOTA5MzaCFAbXe8s5Cl9TfPnJkThq028wp/DqMA4GA1UdDwEB/wQEAwIHgDAN\nBgkqhkiG9w0BAQUFAAOCAQEAQxh4/+8Vt2oSpWmMYPf8CpbH3sQuhphhEJzkEP7y\nkZILM1tV8szt9YFlfjUIH/usGOx/aIBEDpPj0T/UTGl4QhZyv5V+T3DhcZeOK7g3\nGJTy0w6HfWuGBY8FZTMOdGOdRSLQUOoKehIV0iIlrZAlEyMrPIx7qGrYf1zxFqoa\nyPzNT6/AUXqujcQjZwyRBwqT6429xX74ksVe0C8KmfEUvgPfNj+wtf+KhsCqckLX\nH/HQo6Ua4nU6vuBQLym9E0OEKAOHIYccJFqlBoREtRw/V/J7Gk5Z0yEq7XAM9EC/\n/A3vQG0DL6eIG9Tff5Tf+G4gyXQfGCDOhjkAxTbkoW+jJg==</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </KeyDescriptor>\n <SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://pscqa.onelogin.com/trust/saml2/http-redirect/slo/581770\"/>\n \n <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>\n \n <SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://pscqa.onelogin.com/trust/saml2/http-redirect/sso/581770\"/>\n <SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://pscqa.onelogin.com/trust/saml2/http-post/sso/581770\"/>\n <SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:SOAP\" Location=\"https://pscqa.onelogin.com/trust/saml2/soap/sso/581770\"/>\n </IDPSSODescriptor>\n <ContactPerson contactType=\"technical\">\n <SurName>Support</SurName>\n <EmailAddress>support@onelogin.com</EmailAddress>\n </ContactPerson>\n</EntityDescriptor>\n",
"organizationUnit": "Department",
|
GET |
SAML 設定の取得 GET URL: http://<ServerURL>/RequestCenter/nsapi/v1/saml/configs |
PUT |
SAML 設定の更新 PUT URL: http://<ServerURL>/RequestCenter/nsapi/v1/saml/configs 入力例:
"entityID": "75781d57-a5cd-4db2-a1d5-58407a8c7887",
"b64Certificate": "MIIDsjCCApqgAwIBAgIEIXc9vjANBgkqhkiG9w0BAQsFADB5MUMwQQYDVQQDDDo3YjQwNDMwYS04\nODAxLTQ2NDctOTNjNy03YzNjMjVkZTBkYTQtc2VydmljZWNhdGFsb2dkZWZhdWx0MQ0wCwYDVQQL\nDAROb25lMRQwEgYDVQQKDAtOb25lIEw9Tm9uZTENMAsGA1UEBhMETm9uZTAeFw0xNjExMDIxMzUw\nNTBaFw0xNzAxMzExMzUwNTBaMHkxQzBBBgNVBAMMOjdiNDA0MzBhLTg4MDEtNDY0Ny05M2M3LTdj\nM2MyNWRlMGRhNC1zZXJ2aWNlY2F0YWxvZ2RlZmF1bHQxDTALBgNVBAsMBE5vbmUxFDASBgNVBAoM\nC05vbmUgTD1Ob25lMQ0wCwYDVQQGEwROb25lMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEAryLcEinIjhnUu9wP8H/AWn/rYA2IkcuacD6VNEzHaNCBR+k//2MNv5jsVGAxpxUkjMi8uIjM\nJvTvW7wVEzMGVTai6XDG48jpZSTIkftnpeZuO3iydJoSI5BOiYxn4d6VqZnEDPas1QxrfiKsMqbC\nbfuWCtdOYE2Rqh8s0U6+BA2D/pXxbykfMYGa3hNbTgsvZjkfUropWTxrkNbP6mWOMbcC03e9ih9i\n95y3Et1APQ9uLDxcGf3Rr7h/md7k1S7pEunuJw7YSgmSDsg2gFnEnubT9SeWUvj5oT3/fHFElOvQ\nf8QlGKAJdRG1sP07mBSztDMlSYbtHWJfi+bYitD81wIDAQABo0IwQDAfBgNVHSMEGDAWgBQPOMLi\nmFPO0Ooj9Vs7UKmMdmhg3zAdBgNVHQ4EFgQUDzjC4phTztDqI/VbO1CpjHZoYN8wDQYJKoZIhvcN\nAQELBQADggEBAAwyRikaRzL/7ZahIonrsIxRr8QW+JRCAXJS52PRag/dGlpsxCp6/xD3QxJ+/EY2\n7gvO0lyBth23oKJVt3zgIH5tC+VHTdmT4Eeluv4iw4ZU0qYD/NCCEBilII68xOrASbE5fiBWpn3Q\nm7le5IXK7KIFUa5VmfOuGgXap9s0AF1TelGPjjlNXmMxWJgxlu8ms7/Uoaju2HdFyznAyK0bdzSX\nguR2VsQiwbWTuBDKySc9hoZd4qVFTJmVTVrjbpmrAEY/xk+OCVb0T1JJBtlZQEsYe6KR2xdnE6ny\nqycNHpclxVJ8yIXxeoLnJK2pmCbIcBt8v2fQPhPneBbaZOlerBg=",
"b64PrivateKey": "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvItwSKciOGdS73A/wf8Baf+tg\nDYiRy5pwPpU0TMdo0IFH6T//Yw2/mOxUYDGnFSSMyLy4iMwm9O9bvBUTMwZVNqLpcMbjyOllJMiR\n+2el5m47eLJ0mhIjkE6JjGfh3pWpmcQM9qzVDGt+IqwypsJt+5YK105gTZGqHyzRTr4EDYP+lfFv\nKR8xgZreE1tOCy9mOR9SuilZPGuQ1s/qZY4xtwLTd72KH2L3nLcS3UA9D24sPFwZ/dGvuH+Z3uTV\nLukS6e4nDthKCZIOyDaAWcSe5tP1J5ZS+PmhPf98cUSU69B/xCUYoAl1EbWw/TuYFLO0MyVJhu0d\nYl+L5tiK0PzXAgMBAAECggEALqim4N/o4pLXLkVuqbAfWv0BhFGWtOD9gDHsJkbeSXpjNvlZZ3zI\nSOdA7ynBkLX9StSgErm/ShGvQ01UgAzz/vfTZ0X4du8r3xpxpRLJhlVhwM5jHNV/R6JGijax5mca\nkFi69okxeoEYkj5CiiwLWKnSS4kZBGcmC6DKm+jSjtlop+ErzcLmiBqBPlQHL/rZpp0T62ojOMB/\nD8Au0IFecNIyitnTORBaOVRt1ohQXBhsrjSHQcXmP7TsDrm6H5XmE3sDfDT6UrYyvLNMuCNBfmrj\noE/kNnFUiQZthJWkFWoHSM1eehuUR6nsubg0q0KGrsI9ta+rof0FY51Ogr5jYQKBgQD44/5LT1u1\n6NLfM24dd2f6gD8cSV4VVfRLRktLogjqa8n3kTZOb/ELgLQDPotcHOQXDwDmK2OYpcfRG2RgGt22\nMXdLHawjWItmr2wkzhanojapdssiCU9NDb209eHOUpT82pz0Vouw9LlzV26J1++KiBoyGMO5Xh+L\nKjm5aNZQHQKBgQC0I4nuCvFMvJ14gIRvVmcCcHbHREVmuSeFOKsXL8kYkYsrUvcJmSkw6GnMtiSh\nfsHwFtJmakZa+QDBNUJhKuvyhfC+9vaUsPjXK20Oa5dd8eQoN9Bz9dTptjx001fphFiidNE4+f/1\nsKN/0YnKoBOJsEb7Zv3yzJCMPBoPHvmWgwKBgQCvTl+iCf6N7bUB88a+yIkbf1N0iBTVsFpG3vdQ\nCYyAGXYDg2ud6ej9ciTZGCeutMbPmwjGFo+rSDGrDsEvlBzQJJ1i8j56Evb1V+AzOFnqry4TRRIl\nIiuSGXiiyoHHApHgW9crnv37oRQyssWwH8GgcOcKnDjYCvzq184a00YI3QKBgDWqMLkdwW0e87qm\nbs3Ma7uqTXhnulUz67Ygf7fUoJAVK+SoPrg5TLApTPuTd6402QnxgpTILFWFwNfOSgwwgUIq7OG3\nKRZ68mcHpOGa4+k02seweQVSwy8s/y2+mH4U02LycjILKFnFWbAGeIpIzglC3qKeuCDRGG7uqMTA\ncZKJAoGAcrP9/zpxLyyBm8WjmAmC0UVgpCZmBDEEQKZxqNmqP/oIYbXCKClS5sQc7ybeXigyq37B\ncAuyHa+rVVl/FClnWlsgG9DmZOTjqyL7ttJSP9hJjHzlJp5dw6uVVexzWheZWFKbGC0obLod5522\nM+n5j+epGNK6tTRWfVERYnXthcc="
|