update dependencies and run full refresh

main
Vladimir Mandic 2023-12-06 15:00:47 -05:00
parent b0e6aa57de
commit 6902405342
129 changed files with 13289 additions and 28572 deletions

View File

@ -1,6 +1,6 @@
# @vladmandic/human
Version: **3.1.2**
Version: **3.2.0**
Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition**
Author: **Vladimir Mandic <mandic00@live.com>**
@ -9,7 +9,14 @@
## Changelog
### **HEAD -> main** 2023/09/18 mandic00@live.com
### **3.2.0** 2023/12/06 mandic00@live.com
### **origin/main** 2023/12/06 aug@iterative.day
- https://github.com/vladmandic/human/issues/402
### **release: 3.1.2** 2023/09/18 mandic00@live.com
- full rebuild

View File

@ -8,6 +8,7 @@ For details on other demos see Wiki: [**Demos**](https://github.com/vladmandic/h
`index.html`: Full demo using `Human` ESM module running in Browsers,
Includes:
- Selectable inputs:
- Sample images
- Image via drag & drop

View File

@ -93,7 +93,7 @@ function addFace(face, source) {
e.preventDefault();
document.getElementById('description').innerHTML = canvas.title;
};
human.tf.browser.toPixels(face.tensor, canvas);
human.tf.browser.draw(face.tensor, canvas);
human.tf.dispose(face.tensor);
return canvas;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -240,7 +240,7 @@ async function detectFace() {
if (!current?.face?.tensor || !current?.face?.embedding) return false;
console.log('face record:', current.face); // eslint-disable-line no-console
log(`detected face: ${current.face.gender} ${current.face.age || 0}y distance ${100 * (current.face.distance || 0)}cm/${Math.round(100 * (current.face.distance || 0) / 2.54)}in`);
await human.tf.browser.toPixels(current.face.tensor, dom.canvas);
await human.tf.browser.draw(current.face.tensor, dom.canvas);
if (await indexDb.count() === 0) {
log('face database is empty: nothing to compare face with');
document.body.style.background = 'black';

View File

@ -70,7 +70,7 @@ async function selectFaceCanvas(face) {
if (face.tensor) {
title('Sorting Faces by Similarity');
const c = document.getElementById('orig');
await human.tf.browser.toPixels(face.tensor, c);
await human.tf.browser.draw(face.tensor, c);
const arr = db.map((rec) => rec.embedding);
const res = await human.match.find(face.embedding, arr);
log('Match:', db[res.index].name);
@ -97,7 +97,7 @@ async function selectFaceCanvas(face) {
canvas.tag.similarity = similarity;
// get best match
// draw the canvas
await human.tf.browser.toPixels(current.tensor, canvas);
await human.tf.browser.draw(current.tensor, canvas);
const ctx = canvas.getContext('2d');
ctx.font = 'small-caps 1rem "Lato"';
ctx.fillStyle = 'rgba(0, 0, 0, 1)';
@ -144,7 +144,7 @@ async function addFaceCanvas(index, res, fileName) {
gender: ${Math.round(100 * res.face[i].genderScore)}% ${res.face[i].gender}
emotion: ${emotion}
`.replace(/ /g, ' ');
await human.tf.browser.toPixels(res.face[i].tensor, canvas);
await human.tf.browser.draw(res.face[i].tensor, canvas);
const ctx = canvas.getContext('2d');
if (!ctx) return;
ctx.font = 'small-caps 0.8rem "Lato"';

View File

@ -223,7 +223,7 @@ async function calcSimmilarity(result) {
log('setting face compare baseline:', result.face[0]);
if (result.face[0].tensor) {
const c = document.getElementById('orig');
human.tf.browser.toPixels(result.face[0].tensor, c);
human.tf.browser.draw(result.face[0].tensor, c);
} else {
document.getElementById('compare-canvas').getContext('2d').drawImage(compare.original.canvas, 0, 0, 200, 200);
}

View File

@ -85,7 +85,7 @@ async function main() {
return;
}
dom.fps.innerText = `fps: ${Math.round(10000 / (t1 - t0)) / 10}`; // mark performance
human.tf.browser.toPixels(rgba, dom.output); // draw raw output
human.tf.browser.draw(rgba, dom.output); // draw raw output
human.tf.dispose(rgba); // dispose tensors
ctxMerge.globalCompositeOperation = 'source-over';
ctxMerge.drawImage(dom.background, 0, 0); // draw original video to first stacked canvas

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

19246
dist/human.esm.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

1116
dist/human.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

6
dist/human.node.js vendored

File diff suppressed because one or more lines are too long

822
dist/tfjs.esm.js vendored

File diff suppressed because one or more lines are too long

View File

@ -4,4 +4,4 @@
author: <https://github.com/vladmandic>'
*/
var e="4.11.0";var s="4.11.0";var t="4.11.0";var n="4.11.0";var r="4.11.0";var i="4.11.0";var h={tfjs:e,"tfjs-core":e,"tfjs-converter":s,"tfjs-backend-cpu":t,"tfjs-backend-webgl":n,"tfjs-backend-wasm":r,"tfjs-backend-webgpu":i};export{h as version};
var e="4.14.0";var s="4.14.0";var t="4.14.0";var n="4.14.0";var r="4.14.0";var i="4.14.0";var h={tfjs:e,"tfjs-core":e,"tfjs-converter":s,"tfjs-backend-cpu":t,"tfjs-backend-webgl":n,"tfjs-backend-wasm":r,"tfjs-backend-webgpu":i};export{h as version};

View File

@ -95,8 +95,8 @@
"@types/offscreencanvas": "^2019.7.3",
"@typescript-eslint/eslint-plugin": "^6.13.2",
"@typescript-eslint/parser": "^6.13.2",
"@vladmandic/build": "^0.9.2",
"@vladmandic/pilogger": "^0.4.8",
"@vladmandic/build": "^0.9.3",
"@vladmandic/pilogger": "^0.4.9",
"@vladmandic/tfjs": "github:vladmandic/tfjs",
"canvas": "^2.11.2",
"esbuild": "^0.19.8",
@ -111,6 +111,6 @@
"rimraf": "^5.0.5",
"tslib": "^2.6.2",
"typedoc": "0.25.4",
"typescript": "~5.1.0"
"typescript": "~5.3.0"
}
}

View File

@ -99,7 +99,7 @@ export class Env {
set ImageData(val) { this.#imageData = val; globalThis.ImageData = val; }
constructor() {
this.browser = typeof navigator !== 'undefined' && Object.keys(navigator).length !== 0;
this.browser = (typeof navigator !== 'undefined') && (typeof navigator.appVersion !== 'undefined');
this.node = (typeof process !== 'undefined') && (typeof process.versions !== 'undefined') && (typeof process.versions.node !== 'undefined');
this.tfjs = { version: tf.version['tfjs-core'] };
this.offscreen = typeof OffscreenCanvas !== 'undefined';

View File

@ -1,51 +1,51 @@
2023-09-18 12:49:46 DATA:  Build {"name":"@vladmandic/human","version":"3.1.2"}
2023-09-18 12:49:46 INFO:  Application: {"name":"@vladmandic/human","version":"3.1.2"}
2023-09-18 12:49:46 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2023-09-18 12:49:46 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.17.19","typescript":"5.1.6","typedoc":"0.23.28","eslint":"8.49.0"}
2023-09-18 12:49:46 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2023-09-18 12:49:46 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]}
2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":358}
2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957}
2023-09-18 12:49:46 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":675948,"outputBytes":320762}
2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965}
2023-09-18 12:49:46 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":675956,"outputBytes":320766}
2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003}
2023-09-18 12:49:46 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":676994,"outputBytes":320877}
2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1372,"outputBytes":667}
2023-09-18 12:49:46 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":675658,"outputBytes":319325}
2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1372,"outputBytes":1264969}
2023-09-18 12:49:46 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1939960,"outputBytes":1579985}
2023-09-18 12:49:46 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1939960,"outputBytes":2057229}
2023-09-18 12:49:50 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15}
2023-09-18 12:49:51 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
2023-09-18 12:49:51 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970}
2023-09-18 12:49:51 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17503,"outputBytes":9403}
2023-09-18 12:49:51 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791}
2023-09-18 12:49:59 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0}
2023-09-18 12:49:59 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2023-09-18 12:49:59 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
2023-09-18 12:49:59 INFO:  Done...
2023-09-18 12:49:59 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
2023-09-18 12:49:59 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
2023-09-18 12:49:59 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
2023-09-18 12:49:59 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
2023-09-18 12:49:59 STATE: Filter: {"input":"types/tfjs-core.d.ts"}
2023-09-18 12:50:00 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":211}
2023-09-18 12:50:00 STATE: Filter: {"input":"types/human.d.ts"}
2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"}
2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.esm.d.ts"}
2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.d.ts"}
2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.node-gpu.d.ts"}
2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.node.d.ts"}
2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.node-wasm.d.ts"}
2023-09-18 12:50:00 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2023-09-18 12:50:00 STATE: Models {"folder":"./models","models":12}
2023-09-18 12:50:00 STATE: Models {"folder":"../human-models/models","models":44}
2023-09-18 12:50:00 STATE: Models {"folder":"../blazepose/model/","models":4}
2023-09-18 12:50:00 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2023-09-18 12:50:00 STATE: Models {"folder":"../efficientpose/models","models":3}
2023-09-18 12:50:00 STATE: Models {"folder":"../insightface/models","models":5}
2023-09-18 12:50:00 STATE: Models {"folder":"../movenet/models","models":3}
2023-09-18 12:50:00 STATE: Models {"folder":"../nanodet/models","models":4}
2023-09-18 12:50:00 STATE: Models: {"count":58,"totalSize":380063249}
2023-09-18 12:50:00 INFO:  Human Build complete... {"logFile":"test/build.log"}
2023-12-06 14:57:40 DATA:  Build {"name":"@vladmandic/human","version":"3.2.0"}
2023-12-06 14:57:40 INFO:  Application: {"name":"@vladmandic/human","version":"3.2.0"}
2023-12-06 14:57:40 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2023-12-06 14:57:40 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.19.8","typescript":"5.3.3","typedoc":"0.25.4","eslint":"8.55.0"}
2023-12-06 14:57:40 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2023-12-06 14:57:40 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":358}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676002,"outputBytes":320790}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":676010,"outputBytes":320794}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677048,"outputBytes":320905}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1403,"outputBytes":690}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":675735,"outputBytes":319371}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1265002}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1940047,"outputBytes":1580115}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1940047,"outputBytes":2069972}
2023-12-06 14:57:42 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":14}
2023-12-06 14:57:44 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
2023-12-06 14:57:44 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970}
2023-12-06 14:57:44 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17499,"outputBytes":9399}
2023-12-06 14:57:44 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791}
2023-12-06 14:57:51 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0}
2023-12-06 14:57:51 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2023-12-06 14:57:51 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
2023-12-06 14:57:51 INFO:  Done...
2023-12-06 14:57:51 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
2023-12-06 14:57:51 STATE: Filter: {"input":"types/tfjs-core.d.ts"}
2023-12-06 14:57:52 ERROR: API-Extractor: {}
2023-12-06 14:57:52 STATE: Filter: {"input":"types/human.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.esm.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node-gpu.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node-wasm.d.ts"}
2023-12-06 14:57:52 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2023-12-06 14:57:52 STATE: Models {"folder":"./models","models":12}
2023-12-06 14:57:52 STATE: Models {"folder":"../human-models/models","models":44}
2023-12-06 14:57:52 STATE: Models {"folder":"../blazepose/model/","models":4}
2023-12-06 14:57:52 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2023-12-06 14:57:52 STATE: Models {"folder":"../efficientpose/models","models":3}
2023-12-06 14:57:52 STATE: Models {"folder":"../insightface/models","models":5}
2023-12-06 14:57:52 STATE: Models {"folder":"../movenet/models","models":3}
2023-12-06 14:57:52 STATE: Models {"folder":"../nanodet/models","models":4}
2023-12-06 14:57:52 STATE: Models: {"count":58,"totalSize":380063249}
2023-12-06 14:57:52 INFO:  Human Build complete... {"logFile":"test/build.log"}

File diff suppressed because it is too large Load Diff

View File

@ -23,3 +23,4 @@ export * from '@tensorflow/tfjs-backend-webgpu/dist/index.js';
// export versions, overrides version object from @tensorflow/tfjs
export { version } from 'dist/tfjs.version.js';
export const node = undefined;

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WZT3PbNhDFvwt7dZtIVtLGN/9RFU+s2mNnmkOmB5hcSajIBQcEFaudfvcOCUkACXCXuu577ydwAZIg9P3fxMCbSa6SDFaizk1ykZTCbJKrRGIGb79sTJH/5LStxCy5mk0+zS7fz/67OKW/AlZKu3ChsjqH6p2ttxSX9nKZFj/CVFPtZS6SdCPzTAMmV99PcVUaqbByhJ3QUryeGAe9y7qcegMQee7SqxrTNmDTIs+7yY/+0F9Vth+MNiKRTQXuRDWYtjKRX4kUBtONSGTXUJlaD8cPOkHYCMwG441IZCVKM5htRCKrXv+GdDhtZSJfgq4UDuatHOT/8giFMOkmXK9tedSCvYMq1bI0/r1i9uWJ4fQubvr+06+TD/7CXTb+x/7691m+g6NlsjIC44vK0o4OalXK+LqwgEYlwpUsZC60NNGbyiKch54llUFeRaaprY+ap2UPkeaiqhxiGSFNpr95Y/gCGiF/LCv/gWpANzfnCXMy9abnw0d/ohvvixGGRDkXxdqJXGbCQOuO9tnSOj6y188Ctw4EWBfVu6bWDfmdmeMu7Oscd1Q3F1qUm96gj1GnUYTPdSEwDLdlKtd/sR2Dtv7zhMp+g9dbUYRZW6eSNyrb3ypcyXV0zp1MTXbj+gL7Ukk0g5ijgQM9Q9XbHXQwVqYgxOXwl3KnxY/gWecRPJ3C/C5SuEYjX0qlVsSAIj4WawxgMwAO2/VxWIY2DnJ8qfCjC5w82kBqlGa5vo2Dzgs1YqwdF4dcgODG6Cwc7F7LioE5Cwd7kDtAqDhg18ZBl1BtGKCzcDDi1ncyCZG5AbL9noECLQBBy5QgdRw0qt3lkijPQaE+C8wIjpM5CNFoJ7NbhXtcqSjjpFKIx3YTTVyOb+BBxCX5Bgr01G7LCZBvoEAEgg+/wLoANIJ5MIU2Cmo3AgTON1Cga9zf9j4p7ZfASeA+AK5xf1+INUQAbX1E/k+ZgYrk2zqXvxHpFjCbY130EZ7EUlS2v0ZUdgICUEc9j3WTi3/gSVVBgwZs59Hnq5VMJaDhf6FjHfMri/73vqMuYp/6ccqDwKwQehvDHLVzOGQ/A9M55FOD/gBDwX3fOfyl2gGDPljOoTZXyVAPFp76FlLeuNRhN9VPHspsegdogoePrbLZNwMaRR5/gHVVjmX3cdH17kljKEPr3ddYjsQ1BAc9tjoue1vrPJ5vlHGMO6khjc1tT+ZoC8AsvBpb5bNt4/tv4CPCEzlSsxEamGFPGkP5ui+jiKbO5dtXot3ABCvW11gOlnXQj7bIJrWsBvrgSRzFDjPWCadwjKfu+YKNP0XOFILkc+cU2wafg8PrMOdvsmIbhr7O8exZzuSuzznWx+WnA/npyPzlQP5yZH42kJ+NzD/IbTAbTuEY34Qu6jI2G05hD6Ht30zxv3MOGvFXDvgHiy4JuOsf03VjRRk/c26F8PDzf7TeFt4zGwAA"

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More