{"id":3128,"date":"2025-04-29T14:17:12","date_gmt":"2025-04-29T14:17:12","guid":{"rendered":"https:\/\/frimastudio.com\/?p=3128"},"modified":"2025-04-29T14:20:48","modified_gmt":"2025-04-29T14:20:48","slug":"the-frima-adventure-20-years-of-boldness","status":"publish","type":"post","link":"https:\/\/frimastudio.com\/en\/the-frima-adventure-20-years-of-boldness\/","title":{"rendered":"The Frima Adventure: 20 Years of Boldness"},"content":{"rendered":"<style>:root{--color-black: #0d0d1c;--color-white: #efeeeb;--color-white-pure: #ffffff;--color-gray: #d2d0c1;--color-gray-dark: #24272a;--color-blue: #2b79fc;--color-purple: #b25bee;--color-turquoise: #bef3df;--z-main: 1;--z-menu: 9;--z-loader: 10;--max-width: 1920px;--gutter: 24px;--scrollbar-width: 8px;--br-main: 16px}p{margin:0 0 3rem}p:last-child{margin-bottom:0}p.is-style-uppercase{text-transform:uppercase}p.is-style-preheading{color:#44bbd8;text-transform:uppercase}p.is-style-leadparagraph{font-weight:700}\n\/*# sourceMappingURL=data:application\/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9jc3MvX19zZXR0aW5ncy9fc3R5bGUtZ3VpZGUtdmFyaWFibGVzLnNjc3MiLCJwYXJ0cy9ndXRlbmJlcmcvY29yZS1wYXJhZ3JhcGgvc3R5bGUuc2NzcyIsImFzc2V0cy9jc3MvX19zZXR0aW5ncy9fdmFyaWFibGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFJRSx1QkFDQSx1QkFDQSw0QkFDQSxzQkFDQSwyQkFDQSxzQkFDQSx3QkFDQSwyQkFLQSxZQUNBLFlBQ0EsZUFLQSxvQkFDQSxlQUNBLHVCQUNBLGdCQ3ZCRixFQUNFLGdCQUVBLGFBQ0UsZ0JBR0YscUJBQ0UseUJBR0Ysc0JBQ0UsTUM0Q1EsUUQzQ1IseUJBR0YseUJBRUUiLCJmaWxlIjoicGFydHMvZ3V0ZW5iZXJnL2NvcmUtcGFyYWdyYXBoL3N0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIjpyb290IHtcbiAgLyoqXG5cdCogQ29sb3JzXG5cdCovXG4gIC0tY29sb3ItYmxhY2s6ICMwZDBkMWM7XG4gIC0tY29sb3Itd2hpdGU6ICNlZmVlZWI7XG4gIC0tY29sb3Itd2hpdGUtcHVyZTogI2ZmZmZmZjtcbiAgLS1jb2xvci1ncmF5OiAjZDJkMGMxO1xuICAtLWNvbG9yLWdyYXktZGFyazogIzI0MjcyYTtcbiAgLS1jb2xvci1ibHVlOiAjMmI3OWZjO1xuICAtLWNvbG9yLXB1cnBsZTogI2IyNWJlZTtcbiAgLS1jb2xvci10dXJxdW9pc2U6ICNiZWYzZGY7XG5cbiAgLyoqXG5cdCogWi1pbmRleFxuXHQqL1xuICAtLXotbWFpbjogMTtcbiAgLS16LW1lbnU6IDk7XG4gIC0tei1sb2FkZXI6IDEwO1xuXG4gIC8qKlxuICAgICogU2l6ZXNcbiAgICAqL1xuICAtLW1heC13aWR0aDogMTkyMHB4O1xuICAtLWd1dHRlcjogMjRweDtcbiAgLS1zY3JvbGxiYXItd2lkdGg6IDhweDtcbiAgLS1ici1tYWluOiAxNnB4O1xufVxuIiwiQGltcG9ydCBcIl9fc2V0dGluZ3MvaW5pdFwiO1xuXG4vKiBUZXh0IEVsZW1lbnRzICovXG5wIHtcbiAgbWFyZ2luOiAwIDAgcmVtKDMwKTtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICAmLmlzLXN0eWxlLXVwcGVyY2FzZSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgfVxuXG4gICYuaXMtc3R5bGUtcHJlaGVhZGluZyB7XG4gICAgY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgfVxuXG4gICYuaXMtc3R5bGUtbGVhZHBhcmFncmFwaCB7XG4gICAgLy8gQGluY2x1ZGUgZm9udCgxNiwgMjYpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG5cbiAgICBAaW5jbHVkZSBtZWRpYShcIj49bWRcIikge1xuICAgICAgLy8gQGluY2x1ZGUgZm9udCgxOCwgMjgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gVkFSSUFCTEVTXG5cbi8vIENvbnRhaW5lciB3aWR0aCB2YXJpYWJsZXNcbiRjb250YWluZXItbW9iaWxlOiA3MjBweDtcbiRjb250YWluZXItbGc6IDk2MHB4O1xuJGNvbnRhaW5lci14bDogMTA4MHB4O1xuJGNvbnRhaW5lci14eGw6IDEyMDBweDtcbiRjb250YWluZXItbWF4OiAxNTAwcHg7XG4kY29udGFpbmVyLXBhZGRpbmc6IDM1OyAvL3B4XG5cbi8vIEJsb2NrIFNwYWNpbmdzXG4kc3BhY2luZy1tb2JpbGU6IDUwO1xuJHNwYWNpbmc6IDcwO1xuXG4kbWFyZ2luLW1vYmlsZTogNTA7XG4kbWFyZ2luOiA3MDtcblxuLy8gTWVkaWEgU3BhY2luZ1xuJG1lZGlhLW1hcmdpbjogMjA7IC8vcHhcblxuLy8gVHJhbnNpdGlvbnNcbiRkZWZhdWx0LXRyYW5zaXRpb24tc3BlZWQ6IDAuM3M7XG5cbi8vIE91dGxpbmVcbiRvdXRsaW5lOiAycHggc29saWQgYmx1ZTtcblxuLy9mb250c1xuJGZvbnQtYmFzZTogXCJGaWd0cmVlXCIsIHN5c3RlbS11aSwgc2Fucy1zZXJpZjtcbiRmb250LXNpemUtYmFzZTogMTY7XG4kbGluZS1oZWlnaHQtYmFzZTogMjg7XG5cbiRmb250LXNpemUtbW9iaWxlOiAxNDtcbiRsaW5lLWhlaWdodC1tb2JpbGU6IDI2O1xuXG4vLyBDT0xPUlNcbiRjb2xvci0tYmxhY2s6ICMwMDAwMDA7XG4kY29sb3ItLXdoaXRlOiAjZmZmZmZmO1xuXG4vLyBUZXh0XG4kdGV4dC1jb2xvci1iYXNlOiAjMDAwO1xuJHRleHQtbGlnaHQ6ICRjb2xvci0td2hpdGU7XG4kbGluay1jb2xvcjogI2MzMTMxMztcbiRsaW5rLWhvdmVyLWNvbG9yOiAjMjIyMjIyO1xuXG4vLyBUaGVtZSBDb2xvcnNcbiRjb2xvci0xOiAjNmM4ZTYzO1xuJGNvbG9yLTI6ICNlZDRmMzM7XG4kY29sb3ItMzogI2ZjYjUxNjtcbiRjb2xvci00OiAjMDBhNTk4O1xuJGNvbG9yLTU6ICNiOTljZDM7XG4kY29sb3ItNjogIzk5OTtcbiRjb2xvci03OiAjY2NjO1xuJGNvbG9yLTg6ICMxNzM2NWQ7XG4kY29sb3ItOTogI2NlMmQ0NTtcbiRjb2xvci0xMDogI2YyZjJmMjtcbiRjb2xvci0xMTogIzFhMWExYTtcblxuLy9cbiRwcmltYXJ5OiAjMDE0Mzg0O1xuJHNlY29uZGFyeTogIzQ0YmJkODtcblxuLy9cbiRjb2xvci1iZzogI2Y2ZjZmNjtcbiRib2R5LWJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cbi8vIEJSRUFLUE9JTlRTXG4kYnJlYWtwb2ludHM6IChcbiAgeHM6IDM1MHB4LFxuICBzbTogNTc2cHgsXG4gIG1kOiA3NjhweCxcbiAgbGc6IDk5MnB4LFxuICB4bDogMTI2MHB4LFxuICB4bC14eGw6IDE0MDBweCxcbiAgeHhsOiAxNTYwcHgsXG4gIG1heDogMTkyMHB4LFxuKTtcbiJdfQ== *\/\n<\/style>\n<p class=\"is-style-leadparagraph\">From Startup to Leader: Christian Daigle Tells the Story of How Frima\u2019s Vision Became Reality<\/p>\n\n\n\n<p>When Christian Daigle founded Frima with Philippe B\u00e9gin and Steve Couture in 2003, they took the initial steps headfirst. The desire to establish their own company and create games that would reach as many people as possible outweighed any fears of failure. Perhaps it was better this way: who would really want to know in advance all the potential challenges to overcome? <em>\u201cThere\u2019s a certain innocence when you start a project like this,\u201d<\/em> he says. <em>\u201cThe motivation is so strong that you charge ahead, you dive in, and you discover the reality of constraints later.\u201d<\/em><\/p>\n\n\n\n<p>The three partners brimmed with enthusiasm as they began their first project: adapting a TV series\u2019 private detective into a flash game destined for the broadcaster\u2019s website. Step by step, their vision began coming to life.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<style>:root{--color-black: #0d0d1c;--color-white: #efeeeb;--color-white-pure: #ffffff;--color-gray: #d2d0c1;--color-gray-dark: #24272a;--color-blue: #2b79fc;--color-purple: #b25bee;--color-turquoise: #bef3df;--z-main: 1;--z-menu: 9;--z-loader: 10;--max-width: 1920px;--gutter: 24px;--scrollbar-width: 8px;--br-main: 16px}h1,h2,h3,h4,h5,h6{margin:0 0 1.2em;color:#000}h1:only-child,h2:only-child,h3:only-child,h4:only-child,h5:only-child,h6:only-child{margin:0}h1.is-style-with-divider,h2.is-style-with-divider,h3.is-style-with-divider,h4.is-style-with-divider,h5.is-style-with-divider,h6.is-style-with-divider{position:relative;padding-bottom:5rem;margin-bottom:5.5rem}h1.is-style-with-divider:before,h2.is-style-with-divider:before,h3.is-style-with-divider:before,h4.is-style-with-divider:before,h5.is-style-with-divider:before,h6.is-style-with-divider:before{content:\"\";width:13.5rem;height:0.2rem;background-color:var(--color-black);left:0;bottom:0;position:absolute}@media(min-width: 992px){h1.is-style-with-divider,h2.is-style-with-divider,h3.is-style-with-divider,h4.is-style-with-divider,h5.is-style-with-divider,h6.is-style-with-divider{margin-bottom:8rem;padding-bottom:8rem}h1.is-style-with-divider:before,h2.is-style-with-divider:before,h3.is-style-with-divider:before,h4.is-style-with-divider:before,h5.is-style-with-divider:before,h6.is-style-with-divider:before{left:3.5rem}}h1{margin-bottom:1.2rem}h2{margin-bottom:1.4rem}h3{margin-bottom:1.9rem}h4{margin-bottom:2.2rem}h5{margin-bottom:2.4rem}h6{margin-bottom:2.3rem}\n\/*# sourceMappingURL=data:application\/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9jc3MvX19zZXR0aW5ncy9fc3R5bGUtZ3VpZGUtdmFyaWFibGVzLnNjc3MiLCJwYXJ0cy9ndXRlbmJlcmcvY29yZS1oZWFkaW5nL3N0eWxlLnNjc3MiLCJhc3NldHMvY3NzL19fc2V0dGluZ3MvX3ZhcmlhYmxlcy5zY3NzIiwiYXNzZXRzL2Nzcy9fX3NldHRpbmdzL19pbmNsdWRlLW1lZGlhLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFJRSx1QkFDQSx1QkFDQSw0QkFDQSxzQkFDQSwyQkFDQSxzQkFDQSx3QkFDQSwyQkFLQSxZQUNBLFlBQ0EsZUFLQSxvQkFDQSxlQUNBLHVCQUNBLGdCQ3ZCRixrQkFNRSxpQkFHQSxNQzJCZ0IsS0R6QmhCLG9GQUNFLFNBR0Ysc0pBQ0Usa0JBQ0Esb0JBQ0EscUJBRUEsZ01BQ0UsV0FDQSxjQUNBLGNBQ0Esb0NBQ0EsT0FDQSxTQUNBLGtCRWloQkYseUJGN2hCRixzSkFnQkksbUJBQ0Esb0JBRUEsZ01BQ0UsYUFNUixHQUNFLHFCQVVGLEdBQ0UscUJBV0YsR0FDRSxxQkFNRixHQUNFLHFCQU1GLEdBQ0UscUJBTUYsR0FDRSIsImZpbGUiOiJwYXJ0cy9ndXRlbmJlcmcvY29yZS1oZWFkaW5nL3N0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIjpyb290IHtcbiAgLyoqXG5cdCogQ29sb3JzXG5cdCovXG4gIC0tY29sb3ItYmxhY2s6ICMwZDBkMWM7XG4gIC0tY29sb3Itd2hpdGU6ICNlZmVlZWI7XG4gIC0tY29sb3Itd2hpdGUtcHVyZTogI2ZmZmZmZjtcbiAgLS1jb2xvci1ncmF5OiAjZDJkMGMxO1xuICAtLWNvbG9yLWdyYXktZGFyazogIzI0MjcyYTtcbiAgLS1jb2xvci1ibHVlOiAjMmI3OWZjO1xuICAtLWNvbG9yLXB1cnBsZTogI2IyNWJlZTtcbiAgLS1jb2xvci10dXJxdW9pc2U6ICNiZWYzZGY7XG5cbiAgLyoqXG5cdCogWi1pbmRleFxuXHQqL1xuICAtLXotbWFpbjogMTtcbiAgLS16LW1lbnU6IDk7XG4gIC0tei1sb2FkZXI6IDEwO1xuXG4gIC8qKlxuICAgICogU2l6ZXNcbiAgICAqL1xuICAtLW1heC13aWR0aDogMTkyMHB4O1xuICAtLWd1dHRlcjogMjRweDtcbiAgLS1zY3JvbGxiYXItd2lkdGg6IDhweDtcbiAgLS1ici1tYWluOiAxNnB4O1xufVxuIiwiQGltcG9ydCBcIl9fc2V0dGluZ3MvaW5pdFwiO1xuXG4vKiBIZWFkaW5ncyAqL1xuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgbWFyZ2luOiAwIDAgMS4yZW07XG4gIC8vIGZvbnQtZmFtaWx5OiAkZm9udC1iYXNlO1xuICAvLyBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogJHRleHQtY29sb3ItYmFzZTtcblxuICAmOm9ubHktY2hpbGQge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gICYuaXMtc3R5bGUtd2l0aC1kaXZpZGVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1ib3R0b206IHJlbSg1MCk7XG4gICAgbWFyZ2luLWJvdHRvbTogcmVtKDU1KTtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICB3aWR0aDogcmVtKDEzNSk7XG4gICAgICBoZWlnaHQ6IHJlbSgyKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgbWVkaWEoXCI+PWxnXCIpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IHJlbSg4MCk7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogcmVtKDgwKTtcblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBsZWZ0OiByZW0oMzUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5oMSB7XG4gIG1hcmdpbi1ib3R0b206IHJlbSgxMik7XG4gIC8vIGxldHRlci1zcGFjaW5nOiByZW0oMi40NCk7XG4gIC8vIEBpbmNsdWRlIGZvbnQoNDAsIDQ4KTtcbiAgLy8gQGluY2x1ZGUgaDQtc3R5bGU7XG5cbiAgQGluY2x1ZGUgbWVkaWEoXCI+PW1kXCIpIHtcbiAgICAvLyBAaW5jbHVkZSBmb250KDQ5LCA1OC41OSk7XG4gIH1cbn1cblxuaDIge1xuICBtYXJnaW4tYm90dG9tOiByZW0oMTQpO1xuICAvLyBsZXR0ZXItc3BhY2luZzogcmVtKDEuOTUpO1xuICAvLyBmb250LXdlaWdodDogNzAwO1xuICAvLyBAaW5jbHVkZSBoNS1zdHlsZTtcbiAgLy8gQGluY2x1ZGUgZm9udCgzNSwgNDIpO1xuXG4gIEBpbmNsdWRlIG1lZGlhKFwiPj1sZ1wiKSB7XG4gICAgLy8gQGluY2x1ZGUgZm9udCgzMiwgMzgpO1xuICB9XG59XG5cbmgzIHtcbiAgbWFyZ2luLWJvdHRvbTogcmVtKDE5KTtcbiAgLy8gbGV0dGVyLXNwYWNpbmc6IHJlbSgxLjU2KTtcbiAgLy8gQGluY2x1ZGUgZm9udCgzMSwgMzcuNSk7XG4gIC8vIEBpbmNsdWRlIGg1LXN0eWxlO1xufVxuXG5oNCB7XG4gIG1hcmdpbi1ib3R0b206IHJlbSgyMik7XG4gIC8vIGxldHRlci1zcGFjaW5nOiByZW0oMS4yNSk7XG4gIC8vIEBpbmNsdWRlIGZvbnQoMjUsIDMwKTtcbiAgLy8gQGluY2x1ZGUgaDYtc3R5bGU7XG59XG5cbmg1IHtcbiAgbWFyZ2luLWJvdHRvbTogcmVtKDI0KTtcbiAgLy8gbGV0dGVyLXNwYWNpbmc6IHJlbSgxKTtcbiAgLy8gQGluY2x1ZGUgZm9udCgyMCwgMjQpO1xuICAvLyBAaW5jbHVkZSBib2R5LWwtc3R5bGU7XG59XG5cbmg2IHtcbiAgbWFyZ2luLWJvdHRvbTogcmVtKDIzKTtcbiAgLy8gbGV0dGVyLXNwYWNpbmc6IHJlbSgwLjgpO1xuICAvLyBAaW5jbHVkZSBmb250KDE2LCAxOS4yKTtcbiAgLy8gQGluY2x1ZGUgYm9keS1tLXN0eWxlO1xufVxuIiwiLy8gVkFSSUFCTEVTXG5cbi8vIENvbnRhaW5lciB3aWR0aCB2YXJpYWJsZXNcbiRjb250YWluZXItbW9iaWxlOiA3MjBweDtcbiRjb250YWluZXItbGc6IDk2MHB4O1xuJGNvbnRhaW5lci14bDogMTA4MHB4O1xuJGNvbnRhaW5lci14eGw6IDEyMDBweDtcbiRjb250YWluZXItbWF4OiAxNTAwcHg7XG4kY29udGFpbmVyLXBhZGRpbmc6IDM1OyAvL3B4XG5cbi8vIEJsb2NrIFNwYWNpbmdzXG4kc3BhY2luZy1tb2JpbGU6IDUwO1xuJHNwYWNpbmc6IDcwO1xuXG4kbWFyZ2luLW1vYmlsZTogNTA7XG4kbWFyZ2luOiA3MDtcblxuLy8gTWVkaWEgU3BhY2luZ1xuJG1lZGlhLW1hcmdpbjogMjA7IC8vcHhcblxuLy8gVHJhbnNpdGlvbnNcbiRkZWZhdWx0LXRyYW5zaXRpb24tc3BlZWQ6IDAuM3M7XG5cbi8vIE91dGxpbmVcbiRvdXRsaW5lOiAycHggc29saWQgYmx1ZTtcblxuLy9mb250c1xuJGZvbnQtYmFzZTogXCJGaWd0cmVlXCIsIHN5c3RlbS11aSwgc2Fucy1zZXJpZjtcbiRmb250LXNpemUtYmFzZTogMTY7XG4kbGluZS1oZWlnaHQtYmFzZTogMjg7XG5cbiRmb250LXNpemUtbW9iaWxlOiAxNDtcbiRsaW5lLWhlaWdodC1tb2JpbGU6IDI2O1xuXG4vLyBDT0xPUlNcbiRjb2xvci0tYmxhY2s6ICMwMDAwMDA7XG4kY29sb3ItLXdoaXRlOiAjZmZmZmZmO1xuXG4vLyBUZXh0XG4kdGV4dC1jb2xvci1iYXNlOiAjMDAwO1xuJHRleHQtbGlnaHQ6ICRjb2xvci0td2hpdGU7XG4kbGluay1jb2xvcjogI2MzMTMxMztcbiRsaW5rLWhvdmVyLWNvbG9yOiAjMjIyMjIyO1xuXG4vLyBUaGVtZSBDb2xvcnNcbiRjb2xvci0xOiAjNmM4ZTYzO1xuJGNvbG9yLTI6ICNlZDRmMzM7XG4kY29sb3ItMzogI2ZjYjUxNjtcbiRjb2xvci00OiAjMDBhNTk4O1xuJGNvbG9yLTU6ICNiOTljZDM7XG4kY29sb3ItNjogIzk5OTtcbiRjb2xvci03OiAjY2NjO1xuJGNvbG9yLTg6ICMxNzM2NWQ7XG4kY29sb3ItOTogI2NlMmQ0NTtcbiRjb2xvci0xMDogI2YyZjJmMjtcbiRjb2xvci0xMTogIzFhMWExYTtcblxuLy9cbiRwcmltYXJ5OiAjMDE0Mzg0O1xuJHNlY29uZGFyeTogIzQ0YmJkODtcblxuLy9cbiRjb2xvci1iZzogI2Y2ZjZmNjtcbiRib2R5LWJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cbi8vIEJSRUFLUE9JTlRTXG4kYnJlYWtwb2ludHM6IChcbiAgeHM6IDM1MHB4LFxuICBzbTogNTc2cHgsXG4gIG1kOiA3NjhweCxcbiAgbGc6IDk5MnB4LFxuICB4bDogMTI2MHB4LFxuICB4bC14eGw6IDE0MDBweCxcbiAgeHhsOiAxNTYwcHgsXG4gIG1heDogMTkyMHB4LFxuKTtcbiIsIkBjaGFyc2V0IFwiVVRGLThcIjtcblxuLy8gICAgIF8gICAgICAgICAgICBfICAgICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgXyBfXG4vLyAgICAoXykgICAgICAgICAgfCB8ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF8pXG4vLyAgICAgXyBfIF9fICAgX19ffCB8XyAgIF8gIF9ffCB8IF9fXyAgIF8gX18gX19fICAgX19fICBfX3wgfF8gIF9fIF9cbi8vICAgIHwgfCAnXyBcXCAvIF9ffCB8IHwgfCB8LyBfYCB8LyBfIFxcIHwgJ18gYCBfIFxcIC8gXyBcXC8gX2AgfCB8LyBfYCB8XG4vLyAgICB8IHwgfCB8IHwgKF9ffCB8IHxffCB8IChffCB8ICBfXy8gfCB8IHwgfCB8IHwgIF9fLyAoX3wgfCB8IChffCB8XG4vLyAgICB8X3xffCB8X3xcXF9fX3xffFxcX18sX3xcXF9fLF98XFxfX198IHxffCB8X3wgfF98XFxfX198XFxfXyxffF98XFxfXyxffFxuLy9cbi8vICAgICAgU2ltcGxlLCBlbGVnYW50IGFuZCBtYWludGFpbmFibGUgbWVkaWEgcXVlcmllcyBpbiBTYXNzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgIHYxLjQuOVxuLy9cbi8vICAgICAgICAgICAgICAgIGh0dHA6Ly9pbmNsdWRlLW1lZGlhLmNvbVxuLy9cbi8vICAgICAgICAgQXV0aG9yczogRWR1YXJkbyBCb3VjYXMgKEBlZHVhcmRvYm91Y2FzKVxuLy8gICAgICAgICAgICAgICAgICBIdWdvIEdpcmF1ZGVsIChAaHVnb2dpcmF1ZGVsKVxuLy9cbi8vICAgICAgVGhpcyBwcm9qZWN0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2VcblxuXG4vLy8vXG4vLy8gaW5jbHVkZS1tZWRpYSBsaWJyYXJ5IHB1YmxpYyBjb25maWd1cmF0aW9uXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gQ3JlYXRlcyBhIGxpc3Qgb2YgZ2xvYmFsIGJyZWFrcG9pbnRzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHNpbmdsZSBicmVha3BvaW50IHdpdGggdGhlIGxhYmVsIGBwaG9uZWBcbi8vLyAgJGJyZWFrcG9pbnRzOiAoJ3Bob25lJzogMzIwcHgpO1xuLy8vXG4kYnJlYWtwb2ludHM6IChcbiAgJ3Bob25lJzogMzIwcHgsXG4gICd0YWJsZXQnOiA3NjhweCxcbiAgJ2Rlc2t0b3AnOiAxMDI0cHhcbikgIWRlZmF1bHQ7XG5cblxuLy8vXG4vLy8gQ3JlYXRlcyBhIGxpc3Qgb2Ygc3RhdGljIGV4cHJlc3Npb25zIG9yIG1lZGlhIHR5cGVzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHNpbmdsZSBtZWRpYSB0eXBlIChzY3JlZW4pXG4vLy8gICRtZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nOiAnc2NyZWVuJyk7XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHN0YXRpYyBleHByZXNzaW9uIHdpdGggbG9naWNhbCBkaXNqdW5jdGlvbiAoT1Igb3BlcmF0b3IpXG4vLy8gICRtZWRpYS1leHByZXNzaW9uczogKFxuLy8vICAgICdyZXRpbmEyeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpJ1xuLy8vICApO1xuLy8vXG4kbWVkaWEtZXhwcmVzc2lvbnM6IChcbiAgJ3NjcmVlbic6ICdzY3JlZW4nLFxuICAncHJpbnQnOiAncHJpbnQnLFxuICAnaGFuZGhlbGQnOiAnaGFuZGhlbGQnLFxuICAnbGFuZHNjYXBlJzogJyhvcmllbnRhdGlvbjogbGFuZHNjYXBlKScsXG4gICdwb3J0cmFpdCc6ICcob3JpZW50YXRpb246IHBvcnRyYWl0KScsXG4gICdyZXRpbmEyeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLCAobWluLXJlc29sdXRpb246IDJkcHB4KScsXG4gICdyZXRpbmEzeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAzKSwgKG1pbi1yZXNvbHV0aW9uOiAzNTBkcGkpLCAobWluLXJlc29sdXRpb246IDNkcHB4KSdcbikgIWRlZmF1bHQ7XG5cblxuLy8vXG4vLy8gRGVmaW5lcyBhIG51bWJlciB0byBiZSBhZGRlZCBvciBzdWJ0cmFjdGVkIGZyb20gZWFjaCB1bml0IHdoZW4gZGVjbGFyaW5nIGJyZWFrcG9pbnRzIHdpdGggZXhjbHVzaXZlIGludGVydmFsc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEludGVydmFsIGZvciBwaXhlbHMgaXMgZGVmaW5lZCBhcyBgMWAgYnkgZGVmYXVsdFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPjEyOHB4Jykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAxMjlweCkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgZW1zIGlzIGRlZmluZWQgYXMgYDAuMDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4yMGVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyMC4wMWVtKSB7fVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEludGVydmFsIGZvciByZW1zIGlzIGRlZmluZWQgYXMgYDAuMWAgYnkgZGVmYXVsdCwgdG8gYmUgdXNlZCB3aXRoIGBmb250LXNpemU6IDYyLjUlO2Bcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4yLjByZW0nKSB7fVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgQG1lZGlhIChtaW4td2lkdGg6IDIuMXJlbSkge31cbi8vL1xuJHVuaXQtaW50ZXJ2YWxzOiAoXG4gICdweCc6IDEsXG4gICdlbSc6IDAuMDEsXG4gICdyZW0nOiAwLjEsXG4gICcnOiAwXG4pICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBEZWZpbmVzIHdoZXRoZXIgc3VwcG9ydCBmb3IgbWVkaWEgcXVlcmllcyBpcyBhdmFpbGFibGUsIHVzZWZ1bCBmb3IgY3JlYXRpbmcgc2VwYXJhdGUgc3R5bGVzaGVldHNcbi8vLyBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IG1lZGlhIHF1ZXJpZXMuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRGlzYWJsZXMgc3VwcG9ydCBmb3IgbWVkaWEgcXVlcmllc1xuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICAuZm9vIHtcbi8vLyAgICBjb2xvcjogdG9tYXRvO1xuLy8vICB9XG4vLy9cbiRpbS1tZWRpYS1zdXBwb3J0OiB0cnVlICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBTZWxlY3RzIHdoaWNoIGJyZWFrcG9pbnQgdG8gZW11bGF0ZSB3aGVuIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgZGlzYWJsZWQuIE1lZGlhIHF1ZXJpZXMgdGhhdCBzdGFydCBhdCBvclxuLy8vIGludGVyY2VwdCB0aGUgYnJlYWtwb2ludCB3aWxsIGJlIGRpc3BsYXllZCwgYW55IG90aGVycyB3aWxsIGJlIGlnbm9yZWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludFxuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gICRpbS1uby1tZWRpYS1icmVha3BvaW50OiAnZGVza3RvcCc7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICAuZm9vIHtcbi8vLyAgICBjb2xvcjogdG9tYXRvO1xuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIE5PVCBzaG93IGJlY2F1c2UgaXQgZG9lcyBub3QgaW50ZXJjZXB0IHRoZSBkZXNrdG9wIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ3RhYmxldCc7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PWRlc2t0b3AnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBTZWxlY3RzIHdoaWNoIG1lZGlhIGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkIGluIGFuIGV4cHJlc3Npb24gZm9yIGl0IHRvIGJlIHVzZWQgd2hlbiBtZWRpYSBxdWVyaWVzXG4vLy8gYXJlIG5vdCBzdXBwb3J0ZWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBhbmQgY29udGFpbnMgb25seSBhY2NlcHRlZCBtZWRpYSBleHByZXNzaW9uc1xuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gICRpbS1uby1tZWRpYS1icmVha3BvaW50OiAnZGVza3RvcCc7XG4vLy8gICRpbS1uby1tZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nKTtcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49dGFibGV0JywgJ3NjcmVlbicpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgIC5mb28ge1xuLy8vICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGludGVyY2VwdHMgdGhlIHN0YXRpYyBicmVha3BvaW50IGJ1dCBjb250YWlucyBhIG1lZGlhIGV4cHJlc3Npb24gdGhhdCBpcyBub3QgYWNjZXB0ZWRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdyZXRpbmEyeCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogTm8gb3V0cHV0ICovXG4vLy9cbiRpbS1uby1tZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nLCAncG9ydHJhaXQnLCAnbGFuZHNjYXBlJykgIWRlZmF1bHQ7XG5cbi8vLy9cbi8vLyBDcm9zcy1lbmdpbmUgbG9nZ2luZyBlbmdpbmVcbi8vLyBAYXV0aG9yIEh1Z28gR2lyYXVkZWxcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLy9cblxuXG4vLy9cbi8vLyBMb2cgYSBtZXNzYWdlIGVpdGhlciB3aXRoIGBAZXJyb3JgIGlmIHN1cHBvcnRlZFxuLy8vIGVsc2Ugd2l0aCBgQHdhcm5gLCB1c2luZyBgZmVhdHVyZS1leGlzdHMoJ2F0LWVycm9yJylgXG4vLy8gdG8gZGV0ZWN0IHN1cHBvcnQuXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxvZ1xuLy8vXG5AZnVuY3Rpb24gaW0tbG9nKCRtZXNzYWdlKSB7XG4gIEBpZiBmZWF0dXJlLWV4aXN0cygnYXQtZXJyb3InKSB7XG4gICAgQGVycm9yICRtZXNzYWdlO1xuICB9IEBlbHNlIHtcbiAgICBAd2FybiAkbWVzc2FnZTtcbiAgICAkXzogbm9vcCgpO1xuICB9XG5cbiAgQHJldHVybiAkbWVzc2FnZTtcbn1cblxuXG4vLy9cbi8vLyBXcmFwcGVyIG1peGluIGZvciB0aGUgbG9nIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGggYSBtb3JlIGZyaWVuZGx5XG4vLy8gQVBJIHRoYW4gYEBpZiBpbS1sb2coJy4uJykge31gIG9yIGAkXzogaW0tbG9nKCcuLicpYC4gQmFzaWNhbGx5LCB1c2UgdGhlIGZ1bmN0aW9uXG4vLy8gd2l0aGluIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNsdWRlIGEgbWl4aW4gaW4gYSBmdW5jdGlvblxuLy8vIGFuZCB1c2UgdGhlIG1peGluIGV2ZXJ5d2hlcmUgZWxzZSBiZWNhdXNlIGl0J3MgbXVjaCBtb3JlIGVsZWdhbnQuXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxvZ1xuLy8vXG5AbWl4aW4gbG9nKCRtZXNzYWdlKSB7XG4gIEBpZiBpbS1sb2coJG1lc3NhZ2UpIHt9XG59XG5cblxuLy8vXG4vLy8gRnVuY3Rpb24gd2l0aCBubyBgQHJldHVybmAgY2FsbGVkIG5leHQgdG8gYEB3YXJuYCBpbiBTYXNzIDMuM1xuLy8vIHRvIHRyaWdnZXIgYSBjb21waWxpbmcgZXJyb3IgYW5kIHN0b3AgdGhlIHByb2Nlc3MuXG4vLy9cbkBmdW5jdGlvbiBub29wKCkge31cblxuLy8vXG4vLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbGlzdCBvZiBjb25kaXRpb25zIGlzIGludGVyY2VwdGVkIGJ5IHRoZSBzdGF0aWMgYnJlYWtwb2ludC5cbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAcmV0dXJuIHtCb29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uZGl0aW9ucyBhcmUgaW50ZXJjZXB0ZWQgYnkgdGhlIHN0YXRpYyBicmVha3BvaW50XG4vLy9cbkBmdW5jdGlvbiBpbS1pbnRlcmNlcHRzLXN0YXRpYy1icmVha3BvaW50KCRjb25kaXRpb25zLi4uKSB7XG4gICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQpO1xuXG4gIEBpZiBub3QgJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUge1xuICAgIEBpZiBpbS1sb2coJ2AjeyRpbS1uby1tZWRpYS1icmVha3BvaW50fWAgaXMgbm90IGEgdmFsaWQgYnJlYWtwb2ludC4nKSB7fVxuICB9XG5cbiAgQGVhY2ggJGNvbmRpdGlvbiBpbiAkY29uZGl0aW9ucyB7XG4gICAgQGlmIG5vdCBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRjb25kaXRpb24pIHtcbiAgICAgICRvcGVyYXRvcjogZ2V0LWV4cHJlc3Npb24tb3BlcmF0b3IoJGNvbmRpdGlvbik7XG4gICAgICAkcHJlZml4OiBnZXQtZXhwcmVzc2lvbi1wcmVmaXgoJG9wZXJhdG9yKTtcbiAgICAgICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGNvbmRpdGlvbiwgJG9wZXJhdG9yKTtcblxuICAgICAgQGlmICgkcHJlZml4ID09ICdtYXgnIGFuZCAkdmFsdWUgPD0gJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUpIG9yXG4gICAgICAgICAgKCRwcmVmaXggPT0gJ21pbicgYW5kICR2YWx1ZSA+ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSB7XG4gICAgICAgIEByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBAZWxzZSBpZiBub3QgaW5kZXgoJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zLCAkY29uZGl0aW9uKSB7XG4gICAgICBAcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuLy8vL1xuLy8vIFBhcnNpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gR2V0IG9wZXJhdG9yIG9mIGFuIGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCBvcGVyYXRvciBmcm9tXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gQW55IG9mIGA+PWAsIGA+YCwgYDw9YCwgYDxgLCBg4omlYCwgYOKJpGBcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKSB7XG4gIEBlYWNoICRvcGVyYXRvciBpbiAoJz49JywgJz4nLCAnPD0nLCAnPCcsICfiiaUnLCAn4omkJykge1xuICAgIEBpZiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAgICAgQHJldHVybiAkb3BlcmF0b3I7XG4gICAgfVxuICB9XG5cbiAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuICAvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgLy8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcbiAgLy8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuICAkXzogaW0tbG9nKCdObyBvcGVyYXRvciBmb3VuZCBpbiBgI3skZXhwcmVzc2lvbn1gLicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IGRpbWVuc2lvbiBmcm9tXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yIGZyb20gYCRleHByZXNzaW9uYFxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGB3aWR0aGAgb3IgYGhlaWdodGAgKG9yIHBvdGVudGlhbGx5IGFueXRoaW5nIGVsc2UpXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1kaW1lbnNpb24oJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAkb3BlcmF0b3ItaW5kZXg6IHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHBhcnNlZC1kaW1lbnNpb246IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgMCwgJG9wZXJhdG9yLWluZGV4IC0gMSk7XG4gICRkaW1lbnNpb246ICd3aWR0aCc7XG5cbiAgQGlmIHN0ci1sZW5ndGgoJHBhcnNlZC1kaW1lbnNpb24pID4gMCB7XG4gICAgJGRpbWVuc2lvbjogJHBhcnNlZC1kaW1lbnNpb247XG4gIH1cblxuICBAcmV0dXJuICRkaW1lbnNpb247XG59XG5cblxuLy8vXG4vLy8gR2V0IGRpbWVuc2lvbiBwcmVmaXggYmFzZWQgb24gYW4gb3BlcmF0b3Jcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvclxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGBtaW5gIG9yIGBtYXhgXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1wcmVmaXgoJG9wZXJhdG9yKSB7XG4gIEByZXR1cm4gaWYoaW5kZXgoKCc8JywgJzw9JywgJ+KJpCcpLCAkb3BlcmF0b3IpLCAnbWF4JywgJ21pbicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCB2YWx1ZSBvZiBhbiBleHByZXNzaW9uLCBiYXNlZCBvbiBhIGZvdW5kIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIGV4dHJhY3QgdmFsdWUgZnJvbVxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvciBmcm9tIGAkZXhwcmVzc2lvbmBcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn0gLSBBIG51bWVyaWMgdmFsdWVcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLXZhbHVlKCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcbiAgJG9wZXJhdG9yLWluZGV4OiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG4gICR2YWx1ZTogc3RyLXNsaWNlKCRleHByZXNzaW9uLCAkb3BlcmF0b3ItaW5kZXggKyBzdHItbGVuZ3RoKCRvcGVyYXRvcikpO1xuXG4gIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICR2YWx1ZSkge1xuICAgICR2YWx1ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICR2YWx1ZSk7XG4gIH0gQGVsc2Uge1xuICAgICR2YWx1ZTogdG8tbnVtYmVyKCR2YWx1ZSk7XG4gIH1cblxuICAkaW50ZXJ2YWw6IG1hcC1nZXQoJHVuaXQtaW50ZXJ2YWxzLCB1bml0KCR2YWx1ZSkpO1xuXG4gIEBpZiBub3QgJGludGVydmFsIHtcbiAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluc2lkZSBhIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvXG4gICAgLy8gcmVseSBvbiB0aGUgYGltLWxvZyguLilgIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHRoZSBgbG9nKC4uKWAgbWl4aW4uIEJlY2F1c2VcbiAgICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgICAvLyBhIGR1bW15IHZhcmlhYmxlLCBzdWNoIGFzIGAkX2AuIElmIGFueWJvZHkgZXZlciByYWlzZSBhIHNjb3BpbmcgaXNzdWUgd2l0aFxuICAgIC8vIFNhc3MgMy4zLCBjaGFuZ2UgdGhpcyBsaW5lIGluIGBAaWYgaW0tbG9nKC4uKSB7fWAgaW5zdGVhZC5cbiAgICAkXzogaW0tbG9nKCdVbmtub3duIHVuaXQgYCN7dW5pdCgkdmFsdWUpfWAuJyk7XG4gIH1cblxuICBAaWYgJG9wZXJhdG9yID09ICc+JyB7XG4gICAgJHZhbHVlOiAkdmFsdWUgKyAkaW50ZXJ2YWw7XG4gIH0gQGVsc2UgaWYgJG9wZXJhdG9yID09ICc8JyB7XG4gICAgJHZhbHVlOiAkdmFsdWUgLSAkaW50ZXJ2YWw7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cblxuXG4vLy9cbi8vLyBQYXJzZSBhbiBleHByZXNzaW9uIHRvIHJldHVybiBhIHZhbGlkIG1lZGlhLXF1ZXJ5IGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gcGFyc2Vcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBWYWxpZCBtZWRpYSBxdWVyeVxuLy8vXG5AZnVuY3Rpb24gcGFyc2UtZXhwcmVzc2lvbigkZXhwcmVzc2lvbikge1xuICAvLyBJZiBpdCBpcyBwYXJ0IG9mICRtZWRpYS1leHByZXNzaW9ucywgaXQgaGFzIG5vIG9wZXJhdG9yXG4gIC8vIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBnbyBhbnkgZnVydGhlciwganVzdCByZXR1cm4gdGhlIHZhbHVlXG4gIEBpZiBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRleHByZXNzaW9uKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pO1xuICB9XG5cbiAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkZXhwcmVzc2lvbik7XG4gICRkaW1lbnNpb246IGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG4gICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG5cbiAgQHJldHVybiAnKCN7JHByZWZpeH0tI3skZGltZW5zaW9ufTogI3skdmFsdWV9KSc7XG59XG5cbi8vL1xuLy8vIFNsaWNlIGAkbGlzdGAgYmV0d2VlbiBgJHN0YXJ0YCBhbmQgYCRlbmRgIGluZGV4ZXNcbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtMaXN0fSAkbGlzdCAtIExpc3QgdG8gc2xpY2Vcbi8vLyBAcGFyYW0ge051bWJlcn0gJHN0YXJ0IFsxXSAtIFN0YXJ0IGluZGV4XG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRlbmQgW2xlbmd0aCgkbGlzdCldIC0gRW5kIGluZGV4XG4vLy9cbi8vLyBAcmV0dXJuIHtMaXN0fSBTbGljZWQgbGlzdFxuLy8vXG5AZnVuY3Rpb24gc2xpY2UoJGxpc3QsICRzdGFydDogMSwgJGVuZDogbGVuZ3RoKCRsaXN0KSkge1xuICBAaWYgbGVuZ3RoKCRsaXN0KSA8IDEgb3IgJHN0YXJ0ID4gJGVuZCB7XG4gICAgQHJldHVybiAoKTtcbiAgfVxuXG4gICRyZXN1bHQ6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAkc3RhcnQgdGhyb3VnaCAkZW5kIHtcbiAgICAkcmVzdWx0OiBhcHBlbmQoJHJlc3VsdCwgbnRoKCRsaXN0LCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLy8vXG4vLy8gU3RyaW5nIHRvIG51bWJlciBjb252ZXJ0ZXJcbi8vLyBAYXV0aG9yIEh1Z28gR2lyYXVkZWxcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLy9cblxuXG4vLy9cbi8vLyBDYXN0cyBhIHN0cmluZyBpbnRvIGEgbnVtYmVyXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHZhbHVlIC0gVmFsdWUgdG8gYmUgcGFyc2VkXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9XG4vLy9cbkBmdW5jdGlvbiB0by1udW1iZXIoJHZhbHVlKSB7XG4gIEBpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gJ251bWJlcicge1xuICAgIEByZXR1cm4gJHZhbHVlO1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSAhPSAnc3RyaW5nJyB7XG4gICAgJF86IGltLWxvZygnVmFsdWUgZm9yIGB0by1udW1iZXJgIHNob3VsZCBiZSBhIG51bWJlciBvciBhIHN0cmluZy4nKTtcbiAgfVxuXG4gICRmaXJzdC1jaGFyYWN0ZXI6IHN0ci1zbGljZSgkdmFsdWUsIDEsIDEpO1xuICAkcmVzdWx0OiAwO1xuICAkZGlnaXRzOiAwO1xuICAkbWludXM6ICgkZmlyc3QtY2hhcmFjdGVyID09ICctJyk7XG4gICRudW1iZXJzOiAoJzAnOiAwLCAnMSc6IDEsICcyJzogMiwgJzMnOiAzLCAnNCc6IDQsICc1JzogNSwgJzYnOiA2LCAnNyc6IDcsICc4JzogOCwgJzknOiA5KTtcblxuICAvLyBSZW1vdmUgKy8tIHNpZ24gaWYgcHJlc2VudCBhdCBmaXJzdCBjaGFyYWN0ZXJcbiAgQGlmICgkZmlyc3QtY2hhcmFjdGVyID09ICcrJyBvciAkZmlyc3QtY2hhcmFjdGVyID09ICctJykge1xuICAgICR2YWx1ZTogc3RyLXNsaWNlKCR2YWx1ZSwgMik7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIHN0ci1sZW5ndGgoJHZhbHVlKSB7XG4gICAgJGNoYXJhY3Rlcjogc3RyLXNsaWNlKCR2YWx1ZSwgJGksICRpKTtcblxuICAgIEBpZiBub3QgKGluZGV4KG1hcC1rZXlzKCRudW1iZXJzKSwgJGNoYXJhY3Rlcikgb3IgJGNoYXJhY3RlciA9PSAnLicpIHtcbiAgICAgIEByZXR1cm4gdG8tbGVuZ3RoKGlmKCRtaW51cywgLSRyZXN1bHQsICRyZXN1bHQpLCBzdHItc2xpY2UoJHZhbHVlLCAkaSkpXG4gICAgfVxuXG4gICAgQGlmICRjaGFyYWN0ZXIgPT0gJy4nIHtcbiAgICAgICRkaWdpdHM6IDE7XG4gICAgfSBAZWxzZSBpZiAkZGlnaXRzID09IDAge1xuICAgICAgJHJlc3VsdDogJHJlc3VsdCAqIDEwICsgbWFwLWdldCgkbnVtYmVycywgJGNoYXJhY3Rlcik7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZGlnaXRzOiAkZGlnaXRzICogMTA7XG4gICAgICAkcmVzdWx0OiAkcmVzdWx0ICsgbWFwLWdldCgkbnVtYmVycywgJGNoYXJhY3RlcikgLyAkZGlnaXRzO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gaWYoJG1pbnVzLCAtJHJlc3VsdCwgJHJlc3VsdCk7XG59XG5cblxuLy8vXG4vLy8gQWRkIGAkdW5pdGAgdG8gYCR2YWx1ZWBcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBhZGQgdW5pdCB0b1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkdW5pdCAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdFxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSAtIGAkdmFsdWVgIGV4cHJlc3NlZCBpbiBgJHVuaXRgXG4vLy9cbkBmdW5jdGlvbiB0by1sZW5ndGgoJHZhbHVlLCAkdW5pdCkge1xuICAkdW5pdHM6ICgncHgnOiAxcHgsICdjbSc6IDFjbSwgJ21tJzogMW1tLCAnJSc6IDElLCAnY2gnOiAxY2gsICdwYyc6IDFwYywgJ2luJzogMWluLCAnZW0nOiAxZW0sICdyZW0nOiAxcmVtLCAncHQnOiAxcHQsICdleCc6IDFleCwgJ3Z3JzogMXZ3LCAndmgnOiAxdmgsICd2bWluJzogMXZtaW4sICd2bWF4JzogMXZtYXgpO1xuXG4gIEBpZiBub3QgaW5kZXgobWFwLWtleXMoJHVuaXRzKSwgJHVuaXQpIHtcbiAgICAkXzogaW0tbG9nKCdJbnZhbGlkIHVuaXQgYCN7JHVuaXR9YC4nKTtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlICogbWFwLWdldCgkdW5pdHMsICR1bml0KTtcbn1cblxuLy8vXG4vLy8gVGhpcyBtaXhpbiBhaW1zIGF0IHJlZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24ganVzdCBmb3IgdGhlIHNjb3BlIG9mXG4vLy8gdGhlIGNhbGwuIEl0IGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgYSBjb21wb25lbnQgbmVlZGluZyBhbiBleHRlbmRlZFxuLy8vIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBjdXN0b20gYnJlYWtwb2ludHMgKHJlZmVycmVkIHRvIGFzIHR3ZWFrcG9pbnRzKVxuLy8vIGZvciBpbnN0YW5jZS5cbi8vL1xuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vha3BvaW50cyBbKCldIC0gTWFwIG9mIHR3ZWFrcG9pbnRzIHRvIGJlIG1lcmdlZCB3aXRoIGAkYnJlYWtwb2ludHNgXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucyBbKCldIC0gTWFwIG9mIHR3ZWFrZWQgbWVkaWEgZXhwcmVzc2lvbnMgdG8gYmUgbWVyZ2VkIHdpdGggYCRtZWRpYS1leHByZXNzaW9uYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCB0aGUgZ2xvYmFsIGJyZWFrcG9pbnRzIHdpdGggYSB0d2Vha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhLWNvbnRleHQoKCdjdXN0b20nOiA2NzhweCkpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgbWVkaWEgZXhwcmVzc2lvbnMgd2l0aCBhIGN1c3RvbSBvbmVcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgnYWxsJzogJ2FsbCcpKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBAaW5jbHVkZSBtZWRpYSgnYWxsJywgJz5waG9uZScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgYm90aCBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSwgKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJywgJzw9Y3VzdG9tJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG5AbWl4aW4gbWVkaWEtY29udGV4dCgkdHdlYWtwb2ludHM6ICgpLCAkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgpKSB7XG4gIC8vIFNhdmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGdsb2JhbC1icmVha3BvaW50czogJGJyZWFrcG9pbnRzO1xuICAkZ2xvYmFsLW1lZGlhLWV4cHJlc3Npb25zOiAkbWVkaWEtZXhwcmVzc2lvbnM7XG5cbiAgLy8gVXBkYXRlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogbWFwLW1lcmdlKCRicmVha3BvaW50cywgJHR3ZWFrcG9pbnRzKSAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6IG1hcC1tZXJnZSgkbWVkaWEtZXhwcmVzc2lvbnMsICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucykgIWdsb2JhbDtcblxuICBAY29udGVudDtcblxuICAvLyBSZXN0b3JlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogJGdsb2JhbC1icmVha3BvaW50cyAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6ICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnMgIWdsb2JhbDtcbn1cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgcHVibGljIGV4cG9zZWQgQVBJXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgYmFzZWQgb24gYSBsaXN0IG9mIGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHNpbmdsZSBzZXQgYnJlYWtwb2ludFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPnBob25lJykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCB0d28gc2V0IGJyZWFrcG9pbnRzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD10YWJsZXQnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49MzU4cHgnLCAnPDg1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBzZXQgYnJlYWtwb2ludHMgd2l0aCBjdXN0b20gdmFsdWVzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+ZGVza3RvcCcsICc8PTEzNTBweCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggYSBzdGF0aWMgZXhwcmVzc2lvblxuLy8vICBAaW5jbHVkZSBtZWRpYSgncmV0aW5hMngnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBNaXhpbmcgZXZlcnl0aGluZ1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNTBweCcsICc8dGFibGV0JywgJ3JldGluYTN4JykgeyB9XG4vLy9cbkBtaXhpbiBtZWRpYSgkY29uZGl0aW9ucy4uLikge1xuICBAaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID09IDApIG9yXG4gICAgICAobm90ICRpbS1tZWRpYS1zdXBwb3J0IGFuZCBpbS1pbnRlcmNlcHRzLXN0YXRpYy1icmVha3BvaW50KCRjb25kaXRpb25zLi4uKSkge1xuICAgIEBjb250ZW50O1xuICB9IEBlbHNlIGlmICgkaW0tbWVkaWEtc3VwcG9ydCBhbmQgbGVuZ3RoKCRjb25kaXRpb25zKSA+IDApIHtcbiAgICBAbWVkaWEgI3t1bnF1b3RlKHBhcnNlLWV4cHJlc3Npb24obnRoKCRjb25kaXRpb25zLCAxKSkpfSB7XG4gICAgICAvLyBSZWN1cnNpdmUgY2FsbFxuICAgICAgQGluY2x1ZGUgbWVkaWEoc2xpY2UoJGNvbmRpdGlvbnMsIDIpLi4uKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19 *\/\n<\/style>\n<h2 class=\"wp-block-heading\"><strong>The Big Move<\/strong><\/h2>\n\n\n\n<p>For several years, projects flowed in succession, and the dream took shape. One significant achievement was Frima\u2019s role in creating an immersive digital realm for Build-A-Bear Workshop, an online game that ultimately became one of their most successful ventures. Then came a defining moment: five years after its founding, Frima acquired Humagade Studio, a mobile gaming company established in 2002. Christian Daigle explains that the studio acquisition allowed them to expand their business offering by adding phone expertise, which has become the mobile game development we know today. <em>\u201cWe already knew the team,\u201d <\/em>he recounts. <em>\u201cThe opportunity developed through ongoing discussions.\u201d<\/em><\/p>\n\n\n\n<p>The acquisition of a mobile gaming company opened up new opportunities but also presented a significant challenge: managing sudden growth. Quickly, Frima grew from 40 to 80 people, reaching 200 employees the year following the transaction. Gradually, the business shifted its focus towards developing massively multiplayer games, a decision that proved successful. In 2009, it released <em>Littlest Pet Shop Online<\/em>, the largest-ever Quebec-developed multiplayer video game while simultaneously forging its first partnership with global giant Sony to deliver games for its PSP Go handheld console.<\/p>\n\n\n\n<p>With success, ambition grew. In 2011, Frima took the gamble of diversifying by acquiring Studio Virtuel Concept and Volta. This expansion enabled it to venture into areas such as concept art, visual effects, and, ultimately, connected toys. <em>\u201cThe goal was to develop intellectual property adaptable across all platforms, with, eventually, a long-term vision of expanding into a merchandising strategy. It was an ambitious undertaking.\u201d<\/em><\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Culture as a Central Value<\/strong><\/h2>\n\n\n\n<p>In 2017, Frima reassessed its objectives, choosing to focus on video games. The return to its original ambitions shaped the company into what it is today, specializing in game development with established franchises and renowned partners. This repositioning reflected its mission, focused on recruiting passionate talent aligned with the studio\u2019s core values. <em>\u201cThroughout our refocusing process, company culture was extremely important. To foster a creative atmosphere, it is essential to establish a healthy and safe environment.\u201d<\/em><\/p>\n\n\n\n<p>The benefits of this corporate culture are numerous. Beyond its expertise and partnerships with the world\u2019s largest studios, Frima pays special attention to team assembly. This approach serves as a driving force in a stimulating work environment where everyone\u2019s impact on projects is real. It also helps maintain core teams that are highly motivated to help develop the best games. <em>\u201cWe need to cultivate a healthy workplace that embraces diversity in both people and ideas,\u201d<\/em> emphasizes Christian Daigle. <em>\u201cIf we all share the same perspective and think identically, we\u2019ll continue producing the same outcomes. Diversity drives innovation.\u201d<\/em><\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Building on People\u2019s Strengths<\/strong><\/h2>\n\n\n\n<p>Thanks to its strong and caring employer brand, Frima has come to attract talent from all horizons. This inclusive approach empowers the company to develop increasingly innovative and engaging products, setting it apart in a rapidly evolving industry.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>From Startup to Leader: Christian Daigle Tells the Story of How Frima\u2019s Vision Became Reality When Christian Daigle founded Frima with Philippe B\u00e9gin and Steve Couture in&#8230;<\/p>\n","protected":false},"author":12,"featured_media":3136,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"categories":[114,50],"tags":[160],"class_list":["post-3128","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-studio-life","category-vie-de-studio-en","tag-frima"],"acf":[],"_links":{"self":[{"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/posts\/3128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/comments?post=3128"}],"version-history":[{"count":3,"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/posts\/3128\/revisions"}],"predecessor-version":[{"id":3143,"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/posts\/3128\/revisions\/3143"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/media\/3136"}],"wp:attachment":[{"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/media?parent=3128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/categories?post=3128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/frimastudio.com\/en\/wp-json\/wp\/v2\/tags?post=3128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}