FEHWT3MOW3STJXNBQWXSY6ZDSJIJWVU6EWCXA6KARH7DCYFNM5NQC {"name": "discopotty","version": "0.1.0","sources": {"dir": "src","subdirs": true},"package-specs": {"module": "commonjs","in-source": true},"suffix": ".bs.js","bs-dependencies": ["@quartz55/relog","bs-fluture","wonka","rationale"],"ppx-flags": ["let-anything/ppx"],"warnings": {"error": "+101"},"refmt": 3}
{"name": "discopotty","version": "0.1.0","lockfileVersion": 1,"requires": true,"dependencies": {"@discordjs/uws": {"version": "11.149.1","resolved": "https://registry.npmjs.org/@discordjs/uws/-/uws-11.149.1.tgz","integrity": "sha512-TmbwZaeXDSCq0ckmf2q10Fkt1220gu9AZJ/UvtQjsi2jyJDjy0i0OwL4/eb3vc9Cwr0mpC9EbfzltQ2si0qUiQ=="},"@quartz55/relog": {"version": "github:quartz55/relog#3e4527a1f8866ed29daf37888649a6aa211df405","from": "github:quartz55/relog#master","requires": {"chalk": "^2.4.2","luxon": "^1.10.0"}},"ansi-styles": {"version": "3.2.1","resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz","integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==","requires": {"color-convert": "^1.9.0"}},"async-limiter": {"version": "1.0.0","resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz","integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="},"asynckit": {"version": "0.4.0","resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz","integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="},"bindings": {"version": "1.2.1","resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz","integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE="},"bs-fluture": {"version": "0.4.1","resolved": "https://registry.npmjs.org/bs-fluture/-/bs-fluture-0.4.1.tgz","integrity": "sha512-+TZQgmKG5cUrQYEwF+d3bOSV978uJ2/pmXeMB8ZGV0USueq6hsE+g7kvzeUABUGkMDXSnL5bWOgK1vRLePQ4kg=="},"bs-platform": {"version": "4.0.18","resolved": "https://registry.npmjs.org/bs-platform/-/bs-platform-4.0.18.tgz","integrity": "sha512-BwzW0iYHvREqUZIgQxJmdJrxexppLvJxYQ4LLexbhCp7uZU5DIZ5ub4ZHpkCkc8fn8bsXWc+Rrejb3csi+BoAQ==","dev": true},"bs-rebel": {"version": "0.2.3","resolved": "https://registry.npmjs.org/bs-rebel/-/bs-rebel-0.2.3.tgz","integrity": "sha512-NTDUSkJ+KkIqmKHUE48luD2YaYh49XaU1zVSSk9lJ6KFNQzlRQnIfR+paNWYyvzxf5+TZ2inVgxBUHdCsZEiYA=="},"buffer-crc32": {"version": "0.2.13","resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz","integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="},"chalk": {"version": "2.4.2","resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz","integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==","requires": {"ansi-styles": "^3.2.1","escape-string-regexp": "^1.0.5","supports-color": "^5.3.0"}},"color-convert": {"version": "1.9.3","resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz","integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==","requires": {"color-name": "1.1.3"}},"color-name": {"version": "1.1.3","resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz","integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="},"combined-stream": {"version": "1.0.7","resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz","integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==","requires": {"delayed-stream": "~1.0.0"}},"commander": {"version": "2.19.0","resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz","integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="},"concurrify": {"version": "1.1.1","resolved": "https://registry.npmjs.org/concurrify/-/concurrify-1.1.1.tgz","integrity": "sha512-m2UMqZAJ7Ys4Juu0IaToa/RbVuu5jR8dGVrwUOeQtfJjX0KDimUdPZ20tVrdSuqJwLaFbpI+lWxOmZSYxyCvmQ==","requires": {"sanctuary-show": "^1.0.0","sanctuary-type-identifiers": "^2.0.0"}},"debug": {"version": "2.6.9","resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz","integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==","requires": {"ms": "2.0.0"}},"delayed-stream": {"version": "1.0.0","resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz","integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="},"discord.js": {"version": "github:discordjs/discord.js#f2ed93c08aba970a94671a0fec819035ad989195","from": "github:discordjs/discord.js#master","requires": {"form-data": "^2.3.2","node-fetch": "^2.1.2","pako": "^1.0.0","prism-media": "github:amishshah/prism-media#1e336c9a20dd0928ef3bdc2075ab58d1521fb323","setimmediate": "^1.0.5","tweetnacl": "^1.0.0","ws": "^6.0.0"}},"erlpack": {"version": "github:discordapp/erlpack#674ebfd3439ba4b7ce616709821d27630f7cdc61","from": "github:discordapp/erlpack","requires": {"bindings": "^1.2.1","nan": "^2.1.0"}},"escape-string-regexp": {"version": "1.0.5","resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz","integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="},"fd-slicer": {"version": "1.1.0","resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz","integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=","requires": {"pend": "~1.2.0"}},"fluture": {"version": "10.3.1","resolved": "https://registry.npmjs.org/fluture/-/fluture-10.3.1.tgz","integrity": "sha512-Tl55fVKF0Zzu+O2gjJlMVkxt0LHVjk7OEeA09YqA2bVV8frT6Jcefj5IujDE/SJ6Hyu4Q/6ggUwFAMQ4iXsRmA==","requires": {"concurrify": "^1.1.1","sanctuary-show": "^1.0.0","sanctuary-type-identifiers": "^2.0.0"}},"form-data": {"version": "2.3.3","resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz","integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==","requires": {"asynckit": "^0.4.0","combined-stream": "^1.0.6","mime-types": "^2.1.12"}},"has-flag": {"version": "3.0.0","resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz","integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="},"let-anything": {"version": "1.0.3","resolved": "https://registry.npmjs.org/let-anything/-/let-anything-1.0.3.tgz","integrity": "sha512-cq3cWtklrAy2B+Fcl/PodvaCRGl2RDP2NjwFogsqRXE7Q1nsEtHpFlL1PmgNRj0+7bSYtt5fEyQmPmHlVTzvNQ==","requires": {"bsb-native": "4.0.6"},"dependencies": {"bsb-native": {"version": "4.0.6","resolved": "https://registry.npmjs.org/bsb-native/-/bsb-native-4.0.6.tgz","integrity": "sha512-T1MkndnmA4StiKK2UvEftrqANN+h9StlLghBbwmKa833d97D86np+2wmIOw5Rqy6rNW3D076A2G51mooWTUwfQ==","requires": {"yauzl": "^2.9.1"}}}},"luxon": {"version": "1.10.0","resolved": "https://registry.npmjs.org/luxon/-/luxon-1.10.0.tgz","integrity": "sha512-ry3GKh//v3isD6oJN5pFWmdh+3GiScwv9q8VgG6fZ2j1guGOol2vVVdo4GBAWCrcq5RHOqSeipqHBnOu/u024Q=="},"mime-db": {"version": "1.37.0","resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz","integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="},"mime-types": {"version": "2.1.21","resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz","integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==","requires": {"mime-db": "~1.37.0"}},"ms": {"version": "2.0.0","resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz","integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="},"nan": {"version": "2.12.1","resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz","integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw=="},"node-addon-api": {"version": "1.6.2","resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.6.2.tgz","integrity": "sha512-479Bjw9nTE5DdBSZZWprFryHGjUaQC31y1wHo19We/k0BZlrmhqQitWoUL0cD8+scljCbIUL+E58oRDEakdGGA=="},"node-fetch": {"version": "2.3.0","resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz","integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA=="},"node-opus": {"version": "0.3.1","resolved": "https://registry.npmjs.org/node-opus/-/node-opus-0.3.1.tgz","integrity": "sha512-1Cb8OvHhdDspVfeKMjEgbedJabyE1Ib6OcN2BMEsRCU7FIsciuBpOErcie3y0qTf83nclPAY+kBU3Oj+U+oRlQ==","requires": {"bindings": "~1.2.1","commander": "^2.9.0","nan": "^2.10.0","ogg-packet": "^1.0.0"}},"ogg-packet": {"version": "1.0.0","resolved": "https://registry.npmjs.org/ogg-packet/-/ogg-packet-1.0.0.tgz","integrity": "sha1-RbiFchrI991c8iOR1CEGrlM6xng=","optional": true,"requires": {"ref-struct": "*"}},"pako": {"version": "1.0.8","resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz","integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA=="},"pend": {"version": "1.2.0","resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz","integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="},"prism-media": {"version": "github:amishshah/prism-media#1e336c9a20dd0928ef3bdc2075ab58d1521fb323","from": "github:amishshah/prism-media"},"rationale": {"version": "0.1.10","resolved": "https://registry.npmjs.org/rationale/-/rationale-0.1.10.tgz","integrity": "sha512-WMBpRHHjhY4AA8BtboQsA5voL2dQXhbtX0C/F4HYOGFZDZz5gbUfZVs22Sc4FqyvpJoT/1A+PhcpOvefnKKxJQ=="},"ref": {"version": "1.3.5","resolved": "https://registry.npmjs.org/ref/-/ref-1.3.5.tgz","integrity": "sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA==","optional": true,"requires": {"bindings": "1","debug": "2","nan": "2"}},"ref-struct": {"version": "1.1.0","resolved": "https://registry.npmjs.org/ref-struct/-/ref-struct-1.1.0.tgz","integrity": "sha1-XV7mWtQc78Olxf60BYcmHkee3BM=","optional": true,"requires": {"debug": "2","ref": "1"}},"sanctuary-show": {"version": "1.0.0","resolved": "https://registry.npmjs.org/sanctuary-show/-/sanctuary-show-1.0.0.tgz","integrity": "sha512-63UqNGr5M6wkzKp6eGc/Gy6JBIV2PbzPd3q88+0F9z0qydAQsCWJ+7e4oor39rEEwj2GkZMDEhqGuiMl9eEnYw=="},"sanctuary-type-identifiers": {"version": "2.0.1","resolved": "https://registry.npmjs.org/sanctuary-type-identifiers/-/sanctuary-type-identifiers-2.0.1.tgz","integrity": "sha1-/FJM9t2Szr/LsN2VCe/xkxWaIO0="},"setimmediate": {"version": "1.0.5","resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz","integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="},"sodium": {"version": "3.0.2","resolved": "https://registry.npmjs.org/sodium/-/sodium-3.0.2.tgz","integrity": "sha512-IsTwTJeoNBU97km3XkrbCGC/n/9aUQejgD3QPr2YY2gtbSPru3TI6nhCqgoez9Mv88frF9oVZS/jrXFbd6WXyA==","requires": {"node-addon-api": "*"}},"supports-color": {"version": "5.5.0","resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz","integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==","requires": {"has-flag": "^3.0.0"}},"tweetnacl": {"version": "1.0.1","resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz","integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A=="},"wonka": {"version": "1.4.4","resolved": "https://registry.npmjs.org/wonka/-/wonka-1.4.4.tgz","integrity": "sha512-Ogjp2Hc+XhYx8ObUbetEtugAN3FmFKUiKdy3me3XsCfcCVOKIuqEXZDplz/x8/jh2dPyKcVQ8zSi9Li2eeitvw==","requires": {"bs-rebel": "^0.2.3"}},"ws": {"version": "6.1.3","resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz","integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==","requires": {"async-limiter": "~1.0.0"}},"yauzl": {"version": "2.10.0","resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz","integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=","requires": {"buffer-crc32": "~0.2.3","fd-slicer": "~1.1.0"}},"zlib-sync": {"version": "0.1.4","resolved": "https://registry.npmjs.org/zlib-sync/-/zlib-sync-0.1.4.tgz","integrity": "sha512-DRy+RONKzy/J6skNmq8ZBXtVAIoB4qbun+FCChlSlEvF7s9LJ0wzUXjVwl4tQ/jYT8V+LPzCg/sTcRj4E0g0fQ==","requires": {"nan": "^2.8.0"}}}}
type snowflake;type collection('k, 'v);type message;type guild;type client;type client_user;type channel;type user;type voice_conn;type voice_boradcast;type dmChannel;type groupDMChannel;type textChannel;type voiceChannel;
open Discord_types;type t = message;[@bs.get] external author: t => user = "";[@bs.get] external channel: t => channel = "";[@bs.get] external content: t => string = "";[@bs.get] external id: t => snowflake = "";
module Future = BsFluture;open Discord_types;type t = client;[@bs.module "discord.js"] [@bs.new] external make: unit => t = "Client";[@bs.send.pipe: t] external login: string => Js.Promise.t(string) = "";let login = (token, t) => Future.tryP(() => t |> login(token));[@bs.get] [@bs.return nullable] external user: t => option(user) = "";[@bs.get]external voice_conns: t => collection(snowflake, voice_conn) ="voiceConnections";[@bs.get]external broadcasts: t => collection(snowflake, voice_boradcast) = "";/* Events */[@bs.send.pipe: t] external _on: (string, 'cb) => t = "on";[@bs.send.pipe: t] external _off: (string, 'handler) => t = "off";type event =| Ready| Message(message);let listen = t => {Wonka.Types.(Wonka.make((. {next, complete}: observerT(event)) => {let h_ready = () => next(Ready);let h_msg = msg => next(Message(msg));t |> _on("ready", h_ready) |> _on("message", h_msg) |> ignore;(.) => {t |> _off("ready", h_ready) |> _off("message", h_msg) |> ignore;};}));};
module Future = BsFluture;open Discord_types;type t = channel;type classifiedChannel =| DM(dmChannel)| Group(groupDMChannel)| Text(textChannel)| Voice(voiceChannel);[@bs.get] external client: t => client = "";[@bs.get] external created_at: t => Js.Date.t = "createdAt";[@bs.get] external created_ts: t => float = "createdTimestamp";[@bs.get] external id: t => snowflake = "";/* type: 'dm' | 'group' | 'text' | 'voice', */[@bs.get] external channel_type: t => string = "type";[@bs.send] external delete: t => Js.Promise.t(t) = "";let classify = t =>switch (t |> channel_type) {| "dm" => DM(Obj.magic(t))| "group" => Group(Obj.magic(t))| "text" => Text(Obj.magic(t))| "voice" => Voice(Obj.magic(t))| x => failwith("Unknown channelType " ++ x)};
module Future = BsFluture;include Discord_types;module Collection = Discord_collection;module Client = Discord_client;module User = Discord_user;module Channel = Discord_channel;module TextChannel = Discord_textchannel;module Guild = Discord_guild;module Message = Discord_message;
module L =Relog.Make({let namespace = "Command";});module Info = {type pos_kind = {start: int,len: option(int),};let pos = (~start, ~len) => {start, len};let pos_start = p => p.start;let pos_len = p => p.len;type arg = {id: int,absent: unit,pos: pos_kind,};module Arg = {type t = arg;let compare = (a0, a1) => compare(a0.id, a1.id);};module Args = Set.Make(Arg);type args = Args.t;type term_info = {name: string};type term = {info: term_info,args,};let term_add_args = (args, t) => {...t, args: Args.union(args, t.args)};type eval = {term,main: term,choices: list(term),};let eval = (~term, ~main, ~choices) => {term, main, choices};};module Arg = {type parser('a) = string => Belt.Result.t('a, string);type conv('a) = parser('a);let conv = parse => parse;let (&) = (f, x) => f(x);let pos = (k, parse, v, a) => {();};let value = a => a;};module Runner = {type t;let parse_str = (~prefix="~", input) => {let sub_str = (s0, s1) => {let len = String.length(s1);String.sub(s0, len, String.length(s0) - len);};switch (Js.String.(startsWith(prefix, prefix) && trim(input) != prefix)) {| false => None| true =>let cmd = sub_str(input, prefix);switch (String.index(cmd, ' ')) {| (-1) => Some((cmd, []))| first_space =>let re = [%bs.re {|/(?:"(.+?)" |'(.+?)' |(.+?) )/|}];let rec p' = (args, to_parse) => {switch (Js.Re.exec(to_parse, re)) {| None => args |> List.rev| Some(res) =>let res =res |> Js.Re.captures |> Array.map(Js.Nullable.toOption);switch (res) {| [|Some(m), _, _, Some(arg)|]| [|Some(m), Some(arg), _, _|]| [|Some(m), _, Some(arg), _|] =>let to_parse = sub_str(to_parse, m);p'([arg, ...args], to_parse);| _ => failwith("Wat?")};};};let args =p'([],String.sub(cmd,first_space + 1,String.length(cmd) - first_space - 1,)++ " ",);Some((String.sub(cmd, 0, first_space), args));};};};};module Term = {type parser('a) =(Info.eval, Runner.t) =>('a, [ | `Parse(string) | `Error(bool, string) | `Help(string)]);type t('a) = (Info.args, parser('a));let const = v => (Info.Args.empty, (_, _) => Belt.Result.Ok(v));let eval = (~raw, (al, f), ti) => {let term = Info.term_add_args(ti, al);let ei = Info.eval(~term, ~main=term, ~choices=[]);let (cmd, args) = Runner.parse_str(raw) |> Belt.Option.getExn;();};};
module Future = BsFluture;module Log =Relog.Make({let namespace = "Bot";});type role =| Admin| Normie| Bot;let role_of_user = user =>switch (user |> Discord.User.bot, user |> Discord.User.username) {| (true, _) => Bot| (false, "quartz") => Admin| _ => Normie};let parse_message = msg =>switch (msg |> Discord.Message.author |> role_of_user) {| Bot => None| _ => None};let log_msg = msg => {Discord.(Log.debug(m => {let author = msg |> Message.author;let channel = msg |> Message.channel;let content = msg |> Message.content;let channelName =switch (channel |> Channel.classify) {| Channel.DM(_) => "DM"| Channel.Group(_) => "Group DM"| Channel.Text(textChannel) =>(textChannel |> TextChannel.guild |> Guild.name)++ " #"++ TextChannel.name(textChannel)| Channel.Voice(_) => "Voice"};m("Message: @[%s:@]@[@@%s#%s>@]@[%s@]",channelName,author |> Discord.User.username,"admin",content,);}));};let handle_message = msg => {log_msg(msg);};[@bs.module "fs"] [@bs.val]external read_file_sync: (string, Js.t({..})) => string = "readFileSync";let get_token = () => {Some(read_file_sync("./token.txt", {"encoding": "utf8"}) |> Js.String.trim,);};let main = () => {Relog.setReporter(Relog.format_reporter(~level=Relog.Level.Debug, ~color=true, ()),);module Client = Discord.Client;let client = Client.make();let events = client |> Client.listen |> Wonka.share;events|> Wonka.forEach((. evt) =>switch (evt) {| Client.Ready =>let user =client|> Client.user|> Rationale.Option.toExn("Bot has no user assigned");Log.info(m => m("Bot is ready"));| Client.Message(msg) => handle_message(msg)});let token =get_token() |> Rationale.Option.toExn("Couldn't find token.txt file");let%Future _ = client |> Discord.Client.login(token);Future.resolve();};main() |> Future.fork(_ => (), _ => ());
use flake
open Containersmodule D = Discordmodule M = Discord_modelsmodule Msg = M.Messagemodule L = (val Relog.logger ~namespace:__MODULE__ ())module Config = structtype t = { token : string; prefix : string }let token { token; _ } = tokenlet prefix { prefix; _ } = prefixlet of_filename filename =match Toml.Parser.from_filename filename with| `Ok tbl ->let open Result inlet+ token =Toml.Lenses.(get tbl (key "auth" |-- table |-- key "token" |-- string))|> Option.to_result_lazy (fun () ->Format.asprintf "Invalid configuration: missing [auth.token]@.")inlet prefix =Toml.Lenses.(get tbl (key "commands" |-- table |-- key "prefix" |-- string))|> Option.get_or ~default:"!"in{ token; prefix }| `Error (_, loc) ->Error(Format.asprintf"Invalid TOML in configuration: @[file='%s'@] @[line=%d@] \@[column=%d@]@."filename loc.line loc.column)endlet setup_logging () =let cli_fmter = Relog.Formatter.default ~color:true ~oneline:false () inlet cli_fmt = Format.std_formatter inRelog.Sink.make (fun r ->if Relog.(Level.compare (Record.level r) Level.Debug) <= 0 thencli_fmter cli_fmt relse ())|> Relog.Sink.setmodule Cmd = structmodule P = structopen Angstromlet is_ws = function ' ' | '\t' | '\n' -> true | _ -> falselet ws = skip_while is_wslet cmd prefix =let* name = ws *> string prefix *> take_till is_ws <* ws inlet+ args = many any_char <* end_of_input >>| String.of_list in(name, args)endlet parse = Angstrom.parse_string ~consume:Angstrom.Consume.Alllet of_message ~prefix msg =match parse (P.cmd prefix) msg with Error _ -> None | Ok cmd -> Some cmdendlet handler cfg client =let prefix = Config.prefix cfg inSys.set_signal Sys.sigint(Sys.Signal_handle (fun _ -> D.Client.disconnect client));function| D.Events.MessageCreate { content; channel_id; _ } -> (L.warn (fun m -> m "MESSAGE: %s" content);match Cmd.of_message ~prefix content with| None -> ()| Some ("ping", args) ->let msg = Format.asprintf "**pong** %s" args inD.Client.send_message channel_id msg client| Some ("suicide", _args) ->let msg =Msg.fmt "⚠️ @{<b>@{<i>disconnecting by user request...@}@} 👋"inD.Client.send_message channel_id msg client;D.Client.disconnect client| Some (other, _) ->let msg =Msg.fmt "🛑 @{<b>unsupported command@} @{<code>%s@}" otherinD.Client.send_message channel_id msg client)| _ -> ()let () =let inner () =let open Result.Infix insetup_logging ();let* config = Config.of_filename "./discopotty.toml" inlet token = Config.token config inLwt_main.run (D.Client.create ~handler:(handler config) token)|> Result.map_err D.Error.to_stringinmatch inner () with| Ok () -> ()| Error error -> prerr_endline ("Error: " ^ error)
(executable(name discopotty)(public_name discopotty)(libraries discord containers toml relog.lib angstrom))
[auth]token = "<YOUR TOKEN HERE>"
#+TITLE: discopotty dev notebook* DOING Gateway Protocol** DONE Websocket connection handling** DONE Greeting/Identify protocol** DONE Session invalidation/reconnection handlingReasoning about idempotent handling of reconnections is,how should I put it, /*hard*/ ...*** DOING Find a way to actually test this...that doesn't involve just waiting for itto /(eventually)/ crash...** DONE Refactor SessionIt needs to be self-managed (to handle automatic reconnections)but also expose an API in order to transparently communicate withthe Gateway. This will be needed later for "handling" gateway requests.*** DONE Simple Rate Limiting#+BEGIN_QUOTEClients are allowed 120 events every 60 seconds, meaning you can sendon average at a rate of up to 2 events per second. Clients who surpassthis limit are immediately disconnected from the Gateway.#+END_QUOTEDon't really know what this means, but I'll stick with 2 events per second :p-------* DOING Voice connection** DOING Voice Gateway** TODO Voice UDP*** TODO Test soundbiteI think hardcoding some bytes in the codeshould suffice for now-------* DOING Error typeStill not quite sure what the best approach is here.I guess time will tell, as needs come by/(or a good examle while looking at sources 👀)/-------* TODO Transport-level zlib compression-------* TODO Message builderIdeas list:- /GADT/Later can refactor into a (G)ADT type for automaticbuilding of the other different types of message** DONE Custom format handlerUsing semantic tags: ~"@{<b>bold @{<i> bold_italic@} @{<i> italic@} @{<v>code@}"~** DONE UtilsJust a little helper to make it easier to buildvalid stylized messages---------* TODO ETF encoding supportMaybe too much work for what it's worth (~[@@deriving yojson]~ is ❤️)/Note to self: Doing ~etf->json~ is NOT the 'way'/---------* TODO Rate Limiting** TODO Internal tokenbucket implementation** TODO Sync with Discord's bucketsAs per [[https://discord.com/developers/docs/topics/rate-limits][the docs]],these are the headers:- *X-RateLimit-Global*#+BEGIN_QUOTEReturned only on a HTTP 429 response if the rate limit headers returned areof the global rate limit (not per-route)#+END_QUOTE- *X-RateLimit-Limit*#+BEGIN_QUOTEThe number of requests that can be made#+END_QUOTE- *X-RateLimit-Remaining*#+BEGIN_QUOTEThe number of remaining requests that can be made#+END_QUOTE- *X-RateLimit-Reset*#+BEGIN_QUOTEEpoch time (seconds since 00:00:00 UTC on January 1, 1970) at which the ratelimit resets#+END_QUOTE- *X-RateLimit-Reset-After*#+BEGIN_QUOTETotal time (in seconds) of when the current rate limit bucket will reset.Can have decimals to match previous millisecond ratelimit precision#+END_QUOTE- *X-RateLimit-Bucket*#+BEGIN_QUOTEA unique string denoting the rate limit being encountered(non-inclusive of major parameters in the route path)#+END_QUOTE---------* TODO ShardingFirst should actually research how to do it in a worthwhile way+(since we are essencially stuck in single-threaded mode for now)+[2021-2-23 Tue]/Nevermind: Sharding is useful if only to decreaserate limiting bottlenecks./** TODO Identify Concurrency handling---------* DONE Test frameworkAlcotest + QCheck 👍
(env(static(flags(:standard -ccopt -static))(ocamlopt_flags(:standard -O3 -unbox-closures)))(release(ocamlopt_flags(:standard -O3 -unbox-closures))))(vendored_dirs vendor)
(lang dune 2.8)
# Set eol to LF so files aren't converted to CRLF-eol on Windows.* text eol=lf linguist-generated
# Reset any possible .gitignore, we want all esy.lock to be un-ignored.!*
{"checksum": "5effcdd677f01caffda722076574417e","root": "discopotty@link-dev:./package.json","node": {"yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9": {"id":"yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9","name": "yarn-pkg-config","version":"github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79","source": {"type": "install","source": ["github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79"]},"overrides": [],"dependencies": [],"devDependencies": []},"relog@github:quartz55/relog-native#d74d484@d41d8cd9": {"id": "relog@github:quartz55/relog-native#d74d484@d41d8cd9","name": "relog","version": "github:quartz55/relog-native#d74d484","source": {"type": "install","source": [ "github:quartz55/relog-native#d74d484" ]},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@reason-native/pastel@0.3.0@d41d8cd9","@opam/yojson@opam:1.7.0@7056d985","@opam/ptime@opam:0.8.5@0051d642", "@opam/dune@opam:2.8.2@3d714e5f","@opam/containers@opam:3.2@c4e3f662","@esy-ocaml/reason@github:reasonml/reason:reason.json#98e6c29@d41d8cd9"],"devDependencies": []},"ocaml@4.11.1000@d41d8cd9": {"id": "ocaml@4.11.1000@d41d8cd9","name": "ocaml","version": "4.11.1000","source": {"type": "install","source": ["archive:https://registry.npmjs.org/ocaml/-/ocaml-4.11.1000.tgz#sha1:a46c81076f3ed073de0d90351addc8a0bb87825f"]},"overrides": [],"dependencies": [],"devDependencies": []},"esy-openssl@archive:https://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz#sha1:33324ff957edaae8ae575817b456320378da46ff@41b6fb3d": {"id":"esy-openssl@archive:https://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz#sha1:33324ff957edaae8ae575817b456320378da46ff@41b6fb3d","name": "esy-openssl","version":"archive:https://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz#sha1:33324ff957edaae8ae575817b456320378da46ff","source": {"type": "install","source": ["archive:https://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz#sha1:33324ff957edaae8ae575817b456320378da46ff"]},"overrides": [ "esy.lock/overrides/41b6fb3db953254b0cb4c5e1b546f3f4" ],"dependencies": ["@opam/conf-pkg-config@opam:1.3@93481236","@opam/conf-autoconf@github:esy-packages/esy-autoconf:package.json#fb93edf@d41d8cd9"],"devDependencies": []},"esy-m4@github:esy-packages/esy-m4#c7cf0ac9221be2b1f9d90e83559ca08397a629e7@d41d8cd9": {"id":"esy-m4@github:esy-packages/esy-m4#c7cf0ac9221be2b1f9d90e83559ca08397a629e7@d41d8cd9","name": "esy-m4","version":"github:esy-packages/esy-m4#c7cf0ac9221be2b1f9d90e83559ca08397a629e7","source": {"type": "install","source": ["github:esy-packages/esy-m4#c7cf0ac9221be2b1f9d90e83559ca08397a629e7"]},"overrides": [],"dependencies": [],"devDependencies": []},"esy-help2man@github:esy-packages/esy-help2man#c8e6931d1dcf58a81bd801145a777fd3b115c443@d41d8cd9": {"id":"esy-help2man@github:esy-packages/esy-help2man#c8e6931d1dcf58a81bd801145a777fd3b115c443@d41d8cd9","name": "esy-help2man","version":"github:esy-packages/esy-help2man#c8e6931d1dcf58a81bd801145a777fd3b115c443","source": {"type": "install","source": ["github:esy-packages/esy-help2man#c8e6931d1dcf58a81bd801145a777fd3b115c443"]},"overrides": [],"dependencies": [],"devDependencies": []},"discopotty@link-dev:./package.json": {"id": "discopotty@link-dev:./package.json","name": "discopotty","version": "link-dev:./package.json","source": {"type": "link-dev","path": ".","manifest": "package.json"},"overrides": [],"dependencies": ["relog@github:quartz55/relog-native#d74d484@d41d8cd9","ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/websocketaf-lwt-unix@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt-unix.opam","@opam/websocketaf@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam","@opam/uri@opam:4.1.0@aebd13aa", "@opam/toml@opam:6.0.0@494345d6","@opam/ptime@opam:0.8.5@0051d642","@opam/ppx_yojson_conv@opam:v0.14.0@97845f62","@opam/ppx_deriving@opam:5.2.1@479736f0","@opam/ppx_bitstring@opam:4.1.0@7e76966c","@opam/piaf@github:anmonteiro/piaf:piaf.opam#01601aeda4a415d335f61ac13fb738cdb7b834ea@d41d8cd9","@opam/mtime@opam:1.2.0@acd670b8","@opam/lwt-pipe@opam:0.1@d2ebc796", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/httpaf-lwt-unix@github:anmonteiro/httpaf:httpaf-lwt-unix.opam#0555dde@d41d8cd9","@opam/dune@opam:2.8.2@3d714e5f","@opam/containers-data@opam:3.2@2a99f808","@opam/containers@opam:3.2@c4e3f662","@opam/bitstring@opam:4.1.0@5a3ee0e8","@opam/angstrom@opam:0.15.0@48ede9cb"],"devDependencies": ["@opam/qcheck-core@opam:0.17@79d621f8","@opam/qcheck-alcotest@opam:0.17@a3b4b940","@opam/odoc@opam:1.5.2@7c788ef6","@opam/ocamlformat@opam:0.17.0@643c4315","@opam/ocaml-lsp-server@opam:1.4.0@c9583433","@opam/merlin@opam:4.1-411@2ac33a62","@opam/alcotest-lwt@opam:1.3.0@b6a6a7a5","@opam/alcotest@opam:1.3.0@41168bef"]},"@reason-native/pastel@0.3.0@d41d8cd9": {"id": "@reason-native/pastel@0.3.0@d41d8cd9","name": "@reason-native/pastel","version": "0.3.0","source": {"type": "install","source": ["archive:https://registry.npmjs.org/@reason-native/pastel/-/pastel-0.3.0.tgz#sha1:07da3c5a0933e61bc3b353bc85aa71ac7c0f311c"]},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/re@opam:1.9.0@d4d5e13d","@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/reason@github:reasonml/reason:reason.json#98e6c29@d41d8cd9"],"devDependencies": []},"@opam/yojson@opam:1.7.0@7056d985": {"id": "@opam/yojson@opam:1.7.0@7056d985","name": "@opam/yojson","version": "opam:1.7.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/b8/b89d39ca3f8c532abe5f547ad3b8f84d#md5:b89d39ca3f8c532abe5f547ad3b8f84d","archive:https://github.com/ocaml-community/yojson/releases/download/1.7.0/yojson-1.7.0.tbz#md5:b89d39ca3f8c532abe5f547ad3b8f84d"],"opam": {"name": "yojson","version": "1.7.0","path": "esy.lock/opam/yojson.1.7.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4","@opam/dune@opam:2.8.2@3d714e5f", "@opam/cppo@opam:1.6.7@c28ac3ae","@opam/biniou@opam:1.2.1@d7570399","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4","@opam/dune@opam:2.8.2@3d714e5f", "@opam/biniou@opam:1.2.1@d7570399"]},"@opam/websocketaf-lwt-unix@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt-unix.opam": {"id":"@opam/websocketaf-lwt-unix@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt-unix.opam","name": "@opam/websocketaf-lwt-unix","version":"link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt-unix.opam","source": {"type": "link","path": "/Users/jcosta/Documents/Workspace/contrib/websocketaf","manifest": "websocketaf-lwt-unix.opam"},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9","@opam/websocketaf-lwt@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt.opam","@opam/websocketaf@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam","@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9","@opam/websocketaf-lwt@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt.opam","@opam/websocketaf@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam","@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439"]},"@opam/websocketaf-lwt@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt.opam": {"id":"@opam/websocketaf-lwt@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt.opam","name": "@opam/websocketaf-lwt","version":"link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt.opam","source": {"type": "link","path": "/Users/jcosta/Documents/Workspace/contrib/websocketaf","manifest": "websocketaf-lwt.opam"},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9","@opam/websocketaf@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam","@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/gluten-lwt@opam:0.2.1@4dbee72c","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/dune@opam:2.8.2@3d714e5f","@opam/digestif@opam:1.0.0@ce08dfe9","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9","@opam/websocketaf@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam","@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/gluten-lwt@opam:0.2.1@4dbee72c","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/digestif@opam:1.0.0@ce08dfe9"]},"@opam/websocketaf@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam": {"id":"@opam/websocketaf@link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam","name": "@opam/websocketaf","version":"link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam","source": {"type": "link","path": "/Users/jcosta/Documents/Workspace/contrib/websocketaf","manifest": "websocketaf.opam"},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/gluten@opam:0.2.1@fca26440","@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b","@opam/base64@opam:3.5.0@827395e3","@opam/angstrom@opam:0.15.0@48ede9cb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/gluten@opam:0.2.1@fca26440","@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/bigstringaf@opam:0.7.0@4784da9b","@opam/base64@opam:3.5.0@827395e3","@opam/angstrom@opam:0.15.0@48ede9cb"]},"@opam/uutf@opam:1.0.2@4440868f": {"id": "@opam/uutf@opam:1.0.2@4440868f","name": "@opam/uutf","version": "opam:1.0.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/a7/a7c542405a39630c689a82bd7ef2292c#md5:a7c542405a39630c689a82bd7ef2292c","archive:http://erratique.ch/software/uutf/releases/uutf-1.0.2.tbz#md5:a7c542405a39630c689a82bd7ef2292c"],"opam": {"name": "uutf","version": "1.0.2","path": "esy.lock/opam/uutf.1.0.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea","@opam/topkg@opam:1.0.3@e4e10f1c","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@opam/cmdliner@opam:1.0.4@93208aac","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea"]},"@opam/uuseg@opam:13.0.0@f60712a7": {"id": "@opam/uuseg@opam:13.0.0@f60712a7","name": "@opam/uuseg","version": "opam:13.0.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/a0/a07a97fff61da604614ea8da0547ef6a#md5:a07a97fff61da604614ea8da0547ef6a","archive:https://erratique.ch/software/uuseg/releases/uuseg-13.0.0.tbz#md5:a07a97fff61da604614ea8da0547ef6a"],"opam": {"name": "uuseg","version": "13.0.0","path": "esy.lock/opam/uuseg.13.0.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f","@opam/uucp@opam:13.0.0@e9b515e0", "@opam/topkg@opam:1.0.3@e4e10f1c","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@opam/cmdliner@opam:1.0.4@93208aac","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uucp@opam:13.0.0@e9b515e0"]},"@opam/uuidm@opam:0.9.7@bf725775": {"id": "@opam/uuidm@opam:0.9.7@bf725775","name": "@opam/uuidm","version": "opam:0.9.7","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/54/54658248e3981d8c05237d0a4277ccd3#md5:54658248e3981d8c05237d0a4277ccd3","archive:https://erratique.ch/software/uuidm/releases/uuidm-0.9.7.tbz#md5:54658248e3981d8c05237d0a4277ccd3"],"opam": {"name": "uuidm","version": "0.9.7","path": "esy.lock/opam/uuidm.0.9.7"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@opam/cmdliner@opam:1.0.4@93208aac","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/uucp@opam:13.0.0@e9b515e0": {"id": "@opam/uucp@opam:13.0.0@e9b515e0","name": "@opam/uucp","version": "opam:13.0.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/07/07e706249ddb2d02f0fa298804d3c739#md5:07e706249ddb2d02f0fa298804d3c739","archive:https://erratique.ch/software/uucp/releases/uucp-13.0.0.tbz#md5:07e706249ddb2d02f0fa298804d3c739"],"opam": {"name": "uucp","version": "13.0.0","path": "esy.lock/opam/uucp.13.0.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f","@opam/topkg@opam:1.0.3@e4e10f1c","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@opam/cmdliner@opam:1.0.4@93208aac","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/uri@opam:4.1.0@aebd13aa": {"id": "@opam/uri@opam:4.1.0@aebd13aa","name": "@opam/uri","version": "opam:4.1.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/d2/d269901cd27cffaadfa077fe761ef334ad4cdbebeb065faeb833824617ab2ce1#sha256:d269901cd27cffaadfa077fe761ef334ad4cdbebeb065faeb833824617ab2ce1","archive:https://github.com/mirage/ocaml-uri/releases/download/v4.1.0/uri-v4.1.0.tbz#sha256:d269901cd27cffaadfa077fe761ef334ad4cdbebeb065faeb833824617ab2ce1"],"opam": {"name": "uri","version": "4.1.0","path": "esy.lock/opam/uri.4.1.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stringext@opam:1.6.0@104bc94b","@opam/dune@opam:2.8.2@3d714e5f","@opam/angstrom@opam:0.15.0@48ede9cb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stringext@opam:1.6.0@104bc94b","@opam/dune@opam:2.8.2@3d714e5f","@opam/angstrom@opam:0.15.0@48ede9cb"]},"@opam/uchar@opam:0.0.2@c8218eea": {"id": "@opam/uchar@opam:0.0.2@c8218eea","name": "@opam/uchar","version": "opam:0.0.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/c9/c9ba2c738d264c420c642f7bb1cf4a36#md5:c9ba2c738d264c420c642f7bb1cf4a36","archive:https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz#md5:c9ba2c738d264c420c642f7bb1cf4a36"],"opam": {"name": "uchar","version": "0.0.2","path": "esy.lock/opam/uchar.0.0.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ocamlbuild@opam:0.14.0@6ac75d03","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/tyxml@opam:4.4.0@1dca5713": {"id": "@opam/tyxml@opam:4.4.0@1dca5713","name": "@opam/tyxml","version": "opam:4.4.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/51/516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530#sha256:516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530","archive:https://github.com/ocsigen/tyxml/releases/download/4.4.0/tyxml-4.4.0.tbz#sha256:516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530"],"opam": {"name": "tyxml","version": "4.4.0","path": "esy.lock/opam/tyxml.4.4.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f","@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.9.0@d4d5e13d","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f","@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.9.0@d4d5e13d","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/topkg@opam:1.0.3@e4e10f1c": {"id": "@opam/topkg@opam:1.0.3@e4e10f1c","name": "@opam/topkg","version": "opam:1.0.3","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/e2/e285f7a296d77ee7d831ba9a6bfb396f#md5:e285f7a296d77ee7d831ba9a6bfb396f","archive:http://erratique.ch/software/topkg/releases/topkg-1.0.3.tbz#md5:e285f7a296d77ee7d831ba9a6bfb396f"],"opam": {"name": "topkg","version": "1.0.3","path": "esy.lock/opam/topkg.1.0.3"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ocamlbuild@opam:0.14.0@6ac75d03"]},"@opam/toml@opam:6.0.0@494345d6": {"id": "@opam/toml@opam:6.0.0@494345d6","name": "@opam/toml","version": "opam:6.0.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/dd/dd123c49769fe649f752a19ae5cb7ce63754c1bcca40fa019f8bffca969d6f44#sha256:dd123c49769fe649f752a19ae5cb7ce63754c1bcca40fa019f8bffca969d6f44","archive:https://github.com/ocaml-toml/to.ml/archive/6.0.0.tar.gz#sha256:dd123c49769fe649f752a19ae5cb7ce63754c1bcca40fa019f8bffca969d6f44"],"opam": {"name": "toml","version": "6.0.0","path": "esy.lock/opam/toml.6.0.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/menhir@opam:20201216@1a09d886","@opam/dune@opam:2.8.2@3d714e5f","@opam/ISO8601@opam:0.2.6@07c0838b","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/ISO8601@opam:0.2.6@07c0838b"]},"@opam/stringext@opam:1.6.0@104bc94b": {"id": "@opam/stringext@opam:1.6.0@104bc94b","name": "@opam/stringext","version": "opam:1.6.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/db/db41f5d52e9eab17615f110b899dfeb27dd7e7f89cd35ae43827c5119db206ea#sha256:db41f5d52e9eab17615f110b899dfeb27dd7e7f89cd35ae43827c5119db206ea","archive:https://github.com/rgrinberg/stringext/releases/download/1.6.0/stringext-1.6.0.tbz#sha256:db41f5d52e9eab17615f110b899dfeb27dd7e7f89cd35ae43827c5119db206ea"],"opam": {"name": "stringext","version": "1.6.0","path": "esy.lock/opam/stringext.1.6.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-bytes@opam:base@19d0c2ff","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-bytes@opam:base@19d0c2ff"]},"@opam/stdlib-shims@opam:0.3.0@0d088929": {"id": "@opam/stdlib-shims@opam:0.3.0@0d088929","name": "@opam/stdlib-shims","version": "opam:0.3.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/ba/babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a#sha256:babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a","archive:https://github.com/ocaml/stdlib-shims/releases/download/0.3.0/stdlib-shims-0.3.0.tbz#sha256:babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a"],"opam": {"name": "stdlib-shims","version": "0.3.0","path": "esy.lock/opam/stdlib-shims.0.3.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/stdio@opam:v0.14.0@a624e254": {"id": "@opam/stdio@opam:v0.14.0@a624e254","name": "@opam/stdio","version": "opam:v0.14.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/4c/4cbdf15f0be88c3258aaeff9e04e00e9#md5:4cbdf15f0be88c3258aaeff9e04e00e9","archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/stdio-v0.14.0.tar.gz#md5:4cbdf15f0be88c3258aaeff9e04e00e9"],"opam": {"name": "stdio","version": "v0.14.0","path": "esy.lock/opam/stdio.v0.14.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base@opam:v0.14.1@d14008e2","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base@opam:v0.14.1@d14008e2"]},"@opam/ssl@opam:0.5.10@ae7a31df": {"id": "@opam/ssl@opam:0.5.10@ae7a31df","name": "@opam/ssl","version": "opam:0.5.10","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/af/afebbdc3130c1addf1da31e3b92c1dcd#md5:afebbdc3130c1addf1da31e3b92c1dcd","archive:https://github.com/savonet/ocaml-ssl/archive/v0.5.10.tar.gz#md5:afebbdc3130c1addf1da31e3b92c1dcd"],"opam": {"name": "ssl","version": "0.5.10","path": "esy.lock/opam/ssl.0.5.10"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9","@opam/dune-configurator@opam:2.8.2@c90ff40b","@opam/dune@opam:2.8.2@3d714e5f","@opam/conf-libssl@opam:2@5d3479e1","@opam/base-unix@opam:base@87d0b2eb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9","@opam/dune-configurator@opam:2.8.2@c90ff40b","@opam/dune@opam:2.8.2@3d714e5f","@opam/conf-libssl@opam:2@5d3479e1","@opam/base-unix@opam:base@87d0b2eb"]},"@opam/sexplib0@opam:v0.14.0@ddeb6438": {"id": "@opam/sexplib0@opam:v0.14.0@ddeb6438","name": "@opam/sexplib0","version": "opam:v0.14.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/37/37aff0af8f8f6f759249475684aebdc4#md5:37aff0af8f8f6f759249475684aebdc4","archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/sexplib0-v0.14.0.tar.gz#md5:37aff0af8f8f6f759249475684aebdc4"],"opam": {"name": "sexplib0","version": "v0.14.0","path": "esy.lock/opam/sexplib0.v0.14.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/seq@opam:base@d8d7de1d": {"id": "@opam/seq@opam:base@d8d7de1d","name": "@opam/seq","version": "opam:base","source": {"type": "install","source": [ "no-source:" ],"opam": {"name": "seq","version": "base","path": "esy.lock/opam/seq.base"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/result@opam:1.5@6b753c82": {"id": "@opam/result@opam:1.5@6b753c82","name": "@opam/result","version": "opam:1.5","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/1b/1b82dec78849680b49ae9a8a365b831b#md5:1b82dec78849680b49ae9a8a365b831b","archive:https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz#md5:1b82dec78849680b49ae9a8a365b831b"],"opam": {"name": "result","version": "1.5","path": "esy.lock/opam/result.1.5"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/re@opam:1.9.0@d4d5e13d": {"id": "@opam/re@opam:1.9.0@d4d5e13d","name": "@opam/re","version": "opam:1.9.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/bd/bddaed4f386a22cace7850c9c7dac296#md5:bddaed4f386a22cace7850c9c7dac296","archive:https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz#md5:bddaed4f386a22cace7850c9c7dac296"],"opam": {"name": "re","version": "1.9.0","path": "esy.lock/opam/re.1.9.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/qcheck-core@opam:0.17@79d621f8": {"id": "@opam/qcheck-core@opam:0.17@79d621f8","name": "@opam/qcheck-core","version": "opam:0.17","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/60/605165edc328ae144341a2d73c7fc5fc#md5:605165edc328ae144341a2d73c7fc5fc","archive:https://github.com/c-cube/qcheck/archive/0.17.tar.gz#md5:605165edc328ae144341a2d73c7fc5fc"],"opam": {"name": "qcheck-core","version": "0.17","path": "esy.lock/opam/qcheck-core.0.17"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@opam/base-bytes@opam:base@19d0c2ff","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@opam/base-bytes@opam:base@19d0c2ff"]},"@opam/qcheck-alcotest@opam:0.17@a3b4b940": {"id": "@opam/qcheck-alcotest@opam:0.17@a3b4b940","name": "@opam/qcheck-alcotest","version": "opam:0.17","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/60/605165edc328ae144341a2d73c7fc5fc#md5:605165edc328ae144341a2d73c7fc5fc","archive:https://github.com/c-cube/qcheck/archive/0.17.tar.gz#md5:605165edc328ae144341a2d73c7fc5fc"],"opam": {"name": "qcheck-alcotest","version": "0.17","path": "esy.lock/opam/qcheck-alcotest.0.17"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/qcheck-core@opam:0.17@79d621f8","@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@opam/base-bytes@opam:base@19d0c2ff","@opam/alcotest@opam:1.3.0@41168bef","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/qcheck-core@opam:0.17@79d621f8","@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@opam/base-bytes@opam:base@19d0c2ff","@opam/alcotest@opam:1.3.0@41168bef"]},"@opam/ptime@opam:0.8.5@0051d642": {"id": "@opam/ptime@opam:0.8.5@0051d642","name": "@opam/ptime","version": "opam:0.8.5","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/4d/4d48055d623ecf2db792439b3e96a520#md5:4d48055d623ecf2db792439b3e96a520","archive:https://erratique.ch/software/ptime/releases/ptime-0.8.5.tbz#md5:4d48055d623ecf2db792439b3e96a520"],"opam": {"name": "ptime","version": "0.8.5","path": "esy.lock/opam/ptime.0.8.5"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c","@opam/result@opam:1.5@6b753c82","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82"]},"@opam/psq@opam:0.2.0@247756d4": {"id": "@opam/psq@opam:0.2.0@247756d4","name": "@opam/psq","version": "opam:0.2.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/b9/b94fb15f8878172bf58446b7d0fb7c1e#md5:b94fb15f8878172bf58446b7d0fb7c1e","archive:https://github.com/pqwy/psq/releases/download/v0.2.0/psq-v0.2.0.tbz#md5:b94fb15f8878172bf58446b7d0fb7c1e"],"opam": {"name": "psq","version": "0.2.0","path": "esy.lock/opam/psq.0.2.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ppxlib@opam:0.22.0@d2d2223a": {"id": "@opam/ppxlib@opam:0.22.0@d2d2223a","name": "@opam/ppxlib","version": "opam:0.22.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/3e/3eeb91e03966662284a3222e612dee7f4fa2b7637c53d9572d2a74134bb96d7a#sha256:3eeb91e03966662284a3222e612dee7f4fa2b7637c53d9572d2a74134bb96d7a","archive:https://github.com/ocaml-ppx/ppxlib/releases/download/0.22.0/ppxlib-0.22.0.tbz#sha256:3eeb91e03966662284a3222e612dee7f4fa2b7637c53d9572d2a74134bb96d7a"],"opam": {"name": "ppxlib","version": "0.22.0","path": "esy.lock/opam/ppxlib.0.22.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/sexplib0@opam:v0.14.0@ddeb6438","@opam/ppx_derivers@opam:1.2.1@ecf0aa45","@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d","@opam/ocaml-compiler-libs@opam:v0.12.3@f0f069bd","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/sexplib0@opam:v0.14.0@ddeb6438","@opam/ppx_derivers@opam:1.2.1@ecf0aa45","@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d","@opam/ocaml-compiler-libs@opam:v0.12.3@f0f069bd","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6": {"id": "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6","name": "@opam/ppx_yojson_conv_lib","version": "opam:v0.14.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/e2/e23c5593a7211ad4fb09e26e9a74698a#md5:e23c5593a7211ad4fb09e26e9a74698a","archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv_lib-v0.14.0.tar.gz#md5:e23c5593a7211ad4fb09e26e9a74698a"],"opam": {"name": "ppx_yojson_conv_lib","version": "v0.14.0","path": "esy.lock/opam/ppx_yojson_conv_lib.v0.14.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ppx_yojson_conv@opam:v0.14.0@97845f62": {"id": "@opam/ppx_yojson_conv@opam:v0.14.0@97845f62","name": "@opam/ppx_yojson_conv","version": "opam:v0.14.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/d5/d5e243a694a5d1b67e838bce10178718#md5:d5e243a694a5d1b67e838bce10178718","archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv-v0.14.0.tar.gz#md5:d5e243a694a5d1b67e838bce10178718"],"opam": {"name": "ppx_yojson_conv","version": "v0.14.0","path": "esy.lock/opam/ppx_yojson_conv.v0.14.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6","@opam/ppx_js_style@opam:v0.14.0@10b020a8","@opam/dune@opam:2.8.2@3d714e5f", "@opam/base@opam:v0.14.1@d14008e2","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6","@opam/ppx_js_style@opam:v0.14.0@10b020a8","@opam/dune@opam:2.8.2@3d714e5f", "@opam/base@opam:v0.14.1@d14008e2"]},"@opam/ppx_js_style@opam:v0.14.0@10b020a8": {"id": "@opam/ppx_js_style@opam:v0.14.0@10b020a8","name": "@opam/ppx_js_style","version": "opam:v0.14.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/ea/eab9c17616a2ba4cbd69a88db76070fd#md5:eab9c17616a2ba4cbd69a88db76070fd","archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_js_style-v0.14.0.tar.gz#md5:eab9c17616a2ba4cbd69a88db76070fd"],"opam": {"name": "ppx_js_style","version": "v0.14.0","path": "esy.lock/opam/ppx_js_style.v0.14.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/octavius@opam:1.2.2@b328d1f1","@opam/dune@opam:2.8.2@3d714e5f", "@opam/base@opam:v0.14.1@d14008e2","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/octavius@opam:1.2.2@b328d1f1","@opam/dune@opam:2.8.2@3d714e5f", "@opam/base@opam:v0.14.1@d14008e2"]},"@opam/ppx_deriving@opam:5.2.1@479736f0": {"id": "@opam/ppx_deriving@opam:5.2.1@479736f0","name": "@opam/ppx_deriving","version": "opam:5.2.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/e9/e96b5fb25b7632570e4b329e22e097fcd4b8e8680d1e43ef003a8fbd742b0786#sha256:e96b5fb25b7632570e4b329e22e097fcd4b8e8680d1e43ef003a8fbd742b0786","archive:https://github.com/ocaml-ppx/ppx_deriving/releases/download/v5.2.1/ppx_deriving-v5.2.1.tbz#sha256:e96b5fb25b7632570e4b329e22e097fcd4b8e8680d1e43ef003a8fbd742b0786"],"opam": {"name": "ppx_deriving","version": "5.2.1","path": "esy.lock/opam/ppx_deriving.5.2.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/ppx_derivers@opam:1.2.1@ecf0aa45","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/dune@opam:2.8.2@3d714e5f", "@opam/cppo@opam:1.6.7@c28ac3ae","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/ppx_derivers@opam:1.2.1@ecf0aa45","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ppx_derivers@opam:1.2.1@ecf0aa45": {"id": "@opam/ppx_derivers@opam:1.2.1@ecf0aa45","name": "@opam/ppx_derivers","version": "opam:1.2.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/5d/5dc2bf130c1db3c731fe0fffc5648b41#md5:5dc2bf130c1db3c731fe0fffc5648b41","archive:https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz#md5:5dc2bf130c1db3c731fe0fffc5648b41"],"opam": {"name": "ppx_derivers","version": "1.2.1","path": "esy.lock/opam/ppx_derivers.1.2.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ppx_bitstring@opam:4.1.0@7e76966c": {"id": "@opam/ppx_bitstring@opam:4.1.0@7e76966c","name": "@opam/ppx_bitstring","version": "opam:4.1.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/8a/8ae6f04eaa29481c6830ee3be5cba755#md5:8ae6f04eaa29481c6830ee3be5cba755","archive:https://github.com/xguerin/bitstring/archive/v4.1.0.tar.gz#md5:8ae6f04eaa29481c6830ee3be5cba755"],"opam": {"name": "ppx_bitstring","version": "4.1.0","path": "esy.lock/opam/ppx_bitstring.4.1.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/dune@opam:2.8.2@3d714e5f","@opam/bitstring@opam:4.1.0@5a3ee0e8","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/dune@opam:2.8.2@3d714e5f","@opam/bitstring@opam:4.1.0@5a3ee0e8"]},"@opam/piaf@github:anmonteiro/piaf:piaf.opam#01601aeda4a415d335f61ac13fb738cdb7b834ea@d41d8cd9": {"id":"@opam/piaf@github:anmonteiro/piaf:piaf.opam#01601aeda4a415d335f61ac13fb738cdb7b834ea@d41d8cd9","name": "@opam/piaf","version":"github:anmonteiro/piaf:piaf.opam#01601aeda4a415d335f61ac13fb738cdb7b834ea","source": {"type": "install","source": ["github:anmonteiro/piaf:piaf.opam#01601aeda4a415d335f61ac13fb738cdb7b834ea"]},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uri@opam:4.1.0@aebd13aa","@opam/ssl@opam:0.5.10@ae7a31df","@opam/ocaml-syntax-shims@opam:1.0.0@a9aa3bfa","@opam/magic-mime@opam:1.1.3@8faa00ed","@opam/lwt_ssl@opam:1.1.3@9d044ebe", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/logs@opam:0.7.0@1d03143e","@opam/httpaf-lwt-unix@github:anmonteiro/httpaf:httpaf-lwt-unix.opam#0555dde@d41d8cd9","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/h2-lwt-unix@opam:0.6.1@6411e49d","@opam/h2@opam:0.7.0@def5f87d","@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","@opam/dune@opam:2.8.2@3d714e5f","@opam/conf-libssl@opam:2@5d3479e1","@opam/bigstringaf@opam:0.7.0@4784da9b","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uri@opam:4.1.0@aebd13aa","@opam/ssl@opam:0.5.10@ae7a31df","@opam/ocaml-syntax-shims@opam:1.0.0@a9aa3bfa","@opam/magic-mime@opam:1.1.3@8faa00ed","@opam/lwt_ssl@opam:1.1.3@9d044ebe", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/logs@opam:0.7.0@1d03143e","@opam/httpaf-lwt-unix@github:anmonteiro/httpaf:httpaf-lwt-unix.opam#0555dde@d41d8cd9","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/h2-lwt-unix@opam:0.6.1@6411e49d","@opam/h2@opam:0.7.0@def5f87d","@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","@opam/dune@opam:2.8.2@3d714e5f","@opam/conf-libssl@opam:2@5d3479e1","@opam/bigstringaf@opam:0.7.0@4784da9b"]},"@opam/odoc@opam:1.5.2@7c788ef6": {"id": "@opam/odoc@opam:1.5.2@7c788ef6","name": "@opam/odoc","version": "opam:1.5.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/d2/d24463f2660bc28c72cda001478360158e953721c9e23fb361ec4783113c4871#sha256:d24463f2660bc28c72cda001478360158e953721c9e23fb361ec4783113c4871","archive:https://github.com/ocaml/odoc/releases/download/1.5.2/odoc-1.5.2.tbz#sha256:d24463f2660bc28c72cda001478360158e953721c9e23fb361ec4783113c4871"],"opam": {"name": "odoc","version": "1.5.2","path": "esy.lock/opam/odoc.1.5.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/tyxml@opam:4.4.0@1dca5713","@opam/result@opam:1.5@6b753c82", "@opam/fpath@opam:0.7.3@674d8125","@opam/dune@opam:2.8.2@3d714e5f", "@opam/cppo@opam:1.6.7@c28ac3ae","@opam/cmdliner@opam:1.0.4@93208aac","@opam/astring@opam:0.8.5@1300cee8","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/tyxml@opam:4.4.0@1dca5713","@opam/result@opam:1.5@6b753c82", "@opam/fpath@opam:0.7.3@674d8125","@opam/dune@opam:2.8.2@3d714e5f","@opam/cmdliner@opam:1.0.4@93208aac","@opam/astring@opam:0.8.5@1300cee8"]},"@opam/octavius@opam:1.2.2@b328d1f1": {"id": "@opam/octavius@opam:1.2.2@b328d1f1","name": "@opam/octavius","version": "opam:1.2.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/72/72f9e1d996e6c5089fc513cc9218607b#md5:72f9e1d996e6c5089fc513cc9218607b","archive:https://github.com/ocaml-doc/octavius/archive/v1.2.2.tar.gz#md5:72f9e1d996e6c5089fc513cc9218607b"],"opam": {"name": "octavius","version": "1.2.2","path": "esy.lock/opam/octavius.1.2.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ocplib-endian@opam:1.1@84c1ca88": {"id": "@opam/ocplib-endian@opam:1.1@84c1ca88","name": "@opam/ocplib-endian","version": "opam:1.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/de/dedf4d69c1b87b3c6c7234f632399285#md5:dedf4d69c1b87b3c6c7234f632399285","archive:https://github.com/OCamlPro/ocplib-endian/archive/1.1.tar.gz#md5:dedf4d69c1b87b3c6c7234f632399285"],"opam": {"name": "ocplib-endian","version": "1.1","path": "esy.lock/opam/ocplib-endian.1.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/cppo@opam:1.6.7@c28ac3ae","@opam/base-bytes@opam:base@19d0c2ff","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-bytes@opam:base@19d0c2ff"]},"@opam/ocamlformat@opam:0.17.0@643c4315": {"id": "@opam/ocamlformat@opam:0.17.0@643c4315","name": "@opam/ocamlformat","version": "opam:0.17.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/68/68848b12e82dc1077a29f63d2777680e692b1a565276fcd00f06fb93cced3438#sha256:68848b12e82dc1077a29f63d2777680e692b1a565276fcd00f06fb93cced3438","archive:https://github.com/ocaml-ppx/ocamlformat/releases/download/0.17.0/ocamlformat-0.17.0.tbz#sha256:68848b12e82dc1077a29f63d2777680e692b1a565276fcd00f06fb93cced3438"],"opam": {"name": "ocamlformat","version": "0.17.0","path": "esy.lock/opam/ocamlformat.0.17.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f","@opam/uuseg@opam:13.0.0@f60712a7","@opam/stdio@opam:v0.14.0@a624e254", "@opam/re@opam:1.9.0@d4d5e13d","@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/odoc@opam:1.5.2@7c788ef6","@opam/ocaml-version@opam:3.0.0@466b560a","@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d","@opam/menhirSdk@opam:20201216@5e08e674","@opam/menhirLib@opam:20201216@bb5a1851","@opam/menhir@opam:20201216@1a09d886","@opam/fpath@opam:0.7.3@674d8125","@opam/fix@opam:20201120@5c318621","@opam/dune-build-info@opam:2.8.2@0ec81e5b","@opam/dune@opam:2.8.2@3d714e5f","@opam/cmdliner@opam:1.0.4@93208aac","@opam/base-unix@opam:base@87d0b2eb","@opam/base@opam:v0.14.1@d14008e2","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f","@opam/uuseg@opam:13.0.0@f60712a7","@opam/stdio@opam:v0.14.0@a624e254", "@opam/re@opam:1.9.0@d4d5e13d","@opam/ppxlib@opam:0.22.0@d2d2223a","@opam/odoc@opam:1.5.2@7c788ef6","@opam/ocaml-version@opam:3.0.0@466b560a","@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d","@opam/menhirSdk@opam:20201216@5e08e674","@opam/menhirLib@opam:20201216@bb5a1851","@opam/menhir@opam:20201216@1a09d886","@opam/fpath@opam:0.7.3@674d8125","@opam/fix@opam:20201120@5c318621","@opam/dune-build-info@opam:2.8.2@0ec81e5b","@opam/dune@opam:2.8.2@3d714e5f","@opam/cmdliner@opam:1.0.4@93208aac","@opam/base-unix@opam:base@87d0b2eb","@opam/base@opam:v0.14.1@d14008e2"]},"@opam/ocamlfind@opam:1.8.1@b7dc3072": {"id": "@opam/ocamlfind@opam:1.8.1@b7dc3072","name": "@opam/ocamlfind","version": "opam:1.8.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/18/18ca650982c15536616dea0e422cbd8c#md5:18ca650982c15536616dea0e422cbd8c","archive:http://download2.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c","archive:http://download.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c"],"opam": {"name": "ocamlfind","version": "1.8.1","path": "esy.lock/opam/ocamlfind.1.8.1"}},"overrides": [{"opamoverride":"esy.lock/overrides/opam__s__ocamlfind_opam__c__1.8.1_opam_override"}],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/conf-m4@opam:1@196bf219","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/ocamlbuild@opam:0.14.0@6ac75d03": {"id": "@opam/ocamlbuild@opam:0.14.0@6ac75d03","name": "@opam/ocamlbuild","version": "opam:0.14.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/87/87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78#sha256:87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78","archive:https://github.com/ocaml/ocamlbuild/archive/0.14.0.tar.gz#sha256:87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78"],"opam": {"name": "ocamlbuild","version": "0.14.0","path": "esy.lock/opam/ocamlbuild.0.14.0"}},"overrides": [{"opamoverride":"esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override"}],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/ocaml-version@opam:3.0.0@466b560a": {"id": "@opam/ocaml-version@opam:3.0.0@466b560a","name": "@opam/ocaml-version","version": "opam:3.0.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/24/24b2f324ea91cff98bb8790a6746ccce3173bac5f57cb457156e5c50a0467397#sha256:24b2f324ea91cff98bb8790a6746ccce3173bac5f57cb457156e5c50a0467397","archive:https://github.com/ocurrent/ocaml-version/releases/download/v3.0.0/ocaml-version-v3.0.0.tbz#sha256:24b2f324ea91cff98bb8790a6746ccce3173bac5f57cb457156e5c50a0467397"],"opam": {"name": "ocaml-version","version": "3.0.0","path": "esy.lock/opam/ocaml-version.3.0.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ocaml-syntax-shims@opam:1.0.0@a9aa3bfa": {"id": "@opam/ocaml-syntax-shims@opam:1.0.0@a9aa3bfa","name": "@opam/ocaml-syntax-shims","version": "opam:1.0.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/89/89b2e193e90a0c168b6ec5ddf6fef09033681bdcb64e11913c97440a2722e8c8#sha256:89b2e193e90a0c168b6ec5ddf6fef09033681bdcb64e11913c97440a2722e8c8","archive:https://github.com/ocaml-ppx/ocaml-syntax-shims/releases/download/1.0.0/ocaml-syntax-shims-1.0.0.tbz#sha256:89b2e193e90a0c168b6ec5ddf6fef09033681bdcb64e11913c97440a2722e8c8"],"opam": {"name": "ocaml-syntax-shims","version": "1.0.0","path": "esy.lock/opam/ocaml-syntax-shims.1.0.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d": {"id": "@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d","name": "@opam/ocaml-migrate-parsetree","version": "opam:2.1.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/38/387b788ee4c0537f1fe02c25e05f0335af424828fc6fe940acc0db5948a5a71f#sha256:387b788ee4c0537f1fe02c25e05f0335af424828fc6fe940acc0db5948a5a71f","archive:https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v2.1.0/ocaml-migrate-parsetree-v2.1.0.tbz#sha256:387b788ee4c0537f1fe02c25e05f0335af424828fc6fe940acc0db5948a5a71f"],"opam": {"name": "ocaml-migrate-parsetree","version": "2.1.0","path": "esy.lock/opam/ocaml-migrate-parsetree.2.1.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/ocaml-lsp-server@opam:1.4.0@c9583433": {"id": "@opam/ocaml-lsp-server@opam:1.4.0@c9583433","name": "@opam/ocaml-lsp-server","version": "opam:1.4.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/fd/fd138e6c4fcff32c6d15eb66cc9391b7e1183717a6d1a47c688c7f6d320a159f#sha256:fd138e6c4fcff32c6d15eb66cc9391b7e1183717a6d1a47c688c7f6d320a159f","archive:https://github.com/ocaml/ocaml-lsp/releases/download/1.4.0/jsonrpc-1.4.0.tbz#sha256:fd138e6c4fcff32c6d15eb66cc9391b7e1183717a6d1a47c688c7f6d320a159f"],"opam": {"name": "ocaml-lsp-server","version": "1.4.0","path": "esy.lock/opam/ocaml-lsp-server.1.4.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/result@opam:1.5@6b753c82","@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/dune-build-info@opam:2.8.2@0ec81e5b","@opam/dune@opam:2.8.2@3d714e5f","@opam/dot-merlin-reader@opam:4.1@120afa42","@opam/csexp@opam:1.4.0@bd1cb034", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/result@opam:1.5@6b753c82","@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/dune-build-info@opam:2.8.2@0ec81e5b","@opam/dune@opam:2.8.2@3d714e5f","@opam/dot-merlin-reader@opam:4.1@120afa42","@opam/csexp@opam:1.4.0@bd1cb034"]},"@opam/ocaml-compiler-libs@opam:v0.12.3@f0f069bd": {"id": "@opam/ocaml-compiler-libs@opam:v0.12.3@f0f069bd","name": "@opam/ocaml-compiler-libs","version": "opam:v0.12.3","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/a8/a8403531439c14bbda2d504ef93610fd29a8e9520fc700f21889d893a513e3c9#sha256:a8403531439c14bbda2d504ef93610fd29a8e9520fc700f21889d893a513e3c9","archive:https://github.com/janestreet/ocaml-compiler-libs/releases/download/v0.12.3/ocaml-compiler-libs-v0.12.3.tbz#sha256:a8403531439c14bbda2d504ef93610fd29a8e9520fc700f21889d893a513e3c9"],"opam": {"name": "ocaml-compiler-libs","version": "v0.12.3","path": "esy.lock/opam/ocaml-compiler-libs.v0.12.3"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/mtime@opam:1.2.0@acd670b8": {"id": "@opam/mtime@opam:1.2.0@acd670b8","name": "@opam/mtime","version": "opam:1.2.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/f3/f3f4c1333c0f74fc27b05c35b9c0dab9#md5:f3f4c1333c0f74fc27b05c35b9c0dab9","archive:https://erratique.ch/software/mtime/releases/mtime-1.2.0.tbz#md5:f3f4c1333c0f74fc27b05c35b9c0dab9"],"opam": {"name": "mtime","version": "1.2.0","path": "esy.lock/opam/mtime.1.2.0"}},"overrides": [{"opamoverride":"esy.lock/overrides/opam__s__mtime_opam__c__1.2.0_opam_override"}],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/mmap@opam:1.1.0@b85334ff": {"id": "@opam/mmap@opam:1.1.0@b85334ff","name": "@opam/mmap","version": "opam:1.1.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/8c/8c5d5fbc537296dc525867535fb878ba#md5:8c5d5fbc537296dc525867535fb878ba","archive:https://github.com/mirage/mmap/releases/download/v1.1.0/mmap-v1.1.0.tbz#md5:8c5d5fbc537296dc525867535fb878ba"],"opam": {"name": "mmap","version": "1.1.0","path": "esy.lock/opam/mmap.1.1.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/merlin-extend@opam:0.6@404f814c": {"id": "@opam/merlin-extend@opam:0.6@404f814c","name": "@opam/merlin-extend","version": "opam:0.6","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/c2/c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43#sha256:c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43","archive:https://github.com/let-def/merlin-extend/releases/download/v0.6/merlin-extend-v0.6.tbz#sha256:c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43"],"opam": {"name": "merlin-extend","version": "0.6","path": "esy.lock/opam/merlin-extend.0.6"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/cppo@opam:1.6.7@c28ac3ae", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/merlin@opam:4.1-411@2ac33a62": {"id": "@opam/merlin@opam:4.1-411@2ac33a62","name": "@opam/merlin","version": "opam:4.1-411","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/9e/9e2e6fc799c93ce1f2c7181645eafa37f64e43ace062b69218e1c29ac459937d#sha256:9e2e6fc799c93ce1f2c7181645eafa37f64e43ace062b69218e1c29ac459937d","archive:https://github.com/ocaml/merlin/releases/download/v4.1-411/merlin-v4.1-411.tbz#sha256:9e2e6fc799c93ce1f2c7181645eafa37f64e43ace062b69218e1c29ac459937d"],"opam": {"name": "merlin","version": "4.1-411","path": "esy.lock/opam/merlin.4.1-411"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/result@opam:1.5@6b753c82", "@opam/dune@opam:2.8.2@3d714e5f","@opam/dot-merlin-reader@opam:4.1@120afa42","@opam/csexp@opam:1.4.0@bd1cb034", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/result@opam:1.5@6b753c82", "@opam/dune@opam:2.8.2@3d714e5f","@opam/dot-merlin-reader@opam:4.1@120afa42","@opam/csexp@opam:1.4.0@bd1cb034"]},"@opam/menhirSdk@opam:20201216@5e08e674": {"id": "@opam/menhirSdk@opam:20201216@5e08e674","name": "@opam/menhirSdk","version": "opam:20201216","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/f2/f27f8f5dedd316eff4c02d9130fced49#md5:f27f8f5dedd316eff4c02d9130fced49","archive:https://gitlab.inria.fr/fpottier/menhir/repository/20201216/archive.tar.gz#md5:f27f8f5dedd316eff4c02d9130fced49"],"opam": {"name": "menhirSdk","version": "20201216","path": "esy.lock/opam/menhirSdk.20201216"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/menhirLib@opam:20201216@bb5a1851": {"id": "@opam/menhirLib@opam:20201216@bb5a1851","name": "@opam/menhirLib","version": "opam:20201216","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/f2/f27f8f5dedd316eff4c02d9130fced49#md5:f27f8f5dedd316eff4c02d9130fced49","archive:https://gitlab.inria.fr/fpottier/menhir/repository/20201216/archive.tar.gz#md5:f27f8f5dedd316eff4c02d9130fced49"],"opam": {"name": "menhirLib","version": "20201216","path": "esy.lock/opam/menhirLib.20201216"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/menhir@opam:20201216@1a09d886": {"id": "@opam/menhir@opam:20201216@1a09d886","name": "@opam/menhir","version": "opam:20201216","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/f2/f27f8f5dedd316eff4c02d9130fced49#md5:f27f8f5dedd316eff4c02d9130fced49","archive:https://gitlab.inria.fr/fpottier/menhir/repository/20201216/archive.tar.gz#md5:f27f8f5dedd316eff4c02d9130fced49"],"opam": {"name": "menhir","version": "20201216","path": "esy.lock/opam/menhir.20201216"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/menhirSdk@opam:20201216@5e08e674","@opam/menhirLib@opam:20201216@bb5a1851","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/menhirSdk@opam:20201216@5e08e674","@opam/menhirLib@opam:20201216@bb5a1851","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/magic-mime@opam:1.1.3@8faa00ed": {"id": "@opam/magic-mime@opam:1.1.3@8faa00ed","name": "@opam/magic-mime","version": "opam:1.1.3","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/7f/7fb36ce619ca479ac44ef923c3bf19eda4c98a4428dbf7f3f7c714b516d212f7#sha256:7fb36ce619ca479ac44ef923c3bf19eda4c98a4428dbf7f3f7c714b516d212f7","archive:https://github.com/mirage/ocaml-magic-mime/releases/download/v1.1.3/magic-mime-v1.1.3.tbz#sha256:7fb36ce619ca479ac44ef923c3bf19eda4c98a4428dbf7f3f7c714b516d212f7"],"opam": {"name": "magic-mime","version": "1.1.3","path": "esy.lock/opam/magic-mime.1.1.3"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/lwt_ssl@opam:1.1.3@9d044ebe": {"id": "@opam/lwt_ssl@opam:1.1.3@9d044ebe","name": "@opam/lwt_ssl","version": "opam:1.1.3","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/b1/b18414b2ef71ededa07666dfc467f10a#md5:b18414b2ef71ededa07666dfc467f10a","archive:https://github.com/ocsigen/lwt_ssl/archive/1.1.3.tar.gz#md5:b18414b2ef71ededa07666dfc467f10a"],"opam": {"name": "lwt_ssl","version": "1.1.3","path": "esy.lock/opam/lwt_ssl.1.1.3"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ssl@opam:0.5.10@ae7a31df","@opam/lwt@opam:5.4.0@1ec6dbfd", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ssl@opam:0.5.10@ae7a31df","@opam/lwt@opam:5.4.0@1ec6dbfd", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb"]},"@opam/lwt-pipe@opam:0.1@d2ebc796": {"id": "@opam/lwt-pipe@opam:0.1@d2ebc796","name": "@opam/lwt-pipe","version": "opam:0.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/46/46cfc88c4220d40356f6bea7c535be6e#md5:46cfc88c4220d40356f6bea7c535be6e","archive:https://github.com/c-cube/lwt-pipe/archive/v0.1.tar.gz#md5:46cfc88c4220d40356f6bea7c535be6e"],"opam": {"name": "lwt-pipe","version": "0.1","path": "esy.lock/opam/lwt-pipe.0.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/lwt@opam:5.4.0@1ec6dbfd": {"id": "@opam/lwt@opam:5.4.0@1ec6dbfd","name": "@opam/lwt","version": "opam:5.4.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/fc/fc4721bdb1a01225b96e3a2debde95fa#md5:fc4721bdb1a01225b96e3a2debde95fa","archive:https://github.com/ocsigen/lwt/archive/5.4.0.zip#md5:fc4721bdb1a01225b96e3a2debde95fa"],"opam": {"name": "lwt","version": "5.4.0","path": "esy.lock/opam/lwt.5.4.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/result@opam:1.5@6b753c82","@opam/ocplib-endian@opam:1.1@84c1ca88","@opam/ocaml-syntax-shims@opam:1.0.0@a9aa3bfa","@opam/mmap@opam:1.1.0@b85334ff","@opam/dune-configurator@opam:2.8.2@c90ff40b","@opam/dune@opam:2.8.2@3d714e5f", "@opam/cppo@opam:1.6.7@c28ac3ae","@opam/base-unix@opam:base@87d0b2eb","@opam/base-threads@opam:base@36803084","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/result@opam:1.5@6b753c82","@opam/ocplib-endian@opam:1.1@84c1ca88","@opam/ocaml-syntax-shims@opam:1.0.0@a9aa3bfa","@opam/mmap@opam:1.1.0@b85334ff","@opam/dune-configurator@opam:2.8.2@c90ff40b","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/logs@opam:0.7.0@1d03143e": {"id": "@opam/logs@opam:0.7.0@1d03143e","name": "@opam/logs","version": "opam:0.7.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/2b/2bf021ca13331775e33cf34ab60246f7#md5:2bf021ca13331775e33cf34ab60246f7","archive:https://erratique.ch/software/logs/releases/logs-0.7.0.tbz#md5:2bf021ca13331775e33cf34ab60246f7"],"opam": {"name": "logs","version": "0.7.0","path": "esy.lock/opam/logs.0.7.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@opam/lwt@opam:5.4.0@1ec6dbfd", "@opam/fmt@opam:0.8.9@e0843a5b","@opam/cmdliner@opam:1.0.4@93208aac","@opam/base-threads@opam:base@36803084","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/httpaf-lwt-unix@github:anmonteiro/httpaf:httpaf-lwt-unix.opam#0555dde@d41d8cd9": {"id":"@opam/httpaf-lwt-unix@github:anmonteiro/httpaf:httpaf-lwt-unix.opam#0555dde@d41d8cd9","name": "@opam/httpaf-lwt-unix","version": "github:anmonteiro/httpaf:httpaf-lwt-unix.opam#0555dde","source": {"type": "install","source": [ "github:anmonteiro/httpaf:httpaf-lwt-unix.opam#0555dde" ]},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/httpaf-lwt@github:anmonteiro/httpaf:httpaf-lwt.opam#0555dde@d41d8cd9","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/httpaf-lwt@github:anmonteiro/httpaf:httpaf-lwt.opam#0555dde@d41d8cd9","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/httpaf-lwt@github:anmonteiro/httpaf:httpaf-lwt.opam#0555dde@d41d8cd9": {"id":"@opam/httpaf-lwt@github:anmonteiro/httpaf:httpaf-lwt.opam#0555dde@d41d8cd9","name": "@opam/httpaf-lwt","version": "github:anmonteiro/httpaf:httpaf-lwt.opam#0555dde","source": {"type": "install","source": [ "github:anmonteiro/httpaf:httpaf-lwt.opam#0555dde" ]},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/gluten-lwt@opam:0.2.1@4dbee72c","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/gluten-lwt@opam:0.2.1@4dbee72c","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9": {"id":"@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","name": "@opam/httpaf","version": "github:anmonteiro/httpaf:httpaf.opam#0555dde","source": {"type": "install","source": [ "github:anmonteiro/httpaf:httpaf.opam#0555dde" ]},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b","@opam/angstrom@opam:0.15.0@48ede9cb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b","@opam/angstrom@opam:0.15.0@48ede9cb"]},"@opam/hpack@opam:0.2.0@9f3eae78": {"id": "@opam/hpack@opam:0.2.0@9f3eae78","name": "@opam/hpack","version": "opam:0.2.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/c8/c883927ce8a9f3f7159ef7b20988f051#md5:c883927ce8a9f3f7159ef7b20988f051","archive:https://github.com/anmonteiro/ocaml-h2/releases/download/0.2.0/h2-0.2.0.tbz#md5:c883927ce8a9f3f7159ef7b20988f051"],"opam": {"name": "hpack","version": "0.2.0","path": "esy.lock/opam/hpack.0.2.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/angstrom@opam:0.15.0@48ede9cb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/angstrom@opam:0.15.0@48ede9cb"]},"@opam/h2-lwt-unix@opam:0.6.1@6411e49d": {"id": "@opam/h2-lwt-unix@opam:0.6.1@6411e49d","name": "@opam/h2-lwt-unix","version": "opam:0.6.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/58/585fb8f4f1bef0a9f93dbbd24a7a9d2d048e725bab0c2fbdbef9eb301e7a677d#sha256:585fb8f4f1bef0a9f93dbbd24a7a9d2d048e725bab0c2fbdbef9eb301e7a677d","archive:https://github.com/anmonteiro/ocaml-h2/releases/download/0.6.1/h2-0.6.1.tbz#sha256:585fb8f4f1bef0a9f93dbbd24a7a9d2d048e725bab0c2fbdbef9eb301e7a677d"],"opam": {"name": "h2-lwt-unix","version": "0.6.1","path": "esy.lock/opam/h2-lwt-unix.0.6.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt_ssl@opam:1.1.3@9d044ebe","@opam/lwt@opam:5.4.0@1ec6dbfd", "@opam/h2-lwt@opam:0.6.1@91625828","@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/h2-lwt@opam:0.6.1@91625828","@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/h2-lwt@opam:0.6.1@91625828": {"id": "@opam/h2-lwt@opam:0.6.1@91625828","name": "@opam/h2-lwt","version": "opam:0.6.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/58/585fb8f4f1bef0a9f93dbbd24a7a9d2d048e725bab0c2fbdbef9eb301e7a677d#sha256:585fb8f4f1bef0a9f93dbbd24a7a9d2d048e725bab0c2fbdbef9eb301e7a677d","archive:https://github.com/anmonteiro/ocaml-h2/releases/download/0.6.1/h2-0.6.1.tbz#sha256:585fb8f4f1bef0a9f93dbbd24a7a9d2d048e725bab0c2fbdbef9eb301e7a677d"],"opam": {"name": "h2-lwt","version": "0.6.1","path": "esy.lock/opam/h2-lwt.0.6.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/h2@opam:0.7.0@def5f87d","@opam/gluten-lwt@opam:0.2.1@4dbee72c","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/h2@opam:0.7.0@def5f87d","@opam/gluten-lwt@opam:0.2.1@4dbee72c","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/h2@opam:0.7.0@def5f87d": {"id": "@opam/h2@opam:0.7.0@def5f87d","name": "@opam/h2","version": "opam:0.7.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/63/63a233a075247d23dfc45adf8435621480d41ef2a597cf807f072bb786405ebc#sha256:63a233a075247d23dfc45adf8435621480d41ef2a597cf807f072bb786405ebc","archive:https://github.com/anmonteiro/ocaml-h2/releases/download/0.7.0/h2-0.7.0.tbz#sha256:63a233a075247d23dfc45adf8435621480d41ef2a597cf807f072bb786405ebc"],"opam": {"name": "h2","version": "0.7.0","path": "esy.lock/opam/h2.0.7.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/psq@opam:0.2.0@247756d4","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/hpack@opam:0.2.0@9f3eae78","@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b","@opam/base64@opam:3.5.0@827395e3","@opam/angstrom@opam:0.15.0@48ede9cb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/psq@opam:0.2.0@247756d4","@opam/httpaf@github:anmonteiro/httpaf:httpaf.opam#0555dde@d41d8cd9","@opam/hpack@opam:0.2.0@9f3eae78","@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b","@opam/base64@opam:3.5.0@827395e3","@opam/angstrom@opam:0.15.0@48ede9cb"]},"@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e": {"id": "@opam/gluten-lwt-unix@opam:0.2.1@1a92c47e","name": "@opam/gluten-lwt-unix","version": "opam:0.2.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/86/86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de#sha256:86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de","archive:https://github.com/anmonteiro/gluten/releases/download/0.2.1/gluten-0.2.1.tbz#sha256:86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de"],"opam": {"name": "gluten-lwt-unix","version": "0.2.1","path": "esy.lock/opam/gluten-lwt-unix.0.2.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt_ssl@opam:1.1.3@9d044ebe","@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/gluten-lwt@opam:0.2.1@4dbee72c","@opam/gluten@opam:0.2.1@fca26440","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/gluten-lwt@opam:0.2.1@4dbee72c","@opam/gluten@opam:0.2.1@fca26440","@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/gluten-lwt@opam:0.2.1@4dbee72c": {"id": "@opam/gluten-lwt@opam:0.2.1@4dbee72c","name": "@opam/gluten-lwt","version": "opam:0.2.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/86/86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de#sha256:86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de","archive:https://github.com/anmonteiro/gluten/releases/download/0.2.1/gluten-0.2.1.tbz#sha256:86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de"],"opam": {"name": "gluten-lwt","version": "0.2.1","path": "esy.lock/opam/gluten-lwt.0.2.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/gluten@opam:0.2.1@fca26440", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/gluten@opam:0.2.1@fca26440", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/gluten@opam:0.2.1@fca26440": {"id": "@opam/gluten@opam:0.2.1@fca26440","name": "@opam/gluten","version": "opam:0.2.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/86/86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de#sha256:86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de","archive:https://github.com/anmonteiro/gluten/releases/download/0.2.1/gluten-0.2.1.tbz#sha256:86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de"],"opam": {"name": "gluten","version": "0.2.1","path": "esy.lock/opam/gluten.0.2.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b"]},"@opam/fpath@opam:0.7.3@674d8125": {"id": "@opam/fpath@opam:0.7.3@674d8125","name": "@opam/fpath","version": "opam:0.7.3","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/07/0740b530e8fed5b0adc5eee8463cfc2f#md5:0740b530e8fed5b0adc5eee8463cfc2f","archive:https://erratique.ch/software/fpath/releases/fpath-0.7.3.tbz#md5:0740b530e8fed5b0adc5eee8463cfc2f"],"opam": {"name": "fpath","version": "0.7.3","path": "esy.lock/opam/fpath.0.7.3"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@opam/astring@opam:0.8.5@1300cee8","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/astring@opam:0.8.5@1300cee8"]},"@opam/fmt@opam:0.8.9@e0843a5b": {"id": "@opam/fmt@opam:0.8.9@e0843a5b","name": "@opam/fmt","version": "opam:0.8.9","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/40/4001b51cde90ea4fd99a4a5033ecf411#md5:4001b51cde90ea4fd99a4a5033ecf411","archive:https://erratique.ch/software/fmt/releases/fmt-0.8.9.tbz#md5:4001b51cde90ea4fd99a4a5033ecf411"],"opam": {"name": "fmt","version": "0.8.9","path": "esy.lock/opam/fmt.0.8.9"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c","@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/seq@opam:base@d8d7de1d","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@opam/cmdliner@opam:1.0.4@93208aac","@opam/base-unix@opam:base@87d0b2eb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/seq@opam:base@d8d7de1d"]},"@opam/fix@opam:20201120@5c318621": {"id": "@opam/fix@opam:20201120@5c318621","name": "@opam/fix","version": "opam:20201120","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/7e/7eb570b759635fe66f3556d2b1cc88e3#md5:7eb570b759635fe66f3556d2b1cc88e3","archive:https://gitlab.inria.fr/fpottier/fix/repository/20201120/archive.tar.gz#md5:7eb570b759635fe66f3556d2b1cc88e3"],"opam": {"name": "fix","version": "20201120","path": "esy.lock/opam/fix.20201120"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/faraday-lwt-unix@opam:0.7.2@03e4a439": {"id": "@opam/faraday-lwt-unix@opam:0.7.2@03e4a439","name": "@opam/faraday-lwt-unix","version": "opam:0.7.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/61/61bb83e1a4bed100eb0bd1365878e3a1#md5:61bb83e1a4bed100eb0bd1365878e3a1","archive:https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz#md5:61bb83e1a4bed100eb0bd1365878e3a1"],"opam": {"name": "faraday-lwt-unix","version": "0.7.2","path": "esy.lock/opam/faraday-lwt-unix.0.7.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/faraday-lwt@opam:0.7.2@391bc143","@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/faraday-lwt@opam:0.7.2@391bc143","@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb"]},"@opam/faraday-lwt@opam:0.7.2@391bc143": {"id": "@opam/faraday-lwt@opam:0.7.2@391bc143","name": "@opam/faraday-lwt","version": "opam:0.7.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/61/61bb83e1a4bed100eb0bd1365878e3a1#md5:61bb83e1a4bed100eb0bd1365878e3a1","archive:https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz#md5:61bb83e1a4bed100eb0bd1365878e3a1"],"opam": {"name": "faraday-lwt","version": "0.7.2","path": "esy.lock/opam/faraday-lwt.0.7.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/faraday@opam:0.7.2@5dfdf1f9","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/faraday@opam:0.7.2@5dfdf1f9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/faraday@opam:0.7.2@5dfdf1f9": {"id": "@opam/faraday@opam:0.7.2@5dfdf1f9","name": "@opam/faraday","version": "opam:0.7.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/61/61bb83e1a4bed100eb0bd1365878e3a1#md5:61bb83e1a4bed100eb0bd1365878e3a1","archive:https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz#md5:61bb83e1a4bed100eb0bd1365878e3a1"],"opam": {"name": "faraday","version": "0.7.2","path": "esy.lock/opam/faraday.0.7.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b"]},"@opam/eqaf@opam:0.7@e7d6447e": {"id": "@opam/eqaf@opam:0.7@e7d6447e","name": "@opam/eqaf","version": "opam:0.7","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/10/10e666aea9a413e63c5e9dd1c0566aed78a2bf0f4e09caa2bb3b88a021bf09e0#sha256:10e666aea9a413e63c5e9dd1c0566aed78a2bf0f4e09caa2bb3b88a021bf09e0","archive:https://github.com/mirage/eqaf/releases/download/v0.7/eqaf-v0.7.tbz#sha256:10e666aea9a413e63c5e9dd1c0566aed78a2bf0f4e09caa2bb3b88a021bf09e0"],"opam": {"name": "eqaf","version": "0.7","path": "esy.lock/opam/eqaf.0.7"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/bigarray-compat@opam:1.0.0@3a87ad65","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/easy-format@opam:1.3.2@0484b3c4": {"id": "@opam/easy-format@opam:1.3.2@0484b3c4","name": "@opam/easy-format","version": "opam:1.3.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/34/3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926","archive:https://github.com/mjambon/easy-format/releases/download/1.3.2/easy-format-1.3.2.tbz#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926"],"opam": {"name": "easy-format","version": "1.3.2","path": "esy.lock/opam/easy-format.1.3.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/dune-configurator@opam:2.8.2@c90ff40b": {"id": "@opam/dune-configurator@opam:2.8.2@c90ff40b","name": "@opam/dune-configurator","version": "opam:2.8.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/e2/e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e#sha256:e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e","archive:https://github.com/ocaml/dune/releases/download/2.8.2/dune-2.8.2.tbz#sha256:e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e"],"opam": {"name": "dune-configurator","version": "2.8.2","path": "esy.lock/opam/dune-configurator.2.8.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/dune@opam:2.8.2@3d714e5f", "@opam/csexp@opam:1.4.0@bd1cb034","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/dune@opam:2.8.2@3d714e5f", "@opam/csexp@opam:1.4.0@bd1cb034"]},"@opam/dune-build-info@opam:2.8.2@0ec81e5b": {"id": "@opam/dune-build-info@opam:2.8.2@0ec81e5b","name": "@opam/dune-build-info","version": "opam:2.8.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/e2/e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e#sha256:e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e","archive:https://github.com/ocaml/dune/releases/download/2.8.2/dune-2.8.2.tbz#sha256:e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e"],"opam": {"name": "dune-build-info","version": "2.8.2","path": "esy.lock/opam/dune-build-info.2.8.2"}},"overrides": [],"dependencies": ["@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "@opam/dune@opam:2.8.2@3d714e5f" ]},"@opam/dune@opam:2.8.2@3d714e5f": {"id": "@opam/dune@opam:2.8.2@3d714e5f","name": "@opam/dune","version": "opam:2.8.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/e2/e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e#sha256:e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e","archive:https://github.com/ocaml/dune/releases/download/2.8.2/dune-2.8.2.tbz#sha256:e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e"],"opam": {"name": "dune","version": "2.8.2","path": "esy.lock/opam/dune.2.8.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/base-unix@opam:base@87d0b2eb","@opam/base-threads@opam:base@36803084","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/base-unix@opam:base@87d0b2eb","@opam/base-threads@opam:base@36803084"]},"@opam/dot-merlin-reader@opam:4.1@120afa42": {"id": "@opam/dot-merlin-reader@opam:4.1@120afa42","name": "@opam/dot-merlin-reader","version": "opam:4.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/14/14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd#sha256:14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd","archive:https://github.com/ocaml/merlin/releases/download/v4.1/dot-merlin-reader-v4.1.tbz#sha256:14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd"],"opam": {"name": "dot-merlin-reader","version": "4.1","path": "esy.lock/opam/dot-merlin-reader.4.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/result@opam:1.5@6b753c82","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/dune@opam:2.8.2@3d714e5f", "@opam/csexp@opam:1.4.0@bd1cb034","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985","@opam/result@opam:1.5@6b753c82","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/dune@opam:2.8.2@3d714e5f", "@opam/csexp@opam:1.4.0@bd1cb034"]},"@opam/digestif@opam:1.0.0@ce08dfe9": {"id": "@opam/digestif@opam:1.0.0@ce08dfe9","name": "@opam/digestif","version": "opam:1.0.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/29/29450c1fecb93b3c5c19588f8abcbf4891ddf1f84a1bbd3fb860e96994472884#sha256:29450c1fecb93b3c5c19588f8abcbf4891ddf1f84a1bbd3fb860e96994472884","archive:https://github.com/mirage/digestif/releases/download/v1.0.0/digestif-v1.0.0.tbz#sha256:29450c1fecb93b3c5c19588f8abcbf4891ddf1f84a1bbd3fb860e96994472884"],"opam": {"name": "digestif","version": "1.0.0","path": "esy.lock/opam/digestif.1.0.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/eqaf@opam:0.7@e7d6447e", "@opam/dune@opam:2.8.2@3d714e5f","@opam/conf-pkg-config@opam:1.3@93481236","@opam/bigarray-compat@opam:1.0.0@3a87ad65","@opam/base-bytes@opam:base@19d0c2ff","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/eqaf@opam:0.7@e7d6447e", "@opam/dune@opam:2.8.2@3d714e5f","@opam/bigarray-compat@opam:1.0.0@3a87ad65","@opam/base-bytes@opam:base@19d0c2ff"]},"@opam/csexp@opam:1.4.0@bd1cb034": {"id": "@opam/csexp@opam:1.4.0@bd1cb034","name": "@opam/csexp","version": "opam:1.4.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/8e/8e3d6fca87f102a126dee8b72a2a0d146f10439c47218dfc149d51bf3edf364e#sha256:8e3d6fca87f102a126dee8b72a2a0d146f10439c47218dfc149d51bf3edf364e","archive:https://github.com/ocaml-dune/csexp/releases/download/1.4.0/csexp-1.4.0.tbz#sha256:8e3d6fca87f102a126dee8b72a2a0d146f10439c47218dfc149d51bf3edf364e"],"opam": {"name": "csexp","version": "1.4.0","path": "esy.lock/opam/csexp.1.4.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/cppo@opam:1.6.7@c28ac3ae": {"id": "@opam/cppo@opam:1.6.7@c28ac3ae","name": "@opam/cppo","version": "opam:1.6.7","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/db/db553e3e6c206df09b1858c3aef5e21e56564d593642a3c78bcedb6af36f529d#sha256:db553e3e6c206df09b1858c3aef5e21e56564d593642a3c78bcedb6af36f529d","archive:https://github.com/ocaml-community/cppo/releases/download/v1.6.7/cppo-v1.6.7.tbz#sha256:db553e3e6c206df09b1858c3aef5e21e56564d593642a3c78bcedb6af36f529d"],"opam": {"name": "cppo","version": "1.6.7","path": "esy.lock/opam/cppo.1.6.7"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb"]},"@opam/containers-data@opam:3.2@2a99f808": {"id": "@opam/containers-data@opam:3.2@2a99f808","name": "@opam/containers-data","version": "opam:3.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/14/14787fb6878a94dd728a0ef7e368ab89#md5:14787fb6878a94dd728a0ef7e368ab89","archive:https://github.com/c-cube/ocaml-containers/archive/v3.2.tar.gz#md5:14787fb6878a94dd728a0ef7e368ab89"],"opam": {"name": "containers-data","version": "3.2","path": "esy.lock/opam/containers-data.3.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/dune@opam:2.8.2@3d714e5f","@opam/containers@opam:3.2@c4e3f662","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/dune@opam:2.8.2@3d714e5f","@opam/containers@opam:3.2@c4e3f662"]},"@opam/containers@opam:3.2@c4e3f662": {"id": "@opam/containers@opam:3.2@c4e3f662","name": "@opam/containers","version": "opam:3.2","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/14/14787fb6878a94dd728a0ef7e368ab89#md5:14787fb6878a94dd728a0ef7e368ab89","archive:https://github.com/c-cube/ocaml-containers/archive/v3.2.tar.gz#md5:14787fb6878a94dd728a0ef7e368ab89"],"opam": {"name": "containers","version": "3.2","path": "esy.lock/opam/containers.3.2"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/dune-configurator@opam:2.8.2@c90ff40b","@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@opam/base-threads@opam:base@36803084","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d","@opam/dune-configurator@opam:2.8.2@c90ff40b","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/conf-pkg-config@opam:1.3@93481236": {"id": "@opam/conf-pkg-config@opam:1.3@93481236","name": "@opam/conf-pkg-config","version": "opam:1.3","source": {"type": "install","source": [ "no-source:" ],"opam": {"name": "conf-pkg-config","version": "1.3","path": "esy.lock/opam/conf-pkg-config.1.3"}},"overrides": [{"opamoverride":"esy.lock/overrides/opam__s__conf_pkg_config_opam__c__1.3_opam_override"}],"dependencies": ["yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": []},"@opam/conf-m4@opam:1@196bf219": {"id": "@opam/conf-m4@opam:1@196bf219","name": "@opam/conf-m4","version": "opam:1","source": {"type": "install","source": [ "no-source:" ],"opam": {"name": "conf-m4","version": "1","path": "esy.lock/opam/conf-m4.1"}},"overrides": [{"opamoverride":"esy.lock/overrides/opam__s__conf_m4_opam__c__1_opam_override"}],"dependencies": ["esy-m4@github:esy-packages/esy-m4#c7cf0ac9221be2b1f9d90e83559ca08397a629e7@d41d8cd9","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": []},"@opam/conf-libssl@opam:2@5d3479e1": {"id": "@opam/conf-libssl@opam:2@5d3479e1","name": "@opam/conf-libssl","version": "opam:2","source": {"type": "install","source": [ "no-source:" ],"opam": {"name": "conf-libssl","version": "2","path": "esy.lock/opam/conf-libssl.2"}},"overrides": [{"opamoverride":"esy.lock/overrides/opam__s__conf_libssl_opam__c__2_opam_override"}],"dependencies": ["esy-openssl@archive:https://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz#sha1:33324ff957edaae8ae575817b456320378da46ff@41b6fb3d","@opam/conf-pkg-config@opam:1.3@93481236","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": []},"@opam/conf-autoconf@github:esy-packages/esy-autoconf:package.json#fb93edf@d41d8cd9": {"id":"@opam/conf-autoconf@github:esy-packages/esy-autoconf:package.json#fb93edf@d41d8cd9","name": "@opam/conf-autoconf","version": "github:esy-packages/esy-autoconf:package.json#fb93edf","source": {"type": "install","source": [ "github:esy-packages/esy-autoconf:package.json#fb93edf" ]},"overrides": [],"dependencies": ["esy-help2man@github:esy-packages/esy-help2man#c8e6931d1dcf58a81bd801145a777fd3b115c443@d41d8cd9"],"devDependencies": []},"@opam/cmdliner@opam:1.0.4@93208aac": {"id": "@opam/cmdliner@opam:1.0.4@93208aac","name": "@opam/cmdliner","version": "opam:1.0.4","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/fe/fe2213d0bc63b1e10a2d0aa66d2fc8d9#md5:fe2213d0bc63b1e10a2d0aa66d2fc8d9","archive:http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz#md5:fe2213d0bc63b1e10a2d0aa66d2fc8d9"],"opam": {"name": "cmdliner","version": "1.0.4","path": "esy.lock/opam/cmdliner.1.0.4"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/bitstring@opam:4.1.0@5a3ee0e8": {"id": "@opam/bitstring@opam:4.1.0@5a3ee0e8","name": "@opam/bitstring","version": "opam:4.1.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/8a/8ae6f04eaa29481c6830ee3be5cba755#md5:8ae6f04eaa29481c6830ee3be5cba755","archive:https://github.com/xguerin/bitstring/archive/v4.1.0.tar.gz#md5:8ae6f04eaa29481c6830ee3be5cba755"],"opam": {"name": "bitstring","version": "4.1.0","path": "esy.lock/opam/bitstring.4.1.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/biniou@opam:1.2.1@d7570399": {"id": "@opam/biniou@opam:1.2.1@d7570399","name": "@opam/biniou","version": "opam:1.2.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/35/35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335","archive:https://github.com/mjambon/biniou/releases/download/1.2.1/biniou-1.2.1.tbz#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335"],"opam": {"name": "biniou","version": "1.2.1","path": "esy.lock/opam/biniou.1.2.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/bigstringaf@opam:0.7.0@4784da9b": {"id": "@opam/bigstringaf@opam:0.7.0@4784da9b","name": "@opam/bigstringaf","version": "opam:0.7.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/3e/3e47593200b77fa6dd2754d37e9cbe19#md5:3e47593200b77fa6dd2754d37e9cbe19","archive:https://github.com/inhabitedtype/bigstringaf/archive/0.7.0.tar.gz#md5:3e47593200b77fa6dd2754d37e9cbe19"],"opam": {"name": "bigstringaf","version": "0.7.0","path": "esy.lock/opam/bigstringaf.0.7.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/conf-pkg-config@opam:1.3@93481236","@opam/bigarray-compat@opam:1.0.0@3a87ad65","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/bigarray-compat@opam:1.0.0@3a87ad65"]},"@opam/bigarray-compat@opam:1.0.0@3a87ad65": {"id": "@opam/bigarray-compat@opam:1.0.0@3a87ad65","name": "@opam/bigarray-compat","version": "opam:1.0.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/1c/1cc7c25382a8900bada34aadfd66632e#md5:1cc7c25382a8900bada34aadfd66632e","archive:https://github.com/mirage/bigarray-compat/archive/v1.0.0.tar.gz#md5:1cc7c25382a8900bada34aadfd66632e"],"opam": {"name": "bigarray-compat","version": "1.0.0","path": "esy.lock/opam/bigarray-compat.1.0.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/base64@opam:3.5.0@827395e3": {"id": "@opam/base64@opam:3.5.0@827395e3","name": "@opam/base64","version": "opam:3.5.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/58/589de9c00578ebfe784198ac9818d3586c474b2316b6cd3e1c46ccb1f62ae3a4#sha256:589de9c00578ebfe784198ac9818d3586c474b2316b6cd3e1c46ccb1f62ae3a4","archive:https://github.com/mirage/ocaml-base64/releases/download/v3.5.0/base64-v3.5.0.tbz#sha256:589de9c00578ebfe784198ac9818d3586c474b2316b6cd3e1c46ccb1f62ae3a4"],"opam": {"name": "base64","version": "3.5.0","path": "esy.lock/opam/base64.3.5.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/base-unix@opam:base@87d0b2eb": {"id": "@opam/base-unix@opam:base@87d0b2eb","name": "@opam/base-unix","version": "opam:base","source": {"type": "install","source": [ "no-source:" ],"opam": {"name": "base-unix","version": "base","path": "esy.lock/opam/base-unix.base"}},"overrides": [],"dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ],"devDependencies": []},"@opam/base-threads@opam:base@36803084": {"id": "@opam/base-threads@opam:base@36803084","name": "@opam/base-threads","version": "opam:base","source": {"type": "install","source": [ "no-source:" ],"opam": {"name": "base-threads","version": "base","path": "esy.lock/opam/base-threads.base"}},"overrides": [],"dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ],"devDependencies": []},"@opam/base-bytes@opam:base@19d0c2ff": {"id": "@opam/base-bytes@opam:base@19d0c2ff","name": "@opam/base-bytes","version": "opam:base","source": {"type": "install","source": [ "no-source:" ],"opam": {"name": "base-bytes","version": "base","path": "esy.lock/opam/base-bytes.base"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@b7dc3072","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@b7dc3072"]},"@opam/base@opam:v0.14.1@d14008e2": {"id": "@opam/base@opam:v0.14.1@d14008e2","name": "@opam/base","version": "opam:v0.14.1","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/e4/e4419eae60f57e553b154856f0cacf42#md5:e4419eae60f57e553b154856f0cacf42","archive:https://github.com/janestreet/base/archive/v0.14.1.tar.gz#md5:e4419eae60f57e553b154856f0cacf42"],"opam": {"name": "base","version": "v0.14.1","path": "esy.lock/opam/base.v0.14.1"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/sexplib0@opam:v0.14.0@ddeb6438","@opam/dune-configurator@opam:2.8.2@c90ff40b","@opam/dune@opam:2.8.2@3d714e5f", "@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/sexplib0@opam:v0.14.0@ddeb6438","@opam/dune-configurator@opam:2.8.2@c90ff40b","@opam/dune@opam:2.8.2@3d714e5f"]},"@opam/astring@opam:0.8.5@1300cee8": {"id": "@opam/astring@opam:0.8.5@1300cee8","name": "@opam/astring","version": "opam:0.8.5","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/e1/e148907c24157d1df43bec89b58b3ec8#md5:e148907c24157d1df43bec89b58b3ec8","archive:https://erratique.ch/software/astring/releases/astring-0.8.5.tbz#md5:e148907c24157d1df43bec89b58b3ec8"],"opam": {"name": "astring","version": "0.8.5","path": "esy.lock/opam/astring.0.8.5"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/ocamlbuild@opam:0.14.0@6ac75d03","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]},"@opam/angstrom@opam:0.15.0@48ede9cb": {"id": "@opam/angstrom@opam:0.15.0@48ede9cb","name": "@opam/angstrom","version": "opam:0.15.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/51/5104768c404ea92fd0a53a5b0f75cd50#md5:5104768c404ea92fd0a53a5b0f75cd50","archive:https://github.com/inhabitedtype/angstrom/archive/0.15.0.tar.gz#md5:5104768c404ea92fd0a53a5b0f75cd50"],"opam": {"name": "angstrom","version": "0.15.0","path": "esy.lock/opam/angstrom.0.15.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/ocaml-syntax-shims@opam:1.0.0@a9aa3bfa","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/dune@opam:2.8.2@3d714e5f","@opam/bigstringaf@opam:0.7.0@4784da9b"]},"@opam/alcotest-lwt@opam:1.3.0@b6a6a7a5": {"id": "@opam/alcotest-lwt@opam:1.3.0@b6a6a7a5","name": "@opam/alcotest-lwt","version": "opam:1.3.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/79/79f9debdbca895374d6fdd73af8a470dcbe068b410483d35c04bb6ccc33e89ac#sha256:79f9debdbca895374d6fdd73af8a470dcbe068b410483d35c04bb6ccc33e89ac","archive:https://github.com/mirage/alcotest/releases/download/1.3.0/alcotest-mirage-1.3.0.tbz#sha256:79f9debdbca895374d6fdd73af8a470dcbe068b410483d35c04bb6ccc33e89ac"],"opam": {"name": "alcotest-lwt","version": "1.3.0","path": "esy.lock/opam/alcotest-lwt.1.3.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/logs@opam:0.7.0@1d03143e", "@opam/fmt@opam:0.8.9@e0843a5b","@opam/dune@opam:2.8.2@3d714e5f","@opam/alcotest@opam:1.3.0@41168bef","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/lwt@opam:5.4.0@1ec6dbfd","@opam/logs@opam:0.7.0@1d03143e", "@opam/fmt@opam:0.8.9@e0843a5b","@opam/dune@opam:2.8.2@3d714e5f","@opam/alcotest@opam:1.3.0@41168bef"]},"@opam/alcotest@opam:1.3.0@41168bef": {"id": "@opam/alcotest@opam:1.3.0@41168bef","name": "@opam/alcotest","version": "opam:1.3.0","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/sha256/79/79f9debdbca895374d6fdd73af8a470dcbe068b410483d35c04bb6ccc33e89ac#sha256:79f9debdbca895374d6fdd73af8a470dcbe068b410483d35c04bb6ccc33e89ac","archive:https://github.com/mirage/alcotest/releases/download/1.3.0/alcotest-mirage-1.3.0.tbz#sha256:79f9debdbca895374d6fdd73af8a470dcbe068b410483d35c04bb6ccc33e89ac"],"opam": {"name": "alcotest","version": "1.3.0","path": "esy.lock/opam/alcotest.1.3.0"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f","@opam/uuidm@opam:0.9.7@bf725775","@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/re@opam:1.9.0@d4d5e13d", "@opam/fmt@opam:0.8.9@e0843a5b","@opam/dune@opam:2.8.2@3d714e5f","@opam/cmdliner@opam:1.0.4@93208aac","@opam/astring@opam:0.8.5@1300cee8","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f","@opam/uuidm@opam:0.9.7@bf725775","@opam/stdlib-shims@opam:0.3.0@0d088929","@opam/re@opam:1.9.0@d4d5e13d", "@opam/fmt@opam:0.8.9@e0843a5b","@opam/dune@opam:2.8.2@3d714e5f","@opam/cmdliner@opam:1.0.4@93208aac","@opam/astring@opam:0.8.5@1300cee8"]},"@opam/ISO8601@opam:0.2.6@07c0838b": {"id": "@opam/ISO8601@opam:0.2.6@07c0838b","name": "@opam/ISO8601","version": "opam:0.2.6","source": {"type": "install","source": ["archive:https://opam.ocaml.org/cache/md5/a4/a460f01d409d51b7d537429881bfa276#md5:a460f01d409d51b7d537429881bfa276","archive:https://github.com/ocaml-community/ISO8601.ml/archive/0.2.6.tar.gz#md5:a460f01d409d51b7d537429881bfa276"],"opam": {"name": "ISO8601","version": "0.2.6","path": "esy.lock/opam/ISO8601.0.2.6"}},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb","@esy-ocaml/substs@0.0.1@d41d8cd9"],"devDependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.8.2@3d714e5f","@opam/base-unix@opam:base@87d0b2eb"]},"@esy-ocaml/substs@0.0.1@d41d8cd9": {"id": "@esy-ocaml/substs@0.0.1@d41d8cd9","name": "@esy-ocaml/substs","version": "0.0.1","source": {"type": "install","source": ["archive:https://registry.npmjs.org/@esy-ocaml/substs/-/substs-0.0.1.tgz#sha1:59ebdbbaedcda123fc7ed8fb2b302b7d819e9a46"]},"overrides": [],"dependencies": [],"devDependencies": []},"@esy-ocaml/reason@github:reasonml/reason:reason.json#98e6c29@d41d8cd9": {"id":"@esy-ocaml/reason@github:reasonml/reason:reason.json#98e6c29@d41d8cd9","name": "@esy-ocaml/reason","version": "github:reasonml/reason:reason.json#98e6c29","source": {"type": "install","source": [ "github:reasonml/reason:reason.json#98e6c29" ]},"overrides": [],"dependencies": ["ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82","@opam/ppx_derivers@opam:1.2.1@ecf0aa45","@opam/ocamlfind@opam:1.8.1@b7dc3072","@opam/merlin-extend@opam:0.6@404f814c","@opam/menhir@opam:20201216@1a09d886","@opam/fix@opam:20201120@5c318621", "@opam/dune@opam:2.8.2@3d714e5f"],"devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ]}}}
opam-version: "2.0"synopsis: "ISO 8601 and RFC 3999 date parsing for OCaml"maintainer: ["c-cube" "ocaml-community"]authors: "Julien Sagot"homepage: "http://github.com/ocaml-community/ISO8601.ml/"doc: "http://ocaml-community.github.io/ISO8601.ml/"bug-reports: "https://github.com/ocaml-community/ISO8601.ml/issues"depends: ["dune" {>= "1.0"}"base-unix""ocaml" {>= "3.12.1"}"odoc" {with-doc}"ounit" {with-test}]build: [["dune" "build" "-p" name "-j" jobs]["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc}]dev-repo: "git+https://github.com/ocaml-community/ISO8601.ml.git"url {src: "https://github.com/ocaml-community/ISO8601.ml/archive/0.2.6.tar.gz"checksum: ["md5=a460f01d409d51b7d537429881bfa276""sha512=82b5cbbb636346e8d010ee569c0fad2f00bef31c3177cfee80fc02a081c5fcfb7880bf2670fe4f46423e3ae99370626c7efffc9d332cae5cbd6377c975517b3f"]}
opam-version: "2.0"synopsis: "Lwt-based helpers for Alcotest"description: "Lwt-based helpers for Alcotest"maintainer: ["thomas@gazagnaire.org"]authors: ["Thomas Gazagnaire"]license: "ISC"homepage: "https://github.com/mirage/alcotest"doc: "https://mirage.github.io/alcotest"bug-reports: "https://github.com/mirage/alcotest/issues"depends: ["dune" {>= "2.2"}"re" {with-test}"cmdliner" {with-test}"fmt""ocaml" {>= "4.03.0"}"alcotest" {= version}"lwt""logs"]build: [["dune" "subst"] {pinned}["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]]dev-repo: "git+https://github.com/mirage/alcotest.git"x-commit-hash: "89d04d50aeadf2425fd15a9784ef4d0a6d583ba3"url {src:"https://github.com/mirage/alcotest/releases/download/1.3.0/alcotest-mirage-1.3.0.tbz"checksum: ["sha256=79f9debdbca895374d6fdd73af8a470dcbe068b410483d35c04bb6ccc33e89ac""sha512=c41b17354d391d72f5f7bbbf520d7d227ec3df1bb25183e4a6761bb6d76e787ab89302bf58695cfe5a05b7d00cd77fe9d18d1eee396ecc724dfe942ecd1144aa"]}
opam-version: "2.0"synopsis: "Alcotest is a lightweight and colourful test framework"description: """Alcotest exposes simple interface to perform unit tests. It exposesa simple TESTABLE module type, a check function to assert testpredicates and a run function to perform a list of unit -> unittest callbacks.Alcotest provides a quiet and colorful output where only faulty runsare fully displayed at the end of the run (with the full logs ready toinspect), with a simple (yet expressive) query language to select thetests to run."""maintainer: ["thomas@gazagnaire.org"]authors: ["Thomas Gazagnaire"]license: "ISC"homepage: "https://github.com/mirage/alcotest"doc: "https://mirage.github.io/alcotest"bug-reports: "https://github.com/mirage/alcotest/issues"depends: ["dune" {>= "2.2"}"ocaml" {>= "4.03.0"}"fmt" {>= "0.8.7"}"astring""cmdliner""uuidm""re""stdlib-shims""uutf"]build: [["dune" "subst"] {pinned}["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]]dev-repo: "git+https://github.com/mirage/alcotest.git"x-commit-hash: "89d04d50aeadf2425fd15a9784ef4d0a6d583ba3"url {src:"https://github.com/mirage/alcotest/releases/download/1.3.0/alcotest-mirage-1.3.0.tbz"checksum: ["sha256=79f9debdbca895374d6fdd73af8a470dcbe068b410483d35c04bb6ccc33e89ac""sha512=c41b17354d391d72f5f7bbbf520d7d227ec3df1bb25183e4a6761bb6d76e787ab89302bf58695cfe5a05b7d00cd77fe9d18d1eee396ecc724dfe942ecd1144aa"]}
opam-version: "2.0"maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]license: "BSD-3-clause"homepage: "https://github.com/inhabitedtype/angstrom"bug-reports: "https://github.com/inhabitedtype/angstrom/issues"dev-repo: "git+https://github.com/inhabitedtype/angstrom.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}]depends: ["ocaml" {>= "4.04.0"}"dune" {>= "1.8"}"alcotest" {with-test & >= "0.8.1"}"bigstringaf""result""ppx_let" {with-test & >= "0.14.0"}"ocaml-syntax-shims" {build}]synopsis: "Parser combinators built for speed and memory-efficiency"description: """Angstrom is a parser-combinator library that makes it easy to write efficient,expressive, and reusable parsers suitable for high-performance applications. Itexposes monadic and applicative interfaces for composition, and supportsincremental input through buffered and unbuffered interfaces. Both interfacesgive the user total control over the blocking behavior of their application,with the unbuffered interface enabling zero-copy IO. Parsers are backtracking bydefault and support unbounded lookahead."""url {src: "https://github.com/inhabitedtype/angstrom/archive/0.15.0.tar.gz"checksum: "md5=5104768c404ea92fd0a53a5b0f75cd50"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["The astring programmers"]homepage: "https://erratique.ch/software/astring"doc: "https://erratique.ch/software/astring/doc"dev-repo: "git+http://erratique.ch/repos/astring.git"bug-reports: "https://github.com/dbuenzli/astring/issues"tags: [ "string" "org:erratique" ]license: "ISC"depends: ["ocaml" {>= "4.05.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build} ]build: [[ "ocaml" "pkg/pkg.ml" "build" "--pinned" "%{pinned}%" ]]synopsis: """Alternative String module for OCaml"""description: """\Astring exposes an alternative `String` module for OCaml. This moduletries to balance minimality and expressiveness for basic, index-free,string processing and provides types and functions for substrings,string sets and string maps.Remaining compatible with the OCaml `String` module is a non-goal. The`String` module exposed by Astring has exception safe functions,removes deprecated and rarely used functions, alters some signaturesand names, adds a few missing functions and fully exploits OCaml'snewfound string immutability.Astring depends only on the OCaml standard library. It is distributedunder the ISC license."""url {archive: "https://erratique.ch/software/astring/releases/astring-0.8.5.tbz"checksum: "e148907c24157d1df43bec89b58b3ec8"}
opam-version: "2.0"maintainer: " "authors: " "homepage: " "depends: ["ocaml" {>= "4.02.0"}"ocamlfind" {>= "1.5.3"}]synopsis: "Bytes library distributed with the OCaml compiler"
opam-version: "2.0"maintainer: "https://github.com/ocaml/opam-repository/issues"description: """Threads library distributed with the OCaml compiler"""
opam-version: "2.0"maintainer: "https://github.com/ocaml/opam-repository/issues"description: """Unix library distributed with the OCaml compiler"""
opam-version: "2.0"maintainer: "opensource@janestreet.com"authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]homepage: "https://github.com/janestreet/base"bug-reports: "https://github.com/janestreet/base/issues"dev-repo: "git+https://github.com/janestreet/base.git"doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/base/index.html"license: "MIT"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.08.0"}"sexplib0" {>= "v0.14" & < "v0.15"}"dune" {>= "2.0.0"}"dune-configurator"]synopsis: "Full standard library replacement for OCaml"description: "Full standard library replacement for OCamlBase is a complete and portable alternative to the OCaml standardlibrary. It provides all standard functionalities one would expectfrom a language standard library. It uses consistent conventionsacross all of its module.Base aims to be usable in any context. As a result system dependentfeatures such as I/O are not offered by Base. They are insteadprovided by companion libraries such as stdio:https://github.com/janestreet/stdio"url {src: "https://github.com/janestreet/base/archive/v0.14.1.tar.gz"checksum: "md5=e4419eae60f57e553b154856f0cacf42"}
opam-version: "2.0"maintainer: "mirageos-devel@lists.xenproject.org"authors: [ "Thomas Gazagnaire""Anil Madhavapeddy" "Calascibetta Romain""Peter Zotov" ]license: "ISC"homepage: "https://github.com/mirage/ocaml-base64"doc: "http://mirage.github.io/ocaml-base64/"bug-reports: "https://github.com/mirage/ocaml-base64/issues"dev-repo: "git+https://github.com/mirage/ocaml-base64.git"synopsis: "Base64 encoding for OCaml"description: """Base64 is a group of similar binary-to-text encoding schemes that representbinary data in an ASCII string format by translating it into a radix-64representation. It is specified in RFC 4648."""depends: ["ocaml" {>= "4.03.0"}"dune" {>= "2.0"}"bos" {with-test}"rresult" {with-test}"alcotest" {with-test}]build: [["dune" "subst"] {dev}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}]x-commit-hash: "3a5e259895acef979a0fab8bb59d396e1bccead0"url {src:"https://github.com/mirage/ocaml-base64/releases/download/v3.5.0/base64-v3.5.0.tbz"checksum: ["sha256=589de9c00578ebfe784198ac9818d3586c474b2316b6cd3e1c46ccb1f62ae3a4""sha512=82efc76ca75717dbd533eac20845ca8731f535233f6a3e6081114d7e3dc7ee8367ded16f402ef05ad0bf1217a3a6224161c92b9467023e44fc7f3598a314a432"]}
opam-version: "2.0"synopsis: "Compatibility library to use Stdlib.Bigarray when possible"maintainer: "Lucas Pluvinage <lucas.pluvinage@gmail.com>"authors: "Lucas Pluvinage <lucas.pluvinage@gmail.com>"license: "ISC"homepage: "https://github.com/mirage/bigarray-compat"bug-reports: "https://github.com/mirage/bigarray-compat/issues"depends: ["ocaml" {>= "4.02.3"}"dune" {>= "1.0"}]build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]]dev-repo: "git+https://github.com/mirage/bigarray-compat.git"url {src: "https://github.com/mirage/bigarray-compat/archive/v1.0.0.tar.gz"checksum: ["md5=1cc7c25382a8900bada34aadfd66632e""sha512=c365fee15582aca35d7b05268cde29e54774ad7df7be56762b4aad78ca1409d4326ad3b34af0f1cc2c7b872837290a9cd9ff43b47987c03bba7bba32fe8a030f"]}
opam-version: "2.0"maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]license: "BSD-3-clause"homepage: "https://github.com/inhabitedtype/bigstringaf"bug-reports: "https://github.com/inhabitedtype/bigstringaf/issues"dev-repo: "git+https://github.com/inhabitedtype/bigstringaf.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name] {with-test}]depends: ["dune" {>= "2.6.0"}"alcotest" {with-test}"bigarray-compat""ocaml" {>= "4.03.0"}"conf-pkg-config" {build}]depopts: ["ocaml-freestanding"]conflicts: ["mirage-xen" {< "6.0.0"}"ocaml-freestanding" {< "0.4.1"}"js_of_ocaml" {< "3.5.0"}]synopsis: "Bigstring intrinsics and fast blits based on memcpy/memmove"description: """Bigstring intrinsics and fast blits based on memcpy/memmoveThe OCaml compiler has a bunch of intrinsics for Bigstrings, but they're notwidely-known, sometimes misused, and so programs that use Bigstrings are slowerthan they have to be. And even if a library got that part right and exposed theintrinsics properly, the compiler doesn't have any fast blits betweenBigstrings and other string-like types.So here they are. Go crazy."""url {src: "https://github.com/inhabitedtype/bigstringaf/archive/0.7.0.tar.gz"checksum: "md5=3e47593200b77fa6dd2754d37e9cbe19"}
opam-version: "2.0"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}["dune" "build" "-p" name "@doc"] {with-doc}]maintainer: ["martin@mjambon.com"]authors: ["Martin Jambon"]bug-reports: "https://github.com/mjambon/biniou/issues"homepage: "https://github.com/mjambon/biniou"doc: "https://mjambon.github.io/biniou/"license: "BSD-3-Clause"dev-repo: "git+https://github.com/mjambon/biniou.git"synopsis:"Binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve"description: """Biniou (pronounced "be new") is a binary data format designed for speed, safety,ease of use and backward compatibility as protocols evolve. Biniou is vastlyequivalent to JSON in terms of functionality but allows implementations severaltimes faster (4 times faster than yojson), with 25-35% space savings.Biniou data can be decoded into human-readable form without knowledge of typedefinitions except for field and variant names which are represented by 31-bithashes. A program named bdump is provided for routine visualization of binioudata files.The program atdgen is used to derive OCaml-Biniou serializers and deserializersfrom type definitions.Biniou format specification: mjambon.github.io/atdgen-doc/biniou-format.txt"""depends: ["easy-format""dune" {>= "1.10"}"ocaml" {>= "4.02.3"}]url {src:"https://github.com/mjambon/biniou/releases/download/1.2.1/biniou-1.2.1.tbz"checksum: ["sha256=35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335""sha512=82670cc77bf3e869ee26e5fbe5a5affa45a22bc8b6c4bd7e85473912780e0111baca59b34a2c14feae3543ce6e239d7fddaeab24b686a65bfe642cdb91d27ebf"]}
opam-version: "2.0"version: "4.1.0"synopsis: "Bitstrings and bitstring matching for OCaml"description: """The ocaml-bitstring project adds Erlang-style bitstrings and matching over bitstrings as a syntax extension and library for OCaml.You can use this module to both parse and generate binary formats, files and protocols.Bitstring handling is added as primitives to the language, making it exceptionally simple to use and very powerful."""maintainer: ["Xavier R. Guérin <github@applepine.org>"]authors: ["Richard W.M. Jones" "Xavier R. Guérin"]license: "LGPL-2.0-or-later"homepage: "https://github.com/xguerin/bitstring"bug-reports: "https://github.com/xguerin/bitstring/issues"depends: ["dune" {>= "2.5"}"ocaml" {>= "4.04.1"}"stdlib-shims" {>= "0.1.0"}]build: [["dune" "subst"] {pinned}["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]]dev-repo: "git+https://github.com/xguerin/bitstring.git"url {src: "https://github.com/xguerin/bitstring/archive/v4.1.0.tar.gz"checksum: "md5=8ae6f04eaa29481c6830ee3be5cba755"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["Daniel Bünzli <daniel.buenzl i@erratique.ch>"]homepage: "http://erratique.ch/software/cmdliner"doc: "http://erratique.ch/software/cmdliner/doc/Cmdliner"dev-repo: "git+http://erratique.ch/repos/cmdliner.git"bug-reports: "https://github.com/dbuenzli/cmdliner/issues"tags: [ "cli" "system" "declarative" "org:erratique" ]license: "ISC"depends:[ "ocaml" {>= "4.03.0"} ]build: [[ make "all" "PREFIX=%{prefix}%" ]]install:[[make "install" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ][make "install-doc" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ]]synopsis: """Declarative definition of command line interfaces for OCaml"""description: """\Cmdliner allows the declarative definition of command line interfacesfor OCaml.It provides a simple and compositional mechanism to convert commandline arguments to OCaml values and pass them to your functions. Themodule automatically handles syntax errors, help messages and UNIX manpage generation. It supports programs with single or multiple commandsand respects most of the [POSIX][1] and [GNU][2] conventions.Cmdliner has no dependencies and is distributed under the ISC license.[1]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html[2]: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html"""url {archive: "http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz"checksum: "fe2213d0bc63b1e10a2d0aa66d2fc8d9"}
opam-version: "2.0"maintainer: "David Sheets <sheets@alum.mit.edu>"authors: ["The OpenSSL Project"]bug-reports: "https://github.com/ocaml/opam-repository/issues"homepage: "https://www.openssl.org/"license: "Apache-1.0"build: [["pkg-config" "openssl"]{os != "freebsd" & os != "openbsd" & os != "netbsd"} # libssl is provided by base system on BSDs]depends: ["conf-pkg-config" {build}]depexts: [["libssl-dev"] {os-family = "debian"}["openssl-devel"] {os-distribution = "centos"}["openssl-devel"] {os-distribution = "ol"}["openssl-devel"] {os-distribution = "fedora"}["openssl"] {os = "macos" & os-distribution = "homebrew"}["openssl"] {os = "macos" & os-distribution = "macports"}["openssl-dev"] {os-distribution = "alpine"}["openssl"] {os-distribution = "nixos"}["openssl"] {os-distribution = "arch"}["libopenssl-devel"] {os-family = "suse"}]post-messages: ["Make sure libssl/openssl is installed and accessible using pkg-config." {failure}"Set the PKG_CONFIG_PATH environment variable if necessary." {failure}"For example: export PKG_CONFIG_PATH=$(brew --prefix openssl)/lib/pkgconfig" {failure & os-distribution = "homebrew"}"For example: export PKG_CONFIG_PATH=$HOME/.nix-profile/lib/pkgconfig" {failure & os-distribution = "nixos"}"For example: export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig" {failure & os-distribution = "macports"}]synopsis: "Virtual package relying on an OpenSSL library system installation"description:"This package can only install if the OpenSSL library is installed on the system."flags: conf
opam-version: "2.0"maintainer: "tim@gfxmonk.net"homepage: "http://www.gnu.org/software/m4/m4.html"bug-reports: "https://github.com/ocaml/opam-repository/issues"authors: "GNU Project"license: "GPL-3.0-only"build: [["sh" "-exc" "echo | m4"]]depexts: [["m4"] {os-family = "debian"}["m4"] {os-distribution = "fedora"}["m4"] {os-distribution = "rhel"}["m4"] {os-distribution = "centos"}["m4"] {os-distribution = "alpine"}["m4"] {os-distribution = "nixos"}["m4"] {os-family = "suse"}["m4"] {os-distribution = "ol"}["m4"] {os-distribution = "arch"}]synopsis: "Virtual package relying on m4"description:"This package can only install if the m4 binary is installed on the system."flags: conf
opam-version: "2.0"maintainer: "unixjunkie@sdf.org"authors: ["Francois Berenger"]homepage: "http://www.freedesktop.org/wiki/Software/pkg-config/"bug-reports: "https://github.com/ocaml/opam-repository/issues"license: "GPL-1.0-or-later"build: [["pkg-config" "--help"]]install: [["ln" "-s" "/usr/local/bin/pkgconf" "%{bin}%/pkg-config"] {os = "openbsd"}]remove: [["rm" "-f" "%{bin}%/pkg-config"] {os = "openbsd"}]post-messages: ["conf-pkg-config: A symlink to /usr/local/bin/pkgconf has been installed in the OPAM bin directory (%{bin}%) on your PATH as 'pkg-config'. This is necessary for correct operation." {os = "openbsd"}]depexts: [["pkg-config"] {os-family = "debian"}["pkgconf"] {os-distribution = "arch"}["pkgconfig"] {os-distribution = "fedora"}["pkgconfig"] {os-distribution = "centos" & os-version <= "7"}["pkgconfig"] {os-distribution = "mageia"}["pkgconfig"] {os-distribution = "rhel" & os-version <= "7"}["pkgconfig"] {os-distribution = "ol"}["pkgconf"] {os-distribution = "alpine"}["pkgconfig"] {os-distribution = "nixos"}["devel/pkgconf"] {os = "openbsd"}["pkg-config"] {os = "macos" & os-distribution = "homebrew"}["pkgconfig"] {os = "macos" & os-distribution = "macports"}["pkgconf"] {os = "freebsd"}["pkgconf-pkg-config"] {os-distribution = "rhel" & os-version >= "8"}["pkgconf-pkg-config"] {os-distribution = "centos" & os-version >= "8"}["pkg-config"] {os-distribution = "cygwinports"}]synopsis: "Virtual package relying on pkg-config installation"description: """This package can only install if the pkg-config package is installedon the system."""flags: conf
opam-version: "2.0"maintainer: "simon.cruanes.2007@m4x.org"synopsis: "A set of advanced datatypes for containers"build: [["dune" "build" "-p" name "-j" jobs]["dune" "build" "@doc" "-p" name ] {with-doc}["dune" "runtest" "-p" name "-j" jobs] {with-test & ocaml:version < "4.11"}]depends: ["ocaml" { >= "4.03.0" }"dune" { >= "1.1" }"containers" { = version }"seq""qtest" { with-test }"qcheck" { with-test }"ounit" { with-test }"iter" { with-test }"gen" { with-test }#"mdx" { with-test & >= "1.5.0" & < "2.0.0" }"odoc" { with-doc }]tags: [ "containers" "RAL" "functional" "vector" "okasaki" ]homepage: "https://github.com/c-cube/ocaml-containers/"doc: "https://c-cube.github.io/ocaml-containers"dev-repo: "git+https://github.com/c-cube/ocaml-containers.git"bug-reports: "https://github.com/c-cube/ocaml-containers/issues/"authors: "Simon Cruanes"url {src: "https://github.com/c-cube/ocaml-containers/archive/v3.2.tar.gz"checksum: ["md5=14787fb6878a94dd728a0ef7e368ab89""sha512=9debbd79542fbe24e6b0ec5e0fb74077566663fa53b868aa381962653d65543a86606ed6703a75cf3e14962b66068747b237a88bb1eea15b6062665e294795ac"]}
opam-version: "2.0"maintainer: "simon.cruanes.2007@m4x.org"synopsis: "A modular, clean and powerful extension of the OCaml standard library"build: [["dune" "build" "-p" name "-j" jobs]["dune" "build" "@doc" "-p" name ] {with-doc}["dune" "runtest" "-p" name "-j" jobs] {with-test & ocaml:version < "4.11"}]depends: ["ocaml" { >= "4.03.0" }"dune" { >= "1.1" }"dune-configurator""seq""qtest" { with-test }"qcheck" { with-test }"ounit" { with-test }"iter" { with-test }"gen" { with-test }"uutf" { with-test }"odoc" { with-doc }]depopts: ["base-unix""base-threads"]tags: [ "stdlib" "containers" "iterators" "list" "heap" "queue" ]homepage: "https://github.com/c-cube/ocaml-containers/"doc: "https://c-cube.github.io/ocaml-containers"dev-repo: "git+https://github.com/c-cube/ocaml-containers.git"bug-reports: "https://github.com/c-cube/ocaml-containers/issues/"authors: "Simon Cruanes"url {src: "https://github.com/c-cube/ocaml-containers/archive/v3.2.tar.gz"checksum: ["md5=14787fb6878a94dd728a0ef7e368ab89""sha512=9debbd79542fbe24e6b0ec5e0fb74077566663fa53b868aa381962653d65543a86606ed6703a75cf3e14962b66068747b237a88bb1eea15b6062665e294795ac"]}
opam-version: "2.0"maintainer: "martin@mjambon.com"authors: "Martin Jambon"license: "BSD-3-Clause"homepage: "https://github.com/ocaml-community/cppo"doc: "https://ocaml-community.github.io/cppo/"bug-reports: "https://github.com/ocaml-community/cppo/issues"depends: ["ocaml" {>= "4.02.3"}"dune" {>= "1.0"}"base-unix"]build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}]dev-repo: "git+https://github.com/ocaml-community/cppo.git"synopsis: "Code preprocessor like cpp for OCaml"description: """Cppo is an equivalent of the C preprocessor for OCaml programs.It allows the definition of simple macros and file inclusion.Cppo is:* more OCaml-friendly than cpp* easy to learn without consulting a manual* reasonably fast* simple to install and to maintain"""x-commit-hash: "7d217864a5fdc4551699e248137a2f8b719d2078"url {src:"https://github.com/ocaml-community/cppo/releases/download/v1.6.7/cppo-v1.6.7.tbz"checksum: ["sha256=db553e3e6c206df09b1858c3aef5e21e56564d593642a3c78bcedb6af36f529d""sha512=9722b50fd23aaccf86816313333a3bf8fc7c6b4ef06b153e5e1e1aaf14670cf51a4aac52fb1b4a0e5531699c4047a1eff6c24c969f7e5063e78096c2195b5819"]}
opam-version: "2.0"synopsis: "Parsing and printing of S-expressions in Canonical form"description: """This library provides minimal support for Canonical S-expressions[1]. Canonical S-expressions are a binary encoding of S-expressionsthat is super simple and well suited for communication betweenprograms.This library only provides a few helpers for simple applications. Ifyou need more advanced support, such as parsing from more fancy inputsources, you should consider copying the code of this library givenhow simple parsing S-expressions in canonical form is.To avoid a dependency on a particular S-expression library, the onlymodule of this library is parameterised by the type of S-expressions.[1] https://en.wikipedia.org/wiki/Canonical_S-expressions"""maintainer: ["Jeremie Dimino <jeremie@dimino.org>"]authors: ["Quentin Hocquet <mefyl@gruntech.org>""Jane Street Group, LLC <opensource@janestreet.com>""Jeremie Dimino <jeremie@dimino.org>"]license: "MIT"homepage: "https://github.com/ocaml-dune/csexp"doc: "https://ocaml-dune.github.io/csexp/"bug-reports: "https://github.com/ocaml-dune/csexp/issues"depends: ["dune" {>= "1.11"}"ocaml" {>= "4.02.3"}"result" {>= "1.5"}]dev-repo: "git+https://github.com/ocaml-dune/csexp.git"build: [["dune" "subst"] {pinned}["dune""build""-p"name"-j"jobs"@install"# "@runtest" {with-test & ocaml:version >= "4.04"}"@doc" {with-doc}]]x-commit-hash: "0e1b2044c8d1ff187c27cec3e46d9cde14892650"url {src:"https://github.com/ocaml-dune/csexp/releases/download/1.4.0/csexp-1.4.0.tbz"checksum: ["sha256=8e3d6fca87f102a126dee8b72a2a0d146f10439c47218dfc149d51bf3edf364e""sha512=604a5094fbbf61f497b342ad0aa8ec25275b2a904cd0c1823fc40daa54a15796b360374ff495c0d8ca3b4c1e6723b2ce37e030857fae131222606de818fb8129"]}
opam-version: "2.0"maintainer: [ "Eyyüb Sari <eyyub.sari@epitech.eu>""Romain Calascibetta <romain.calascibetta@gmail.com>" ]authors: [ "Eyyüb Sari <eyyub.sari@epitech.eu>""Romain Calascibetta <romain.calascibetta@gmail.com>" ]homepage: "https://github.com/mirage/digestif"bug-reports: "https://github.com/mirage/digestif/issues"dev-repo: "git+https://github.com/mirage/digestif.git"doc: "https://mirage.github.io/digestif/"license: "MIT"synopsis: "Hashes implementations (SHA*, RIPEMD160, BLAKE2* and MD5)"description: """Digestif is a toolbox to provide hashes implementations in C and OCaml.It uses the linking trick and user can decide at the end to use the C implementation or the OCaml implementation.We provides implementation of:* MD5* SHA1* SHA224* SHA256* SHA384* SHA512* BLAKE2B* BLAKE2S* RIPEMD160"""build: [[ "dune" "build" "-p" name "-j" jobs ][ "./install/install.ml" ][ "dune" "runtest" "-p" name "-j" jobs ] {with-test}]install: [[ "dune" "install" "-p" name ] {with-test}[ "./test/test_runes.ml" ] {with-test}]depends: ["ocaml" {>= "4.03.0"}"dune" {>= "2.6.0"}"conf-pkg-config" {build}"eqaf""base-bytes""bigarray-compat""stdlib-shims""fmt" {with-test}"alcotest" {with-test}"bos" {with-test}"astring" {with-test}"fpath" {with-test}"rresult" {with-test}"ocamlfind" {with-test}]depopts: ["ocaml-freestanding"]conflicts: ["mirage-xen" {< "6.0.0"}"ocaml-freestanding" {< "0.6.0"}]x-commit-hash: "f7e043938d9bb6fda9865086074e60929095cd9e"url {src:"https://github.com/mirage/digestif/releases/download/v1.0.0/digestif-v1.0.0.tbz"checksum: ["sha256=29450c1fecb93b3c5c19588f8abcbf4891ddf1f84a1bbd3fb860e96994472884""sha512=30f4e2ea85a0aa50dbafb7c52d55b49f5612fbeeaa4ed8bfbd1610848a8f397c4cd1589fe0bd7ab3f165974697151279d56c37bae44c7f29a2d5a514af9d4942"]}
opam-version: "2.0"maintainer: "defree@gmail.com"authors: "The Merlin team"synopsis: "Reads config files for merlin"homepage: "https://github.com/ocaml/merlin"bug-reports: "https://github.com/ocaml/merlin/issues"dev-repo: "git+https://github.com/ocaml/merlin.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.06.1" }"dune" {>= "2.7.0"}"yojson" {>= "1.6.0"}"ocamlfind" {>= "1.6.0"}"csexp" {>= "1.2.3"}"result" {>= "1.5"}]description:"Helper process: reads .merlin files and gives the normalized content to merlin"x-commit-hash: "ab02f60994c81166820791b5f465f467d752b8dc"url {src:"https://github.com/ocaml/merlin/releases/download/v4.1/dot-merlin-reader-v4.1.tbz"checksum: ["sha256=14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd""sha512=65fd4ab08904c05651a7ef8971802ffaa428daa920765dbcf162e3c56e8047e4c9e4356daa45efccce7c73a586635c8f6cf8118fd3059789de9aff68579bd436"]}
opam-version: "2.0"synopsis: "Embed build informations inside executable"description: """The build-info library allows to access information about how theexecutable was built, such as the version of the project at which itwas built or the list of statically linked libraries with theirversions. It supports reporting the version from the version controlsystem during development to get an precise reference of when theexecutable was built."""maintainer: ["Jane Street Group, LLC <opensource@janestreet.com>"]authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]license: "MIT"homepage: "https://github.com/ocaml/dune"doc: "https://dune.readthedocs.io/"bug-reports: "https://github.com/ocaml/dune/issues"depends: ["dune" {>= "2.8"}"odoc" {with-doc}]dev-repo: "git+https://github.com/ocaml/dune.git"build: [["dune" "subst"] {dev}["dune""build""-p"name"-j"jobs"@install""@doc" {with-doc}]]x-commit-hash: "6c471da57bea666267a8a63034aed57962f378b0"url {src: "https://github.com/ocaml/dune/releases/download/2.8.2/dune-2.8.2.tbz"checksum: ["sha256=e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e""sha512=d3cca73f5a72440273f7b4e3934dfa7e89fcb64710f3c734d2583123f5d9f3e573f0ab96a4892b2f11313038da6b4e2c614951199ffef0a3f12669d729b25376"]}
opam-version: "2.0"synopsis: "Helper library for gathering system configuration"description: """dune-configurator is a small library that helps writing OCaml scripts thattest features available on the system, in order to generate config.hfiles for instance.Among other things, dune-configurator allows one to:- test if a C program compiles- query pkg-config- import #define from OCaml header files- generate config.h file"""maintainer: ["Jane Street Group, LLC <opensource@janestreet.com>"]authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]license: "MIT"homepage: "https://github.com/ocaml/dune"doc: "https://dune.readthedocs.io/"bug-reports: "https://github.com/ocaml/dune/issues"depends: ["dune" {>= "2.8"}"ocaml" {>= "4.03.0"}"result""csexp" {>= "1.3.0"}"odoc" {with-doc}]dev-repo: "git+https://github.com/ocaml/dune.git"build: [["dune" "subst"] {dev}["dune""build""-p"name"-j"jobs"@install""@doc" {with-doc}]]x-commit-hash: "6c471da57bea666267a8a63034aed57962f378b0"url {src: "https://github.com/ocaml/dune/releases/download/2.8.2/dune-2.8.2.tbz"checksum: ["sha256=e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e""sha512=d3cca73f5a72440273f7b4e3934dfa7e89fcb64710f3c734d2583123f5d9f3e573f0ab96a4892b2f11313038da6b4e2c614951199ffef0a3f12669d729b25376"]}
opam-version: "2.0"synopsis: "Fast, portable, and opinionated build system"description: """dune is a build system that was designed to simplify the release ofJane Street packages. It reads metadata from "dune" files following avery simple s-expression syntax.dune is fast, has very low-overhead, and supports parallel builds onall platforms. It has no system dependencies; all you need to builddune or packages using dune is OCaml. You don't need make or bashas long as the packages themselves don't use bash explicitly.dune supports multi-package development by simply dropping multiplerepositories into the same directory.It also supports multi-context builds, such as building againstseveral opam roots/switches simultaneously. This helps maintainingpackages across several versions of OCaml and gives cross-compilationfor free."""maintainer: ["Jane Street Group, LLC <opensource@janestreet.com>"]authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]license: "MIT"homepage: "https://github.com/ocaml/dune"doc: "https://dune.readthedocs.io/"bug-reports: "https://github.com/ocaml/dune/issues"conflicts: ["merlin" {< "3.4.0"}"ocaml-lsp-server" {< "1.3.0"}"dune-configurator" {< "2.3.0"}"odoc" {< "1.3.0"}"dune-release" {< "1.3.0"}"js_of_ocaml-compiler" {< "3.6.0"}"jbuilder" {= "transition"}]dev-repo: "git+https://github.com/ocaml/dune.git"build: [# opam 2 sets OPAM_SWITCH_PREFIX, so we don't need a hardcoded path["ocaml" "configure.ml" "--libdir" lib] {opam-version < "2"}["ocaml" "bootstrap.ml" "-j" jobs]["./dune.exe" "build" "-p" name "--profile" "dune-bootstrap" "-j" jobs]]depends: [# Please keep the lower bound in sync with .github/workflows/workflow.yml,# dune-project and min_ocaml_version in bootstrap.ml("ocaml" {>= "4.08"} | ("ocaml" {< "4.08~~"} & "ocamlfind-secondary"))"base-unix""base-threads"]x-commit-hash: "6c471da57bea666267a8a63034aed57962f378b0"url {src: "https://github.com/ocaml/dune/releases/download/2.8.2/dune-2.8.2.tbz"checksum: ["sha256=e2c4e8230f7c96236503fd75f22bdbc263639971bf104509e446855ded35ae1e""sha512=d3cca73f5a72440273f7b4e3934dfa7e89fcb64710f3c734d2583123f5d9f3e573f0ab96a4892b2f11313038da6b4e2c614951199ffef0a3f12669d729b25376"]}
opam-version: "2.0"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}["dune" "build" "-p" name "@doc"] {with-doc}]maintainer: ["martin@mjambon.com" "rudi.grinberg@gmail.com"]authors: ["Martin Jambon"]bug-reports: "https://github.com/mjambon/easy-format/issues"homepage: "https://github.com/mjambon/easy-format"doc: "https://mjambon.github.io/easy-format/"license: "BSD-3-Clause"dev-repo: "git+https://github.com/mjambon/easy-format.git"synopsis:"High-level and functional interface to the Format module of the OCaml standard library"description: """This module offers a high-level and functional interface to the Format module ofthe OCaml standard library. It is a pretty-printing facility, i.e. it takes asinput some code represented as a tree and formats this code into the mostvisually satisfying result, breaking and indenting lines of code whereappropriate.Input data must be first modelled and converted into a tree using 3 kinds ofnodes:* atoms* lists* labelled nodesAtoms represent any text that is guaranteed to be printed as-is. Lists can modelany sequence of items such as arrays of data or lists of definitions that arelabelled with something like "int main", "let x =" or "x:"."""depends: ["dune" {>= "1.10"}"ocaml" {>= "4.02.3"}]url {src:"https://github.com/mjambon/easy-format/releases/download/1.3.2/easy-format-1.3.2.tbz"checksum: ["sha256=3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926""sha512=e39377a2ff020ceb9ac29e8515a89d9bdbc91dfcfa871c4e3baafa56753fac2896768e5d9822a050dc1e2ade43c8967afb69391a386c0a8ecd4e1f774e236135"]}
opam-version: "2.0"name: "eqaf"maintainer: [ "Romain Calascibetta <romain.calascibetta@gmail.com>" ]authors: [ "Romain Calascibetta <romain.calascibetta@gmail.com>" ]homepage: "https://github.com/mirage/eqaf"bug-reports: "https://github.com/mirage/eqaf/issues"dev-repo: "git+https://github.com/mirage/eqaf.git"doc: "https://mirage.github.io/eqaf/"license: "MIT"synopsis: "Constant-time equal function on string"description: """This package provides an equal function on string in constant-time to avoid timing-attack with crypto stuff."""build: [[ "dune" "subst" ] {pinned}[ "dune" "build" "-p" name "-j" jobs ]]depends: ["ocaml" {>= "4.03.0"}"dune""base64" {with-test}"alcotest" {with-test}"crowbar" {with-test}]depopts: ["cstruct""bigarray-compat"]conflicts: ["cstruct" {< "4.0.0"}]url {src: "https://github.com/mirage/eqaf/releases/download/v0.7/eqaf-v0.7.tbz"checksum: ["sha256=10e666aea9a413e63c5e9dd1c0566aed78a2bf0f4e09caa2bb3b88a021bf09e0""sha512=38a2687bafb5cd1d1deb51ceceba94fcff9ce88515fd2c61ec1182808c50c0e3373a4d71fe51a17a23c74616c5ab350a4cf7914de656886981538abf2b57ff61"]}
opam-version: "2.0"maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]license: "BSD-3-clause"homepage: "https://github.com/inhabitedtype/faraday"bug-reports: "https://github.com/inhabitedtype/faraday/issues"dev-repo: "git+https://github.com/inhabitedtype/faraday.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name] {with-test}]depends: ["ocaml" {>= "4.02.0"}"dune" {>= "1.11"}"faraday-lwt""lwt" {>= "2.7.0"}"base-unix"]synopsis: "Lwt_unix support for Faraday"url {src: "https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz"checksum: "md5=61bb83e1a4bed100eb0bd1365878e3a1"}
opam-version: "2.0"maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]license: "BSD-3-clause"homepage: "https://github.com/inhabitedtype/faraday"bug-reports: "https://github.com/inhabitedtype/faraday/issues"dev-repo: "git+https://github.com/inhabitedtype/faraday.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name] {with-test}]depends: ["ocaml" {>= "4.02.0"}"dune" {>= "1.11"}"faraday" {>= "0.5.0"}"lwt"]synopsis: "Lwt support for Faraday"url {src: "https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz"checksum: "md5=61bb83e1a4bed100eb0bd1365878e3a1"}
opam-version: "2.0"maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]license: "BSD-3-clause"homepage: "https://github.com/inhabitedtype/faraday"bug-reports: "https://github.com/inhabitedtype/faraday/issues"dev-repo: "git+https://github.com/inhabitedtype/faraday.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name] {with-test}]depends: ["ocaml" {>= "4.02.0"}"dune" {>= "1.11"}"alcotest" {with-test & >= "0.4.1"}"bigstringaf"]synopsis: "A library for writing fast and memory-efficient serializers."description: """Faraday is a library for writing fast and memory-efficient serializers. Itscore type and related operation gives the user fine-grained control overcopying and allocation behavior while serializing user-defined types, andpresents the output in a form that makes it possible to use vectorized writeoperations, such as the writev system call, or any other platform orapplication-specific output APIs."""url {src: "https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz"checksum: "md5=61bb83e1a4bed100eb0bd1365878e3a1"}
opam-version: "2.0"maintainer: "francois.pottier@inria.fr"authors: ["François Pottier <francois.pottier@inria.fr>"]homepage: "https://gitlab.inria.fr/fpottier/fix"dev-repo: "git+https://gitlab.inria.fr/fpottier/fix.git"bug-reports: "francois.pottier@inria.fr"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" { >= "4.03" }"dune" {>= "1.3" }]synopsis: "Facilities for memoization and fixed points"url {src:"https://gitlab.inria.fr/fpottier/fix/repository/20201120/archive.tar.gz"checksum: ["md5=7eb570b759635fe66f3556d2b1cc88e3""sha512=344dcc619f9e8b8a6c998775b6d2dab2ea5253e6a67abe4797f76dc5dd30bc776568abce1e90477422e9db447821579889737e3531c42139708f813e983ea5d4"]}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: [ "The fmt programmers" ]homepage: "https://erratique.ch/software/fmt"doc: "https://erratique.ch/software/fmt"dev-repo: "git+https://erratique.ch/repos/fmt.git"bug-reports: "https://github.com/dbuenzli/fmt/issues"tags: [ "string" "format" "pretty-print" "org:erratique" ]license: "ISC"depends: ["ocaml" {>= "4.05.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build & >= "0.9.0"}# Can be removed once ocaml >= 4.07"seq""stdlib-shims"]depopts: [ "base-unix" "cmdliner" ]conflicts: [ "cmdliner" {< "0.9.8"} ]build: [["ocaml" "pkg/pkg.ml" "build""--dev-pkg" "%{pinned}%""--with-base-unix" "%{base-unix:installed}%""--with-cmdliner" "%{cmdliner:installed}%" ]]synopsis: """OCaml Format pretty-printer combinators"""description: """\Fmt exposes combinators to devise `Format` pretty-printing functions.Fmt depends only on the OCaml standard library. The optional `Fmt_tty`library that allows to setup formatters for terminal color outputdepends on the Unix library. The optional `Fmt_cli` library thatprovides command line support for Fmt depends on [`Cmdliner`][cmdliner].Fmt is distributed under the ISC license.[cmdliner]: http://erratique.ch/software/cmdliner"""url {archive: "https://erratique.ch/software/fmt/releases/fmt-0.8.9.tbz"checksum: "4001b51cde90ea4fd99a4a5033ecf411"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["The fpath programmers"]homepage: "https://erratique.ch/software/fpath"doc: "https://erratique.ch/software/fpath/doc"dev-repo: "git+https://erratique.ch/repos/fpath.git"bug-reports: "https://github.com/dbuenzli/fpath/issues"tags: [ "file" "system" "path" "org:erratique" ]license: "ISC"depends: ["ocaml" {>= "4.03.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build & >= "0.9.0"}"astring"]build: [["ocaml" "pkg/pkg.ml" "build""--dev-pkg=true" {dev} ]]synopsis: """File system paths for OCaml"""description: """\Fpath is an OCaml module for handling file system paths with POSIX orWindows conventions. Fpath processes paths without accessing the filesystem and is independent from any system library.Fpath depends on [Astring][astring] and is distributed under the ISClicense.[astring]: http://erratique.ch/software/astring"""url {archive: "https://erratique.ch/software/fpath/releases/fpath-0.7.3.tbz"checksum: "0740b530e8fed5b0adc5eee8463cfc2f"}
opam-version: "2.0"maintainer: "Antonio Monteiro <anmonteiro@gmail.com>"authors: [ "Antonio Monteiro <anmonteiro@gmail.com>" ]license: "BSD-3-clause"homepage: "https://github.com/anmonteiro/gluten"bug-reports: "https://github.com/anmonteiro/gluten/issues"dev-repo: "git+https://github.com/anmonteiro/gluten.git"doc: "https://anmonteiro.github.io/gluten/"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.03.0"}"dune" {>= "1.0"}"faraday-lwt-unix" {>= "0.5.0"}"gluten" {= version}"gluten-lwt" {= version}"lwt"]depopts: ["tls""lwt_ssl"]synopsis: "Lwt + Unix support for gluten"url {src:"https://github.com/anmonteiro/gluten/releases/download/0.2.1/gluten-0.2.1.tbz"checksum: ["sha256=86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de""sha512=dff8f9af28696d8ff9aa73b99d7ce4e82d0e34928e2688bfd4245b1c76834f6900551a5ac2fdd6cb6faf74dc5c7fc307c6279f78c00679adb2a4f764aef0612f"]}
opam-version: "2.0"maintainer: "Antonio Monteiro <anmonteiro@gmail.com>"authors: [ "Antonio Monteiro <anmonteiro@gmail.com>" ]license: "BSD-3-clause"homepage: "https://github.com/anmonteiro/gluten"bug-reports: "https://github.com/anmonteiro/gluten/issues"dev-repo: "git+https://github.com/anmonteiro/gluten.git"doc: "https://anmonteiro.github.io/gluten/"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.03.0"}"gluten" {= version}"dune" {>= "1.0"}"lwt"]synopsis: "Lwt-specific runtime for gluten"url {src:"https://github.com/anmonteiro/gluten/releases/download/0.2.1/gluten-0.2.1.tbz"checksum: ["sha256=86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de""sha512=dff8f9af28696d8ff9aa73b99d7ce4e82d0e34928e2688bfd4245b1c76834f6900551a5ac2fdd6cb6faf74dc5c7fc307c6279f78c00679adb2a4f764aef0612f"]}
opam-version: "2.0"maintainer: "Antonio Monteiro <anmonteiro@gmail.com>"authors: [ "Antonio Monteiro <anmonteiro@gmail.com>" ]license: "BSD-3-clause"homepage: "https://github.com/anmonteiro/gluten"bug-reports: "https://github.com/anmonteiro/gluten/issues"dev-repo: "git+https://github.com/anmonteiro/gluten.git"doc: "https://anmonteiro.github.io/gluten/"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.06"}"dune" {>= "1.0"}"bigstringaf" {>= "0.4.0"}"faraday"]synopsis:"A reusable runtime library for network protocols"description: """gluten implements platform specific runtime code for driving network librariesbased on state machines, such as http/af, h2 and websocketaf."""url {src:"https://github.com/anmonteiro/gluten/releases/download/0.2.1/gluten-0.2.1.tbz"checksum: ["sha256=86308b0695eb2b56ea0653cdf6cdd1a7338743e1e722b1a3aa10fd7cd9ad80de""sha512=dff8f9af28696d8ff9aa73b99d7ce4e82d0e34928e2688bfd4245b1c76834f6900551a5ac2fdd6cb6faf74dc5c7fc307c6279f78c00679adb2a4f764aef0612f"]}
opam-version: "2.0"maintainer: "Antonio Monteiro <anmonteiro@gmail.com>"authors: [ "Antonio Monteiro <anmonteiro@gmail.com>" ]license: "BSD-3-clause"homepage: "https://github.com/anmonteiro/ocaml-h2"bug-reports: "https://github.com/anmonteiro/ocaml-h2/issues"dev-repo: "git+https://github.com/anmonteiro/ocaml-h2.git"doc: "https://anmonteiro.github.io/ocaml-h2/"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.06"}"faraday-lwt-unix""h2-lwt" {>= version}"dune" {>= "1.7"}"lwt""gluten-lwt-unix" {>= "0.2.1"}]depopts: ["tls""lwt_ssl"]synopsis: "Lwt + UNIX support for h2"description: """h2 is an implementation of the HTTP/2 specification entirely in OCaml.h2-lwt-unix provides an Lwt runtime implementation for h2 that targets UNIXbinaries."""url {src:"https://github.com/anmonteiro/ocaml-h2/releases/download/0.6.1/h2-0.6.1.tbz"checksum: ["sha256=585fb8f4f1bef0a9f93dbbd24a7a9d2d048e725bab0c2fbdbef9eb301e7a677d""sha512=ee6d4f554593187b8ac21fa73c98e5be82b5a99828f4d5dfb082623a57e2eccbd0eb252a5d970481ad6892580e9fffeaa819ab729708f6dd11072165ebceca01"]}
opam-version: "2.0"maintainer: "Antonio Monteiro <anmonteiro@gmail.com>"authors: [ "Antonio Monteiro <anmonteiro@gmail.com>" ]license: "BSD-3-clause"homepage: "https://github.com/anmonteiro/ocaml-h2"bug-reports: "https://github.com/anmonteiro/ocaml-h2/issues"dev-repo: "git+https://github.com/anmonteiro/ocaml-h2.git"doc: "https://anmonteiro.github.io/ocaml-h2/"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.06"}"h2" {>= version}"dune" {>= "1.7"}"lwt""gluten-lwt" {>= "0.2.1"}]synopsis: "Lwt support for h2"description: """h2 is an implementation of the HTTP/2 specification entirely in OCaml. h2-lwtprovides an Lwt runtime implementation for h2."""url {src:"https://github.com/anmonteiro/ocaml-h2/releases/download/0.6.1/h2-0.6.1.tbz"checksum: ["sha256=585fb8f4f1bef0a9f93dbbd24a7a9d2d048e725bab0c2fbdbef9eb301e7a677d""sha512=ee6d4f554593187b8ac21fa73c98e5be82b5a99828f4d5dfb082623a57e2eccbd0eb252a5d970481ad6892580e9fffeaa819ab729708f6dd11072165ebceca01"]}
opam-version: "2.0"maintainer: "Antonio Monteiro <anmonteiro@gmail.com>"authors: [ "Antonio Monteiro <anmonteiro@gmail.com>" ]license: "BSD-3-clause"homepage: "https://github.com/anmonteiro/ocaml-h2"bug-reports: "https://github.com/anmonteiro/ocaml-h2/issues"dev-repo: "git+https://github.com/anmonteiro/ocaml-h2.git"doc: "https://anmonteiro.github.io/ocaml-h2/"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.06"}"dune" {>= "1.7"}"alcotest" {with-test}"yojson" {with-test}"hex" {with-test}"base64""bigstringaf" {>= "0.5.0"}"angstrom" {>= "0.14.0"}"faraday" {>= "0.5.0"}"psq""hpack""httpaf"]synopsis:"A high-performance, memory-efficient, and scalable HTTP/2 library for OCaml"description: """h2 is an implementation of the HTTP/2 specification entirely in OCaml. Itis based on the concepts in http/af, and therefore uses the Angstrom andFaraday libraries to implement the parsing and serialization layers of theHTTP/2 standard as a state machine that is agnostic to the underlying I/Ospecifics. It also preserves the same API as http/af wherever possible."""x-commit-hash: "72c4a317f43269d8196ba4cabc070203b561ad38"url {src:"https://github.com/anmonteiro/ocaml-h2/releases/download/0.7.0/h2-0.7.0.tbz"checksum: ["sha256=63a233a075247d23dfc45adf8435621480d41ef2a597cf807f072bb786405ebc""sha512=0e0aef2ab42c660f0f50391d9555ac21010481d3b496ebaa0d9b5eb7a5e94c148e8212ecb6e64abd15b865d5f0db2f9a1bd314263079d033a62075212435b72c"]}
opam-version: "2.0"maintainer: "Antonio Nuno Monteiro <anmonteiro@gmail.com>"authors: [ "Pieter Goetschalckx <3.14.e.ter@gmail.com>""Antonio Nuno Monteiro <anmonteiro@gmail.com>" ]license: "BSD-3-Clause"homepage: "https://github.com/anmonteiro/ocaml-h2"bug-reports: "https://github.com/anmonteiro/ocaml-h2/issues"dev-repo: "git+https://github.com/anmonteiro/ocaml-h2.git"doc: "https://anmonteiro.github.io/ocaml-h2/"depends: ["ocaml" {>= "4.04"}"dune""yojson" {with-test}"hex" {with-test}"angstrom""faraday"]build: [["dune" "build" "-p" name "-j" jobs]]synopsis:"An HPACK (Header Compression for HTTP/2) implementation in OCaml"description: """hpack is an implementation of the HPACK: Header Compression for HTTP/2specification (RFC7541) written in OCaml. It uses Angstrom and Faraday forparsing and serialization, respectively."""url {src:"https://github.com/anmonteiro/ocaml-h2/releases/download/0.2.0/h2-0.2.0.tbz"checksum: "md5=c883927ce8a9f3f7159ef7b20988f051"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["The logs programmers"]homepage: "https://erratique.ch/software/logs"doc: "https://erratique.ch/software/logs/doc"dev-repo: "git+https://erratique.ch/repos/logs.git"bug-reports: "https://github.com/dbuenzli/logs/issues"tags: [ "log" "system" "org:erratique" ]license: "ISC"depends: ["ocaml" {>= "4.03.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build}"mtime" {with-test} ]depopts: ["js_of_ocaml""fmt""cmdliner""lwt""base-threads"]conflicts: ["js_of_ocaml" { < "3.3.0" } ]build: [["ocaml" "pkg/pkg.ml" "build""--pinned" "%{pinned}%""--with-js_of_ocaml" "%{js_of_ocaml:installed}%""--with-fmt" "%{fmt:installed}%""--with-cmdliner" "%{cmdliner:installed}%""--with-lwt" "%{lwt:installed}%""--with-base-threads" "%{base-threads:installed}%"]]synopsis: """Logging infrastructure for OCaml"""description: """\Logs provides a logging infrastructure for OCaml. Logging is performedon sources whose reporting level can be set independently. Log messagereport is decoupled from logging and is handled by a reporter.A few optional log reporters are distributed with the base library andthe API easily allows to implement your own.`Logs` has no dependencies. The optional `Logs_fmt` reporter on OCamlformatters depends on [Fmt][fmt]. The optional `Logs_browser`reporter that reports to the web browser console depends on[js_of_ocaml][jsoo]. The optional `Logs_cli` library that providescommand line support for controlling Logs depends on[`Cmdliner`][cmdliner]. The optional `Logs_lwt` library that providesLwt logging functions depends on [`Lwt`][lwt]Logs and its reporters are distributed under the ISC license.[fmt]: http://erratique.ch/software/fmt[jsoo]: http://ocsigen.org/js_of_ocaml/[cmdliner]: http://erratique.ch/software/cmdliner[lwt]: http://ocsigen.org/lwt/"""url {archive: "https://erratique.ch/software/logs/releases/logs-0.7.0.tbz"checksum: "2bf021ca13331775e33cf34ab60246f7"}
opam-version: "2.0"maintainer: "simon.cruanes.2007@m4x.org"synopsis: "An alternative to `Lwt_stream` with interfaces for producers and consumers and a bounded internal buffer"build: [["dune" "build" "@install" "-p" name "-j" jobs]["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc}["dune" "runtest" "-p" name "-j" jobs] {with-test}]depends: ["dune" {>= "1.1"}"lwt""ocaml" { >= "4.03.0" }"mdx" {with-test}"qcheck" {with-test & < "0.14"}"qtest" {with-test}"odoc" {with-doc}]tags: [ "lwt" "pipe" "stream" "blocking" ]homepage: "https://github.com/c-cube/lwt-pipe/"dev-repo: "git+https://github.com/c-cube/lwt-pipe.git"bug-reports: "https://github.com/c-cube/lwt-pipe/issues/"authors: "Simon Cruanes"url {src: "https://github.com/c-cube/lwt-pipe/archive/v0.1.tar.gz"checksum: ["md5=46cfc88c4220d40356f6bea7c535be6e""sha512=ebc04adf58d913aac8caf43d76b2191fa76101c60a48f6c992a396e5bc8b0756d1c6ca0f9038141b77a40185c8cdb03a9de62252b1d23b06e12f201a9dff914b"]}
opam-version: "2.0"synopsis: "Promises and event-driven I/O"description: """\A promise is a value that may become determined in the future.Lwt provides typed, composable promises. Promises that are resolved by I/O areresolved by Lwt in parallel.Meanwhile, OCaml code, including code creating and waiting on promises, runs ina single thread by default. This reduces the need for locks or othersynchronization primitives. Code can be run in parallel on an opt-in basis."""maintainer: ["Raphaël Proust <code@bnwr.net>" "Anton Bachin <antonbachin@yahoo.com>"]authors: ["Jérôme Vouillon" "Jérémie Dimino"]license: "MIT"homepage: "https://github.com/ocsigen/lwt"doc: "https://ocsigen.org/lwt"bug-reports: "https://github.com/ocsigen/lwt/issues"depends: ["cppo" {build & >= "1.1.0"}"dune" {>= "1.8.0"}"dune-configurator""mmap" {>= "1.1.0"}"ocaml" {>= "4.02.0"}("ocaml" {>= "4.08.0"} | "ocaml-syntax-shims")"ocplib-endian""result""seq""ocamlfind" {dev & >= "1.7.3-1"}]depopts: ["base-threads" "base-unix" "conf-libev"]conflicts: ["ocaml-variants" {= "4.02.1+BER"}]build: [["dune""exec""-p"name"src/unix/config/discover.exe""--""--save""--use-libev""%{conf-libev:installed}%"]["dune" "build" "-p" name "-j" jobs]]dev-repo: "git+https://github.com/ocsigen/lwt.git"url {src: "https://github.com/ocsigen/lwt/archive/5.4.0.zip"checksum: ["md5=fc4721bdb1a01225b96e3a2debde95fa""sha512=e427f08223b77f9af696c9e6f90ff68e27e02e446910ef90d3da542e7b00bf23dd191ac77c1871288faa2289f8d28fc2f44efc3d3fe9165fe1c7a6be88ee49ff"]}
opam-version: "2.0"synopsis: "OpenSSL binding with concurrent I/O"version: "1.1.3"license: "LGPL with OpenSSL linking exception"homepage: "https://github.com/ocsigen/lwt_ssl"doc: "https://github.com/ocsigen/lwt_ssl/blob/master/src/lwt_ssl.mli"bug-reports: "https://github.com/ocsigen/lwt_ssl/issues"authors: ["Jérôme Vouillon""Jérémie Dimino"]maintainer: "Anton Bachin <antonbachin@yahoo.com>"dev-repo: "git+https://github.com/ocsigen/lwt_ssl.git"depends: ["base-unix""dune""lwt" {>= "3.0.0"}"ocaml""ssl" {>= "0.5.0"}]build: [["dune" "build" "-p" name "-j" jobs]]url {src: "https://github.com/ocsigen/lwt_ssl/archive/1.1.3.tar.gz"checksum: "md5=b18414b2ef71ededa07666dfc467f10a"}
opam-version: "2.0"synopsis: "Map filenames to common MIME types"description: """This library contains a database of MIME types that maps filename extensionsinto MIME types suitable for use in many Internet protocols such as HTTP ore-mail. It is generated from the `mime.types` file found in Unix systems, buthas no dependency on a filesystem since it includes the contents of thedatabase as an ML datastructure.For example, here's how to lookup MIME types in the [utop] REPL:#require "magic-mime";;Magic_mime.lookup "/foo/bar.txt";;- : bytes = "text/plain"Magic_mime.lookup "bar.css";;- : bytes = "text/css""""maintainer: "Anil Madhavapeddy <anil@recoil.org>"authors: ["Anil Madhavapeddy" "Maxence Guesdon"]license: "ISC"homepage: "https://github.com/mirage/ocaml-magic-mime"doc: "https://mirage.github.io/ocaml-magic-mime/"bug-reports: "https://github.com/mirage/ocaml-magic-mime/issues"dev-repo: "git+https://github.com/mirage/ocaml-magic-mime.git"depends: ["ocaml" {>= "4.03.0"}"dune"]build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]]x-commit-hash: "ef9dbc7fbfa2613248bc17070ff4f06f61aa8b62"url {src:"https://github.com/mirage/ocaml-magic-mime/releases/download/v1.1.3/magic-mime-v1.1.3.tbz"checksum: ["sha256=7fb36ce619ca479ac44ef923c3bf19eda4c98a4428dbf7f3f7c714b516d212f7""sha512=25445290f4d73d7cd09a5ef2a1cc6ac538e03a90b09d8f1703b6e1ed3bd499733dc6f7d8932a20ceda646304471cea1099054c3218e7736aab7bf76bfd7e0993"]}
opam-version: "2.0"maintainer: "francois.pottier@inria.fr"authors: ["François Pottier <francois.pottier@inria.fr>""Yann Régis-Gianas <yrg@pps.univ-paris-diderot.fr>"]homepage: "http://gitlab.inria.fr/fpottier/menhir"dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git"bug-reports: "menhir@inria.fr"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.02.3"}"dune" { >= "2.2.0"}"menhirLib" {= version}"menhirSdk" {= version}]synopsis: "An LR(1) parser generator"url {src:"https://gitlab.inria.fr/fpottier/menhir/repository/20201216/archive.tar.gz"checksum: ["md5=f27f8f5dedd316eff4c02d9130fced49""sha512=50f86fb2f55184f43c4be9c572ada4feb2208eb350ef64b2651351934a1b48a0b7e98c8c752c3c22e95676c5a0f38b0e638b3f845e53ecff1740dad95b50918c"]}
opam-version: "2.0"maintainer: "francois.pottier@inria.fr"authors: ["François Pottier <francois.pottier@inria.fr>""Yann Régis-Gianas <yrg@pps.univ-paris-diderot.fr>"]homepage: "http://gitlab.inria.fr/fpottier/menhir"dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git"bug-reports: "menhir@inria.fr"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" { >= "4.02.3" }"dune" { >= "2.0.0" }]conflicts: ["menhir" { != version }]synopsis: "Runtime support library for parsers generated by Menhir"url {src:"https://gitlab.inria.fr/fpottier/menhir/repository/20201216/archive.tar.gz"checksum: ["md5=f27f8f5dedd316eff4c02d9130fced49""sha512=50f86fb2f55184f43c4be9c572ada4feb2208eb350ef64b2651351934a1b48a0b7e98c8c752c3c22e95676c5a0f38b0e638b3f845e53ecff1740dad95b50918c"]}
opam-version: "2.0"maintainer: "francois.pottier@inria.fr"authors: ["François Pottier <francois.pottier@inria.fr>""Yann Régis-Gianas <yrg@pps.univ-paris-diderot.fr>"]homepage: "http://gitlab.inria.fr/fpottier/menhir"dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git"bug-reports: "menhir@inria.fr"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" { >= "4.02.3" }"dune" { >= "2.0.0" }]conflicts: ["menhir" { != version }]synopsis: "Compile-time library for auxiliary tools related to Menhir"url {src:"https://gitlab.inria.fr/fpottier/menhir/repository/20201216/archive.tar.gz"checksum: ["md5=f27f8f5dedd316eff4c02d9130fced49""sha512=50f86fb2f55184f43c4be9c572ada4feb2208eb350ef64b2651351934a1b48a0b7e98c8c752c3c22e95676c5a0f38b0e638b3f845e53ecff1740dad95b50918c"]}
opam-version: "2.0"maintainer: "Frederic Bour <frederic.bour@lakaban.net>"authors: "Frederic Bour <frederic.bour@lakaban.net>"homepage: "https://github.com/let-def/merlin-extend"bug-reports: "https://github.com/let-def/merlin-extend"license: "MIT"dev-repo: "git+https://github.com/let-def/merlin-extend.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]]depends: ["dune" {>= "1.0"}"cppo" {build}"ocaml" {>= "4.02.3"}]synopsis: "A protocol to provide custom frontend to Merlin"description: """This protocol allows to replace the OCaml frontend of Merlin.It extends what used to be done with the `-pp' flag to handle a few more cases."""doc: "https://let-def.github.io/merlin-extend"x-commit-hash: "640620568a5f5c7798239ecf7c707c813e3df3cf"url {src:"https://github.com/let-def/merlin-extend/releases/download/v0.6/merlin-extend-v0.6.tbz"checksum: ["sha256=c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43""sha512=4c64a490e2ece04fc89aef679c1d9202175df4fe045b5fdc7a37cd7cebe861226fddd9648c1bf4f06175ecfcd2ed7686c96bd6a8cae003a5096f6134c240f857"]}
opam-version: "2.0"maintainer: "defree@gmail.com"authors: "The Merlin team"homepage: "https://github.com/ocaml/merlin"bug-reports: "https://github.com/ocaml/merlin/issues"dev-repo: "git+https://github.com/ocaml/merlin.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" "merlin,dot-merlin-reader" "-j" "1"] {with-test}]depends: ["ocaml" {>= "4.11" & < "4.12"}"dune" {>= "2.7.0"}"dot-merlin-reader" {>= "4.0"}"yojson" {>= "1.6.0"}"conf-jq" {with-test}"csexp" {>= "1.2.3"}"result" {>= "1.5"}"menhir" {dev}"menhirLib" {dev}"menhirSdk" {dev}]synopsis:"Editor helper, provides completion, typing and source browsing in Vim and Emacs"description:"Merlin is an assistant for editing OCaml code. It aims to provide the features available in modern IDEs: error reporting, auto completion, source browsing and much more."post-messages: ["merlin installed.Quick setup for VIM-------------------Append this to your .vimrc to add merlin to vim's runtime-path:let g:opamshare = substitute(system('opam var share'),'\\n$','','''')execute \"set rtp+=\" . g:opamshare . \"/merlin/vim\"Also run the following line in vim to index the documentation::execute \"helptags \" . g:opamshare . \"/merlin/vim/doc\"Quick setup for EMACS-------------------Add opam emacs directory to your load-path by appending this to your .emacs:(let ((opam-share (ignore-errors (car (process-lines \"opam\" \"config\" \"var\" \"share\")))))(when (and opam-share (file-directory-p opam-share));; Register Merlin(add-to-list 'load-path (expand-file-name \"emacs/site-lisp\" opam-share))(autoload 'merlin-mode \"merlin\" nil t nil);; Automatically start it in OCaml buffers(add-hook 'tuareg-mode-hook 'merlin-mode t)(add-hook 'caml-mode-hook 'merlin-mode t);; Use opam switch to lookup ocamlmerlin binary(setq merlin-command 'opam)))Take a look at https://github.com/ocaml/merlin for more informationQuick setup with opam-user-setup--------------------------------Opam-user-setup support Merlin.$ opam user-setup installshould take care of basic setup.See https://github.com/OCamlPro/opam-user-setup"{success & !user-setup:installed}]x-commit-hash: "0916b10c76025f7cb0855c67324f72e344046d77"url {src:"https://github.com/ocaml/merlin/releases/download/v4.1-411/merlin-v4.1-411.tbz"checksum: ["sha256=9e2e6fc799c93ce1f2c7181645eafa37f64e43ace062b69218e1c29ac459937d""sha512=6a2e2503d81b22b0cc292ca6853231e59c42a216acec0cb540d03791d201fe83641a3502e62660668ad5d30405698e2429efe072cfd38dc30229024267f7c0b8"]}
opam-version: "2.0"maintainer: "jeremie@dimino.org"authors: ["Jérémie Dimino <jeremie@dimino.org>" "Anton Bachin" ]homepage: "https://github.com/mirage/mmap"bug-reports: "https://github.com/mirage/mmap/issues"doc: "https://mirage.github.io/mmap/"dev-repo: "git+https://github.com/mirage/mmap.git"license: "LGPL-2.1-only with OCaml-LGPL-linking-exception"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml""dune" {>= "1.6"}]synopsis: "File mapping functionality"description: """This project provides a Mmap.map_file functions for mapping files in memory."""url {src:"https://github.com/mirage/mmap/releases/download/v1.1.0/mmap-v1.1.0.tbz"checksum: "md5=8c5d5fbc537296dc525867535fb878ba"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: [ "The mtime programmers" ]homepage: "https://erratique.ch/software/mtime"doc: "https://erratique.ch/software/mtime"dev-repo: "git+https://erratique.ch/repos/mtime.git"bug-reports: "https://github.com/dbuenzli/mtime/issues"tags: [ "time" "monotonic" "system" "org:erratique" ]license: "ISC"depends:["ocaml" {>= "4.03.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build}]depopts: [ "js_of_ocaml" ]conflicts: ["js_of_ocaml" {<= "3.3.0"} ]build: [["ocaml" "pkg/pkg.ml" "build""--pinned" "%{pinned}%""--with-js_of_ocaml" "%{js_of_ocaml:installed}%" ]]synopsis: """Monotonic wall-clock time for OCaml"""description: """\Mtime has platform independent support for monotonic wall-clock timein pure OCaml. This time increases monotonically and is not subject tooperating system calendar time adjustments. The library has types torepresent nanosecond precision timestamps and time spans.The additional Mtime_clock library provide access to a systemmonotonic clock.Mtime has a no dependency. Mtime_clock depends on your system library.The optional JavaScript support depends on [js_of_ocaml][jsoo]. Mtimeand its libraries are distributed under the ISC license.[jsoo]: http://ocsigen.org/js_of_ocaml/"""url {archive: "https://erratique.ch/software/mtime/releases/mtime-1.2.0.tbz"checksum: "f3f4c1333c0f74fc27b05c35b9c0dab9"}
opam-version: "2.0"maintainer: "opensource@janestreet.com"authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]homepage: "https://github.com/janestreet/ocaml-compiler-libs"bug-reports: "https://github.com/janestreet/ocaml-compiler-libs/issues"dev-repo: "git+https://github.com/janestreet/ocaml-compiler-libs.git"license: "MIT"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.04.1"}"dune" {>= "1.5.1"}]synopsis: """OCaml compiler libraries repackaged"""description: """This packages exposes the OCaml compiler libraries repackages underthe toplevel names Ocaml_common, Ocaml_bytecomp, Ocaml_optcomp, ..."""x-commit-hash: "7f5d1d2931b96fb3ee6dd569a469b51f621a6dd4"url {src:"https://github.com/janestreet/ocaml-compiler-libs/releases/download/v0.12.3/ocaml-compiler-libs-v0.12.3.tbz"checksum: ["sha256=a8403531439c14bbda2d504ef93610fd29a8e9520fc700f21889d893a513e3c9""sha512=0bb03b38e93bab3274a8ade38d017808110bc02f2181a594d8775c68fdd465733393f0451dbbf8860e6b50b56c45671d2182637c0840d1d6574803ec18673972"]}
opam-version: "2.0"synopsis: "LSP Server for OCaml"description: "An LSP server for OCaml."maintainer: ["Rudi Grinberg <me@rgrinerg.com>"]authors: ["Andrey Popp <8mayday@gmail.com>""Rusty Key <iam@stfoo.ru>""Louis Roché <louis@louisroche.net>""Oleksiy Golovko <alexei.golovko@gmail.com>""Rudi Grinberg <me@rgrinberg.com>""Sacha Ayoun <sachaayoun@gmail.com>""cannorin <cannorin@gmail.com>"]license: "ISC"homepage: "https://github.com/ocaml/ocaml-lsp"bug-reports: "https://github.com/ocaml/ocaml-lsp/issues"depends: ["dune" {>= "2.5"}"yojson""stdlib-shims""ppx_yojson_conv_lib""dune-build-info""dot-merlin-reader""csexp" {>= "1.2.3"}"result" {>= "1.5"}"ocamlformat" {with-test}"ocamlfind" {>= "1.5.2"}"odoc" {with-doc}"ocaml" {>= "4.06" & < "4.12"}]dev-repo: "git+https://github.com/ocaml/ocaml-lsp.git"build: [["dune" "subst"] {dev}["dune""build""-j"jobs"ocaml-lsp-server.install""--release"]]x-commit-hash: "92924b6e36a91ce323b7f8eddfe20def4173e6e5"url {src:"https://github.com/ocaml/ocaml-lsp/releases/download/1.4.0/jsonrpc-1.4.0.tbz"checksum: ["sha256=fd138e6c4fcff32c6d15eb66cc9391b7e1183717a6d1a47c688c7f6d320a159f""sha512=567a73b3c10bb59c5a4d4e8291d1aeefdfd34438a95313fba8a485638294ca5fb8034334719631243c304d3328c27afa90dfd564fdb1e7390507a06db3a4ad03"]}
opam-version: "2.0"maintainer: "frederic.bour@lakaban.net"authors: ["Frédéric Bour <frederic.bour@lakaban.net>""Jérémie Dimino <jeremie@dimino.org>"]license: "LGPL-2.1 with OCaml linking exception"homepage: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree"bug-reports: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/issues"dev-repo: "git+https://github.com/ocaml-ppx/ocaml-migrate-parsetree.git"doc: "https://ocaml-ppx.github.io/ocaml-migrate-parsetree/"tags: [ "syntax" "org:ocamllabs" ]build: [["dune" "build" "-p" name "-j" jobs]]depends: ["dune" {>= "1.11"}"ocaml" {>= "4.02.3" & < "4.13"}]synopsis: "Convert OCaml parsetrees between different versions"description: """Convert OCaml parsetrees between different versionsThis library converts parsetrees, outcometree and ast mappers betweendifferent OCaml versions. High-level functions help making PPXrewriters independent of a compiler version."""x-commit-hash: "4a05cf7a00d84e5f827cc9ae9c75e5dc85126085"url {src:"https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v2.1.0/ocaml-migrate-parsetree-v2.1.0.tbz"checksum: ["sha256=387b788ee4c0537f1fe02c25e05f0335af424828fc6fe940acc0db5948a5a71f""sha512=6ac80face6b77531c8d89a77d7a246bd5d43da435c355f62c03c8b8e360e1d7e339c904709fd3dbc9aa340c86ada9a69d5ebcf97cbdb7bd51bec97f831741b99"]}
opam-version: "2.0"synopsis: "Backport new syntax to older OCaml versions"description: """This packages backports new features of the language to oldercompilers, such as let+."""maintainer: ["jeremie@dimino.org"]authors: ["Jérémie Dimino <jeremie@dimino.org>"]license: "MIT"homepage: "https://github.com/ocaml-ppx/ocaml-syntax-shims"doc: "https://ocaml-ppx.github.io/ocaml-syntax-shims/"bug-reports: "https://github.com/ocaml-ppx/ocaml-syntax-shims/issues"depends: ["dune" {>= "2.0"}"ocaml" {>= "4.02.3"}]build: [["dune" "subst"] {pinned}["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]]dev-repo: "git+https://github.com/ocaml-ppx/ocaml-syntax-shims.git"url {src:"https://github.com/ocaml-ppx/ocaml-syntax-shims/releases/download/1.0.0/ocaml-syntax-shims-1.0.0.tbz"checksum: ["sha256=89b2e193e90a0c168b6ec5ddf6fef09033681bdcb64e11913c97440a2722e8c8""sha512=75c4c6b0bfa1267a8a49a82ba494d08cf0823fc8350863d6d3d4971528cb09e5a2a29e2981d04c75e76ad0f49360b05a432c9efeff9a4fbc1ec6b28960399852"]}
opam-version: "2.0"maintainer: "Anil Madhavapeddy <anil@recoil.org>"authors: "Anil Madhavapeddy <anil@recoil.org>"license: "ISC"tags: "org:ocamllabs"homepage: "https://github.com/ocurrent/ocaml-version"doc: "https://ocurrent.github.io/ocaml-version/doc"bug-reports: "https://github.com/ocurrent/ocaml-version/issues"depends: ["ocaml" {>= "4.07.0"}"dune"]build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]]dev-repo: "git+https://github.com/ocurrent/ocaml-version.git"synopsis: "Manipulate, parse and generate OCaml compiler version strings"description: """This library provides facilities to parse version numbers of the OCamlcompiler, and enumerates the various official OCaml releases and configurationvariants.OCaml version numbers are of the form `major.minor.patch+extra`, where the`patch` and `extra` fields are optional. This library offers the followingfunctionality:- Functions to parse and serialise OCaml compiler version numbers.- Enumeration of official OCaml compiler version releases.- Test compiler versions for a particular feature (e.g. the `bytes` type)- [opam](https://opam.ocaml.org) compiler switch enumeration.### Further information- **Discussion:** Post on <https://discuss.ocaml.org/> with the `ocaml` tag underthe Ecosystem category.- **Bugs:** <https://github.com/ocurrent/ocaml-version/issues>- **Docs:** <http://docs.mirage.io/ocaml-version>"""x-commit-hash: "35c6f2d3793a6c050833e86fbfb12e13b14709ac"url {src:"https://github.com/ocurrent/ocaml-version/releases/download/v3.0.0/ocaml-version-v3.0.0.tbz"checksum: ["sha256=24b2f324ea91cff98bb8790a6746ccce3173bac5f57cb457156e5c50a0467397""sha512=a1936198e6e563ed703c8cd9d481394660fb25e9e700ea481e5326536c2734d9356c99750ae3ef8a55614776cc040c05cbcf2e03f609ab1f78c34aab0c5de830"]}
opam-version: "2.0"maintainer: "Gabriel Scherer <gabriel.scherer@gmail.com>"authors: ["Nicolas Pouillard" "Berke Durak"]homepage: "https://github.com/ocaml/ocamlbuild/"bug-reports: "https://github.com/ocaml/ocamlbuild/issues"license: "LGPL-2.1-only with OCaml-LGPL-linking-exception"doc: "https://github.com/ocaml/ocamlbuild/blob/master/manual/manual.adoc"dev-repo: "git+https://github.com/ocaml/ocamlbuild.git"build: [[make"-f""configure.make""all""OCAMLBUILD_PREFIX=%{prefix}%""OCAMLBUILD_BINDIR=%{bin}%""OCAMLBUILD_LIBDIR=%{lib}%""OCAMLBUILD_MANDIR=%{man}%""OCAML_NATIVE=%{ocaml:native}%""OCAML_NATIVE_TOOLS=%{ocaml:native}%"][make "check-if-preinstalled" "all" "opam-install"]]conflicts: ["base-ocamlbuild""ocamlfind" {< "1.6.2"}]synopsis:"OCamlbuild is a build system with builtin rules to easily build most OCaml projects."depends: ["ocaml" {>= "4.03"}]url {src: "https://github.com/ocaml/ocamlbuild/archive/0.14.0.tar.gz"checksum: "sha256=87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78"}
#!/bin/shBINDIR=$(dirname "$(command -v ocamlc)")"$BINDIR/ocaml" -I "$OCAML_TOPLEVEL_PATH" "$@"
bin: ["src/findlib/ocamlfind" {"ocamlfind"}"?src/findlib/ocamlfind_opt" {"ocamlfind"}"?tools/safe_camlp4"]toplevel: ["src/findlib/topfind"]
opam-version: "2.0"synopsis: "A library manager for OCaml"maintainer: "Thomas Gazagnaire <thomas@gazagnaire.org>"authors: "Gerd Stolpmann <gerd@gerd-stolpmann.de>"homepage: "http://projects.camlcity.org/projects/findlib.html"bug-reports: "https://gitlab.camlcity.org/gerd/lib-findlib/issues"dev-repo: "git+https://gitlab.camlcity.org/gerd/lib-findlib.git"description: """Findlib is a library manager for OCaml. It provides a convention howto store libraries, and a file format ("META") to describe theproperties of libraries. There is also a tool (ocamlfind) forinterpreting the META files, so that it is very easy to use librariesin programs and scripts."""build: [["./configure""-bindir"bin"-sitelib"lib"-mandir"man"-config""%{lib}%/findlib.conf""-no-custom""-no-camlp4" {!ocaml:preinstalled & ocaml:version >= "4.02.0"}"-no-topfind" {ocaml:preinstalled}][make "all"][make "opt"] {ocaml:native}]install: [["./configure""-bindir"bin"-sitelib"lib"-mandir"man"-config""%{lib}%/findlib.conf""-no-custom""-no-camlp4" {!ocaml:preinstalled & ocaml:version >= "4.02.0"}"-no-topfind" {ocaml:preinstalled}][make "install"]["install" "-m" "0755" "ocaml-stub" "%{bin}%/ocaml"] {ocaml:preinstalled}]depends: ["ocaml" {>= "4.00.0" & < "4.13"}"conf-m4" {build}]extra-files: [["ocamlfind.install" "md5=06f2c282ab52d93aa6adeeadd82a2543"]["ocaml-stub" "md5=181f259c9e0bad9ef523e7d4abfdf87a"]]url {src: "http://download.camlcity.org/download/findlib-1.8.1.tar.gz"checksum: "md5=18ca650982c15536616dea0e422cbd8c"mirrors: "http://download2.camlcity.org/download/findlib-1.8.1.tar.gz"}depopts: ["graphics"]
opam-version: "2.0"synopsis: "Auto-formatter for OCaml code"description:"OCamlFormat is a tool to automatically format OCaml code in a uniform style."maintainer: ["OCamlFormat Team <ocamlformat-team@fb.com>"]authors: ["Josh Berdine <jjb@fb.com>"]license: "MIT"homepage: "https://github.com/ocaml-ppx/ocamlformat"bug-reports: "https://github.com/ocaml-ppx/ocamlformat/issues"depends: ["dune" {>= "2.7"}"ocaml" {>= "4.08" & < "4.13"}"ocaml-version""alcotest" {with-test}"base" {>= "v0.12.0" & < "v0.15"}"base-unix""cmdliner""dune-build-info""fix""fpath""menhir" {>= "20180528"}"menhirLib" {>= "20200624"}"menhirSdk" {>= "20200624"}"ocaml-migrate-parsetree" {>= "2.1.0"}"ocp-indent" {with-test}"odoc" {>= "1.4.2"}"ppxlib" {>= "0.22.0"}"re""stdio" {< "v0.15"}"uuseg" {>= "10.0.0"}"uutf" {>= "1.0.1"}]build: [["dune" "subst"] {dev}["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]]dev-repo: "git+https://github.com/ocaml-ppx/ocamlformat.git"x-commit-hash: "bfd6bbe95c614d1d982244c4fd0ba494275d2245"url {src:"https://github.com/ocaml-ppx/ocamlformat/releases/download/0.17.0/ocamlformat-0.17.0.tbz"checksum: ["sha256=68848b12e82dc1077a29f63d2777680e692b1a565276fcd00f06fb93cced3438""sha512=168ac7dee5a78954b273972b099681a4f2a6864b81c1dfe5ee5ff2f0ba79f150aeca8128b95dce4fd30d4d830906f02975d56b804dbb513fe0bb63c95d61030b"]}
opam-version: "2.0"synopsis:"Optimised functions to read and write int16/32/64 from strings and bigarrays"description: """The library implements three modules:* [EndianString](https://github.com/OCamlPro/ocplib-endian/blob/master/src/endianString.mli) works directly on strings, and provides submodules BigEndian and LittleEndian, with their unsafe counter-parts;* [EndianBytes](https://github.com/OCamlPro/ocplib-endian/blob/master/src/endianBytes.mli) works directly on bytes, and provides submodules BigEndian and LittleEndian, with their unsafe counter-parts;* [EndianBigstring](https://github.com/OCamlPro/ocplib-endian/blob/master/src/endianBigstring.mli) works on bigstrings (Bigarrays of chars), and provides submodules BigEndian and LittleEndian, with their unsafe counter-parts."""maintainer: "pierre.chambart@ocamlpro.com"authors: "Pierre Chambart"homepage: "https://github.com/OCamlPro/ocplib-endian"doc: "https://ocamlpro.github.io/ocplib-endian/ocplib-endian/"bug-reports: "https://github.com/OCamlPro/ocplib-endian/issues"depends: ["base-bytes""ocaml" {>= "4.02.3"}"cppo" {>= "1.1.0" & build}"dune" {>= "1.0"}]build: ["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]dev-repo: "git+https://github.com/OCamlPro/ocplib-endian.git"url {src: "https://github.com/OCamlPro/ocplib-endian/archive/1.1.tar.gz"checksum: ["md5=dedf4d69c1b87b3c6c7234f632399285""sha512=39351c666d1394770696fa89ac62f7c137ad1697d99888bfba2cc8de2c61df05dd8b3aa327c117bf38f3e29e081026d2c575c5ad0022bde92b3d43aba577d3f9"]}
version: "1.2.2"opam-version: "2.0"maintainer: ["leo@lpw25.net"]authors: ["Leo White <leo@lpw25.net>"]license: "ISC"homepage: "https://github.com/ocaml-doc/octavius"doc: "http://ocaml-doc.github.io/octavius/"bug-reports: "https://github.com/ocaml-doc/octavius/issues"depends: ["dune" {>= "1.11"}"ocaml" {>= "4.03.0"}]build: [["dune" "subst"] {pinned}["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]]dev-repo: "git+https://github.com/ocaml-doc/octavius.git"synopsis: "Ocamldoc comment syntax parser"description: "Octavius is a library to parse the `ocamldoc` comment syntax."url {src: "https://github.com/ocaml-doc/octavius/archive/v1.2.2.tar.gz"checksum: "md5=72f9e1d996e6c5089fc513cc9218607b"}
opam-version: "2.0"homepage: "http://github.com/ocaml/odoc"doc: "https://ocaml.github.io/odoc/"bug-reports: "https://github.com/ocaml/odoc/issues"license: "ISC"authors: ["Thomas Refis <trefis@janestreet.com>""David Sheets <sheets@alum.mit.edu>""Leo White <leo@lpw25.net>""Anton Bachin <antonbachin@yahoo.com>""Jon Ludlam <jon@recoil.org>"]maintainer: "Anton Bachin <antonbachin@yahoo.com>"dev-repo: "git+https://github.com/ocaml/odoc.git"synopsis: "OCaml documentation generator"description: """Odoc is a documentation generator for OCaml. It reads doc comments,delimited with `(** ... *)`, and outputs HTML."""depends: ["astring""cmdliner""cppo" {build}"dune""fpath""ocaml" {>= "4.02.0"}"result""tyxml" {>= "4.3.0"}"alcotest" {dev & >= "0.8.3"}"markup" {dev & >= "1.0.0"}"ocamlfind" {dev}"sexplib" {dev & >= "113.33.00"}"bisect_ppx" {dev & >= "1.3.0"}]build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]]x-commit-hash: "c0df8ce2171fa9645a41f371429aa3ddc16de5c1"url {src: "https://github.com/ocaml/odoc/releases/download/1.5.2/odoc-1.5.2.tbz"checksum: ["sha256=d24463f2660bc28c72cda001478360158e953721c9e23fb361ec4783113c4871""sha512=e6c83630325de422f31cda8f88c038d213969f8b98e989593c057658f3956c0855860c9bc38f61b6479929516ca95aee689ddfba3ad8c47d821c4fdf54524cf9"]}
opam-version: "2.0"version: "4.1.0"synopsis: "Bitstrings and bitstring matching for OCaml - PPX extension"description: """The ocaml-bitstring project adds Erlang-style bitstrings and matching over bitstrings as a syntax extension and library for OCaml.You can use this module to both parse and generate binary formats, files and protocols.Bitstring handling is added as primitives to the language, making it exceptionally simple to use and very powerful."""maintainer: ["Xavier R. Guérin <github@applepine.org>"]authors: ["Richard W.M. Jones" "Xavier R. Guérin"]license: "LGPL-2.0-or-later"homepage: "https://github.com/xguerin/bitstring"bug-reports: "https://github.com/xguerin/bitstring/issues"depends: ["dune" {>= "2.5"}"ocaml" {>= "4.04.1"}"bitstring" {>= "4.0.0"}"ocaml" {with-test & >= "4.08.0"}"ppxlib" {>= "0.18.0"}"ounit" {with-test}]build: [["dune" "subst"] {pinned}["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]]dev-repo: "git+https://github.com/xguerin/bitstring.git"url {src: "https://github.com/xguerin/bitstring/archive/v4.1.0.tar.gz"checksum: "md5=8ae6f04eaa29481c6830ee3be5cba755"}
opam-version: "2.0"maintainer: "jeremie@dimino.org"authors: ["Jérémie Dimino"]license: "BSD-3-Clause"homepage: "https://github.com/ocaml-ppx/ppx_derivers"bug-reports: "https://github.com/ocaml-ppx/ppx_derivers/issues"dev-repo: "git://github.com/ocaml-ppx/ppx_derivers.git"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml""dune"]synopsis: "Shared [@@deriving] plugin registry"description: """Ppx_derivers is a tiny package whose sole purpose is to allowppx_deriving and ppx_type_conv to inter-operate gracefully when linkedas part of the same ocaml-migrate-parsetree driver."""url {src: "https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz"checksum: "md5=5dc2bf130c1db3c731fe0fffc5648b41"}
opam-version: "2.0"maintainer: "whitequark <whitequark@whitequark.org>"authors: [ "whitequark <whitequark@whitequark.org>" ]license: "MIT"homepage: "https://github.com/ocaml-ppx/ppx_deriving"doc: "https://ocaml-ppx.github.io/ppx_deriving/"bug-reports: "https://github.com/ocaml-ppx/ppx_deriving/issues"dev-repo: "git+https://github.com/ocaml-ppx/ppx_deriving.git"tags: [ "syntax" ]build: [["dune" "subst"] {dev}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc}]depends: ["ocaml" {>= "4.05.0"}"dune" {>= "1.6.3"}"cppo" {build}"ocamlfind""ppx_derivers""ppxlib" {>= "0.20.0"}"result""ounit2" {with-test}]synopsis: "Type-driven code generation for OCaml"description: """ppx_deriving provides common infrastructure for generatingcode based on type definitions, and a set of useful pluginsfor common tasks."""url {src:"https://github.com/ocaml-ppx/ppx_deriving/releases/download/v5.2.1/ppx_deriving-v5.2.1.tbz"checksum: ["sha256=e96b5fb25b7632570e4b329e22e097fcd4b8e8680d1e43ef003a8fbd742b0786""sha512=f28cd778a2d48ababa53f73131b25229a11b03685610d020b7b9228b1e25570891cd927b37475aeda49be72debaf5f2dda4c1518a0965db7a361c0ebe325a8d2"]}x-commit-hash: "7211546d6527bf57d3eff8174c90fc3c22250dae"
opam-version: "2.0"maintainer: "opensource@janestreet.com"authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]homepage: "https://github.com/janestreet/ppx_js_style"bug-reports: "https://github.com/janestreet/ppx_js_style/issues"dev-repo: "git+https://github.com/janestreet/ppx_js_style.git"doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/ppx_js_style/index.html"license: "MIT"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.04.2"}"base" {>= "v0.14" & < "v0.15"}"dune" {>= "2.0.0"}"octavius""ppxlib" {>= "0.11.0"}]synopsis: "Code style checker for Jane Street Packages"description: "Part of the Jane Street's PPX rewriters collection.This packages is a no-op ppx rewriter. It is used as a 'lint' tool toenforce some coding conventions across all Jane Street packages."url {src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_js_style-v0.14.0.tar.gz"checksum: "md5=eab9c17616a2ba4cbd69a88db76070fd"}
opam-version: "2.0"maintainer: "opensource@janestreet.com"authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]homepage: "https://github.com/janestreet/ppx_yojson_conv"bug-reports: "https://github.com/janestreet/ppx_yojson_conv/issues"dev-repo: "git+https://github.com/janestreet/ppx_yojson_conv.git"doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/ppx_yojson_conv/index.html"license: "MIT"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.04.2"}"base" {>= "v0.14" & < "v0.15"}"ppx_js_style" {>= "v0.14" & < "v0.15"}"ppx_yojson_conv_lib" {>= "v0.14" & < "v0.15"}"dune" {>= "2.0.0"}"ppxlib" {>= "0.11.0"}]synopsis: "[@@deriving] plugin to generate Yojson conversion functions"description: "Part of the Jane Street's PPX rewriters collection."url {src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv-v0.14.0.tar.gz"checksum: "md5=d5e243a694a5d1b67e838bce10178718"}
opam-version: "2.0"maintainer: "opensource@janestreet.com"authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]homepage: "https://github.com/janestreet/ppx_yojson_conv_lib"bug-reports: "https://github.com/janestreet/ppx_yojson_conv_lib/issues"dev-repo: "git+https://github.com/janestreet/ppx_yojson_conv_lib.git"doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/ppx_yojson_conv_lib/index.html"license: "MIT"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.02.3"}"dune" {>= "2.0.0"}"yojson" {>= "1.7.0"}]synopsis: "Runtime lib for ppx_yojson_conv"description: "Part of the Jane Street's PPX rewriters collection."url {src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv_lib-v0.14.0.tar.gz"checksum: "md5=e23c5593a7211ad4fb09e26e9a74698a"}
opam-version: "2.0"synopsis: "Standard library for ppx rewriters"description: """Ppxlib is the standard library for ppx rewriters and other programsthat manipulate the in-memory reprensation of OCaml programs, a.k.athe "Parsetree".It also comes bundled with two ppx rewriters that are commonly used towrite tools that manipulate and/or generate Parsetree values;`ppxlib.metaquot` which allows to construct Parsetree values using theOCaml syntax directly and `ppxlib.traverse` which provides variousways of automatically traversing values of a given type, in particularallowing to inject a complex structured value into generated code."""maintainer: ["opensource@janestreet.com"]authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]license: "MIT"homepage: "https://github.com/ocaml-ppx/ppxlib"doc: "https://ocaml-ppx.github.io/ppxlib/"bug-reports: "https://github.com/ocaml-ppx/ppxlib/issues"depends: ["dune" {>= "2.7"}"ocaml" {>= "4.04.1" & < "4.13"}"ocaml-compiler-libs" {>= "v0.11.0"}"ocaml-migrate-parsetree" {>= "2.1.0"}"ppx_derivers" {>= "1.0"}"sexplib0""stdlib-shims""ocamlfind" {with-test}"re" {with-test & >= "1.9.0"}"cinaps" {with-test & >= "v0.12.1"}"base" {with-test}"stdio" {with-test}"odoc" {with-doc}]build: [["dune" "subst"] {dev}["dune""build""-p"name"-j"jobs"@install""@runtest" {with-test}"@doc" {with-doc}]]dev-repo: "git+https://github.com/ocaml-ppx/ppxlib.git"x-commit-hash: "06a2c9bdad8c1d3361a3d9430e9bf58476b08590"url {src:"https://github.com/ocaml-ppx/ppxlib/releases/download/0.22.0/ppxlib-0.22.0.tbz"checksum: ["sha256=3eeb91e03966662284a3222e612dee7f4fa2b7637c53d9572d2a74134bb96d7a""sha512=425051dff9df53579a6edd17369d66c10f87a78daeddf1691e50997990ed643e874fcc6a30112a4dacbfd2d0097a19445354e04cd920d9522f76c51cdbc7f1db"]}
opam-version: "2.0"maintainer: "David Kaloper Meršinjak <dk505@cam.ac.uk>"authors: ["David Kaloper Meršinjak <dk505@cam.ac.uk>"]homepage: "https://github.com/pqwy/psq"doc: "https://pqwy.github.io/psq/doc"license: "ISC"dev-repo: "git+https://github.com/pqwy/psq.git"bug-reports: "https://github.com/pqwy/psq/issues"synopsis: "Functional Priority Search Queues"build: [ [ "dune" "subst" ] {pinned}[ "dune" "build" "-p" name "-j" jobs ][ "dune" "runtest" "-p" name ] {with-test & ocaml:version >= "4.07.0"} ]depends: ["ocaml" {>="4.03.0"}"dune" {>= "1.7"}"seq""qcheck-core" {with-test}"qcheck-alcotest" {with-test}"alcotest" {with-test}]description: """Typical applications are searches, schedulers and caches. If you ever scratchedyour head because that A* didn't look quite right, a PSQ is what you needed."""url {src: "https://github.com/pqwy/psq/releases/download/v0.2.0/psq-v0.2.0.tbz"checksum: "md5=b94fb15f8878172bf58446b7d0fb7c1e"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["The ptime programmers"]homepage: "https://erratique.ch/software/ptime"doc: "https://erratique.ch/software/ptime/doc"dev-repo: "git+http://erratique.ch/repos/ptime.git"bug-reports: "https://github.com/dbuenzli/ptime/issues"tags: [ "time" "posix" "system" "org:erratique" ]license: "ISC"depends: ["ocaml" {>= "4.01.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build}"result"]depopts: [ "js_of_ocaml" ]conflicts: [ "js_of_ocaml" { < "3.3.0" } ]build:[["ocaml" "pkg/pkg.ml" "build""--pinned" "%{pinned}%""--with-js_of_ocaml" "%{js_of_ocaml:installed}%" ]]synopsis: """POSIX time for OCaml"""description: """\Ptime has platform independent POSIX time support in pure OCaml. Itprovides a type to represent a well-defined range of POSIX timestampswith picosecond precision, conversion with date-time values,conversion with [RFC 3339 timestamps][rfc3339] and pretty printing to ahuman-readable, locale-independent representation.The additional Ptime_clock library provides access to a system POSIXclock and to the system's current time zone offset.Ptime is not a calendar library.Ptime depends on the `result` compatibility package. Ptime_clockdepends on your system library. Ptime_clock's optional JavaScriptsupport depends on [js_of_ocaml][jsoo]. Ptime and its libraries aredistributed under the ISC license.[rfc3339]: http://tools.ietf.org/html/rfc3339[jsoo]: http://ocsigen.org/js_of_ocaml/"""url {archive: "https://erratique.ch/software/ptime/releases/ptime-0.8.5.tbz"checksum: "4d48055d623ecf2db792439b3e96a520"}
opam-version: "2.0"maintainer: "simon.cruanes.2007@m4x.org"homepage: "https://github.com/c-cube/qcheck/"synopsis: "Alcotest backend for qcheck"doc: ["http://c-cube.github.io/qcheck/"]tags: ["test""quickcheck""qcheck""alcotest"]build: [["dune" "build" "-p" name "-j" jobs]["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc}["dune" "runtest" "-p" name "-j" jobs] {with-test}]depends: ["dune""base-bytes""base-unix""qcheck-core" { = version }"alcotest""odoc" {with-doc}"ocaml" {>= "4.03.0"}]dev-repo: "git+https://github.com/c-cube/qcheck.git"bug-reports: "https://github.com/c-cube/qcheck/issues"authors: "Simon Cruanes <simon.cruanes.2007@m4x.org>"url {src: "https://github.com/c-cube/qcheck/archive/0.17.tar.gz"checksum: ["md5=605165edc328ae144341a2d73c7fc5fc""sha512=647c1beefba8fce32daac91bd42976ddf2926cff2e78e43ac3afb6e59ec660f0f6e684f5954d6b1fab6d11328690b236e40c30980a22a999c4b826ae2a0dcaea"]}
opam-version: "2.0"maintainer: "simon.cruanes.2007@m4x.org"homepage: "https://github.com/c-cube/qcheck/"synopsis: "Core qcheck library"doc: ["http://c-cube.github.io/qcheck/"]tags: ["test""property""quickcheck"]build: [["dune" "build" "-p" name "-j" jobs]["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc}["dune" "runtest" "-p" name "-j" jobs] {with-test}]depends: ["dune""base-bytes""base-unix""odoc" {with-doc}"ocaml" {>= "4.03.0"}]dev-repo: "git+https://github.com/c-cube/qcheck.git"bug-reports: "https://github.com/c-cube/qcheck/issues"conflicts: ["ounit" { < "2.0" }]authors: "Simon Cruanes <simon.cruanes.2007@m4x.org>"url {src: "https://github.com/c-cube/qcheck/archive/0.17.tar.gz"checksum: ["md5=605165edc328ae144341a2d73c7fc5fc""sha512=647c1beefba8fce32daac91bd42976ddf2926cff2e78e43ac3afb6e59ec660f0f6e684f5954d6b1fab6d11328690b236e40c30980a22a999c4b826ae2a0dcaea"]}
opam-version: "2.0"maintainer: "rudi.grinberg@gmail.com"authors: ["Jerome Vouillon""Thomas Gazagnaire""Anil Madhavapeddy""Rudi Grinberg""Gabriel Radanne"]license: "LGPL-2.0-only with OCaml-LGPL-linking-exception"homepage: "https://github.com/ocaml/ocaml-re"bug-reports: "https://github.com/ocaml/ocaml-re/issues"dev-repo: "git+https://github.com/ocaml/ocaml-re.git"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}]depends: ["ocaml" {>= "4.02"}"dune""ounit" {with-test}"seq"]synopsis: "RE is a regular expression library for OCaml"description: """Pure OCaml regular expressions with:* Perl-style regular expressions (module Re.Perl)* Posix extended regular expressions (module Re.Posix)* Emacs-style regular expressions (module Re.Emacs)* Shell-style file globbing (module Re.Glob)* Compatibility layer for OCaml's built-in Str module (module Re.Str)"""url {src:"https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz"checksum: "md5=bddaed4f386a22cace7850c9c7dac296"}
opam-version: "2.0"maintainer: "opensource@janestreet.com"authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]homepage: "https://github.com/janestreet/result"dev-repo: "git+https://github.com/janestreet/result.git"bug-reports: "https://github.com/janestreet/result/issues"license: "BSD-3-Clause"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml""dune" {>= "1.0"}]synopsis: "Compatibility Result module"description: """Projects that want to use the new result type defined in OCaml >= 4.03while staying compatible with older version of OCaml should use theResult module defined in this library."""url {src:"https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz"checksum: "md5=1b82dec78849680b49ae9a8a365b831b"}
name="seq"version="[distributed with OCaml 4.07 or above]"description="dummy backward-compatibility package for iterators"requires=""
lib:["META.seq" {"META"}]
opam-version: "2.0"maintainer: " "authors: " "homepage: " "depends: ["ocaml" {>= "4.07.0"}]dev-repo: "git+https://github.com/ocaml/ocaml.git"bug-reports: "https://caml.inria.fr/mantis/main_page.php"synopsis:"Compatibility package for OCaml's standard iterator type starting from 4.07."extra-files: [["seq.install" "md5=026b31e1df290373198373d5aaa26e42"]["META.seq" "md5=b33c8a1a6c7ed797816ce27df4855107"]]
opam-version: "2.0"maintainer: "opensource@janestreet.com"authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]homepage: "https://github.com/janestreet/sexplib0"bug-reports: "https://github.com/janestreet/sexplib0/issues"dev-repo: "git+https://github.com/janestreet/sexplib0.git"doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/sexplib0/index.html"license: "MIT"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.04.2"}"dune" {>= "2.0.0"}]synopsis: "Library containing the definition of S-expressions and some base converters"description: "Part of Jane Street's Core libraryThe Core suite of libraries is an industrial strength alternative toOCaml's standard library that was developed by Jane Street, thelargest industrial user of OCaml."url {src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/sexplib0-v0.14.0.tar.gz"checksum: "md5=37aff0af8f8f6f759249475684aebdc4"}
opam-version: "2.0"maintainer: "Samuel Mimram <samuel.mimram@ens-lyon.org>"homepage: "https://github.com/savonet/ocaml-ssl"dev-repo: "git+https://github.com/savonet/ocaml-ssl.git"bug-reports: "https://github.com/savonet/ocaml-ssl/issues"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.02.0"}"dune" {>= "2.0.0"}"dune-configurator""base-unix""conf-libssl"]synopsis: "Bindings for OpenSSL"authors: "Samuel Mimram <samuel.mimram@ens-lyon.org>"url {src: "https://github.com/savonet/ocaml-ssl/archive/v0.5.10.tar.gz"checksum: ["md5=afebbdc3130c1addf1da31e3b92c1dcd""sha512=f2d0acc8dcdb0a36c8ad236f60c6e9d7f8f76ea25183017218953dbe3432a19de5b0be8214714add71b88b211ac78318f09429d4df7ecba1e19dc94d4414f0e1"]}
opam-version: "2.0"maintainer: "opensource@janestreet.com"authors: ["Jane Street Group, LLC <opensource@janestreet.com>"]homepage: "https://github.com/janestreet/stdio"bug-reports: "https://github.com/janestreet/stdio/issues"dev-repo: "git+https://github.com/janestreet/stdio.git"doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/stdio/index.html"license: "MIT"build: [["dune" "build" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.04.2"}"base" {>= "v0.14" & < "v0.15"}"dune" {>= "2.0.0"}]synopsis: "Standard IO library for OCaml"description: "Stdio implements simple input/output functionalities for OCaml.It re-exports the input/output functions of the OCaml standardlibraries using a more consistent API."url {src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/stdio-v0.14.0.tar.gz"checksum: "md5=4cbdf15f0be88c3258aaeff9e04e00e9"}
opam-version: "2.0"maintainer: "The stdlib-shims programmers"authors: "The stdlib-shims programmers"homepage: "https://github.com/ocaml/stdlib-shims"doc: "https://ocaml.github.io/stdlib-shims/"dev-repo: "git+https://github.com/ocaml/stdlib-shims.git"bug-reports: "https://github.com/ocaml/stdlib-shims/issues"tags: ["stdlib" "compatibility" "org:ocaml"]license: ["typeof OCaml system"]depends: ["dune""ocaml" {>= "4.02.3"}]build: [ "dune" "build" "-p" name "-j" jobs ]synopsis: "Backport some of the new stdlib features to older compiler"description: """Backport some of the new stdlib features to older compiler,such as the Stdlib module.This allows projects that require compatibility with older compiler touse these new features in their code."""x-commit-hash: "fb6815e5d745f07fd567c11671149de6ef2e74c8"url {src:"https://github.com/ocaml/stdlib-shims/releases/download/0.3.0/stdlib-shims-0.3.0.tbz"checksum: ["sha256=babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a""sha512=1151d7edc8923516e9a36995a3f8938d323aaade759ad349ed15d6d8501db61ffbe63277e97c4d86149cf371306ac23df0f581ec7e02611f58335126e1870980"]}
opam-version: "2.0"maintainer: "rudi.grinberg@gmail.com"authors: "Rudi Grinberg"license: "MIT"homepage: "https://github.com/rgrinberg/stringext"bug-reports: "https://github.com/rgrinberg/stringext/issues"depends: ["ocaml" {>= "4.02.3"}"dune" {>= "1.0"}"ounit" {with-test}"qtest" {with-test & >= "2.2"}"base-bytes"]build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}]dev-repo: "git+https://github.com/rgrinberg/stringext.git"synopsis: "Extra string functions for OCaml"description: """Extra string functions for OCaml. Mainly splitting. All functions are in theStringext module."""url {src:"https://github.com/rgrinberg/stringext/releases/download/1.6.0/stringext-1.6.0.tbz"checksum: ["sha256=db41f5d52e9eab17615f110b899dfeb27dd7e7f89cd35ae43827c5119db206ea""sha512=d8ebe40f42b598a9bd99f1ef4b00ba93458385a4accd121af66a0bf3b3f8d7135f576740adf1a43081dd409977c2219fd4bdbb5b3d1308890d301d553ed49900"]}
opam-version: "2.0"authors: [ "Julien Sagot" "Emmanuel Surleau" "mackwic" "Andrew Rudenko" "orbifx" "c-cube"]maintainer: "OCamlPro <contact@ocamlpro.com>"homepage: "https://ocaml-toml.github.io/To.ml/"synopsis: "TOML parser"description: """The toml library provides a parser and serializer for Tom's Obvious Minimal Language v0.4.0, a minimal configuration file format.Helpful getters to retrieve data as OCaml primitive types are also supplied"""build: [ "dune" "build" "-p" name "-j" jobs]license: "LGPL3"depends: ["ocaml" {>= "4.02"}"dune" {>= "1.2"}"menhir" {build}"ounit" {with-test}"bisect" {with-test}"odoc" {with-doc}"ISO8601"]bug-reports: "https://github.com/ocaml-toml/to.ml/issues"dev-repo: "git+ttps://github.com/ocaml-toml/to.ml.git"url {src: "https://github.com/ocaml-toml/to.ml/archive/6.0.0.tar.gz"checksum: ["sha256=dd123c49769fe649f752a19ae5cb7ce63754c1bcca40fa019f8bffca969d6f44""sha512=99f65dbd4a249deffe982e52f412279f0993d914fe5f006785f4daff2be39c228dc80ae18b9d5c4e7d7a5e1ec88aaf7486d52bb1cf7e0508f3e58729fdc6dce6"]}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["Daniel Bünzli <daniel.buenzl i@erratique.ch>"]homepage: "http://erratique.ch/software/topkg"doc: "http://erratique.ch/software/topkg/doc"license: "ISC"dev-repo: "git+http://erratique.ch/repos/topkg.git"bug-reports: "https://github.com/dbuenzli/topkg/issues"tags: ["packaging" "ocamlbuild" "org:erratique"]depends: ["ocaml" {>= "4.03.0"}"ocamlfind" {build & >= "1.6.1"}"ocamlbuild" ]build: [["ocaml" "pkg/pkg.ml" "build""--pkg-name" name"--dev-pkg" "%{pinned}%" ]]synopsis: """The transitory OCaml software packager"""description: """\Topkg is a packager for distributing OCaml software. It provides anAPI to describe the files a package installs in a given buildconfiguration and to specify information about the package'sdistribution, creation and publication procedures.The optional topkg-care package provides the `topkg` command line toolwhich helps with various aspects of a package's life cycle: creatingand linting a distribution, releasing it on the WWW, publish itsdocumentation, add it to the OCaml opam repository, etc.Topkg is distributed under the ISC license and has **no**dependencies. This is what your packages will need as a *build*dependency.Topkg-care is distributed under the ISC license it depends on[fmt][fmt], [logs][logs], [bos][bos], [cmdliner][cmdliner],[webbrowser][webbrowser] and `opam-format`.[fmt]: http://erratique.ch/software/fmt[logs]: http://erratique.ch/software/logs[bos]: http://erratique.ch/software/bos[cmdliner]: http://erratique.ch/software/cmdliner[webbrowser]: http://erratique.ch/software/webbrowser"""url {archive: "http://erratique.ch/software/topkg/releases/topkg-1.0.3.tbz"checksum: "e285f7a296d77ee7d831ba9a6bfb396f"}
opam-version: "2.0"maintainer: "dev@ocsigen.org"homepage: "https://github.com/ocsigen/tyxml/"bug-reports: "https://github.com/ocsigen/tyxml/issues"doc: "https://ocsigen.org/tyxml/manual/"dev-repo: "git+https://github.com/ocsigen/tyxml.git"license: "LGPL-2.1 with OCaml linking exception"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}]depends: ["ocaml" {>= "4.02"}"dune""alcotest" {with-test}"seq""uutf" {>= "1.0.0"}"re" {>= "1.5.0"}]synopsis:"TyXML is a library for building correct HTML and SVG documents"description:"""TyXML provides a set of convenient combinators that uses the OCamltype system to ensure the validity of the generated documents. TyXMLcan be used with any representation of HTML and SVG: the textual one,provided directly by this package, or DOM trees (`js_of_ocaml-tyxml`)virtual DOM (`virtual-dom`) and reactive or replicated trees(`eliom`). You can also create your own representation and use it toinstantiate a new set of combinators.```ocamlopen Tyxmllet to_ocaml = Html.(a ~a:[a_href "ocaml.org"] [txt "OCaml!"])```"""authors: "The ocsigen team"url {src:"https://github.com/ocsigen/tyxml/releases/download/4.4.0/tyxml-4.4.0.tbz"checksum: ["sha256=516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530""sha512=d5f2187f8410524cec7a14b28e8950837070eb0b6571b015dd06076c2841eb7ccaffa86d5d2307eaf1950ee62f9fb926477dac01c870d9c1a2f525853cb44d0c"]}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["Daniel Bünzli <daniel.buenzl i@erratique.ch>"]homepage: "http://ocaml.org"doc: "https://ocaml.github.io/uchar/"dev-repo: "git+https://github.com/ocaml/uchar.git"bug-reports: "https://github.com/ocaml/uchar/issues"tags: [ "text" "character" "unicode" "compatibility" "org:ocaml.org" ]license: "typeof OCaml system"depends: ["ocaml" {>= "3.12.0"}"ocamlbuild" {build}]build: [["ocaml" "pkg/git.ml"]["ocaml""pkg/build.ml""native=%{ocaml:native}%""native-dynlink=%{ocaml:native-dynlink}%"]]synopsis: "Compatibility library for OCaml's Uchar module"description: """The `uchar` package provides a compatibility library for the[`Uchar`][1] module introduced in OCaml 4.03.The `uchar` package is distributed under the license of the OCamlcompiler. See [LICENSE](LICENSE) for details.[1]: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Uchar.html"""url {src:"https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz"checksum: "md5=c9ba2c738d264c420c642f7bb1cf4a36"}
opam-version: "2.0"maintainer: "anil@recoil.org"authors: ["Anil Madhavapeddy" "David Sheets" "Rudi Grinberg"]license: "ISC"tags: ["url" "uri" "org:mirage" "org:xapi-project"]homepage: "https://github.com/mirage/ocaml-uri"bug-reports: "https://github.com/mirage/ocaml-uri/issues"dev-repo: "git+https://github.com/mirage/ocaml-uri.git"doc: "https://mirage.github.io/ocaml-uri/"synopsis: "An RFC3986 URI/URL parsing library"description: """This is an OCaml implementation of the [RFC3986](http://tools.ietf.org/html/rfc3986) specificationfor parsing URI or URLs."""depends: ["ocaml" {>= "4.04.0"}"dune" {>= "1.2.0"}"ounit" {with-test & >= "1.0.2"}"ppx_sexp_conv" {with-test & >= "v0.9.0"}"stringext" {>= "1.4.0"}"angstrom" {>= "0.14.0"}]build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]["dune" "runtest" "-p" name "-j" jobs] {with-test}]x-commit-hash: "b4a8375d9352d29ff495d35fc309609fad74631a"url {src:"https://github.com/mirage/ocaml-uri/releases/download/v4.1.0/uri-v4.1.0.tbz"checksum: ["sha256=d269901cd27cffaadfa077fe761ef334ad4cdbebeb065faeb833824617ab2ce1""sha512=bf9eb9aa29ced3ae9d39cb3ca8772de118bfe67d8fe2280f213e627f0fef7e80c7703a0dbb7d16c3d23c427866ee6b09c0973e6836e9c3b7225f55597356537c"]}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: [ "The uucp programmers" ]homepage: "https://erratique.ch/software/uucp"doc: "https://erratique.ch/software/uucp/doc/Uucp"dev-repo: "git+https://erratique.ch/repos/uucp.git"bug-reports: "https://github.com/dbuenzli/uucp/issues"tags: [ "unicode" "text" "character" "org:erratique" ]license: "ISC"depends: ["ocaml" {>= "4.03.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build}"uucd" {with-test} # dev really"uunf" {with-test}"uutf" {with-test}]depopts: [ "uunf" "uutf" "cmdliner" ]conflicts: [ "uutf" {< "1.0.1"}"cmdliner" {< "1.0.0"} ]build: [["ocaml" "pkg/pkg.ml" "build""--dev-pkg" "%{pinned}%""--with-uutf" "%{uutf:installed}%""--with-uunf" "%{uunf:installed}%""--with-cmdliner" "%{cmdliner:installed}%"]]synopsis: """Unicode character properties for OCaml"""description: """\Uucp is an OCaml library providing efficient access to a selection ofcharacter properties of the [Unicode character database][1].Uucp is independent from any Unicode text data structure and has nodependencies. It is distributed under the ISC license.[1]: http://www.unicode.org/reports/tr44/"""url {archive: "https://erratique.ch/software/uucp/releases/uucp-13.0.0.tbz"checksum: "07e706249ddb2d02f0fa298804d3c739"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["Daniel Bünzli <daniel.buenzl i@erratique.ch>"]homepage: "https://erratique.ch/software/uuidm"doc: "https://erratique.ch/software/uuidm/doc/Uuidm"dev-repo: "git+https://erratique.ch/repos/uuidm.git"bug-reports: "https://github.com/dbuenzli/uuidm/issues"tags: [ "uuid" "codec" "org:erratique" ]license: "ISC"depends: ["ocaml" {>= "4.03.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build} ]depopts: [ "cmdliner" ]build:[ "ocaml" "pkg/pkg.ml" "build""--pinned" "%{pinned}%""--with-cmdliner" "%{cmdliner:installed}%" ]synopsis: """Universally unique identifiers (UUIDs) for OCaml"""description: """\Uuidm is an OCaml module implementing 128 bits universally uniqueidentifiers version 3, 5 (named based with MD5, SHA-1 hashing) and 4(random based) according to [RFC 4122][rfc4122].Uuidm has no dependency and is distributed under the ISC license.[rfc4122]: http://tools.ietf.org/html/rfc4122"""url {archive: "https://erratique.ch/software/uuidm/releases/uuidm-0.9.7.tbz"checksum: "54658248e3981d8c05237d0a4277ccd3"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["The uuseg programmers"]homepage: "https://erratique.ch/software/uuseg"doc: "https://erratique.ch/software/uuseg"dev-repo: "git+https://erratique.ch/repos/uuseg.git"bug-reports: "https://github.com/dbuenzli/uuseg/issues"tags: [ "segmentation" "text" "unicode" "org:erratique" ]license: "ISC"depends: [ "ocaml" {>= "4.03.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build}"uucp" {>= "13.0.0" & < "14.0.0"} ]depopts: [ "uutf""cmdliner""uutf" {with-test}"cmdliner" {with-test} ]conflicts: [ "uutf" {< "1.0.0"} ]build: [["ocaml" "pkg/pkg.ml" "build""--pinned" "%{pinned}%""--with-uutf" "%{uutf:installed}%""--with-cmdliner" "%{cmdliner:installed}%" ]]synopsis: """Unicode text segmentation for OCaml"""description: """\Uuseg is an OCaml library for segmenting Unicode text. It implementsthe locale independent [Unicode text segmentation algorithms][1] todetect grapheme cluster, word and sentence boundaries and the[Unicode line breaking algorithm][2] to detect line breakopportunities.The library is independent from any IO mechanism or Unicode text datastructure and it can process text without a complete in-memoryrepresentation.Uuseg depends on [Uucp](http://erratique.ch/software/uucp) andoptionally on [Uutf](http://erratique.ch/software/uutf) for support onOCaml UTF-X encoded strings. It is distributed under the ISC license.[1]: http://www.unicode.org/reports/tr29/[2]: http://www.unicode.org/reports/tr14/"""url {archive: "https://erratique.ch/software/uuseg/releases/uuseg-13.0.0.tbz"checksum: "a07a97fff61da604614ea8da0547ef6a"}
opam-version: "2.0"maintainer: "Daniel Bünzli <daniel.buenzl i@erratique.ch>"authors: ["Daniel Bünzli <daniel.buenzl i@erratique.ch>"]homepage: "http://erratique.ch/software/uutf"doc: "http://erratique.ch/software/uutf/doc/Uutf"dev-repo: "git+http://erratique.ch/repos/uutf.git"bug-reports: "https://github.com/dbuenzli/uutf/issues"tags: [ "unicode" "text" "utf-8" "utf-16" "codec" "org:erratique" ]license: "ISC"depends: ["ocaml" {>= "4.01.0"}"ocamlfind" {build}"ocamlbuild" {build}"topkg" {build}"uchar"]depopts: ["cmdliner"]conflicts: ["cmdliner" { < "0.9.6"} ]build: [["ocaml" "pkg/pkg.ml" "build""--pinned" "%{pinned}%""--with-cmdliner" "%{cmdliner:installed}%" ]]synopsis: """Non-blocking streaming Unicode codec for OCaml"""description: """\Uutf is a non-blocking streaming codec to decode and encode the UTF-8,UTF-16, UTF-16LE and UTF-16BE encoding schemes. It can efficientlywork character by character without blocking on IO. Decoders performcharacter position tracking and support newline normalization.Functions are also provided to fold over the characters of UTF encodedOCaml string values and to directly encode characters in OCamlBuffer.t values.Uutf has no dependency and is distributed under the ISC license."""url {archive: "http://erratique.ch/software/uutf/releases/uutf-1.0.2.tbz"checksum: "a7c542405a39630c689a82bd7ef2292c"}
opam-version: "2.0"maintainer: "martin@mjambon.com"authors: ["Martin Jambon"]homepage: "https://github.com/ocaml-community/yojson"bug-reports: "https://github.com/ocaml-community/yojson/issues"dev-repo: "git+https://github.com/ocaml-community/yojson.git"doc: "https://ocaml-community.github.io/yojson/"build: [["dune" "subst"] {pinned}["dune" "build" "-p" name "-j" jobs]]run-test: [["dune" "runtest" "-p" name "-j" jobs]]depends: ["ocaml" {>= "4.02.3"}"dune""cppo" {build}"easy-format""biniou" {>= "1.2.0"}"alcotest" {with-test & >= "0.8.5"}]synopsis:"Yojson is an optimized parsing and printing library for the JSON format"description: """Yojson is an optimized parsing and printing library for the JSON format.It addresses a few shortcomings of json-wheel including 2x speedup,polymorphic variants and optional syntax for tuples and variants.ydump is a pretty-printing command-line program provided with theyojson package.The program atdgen can be used to derive OCaml-JSON serializers anddeserializers from type definitions."""url {src:"https://github.com/ocaml-community/yojson/releases/download/1.7.0/yojson-1.7.0.tbz"checksum: "md5=b89d39ca3f8c532abe5f547ad3b8f84d"}
parameters:host: ''pool: ''sign: falsejobs:- job: ${{ parameters.host }}pool: ${{ parameters.pool }}steps:- ${{ if eq(parameters.sign, 'true') }}:- script: 'npm install -g esy@latest --unsafe-perm'displayName: 'Installing deps'- ${{ if eq(parameters.sign, 'false') }}:- script: 'sudo npm install -g esy@latest --unsafe-perm'displayName: 'Installing deps'- script: mkdir -p test_dirdisplayName: 'make test dir'- bash: |cd test_direcho '{"dependencies": {"@esy-packages/esy-openssl" : "esy-packages/esy-openssl:package.json#'$(git rev-parse --short HEAD)'"}}' > package.jsondisplayName: 'create test package.json'- script: |cd test_diresy installdisplayName: 'Install esy-deps'- script: |cd test_diresy x which opensslesy sh ../esy/test.shdisplayName: 'Building and dry run'
test_dir
language: node_jsnode_js:- 8os:- linux- osxinstall:- npm install --global esy@0.3.0- esy installscript:- travis_wait 40 esy buildcache:timeout: 360directories:- '$HOME/.esy/'
### `esy` build status[](https://ci.appveyor.com/project/bryphe/esy-openssl/branch/esy)[](https://travis-ci.org/bryphe/esy-openssl)-----------OpenSSL 1.1.1 11 Sep 2018Copyright (c) 1998-2018 The OpenSSL ProjectCopyright (c) 1995-1998 Eric A. Young, Tim J. HudsonAll rights reserved.DESCRIPTION-----------The OpenSSL Project is a collaborative effort to develop a robust,commercial-grade, fully featured, and Open Source toolkit implementing theTransport Layer Security (TLS) protocols (including SSLv3) as well as afull-strength general purpose cryptographic library.OpenSSL is descended from the SSLeay library developed by Eric A. Youngand Tim J. Hudson. The OpenSSL toolkit is licensed under a dual-license (theOpenSSL license plus the SSLeay license), which means that you are free toget and use it for commercial and non-commercial purposes as long as youfulfill the conditions of both licenses.OVERVIEW--------The OpenSSL toolkit includes:libssl (with platform specific naming):Provides the client and server-side implementations for SSLv3 and TLS.libcrypto (with platform specific naming):Provides general cryptographic and X.509 support needed by SSL/TLS butnot logically part of it.openssl:A command line tool that can be used for:Creation of key parametersCreation of X.509 certificates, CSRs and CRLsCalculation of message digestsEncryption and decryptionSSL/TLS client and server testsHandling of S/MIME signed or encrypted mailAnd more...INSTALLATION------------See the appropriate file:INSTALL Linux, Unix, Windows, OpenVMS, ...NOTES.* INSTALL addendums for different platformsSUPPORT-------See the OpenSSL website www.openssl.org for details on how to obtaincommercial technical support. Free community support is available through theopenssl-users email list (seehttps://www.openssl.org/community/mailinglists.html for further details).If you have any problems with OpenSSL then please take the following stepsfirst:- Download the latest version from the repositoryto see if the problem has already been addressed- Configure with no-asm- Remove compiler optimization flagsIf you wish to report a bug then please include the following informationand create an issue on GitHub:- OpenSSL version: output of 'openssl version -a'- Configuration data: output of 'perl configdata.pm --dump'- OS Name, Version, Hardware platform- Compiler Details (name, version)- Application Details (name, version)- Problem Description (steps that will reproduce the problem, if known)- Stack Traceback (if the application dumps core)Just because something doesn't work the way you expect does not mean itis necessarily a bug in OpenSSL. Use the openssl-users email list for this typeof query.HOW TO CONTRIBUTE TO OpenSSL----------------------------See CONTRIBUTINGLEGALITIES----------A number of nations restrict the use or export of cryptography. If youare potentially subject to such restrictions you should seek competentprofessional legal advice before attempting to develop or distributecryptographic code.
jobs:- template: .ci/build.yaml # Template referenceparameters:host: macOSpool:vmImage: 'macOS-latest'- template: .ci/build.yaml # Template referenceparameters:host: Linuxpool:vmImage: 'ubuntu-latest'- template: .ci/build.yaml # Template referenceparameters:host: Windowspool:vmImage: 'windows-latest'sign: true # Extra step on Windows only
/* From: https://wiki.openssl.org/index.php/Libcrypto_API */#include <openssl/conf.h>#include <openssl/evp.h>#include <openssl/err.h>int main(int arc, char *argv[]){/* Load the human readable error strings for libcrypto */ERR_load_crypto_strings();/* Load all digest and cipher algorithms */OpenSSL_add_all_algorithms();/* Load config file, and other important initialisation */CONF_modules_load(NULL, NULL, 0);printf("OpenSSL successfully initialized.\n");/* Clean up *//* Removes all digests and ciphers */EVP_cleanup();/* if you omit the next, a small leak may be left when you make use of the BIO (low level API) for e.g. base64 transformations */CRYPTO_cleanup_all_ex_data();/* Remove error strings */ERR_free_strings();return 0;}
pwdmkdir -p _testcd _testif which x86_64-w64-mingw32-gcc; thenCC=x86_64-w64-mingw32-gccelseCC=gccfiecho "Using compiler: $CC"echo "include..."#ls -a $INCLUDEecho "lib.."#ls -a $cur__lib$CC ./../../esy/test.c -o ./test.exe -I$OPENSSL_INCLUDE_PATH -L$OPENSSL_LIB_PATH -lssl -lcrypto#export PATH=$PATH:$cur__bin:$cur__lib#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$cur__lib#echo "Augmented path: $PATH"echo "Copying binaries..."#cp $cur__bin/*.dll .echo "Test executable path:"ls -a ../test.exe
{"hash": "d10585b707b5ab54802c6c85154328fd","root": "root@path:./package.json","node": {"root@path:./package.json": {"record": {"name": "root","version": "path:./package.json","source": "path:./package.json","files": [],"opam": null},"dependencies": []}}}
#### Bundle of CA Root Certificates#### Certificate data from Mozilla as of: Wed Nov 27 04:12:10 2019 GMT#### This is a bundle of X.509 certificates of public Certificate Authorities## (CA). These were automatically extracted from Mozilla's root certificates## file (certdata.txt). This file can be found in the mozilla source tree:## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt#### It contains the certificates in PEM format and therefore## can be directly used with curl / libcurl / php_curl, or with## an Apache+mod_ssl webserver for SSL client authentication.## Just configure this file as the SSLCACertificateFile.#### Conversion done with mk-ca-bundle.pl version 1.27.## SHA256: 607309057d0ec70f8e4e97b03906bafb2fcebb24cd37b5e8293e681ae26ceae0##GlobalSign Root CA==================-----BEGIN CERTIFICATE-----MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==-----END CERTIFICATE-----GlobalSign Root CA - R2=======================-----BEGIN CERTIFICATE-----MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==-----END CERTIFICATE-----Verisign Class 3 Public Primary Certification Authority - G3============================================================-----BEGIN CERTIFICATE-----MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==-----END CERTIFICATE-----Entrust.net Premium 2048 Secure Server CA=========================================-----BEGIN CERTIFICATE-----MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6YfzX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=-----END CERTIFICATE-----Baltimore CyberTrust Root=========================-----BEGIN CERTIFICATE-----MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp-----END CERTIFICATE-----AddTrust External Root======================-----BEGIN CERTIFICATE-----MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw56wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=-----END CERTIFICATE-----Entrust Root Certification Authority====================================-----BEGIN CERTIFICATE-----MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8-----END CERTIFICATE-----GeoTrust Global CA==================-----BEGIN CERTIFICATE-----MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==-----END CERTIFICATE-----GeoTrust Universal CA=====================-----BEGIN CERTIFICATE-----MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRcaanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=-----END CERTIFICATE-----GeoTrust Universal CA 2=======================-----BEGIN CERTIFICATE-----MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+zdXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS-----END CERTIFICATE-----Comodo AAA Services root========================-----BEGIN CERTIFICATE-----MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==-----END CERTIFICATE-----QuoVadis Root CA================-----BEGIN CERTIFICATE-----MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJhY3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOKSnQ2+Q==-----END CERTIFICATE-----QuoVadis Root CA 2==================-----BEGIN CERTIFICATE-----MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u-----END CERTIFICATE-----QuoVadis Root CA 3==================-----BEGIN CERTIFICATE-----MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=-----END CERTIFICATE-----Security Communication Root CA==============================-----BEGIN CERTIFICATE-----MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==-----END CERTIFICATE-----Sonera Class 2 Root CA======================-----BEGIN CERTIFICATE-----MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M-----END CERTIFICATE-----XRamp Global CA Root====================-----BEGIN CERTIFICATE-----MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxtqZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=-----END CERTIFICATE-----Go Daddy Class 2 CA===================-----BEGIN CERTIFICATE-----MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQHmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8=-----END CERTIFICATE-----Starfield Class 2 CA====================-----BEGIN CERTIFICATE-----MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJlxy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=-----END CERTIFICATE-----Taiwan GRCA===========-----BEGIN CERTIFICATE-----MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZTulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS-----END CERTIFICATE-----DigiCert Assured ID Root CA===========================-----BEGIN CERTIFICATE-----MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==-----END CERTIFICATE-----DigiCert Global Root CA=======================-----BEGIN CERTIFICATE-----MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQkCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=-----END CERTIFICATE-----DigiCert High Assurance EV Root CA==================================-----BEGIN CERTIFICATE-----MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCevEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K-----END CERTIFICATE-----DST Root CA X3==============-----BEGIN CERTIFICATE-----MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ-----END CERTIFICATE-----SwissSign Gold CA - G2======================-----BEGIN CERTIFICATE-----MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ-----END CERTIFICATE-----SwissSign Silver CA - G2========================-----BEGIN CERTIFICATE-----MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u-----END CERTIFICATE-----GeoTrust Primary Certification Authority========================================-----BEGIN CERTIFICATE-----MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=-----END CERTIFICATE-----thawte Primary Root CA======================-----BEGIN CERTIFICATE-----MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAXxPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==-----END CERTIFICATE-----VeriSign Class 3 Public Primary Certification Authority - G5============================================================-----BEGIN CERTIFICATE-----MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq-----END CERTIFICATE-----SecureTrust CA==============-----BEGIN CERTIFICATE-----MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=-----END CERTIFICATE-----Secure Global CA================-----BEGIN CERTIFICATE-----MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xcf8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW-----END CERTIFICATE-----COMODO Certification Authority==============================-----BEGIN CERTIFICATE-----MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==-----END CERTIFICATE-----Network Solutions Certificate Authority=======================================-----BEGIN CERTIFICATE-----MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3HtvwKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey-----END CERTIFICATE-----COMODO ECC Certification Authority==================================-----BEGIN CERTIFICATE-----MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=-----END CERTIFICATE-----OISTE WISeKey Global Root GA CA===============================-----BEGIN CERTIFICATE-----MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXahNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=-----END CERTIFICATE-----Certigna========-----BEGIN CERTIFICATE-----MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/QwWyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==-----END CERTIFICATE-----Cybertrust Global Root======================-----BEGIN CERTIFICATE-----MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jWWL1WMRJOEcgh4LMRkWXbtKaIOM5V-----END CERTIFICATE-----ePKI Root Certification Authority=================================-----BEGIN CERTIFICATE-----MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLHClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=-----END CERTIFICATE-----certSIGN ROOT CA================-----BEGIN CERTIFICATE-----MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD-----END CERTIFICATE-----GeoTrust Primary Certification Authority - G3=============================================-----BEGIN CERTIFICATE-----MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGDAWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt-----END CERTIFICATE-----thawte Primary Root CA - G2===========================-----BEGIN CERTIFICATE-----MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==-----END CERTIFICATE-----thawte Primary Root CA - G3===========================-----BEGIN CERTIFICATE-----MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1but8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=-----END CERTIFICATE-----GeoTrust Primary Certification Authority - G2=============================================-----BEGIN CERTIFICATE-----MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2npaqBA+K-----END CERTIFICATE-----VeriSign Universal Root Certification Authority===============================================-----BEGIN CERTIFICATE-----MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1UdDgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO37M2CYfE45k+XmCpajQ==-----END CERTIFICATE-----VeriSign Class 3 Public Primary Certification Authority - G4============================================================-----BEGIN CERTIFICATE-----MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==-----END CERTIFICATE-----NetLock Arany (Class Gold) Főtanúsítvány========================================-----BEGIN CERTIFICATE-----MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzCbLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=-----END CERTIFICATE-----Staat der Nederlanden Root CA - G2==================================-----BEGIN CERTIFICATE-----MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==-----END CERTIFICATE-----Hongkong Post Root CA 1=======================-----BEGIN CERTIFICATE-----MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbiAmvZWg==-----END CERTIFICATE-----SecureSign RootCA11===================-----BEGIN CERTIFICATE-----MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=-----END CERTIFICATE-----Microsec e-Szigno Root CA 2009==============================-----BEGIN CERTIFICATE-----MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW-----END CERTIFICATE-----GlobalSign Root CA - R3=======================-----BEGIN CERTIFICATE-----MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpHWD9f-----END CERTIFICATE-----Autoridad de Certificacion Firmaprofesional CIF A62634068=========================================================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----Izenpe.com==========-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----Chambers of Commerce Root - 2008================================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----Global Chambersign Root - 2008==============================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----Go Daddy Root Certificate Authority - G2========================================-----BEGIN CERTIFICATE-----MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPOLPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1-----END CERTIFICATE-----Starfield Root Certificate Authority - G2=========================================-----BEGIN CERTIFICATE-----MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/KpL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0-----END CERTIFICATE-----Starfield Services Root Certificate Authority - G2==================================================-----BEGIN CERTIFICATE-----MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkdiEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6-----END CERTIFICATE-----AffirmTrust Commercial======================-----BEGIN CERTIFICATE-----MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=-----END CERTIFICATE-----AffirmTrust Networking======================-----BEGIN CERTIFICATE-----MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=-----END CERTIFICATE-----AffirmTrust Premium===================-----BEGIN CERTIFICATE-----MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMgNt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==-----END CERTIFICATE-----AffirmTrust Premium ECC=======================-----BEGIN CERTIFICATE-----MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==-----END CERTIFICATE-----Certum Trusted Network CA=========================-----BEGIN CERTIFICATE-----MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=-----END CERTIFICATE-----TWCA Root Certification Authority=================================-----BEGIN CERTIFICATE-----MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==-----END CERTIFICATE-----Security Communication RootCA2==============================-----BEGIN CERTIFICATE-----MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03-----END CERTIFICATE-----EC-ACC======-----BEGIN CERTIFICATE-----MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=-----END CERTIFICATE-----Hellenic Academic and Research Institutions RootCA 2011=======================================================-----BEGIN CERTIFICATE-----MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4-----END CERTIFICATE-----Actalis Authentication Root CA==============================-----BEGIN CERTIFICATE-----MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbtifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==-----END CERTIFICATE-----Trustis FPS Root CA===================-----BEGIN CERTIFICATE-----MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQENZetX2fNXlrtIzYE=-----END CERTIFICATE-----Buypass Class 2 Root CA=======================-----BEGIN CERTIFICATE-----MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462sA20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=-----END CERTIFICATE-----Buypass Class 3 Root CA=======================-----BEGIN CERTIFICATE-----MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdVcSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=-----END CERTIFICATE-----T-TeleSec GlobalRoot Class 3============================-----BEGIN CERTIFICATE-----MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuImle9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==-----END CERTIFICATE-----EE Certification Centre Root CA===============================-----BEGIN CERTIFICATE-----MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5uuSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=-----END CERTIFICATE-----D-TRUST Root Class 3 CA 2 2009==============================-----BEGIN CERTIFICATE-----MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=-----END CERTIFICATE-----D-TRUST Root Class 3 CA 2 EV 2009=================================-----BEGIN CERTIFICATE-----MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1-----END CERTIFICATE-----CA Disig Root R2================-----BEGIN CERTIFICATE-----MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFMtCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL-----END CERTIFICATE-----ACCVRAIZ1=========-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----TWCA Global Root CA===================-----BEGIN CERTIFICATE-----MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsnLhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=-----END CERTIFICATE-----TeliaSonera Root CA v1======================-----BEGIN CERTIFICATE-----MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=-----END CERTIFICATE-----E-Tugra Certification Authority===============================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----T-TeleSec GlobalRoot Class 2============================-----BEGIN CERTIFICATE-----MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==-----END CERTIFICATE-----Atos TrustedRoot 2011=====================-----BEGIN CERTIFICATE-----MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed-----END CERTIFICATE-----QuoVadis Root CA 1 G3=====================-----BEGIN CERTIFICATE-----MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOCMTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD-----END CERTIFICATE-----QuoVadis Root CA 2 G3=====================-----BEGIN CERTIFICATE-----MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M-----END CERTIFICATE-----QuoVadis Root CA 3 G3=====================-----BEGIN CERTIFICATE-----MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3pxKGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0-----END CERTIFICATE-----DigiCert Assured ID Root G2===========================-----BEGIN CERTIFICATE-----MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwoIhNzbM8m9Yop5w==-----END CERTIFICATE-----DigiCert Assured ID Root G3===========================-----BEGIN CERTIFICATE-----MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv6pZjamVFkpUBtA==-----END CERTIFICATE-----DigiCert Global Root G2=======================-----BEGIN CERTIFICATE-----MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTflMrY=-----END CERTIFICATE-----DigiCert Global Root G3=======================-----BEGIN CERTIFICATE-----MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8sycX-----END CERTIFICATE-----DigiCert Trusted Root G4========================-----BEGIN CERTIFICATE-----MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQADggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+-----END CERTIFICATE-----COMODO RSA Certification Authority==================================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----USERTrust RSA Certification Authority=====================================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----USERTrust ECC Certification Authority=====================================-----BEGIN CERTIFICATE-----MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=-----END CERTIFICATE-----GlobalSign ECC Root CA - R4===========================-----BEGIN CERTIFICATE-----MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=-----END CERTIFICATE-----GlobalSign ECC Root CA - R5===========================-----BEGIN CERTIFICATE-----MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3-----END CERTIFICATE-----Staat der Nederlanden Root CA - G3==================================-----BEGIN CERTIFICATE-----MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BDU5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk=-----END CERTIFICATE-----Staat der Nederlanden EV Root CA================================-----BEGIN CERTIFICATE-----MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsIeK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==-----END CERTIFICATE-----IdenTrust Commercial Root CA 1==============================-----BEGIN CERTIFICATE-----MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H-----END CERTIFICATE-----IdenTrust Public Sector Root CA 1=================================-----BEGIN CERTIFICATE-----MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qjt2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c-----END CERTIFICATE-----Entrust Root Certification Authority - G2=========================================-----BEGIN CERTIFICATE-----MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZRkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==-----END CERTIFICATE-----Entrust Root Certification Authority - EC1==========================================-----BEGIN CERTIFICATE-----MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G-----END CERTIFICATE-----CFCA EV ROOT============-----BEGIN CERTIFICATE-----MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIBACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su-----END CERTIFICATE-----OISTE WISeKey Global Root GB CA===============================-----BEGIN CERTIFICATE-----MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02IcNc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=-----END CERTIFICATE-----SZAFIR ROOT CA2===============-----BEGIN CERTIFICATE-----MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==-----END CERTIFICATE-----Certum Trusted Network CA 2===========================-----BEGIN CERTIFICATE-----MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbiDrW5viSP-----END CERTIFICATE-----Hellenic Academic and Research Institutions RootCA 2015=======================================================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----Hellenic Academic and Research Institutions ECC RootCA 2015===========================================================-----BEGIN CERTIFICATE-----MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR-----END CERTIFICATE-----ISRG Root X1============-----BEGIN CERTIFICATE-----MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZLubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=-----END CERTIFICATE-----AC RAIZ FNMT-RCM================-----BEGIN CERTIFICATE-----MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDDnFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=-----END CERTIFICATE-----Amazon Root CA 1================-----BEGIN CERTIFICATE-----MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5-----END CERTIFICATE-----Amazon Root CA 2================-----BEGIN CERTIFICATE-----MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=-----END CERTIFICATE-----Amazon Root CA 3================-----BEGIN CERTIFICATE-----MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==-----END CERTIFICATE-----Amazon Root CA 4================-----BEGIN CERTIFICATE-----MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==-----END CERTIFICATE-----LuxTrust Global Root 2======================-----BEGIN CERTIFICATE-----MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT+Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr-----END CERTIFICATE-----TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1=============================================-----BEGIN CERTIFICATE-----MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifhAHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=-----END CERTIFICATE-----GDCA TrustAUTH R5 ROOT======================-----BEGIN CERTIFICATE-----MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfgp8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g==-----END CERTIFICATE-----TrustCor RootCert CA-1======================-----BEGIN CERTIFICATE-----MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yfke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk=-----END CERTIFICATE-----TrustCor RootCert CA-2======================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----TrustCor ECA-1==============-----BEGIN CERTIFICATE-----MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11FhcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g==-----END CERTIFICATE-----SSL.com Root Certification Authority RSA========================================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----SSL.com Root Certification Authority ECC========================================-----BEGIN CERTIFICATE-----MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl-----END CERTIFICATE-----SSL.com EV Root Certification Authority RSA R2==============================================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----SSL.com EV Root Certification Authority ECC===========================================-----BEGIN CERTIFICATE-----MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg==-----END CERTIFICATE-----GlobalSign Root CA - R6=======================-----BEGIN CERTIFICATE-----MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLNnsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA=-----END CERTIFICATE-----OISTE WISeKey Global Root GC CA===============================-----BEGIN CERTIFICATE-----MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9-----END CERTIFICATE-----GTS Root R1===========-----BEGIN CERTIFICATE-----MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl-----END CERTIFICATE-----GTS Root R2===========-----BEGIN CERTIFICATE-----MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JTvhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC-----END CERTIFICATE-----GTS Root R3===========-----BEGIN CERTIFICATE-----MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd-----END CERTIFICATE-----GTS Root R4===========-----BEGIN CERTIFICATE-----MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w==-----END CERTIFICATE-----UCA Global G2 Root==================-----BEGIN CERTIFICATE-----MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg51eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A==-----END CERTIFICATE-----UCA Extended Validation Root============================-----BEGIN CERTIFICATE-----MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAURap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax-----END CERTIFICATE-----Certigna Root CA================-----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----emSign Root CA - G1===================-----BEGIN CERTIFICATE-----MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxxiN66zB+Afko=-----END CERTIFICATE-----emSign ECC Root CA - G3=======================-----BEGIN CERTIFICATE-----MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj-----END CERTIFICATE-----emSign Root CA - C1===================-----BEGIN CERTIFICATE-----MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=-----END CERTIFICATE-----emSign ECC Root CA - C3=======================-----BEGIN CERTIFICATE-----MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==-----END CERTIFICATE-----Hongkong Post Root CA 3=======================-----BEGIN CERTIFICATE-----MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcTCUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9uZ2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFOdem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mIVoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKYvLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+TtbNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZbx39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YKTE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+GjHno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0ei9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEwDQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCkMpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXrgZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnkGMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJmOzj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6cJfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEGmpv0-----END CERTIFICATE-----
{"name": "esy-openssl","version": "1.1.1g","description": "Mirror of OpenSSL","license": "Apache 2.0","source": "https://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz#33324ff957edaae8ae575817b456320378da46ff","override": {"build": [["bash","-c","#{os == 'windows' ? './configure mingw64 --prefix=$cur__install --openssldir=$cur__install/ssl --cross-compile-prefix=x86_64-w64-mingw32-' : './config --prefix=$cur__install --openssldir=$cur__install/ssl'}"],["make","-j4"]],"install": [["make","install"],["bash","-c","mkdir -p #{self.install / 'ssl'}"],["bash","-c","mv cert.pem #{self.install / 'ssl'}"]],"buildsInSource": true,"exportedEnv": {"LD_LIBRARY_PATH": {"val": "#{self.lib : $LD_LIBRARY_PATH}","scope": "global"},"OPENSSL_LIB_PATH": {"val": "#{self.lib}","scope": "global"},"OPENSSL_INCLUDE_PATH": {"val": "#{self.install / 'include'}","scope": "global"},"OPENSSL_BIN_PATH": {"val": "#{self.bin}","scope": "global"},"PKG_CONFIG_PATH": {"val": "#{self.lib / 'pkgconfig'}","scope": "global"}},"dependencies": {"@opam/conf-autoconf": "esy-packages/esy-autoconf:package.json#fb93edf","@opam/conf-pkg-config": "*"}}}
{"build": "true","dependencies": {"esy-openssl": "esy-packages/esy-openssl#44762916645a5b6d4f6037aabf80e95fa4140547"}}
{"build": "true","dependencies": {"esy-m4": "esy-packages/esy-m4#c7cf0ac9221be2b1f9d90e83559ca08397a629e7"}}
{"build": [["pkg-config","--help"]],"dependencies": {"yarn-pkg-config": "esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79"}}
--- ./myocamlbuild.ml+++ ./myocamlbuild.ml@@ -22,6 +22,11 @@inrule "js_of_ocaml: .byte -> .js" ~dep ~prod f+let lib s =+ match !Ocamlbuild_plugin.Options.ext_lib with+ | "" -> s ^ ".a"+ | x -> s ^ "." ^ x+let () =dispatch begin function| After_rules ->@@ -33,10 +38,10 @@(* mtime-clock-os *)- dep ["record_mtime_clock_os_stubs"] ["src-os/libmtime_clock_stubs.a"];+ dep ["record_mtime_clock_os_stubs"] [lib "src-os/libmtime_clock_stubs"];flag_and_dep["link"; "ocaml"; "link_mtime_clock_os_stubs"]- (P "src-os/libmtime_clock_stubs.a");+ (P (lib "src-os/libmtime_clock_stubs"));flag ["library"; "ocaml"; "byte"; "record_mtime_clock_os_stubs"](S ([A "-dllib"; A "-lmtime_clock_stubs"] @ system_support_lib));flag ["library"; "ocaml"; (* byte and native *)Nur in .: myocamlbuild.ml.orig.--- ./src-os/mtime_clock_stubs.c+++ ./src-os/mtime_clock_stubs.c@@ -26,6 +26,8 @@#if defined(_POSIX_VERSION)#define OCAML_MTIME_POSIX#endif+#elif defined(_WIN32)+#define OCAML_MTIME_WINDOWS#endif/* Darwin */@@ -123,6 +125,72 @@CAMLreturn (some);}+#elif defined(OCAML_MTIME_WINDOWS)+#define WIN32_LEAN_AND_MEAN+#include <windows.h>++static double performance_frequency;+static void set_performance_frequency(void)+{+ LARGE_INTEGER t_freq;+ if (!QueryPerformanceFrequency(&t_freq)) {+ OCAML_MTIME_RAISE_SYS_ERROR ("clock_gettime () failed");+ }+ performance_frequency = (1000000000.0 / t_freq.QuadPart);+}++CAMLprim value ocaml_mtime_clock_elapsed_ns (value unit)+{+ (void) unit;+ static LARGE_INTEGER start;+ if (performance_frequency == 0.0) {+ set_performance_frequency();+ }+ if ( start.QuadPart == 0 )+ {+ if (!QueryPerformanceCounter(&start)) {+ OCAML_MTIME_RAISE_SYS_ERROR ("clock_gettime () failed");+ }+ }+ static LARGE_INTEGER now;+ if ( !QueryPerformanceCounter(&now)) {+ OCAML_MTIME_RAISE_SYS_ERROR ("clock_gettime () failed");+ }+ uint64_t ret = (now.QuadPart - start.QuadPart) * performance_frequency;+ return caml_copy_int64(ret);+}++CAMLprim value ocaml_mtime_clock_now_ns (value unit)+{+ (void) unit;+ if (performance_frequency == 0.0) {+ set_performance_frequency();+ }+ static LARGE_INTEGER now;+ if ( !QueryPerformanceCounter(&now)) {+ OCAML_MTIME_RAISE_SYS_ERROR ("clock_gettime () failed");+ }+ uint64_t ret = now.QuadPart * performance_frequency;+ return caml_copy_int64(ret);+}++CAMLprim value ocaml_mtime_clock_period_ns (value unit)+{+ (void) unit;+ if (performance_frequency == 0.0) {+ set_performance_frequency();+ }+ if ( performance_frequency <= 0.0 ) {+ return Val_none;+ }+ value ret;+ value p = caml_copy_int64(performance_frequency);+ Begin_roots1(p);+ ret = caml_alloc_small(1,0);+ Field(ret,0) = p;+ End_roots();+ return ret;+}/* Unsupported */#else
{"build": [["bash","-c","#{os == 'windows' ? 'patch -p1 < mtime-1.2.0.patch' : 'true'}"],["ocaml","pkg/pkg.ml","build","--pinned","false","--with-js_of_ocaml","false"]]}
--- ./Makefile+++ ./Makefile@@ -213,7 +213,7 @@rm -f man/ocamlbuild.1man/options_man.byte: src/ocamlbuild_pack.cmo- $(OCAMLC) $^ -I src man/options_man.ml -o man/options_man.byte+ $(OCAMLC) -I +unix unix.cma $^ -I src man/options_man.ml -o man/options_man.byteclean::rm -f man/options_man.cm*--- ./src/command.ml+++ ./src/command.ml@@ -148,9 +148,10 @@let self = string_of_command_spec_with_calls call_with_tags call_with_target resolve_virtuals inlet b = Buffer.create 256 in(* The best way to prevent bash from switching to its windows-style- * quote-handling is to prepend an empty string before the command name. *)+ * quote-handling is to prepend an empty string before the command name.+ * space seems to work, too - and the ouput is nicer *)if Sys.os_type = "Win32" then- Buffer.add_string b "''";+ Buffer.add_char b ' ';let first = ref true inlet put_space () =if !first then@@ -260,7 +261,7 @@let execute_many ?(quiet=false) ?(pretend=false) cmds =add_parallel_stat (List.length cmds);- let degraded = !*My_unix.is_degraded || Sys.os_type = "Win32" in+ let degraded = !*My_unix.is_degraded inlet jobs = !jobs inif jobs < 0 then invalid_arg "jobs < 0";let max_jobs = if jobs = 0 then None else Some jobs in--- ./src/findlib.ml+++ ./src/findlib.ml@@ -66,9 +66,6 @@(fun command -> lexer & Lexing.from_string & run_and_read command)command-let run_and_read command =- Printf.ksprintf run_and_read command-let rec query name =tryHashtbl.find packages name@@ -135,7 +132,8 @@with Not_found -> slet list () =- List.map before_space (split_nl & run_and_read "%s list" ocamlfind)+ let cmd = Shell.quote_filename_if_needed ocamlfind ^ " list" in+ List.map before_space (split_nl & run_and_read cmd)(* The closure algorithm is easy because the dependencies are already closedand sorted for each package. We only have to make the union. We could also--- ./src/main.ml+++ ./src/main.ml@@ -162,6 +162,9 @@Tags.mem "traverse" tags|| List.exists (Pathname.is_prefix path_name) !Options.include_dirs|| List.exists (Pathname.is_prefix path_name) target_dirs)+ && ((* beware: !Options.build_dir is an absolute directory *)+ Pathname.normalize !Options.build_dir+ <> Pathname.normalize (Pathname.pwd/path_name))endendend--- ./src/my_std.ml+++ ./src/my_std.ml@@ -271,13 +271,107 @@try Array.iter (fun x -> if x = basename then raise Exit) a; falsewith Exit -> true+let command_plain = function+| [| |] -> 0+| margv ->+ let rec waitpid a b =+ match Unix.waitpid a b with+ | exception (Unix.Unix_error(Unix.EINTR,_,_)) -> waitpid a b+ | x -> x+ in+ let pid = Unix.(create_process margv.(0) margv stdin stdout stderr) in+ let pid', process_status = waitpid [] pid in+ assert (pid = pid');+ match process_status with+ | Unix.WEXITED n -> n+ | Unix.WSIGNALED _ -> 2 (* like OCaml's uncaught exceptions *)+ | Unix.WSTOPPED _ -> 127++(* can't use Lexers because of circular dependency *)+let split_path_win str =+ let rec aux pos =+ try+ let i = String.index_from str pos ';' in+ let len = i - pos in+ if len = 0 then+ aux (succ i)+ else+ String.sub str pos (i - pos) :: aux (succ i)+ with Not_found | Invalid_argument _ ->+ let len = String.length str - pos in+ if len = 0 then [] else [String.sub str pos len]+ in+ aux 0++let windows_shell = lazy begin+ let rec iter = function+ | [] -> [| "bash.exe" ; "--norc" ; "--noprofile" |]+ | hd::tl ->+ let dash = Filename.concat hd "dash.exe" in+ if Sys.file_exists dash then [|dash|] else+ let bash = Filename.concat hd "bash.exe" in+ if Sys.file_exists bash = false then iter tl else+ (* if sh.exe and bash.exe exist in the same dir, choose sh.exe *)+ let sh = Filename.concat hd "sh.exe" in+ if Sys.file_exists sh then [|sh|] else [|bash ; "--norc" ; "--noprofile"|]+ in+ split_path_win (try Sys.getenv "PATH" with Not_found -> "") |> iter+end++let prep_windows_cmd cmd =+ (* workaround known ocaml bug, remove later *)+ if String.contains cmd '\t' && String.contains cmd ' ' = false then+ " " ^ cmd+ else+ cmd++let run_with_shell = function+| "" -> 0+| cmd ->+ let cmd = prep_windows_cmd cmd in+ let shell = Lazy.force windows_shell in+ let qlen = Filename.quote cmd |> String.length in+ (* old versions of dash had problems with bs *)+ try+ if qlen < 7_900 then+ command_plain (Array.append shell [| "-ec" ; cmd |])+ else begin+ (* it can still work, if the called command is a cygwin tool *)+ let ch_closed = ref false in+ let file_deleted = ref false in+ let fln,ch =+ Filename.open_temp_file+ ~mode:[Open_binary]+ "ocamlbuildtmp"+ ".sh"+ in+ try+ let f_slash = String.map ( fun x -> if x = '\\' then '/' else x ) fln in+ output_string ch cmd;+ ch_closed:= true;+ close_out ch;+ let ret = command_plain (Array.append shell [| "-e" ; f_slash |]) in+ file_deleted:= true;+ Sys.remove fln;+ ret+ with+ | x ->+ if !ch_closed = false then+ close_out_noerr ch;+ if !file_deleted = false then+ (try Sys.remove fln with _ -> ());+ raise x+ end+ with+ | (Unix.Unix_error _) as x ->+ (* Sys.command doesn't raise an exception, so run_with_shell also won't+ raise *)+ Printexc.to_string x ^ ":" ^ cmd |> prerr_endline;+ 1+let sys_command =- match Sys.os_type with- | "Win32" -> fun cmd ->- if cmd = "" then 0 else- let cmd = "bash --norc -c " ^ Filename.quote cmd in- Sys.command cmd- | _ -> fun cmd -> if cmd = "" then 0 else Sys.command cmd+ if Sys.win32 then run_with_shell+ else fun cmd -> if cmd = "" then 0 else Sys.command cmd(* FIXME warning fix and use Filename.concat *)let filename_concat x y =--- ./src/my_std.mli+++ ./src/my_std.mli@@ -69,3 +69,6 @@val split_ocaml_version : (int * int * int * string) option(** (major, minor, patchlevel, rest) *)++val windows_shell : string array Lazy.t+val prep_windows_cmd : string -> string--- ./src/ocamlbuild_executor.ml+++ ./src/ocamlbuild_executor.ml@@ -34,6 +34,8 @@job_stdin : out_channel;job_stderr : in_channel;job_buffer : Buffer.t;+ job_pid : int;+ job_tmp_file: string option;mutable job_dying : bool;};;@@ -76,6 +78,61 @@inloop 0;;++let open_process_full_win cmd env =+ let (in_read, in_write) = Unix.pipe () in+ let (out_read, out_write) = Unix.pipe () in+ let (err_read, err_write) = Unix.pipe () in+ Unix.set_close_on_exec in_read;+ Unix.set_close_on_exec out_write;+ Unix.set_close_on_exec err_read;+ let inchan = Unix.in_channel_of_descr in_read in+ let outchan = Unix.out_channel_of_descr out_write in+ let errchan = Unix.in_channel_of_descr err_read in+ let shell = Lazy.force Ocamlbuild_pack.My_std.windows_shell in+ let test_cmd =+ String.concat " " (List.map Filename.quote (Array.to_list shell)) ^+ "-ec " ^+ Filename.quote (Ocamlbuild_pack.My_std.prep_windows_cmd cmd) in+ let argv,tmp_file =+ if String.length test_cmd < 7_900 then+ Array.append+ shell+ [| "-ec" ; Ocamlbuild_pack.My_std.prep_windows_cmd cmd |],None+ else+ let fln,ch = Filename.open_temp_file ~mode:[Open_binary] "ocamlbuild" ".sh" in+ output_string ch (Ocamlbuild_pack.My_std.prep_windows_cmd cmd);+ close_out ch;+ let fln' = String.map (function '\\' -> '/' | c -> c) fln in+ Array.append+ shell+ [| "-c" ; fln' |], Some fln in+ let pid =+ Unix.create_process_env argv.(0) argv env out_read in_write err_write in+ Unix.close out_read;+ Unix.close in_write;+ Unix.close err_write;+ (pid, inchan, outchan, errchan,tmp_file)++let close_process_full_win (pid,inchan, outchan, errchan, tmp_file) =+ let delete tmp_file =+ match tmp_file with+ | None -> ()+ | Some x -> try Sys.remove x with Sys_error _ -> () in+ let tmp_file_deleted = ref false in+ try+ close_in inchan;+ close_out outchan;+ close_in errchan;+ let res = snd(Unix.waitpid [] pid) in+ tmp_file_deleted := true;+ delete tmp_file;+ res+ with+ | x when tmp_file <> None && !tmp_file_deleted = false ->+ delete tmp_file;+ raise x+(* ***)(*** execute *)(* XXX: Add test for non reentrancy *)@@ -130,10 +187,16 @@(*** add_job *)let add_job cmd rest result id =(*display begin fun oc -> fp oc "Job %a is %s\n%!" print_job_id id cmd; end;*)- let (stdout', stdin', stderr') = open_process_full cmd env in+ let (pid,stdout', stdin', stderr', tmp_file) =+ if Sys.win32 then open_process_full_win cmd env else+ let a,b,c = open_process_full cmd env in+ -1,a,b,c,None+ inincr jobs_active;- set_nonblock (doi stdout');- set_nonblock (doi stderr');+ if not Sys.win32 then (+ set_nonblock (doi stdout');+ set_nonblock (doi stderr');+ );let job ={ job_id = id;job_command = cmd;@@ -143,7 +206,9 @@job_stdin = stdin';job_stderr = stderr';job_buffer = Buffer.create 1024;- job_dying = false }+ job_dying = false;+ job_tmp_file = tmp_file;+ job_pid = pid }inoutputs := FDM.add (doi stdout') job (FDM.add (doi stderr') job !outputs);jobs := JS.add job !jobs;@@ -199,6 +264,7 @@tryread fd u 0 (Bytes.length u)with+ | Unix.Unix_error(Unix.EPIPE,_,_) when Sys.win32 -> 0| Unix.Unix_error(e,_,_) ->let msg = error_message e indisplay (fun oc -> fp oc@@ -241,14 +307,19 @@decr jobs_active;(* PR#5371: we would get EAGAIN below otherwise *)- clear_nonblock (doi job.job_stdout);- clear_nonblock (doi job.job_stderr);-+ if not Sys.win32 then (+ clear_nonblock (doi job.job_stdout);+ clear_nonblock (doi job.job_stderr);+ );do_read ~loop:true (doi job.job_stdout) job;do_read ~loop:true (doi job.job_stderr) job;outputs := FDM.remove (doi job.job_stdout) (FDM.remove (doi job.job_stderr) !outputs);jobs := JS.remove job !jobs;- let status = close_process_full (job.job_stdout, job.job_stdin, job.job_stderr) in+ let status =+ if Sys.win32 then+ close_process_full_win (job.job_pid, job.job_stdout, job.job_stdin, job.job_stderr, job.job_tmp_file)+ else+ close_process_full (job.job_stdout, job.job_stdin, job.job_stderr) inlet shown = ref false in--- ./src/ocamlbuild_unix_plugin.ml+++ ./src/ocamlbuild_unix_plugin.ml@@ -48,12 +48,22 @@endlet run_and_open s kont =+ let s_orig = s in+ let s =+ (* Be consistent! My_unix.run_and_open uses My_std.sys_command and+ sys_command uses bash. *)+ if Sys.win32 = false then s else+ let l = match Lazy.force My_std.windows_shell |> Array.to_list with+ | hd::tl -> (Filename.quote hd)::tl+ | _ -> assert false in+ "\"" ^ (String.concat " " l) ^ " -ec " ^ Filename.quote (" " ^ s) ^ "\""+ inlet ic = Unix.open_process_in s inlet close () =match Unix.close_process_in ic with| Unix.WEXITED 0 -> ()| Unix.WEXITED _ | Unix.WSIGNALED _ | Unix.WSTOPPED _ ->- failwith (Printf.sprintf "Error while running: %s" s) in+ failwith (Printf.sprintf "Error while running: %s" s_orig) inlet res = trykont icwith e -> (close (); raise e)--- ./src/options.ml+++ ./src/options.ml@@ -174,11 +174,24 @@build_dir := Filename.concat (Sys.getcwd ()) selsebuild_dir := s++let slashify =+ if Sys.win32 then fun p -> String.map (function '\\' -> '/' | x -> x) p+ else fun p ->p++let sb () =+ match Sys.os_type with+ | "Win32" ->+ (try set_binary_mode_out stdout true with _ -> ());+ | _ -> ()++let spec = ref (let print_version () =+ sb ();Printf.printf "ocamlbuild %s\n%!" Ocamlbuild_config.version; raise Exit_OKin- let print_vnum () = print_endline Ocamlbuild_config.version; raise Exit_OK in+ let print_vnum () = sb (); print_endline Ocamlbuild_config.version; raise Exit_OK inArg.align["-version", Unit print_version , " Display the version";@@ -257,8 +270,8 @@"-build-dir", String set_build_dir, "<path> Set build directory (implies no-links)";"-install-lib-dir", Set_string Ocamlbuild_where.libdir, "<path> Set the install library directory";"-install-bin-dir", Set_string Ocamlbuild_where.bindir, "<path> Set the install binary directory";- "-where", Unit (fun () -> print_endline !Ocamlbuild_where.libdir; raise Exit_OK), " Display the install library directory";- "-which", String (fun cmd -> print_endline (find_tool cmd); raise Exit_OK), "<command> Display path to the tool command";+ "-where", Unit (fun () -> sb (); print_endline (slashify !Ocamlbuild_where.libdir); raise Exit_OK), " Display the install library directory";+ "-which", String (fun cmd -> sb (); print_endline (slashify (find_tool cmd)); raise Exit_OK), "<command> Display path to the tool command";"-ocamlc", set_cmd ocamlc, "<command> Set the OCaml bytecode compiler";"-plugin-ocamlc", set_cmd plugin_ocamlc, "<command> Set the OCaml bytecode compiler \used when building myocamlbuild.ml (only)";--- ./src/pathname.ml+++ ./src/pathname.ml@@ -84,6 +84,26 @@| x :: xs -> x :: normalize_list xslet normalize x =+ let x =+ if Sys.win32 = false then+ x+ else+ let len = String.length x in+ let b = Bytes.create len in+ for i = 0 to pred len do+ match x.[i] with+ | '\\' -> Bytes.set b i '/'+ | c -> Bytes.set b i c+ done;+ if len > 1 then (+ let c1 = Bytes.get b 0 in+ let c2 = Bytes.get b 1 in+ if c2 = ':' && c1 >= 'a' && c1 <= 'z' &&+ ( len = 2 || Bytes.get b 2 = '/') then+ Bytes.set b 0 (Char.uppercase_ascii c1)+ );+ Bytes.unsafe_to_string b+ inif Glob.eval not_normal_form_re x thenlet root, paths = split x injoin root (normalize_list paths)--- ./src/shell.ml+++ ./src/shell.ml@@ -24,12 +24,26 @@| 'a'..'z' | 'A'..'Z' | '0'..'9' | '.' | '-' | '/' | '_' | ':' | '@' | '+' | ',' -> loop (pos + 1)| _ -> false inloop 0++let generic_quote quotequote s =+ let l = String.length s in+ let b = Buffer.create (l + 20) in+ Buffer.add_char b '\'';+ for i = 0 to l - 1 do+ if s.[i] = '\''+ then Buffer.add_string b quotequote+ else Buffer.add_char b s.[i]+ done;+ Buffer.add_char b '\'';+ Buffer.contents b+let unix_quote = generic_quote "'\\''"+let quote_filename_if_needed s =if is_simple_filename s then s(* We should probably be using [Filename.unix_quote] except that function* isn't exported. Users on Windows will have to live with not being able to* install OCaml into c:\o'caml. Too bad. *)- else if Sys.os_type = "Win32" then Printf.sprintf "'%s'" s+ else if Sys.os_type = "Win32" then unix_quote selse Filename.quote slet chdir dir =reset_filesys_cache ();@@ -37,7 +51,7 @@let run args target =reset_readdir_cache ();let cmd = String.concat " " (List.map quote_filename_if_needed args) in- if !*My_unix.is_degraded || Sys.os_type = "Win32" then+ if !*My_unix.is_degraded thenbeginLog.event cmd target Tags.empty;let st = sys_command cmd in
{"build": [["bash","-c","#{os == 'windows' ? 'patch -p1 < ocamlbuild-0.14.0.patch' : 'true'}"],["make","-f","configure.make","all","OCAMLBUILD_PREFIX=#{self.install}","OCAMLBUILD_BINDIR=#{self.bin}","OCAMLBUILD_LIBDIR=#{self.lib}","OCAMLBUILD_MANDIR=#{self.man}","OCAMLBUILD_NATIVE=true","OCAMLBUILD_NATIVE_TOOLS=true"],["make","check-if-preinstalled","all","#{os == 'windows' ? 'install' : 'opam-install'}"]]}
--- ./Makefile+++ ./Makefile@@ -57,16 +57,16 @@cat findlib.conf.in | \$(SH) tools/patch '@SITELIB@' '$(OCAML_SITELIB)' >findlib.confif ./tools/cmd_from_same_dir ocamlc; then \- echo 'ocamlc="ocamlc.opt"' >>findlib.conf; \+ echo 'ocamlc="ocamlc.opt$(EXEC_SUFFIX)"' >>findlib.conf; \fiif ./tools/cmd_from_same_dir ocamlopt; then \- echo 'ocamlopt="ocamlopt.opt"' >>findlib.conf; \+ echo 'ocamlopt="ocamlopt.opt$(EXEC_SUFFIX)"' >>findlib.conf; \fiif ./tools/cmd_from_same_dir ocamldep; then \- echo 'ocamldep="ocamldep.opt"' >>findlib.conf; \+ echo 'ocamldep="ocamldep.opt$(EXEC_SUFFIX)"' >>findlib.conf; \fiif ./tools/cmd_from_same_dir ocamldoc; then \- echo 'ocamldoc="ocamldoc.opt"' >>findlib.conf; \+ echo 'ocamldoc="ocamldoc.opt$(EXEC_SUFFIX)"' >>findlib.conf; \fi.PHONY: install-doc--- ./src/findlib/findlib_config.mlp+++ ./src/findlib/findlib_config.mlp@@ -24,3 +24,5 @@| "MacOS" -> "" (* don't know *)| _ -> failwith "Unknown Sys.os_type";;++let exec_suffix = "@EXEC_SUFFIX@";;--- ./src/findlib/findlib.ml+++ ./src/findlib/findlib.ml@@ -28,15 +28,20 @@let conf_ldconf = ref "";;let conf_ignore_dups_in = ref ([] : string list);;-let ocamlc_default = "ocamlc";;-let ocamlopt_default = "ocamlopt";;-let ocamlcp_default = "ocamlcp";;-let ocamloptp_default = "ocamloptp";;-let ocamlmklib_default = "ocamlmklib";;-let ocamlmktop_default = "ocamlmktop";;-let ocamldep_default = "ocamldep";;-let ocamlbrowser_default = "ocamlbrowser";;-let ocamldoc_default = "ocamldoc";;+let add_exec str =+ match Findlib_config.exec_suffix with+ | "" -> str+ | a -> str ^ a ;;+let ocamlc_default = add_exec "ocamlc";;+let ocamlopt_default = add_exec "ocamlopt";;+let ocamlcp_default = add_exec "ocamlcp";;+let ocamloptp_default = add_exec "ocamloptp";;+let ocamlmklib_default = add_exec "ocamlmklib";;+let ocamlmktop_default = add_exec "ocamlmktop";;+let ocamldep_default = add_exec "ocamldep";;+let ocamlbrowser_default = add_exec "ocamlbrowser";;+let ocamldoc_default = add_exec "ocamldoc";;+let init_manually--- ./src/findlib/fl_package_base.ml+++ ./src/findlib/fl_package_base.ml@@ -133,7 +133,15 @@List.find (fun def -> def.def_var = "exists_if") p.package_defs inlet files = Fl_split.in_words def.def_value inList.exists- (fun file -> Sys.file_exists (Filename.concat d' file))+ (fun file ->+ let fln = Filename.concat d' file in+ let e = Sys.file_exists fln in+ (* necessary for ppx executables *)+ if e || Sys.os_type <> "Win32" || Filename.check_suffix fln ".exe" then+ e+ else+ Sys.file_exists (fln ^ ".exe")+ )fileswith Not_found -> true in--- ./src/findlib/fl_split.ml+++ ./src/findlib/fl_split.ml@@ -126,10 +126,17 @@| '/' | '\\' -> true| _ -> false inlet norm_dir_win() =- if l >= 1 && s.[0] = '/' then- Buffer.add_char b '\\' else Buffer.add_char b s.[0];- if l >= 2 && s.[1] = '/' then- Buffer.add_char b '\\' else Buffer.add_char b s.[1];+ if l >= 1 then (+ if s.[0] = '/' then+ Buffer.add_char b '\\'+ else+ Buffer.add_char b s.[0] ;+ if l >= 2 then+ if s.[1] = '/' then+ Buffer.add_char b '\\'+ else+ Buffer.add_char b s.[1];+ );for k = 2 to l - 1 dolet c = s.[k] inif is_slash c then (--- ./src/findlib/frontend.ml+++ ./src/findlib/frontend.ml@@ -31,10 +31,18 @@elseSys_error (arg ^ ": " ^ Unix.error_message code)+let is_win = Sys.os_type = "Win32"++let () =+ match Findlib_config.system with+ | "win32" | "win64" | "mingw" | "cygwin" | "mingw64" | "cygwin64" ->+ (try set_binary_mode_out stdout true with _ -> ());+ (try set_binary_mode_out stderr true with _ -> ());+ | _ -> ()let slashify s =match Findlib_config.system with- | "mingw" | "mingw64" | "cygwin" ->+ | "win32" | "win64" | "mingw" | "cygwin" | "mingw64" | "cygwin64" ->let b = Buffer.create 80 inString.iter(function@@ -49,7 +57,7 @@let out_path ?(prefix="") s =match Findlib_config.system with- | "mingw" | "mingw64" | "cygwin" ->+ | "win32" | "win64" | "mingw" | "mingw64" | "cygwin" ->let u = slashify s inprefix ^(if String.contains u ' ' then@@ -273,11 +281,9 @@let identify_dir d =- match Sys.os_type with- | "Win32" ->- failwith "identify_dir" (* not available *)- | _ ->- let s = Unix.stat d in+ if is_win then+ failwith "identify_dir"; (* not available *)+ let s = Unix.stat d in(s.Unix.st_dev, s.Unix.st_ino);;@@ -459,6 +465,96 @@)packages+let rewrite_cmd s =+ if s = "" || not is_win then+ s+ else+ let s =+ let l = String.length s in+ let b = Buffer.create l in+ for i = 0 to pred l do+ match s.[i] with+ | '/' -> Buffer.add_char b '\\'+ | x -> Buffer.add_char b x+ done;+ Buffer.contents b+ in+ if (Filename.is_implicit s && String.contains s '\\' = false) ||+ Filename.check_suffix (String.lowercase s) ".exe" then+ s+ else+ let s' = s ^ ".exe" in+ if Sys.file_exists s' then+ s'+ else+ s++let rewrite_cmd s =+ if s = "" || not is_win then s else+ let s =+ let l = String.length s in+ let b = Buffer.create l in+ for i = 0 to pred l do+ match s.[i] with+ | '/' -> Buffer.add_char b '\\'+ | x -> Buffer.add_char b x+ done;+ Buffer.contents b+ in+ if (Filename.is_implicit s && String.contains s '\\' = false) ||+ Filename.check_suffix (String.lowercase s) ".exe" then+ s+ else+ let s' = s ^ ".exe" in+ if Sys.file_exists s' then+ s'+ else+ s++let rewrite_pp cmd =+ if not is_win then cmd else+ let module T = struct exception Keep end in+ let is_whitespace = function+ | ' ' | '\011' | '\012' | '\n' | '\r' | '\t' -> true+ | _ -> false in+ (* characters that triggers special behaviour (cmd.exe, not unix shell) *)+ let is_unsafe_char = function+ | '(' | ')' | '%' | '!' | '^' | '<' | '>' | '&' -> true+ | _ -> false in+ let len = String.length cmd in+ let buf = Buffer.create (len + 4) in+ let buf_cmd = Buffer.create len in+ let rec iter_ws i =+ if i >= len then () else+ let cur = cmd.[i] in+ if is_whitespace cur then (+ Buffer.add_char buf cur;+ iter_ws (succ i)+ )+ else+ iter_cmd i+ and iter_cmd i =+ if i >= len then add_buf_cmd () else+ let cur = cmd.[i] in+ if is_unsafe_char cur || cur = '"' || cur = '\'' then+ raise T.Keep;+ if is_whitespace cur then (+ add_buf_cmd ();+ Buffer.add_substring buf cmd i (len - i)+ )+ else (+ Buffer.add_char buf_cmd cur;+ iter_cmd (succ i)+ )+ and add_buf_cmd () =+ if Buffer.length buf_cmd > 0 then+ Buffer.add_string buf (rewrite_cmd (Buffer.contents buf_cmd))+ in+ try+ iter_ws 0;+ Buffer.contents buf+ with+ | T.Keep -> cmdlet process_pp_spec syntax_preds packages pp_opts =(* Returns: pp_command *)@@ -549,7 +645,7 @@None -> []| Some cmd ->["-pp";- cmd ^ " " ^+ (rewrite_cmd cmd) ^ " " ^String.concat " " (List.map Filename.quote pp_i_options) ^ " " ^String.concat " " (List.map Filename.quote pp_archives) ^ " " ^String.concat " " (List.map Filename.quote pp_opts)]@@ -625,9 +721,11 @@intrylet preprocessor =+ rewrite_cmd (resolve_path~base ~explicit:true- (package_property predicates pname "ppx") in+ (package_property predicates pname "ppx") )+ in["-ppx"; String.concat " " (preprocessor :: options)]with Not_found -> [])@@ -895,6 +993,14 @@switch (e.g. -L<path> instead of -L <path>)*)+(* We may need to remove files on which we do not have complete control.+ On Windows, removing a read-only file fails so try to change the+ mode of the file first. *)+let remove_file fname =+ try Sys.remove fname+ with Sys_error _ when is_win ->+ (try Unix.chmod fname 0o666 with Unix.Unix_error _ -> ());+ Sys.remove fnamelet ocamlc which () =@@ -1022,9 +1128,12 @@"-intf",Arg.String (fun s -> pass_files := !pass_files @ [ Intf(slashify s) ]);-+"-pp",- Arg.String (fun s -> pp_specified := true; add_spec_fn "-pp" s);+ Arg.String (fun s -> pp_specified := true; add_spec_fn "-pp" (rewrite_pp s));++ "-ppx",+ Arg.String (fun s -> add_spec_fn "-ppx" (rewrite_pp s));"-thread",Arg.Unit (fun _ -> threads := threads_default);@@ -1237,7 +1346,7 @@withany ->close_out initl;- Sys.remove initl_file_name;+ remove_file initl_file_name;raise anyend;@@ -1245,9 +1354,9 @@at_exit(fun () ->let tr f x = try f x with _ -> () in- tr Sys.remove initl_file_name;- tr Sys.remove (Filename.chop_extension initl_file_name ^ ".cmi");- tr Sys.remove (Filename.chop_extension initl_file_name ^ ".cmo");+ tr remove_file initl_file_name;+ tr remove_file (Filename.chop_extension initl_file_name ^ ".cmi");+ tr remove_file (Filename.chop_extension initl_file_name ^ ".cmo"););let exclude_list = [ stdlibdir; threads_dir; vmthreads_dir ] in@@ -1493,7 +1602,9 @@[ "-v", Arg.Unit (fun () -> verbose := Verbose);"-pp", Arg.String (fun s ->pp_specified := true;- options := !options @ ["-pp"; s]);+ options := !options @ ["-pp"; rewrite_pp s]);+ "-ppx", Arg.String (fun s ->+ options := !options @ ["-ppx"; rewrite_pp s]);]))@@ -1672,7 +1783,9 @@Arg.String (fun s -> add_spec_fn "-I" (slashify (resolve_path s)));"-pp", Arg.String (fun s -> pp_specified := true;- add_spec_fn "-pp" s);+ add_spec_fn "-pp" (rewrite_pp s));+ "-ppx", Arg.String (fun s -> add_spec_fn "-ppx" (rewrite_pp s));+]))@@ -1830,7 +1943,10 @@output_string ch_out append;close_out ch_out;close_in ch_in;- Unix.utimes outpath s.Unix.st_mtime s.Unix.st_mtime;+ (try Unix.utimes outpath s.Unix.st_mtime s.Unix.st_mtime+ with Unix.Unix_error(e,_,_) ->+ prerr_endline("Warning: setting utimes for " ^ outpath+ ^ ": " ^ Unix.error_message e));prerr_endline("Installed " ^ outpath);with@@ -1882,6 +1998,8 @@Unix.openfile (Filename.concat dir owner_file) [Unix.O_RDONLY] 0 inlet f =Unix.in_channel_of_descr fd in+ if is_win then+ set_binary_mode_in f false;trylet line = input_line f inlet is_my_file = (line = pkg) in@@ -2208,7 +2326,7 @@let lines = read_ldconf !ldconf inlet dlldir_norm = Fl_split.norm_dir dlldir inlet dlldir_norm_lc = string_lowercase_ascii dlldir_norm in- let ci_filesys = (Sys.os_type = "Win32") in+ let ci_filesys = is_win inlet check_dir d =let d' = Fl_split.norm_dir d in(d' = dlldir_norm) ||@@ -2356,7 +2474,7 @@List.iter(fun file ->let absfile = Filename.concat dlldir file in- Sys.remove absfile;+ remove_file absfile;prerr_endline ("Removed " ^ absfile))dll_files@@ -2365,7 +2483,7 @@(* Remove the files from the package directory: *)if Sys.file_exists pkgdir then beginlet files = Sys.readdir pkgdir in- Array.iter (fun f -> Sys.remove (Filename.concat pkgdir f)) files;+ Array.iter (fun f -> remove_file (Filename.concat pkgdir f)) files;Unix.rmdir pkgdir;prerr_endline ("Removed " ^ pkgdir)end@@ -2415,7 +2533,9 @@let print_configuration() =+ let sl = slashify inlet dir s =+ let s = sl s inif Sys.file_exists s thenselse@@ -2453,27 +2573,27 @@if md = "" then "the corresponding package directories" else dir md);Printf.printf "The standard library is assumed to reside in:\n %s\n"- (Findlib.ocaml_stdlib());+ (sl (Findlib.ocaml_stdlib()));Printf.printf "The ld.conf file can be found here:\n %s\n"- (Findlib.ocaml_ldconf());+ (sl (Findlib.ocaml_ldconf()));flush stdout| Some "conf" ->- print_endline (Findlib.config_file())+ print_endline (sl (Findlib.config_file()))| Some "path" ->- List.iter print_endline (Findlib.search_path())+ List.iter ( fun x -> print_endline (sl x)) (Findlib.search_path())| Some "destdir" ->- print_endline (Findlib.default_location())+ print_endline ( sl (Findlib.default_location()))| Some "metadir" ->- print_endline (Findlib.meta_directory())+ print_endline ( sl (Findlib.meta_directory()))| Some "metapath" ->let mdir = Findlib.meta_directory() inlet ddir = Findlib.default_location() in- print_endline- (if mdir <> "" then mdir ^ "/META.%s" else ddir ^ "/%s/META")+ print_endline ( sl+ (if mdir <> "" then mdir ^ "/META.%s" else ddir ^ "/%s/META"))| Some "stdlib" ->- print_endline (Findlib.ocaml_stdlib())+ print_endline ( sl (Findlib.ocaml_stdlib()))| Some "ldconf" ->- print_endline (Findlib.ocaml_ldconf())+ print_endline ( sl (Findlib.ocaml_ldconf()))| _ ->assert false;;@@ -2481,7 +2601,7 @@let ocamlcall pkg cmd =let dir = package_directory pkg in- let path = Filename.concat dir cmd in+ let path = rewrite_cmd (Filename.concat dir cmd) inbegintry Unix.access path [ Unix.X_OK ]with@@ -2647,6 +2767,10 @@| Sys_error f ->prerr_endline ("ocamlfind: " ^ f);exit 2+ | Unix.Unix_error (e, fn, f) ->+ prerr_endline ("ocamlfind: " ^ fn ^ " " ^ f+ ^ ": " ^ Unix.error_message e);+ exit 2| Findlib.No_such_package(pkg,info) ->prerr_endline ("ocamlfind: Package `" ^ pkg ^ "' not found" ^(if info <> "" then " - " ^ info else ""));--- ./src/findlib/Makefile+++ ./src/findlib/Makefile@@ -90,6 +90,7 @@cat findlib_config.mlp | \$(SH) $(TOP)/tools/patch '@CONFIGFILE@' '$(OCAMLFIND_CONF)' | \$(SH) $(TOP)/tools/patch '@STDLIB@' '$(OCAML_CORE_STDLIB)' | \+ $(SH) $(TOP)/tools/patch '@EXEC_SUFFIX@' '$(EXEC_SUFFIX)' | \sed -e 's;@AUTOLINK@;$(OCAML_AUTOLINK);g' \-e 's;@SYSTEM@;$(SYSTEM);g' \>findlib_config.ml
{"build": [["bash","-c","#{os == 'windows' ? 'patch -p1 < findlib-1.8.1.patch' : 'true'}"],["./configure","-bindir","#{self.bin}","-sitelib","#{self.lib}","-mandir","#{self.man}","-config","#{self.lib}/findlib.conf","-no-custom","-no-topfind"],["make","all"],["make","opt"]],"install": [["make","install"],["install","-m","0755","ocaml-stub","#{self.bin}/ocaml"],["mkdir","-p","#{self.toplevel}"],["install","-m","0644","src/findlib/topfind","#{self.toplevel}/topfind"]],"exportedEnv": {"OCAML_TOPLEVEL_PATH": {"val": "#{self.toplevel}","scope": "global"}}}
{"nodes": {"nixpkgs": {"locked": {"lastModified": 1613343273,"narHash": "sha256-YlSATlS8L16u1ooX/cCN7/vFcsI1TTOQegIc9dt/mco=","owner": "nixos","repo": "nixpkgs","rev": "be864bbd6763cd4c92777643b9c4c6f07c3390d5","type": "github"},"original": {"owner": "nixos","ref": "nixpkgs-unstable","repo": "nixpkgs","type": "github"}},"root": {"inputs": {"nixpkgs": "nixpkgs","utils": "utils"}},"utils": {"locked": {"lastModified": 1610051610,"narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=","owner": "numtide","repo": "flake-utils","rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc","type": "github"},"original": {"owner": "numtide","repo": "flake-utils","type": "github"}}},"root": "root","version": 7}
{description = "A very basic flake";inputs = {nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";utils.url = "github:numtide/flake-utils";};outputs = { self, nixpkgs, utils }:utils.lib.eachDefaultSystem (system:letpkgs = nixpkgs.legacyPackages."${system}";# some symlink/relative path shenanigans happening 🤷esy = pkgs.writeShellScriptBin "esy" "${pkgs.nodePackages.esy}/lib/node_modules/.bin/esy $@";inrec {packages = {discopotty = pkgs.callPackage ./. { inherit pkgs; };docker = pkgs.dockerTools.buildImage {name = "discopotty";config = {Cmd = [ "${packages.discopotty}/bin/discopotty" ];};};};defaultPackage = packages.discopotty;apps = {discopotty = utils.lib.mkApp { drv = packages.discopotty; };};defaultApp = apps.discopotty;devShell = pkgs.mkShell {buildInputs = with pkgs; [pkg-configlibsodiumesy# ocamlformat# ocamlPackages.ocaml-lsp# ocamlPackages.dune_2];};});}
module L = (val Relog.logger ~namespace:__MODULE__ ())type t = { http : Http.t; gw : Gateway.t; disconnect : unit -> unit }type create_msg = { content : string; nounce : string; tts : bool }[@@deriving yojson]let send_message channel_id content { http; _ } =let msg = { content; nounce = Websocket.gen_nonce 20; tts = false } inlet uri = Format.sprintf "/channels/%s/messages" channel_id inlet ser = yojson_of_create_msg msg inLwt.async (fun () ->Http.post ~body:ser uri http|> Lwt.map (function| Ok _ -> ()| Error _ -> L.error (fun m -> m "error sending message")))let disconnect { disconnect; _ } = disconnect ()let create ~handler token =let open Lwt_result.Syntax inL.info (fun m -> m "creating HTTP client");let* http = Http.create token inL.info (fun m -> m "connecting to gateway");let* gw = Gateway.connect ~http token inlet disconnect () = Gateway.disconnect gw inlet t = { http; gw; disconnect } inGateway.events gw|> Lwt_pipe.Reader.iter ~f:(fun ev -> handler t ev)|> Lwt_result.ok
(library(name discord)(public_name discopotty)(preprocess(pps ppx_deriving.show ppx_deriving.ord ppx_yojson_conv ppx_bitstring))(librariesdiscord_modelscontainerscontainers-datarelog.liburilwtlwt.unixlwt-pipebitstringyojsonmtimemtime.clock.ospiafwebsocketafwebsocketaf-lwt-unixhttpaf-lwt-unix))
type t =[ `Discord of string | `Http of Piaf.Error.t | `Exn of exn | `Msg of string ]let of_http e = `Http elet to_string = function| `Discord m -> "DiscordError: " ^ m| `Http piaf -> Piaf.Error.to_string piaf| `Exn exn -> Printexc.to_string exn| `Msg m -> m
open Globalsmodule Ready = structtype t = {v : int;(* user : Models.User.t; *)(* guilds : Models.Guild.t list; *)session_id : string;shard : (int * int) option; [@yojson.option]}[@@deriving yojson] [@@yojson.allow_extra_fields]endtype t =| Ready of Ready.t| MessageCreate of Models.Message.t| Resumed| Unsupported of string * Yojson.Safe.t optionlet of_name name data =match (name, data) with| "READY", Some d -> Ready (Ready.t_of_yojson d)| "MESSAGE_CREATE", Some d -> MessageCreate (Models.Message.t_of_yojson d)| "RESUMED", _ -> Resumed| other, d -> Unsupported (other, d)
open Containersmodule L = (val Relog.logger ~namespace:__MODULE__ ())module Payload = Gateway_payloadtype t = { session : Session.t }let get_gateway_url http =let api () =let open Lwt_result.Syntax inlet* res = Http.get "/gateway/bot" http inlet* body = Piaf.Body.to_string res.body inResult.guard_str (fun () ->let raw = Yojson.Safe.from_string body inYojson.Safe.Util.(raw |> member "url" |> to_string))|> Result.map_err (fun e -> `Msg e)|> Lwt.returninapi ()|> Lwt.map (function| Ok url -> url| Error e ->L.err (fun m ->m "Couldn't get gateway url from API, using fallback: %s@."(Piaf.Error.to_string e));"wss://gateway.discord.gg")|> Lwt_result.oklet connect ?http token =let open Lwt_result.Syntax inlet* http =match http with None -> Http.create token | Some d -> Lwt_result.return dinlet* url = get_gateway_url http inlet+ session = Session.create token (Uri.of_string url) in{ session }let disconnect { session; _ } = Session.disconnect sessionlet events { session; _} = Session.events session
open Globalsmodule L = (val Relog.logger ~namespace:__MODULE__ ())module Intents = structtype t = int [@@deriving yojson]let make = List.fold_left (fun out intent -> out lor intent) 0let add i t = t lor ilet rm i t = lnot i land tlet guilds = 1 lsl 0let guild_members = 1 lsl 1let guild_bans = 1 lsl 2let guild_emojis = 1 lsl 3let guild_integrations = 1 lsl 4let guild_webhooks = 1 lsl 5let guild_invites = 1 lsl 6let guild_voice_states = 1 lsl 7let guild_presences = 1 lsl 8let guild_messages = 1 lsl 9let guild_message_reactions = 1 lsl 10let guild_message_typing = 1 lsl 11let direct_messages = 1 lsl 12let direct_message_reactions = 1 lsl 13let direct_message_typing = 1 lsl 14let all = (1 lsl 15) - 1let all_unprivileged =List.fold_left (fun is i -> rm i is) all [ guild_presences; guild_members ]let pp fmt t =let out =let rec aux acc d miss =match (d, miss) with| 0, 0 -> String.concat "" acc| 0, n when n > 0 -> String.make n '0' ^ String.concat "" acc| _, n -> aux (string_of_int (d land 1) :: acc) (d lsr 1) (n - 1)inaux [] t 15inFormat.fprintf fmt "%s" outendmodule Identify = structtype t = {token : string;intents : Intents.t;properties : conn_props;compress : bool option; [@yojson.option]large_threshold : int option; [@yojson.option]shard : (int * int) option; [@yojson.option]guild_subscriptions : bool option; [@yojson.option]}[@@yojson.allow_extra_fields]and conn_props = {os : string; [@key "$os"]browser : string; [@key "$browser"]device : string; [@key "$device"]}[@@yojson.allow_extra_fields] [@@deriving yojson]let op = 2let make_props ?os ?browser ?device () =let get_os () =match Sys.os_type with| "Unix" -> (trylet ic = Unix.open_process_in "uname" inlet out = input_line ic inclose_in ic;out |> String.lowercase_asciiwith _ -> "unix")| "Win32" | "Cygwin" -> "windows"| _ -> assert falseinlet os = os |> Option.get_lazy get_os inlet browser = browser |> Option.get_or ~default:"discopotty" inlet device = device |> Option.get_or ~default:"discopotty" in{ os; browser; device }let make ?compress ?large_threshold ?shard ?guild_subscriptions?(properties = make_props ()) ?(intents = Intents.all_unprivileged) token={token;intents;properties;compress;large_threshold;shard;guild_subscriptions;}endmodule Resume = structtype t = { token : string; session_id : string; seq : int }[@@deriving yojson] [@@yojson.allow_extra_fields]let op = 6endmodule Presence = structtype status = [ `Online | `Dnd | `Idle | `Invisible | `Offline ][@@deriving yojson]type t = {since : int option; [@yojson.option](* activities: Activity.t array; *)status : status;afk : bool;}[@@deriving yojson]let make ?since ~afk status = { since; status; afk }endmodule VoiceState = structtype t = {guild_id : Models.Snowflake.t;channel_id : Models.Snowflake.t option;self_mute : bool;self_deaf : bool;}[@@deriving yojson]let make ?channel_id ~self_mute ~self_deaf guild_id ={ guild_id; channel_id; self_mute; self_deaf }endmodule Dir = Payload.Dirmodule Raw = Payload.Rawexception Invalid_payload of Raw.t * stringlet invalid_payload raw string = raise (Invalid_payload (raw, string))type _ t =| Dispatch : int * Events.t -> Dir.recv t| Heartbeat : _ Dir.bidi t| Identify : Identify.t -> Dir.send t| PresenceUpdate : Presence.t -> Dir.send t| VoiceStateUpdate : VoiceState.t -> Dir.send t| Resume : Resume.t -> Dir.send t| Reconnect : Dir.recv t| RequestGuildMembers : Dir.send t| InvalidSession : bool -> Dir.recv t| Hello : int -> Dir.recv t| HeartbeatACK : Dir.recv tinclude Payload.Make (structtype nonrec 'a t = 'a tlet op : type a. a t -> int =fun t ->match t with| Dispatch _ -> 0| Heartbeat -> 1| Identify _ -> 2| PresenceUpdate _ -> 3| VoiceStateUpdate _ -> 4| Resume _ -> 6| Reconnect -> 7| RequestGuildMembers -> 8| InvalidSession _ -> 9| Hello _ -> 10| HeartbeatACK -> 11let of_raw raw =match (raw.Raw.op, raw.d) with| n, _ when n < 0 -> invalid_payload raw "negative opcode"| 0, d ->let s, t =match (raw.s, raw.t) with| Some s, Some t -> (s, t)| _ -> invalid_payload raw "Dispatch missing 's' and/or 't'"inDispatch (s, Events.of_name t d)| 1, _ -> Heartbeat| 7, _ -> Reconnect| 9, Some d -> InvalidSession ([%of_yojson: bool] d)| 9, None ->L.warn (fun m ->m"got InvalidSession payload without 'resumable' boolean, \defaulting to false");InvalidSession false| 10, Some d ->let hb =Yojson.Safe.Util.(d |> member "heartbeat_interval" |> to_int)inHello hb| 10, None -> invalid_payload raw "Hello missing 'heartbeat_interval'"| 11, _ -> HeartbeatACK| n, _ when n <= 11 ->invalid_payload raw(Format.asprintf "payload with opcode=%d is not recv type" n)| _ -> invalid_payload raw "unrecognized opcode"let to_raw t =op t|>match t with| Heartbeat -> Raw.make ()| Identify d -> Raw.make ~d:(Identify.yojson_of_t d) ()| PresenceUpdate d -> Raw.make ~d:(Presence.yojson_of_t d) ()| VoiceStateUpdate d -> Raw.make ~d:(VoiceState.yojson_of_t d) ()| Resume d -> Raw.make ~d:(Resume.yojson_of_t d) ()| RequestGuildMembers -> Raw.make ()end)let heartbeat : _ t = Heartbeatlet make_identify ?compress ?large_threshold ?shard ?guild_subscriptions?properties ?intents token =Identify(Identify.make ?compress ?large_threshold ?shard ?guild_subscriptions?properties ?intents token)let make_presence_update ?since ~afk status =PresenceUpdate (Presence.make ?since ~afk status)let make_voice_state_update ?channel_id ~self_mute ~self_deaf guild_id =VoiceStateUpdate (VoiceState.make ?channel_id ~self_mute ~self_deaf guild_id)let make_resume ~token ~session_id ~seq = Resume { token; session_id; seq }
include Containersmodule Models = Discord_models
open Containersmodule ApiError = structtype t = { code : int; (* errors : errors; *)message : string }[@@deriving yojson] [@@yojson.allow_extra_fields]let code { code; _ } = codelet message { message; _ } = messagelet pp fmt { code; message; _ } = Format.fprintf fmt "(%d: %s)" code messageendmodule L = (val Relog.logger ~namespace:__MODULE__ ())type t = { token : string; version : Versions.Http.t; client : Piaf.Client.t }let user_agent = "discopotty (github.com/quartz55/discopotty-re, v0.0.1)"let base_url = "https://discord.com"let base_uri = Uri.of_string base_urllet create ?(version = Versions.Http.V8) token =let open Lwt_result.Syntax inlet+ client =Piaf.Client.create~config:{Piaf.Config.default withfollow_redirects = true;allow_insecure = true;}base_uri|> Lwt_result.map_err Error.of_httpin{ token; version; client }let do_request :?headers:(string * string) list ->?body:Piaf.Body.t ->meth:Piaf.Method.t ->string ->t ->(Piaf.Response.t, [> Piaf.Error.t ]) Lwt_result.t =fun ?(headers = []) ?body ~meth target { token; client; version; _ } ->let open Lwt_result.Syntax inlet target = Versions.Http.to_path version ^ target inlet auth_header = ("Authorization", "Bot " ^ token) inlet ua_header = ("User-Agent", user_agent) inlet headers =headers @ [ auth_header; ua_header; ("Accept", "application/json") ]inL.debug (fun m -> m "making request to %s" target);let* res = Piaf.Client.request client ~headers ?body ~meth target inif Piaf.Status.is_successful res.status then Lwt.return (Ok res)elselet* err_str = Piaf.Body.to_string res.body inlet err = ApiError.t_of_yojson (Yojson.Safe.from_string err_str) inL.warn (fun m ->m "http request failed %a@.%a" ApiError.pp err Piaf.Response.pp_hum res);Lwt.return (Error (`Msg ("discord http error: " ^ ApiError.message err)))let get ?headers url t = do_request ?headers ~meth:`GET url tlet post ?(headers = []) ?body url t =let headers = headers @ [ ("Content-Type", "application/json") ] inlet body =body |> Option.map Fun.(Yojson.Safe.to_string %> Piaf.Body.of_string)indo_request ~headers ?body ~meth:`POST url t
(library(name discord_models)(public_name discopotty.models)(preprocess(pps ppx_deriving.show ppx_deriving.ord ppx_yojson_conv))(libraries containers relog.lib uri yojson))
type t
type t = {id : Snowflake.t;channel_id : Snowflake.t;guild_id : Snowflake.t option;content : string;type_ : int; [@key "type"]}[@@deriving yojson] [@@yojson.allow_extra_fields]module Utils = structlet wrap ~c s =let c_len = String.length c inlet len = String.length s inlet buf = Bytes.create (len + (2 * c_len)) inBytes.blit_string c 0 buf 0 c_len;Bytes.blit_string s 0 buf c_len len;Bytes.blit_string c 0 buf (len + c_len) c_len;Bytes.unsafe_to_string buflet ( & ) x y a = x a |> ylet ( || ) f a = f alet bold = wrap ~c:"**"let b = boldlet strong = boldlet italic = wrap ~c:"_"let i = italiclet it = italiclet verbatim = wrap ~c:"`"let v = verbatimlet code = verbatimlet _setup_ppf =let wrap : or_else:(Format.stag -> string) -> Format.stag -> string =fun ~or_else -> function| Format.String_tag s -> (match String.trim s with| "bold" | "b" | "strong" -> "**"| "italic" | "i" | "it" -> "_"| "verbatim" | "v" | "code" | "~" -> "`"| _ -> "")| t -> or_else tinlet k ppf =let fns = Format.pp_get_formatter_stag_functions ppf () inlet mark_tags = Format.pp_get_mark_tags ppf () inFormat.pp_set_tags ppf true;Format.pp_set_mark_tags ppf true;Format.pp_set_formatter_stag_functions ppf{fns withmark_open_stag = wrap ~or_else:fns.mark_open_stag;mark_close_stag = wrap ~or_else:fns.mark_close_stag;};fun () ->Format.pp_set_formatter_stag_functions ppf fns;Format.pp_set_mark_tags ppf mark_tagsinklet fprintf ppf fmt =let restore = _setup_ppf ppf inFormat.kfprintf (fun _ -> restore ()) ppf fmtlet kfprintf ~k ppf fmt =let restore = _setup_ppf ppf inFormat.kfprintf(fun ppf ->let out = k ppf inrestore ();out)ppf fmtendlet fmt fmt =let buf = Buffer.create 64 inUtils.kfprintf~k:(fun ppf ->Format.pp_print_flush ppf ();Buffer.contents buf)(Format.formatter_of_buffer buf)fmt
type t = string [@@deriving yojson]let discord_epoch = 1420070400000(* let t_of_yojson = function| `String s | `Intlit s -> Int64.of_string s| _ -> assert false *)
type t
module L = (val Relog.logger ~namespace:__MODULE__ ())module Raw = structtype json = Yojson.Safe.tlet yojson_of_json : json -> json = Obj.magiclet json_of_yojson : json -> json = Obj.magictype t = { op : int; d : json option; s : int option; t : string option }[@@deriving yojson]let make ?d ?s ?t () op = { op; d; s; t }endmodule Dir = structtype recv = [ `recv ]type send = [ `send ]type 'a bidi = [< recv | send ] as 'aendmodule type Impl = sigtype _ tval op : _ t -> intval of_raw : Raw.t -> Dir.recv tval to_raw : Dir.send t -> Raw.tendmodule type Intf = siginclude Impltype recv = Dir.recv ttype send = Dir.send tval of_json : Raw.json -> Dir.recv tval of_string : string -> Dir.recv tval of_bytes : bytes -> Dir.recv tval to_json : Dir.send t -> Raw.jsonval to_string : Dir.send t -> stringval to_bytes : Dir.send t -> bytesendmodule Make : functor (I : Impl) -> Intf with type 'a t := 'a I.t =functor(I : Impl)->structinclude Itype recv = Dir.recv ttype send = Dir.send tlet of_json json = Raw.t_of_yojson json |> of_rawlet of_string str = Yojson.Safe.from_string str |> of_jsonlet of_bytes b = Bytes.unsafe_to_string b |> of_stringlet to_json t = to_raw t |> Raw.yojson_of_tlet to_string t = to_json t |> Yojson.Safe.to_stringlet to_bytes t = to_string t |> Bytes.unsafe_of_stringend
open Containersmodule L = (val Relog.logger ~namespace:__MODULE__ ())module F = Relog.Fieldmodule Ws_Conn = Websocket.Make (Gateway_payload)module Pl = Gateway_payloadtype t = {mutable state : state;mutable ws : Ws_Conn.t;mutable disconnect : unit -> unit;ev_pipe : (Events.t, [ `r | `w ]) Lwt_pipe.t;}and state =| Greeting of conn| Identifying of hb| Resuming of session_info * hb| Connected of session_info * hband conn = Fresh | Reconnection of session_infoand session_info = { id : string; seq : int }and hb = {mutable interval : float;mutable preempt : ?interval:float -> unit -> unit;mutable ack : unit -> unit;mutable cancel : unit -> unit;}let make_heartbeat ?err fn interval =let err =Option.get_or~default:(fun () -> failwith "no ACK of last heartbeat received")errinlet stub = Fun.const () inlet out ={ interval; preempt = (fun ?interval:_ -> stub); ack = stub; cancel = stub }inlet rec loop () =let open Lwt.Syntax inlet acked = ref false inlet () = fn () inlet p_preempt, u_preempt = Lwt.wait () inlet p_sleep = Lwt_unix.sleep out.interval |> Lwt.map (Fun.const `Sleep) inout.ack <- (fun () -> acked := true);out.cancel <- (fun () -> Lwt.wakeup_later u_preempt `Cancel);out.preempt <-(fun ?(interval = interval) () ->Lwt.wakeup_later u_preempt (`Preempt interval));let* r = Lwt.pick [ p_sleep; p_preempt ] inmatch (r, !acked) with| `Sleep, true -> loop ()| `Preempt interval, _ ->out.interval <- interval;loop ()| `Sleep, false ->err ();Lwt.return ()| `Cancel, _ -> Lwt.return ()inLwt.async loop;outlet with_ws_params ?(zlib = false) ~enc ~version uri =(* let enc = match enc with `json -> "json" | `etf -> "etf" in *)let enc = match enc with `json -> "json" inlet uri = Uri.with_path uri "/" inUri.with_query uri([ ("encoding", [ enc ]); ("v", [ Versions.Gateway.to_string version ]) ]@ if zlib then [ ("compress", [ "zlib-stream" ]) ] else [])let session_logger : t -> (module Relog.Logger.S) =fun t ->Relog.clone~fields:F.[lazy_int "seq" (fun () ->match t.state with| Connected ({ seq; _ }, _)| Greeting (Reconnection { seq; _ })| Resuming ({ seq; _ }, _) ->seq| _ -> -1);lazy_str "session_id" (fun () ->match t.state with| Connected ({ id; _ }, _)| Greeting (Reconnection { id; _ })| Resuming ({ id; _ }, _) ->id| _ -> "<not connected>");lazy_bool "reconn" (fun () ->match t.state with| Resuming _ | Greeting (Reconnection _) -> true| _ -> false);](module L)let state_reducer ~(session_logger : (module Relog.Logger.S)) ~forward_event~send_payload ~on_ready ~token state pl =let module L = (val session_logger) inlet make_hb interval =make_heartbeat(fun () ->L.info (fun m ->m "sending heartbeat" ~fields:F.[ float "hb_interval" interval ]);send_payload Pl.heartbeat)intervalinmatch (state, pl) with| Greeting Fresh, Pl.Hello hb ->let id = Pl.Identify.make token inL.info (fun m ->m "got greeting, identifying (intents=%a)" Pl.Intents.pp id.intents);send_payload (Pl.Identify id);let hb_secs = Float.of_int hb /. 1_000. inlet hb = make_hb hb_secs in`Update (Identifying hb)| Greeting (Reconnection ({ id; seq; _ } as info)), Hello hb ->L.info (fun m ->m "got greeting, resuming session '%s' with seq=%d" id seq);send_payload (Pl.make_resume ~token ~session_id:id ~seq);let hb_secs = Float.of_int hb /. 1_000. inlet hb = make_hb hb_secs in`Update (Resuming (info, hb))| Greeting _conn, InvalidSession _ ->L.warn (fun m -> m "invalid session during initial greeting");`Invalidated| Greeting _, Heartbeat ->L.warn (fun m -> m "got hearbeat request during greeting, ignoring...");`NoUpdate| Greeting _, HeartbeatACK ->L.warn (fun m -> m "got hearbeat ack during handshake, ignoring...");`NoUpdate| Greeting Fresh, Reconnect ->L.warn (fun m ->m "got reconnection request during greeting, obliging...");`Retry| Greeting (Reconnection info), Reconnect ->L.warn (fun m ->m "got reconnection request during reconnection greeting, obliging...");`RetryWith info| Identifying hb, Dispatch (seq, Events.Ready info) ->let s_id = info.session_id inL.info (fun m ->m "session is ready"~fields:F.[ int "version" info.v; str "id" s_id; int "seq" seq ]);on_ready ();`Update (Connected ({ id = s_id; seq }, hb))| (Identifying hb | Resuming (_, hb) | Connected (_, hb)), Hello new_hb ->L.warn (fun m -> m "got new greeting, updating heartbeat_interval");let hb_secs = Float.of_int new_hb /. 1_000. inhb.preempt ~interval:hb_secs ();`NoUpdate| Identifying hb, InvalidSession _ ->L.err (fun m -> m "session was invalidated while identifying");hb.cancel ();`Invalidated| Identifying hb, Reconnect ->L.warn (fun m -> m "got reconnection request while identifying");hb.cancel ();`Retry| (Greeting _ | Identifying _), Dispatch _ ->L.warn (fun m ->m "received dispatch during initial handshake, ignoring...");`NoUpdate| (Identifying hb | Resuming (_, hb) | Connected (_, hb)), Heartbeat ->L.info (fun m -> m "requested heartbeat, obliging...");hb.preempt ();`NoUpdate| (Identifying hb | Resuming (_, hb) | Connected (_, hb)), HeartbeatACK ->L.debug (fun m -> m "got hearbeat ack");hb.ack ();`NoUpdate| Resuming (_, hb), InvalidSession _ ->L.warn (fun m ->m "couldn't resume session, waiting for %fs and identifying..." 3.4);let id = Pl.Identify.make token inL.info (fun m ->m "got greeting, identifying (intents=%a)" Pl.Intents.pp id.intents);Lwt.async (fun () ->Lwt_unix.sleep 3.4|> Lwt.map (fun () -> send_payload (Pl.Identify id)));`Update (Identifying hb)| Resuming (info, hb), Reconnect ->hb.cancel ();`RetryWith info| Resuming (({ id; _ } as i), hb), Dispatch (e_seq, Resumed) ->on_ready ();L.info (fun m -> m "successfully resumed session '%s'" id);`Update (Connected ({ i with seq = e_seq }, hb))| Resuming (({ seq; _ } as i), hb), Dispatch (e_seq, e) ->L.info (fun m ->m "forwarding replayed event"~fields:F.[ int "seq" seq; int "event_seq" e_seq ]);forward_event e;`Update (Connected ({ i with seq = e_seq }, hb))| Connected (({ id; seq; _ } as info), hb), Reconnect ->L.warn (fun m ->m "got reconnection request" ~fields:F.[ str "id" id; int "seq" seq ]);hb.cancel ();`RetryWith info| Connected (({ seq; id; _ } as info), hb), InvalidSession resume ->L.warn (fun m ->m "session invalidated" ~fields:F.[ bool "resumable" resume ]);hb.cancel ();if resume then (L.info (fun m -> m "will try to resume session '%s' on seq=%d" id seq);`RetryWith info)else `Retry| Connected (({ seq; _ } as i), hb), Dispatch (e_seq, e) ->L.info (fun m ->m "forwarding event"~fields:F.[ int "seq" seq; int "event_seq" e_seq ]);forward_event e;`Update (Connected ({ i with seq = e_seq }, hb))let create ?(zlib = false) ?(version = Versions.Gateway.V8) token uri =let open Lwt_result.Syntax inlet uri = uri |> with_ws_params ~zlib ~version ~enc:`json inlet p_init, u_init = Lwt.wait () inlet rec manager ?t () =let p_connected, u_connected = Lwt.wait () inlet p_closed, u_closed = Lwt.wait () inlet ws_conn_handler : Ws_Conn.handler =fun ws ->let disconnect () =Lwt.wakeup_later u_closed `Disconnect;Ws_Conn.close ~code:`Going_away wsinlet t =match t with| Some t ->t.ws <- ws;t| None ->{state = Greeting Fresh;ws;ev_pipe = Lwt_pipe.create ~max_size:10 ();disconnect;}inlet module L = (val session_logger t) inlet forward_event ev =Lwt.async (fun () ->Lwt_pipe.write_exn t.ev_pipe ev|> Lwt.map (fun () -> L.debug (fun m -> m "wrote to events pipe")))inlet send_payload =let bucket = Token_bucket.make ~capacity:1 2. infun pl ->Lwt.async (fun () ->Token_bucket.take bucket|> Lwt.map (fun () -> Ws_Conn.send t.ws pl))inlet on_ready () = Lwt.wakeup_later u_connected (Ok t) inlet invalidated = ref false inlet handle_payload =let f' =state_reducer~session_logger:(module L)~forward_event ~send_payload ~on_ready ~tokeninfun pl ->match f' t.state pl with| `NoUpdate -> ()| `Update st -> t.state <- st| `Retry ->Ws_Conn.close ~code:`Normal_closure t.ws;Lwt.wakeup_later u_closed (`Retry None)| `RetryWith info ->Ws_Conn.close ~code:`Abnormal_closure t.ws;Lwt.wakeup_later u_closed (`Retry (Some info))| `Invalidated -> invalidated := trueinfun frame ->match (frame, !invalidated) with| Payload pl, false -> handle_payload pl| Payload _, true -> ()| Close code, _ ->L.warn (fun m ->m "session was closed with code %a" Websocket.Close_code.pp code);let reason =(* Make (or extend) type for Discord error codes *)match code with| `Other 4000 | `Other 4007 | `Other 4009 -> `Retry None| `Other 4004 -> `Invalid "invalid token"| _ -> `Invalid "unknown"inLwt.wakeup_later u_closed reasoninlet* () = Ws_Conn.create ~zlib ~handler:ws_conn_handler uri inlet* t = p_connected inif Lwt.is_sleeping p_init then Lwt.wakeup_later u_init (Ok t);let* reason = p_closed |> Lwt_result.ok inmatch reason with| `Retry None ->t.state <- Greeting Fresh;manager ~t ()| `Retry (Some info) ->t.state <- Greeting (Reconnection info);manager ~t ()| `Disconnect -> Lwt_result.return ()| `Invalid msg -> Lwt_result.fail (`Discord msg)inLwt.async (fun () ->manager ()|> Lwt.map (function| Ok () -> ()| Error e -> failwith (Error.to_string e)));p_initlet events { ev_pipe; _ } = ev_pipelet disconnect { disconnect; _ } = disconnect ()
open Containersmodule L = (val Relog.logger ~namespace:__MODULE__ ())type t = {capacity : int;capacity_ns : int64;ns_per_token : int64;mutable tokens : int64;mutable ts : Mtime.Span.t;waiters : waiter CCDeque.t;}and waiter = Waiter of int64 * unit Lwt.ulet check_capacity ~n { capacity; _ } =if n > capacity thenraise (Invalid_argument "can't take more than bucket's capacity")let make ~capacity ?init rate =let ns_per_token = Int64.of_float (1e9 /. rate |> ceil) inlet init = match init with Some i -> min capacity i | None -> capacity in{capacity;capacity_ns = Int64.(of_int capacity * ns_per_token);ns_per_token;tokens = Int64.(of_int init * ns_per_token);ts = Mtime_clock.elapsed ();waiters = CCDeque.create ();}let capacity { capacity; _ } = capacitylet rate { ns_per_token; _ } = Int64.to_float ns_per_token /. 1e9let is_full { capacity_ns; tokens; _ } = Int64.(tokens >= capacity_ns)let fill t =if is_full t then telselet now = Mtime_clock.elapsed () inlet span = Mtime.Span.abs_diff now t.ts inlet diff_ns = Mtime.Span.to_uint64_ns span int.tokens <- Int64.(min t.capacity_ns (t.tokens + diff_ns));t.ts <- now;tlet try_take_ns_unsafe ~n t =let take' t =if Int64.(t.tokens >= n) then (t.tokens <- Int64.(t.tokens - n);true)else falseinif take' t then true else fill t |> take'let try_take ?(n = 1) t =check_capacity ~n t;if CCDeque.is_empty t.waiters thenlet n_ns = Int64.(of_int n * t.ns_per_token) intry_take_ns_unsafe ~n:n_ns telse falselet attend_waiters t =let rec next' () =match CCDeque.peek_front_opt t.waiters with| Some (Waiter (n, u)) ->if try_take_ns_unsafe ~n t then (CCDeque.remove_front t.waiters;Lwt.wakeup_later u ();next' ())elselet wait_ns = Int64.(max (n - t.tokens) 0L) inlet wait_secs = Int64.to_float wait_ns /. 1e9 inLwt.bind (Lwt_unix.sleep wait_secs) next'| None -> Lwt.return ()inLwt.async next'let take ?(n = 1) t =check_capacity ~n t;let n_ns = Int64.(of_int n * t.ns_per_token) inlet enqueue' () =let p, u = Lwt.wait () inCCDeque.push_back t.waiters (Waiter (n_ns, u));pinmatch CCDeque.is_empty t.waiters with| true ->if try_take_ns_unsafe ~n:n_ns t then Lwt.return ()elselet p = enqueue' () inattend_waiters t;p| false -> enqueue' ()let take_then ~f ?n t = take ?n t |> Lwt.map (fun () -> f ())let wrap_take ~f t ?(n = 1) () = Lwt.bind (take ~n t) (fun () -> f)
module Http = structtype t = V8let to_string = function V8 -> "8"let to_path t = "/api/v" ^ to_string tendmodule Gateway = structtype t = V8let to_string = function V8 -> "8"let to_query t = ("v", [ to_string t ])endmodule Voice = structtype t = V4let to_string = function V4 -> "4"let to_query t = ("v4", [ to_string t ])end
open Globalsmodule L = (val Relog.logger ~namespace:__MODULE__ ())module Dir = Payload.Dirmodule Raw = Payload.Rawexception Invalid_payload of Raw.t * stringlet invalid_payload raw string = raise (Invalid_payload (raw, string))type _ t =| Identify : Dir.send t| SelectProtocol : Dir.send t| Ready : Dir.recv t| Heartbeat : Dir.send t| SessionDescription : Dir.recv t| Speaking : _ Dir.bidi t| HeartbeatACK : Dir.recv t| Resume : Dir.send t| Hello : Dir.recv t| Resumed : Dir.recv t| ClientDisconnect : Dir.recv tinclude Payload.Make (structtype nonrec 'a t = 'a tlet op : type a. a t -> int =fun t ->match t with| Identify -> 0| SelectProtocol -> 1| Ready -> 2| Heartbeat -> 3| SessionDescription -> 4| Speaking -> 5| HeartbeatACK -> 6| Resume -> 7| Hello -> 8| Resumed -> 9| ClientDisconnect -> 13let of_raw raw =match (raw.Raw.op, raw.d) with| 2, Some _d -> Ready| 3, Some _d -> SessionDescription| 5, Some _d -> Speaking| 6, Some _d -> HeartbeatACK| 8, Some _d -> Hello| 9, Some _d -> Resumed| 13, Some _d -> ClientDisconnect| n, _ when n <= 11 ->invalid_payload raw(Format.asprintf "payload with opcode=%d is not recv type" n)| _ -> invalid_payload raw "unrecognized opcode"let to_raw t =op t|>match t with| Identify -> Raw.make ()| SelectProtocol -> Raw.make ()| Heartbeat -> Raw.make ()| Speaking -> Raw.make ()| Resume -> Raw.make ()end)
open Containersmodule L = (val Relog.logger ~namespace:__MODULE__ ())module F = Relog.Fieldmodule WS_Client = Websocketaf_lwt.Client (Gluten_lwt_unix.Client)module WSS_Client = Websocketaf_lwt.Client (Gluten_lwt_unix.Client.SSL)module Close_code = structinclude Websocketaf.Websocket.Close_codelet is_standard = function #standard -> true | _ -> falselet is_std = is_standardlet pp =let pp' fmt = function| `Normal_closure -> Format.fprintf fmt "ok"| `Going_away -> Format.fprintf fmt "going away"| `Protocol_error -> Format.fprintf fmt "protocol error"| `Unsupported_data -> Format.fprintf fmt "unsupported data"| `No_status_rcvd -> Format.fprintf fmt "no status received"| `Abnormal_closure -> Format.fprintf fmt "abnormal closure"| `Invalid_frame_payload_data ->Format.fprintf fmt "invalid frame payload data"| `Policy_violation -> Format.fprintf fmt "policy violation"| `Message_too_big -> Format.fprintf fmt "message too big"| `Mandatory_ext -> Format.fprintf fmt "mandatory exit"| `Internal_server_error -> Format.fprintf fmt "internal server error"| `TLS_handshake -> Format.fprintf fmt "TLS handshake"| `Other _ -> Format.fprintf fmt "_"infun fmt t -> Format.fprintf fmt "(%d %a)" (to_int t) pp' tendlet () = Ssl.init ()let max_payload_len = 4096let connect_ssl host fd =L.info (fun m -> m "initializing SSL context");let ctx = Ssl.create_context Ssl.TLSv1_2 Ssl.Client_context inlet s = Lwt_ssl.embed_uninitialized_socket fd ctx inlet ssl_sock = Lwt_ssl.ssl_socket_of_uninitialized_socket s inSsl.set_client_SNI_hostname ssl_sock host;Ssl.set_hostflags ssl_sock [ No_partial_wildcards ];Ssl.set_host ssl_sock host;L.info (fun m -> m "performing SSL handshake for socket");let open Lwt.Syntax inlet+ socket_or_error =Lwt.catch(fun () -> Lwt_result.ok (Lwt_ssl.ssl_perform_handshake s))(function| Ssl.Connection_error _ssl_error ->let msg = Ssl.get_error_string () inL.err (fun m -> m "error performing SSL handshake: %s" msg);Lwt_result.fail (`Msg msg)| _ -> assert false)inmatch socket_or_error with| Ok ssl_socket ->let _ssl_version = Ssl.version ssl_sock inlet ssl_cipher = Ssl.get_cipher ssl_sock inL.info (fun m ->m "SSL connection using TLS1.2 / %s" (Ssl.get_cipher_name ssl_cipher));Ok ssl_socket| Error e ->let verify_result = Ssl.get_verify_result ssl_sock inif verify_result <> 0 thenL.err (fun m -> m "verify_result=%d" verify_result);Error elet open_socket ?(ssl = false) ?(port = if ssl then 443 else 80) host =let open Lwt_result.Syntax inlet* addresses =Lwt_unix.getaddrinfo host (Int.to_string port) [ Unix.(AI_FAMILY PF_INET) ]|> Lwt_result.catch|> Lwt_result.map_err (fun e -> `Exn e)inlet fd = Lwt_unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 inL.info (fun m -> m "connecting socket");let* () =let rec inner = function| addr :: xs ->Lwt.try_bind(fun () -> Lwt_unix.connect fd addr.Unix.ai_addr)(fun () -> Lwt_result.return ())(fun _exn -> inner xs)| [] ->Lwt_result.fail(`Msg(Format.asprintf "couldn't connect socket to %s:%d" host port))ininner addressesinlet+ socket =if ssl then connect_ssl host fd else Lwt_ssl.plain fd |> Lwt_result.returninsocketlet gen_nonce =let alphanum ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"inlet len = String.length alphanum inlet rnd = Random.State.make_self_init () infun ?(rnd = rnd) n ->let str = Bytes.create n infor i = 0 to pred n doBytes.set str i alphanum.[Random.int len rnd]done;str |> Bytes.to_stringlet _uri_info uri =let ssl =match Uri.scheme uri with| Some "ws" | Some "http" -> false| Some "wss" | Some "https" | None -> true| Some scheme -> failwith ("unsupported websocket scheme: " ^ scheme)inlet host = Uri.host uri |> Option.get_exn inlet port = Uri.port uri |> Option.get_or ~default:(if ssl then 443 else 80) inlet resource = Uri.path_and_query uri in(host, port, ssl, resource)type enc = [ `json ]module type Connection = sigtype conn_info = {addr : string * int;socket : Lwt_ssl.socket;enc : [ `json ];zlib : bool;}type sendtype recvtype ttype frame = Close of Close_code.t | Payload of recvtype handler = t -> frame -> unitval info : t -> conn_infoval send : t -> send -> unitval close : ?code:Close_code.t -> t -> unitval create :?zlib:bool ->?enc:enc ->handler:handler ->Uri.t ->(unit, Error.t) Lwt_result.tendmodule Make : functor (P : Payload.Intf) ->Connection with type send := P.send and type recv := P.recv =functor(P : Payload.Intf)->structtype conn_info = {addr : string * int;socket : Lwt_ssl.socket;enc : [ `json ];zlib : bool;}type send = P.sendtype recv = P.recvtype t = {info : conn_info;send : send -> unit;close : ?code:Close_code.t -> unit -> unit;}type frame = Close of Close_code.t | Payload of recvtype handler = t -> frame -> unitlet info { info; _ } = infolet send { send; _ } pl = send pllet close ?code { close; _ } = close ?code ()let rec _connect :enc:enc ->zlib:bool ->ssl:bool ->string ->int ->string ->handler:handler ->(unit, [> `Msg of string ]) Lwt_result.t =fun ~enc ~zlib ~ssl host port resource ~handler ->let open Lwt_result.Syntax inL.info (fun m -> m "opening socket (%s:%d) ssl=%b" host port ssl);let* socket = open_socket ~ssl ~port host inlet conn_info = { addr = (host, port); socket; enc; zlib } inL.info (fun m -> m "initiating websocket handshake");let nonce = gen_nonce 20 inlet p, u = Lwt.wait () inlet error_handler = function| `Handshake_failure (rsp, _)when Httpaf.(Status.is_redirection rsp.Response.status) ->let loc =Httpaf.Headers.get rsp.headers "Location" |> Option.get_exninL.warn (fun m ->m "got redirection to '%s' during websocket handshake" loc~fields:Relog.Field.[ str "location" loc ]);Lwt.wakeup_later u (Error (`Redir loc))| `Handshake_failure (rsp, _body) ->L.err (fun m ->m "error during websocket handshake:@.%a" Httpaf.Response.pp_humrsp);let reason = rsp.reason inLwt.wakeup_later u(Error (`Msg ("failed to handshake websocket: " ^ reason)))| _ -> assert falseinlet websocket_handler wsd =let send pl =L.debug (fun m ->let pp = P.to_json pl |> Yojson.Safe.pretty_to_string inm "sending payload:@.%s" pp);let out = pl |> P.to_bytes inlet len = Bytes.length out inlet rec send' n =match len - n with| len when len > max_payload_len ->Websocketaf.Wsd.send_bytes wsd ~kind:`Text out ~off:n~len:max_payload_len;send' (n + max_payload_len)| len -> Websocketaf.Wsd.send_bytes wsd ~kind:`Text out ~off:n ~leninsend' 0inlet close ?code () = Websocketaf.Wsd.close ?code wsd inLwt.wakeup_later u (Ok ());let h_frame = handler { send; close; info = conn_info } inlet frame ~opcode ~is_fin bs ~off ~len =L.debug (fun m ->m "frame"~fields:F.[int "opcode" (Websocketaf.Websocket.Opcode.to_int opcode);bool "is_fin" is_fin;int "len" len;]);match opcode with| `Connection_close ->if len < 2 then failwith "no close code in frame";let close_code =Bigstringaf.get_int16_be bs off |> Close_code.of_int_exninL.warn (fun m ->m "got close frame with code=%a" Close_code.pp close_code);h_frame (Close close_code)| `Binary | `Text ->(* TODO zlib transport compression *)let pl_json =tryBigstringaf.substring bs ~off ~len |> Yojson.Safe.from_stringwith exn ->L.err (fun m ->m "invalid json payload"~fields:F.[ str "exn" (Printexc.to_string exn) ]);raise exninL.debug (fun m ->m "got websocket payload:@.%s"(pl_json |> Yojson.Safe.pretty_to_string));let () =match P.of_json pl_json with| (exceptionPpx_yojson_conv_lib__Yojson_conv.Of_yojson_error (exn, _))| (exception exn) ->L.warn (fun m ->m "couldn't parse payload, ignoring..."~fields:F.[ str "exn" (Printexc.to_string exn) ])| pl -> h_frame (Payload pl)in()| `Continuation ->L.err (fun m -> m "continuation frame unsupported");assert false| `Ping -> L.warn (fun m -> m "got PING frame, ignoring... (?)")| `Pong -> L.warn (fun m -> m "got PONG frame, ignoring... (?)")| `Other _ ->L.warn (fun m -> m "got non standard code frame, ignoring...")inlet eof () = L.err (fun m -> m "websocket received EOF") in{ Websocketaf.Client_connection.frame; eof }inlet do_handshake =if ssl then WSS_Client.connect socketelse WS_Client.connect (Lwt_ssl.get_fd socket)inlet* _ =do_handshake ~nonce ~host ~port ~resource ~error_handler~websocket_handler|> Lwt_result.catch|> Lwt_result.map_err (fun e -> `Exn e)inLwt.bind p (function| Error (`Redir loc) ->let host, port, ssl, resource = _uri_info (Uri.of_string loc) in_connect ~enc ~zlib ~ssl host port resource ~handler| Error (`Msg _) as err -> Lwt.return err| Ok () -> Lwt.return (Ok ()))let create ?(zlib = false) ?(enc = `json) ~handler uri =L.info (fun m -> m "connecting to gateway at '%a'" Uri.pp uri);let host, port, ssl, resource = _uri_info uri in_connect ~enc ~zlib ~ssl host port resource ~handlerend
"clean": "bsb -clean-world","build": "bsb -make-world","watch": "bsb -make-world -w"
"bot": "esy x discopotty","test": "esy dune test","format": "esy dune build @fmt --auto-promote","doc": "esy dune build @doc"},"dependencies": {"@opam/angstrom": "0.15.0","@opam/bitstring": "4.1.0","@opam/containers": "3.2","@opam/containers-data": "3.2","@opam/dune": ">=2.8","@opam/httpaf-lwt-unix": "*","@opam/lwt": "5.4.0","@opam/lwt-pipe": "0.1","@opam/mtime": "1.2.0","@opam/piaf": "*","@opam/ppx_bitstring": "4.1.0","@opam/ppx_deriving": "5.2.1","@opam/ppx_yojson_conv": "v0.14.0","@opam/ptime": "0.8.5","@opam/toml": "6.0.0","@opam/uri": "4.1.0","@opam/websocketaf": "*","@opam/websocketaf-lwt-unix": "*","@opam/yojson": "1.7.0","ocaml": "~4.11.0","relog": "*"
"dependencies": {"@discordjs/uws": "^11.149.1","@quartz55/relog": "github:quartz55/relog#master","bs-fluture": "^0.4.1","discord.js": "github:discordjs/discord.js#master","erlpack": "github:discordapp/erlpack","fluture": "^10.3.1","let-anything": "^1.0.3","node-opus": "^0.3.1","rationale": "^0.1.10","sodium": "^3.0.2","wonka": "^1.4.4","zlib-sync": "^0.1.4"}}
"resolutions": {"@opam/httpaf": "anmonteiro/httpaf:httpaf.opam#0555dde","@opam/httpaf-lwt": "anmonteiro/httpaf:httpaf-lwt.opam#0555dde","@opam/httpaf-lwt-unix": "anmonteiro/httpaf:httpaf-lwt-unix.opam#0555dde","@opam/piaf":"anmonteiro/piaf:piaf.opam#01601aeda4a415d335f61ac13fb738cdb7b834ea","@opam/websocketaf":"link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf.opam","@opam/websocketaf-lwt":"link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt.opam","@opam/websocketaf-lwt-unix":"link:/Users/jcosta/Documents/Workspace/contrib/websocketaf/websocketaf-lwt-unix.opam","@opam/conf-pkg-config": "1.3","@opam/conf-libssl": "2","@esy-ocaml/reason": "reasonml/reason:reason.json#98e6c29","relog": "quartz55/relog-native#d74d484"},"repository": {"type": "git","url": "git+https://github.com/quartz55/discopotty-re.git"},"author": "","license": "ISC","bugs": { "url": "https://github.com/quartz55/discopotty-re/issues" },"homepage": "https://github.com/quartz55/discopotty-re#readme"}
(tests(names token_bucket)(package discopotty)(librariesdiscordalcotestalcotest-lwtlwtlwt.unixmtimemtime.clock.osqcheck-coreqcheck-alcotest))
open Containersmodule M = Discord.Token_bucketmodule U = structlet ns_conv =let conv n e = Int64.(n / (10L ** e)) infun ?(unit = `ns) n ->match unit with| `ns -> n| `us -> conv n 3L| `ms -> conv n 6L| `s -> conv n 9Llet ( -|> ) n u = ns_conv ~unit:u nlet take_measure ?(unit = `ns) ~n b =let open Lwt.Syntax inlet t1 = Mtime_clock.elapsed_ns () inlet+ () = M.take ~n b inInt64.(Mtime_clock.elapsed_ns () - t1) |> ns_conv ~unitendlet test_invariants () =let exn = Invalid_argument "can't take more than bucket's capacity" inlet b = M.make ~capacity:10 1. inAlcotest.check_raises "take over capacity" exn (fun () ->M.try_take ~n:11 b |> ignore);Alcotest.(check bool) "initially full" true (M.is_full b);Alcotest.(check bool) "initial take" true (M.try_take ~n:10 b);Alcotest.(check bool) "empty take" false (M.try_take ~n:10 b)let test_correct_waiting_time =QCheck.Test.make ~count:1000 ~name:"correct_waiting_time"QCheck.(float_range 1000. 10000.)(fun rate ->(* would take too long otherwise zzzz... *)QCheck.assume (rate >. 0.5);let ns_per_token = Int64.of_float (1e9 /. rate |> ceil) inlet b = M.make ~capacity:1 ~init:0 rate inlet check =let open Lwt.Syntax inlet+ ns = U.take_measure ~n:1 b inInt64.(ns >= ns_per_token)inLwt_main.run check)let test_concurrent _switch () =let open Lwt.Syntax inlet b = M.make ~capacity:1 ~init:0 10. inlet t1 = Mtime_clock.elapsed_ns () inlet* () = List.(1 -- 10) |> List.map (fun _ -> M.take b) |> Lwt.join inlet d_ns = Int64.(Mtime_clock.elapsed_ns () - t1) inif Int64.(U.(d_ns -|> `s) <> 1L) thenAlcotest.failf "expected around 1 sec waiting but got %Lds (%Ldms) (%Ldns)"U.(d_ns -|> `s)U.(d_ns -|> `ms)d_ns;Lwt.return ()let () =let lwt =Alcotest_lwt.(run ~and_exit:false "Token_bucket_lwt"[ ("all", [ test_case "concurrent" `Quick test_concurrent ]) ])inlet sync () =Alcotest.(run "Token_bucket"[( "all",[test_case "invariants" `Quick test_invariants;QCheck_alcotest.to_alcotest test_correct_waiting_time;] );])inmatch Lwt_main.run lwt with _ | (exception _) -> sync ()